Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5b415c851b | ||
|
|
95fb392692 | ||
|
|
f2453834ac | ||
|
|
3064cdd371 | ||
|
|
417fed8605 | ||
|
|
4eca27498c | ||
|
|
d962ecd77f | ||
|
|
6feb35c079 | ||
|
|
ea90ce8784 | ||
|
|
4a42d683af | ||
|
|
8faa48fe12 | ||
|
|
67c4fae32b | ||
|
|
42d31901b5 | ||
|
|
72b22a73b6 | ||
|
|
4d30503cb5 | ||
|
|
7b45a0fbfe | ||
|
|
42dee10dbe | ||
|
|
68be12d166 | ||
|
|
fd896c29b5 | ||
|
|
98a4be643e | ||
|
|
b650a89728 | ||
|
|
346dba4969 | ||
|
|
f3b858ca21 | ||
|
|
5bc355f9a5 | ||
|
|
21fa26a1be | ||
|
|
66372271c2 | ||
|
|
e60926f847 | ||
|
|
b04df1d54d | ||
|
|
83f81f4586 | ||
|
|
4785086e2f | ||
|
|
98c38fe58f | ||
|
|
44378fe9d1 | ||
|
|
afcca947e3 | ||
|
|
20526756db | ||
|
|
58724f93c9 | ||
|
|
5d6c68a9cf | ||
|
|
ed4c49090a | ||
|
|
75dc5f226c | ||
|
|
020b663836 | ||
|
|
e5f0dd7dd8 | ||
|
|
4f34adbd44 | ||
|
|
62b72a03c4 | ||
|
|
5696e4a4c6 | ||
|
|
814e264521 | ||
|
|
872ed4b2f9 | ||
|
|
1d8633e7e6 | ||
|
|
b3637f2781 | ||
|
|
68d3cdae58 | ||
|
|
620a362244 | ||
|
|
d5cff1ec48 | ||
|
|
8d7714760c | ||
|
|
a37723f8a4 | ||
|
|
e3a727edec | ||
|
|
4ee88e026e | ||
|
|
55a2473d81 | ||
|
|
ba754cfaea | ||
|
|
7a8011f887 | ||
|
|
125231beff | ||
|
|
f70e47a012 | ||
|
|
0c34566aef | ||
|
|
f29d7daa1d | ||
|
|
0120c73a80 | ||
|
|
194b6ad46e | ||
|
|
158ddadf54 | ||
|
|
9fb0ef7eb2 | ||
|
|
503be10d36 | ||
|
|
3021f1cbe1 | ||
|
|
c66eba217b | ||
|
|
8486ccbaa8 | ||
|
|
03d7fc02ec | ||
|
|
ddd00a27a9 | ||
|
|
b31c42acc4 | ||
|
|
616903114f | ||
|
|
6e6e7ded82 | ||
|
|
6c7e1ed3ae | ||
|
|
d896f6dbcf | ||
|
|
5e963375cb | ||
|
|
57119868bb | ||
|
|
7b445dfc93 | ||
|
|
5f27a76312 | ||
|
|
b34960d1bd | ||
|
|
ff550e9110 | ||
|
|
0fcfc3a340 | ||
|
|
f95d19ab49 | ||
|
|
50744dead8 | ||
|
|
a0e5737e4c | ||
|
|
ecd9b9b5f4 | ||
|
|
389ed2f1ad | ||
|
|
273dc5223b | ||
|
|
db32f595fe | ||
|
|
4d967360b2 | ||
|
|
f14dce2f19 | ||
|
|
82f73ab58c | ||
|
|
0b52ba4ded | ||
|
|
e0046032e8 | ||
|
|
f094efa929 | ||
|
|
6ce8eeee6c | ||
|
|
be70c02922 | ||
|
|
a61afda39e | ||
|
|
126ab58e03 | ||
|
|
ca95bba358 | ||
|
|
6407893aa6 | ||
|
|
45ed9b426f | ||
|
|
11d6b77bb1 | ||
|
|
f248dada3f | ||
|
|
a56988c487 | ||
|
|
74b5bdf2aa | ||
|
|
753d5b953d | ||
|
|
ea26f70669 | ||
|
|
682c23e011 | ||
|
|
d4a307f66d | ||
|
|
7c9bf3ce0f | ||
|
|
6cbd4cabc7 | ||
|
|
10b953041f | ||
|
|
36fb31c138 | ||
|
|
3f2490e64d | ||
|
|
37065c1d50 | ||
|
|
9764e03a37 | ||
|
|
0f5226f814 | ||
|
|
3b9f2ca7c2 | ||
|
|
7953e5a52a | ||
|
|
9617c78798 | ||
|
|
28f21487b0 | ||
|
|
4567f08a0b | ||
|
|
b0281e1941 | ||
|
|
efed77b474 | ||
|
|
a70b97676a | ||
|
|
7b54983ec2 | ||
|
|
bc2fcef7c4 | ||
|
|
750349053c | ||
|
|
bfbe32e1ec | ||
|
|
ccfaf879dd | ||
|
|
ebd32af5c1 | ||
|
|
43ea7d761e | ||
|
|
a715e30cba | ||
|
|
8633bd8974 | ||
|
|
9474bee7fa | ||
|
|
92b86ada39 | ||
|
|
03bea6e406 | ||
|
|
6183402754 | ||
|
|
663ba26d4d | ||
|
|
510407467c | ||
|
|
b477fc1b1c | ||
|
|
58155288fb | ||
|
|
dd0682328b | ||
|
|
d1ab787215 | ||
|
|
71d32c6bc8 | ||
|
|
3acc9d4468 | ||
|
|
d5403bbfc5 | ||
|
|
583c369233 | ||
|
|
96efa659a8 | ||
|
|
87af5ecb36 | ||
|
|
3d39793cbf | ||
|
|
79d4cd83b1 | ||
|
|
9bc8040634 | ||
|
|
93ae815946 | ||
|
|
be5f435bc5 | ||
|
|
8a74210c60 | ||
|
|
629a6f0103 | ||
|
|
2522a98f7d | ||
|
|
0ff5ce8fde | ||
|
|
5084102e6e | ||
|
|
b7c5ba3d1b | ||
|
|
e5b9d41e67 | ||
|
|
007c064672 | ||
|
|
3f0600fed7 |
No files matched your search
@@ -6,7 +6,7 @@ ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
ENV \
|
||||
DEBUG=false \
|
||||
NODE_VERSION=8.16.0 \
|
||||
NODE_VERSION=8.16.1 \
|
||||
METEOR_RELEASE=1.8.1 \
|
||||
USE_EDGE=false \
|
||||
METEOR_EDGE=1.5-beta.17 \
|
||||
@@ -144,11 +144,13 @@ RUN set -o xtrace \
|
||||
&& printf "\n[-] Installing Meteor $METEOR_VERSION...\n\n" \
|
||||
&& sh /home/wekan/install-meteor.sh
|
||||
|
||||
ENV PATH=$PATH:$HOME/.meteor/
|
||||
ENV PATH=$PATH:/home/wekan/.meteor/
|
||||
|
||||
# Copy source dir
|
||||
USER root
|
||||
|
||||
RUN echo "export PATH=$PATH" >> /etc/environment
|
||||
|
||||
RUN set -o xtrace \
|
||||
&& mkdir /home/wekan/app
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// See https://aka.ms/vscode-remote/devcontainer.json for format details.
|
||||
{
|
||||
"dockerComposeFile": "docker-compose.yml",
|
||||
"dockerComposeFile": ["docker-compose.yml", "docker-compose.extend.yml"],
|
||||
"service": "wekan-dev",
|
||||
"workspaceFolder": "/home/wekan/app",
|
||||
"extensions": [
|
||||
|
||||
@@ -3,7 +3,7 @@ version: '3.7'
|
||||
services:
|
||||
|
||||
wekandb-dev:
|
||||
image: mongo:4.0.11
|
||||
image: mongo:4.0.12
|
||||
container_name: wekan-dev-db
|
||||
restart: unless-stopped
|
||||
command: mongod --smallfiles --oplogSize 128
|
||||
@@ -29,9 +29,6 @@ services:
|
||||
environment:
|
||||
- MONGO_URL=mongodb://wekandb-dev:27017/wekan
|
||||
- ROOT_URL=http://localhost:3000
|
||||
#- 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>
|
||||
- WITH_API=true
|
||||
- RICHER_CARD_COMMENT_EDITOR=true
|
||||
- BROWSER_POLICY_ENABLED=true
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
custom: ['https://wekan.team/commercial-support/']
|
||||
@@ -7,8 +7,9 @@ Other Wekan issues can be added here.
|
||||
|
||||
**Server Setup Information**:
|
||||
|
||||
* Note: Please anonymize info, and do not add to this public issue any of your Wekan board URLs, passwords, API tokens etc, do you understand?:
|
||||
* Did you test in newest Wekan?:
|
||||
* For new Wekan install, did you configure root-url correctly https://github.com/wekan/wekan/wiki/Settings ?
|
||||
* For new Wekan install, did you configure root-url correctly so Wekan cards open correctly https://github.com/wekan/wekan/wiki/Settings ?
|
||||
* Wekan version:
|
||||
* If this is about old version of Wekan, what upgrade problem you have?:
|
||||
* Operating System:
|
||||
@@ -16,13 +17,12 @@ Other Wekan issues can be added here.
|
||||
* Http frontend if any (Caddy, Nginx, Apache, see config examples from Wekan GitHub wiki first):
|
||||
* Node Version:
|
||||
* MongoDB Version:
|
||||
* ROOT_URL environment variable http(s)://(subdomain).example.com(/suburl):
|
||||
* Wekan only works on newest desktop Firefox/Chromium/Chrome/Edge/Chromium Edge and mobile Chrome. What webbrowser version are you using?
|
||||
|
||||
**Problem description**:
|
||||
- *REQUIRED: Add recorded animated gif about how it works currently, and screenshot mockups how it should work. Use peek to record animgif in Linux https://github.com/phw/peek*
|
||||
- *Explain steps how to reproduce*
|
||||
- *In webbrowser, what does show Right Click / Inspect / Console ? Chrome shows more detailed info than Firefox.*
|
||||
- *If using Snap, what does show command `sudo snap logs wekan.wekan` ?*
|
||||
- *If using Docker, what does show command `sudo docker logs wekan-app` ?*
|
||||
- *If using Snap, what does show command `sudo snap logs wekan.wekan` ? Please anonymize logs.*
|
||||
- *If using Docker, what does show command `sudo docker logs wekan-app` ? Please anonymize logs.*
|
||||
- *If logs are very long, attach them in .zip file*
|
||||
@@ -31,3 +31,4 @@ ehthumbs.db
|
||||
.eslintcache
|
||||
.meteor/local
|
||||
.meteor-1.6-snap/.meteor/local
|
||||
.devcontainer/docker-compose.extend.yml
|
||||
+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 = bg_BG:bg, en_GB:en-GB, es_AR:es-AR, el_GR:el, fi_FI:fi, hu_HU:hu, id_ID:id, mn_MN:mn, no:nb, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, zh_CN:zh-CN, zh_TW:zh-TW, zh_HK:zh-HK
|
||||
lang_map = bg_BG:bg, en_GB:en-GB, es_AR:es-AR, el_GR:el, fi_FI:fi, hu_HU:hu, id_ID:id, mn_MN:mn, no:nb, 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
|
||||
|
||||
[wekan.application]
|
||||
file_filter = i18n/<lang>.i18n.json
|
||||
|
||||
+214
@@ -1,3 +1,217 @@
|
||||
# v3.48 2019-10-09 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Make possible to upload attachments using drag-and-drop or Ctrl+V without setting the environmental-variable MAX_IMAGE_PIXEL](https://github.com/wekan/wekan/pull/2754).
|
||||
Thanks to moserben16.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.47 2019-10-09 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [REST API: fix handling of members property on card creation](https://github.com/wekan/wekan/pull/2751).
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.46 2019-10-07 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [More black minicard badges](https://github.com/wekan/wekan/commit/68be12d166b21a41b4e2c4021b0966807e5ed1e6).
|
||||
Thanks to sfahrenholz and xet7.
|
||||
- [REST API: fix creation of Checklists](https://github.com/wekan/wekan/pull/2747).
|
||||
Thanks to liske.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.45 2019-10-03 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Cards due timeline will be shown in Calendar view](https://github.com/wekan/wekan/pull/2738).
|
||||
Thanks to whowillcare.
|
||||
- [Modified due day reminders in cards.js, so wekan server admin can control the reminder more flexibly](https://github.com/wekan/wekan/pull/2738).
|
||||
i.e. NOTIFY_DUE_DAYS_BEFORE_AND_AFTER = 0 notification will be sent on due day only.
|
||||
NOTIFY_DUE_DAYS_BEFORE_AND_AFTER = 2,0 it means notification will be sent on both due day and two days before.
|
||||
Thanks to whowillcare.
|
||||
- [Added modifications the help files, related to NOTIFY_DUE_DAYS_BEFORE_AND_AFTER](https://github.com/wekan/wekan/pull/2740).
|
||||
Thanks to whowillcare.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Modified list.style regarding .list-header-name when in mobile mode. It was too close to left arrow](https://github.com/wekan/wekan/pull/2740).
|
||||
Thanks to whowillcare.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.44 2019-09-17 Wekan release
|
||||
|
||||
This release adds the following languages:
|
||||
|
||||
- [Add language: Slovenian](https://github.com/wekan/wekan/commit/125231beff0fb84a18a46fe246fa12e098246985).
|
||||
Thanks to translators.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fix: in richer editor @ autocomplete doesn't really insert the username properly](https://github.com/wekan/wekan/pull/2717).
|
||||
Thanks to whowillcare.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.43 2019-09-17 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [In richer editor, @user might not get pickup correctly, if it's formated](https://github.com/wekan/wekan/pull/2715).
|
||||
Thanks to whowillcare.
|
||||
- [Table content should have word-wrap](https://github.com/wekan/wekan/pull/2715).
|
||||
Thanks to whowillcare.
|
||||
- [Two-way hooks locking mechanism will fail sometime, therefore, change all comment insert or update to direct, which means it won't invoke any hook](https://github.com/wekan/wekan/pull/2715).
|
||||
Thanks to whowillcare.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.42 2019-09-14 Wekan release
|
||||
|
||||
This release removed the following new features:
|
||||
|
||||
- [Revert drag handle changes of Wekan v3.41](https://github.com/wekan/wekan/commit/57119868bbb49f47c7d0b51b9952df9bd83d46f5).
|
||||
Thanks to Keelan.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.41 2019-09-13 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [More Mobile and Desktop drag handles for Swimlanes/Lists/Cards. Part 1](https://github.com/wekan/wekan/commit/ff550e91103115e7b731dd80c4588b93b2d4c64f).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.40 2019-09-11 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fix subcard selector](https://github.com/wekan/wekan/pull/2697).
|
||||
Thanks to justinr1234.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.39 2019-09-11 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [To load all boards, revert Wekan v3.37 Fix Linked cards make load all cards of database](https://github.com/wekan/wekan/commit/6ce8eeee6c477cd39b684c47bf122b5872818ada).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.38 2019-09-11 Wekan release
|
||||
|
||||
- Update translations. Thanks to translators.
|
||||
|
||||
# v3.37 2019-09-07 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- LDAP: [Fix USERDN example, when parameters contain spaces](https://github.com/wekan/wekan/commit/6cbd4cabc716c755e547abb798f657fe5476ed04).
|
||||
LDAP_AUTHENTIFICATION_USERDN="CN=ldap admin,CN=users,DC=domainmatter,DC=lan" .
|
||||
Thanks to compumatter.
|
||||
- [Fix: Linked cards make load all cards of database](https://github.com/wekan/wekan/commit/a56988c487745b2879cebe1943e7a987016e8bef).
|
||||
Thanks to Akuket.
|
||||
- [Fix Unable to drag select text without closing card details](https://github.com/wekan/wekan/pull/2690).
|
||||
Thanks to justinr1234.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.36 2019-09-05 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Complete the original author's webhook functions and add two-way webhook type](https://github.com/wekan/wekan/pull/2665):
|
||||
1. Make webhook function more complete by allowing user to specify name and token of
|
||||
a webhook to increase security.
|
||||
1. Allow wekan admin to sepcify a global webhook.
|
||||
3. Add new type of two-way webhook that can act on the JSON webhook return payload:
|
||||
3.1. If the payload data contains cardId, boardId, and comment key words,
|
||||
3.2. If it has commentId, an existing comment will be modified
|
||||
3.3. If it doesn't have commentId, then a new comment will be added, otherwise, does nothing.
|
||||
Thanks to whowillcare.
|
||||
- [Patch admin search feature to Search in all users, not just "loaded" users
|
||||
in the client](https://github.com/wekan/wekan/pull/2667).
|
||||
Thanks to Akuket.
|
||||
- [Devcontainer: Moved MAIL-Vars to not-committed file, and added PATH with meteor to
|
||||
Environment](https://github.com/wekan/wekan/pull/2672).
|
||||
Thanks to road42.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fix incorrect date types for created and updated, so now newest card comments are at top](https://github.com/wekan/wekan/pull/2679).
|
||||
Thanks to justinr1234.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.35 2019-08-29 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Try to fix Snap](https://github.com/wekan/wekan/commit/71d32c6bc8e6affd345026797ff31e94a0a10d77).
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.34 2019-08-29 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Snap: Delete all .swp files](https://github.com/wekan/wekan/commit/d5403bbfc53390aeaaf68eb452bc24d88f1e0942).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.33 2019-08-29 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Add card color to calendar event. The color of the calendar event will match the card
|
||||
color](https://github.com/wekan/wekan/pull/2664).
|
||||
Thanks to grmpfhmbl.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.32 2019-08-29 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fix Snap adopt-info](https://github.com/wekan/wekan/commit/79d4cd83b1fa83bb814230683b7449ed7f3e1ede).
|
||||
Thanks to [popey at Snapcraft forum](https://forum.snapcraft.io/t/dirty-snap-release/12975/12).
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.31 2019-08-29 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Try](https://github.com/wekan/wekan/commit/be5f435bc5f500b24bc838ac1dc8bf3bb9a33a22) to
|
||||
[fix adopt-info](https://forum.snapcraft.io/t/dirty-snap-release/12975/8).
|
||||
Thanks to ogra at Snapcraft forum.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.30 2019-08-29 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- Snap: [Change version-script to adopt-info](https://github.com/wekan/wekan/commit/0ff5ce8fde6cc9a05a3c8b93e18ebce7282d3a67)
|
||||
to [fix dirty](https://forum.snapcraft.io/t/dirty-snap-release/12975/4).
|
||||
Thanks to popey and daniel at Snapcraft forum.
|
||||
- [Delete another phantomjs binary from Snap](https://github.com/wekan/wekan/commit/5084102e6e17fa2cb3bc8c1180745e15379fab5f).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.29 2019-08-29 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
@@ -54,13 +54,12 @@ that by providing one-click installation on various platforms.
|
||||
- [Features][features]: Wekan has real-time user interface.
|
||||
- [Platforms][platforms]: Wekan supports many platforms.
|
||||
Wekan is critical part of new platforms Wekan is currently being integrated to.
|
||||
- [Integrations][integrations]: Current possible integrations and future plans.
|
||||
|
||||
## Requirements
|
||||
|
||||
- 64bit: Linux [Snap](https://github.com/wekan/wekan-snap/wiki/Install) or [Sandstorm](https://sandstorm.io) /
|
||||
[Mac](https://github.com/wekan/wekan/wiki/Mac) / [Windows](https://github.com/wekan/wekan/wiki/Install-Wekan-from-source-on-Windows).
|
||||
[More Platforms](https://github.com/wekan/wekan/wiki/Platforms). [ARM progress](https://github.com/wekan/wekan/issues/1053#issuecomment-410919264).
|
||||
[More Platforms](https://github.com/wekan/wekan/wiki/Platforms), bundle for RasPi3 ARM and other CPUs where Node.js and MongoDB exists.
|
||||
- 1 GB RAM minimum free for Wekan. Production server should have minimum total 4 GB RAM.
|
||||
For thousands of users, for example with [Docker](https://github.com/wekan/wekan/blob/devel/docker-compose.yml): 3 frontend servers,
|
||||
each having 2 CPU and 2 wekan-app containers. One backend wekan-db server with many CPUs.
|
||||
@@ -74,41 +73,25 @@ that by providing one-click installation on various platforms.
|
||||
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.
|
||||
|
||||
## Roadmap
|
||||
## Roadmap and Demo
|
||||
|
||||
[Roadmap Milestones](https://github.com/wekan/wekan/milestones)
|
||||
[Roadmap][roadmap_wekan] - Public read-only board at Wekan demo.
|
||||
|
||||
[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).
|
||||
- [Please add Add new Feature Requests and Bug Reports immediately](https://github.com/wekan/wekan/issues).
|
||||
- [Commercial Support](https://wekan.team).
|
||||
- [Bounties](https://wekan.team/bounties/index.html).
|
||||
- [Commercial Support](https://wekan.team/commercial-support/).
|
||||
|
||||
We also welcome sponsors for features and bugfixes.
|
||||
By working directly with Wekan you get the benefit of active maintenance and new features added by growing Wekan developer community.
|
||||
|
||||
## Demo
|
||||
|
||||
[Wekan demo][roadmap_wefork]
|
||||
|
||||
## Screenshot
|
||||
|
||||
[More screenshots at Features page](https://github.com/wekan/wekan/wiki/Features)
|
||||
|
||||
[![Screenshot of Wekan][screenshot_wefork]][roadmap_wefork]
|
||||
|
||||
## Stable
|
||||
|
||||
- master+devel branch. At release, devel is merged to master.
|
||||
- Receives fixes and features that have been tested at edge that they work.
|
||||
- If you want automatic updates, [use Snap](https://github.com/wekan/wekan-snap/wiki/Install).
|
||||
- If you want to test before update, [use Docker quay.io release tags](https://github.com/wekan/wekan/wiki/Docker).
|
||||
|
||||
## Edge
|
||||
|
||||
- edge branch. All new fixes and features are added to here first. [Testing Edge](https://github.com/wekan/wekan-snap/wiki/Snap-Developer-Docs).
|
||||
[![Screenshot of Wekan][screenshot_wekan]][roadmap_wekan]
|
||||
|
||||
## License
|
||||
|
||||
@@ -117,14 +100,11 @@ with [Meteor](https://www.meteor.com).
|
||||
|
||||
[platforms]: https://github.com/wekan/wekan/wiki/Platforms
|
||||
[dev_docs]: https://github.com/wekan/wekan/wiki/Developer-Documentation
|
||||
[screenshot_wekan]: http://i.imgur.com/cI4jW2h.png
|
||||
[screenshot_wefork]: https://wekan.github.io/wekan-markdown.png
|
||||
[screenshot_wekan]: https://wekan.github.io/wekan-markdown.png
|
||||
[features]: https://github.com/wekan/wekan/wiki/Features
|
||||
[integrations]: https://github.com/wekan/wekan/wiki/Integrations
|
||||
[roadmap_wekan]: http://try.wekan.io/b/MeSsFJaSqeuo9M6bs/wekan-roadmap
|
||||
[roadmap_wefork]: https://wekan.indie.host/b/t2YaGmyXgNkppcFBq/wekan-fork-roadmap
|
||||
[roadmap_wekan]: https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license
|
||||
[wekan_issues]: https://github.com/wekan/wekan/issues
|
||||
[wekan_issues]: https://github.com/wekan/wekan/issues
|
||||
[wefork_issues]: https://github.com/wefork/wekan/issues
|
||||
[docker_image]: https://hub.docker.com/r/wekanteam/wekan/
|
||||
[travis_badge]: https://travis-ci.org/wekan/wekan.svg?branch=devel
|
||||
[travis_status]: https://travis-ci.org/wekan/wekan
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
||||
appVersion: "v3.29.0"
|
||||
appVersion: "v3.48.0"
|
||||
files:
|
||||
userUploads:
|
||||
- README.md
|
||||
|
||||
@@ -309,25 +309,46 @@ BlazeComponent.extendComponent({
|
||||
events(start, end, timezone, callback) {
|
||||
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||
const events = [];
|
||||
const pushEvent = function(card, title, start, end, extraCls) {
|
||||
start = start || card.startAt;
|
||||
end = end || card.endAt;
|
||||
title = title || card.title;
|
||||
const className =
|
||||
(extraCls ? `${extraCls} ` : '') +
|
||||
(card.color ? `calendar-event-${card.color}` : '');
|
||||
events.push({
|
||||
id: card._id,
|
||||
title,
|
||||
start,
|
||||
end: end || card.endAt,
|
||||
allDay:
|
||||
Math.abs(end.getTime() - start.getTime()) / 1000 === 24 * 3600,
|
||||
url: FlowRouter.url('card', {
|
||||
boardId: currentBoard._id,
|
||||
slug: currentBoard.slug,
|
||||
cardId: card._id,
|
||||
}),
|
||||
className,
|
||||
});
|
||||
};
|
||||
currentBoard
|
||||
.cardsInInterval(start.toDate(), end.toDate())
|
||||
.forEach(function(card) {
|
||||
events.push({
|
||||
id: card._id,
|
||||
title: card.title,
|
||||
start: card.startAt,
|
||||
end: card.endAt,
|
||||
allDay:
|
||||
Math.abs(card.endAt.getTime() - card.startAt.getTime()) /
|
||||
1000 ===
|
||||
24 * 3600,
|
||||
url: FlowRouter.url('card', {
|
||||
boardId: currentBoard._id,
|
||||
slug: currentBoard.slug,
|
||||
cardId: card._id,
|
||||
}),
|
||||
});
|
||||
pushEvent(card);
|
||||
});
|
||||
currentBoard
|
||||
.cardsDueInBetween(start.toDate(), end.toDate())
|
||||
.forEach(function(card) {
|
||||
pushEvent(
|
||||
card,
|
||||
`${card.title} ${TAPi18n.__('card-due')}`,
|
||||
card.dueAt,
|
||||
new Date(card.dueAt.getTime() + 36e5),
|
||||
);
|
||||
});
|
||||
events.sort(function(first, second) {
|
||||
return first.id > second.id ? 1 : -1;
|
||||
});
|
||||
callback(events);
|
||||
},
|
||||
eventResize(event, delta, revertFunc) {
|
||||
|
||||
@@ -53,3 +53,81 @@ position()
|
||||
padding: 0 0px 0px 0
|
||||
overflow-x: hidden
|
||||
overflow-y: auto
|
||||
|
||||
calendar-event-color(background, borderColor, color...)
|
||||
background: background !important
|
||||
border-color: borderColor
|
||||
if color
|
||||
color: color !important //overwrite text for better visibility
|
||||
|
||||
.calendar-event-green
|
||||
calendar-event-color(#3cb500, #2a8000, #ffffff) //White text for better visibility
|
||||
|
||||
.calendar-event-yellow
|
||||
calendar-event-color(#fad900, #c7ac00, #000) //Black text for better visibility
|
||||
|
||||
.calendar-event-orange
|
||||
calendar-event-color(#ff9f19, #cc7c14, #000) //Black text for better visibility
|
||||
|
||||
.calendar-event-red
|
||||
calendar-event-color(#eb4646, #b83737, #ffffff) //White text for better visibility
|
||||
|
||||
.calendar-event-purple
|
||||
calendar-event-color(#a632db, #7d26a6, #ffffff) //White text for better visibility
|
||||
|
||||
.calendar-event-blue
|
||||
calendar-event-color(#0079bf, #005a8a, #ffffff) //White text for better visibility
|
||||
|
||||
.calendar-event-pink
|
||||
calendar-event-color(#ff78cb, #cc62a3, #000) //Black text for better visibility
|
||||
|
||||
.calendar-event-sky
|
||||
calendar-event-color(#00c2e0, #0094ab, #ffffff) //White text for better visibility
|
||||
|
||||
.calendar-event-black
|
||||
calendar-event-color(#4d4d4d, #1a1a1a, #ffffff) //White text for better visibility
|
||||
|
||||
.calendar-event-lime
|
||||
calendar-event-color(#51e898, #3eb375, #000) //Black text for better visibility
|
||||
|
||||
.calendar-event-silver
|
||||
calendar-event-color(#c0c0c0, #8c8c8c, #000) //Black text for better visibility
|
||||
|
||||
.calendar-event-peachpuff
|
||||
calendar-event-color(#ffdab9, #ccaf95, #000) //Black text for better visibility
|
||||
|
||||
.calendar-event-crimson
|
||||
calendar-event-color(#dc143c, #a8112f, #ffffff) //White text for better visibility
|
||||
|
||||
.calendar-event-plum
|
||||
calendar-event-color(#dda0dd, #a87ba8, #000) //Black text for better visibility
|
||||
|
||||
.calendar-event-darkgreen
|
||||
calendar-event-color(#006400, #003000, #ffffff) //White text for better visibility
|
||||
|
||||
.calendar-event-slateblue
|
||||
calendar-event-color(#6a5acd, #4f4399, #ffffff) //White text for better visibility
|
||||
|
||||
.calendar-event-magenta
|
||||
calendar-event-color(#ff00ff, #cc00cc, #ffffff) //White text for better visibility
|
||||
|
||||
.calendar-event-gold
|
||||
calendar-event-color(#ffd700, #ccaa00, #000) //Black text for better visibility
|
||||
|
||||
.calendar-event-navy
|
||||
calendar-event-color(#000080, #000033, #ffffff) //White text for better visibility
|
||||
|
||||
.calendar-event-gray
|
||||
calendar-event-color(#808080, #333333, #ffffff) //White text for better visibility
|
||||
|
||||
.calendar-event-saddlebrown
|
||||
calendar-event-color(#8b4513, #572b0c, #ffffff) //White text for better visibility
|
||||
|
||||
.calendar-event-paleturquoise
|
||||
calendar-event-color(#afeeee, #8ababa, #000) //Black text for better visibility
|
||||
|
||||
.calendar-event-mistyrose
|
||||
calendar-event-color(#ffe4e1, #ccb8b6, #000) //Black text for better visibility
|
||||
|
||||
.calendar-event-indigo
|
||||
calendar-event-color(#4b0082, #2b004d, #ffffff) //White text for better visibility
|
||||
@@ -131,6 +131,8 @@ Template.previewClipboardImagePopup.onRendered(() => {
|
||||
direct(results);
|
||||
},
|
||||
});
|
||||
} else {
|
||||
direct(results);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -321,6 +321,19 @@ BlazeComponent.extendComponent({
|
||||
parentComponent.showOverlay.set(true);
|
||||
parentComponent.mouseHasEnterCardDetails = true;
|
||||
},
|
||||
'mousedown .js-card-details'() {
|
||||
Session.set('cardDetailsIsDragging', false);
|
||||
Session.set('cardDetailsIsMouseDown', true);
|
||||
},
|
||||
'mousemove .js-card-details'() {
|
||||
if (Session.get('cardDetailsIsMouseDown')) {
|
||||
Session.set('cardDetailsIsDragging', true);
|
||||
}
|
||||
},
|
||||
'mouseup .js-card-details'() {
|
||||
Session.set('cardDetailsIsDragging', false);
|
||||
Session.set('cardDetailsIsMouseDown', false);
|
||||
},
|
||||
'click #toggleButton'() {
|
||||
Meteor.call('toggleSystemMessages');
|
||||
},
|
||||
@@ -777,7 +790,14 @@ BlazeComponent.extendComponent({
|
||||
EscapeActions.register(
|
||||
'detailsPane',
|
||||
() => {
|
||||
Utils.goBoardId(Session.get('currentBoard'));
|
||||
if (Session.get('cardDetailsIsDragging')) {
|
||||
// Reset dragging status as the mouse landed outside the cardDetails template area and this will prevent a mousedown event from firing
|
||||
Session.set('cardDetailsIsDragging', false);
|
||||
Session.set('cardDetailsIsMouseDown', false);
|
||||
} else {
|
||||
// Prevent close card when the user is selecting text and moves the mouse cursor outside the card detail area
|
||||
Utils.goBoardId(Session.get('currentBoard'));
|
||||
}
|
||||
},
|
||||
() => {
|
||||
return !Session.equals('currentCard', null);
|
||||
|
||||
@@ -105,7 +105,8 @@
|
||||
right: 5px;
|
||||
top: 5px;
|
||||
display:none;
|
||||
@media only screen and (max-width: 1199px) {
|
||||
// @media only screen and (max-width: 1199px) {
|
||||
@media only screen and (max-width: 800px) {
|
||||
display:block;
|
||||
}
|
||||
.fa-arrows
|
||||
@@ -127,7 +128,7 @@
|
||||
.badges
|
||||
float: left
|
||||
margin-top: 7px
|
||||
color: darken(white, 50%)
|
||||
color: darken(white, 80%)
|
||||
|
||||
&:empty
|
||||
display: none
|
||||
|
||||
@@ -31,7 +31,7 @@ BlazeComponent.extendComponent({
|
||||
const itemsSelector = '.js-minicard:not(.placeholder, .js-card-composer)';
|
||||
const $cards = this.$('.js-minicards');
|
||||
|
||||
if (window.matchMedia('(max-width: 1199px)').matches) {
|
||||
if (Utils.isMiniScreen()) {
|
||||
$('.js-minicards').sortable({
|
||||
handle: '.handle',
|
||||
});
|
||||
|
||||
@@ -94,7 +94,13 @@ Template.editor.onRendered(() => {
|
||||
currentBoard
|
||||
.activeMembers()
|
||||
.map(member => {
|
||||
const username = Users.findOne(member.userId).username;
|
||||
const user = Users.findOne(member.userId);
|
||||
if (user._id === Meteor.userId()) {
|
||||
return null;
|
||||
}
|
||||
const value = user.username;
|
||||
const username =
|
||||
value && value.match(/\s+/) ? `"${value}"` : value;
|
||||
return username.includes(term) ? username : null;
|
||||
})
|
||||
.filter(Boolean),
|
||||
@@ -120,9 +126,10 @@ Template.editor.onRendered(() => {
|
||||
? [
|
||||
['view', ['fullscreen']],
|
||||
['table', ['table']],
|
||||
['font', ['bold', 'underline']],
|
||||
//['fontsize', ['fontsize']],
|
||||
['font', ['bold']],
|
||||
['color', ['color']],
|
||||
['insert', ['video']], // iframe tag will be sanitized TODO if iframe[class=note-video-clip] can be added into safe list, insert video can be enabled
|
||||
//['fontsize', ['fontsize']],
|
||||
]
|
||||
: [
|
||||
['style', ['style']],
|
||||
@@ -156,25 +163,45 @@ Template.editor.onRendered(() => {
|
||||
}
|
||||
return undefined;
|
||||
};
|
||||
let popupShown = false;
|
||||
inputs.each(function(idx, input) {
|
||||
mSummernotes[idx] = $(input).summernote({
|
||||
placeholder,
|
||||
callbacks: {
|
||||
onKeydown(e) {
|
||||
if (popupShown) {
|
||||
e.preventDefault();
|
||||
}
|
||||
},
|
||||
onKeyup(e) {
|
||||
if (popupShown) {
|
||||
e.preventDefault();
|
||||
}
|
||||
},
|
||||
onInit(object) {
|
||||
const originalInput = this;
|
||||
const setAutocomplete = function(jEditor) {
|
||||
if (jEditor !== undefined) {
|
||||
jEditor.escapeableTextComplete(mentions).on({
|
||||
'textComplete:show'() {
|
||||
popupShown = true;
|
||||
},
|
||||
'textComplete:hide'() {
|
||||
popupShown = false;
|
||||
},
|
||||
});
|
||||
}
|
||||
};
|
||||
$(originalInput).on('submitted', function() {
|
||||
// resetCommentInput has been called
|
||||
if (!this.value) {
|
||||
const sn = getSummernote(this);
|
||||
sn && sn.summernote('reset');
|
||||
object && object.editingArea.find('.note-placeholder').show();
|
||||
sn && sn.summernote('code', '');
|
||||
}
|
||||
});
|
||||
const jEditor = object && object.editable;
|
||||
const toolbar = object && object.toolbar;
|
||||
if (jEditor !== undefined) {
|
||||
jEditor.escapeableTextComplete(mentions);
|
||||
}
|
||||
setAutocomplete(jEditor);
|
||||
if (toolbar !== undefined) {
|
||||
const fBtn = toolbar.find('.btn-fullscreen');
|
||||
fBtn.on('click', function() {
|
||||
@@ -264,7 +291,7 @@ Template.editor.onRendered(() => {
|
||||
const someNote = getSummernote(object);
|
||||
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.
|
||||
someNote.summernote('reset'); //clear original
|
||||
someNote.summernote('code', ''); //clear original
|
||||
someNote.summernote('pasteHTML', cleaned); //this sets the displayed content editor to the cleaned pasted code.
|
||||
};
|
||||
setTimeout(function() {
|
||||
@@ -325,11 +352,12 @@ Blaze.Template.registerHelper(
|
||||
}
|
||||
return member;
|
||||
});
|
||||
const mentionRegex = /\B@([\w.]*)/gi;
|
||||
const mentionRegex = /\B@(?:(?:"([\w.\s]*)")|([\w.]+))/gi; // including space in username
|
||||
|
||||
let currentMention;
|
||||
while ((currentMention = mentionRegex.exec(content)) !== null) {
|
||||
const [fullMention, username] = currentMention;
|
||||
const [fullMention, quoteduser, simple] = currentMention;
|
||||
const username = quoteduser || simple;
|
||||
const knowedUser = _.findWhere(knowedUsers, { username });
|
||||
if (!knowedUser) {
|
||||
continue;
|
||||
|
||||
@@ -381,6 +381,10 @@ a
|
||||
display: block
|
||||
word-wrap: break-word
|
||||
|
||||
table
|
||||
word-wrap: normal
|
||||
word-break: normal
|
||||
|
||||
ol
|
||||
list-style-type: decimal
|
||||
padding-left: 20px
|
||||
|
||||
@@ -17,7 +17,7 @@ BlazeComponent.extendComponent({
|
||||
this.autorun(() => {
|
||||
const limit = this.page.get() * usersPerPage;
|
||||
|
||||
this.subscribe('people', limit, () => {
|
||||
this.subscribe('people', this.findUsersOptions.get(), limit, () => {
|
||||
this.loadNextPageLocked = false;
|
||||
const nextPeakBefore = this.callFirstWith(null, 'getNextPeak');
|
||||
this.calculateNextPeak();
|
||||
@@ -85,7 +85,7 @@ BlazeComponent.extendComponent({
|
||||
const users = Users.find(this.findUsersOptions.get(), {
|
||||
fields: { _id: true },
|
||||
});
|
||||
this.number.set(users.count());
|
||||
this.number.set(users.count(false));
|
||||
return users;
|
||||
},
|
||||
peopleNumber() {
|
||||
|
||||
@@ -18,6 +18,8 @@ template(name="setting")
|
||||
a.js-setting-menu(data-id="announcement-setting") {{_ 'admin-announcement'}}
|
||||
li
|
||||
a.js-setting-menu(data-id="layout-setting") {{_ 'layout'}}
|
||||
li
|
||||
a.js-setting-menu(data-id="webhook-setting") {{_ 'global-webhook'}}
|
||||
.main-body
|
||||
if loading.get
|
||||
+spinner
|
||||
@@ -31,6 +33,12 @@ template(name="setting")
|
||||
+announcementSettings
|
||||
else if layoutSetting.get
|
||||
+layoutSettings
|
||||
else if webhookSetting.get
|
||||
+webhookSettings
|
||||
|
||||
template(name="webhookSettings")
|
||||
span
|
||||
+outgoingWebhooksPopup
|
||||
|
||||
template(name="general")
|
||||
ul#registration-setting.setting-detail
|
||||
|
||||
@@ -7,11 +7,13 @@ BlazeComponent.extendComponent({
|
||||
this.accountSetting = new ReactiveVar(false);
|
||||
this.announcementSetting = new ReactiveVar(false);
|
||||
this.layoutSetting = new ReactiveVar(false);
|
||||
this.webhookSetting = new ReactiveVar(false);
|
||||
|
||||
Meteor.subscribe('setting');
|
||||
Meteor.subscribe('mailServer');
|
||||
Meteor.subscribe('accountSettings');
|
||||
Meteor.subscribe('announcements');
|
||||
Meteor.subscribe('globalwebhooks');
|
||||
},
|
||||
|
||||
setError(error) {
|
||||
@@ -83,6 +85,7 @@ BlazeComponent.extendComponent({
|
||||
this.accountSetting.set('account-setting' === targetID);
|
||||
this.announcementSetting.set('announcement-setting' === targetID);
|
||||
this.layoutSetting.set('layout-setting' === targetID);
|
||||
this.webhookSetting.set('webhook-setting' === targetID);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -135,22 +135,30 @@ template(name="archiveBoardPopup")
|
||||
template(name="outgoingWebhooksPopup")
|
||||
each integrations
|
||||
form.integration-form
|
||||
if title
|
||||
h4 {{title}}
|
||||
else
|
||||
h4 {{_ 'no-name'}}
|
||||
label
|
||||
| URL
|
||||
input.js-outgoing-webhooks-url(type="text" name="url" value=url)
|
||||
input(type="hidden" value=_id name="id")
|
||||
a.flex
|
||||
span {{_ 'disable-webhook'}}
|
||||
b
|
||||
.materialCheckBox(class="{{#unless enabled}}is-checked{{/unless}}")
|
||||
input.js-outgoing-webhooks-title(placeholder="{{_ 'webhook-title'}}" type="text" name="title" value=title)
|
||||
input.js-outgoing-webhooks-url(type="text" name="url" value=url autofocus)
|
||||
input.js-outgoing-webhooks-token(placeholder="{{_ 'webhook-token' }}" type="text" value=token name="token")
|
||||
select.js-outgoing-webhooks-type(name="type")
|
||||
each _type in types
|
||||
if($eq _type this.type)
|
||||
option(value=_type selected="selected") {{_ _type}}
|
||||
else
|
||||
option(value=_type) {{_ _type}}
|
||||
input(type="hidden" value=this.type name="_type")
|
||||
input(type="hidden" value=_id name="id")
|
||||
input.primary.wide(type="submit" value="{{_ 'save'}}")
|
||||
form.integration-form
|
||||
h4
|
||||
| {{_ 'new-outgoing-webhook'}}
|
||||
label
|
||||
| URL
|
||||
input.js-outgoing-webhooks-url(type="text" name="url" autofocus)
|
||||
input.primary.wide(type="submit" value="{{_ 'save'}}")
|
||||
input.js-outgoing-webhooks-title(placeholder="{{_ 'webhook-title'}}" type="text" name="title" autofocus)
|
||||
input.js-outgoing-webhooks-url(placeholder="{{_ 'URL' }}" type="text" name="url")
|
||||
input.js-outgoing-webhooks-token(placeholder="{{_ 'webhook-token' }}" type="text" name="token")
|
||||
select.js-outgoing-webhooks-type(name="type")
|
||||
each _type in types
|
||||
option(value=_type) {{_ _type}}
|
||||
input.primary.wide(type="submit" value="{{_ 'create'}}")
|
||||
|
||||
template(name="boardMenuPopup")
|
||||
ul.pop-over-list
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
Sidebar = null;
|
||||
|
||||
const defaultView = 'home';
|
||||
const MCB = '.materialCheckBox';
|
||||
const CKCLS = 'is-checked';
|
||||
|
||||
const viewTitles = {
|
||||
filter: 'filter-cards',
|
||||
@@ -280,44 +282,71 @@ Template.membersWidget.events({
|
||||
});
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
boardId() {
|
||||
return Session.get('currentBoard') || Integrations.Const.GLOBAL_WEBHOOK_ID;
|
||||
},
|
||||
integrations() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const boardId = this.boardId();
|
||||
return Integrations.find({ boardId: `${boardId}` }).fetch();
|
||||
},
|
||||
|
||||
integration(id) {
|
||||
const boardId = Session.get('currentBoard');
|
||||
return Integrations.findOne({ _id: id, boardId: `${boardId}` });
|
||||
types() {
|
||||
return Integrations.Const.WEBHOOK_TYPES;
|
||||
},
|
||||
integration(cond) {
|
||||
const boardId = this.boardId();
|
||||
const condition = { boardId, ...cond };
|
||||
for (const k in condition) {
|
||||
if (!condition[k]) delete condition[k];
|
||||
}
|
||||
return Integrations.findOne(condition);
|
||||
},
|
||||
onCreated() {
|
||||
this.disabled = new ReactiveVar(false);
|
||||
},
|
||||
|
||||
events() {
|
||||
return [
|
||||
{
|
||||
'click a.flex'(evt) {
|
||||
this.disabled.set(!this.disabled.get());
|
||||
$(evt.target).toggleClass(CKCLS, this.disabled.get());
|
||||
},
|
||||
submit(evt) {
|
||||
evt.preventDefault();
|
||||
const url = evt.target.url.value;
|
||||
const boardId = Session.get('currentBoard');
|
||||
const boardId = this.boardId();
|
||||
let id = null;
|
||||
let integration = null;
|
||||
const title = evt.target.title.value;
|
||||
const token = evt.target.token.value;
|
||||
const type = evt.target.type.value;
|
||||
const enabled = !this.disabled.get();
|
||||
let remove = false;
|
||||
const values = {
|
||||
url,
|
||||
type,
|
||||
token,
|
||||
title,
|
||||
enabled,
|
||||
};
|
||||
if (evt.target.id) {
|
||||
id = evt.target.id.value;
|
||||
integration = this.integration(id);
|
||||
if (url) {
|
||||
Integrations.update(integration._id, {
|
||||
$set: {
|
||||
url: `${url}`,
|
||||
},
|
||||
});
|
||||
} else {
|
||||
Integrations.remove(integration._id);
|
||||
}
|
||||
integration = this.integration({ _id: id });
|
||||
remove = !url;
|
||||
} else if (url) {
|
||||
integration = this.integration({ url, token });
|
||||
}
|
||||
if (remove) {
|
||||
Integrations.remove(integration._id);
|
||||
} else if (integration && integration._id) {
|
||||
Integrations.update(integration._id, {
|
||||
$set: values,
|
||||
});
|
||||
} else if (url) {
|
||||
Integrations.insert({
|
||||
...values,
|
||||
userId: Meteor.userId(),
|
||||
enabled: true,
|
||||
type: 'outgoing-webhooks',
|
||||
url: `${url}`,
|
||||
boardId: `${boardId}`,
|
||||
boardId,
|
||||
activities: ['all'],
|
||||
});
|
||||
}
|
||||
@@ -474,12 +503,12 @@ BlazeComponent.extendComponent({
|
||||
evt.preventDefault();
|
||||
this.currentBoard.allowsSubtasks = !this.currentBoard.allowsSubtasks;
|
||||
this.currentBoard.setAllowsSubtasks(this.currentBoard.allowsSubtasks);
|
||||
$('.js-field-has-subtasks .materialCheckBox').toggleClass(
|
||||
'is-checked',
|
||||
$(`.js-field-has-subtasks ${MCB}`).toggleClass(
|
||||
CKCLS,
|
||||
this.currentBoard.allowsSubtasks,
|
||||
);
|
||||
$('.js-field-has-subtasks').toggleClass(
|
||||
'is-checked',
|
||||
CKCLS,
|
||||
this.currentBoard.allowsSubtasks,
|
||||
);
|
||||
$('.js-field-deposit-board').prop(
|
||||
@@ -515,15 +544,12 @@ BlazeComponent.extendComponent({
|
||||
];
|
||||
options.forEach(function(element) {
|
||||
if (element !== value) {
|
||||
$(`#${element} .materialCheckBox`).toggleClass(
|
||||
'is-checked',
|
||||
false,
|
||||
);
|
||||
$(`#${element}`).toggleClass('is-checked', false);
|
||||
$(`#${element} ${MCB}`).toggleClass(CKCLS, false);
|
||||
$(`#${element}`).toggleClass(CKCLS, false);
|
||||
}
|
||||
});
|
||||
$(`#${value} .materialCheckBox`).toggleClass('is-checked', true);
|
||||
$(`#${value}`).toggleClass('is-checked', true);
|
||||
$(`#${value} ${MCB}`).toggleClass(CKCLS, true);
|
||||
$(`#${value}`).toggleClass(CKCLS, true);
|
||||
this.currentBoard.setPresentParentTask(value);
|
||||
evt.preventDefault();
|
||||
},
|
||||
|
||||
@@ -21,7 +21,15 @@ DatePicker = BlazeComponent.extendComponent({
|
||||
function(evt) {
|
||||
this.find('#date').value = moment(evt.date).format('L');
|
||||
this.error.set('');
|
||||
this.find('#time').focus();
|
||||
const timeInput = this.find('#time');
|
||||
timeInput.focus();
|
||||
if (!timeInput.value) {
|
||||
const currentHour = evt.date.getHours();
|
||||
const defaultMoment = moment(
|
||||
currentHour > 0 ? evt.date : '1970-01-01 08:00:00',
|
||||
); // default to 8:00 am local time
|
||||
timeInput.value = defaultMoment.format('LT');
|
||||
}
|
||||
}.bind(this),
|
||||
);
|
||||
|
||||
|
||||
@@ -45,6 +45,7 @@ $.fn.escapeableTextComplete = function(strategies, options, ...otherArgs) {
|
||||
});
|
||||
},
|
||||
});
|
||||
return this;
|
||||
};
|
||||
|
||||
EscapeActions.register('textcomplete', () => {}, () => dropdownMenuIsOpened, {
|
||||
|
||||
@@ -23,7 +23,6 @@ Utils = {
|
||||
})
|
||||
);
|
||||
},
|
||||
|
||||
MAX_IMAGE_PIXEL: Meteor.settings.public.MAX_IMAGE_PIXEL,
|
||||
COMPRESS_RATIO: Meteor.settings.public.IMAGE_COMPRESS_RATIO,
|
||||
processUploadedAttachment(card, fileObj, callback) {
|
||||
|
||||
+6
-4
@@ -271,8 +271,8 @@ services:
|
||||
# dueat startat endat receivedat, also notification to
|
||||
# the watchers and if any card is due, about due or past due.
|
||||
#
|
||||
# Notify due days, default 2 days before and after. 0 = due notifications disabled. Default: 2
|
||||
#- NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=2
|
||||
# Notify due days, default is None, 2 days before and on the event day
|
||||
#- NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=2,0
|
||||
#
|
||||
# Notify due at hour of day. Default every morning at 8am. Can be 0-23.
|
||||
# If env variable has parsing error, use default. Notification sent to watchers.
|
||||
@@ -426,8 +426,10 @@ services:
|
||||
# If the LDAP needs a user account to search
|
||||
#- LDAP_AUTHENTIFICATION=true
|
||||
#
|
||||
# The search user DN
|
||||
#- LDAP_AUTHENTIFICATION_USERDN=cn=wekan_adm,ou=serviceaccounts,ou=admin,ou=prod,dc=mydomain,dc=com
|
||||
# The search user DN - You need quotes when you have spaces in parameters
|
||||
# 2 examples:
|
||||
#- LDAP_AUTHENTIFICATION_USERDN="CN=ldap admin,CN=users,DC=domainmatter,DC=lan"
|
||||
#- LDAP_AUTHENTIFICATION_USERDN="CN=wekan_adm,OU=serviceaccounts,OU=admin,OU=prod,DC=mydomain,DC=com"
|
||||
#
|
||||
# The password for the search user
|
||||
#- LDAP_AUTHENTIFICATION_PASSWORD=pwd
|
||||
|
||||
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+10
-3
@@ -510,9 +510,14 @@
|
||||
"email-smtp-test-text": "You have successfully sent an email",
|
||||
"error-invitation-code-not-exist": "Invitation code doesn't exist",
|
||||
"error-notAuthorized": "You are not authorized to view this page.",
|
||||
"webhook-title": "Webhook Name",
|
||||
"webhook-token": "Token (Optional for Authentication)",
|
||||
"outgoing-webhooks": "Outgoing Webhooks",
|
||||
"bidirectional-webhooks": "Two-Way Webhooks",
|
||||
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
|
||||
"boardCardTitlePopup-title": "Card Title Filter",
|
||||
"disable-webhook": "Disable This Webhook",
|
||||
"global-webhook": "Global Webhooks",
|
||||
"new-outgoing-webhook": "New Outgoing Webhook",
|
||||
"no-name": "(Unknown)",
|
||||
"Node_version": "Node version",
|
||||
@@ -726,12 +731,14 @@
|
||||
"almostdue": "current due time %s is approaching",
|
||||
"pastdue": "current due time %s is past",
|
||||
"duenow": "current due time %s is today",
|
||||
"act-withDue": "__card__ due reminders [__board__]",
|
||||
"act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
|
||||
"act-withDue": "__list__/__card__ due reminders [__board__]",
|
||||
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
|
||||
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
|
||||
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
|
||||
"act-atUserComment": "You were mentioned in [__board__] __card__",
|
||||
"act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
|
||||
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
|
||||
"accounts-allowUserDelete": "Allow users to self delete their account",
|
||||
"hide-minicard-label-text": "Hide minicard label text"
|
||||
"hide-minicard-label-text": "Hide minicard label text",
|
||||
"show-desktop-drag-handles": "Show desktop drag handles"
|
||||
}
|
||||
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+10
-3
@@ -510,9 +510,14 @@
|
||||
"email-smtp-test-text": "Vous avez envoyé un mail avec succès",
|
||||
"error-invitation-code-not-exist": "Ce code d'invitation n'existe pas.",
|
||||
"error-notAuthorized": "Vous n'êtes pas autorisé à accéder à cette page.",
|
||||
"webhook-title": "Nom du webhook",
|
||||
"webhook-token": "Jeton (optionnel pour l'authentification)",
|
||||
"outgoing-webhooks": "Webhooks sortants",
|
||||
"bidirectional-webhooks": "Webhooks bidirectionnels",
|
||||
"outgoingWebhooksPopup-title": "Webhooks sortants",
|
||||
"boardCardTitlePopup-title": "Filtre par titre de carte",
|
||||
"disable-webhook": "Désactiver ce webhook",
|
||||
"global-webhook": "Webhooks globaux",
|
||||
"new-outgoing-webhook": "Nouveau webhook sortant",
|
||||
"no-name": "(Inconnu)",
|
||||
"Node_version": "Version de Node",
|
||||
@@ -723,12 +728,14 @@
|
||||
"almostdue": "La date d'échéance %s approche",
|
||||
"pastdue": "La date d'échéance %s est passée",
|
||||
"duenow": "La date d'échéance %s est aujourd'hui",
|
||||
"act-withDue": "__card__ rappel d'échéance [__board__]",
|
||||
"act-newDue": "__list__/__card__ a un 1er rappel d'échéance [__board__]",
|
||||
"act-withDue": "__list__/__card__ rappel d'échéance [__board__]",
|
||||
"act-almostdue": "rappelle que l'échéance (__timeValue__) de __card__ approche",
|
||||
"act-pastdue": "rappelle que l'échéance (__timeValue__) de __card__ est passée",
|
||||
"act-duenow": "rappelle que l'échéance (__timeValue__) de __card__ est maintenant",
|
||||
"act-atUserComment": "Vous avez été mentionné dans [__board__] __card__",
|
||||
"act-atUserComment": "Vous avez été mentionné dans [__board__] __list__/__card__",
|
||||
"delete-user-confirm-popup": "Êtes-vous sûr de vouloir supprimer ce compte ? Cette opération ne peut pas être annulée. ",
|
||||
"accounts-allowUserDelete": "Autoriser les utilisateurs à supprimer leur compte",
|
||||
"hide-minicard-label-text": "Cacher le label de la minicarte"
|
||||
"hide-minicard-label-text": "Cacher le label de la minicarte",
|
||||
"show-desktop-drag-handles": "Voir les poignées de déplacement du bureau"
|
||||
}
|
||||
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+402
-395
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,741 @@
|
||||
{
|
||||
"accept": "Sprejmi",
|
||||
"act-activity-notify": "Obvestilo o dejavnosti",
|
||||
"act-addAttachment": "dodal priponko __attachment__ h kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-deleteAttachment": "odstranil priponko __attachment__ iz kartice __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-addSubtask": "dodal podopravilo __subtask__ h kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-addLabel": "Dodal oznako __label__ h kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-addedLabel": "Dodal oznako __label__ h kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-removeLabel": "Odstranil oznako __label__ iz kartice __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-removedLabel": "Odstranil oznako __label__ iz kartice __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-addChecklist": "dodal kontrolni seznam __checklist__ h kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-addChecklistItem": "dodal postavko __checklistItem__ kontrolnega seznama __checklist__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-removeChecklist": "odstranil kontrolni seznam __checklist__ iz kartice __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-removeChecklistItem": "odstranil postavko __checklistItem__ kontrolnega seznama __checklist__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-checkedItem": "obkljukal postavko __checklistItem__ kontrolnega seznama __checklist__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-uncheckedItem": "odkljukal postavko __checklistItem__ kontrolnega seznama __checklist__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-completeChecklist": "dokončal kontrolni seznam __checklist__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-uncompleteChecklist": "nedokončan kontrolni seznam __checklist__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-addComment": "komentiral na kartici __card__: __comment__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-editComment": "uredil komentar na kartici __card__: __comment__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-deleteComment": "izbrisal komentar na kartici __card__: __comment__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-createBoard": "ustvaril tablo __board__",
|
||||
"act-createSwimlane": "ustvaril plavalno stezo __swimlane__ na tabli __board__",
|
||||
"act-createCard": "ustvaril kartico __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-createCustomField": "ustvaril poljubno polje __customField__ na tabli __board__",
|
||||
"act-deleteCustomField": "izbrisal poljubno polje __customField__ na tabli __board__",
|
||||
"act-setCustomField": "uredil poljubno polje __customField__: __customFieldValue__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-createList": "dodal seznam __list__ na tablo __board__",
|
||||
"act-addBoardMember": "dodal člana __member__ k tabli __board__",
|
||||
"act-archivedBoard": "Tabla __board__ premaknjena v arhiv",
|
||||
"act-archivedCard": "Kartica __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__ premaknjena v arhiv",
|
||||
"act-archivedList": "Seznam __list__ na plavalni stezi __swimlane__ na tabli __board__ premaknjen v arhiv",
|
||||
"act-archivedSwimlane": "Plavalna steza __swimlane__ na tabli __board__ premaknjena v arhiv",
|
||||
"act-importBoard": "uvozil tablo __board__",
|
||||
"act-importCard": "uvozil kartico __card__ na seznam __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-importList": "uvozil seznam __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-joinMember": "dodal član __member__ h kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-moveCard": "premakil kartico __card__ na tabli __board__ iz seznama __oldList__ na plavalni stezi __oldSwimlane__ na seznam __list__ na plavalni stezi __swimlane__",
|
||||
"act-moveCardToOtherBoard": "premaknil kartico __card__ iz seznama __oldList__ na plavalni stezi __oldSwimlane__ na tabli __oldBoard__ na seznam __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-removeBoardMember": "odstranil člana __member__ iz table __board__",
|
||||
"act-restoredCard": "obnovil kartico __card__ na seznam __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-unjoinMember": "odstranil člana __member__ iz kartice __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"act-withBoardTitle": "__board__",
|
||||
"act-withCardTitle": "[__board__] __card__",
|
||||
"actions": "Dejanja",
|
||||
"activities": "Aktivnosti",
|
||||
"activity": "Aktivnost",
|
||||
"activity-added": "dodal %s v %s",
|
||||
"activity-archived": "%s premaknjeno v arhiv",
|
||||
"activity-attached": "pripel %s v %s",
|
||||
"activity-created": "ustvaril %s",
|
||||
"activity-customfield-created": "ustvaril poljubno polje%s",
|
||||
"activity-excluded": "izključil %s iz %s",
|
||||
"activity-imported": "uvozil %s v %s iz %s",
|
||||
"activity-imported-board": "uvozil %s iz %s",
|
||||
"activity-joined": "se je pridružil na %s",
|
||||
"activity-moved": "premakil %s iz %s na %s",
|
||||
"activity-on": "na %s",
|
||||
"activity-removed": "odstranil %s iz %s",
|
||||
"activity-sent": "poslano %s na %s",
|
||||
"activity-unjoined": "se je odjavil iz %s",
|
||||
"activity-subtask-added": "dodal podopravilo k %s",
|
||||
"activity-checked-item": "obkljukal %s na kontrolnem seznamu %s od %s",
|
||||
"activity-unchecked-item": "odkljukal %s na kontrolnem seznamu %s od %s",
|
||||
"activity-checklist-added": "dodal kontrolni seznam na %s",
|
||||
"activity-checklist-removed": "odstranil kontrolni seznam iz %s",
|
||||
"activity-checklist-completed": "dokončal kontrolni seznam __checklist__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"activity-checklist-uncompleted": "nedokončal kontrolni seznam %s od %s",
|
||||
"activity-checklist-item-added": "dodal postavko kontrolnega seznama na '%s' v %s",
|
||||
"activity-checklist-item-removed": "odstranil postavko kontrolnega seznama iz '%s' v %s",
|
||||
"add": "Dodaj",
|
||||
"activity-checked-item-card": "obkljukal %s na kontrolnem seznamu %s",
|
||||
"activity-unchecked-item-card": "odkljukal %s na kontrolnem seznamu %s",
|
||||
"activity-checklist-completed-card": "dokončal kontrolni seznam __checklist__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
|
||||
"activity-checklist-uncompleted-card": "nedokončal kontrolni seznam %s",
|
||||
"activity-editComment": "uredil komentar %s",
|
||||
"activity-deleteComment": "izbrisal komentar %s",
|
||||
"add-attachment": "Dodaj priponko",
|
||||
"add-board": "Dodaj tablo",
|
||||
"add-card": "Dodaj kartico",
|
||||
"add-swimlane": "Dodaj plavalno stezo",
|
||||
"add-subtask": "Dodaj podopravilo",
|
||||
"add-checklist": "Dodaj kontrolni seznam",
|
||||
"add-checklist-item": "Dodaj postavko na kontrolni seznam",
|
||||
"add-cover": "Dodaj ovitek",
|
||||
"add-label": "Dodaj oznako",
|
||||
"add-list": "Dodaj seznam",
|
||||
"add-members": "Dodaj člane",
|
||||
"added": "Dodano",
|
||||
"addMemberPopup-title": "Člani",
|
||||
"admin": "Administrator",
|
||||
"admin-desc": "Lahko gleda in ureja kartice, odstrani člane in spreminja nastavitve table.",
|
||||
"admin-announcement": "Najava",
|
||||
"admin-announcement-active": "Aktivna vse-sistemska najava",
|
||||
"admin-announcement-title": "Najava od administratorja",
|
||||
"all-boards": "Vse table",
|
||||
"and-n-other-card": "In __count__ druga kartica",
|
||||
"and-n-other-card_plural": "In __count__ drugih kartic",
|
||||
"apply": "Uporabi",
|
||||
"app-is-offline": "Nalaganje, prosimo počakajte. Osveževanje strani bo povzročilo izgubo podatkov. Če nalaganje ne deluje, preverite, ali se strežnik ni ustavil.",
|
||||
"archive": "Premakni v arhiv",
|
||||
"archive-all": "Premakni vse v arhiv",
|
||||
"archive-board": "Premakni tablo v arhiv",
|
||||
"archive-card": "Premakni kartico v arhiv",
|
||||
"archive-list": "Premakni seznam v arhiv",
|
||||
"archive-swimlane": "Premakni plavalno stezo v arhiv",
|
||||
"archive-selection": "Premakni označeno v arhiv",
|
||||
"archiveBoardPopup-title": "Premakni tablo v arhiv?",
|
||||
"archived-items": "Arhiv",
|
||||
"archived-boards": "Table v arhivu",
|
||||
"restore-board": "Obnovi tablo",
|
||||
"no-archived-boards": "Nobene table ni v arhivu.",
|
||||
"archives": "Arhiv",
|
||||
"template": "Predloga",
|
||||
"templates": "Predloge",
|
||||
"assign-member": "Dodeli člana",
|
||||
"attached": "pripeto",
|
||||
"attachment": "Priponka",
|
||||
"attachment-delete-pop": "Brisanje priponke je trajno. Ne obstaja razveljavitev.",
|
||||
"attachmentDeletePopup-title": "Briši priponko?",
|
||||
"attachments": "Priponke",
|
||||
"auto-watch": "Samodejno spremljaj ustvarjene table",
|
||||
"avatar-too-big": "Velikost avatarja je prevelika (70kB maks.)",
|
||||
"back": "Nazaj",
|
||||
"board-change-color": "Spremeni barvo",
|
||||
"board-nb-stars": "%s zvezdic",
|
||||
"board-not-found": "Tabla ni najdena",
|
||||
"board-private-info": "Ta tabla bo <strong>privatna</strong>.",
|
||||
"board-public-info": "Ta tabla bo <strong>javna</strong>.",
|
||||
"boardChangeColorPopup-title": "Spremeni ozadje table",
|
||||
"boardChangeTitlePopup-title": "Preimenuj tablo",
|
||||
"boardChangeVisibilityPopup-title": "Spremeni vidnost",
|
||||
"boardChangeWatchPopup-title": "Spremeni opazovanje",
|
||||
"boardMenuPopup-title": "Nastavitve table",
|
||||
"boards": "Table",
|
||||
"board-view": "Pogled table",
|
||||
"board-view-cal": "Koledar",
|
||||
"board-view-swimlanes": "Plavalne steze",
|
||||
"board-view-lists": "Seznami",
|
||||
"bucket-example": "Kot na primer \"Življenjski seznam\"",
|
||||
"cancel": "Prekliči",
|
||||
"card-archived": "Kartica je premaknjena v arhiv.",
|
||||
"board-archived": "Tabla je premaknjena v arhiv.",
|
||||
"card-comments-title": "Ta kartica ima %s komentar.",
|
||||
"card-delete-notice": "Brisanje je trajno. Izgubili boste vsa dejanja povezana s to kartico.",
|
||||
"card-delete-pop": "Vsa dejanja bodo odstranjena iz vira dejavnosti in kartice ne boste mogli znova odpreti. Razveljavitve ni.",
|
||||
"card-delete-suggest-archive": "Kartico lahko premaknete v arhiv, da jo odstranite s table in ohranite dejavnost.",
|
||||
"card-due": "Rok",
|
||||
"card-due-on": "Rok",
|
||||
"card-spent": "Porabljen čas",
|
||||
"card-edit-attachments": "Uredi priponke",
|
||||
"card-edit-custom-fields": "Uredi poljubna polja",
|
||||
"card-edit-labels": "Uredi oznake",
|
||||
"card-edit-members": "Uredi člane",
|
||||
"card-labels-title": "Spremeni oznake za kartico.",
|
||||
"card-members-title": "Dodaj ali odstrani člane table iz kartice.",
|
||||
"card-start": "Začetek",
|
||||
"card-start-on": "Začne ob",
|
||||
"cardAttachmentsPopup-title": "Pripni od",
|
||||
"cardCustomField-datePopup-title": "Spremeni datum",
|
||||
"cardCustomFieldsPopup-title": "Uredi poljubna polja",
|
||||
"cardDeletePopup-title": "Briši kartico?",
|
||||
"cardDetailsActionsPopup-title": "Dejanja kartice",
|
||||
"cardLabelsPopup-title": "Oznake",
|
||||
"cardMembersPopup-title": "Člani",
|
||||
"cardMorePopup-title": "Več",
|
||||
"cardTemplatePopup-title": "Ustvari predlogo",
|
||||
"cards": "Kartice",
|
||||
"cards-count": "Kartic",
|
||||
"casSignIn": "Vpiši se s CAS",
|
||||
"cardType-card": "Kartica",
|
||||
"cardType-linkedCard": "Povezana kartica",
|
||||
"cardType-linkedBoard": "Povezana tabla",
|
||||
"change": "Spremeni",
|
||||
"change-avatar": "Spremeni avatar",
|
||||
"change-password": "Spremeni geslo",
|
||||
"change-permissions": "Spremeni dovoljenja",
|
||||
"change-settings": "Spremeni nastavitve",
|
||||
"changeAvatarPopup-title": "Spremeni avatar",
|
||||
"changeLanguagePopup-title": "Spremeni jezik",
|
||||
"changePasswordPopup-title": "Spremeni geslo",
|
||||
"changePermissionsPopup-title": "Spremeni dovoljenja",
|
||||
"changeSettingsPopup-title": "Spremeni nastavitve",
|
||||
"subtasks": "Podopravila",
|
||||
"checklists": "Kontrolni seznami",
|
||||
"click-to-star": "Kliknite, da označite tablo z zvezdico.",
|
||||
"click-to-unstar": "Kliknite, da odznačite tablo z zvezdico.",
|
||||
"clipboard": "Odložišče ali povleci & spusti",
|
||||
"close": "Zapri",
|
||||
"close-board": "Zapri tablo",
|
||||
"close-board-pop": "Tablo boste lahko obnovili s klikom na gumb »Arhiviraj« na začetni glavi.",
|
||||
"color-black": "črna",
|
||||
"color-blue": "modra",
|
||||
"color-crimson": "temno rdeča",
|
||||
"color-darkgreen": "temno zelena",
|
||||
"color-gold": "zlata",
|
||||
"color-gray": "siva",
|
||||
"color-green": "zelena",
|
||||
"color-indigo": "indigo",
|
||||
"color-lime": "limeta",
|
||||
"color-magenta": "magenta",
|
||||
"color-mistyrose": "rožnata",
|
||||
"color-navy": "navy modra",
|
||||
"color-orange": "oranžna",
|
||||
"color-paleturquoise": "bledo turkizna",
|
||||
"color-peachpuff": "breskvasta",
|
||||
"color-pink": "roza",
|
||||
"color-plum": "slivova",
|
||||
"color-purple": "vijolična",
|
||||
"color-red": "rdeča",
|
||||
"color-saddlebrown": "rjava",
|
||||
"color-silver": "srebrna",
|
||||
"color-sky": "nebesna",
|
||||
"color-slateblue": "skrilasto modra",
|
||||
"color-white": "bela",
|
||||
"color-yellow": "rumena",
|
||||
"unset-color": "Onemogoči",
|
||||
"comment": "Komentiraj",
|
||||
"comment-placeholder": "Napiši komentar",
|
||||
"comment-only": "Samo komentar",
|
||||
"comment-only-desc": "Lahko komentirate samo na karticah.",
|
||||
"no-comments": "Ni komentarjev",
|
||||
"no-comments-desc": "Ne morete videti komentarjev in dejavnosti.",
|
||||
"computer": "Računalnik",
|
||||
"confirm-subtask-delete-dialog": "Ste prepričani, da želite izbrisati podopravilo?",
|
||||
"confirm-checklist-delete-dialog": "Ste prepričani, da želite izbrisati kontrolni seznam?",
|
||||
"copy-card-link-to-clipboard": "Kopiraj povezavo kartice na odložišče",
|
||||
"linkCardPopup-title": "Poveži kartico",
|
||||
"searchElementPopup-title": "Išči",
|
||||
"copyCardPopup-title": "Kopiraj kartico",
|
||||
"copyChecklistToManyCardsPopup-title": "Kopiraj predlogo kontrolnega seznama na več kartic",
|
||||
"copyChecklistToManyCardsPopup-instructions": "Naslovi ciljnih kartic in opisi v tem JSON formatu",
|
||||
"copyChecklistToManyCardsPopup-format": "[ {\"naslov\": \"Naslov prve kartice\", \"opis\":\"Opis prve kartice\"}, {\"naslov\":\"Opis druge kartice\",\"opis\":\"Opis druge kartice\"},{\"naslov\":\"Naslov zadnje kartice\",\"opis\":\"Opis zadnje kartice\"} ]",
|
||||
"create": "Ustvari",
|
||||
"createBoardPopup-title": "Ustvari tablo",
|
||||
"chooseBoardSourcePopup-title": "Uvozi tablo",
|
||||
"createLabelPopup-title": "Ustvari oznako",
|
||||
"createCustomField": "Ustvari polje",
|
||||
"createCustomFieldPopup-title": "Ustvari polje",
|
||||
"current": "trenutno",
|
||||
"custom-field-delete-pop": "Razveljavitve ni. To bo odstranilo to poljubno polje iz vseh kartic in izbrisalo njegovo zgodovino.",
|
||||
"custom-field-checkbox": "Potrditveno polje",
|
||||
"custom-field-date": "Datum",
|
||||
"custom-field-dropdown": "Spustni seznam",
|
||||
"custom-field-dropdown-none": "(nobeno)",
|
||||
"custom-field-dropdown-options": "Možnosti seznama",
|
||||
"custom-field-dropdown-options-placeholder": "Pritisnite enter da dodate več možnosti",
|
||||
"custom-field-dropdown-unknown": "(neznano)",
|
||||
"custom-field-number": "Število",
|
||||
"custom-field-text": "Besedilo",
|
||||
"custom-fields": "Poljubna polja",
|
||||
"date": "Datum",
|
||||
"decline": "Zavrni",
|
||||
"default-avatar": "Privzeti avatar",
|
||||
"delete": "Briši",
|
||||
"deleteCustomFieldPopup-title": "Briši poljubno polje?",
|
||||
"deleteLabelPopup-title": "Briši oznako?",
|
||||
"description": "Opis",
|
||||
"disambiguateMultiLabelPopup-title": "Razdvoji Dejanje Oznake",
|
||||
"disambiguateMultiMemberPopup-title": "Razdvoji dejanje člana",
|
||||
"discard": "Razveljavi",
|
||||
"done": "Končano",
|
||||
"download": "Prenos",
|
||||
"edit": "Uredi",
|
||||
"edit-avatar": "Spremeni avatar",
|
||||
"edit-profile": "Uredi profil",
|
||||
"edit-wip-limit": "Uredi omejitev št. kartic",
|
||||
"soft-wip-limit": "Omehčaj omejitev št. kartic",
|
||||
"editCardStartDatePopup-title": "Spremeni začetni datum",
|
||||
"editCardDueDatePopup-title": "Spremeni datum zapadlosti",
|
||||
"editCustomFieldPopup-title": "Uredi polje",
|
||||
"editCardSpentTimePopup-title": "Spremeni porabljen čas",
|
||||
"editLabelPopup-title": "Spremeni oznako",
|
||||
"editNotificationPopup-title": "Uredi obvestilo",
|
||||
"editProfilePopup-title": "Uredi profil",
|
||||
"email": "E-pošta",
|
||||
"email-enrollAccount-subject": "Up. račun ustvarjen za vas na __siteName__",
|
||||
"email-enrollAccount-text": "Pozdravljeni __user__,\n\nZa začetek uporabe kliknite spodnjo povezavo.\n\n__url__\n\nHvala.",
|
||||
"email-fail": "Pošiljanje e-pošte ni uspelo",
|
||||
"email-fail-text": "Napaka pri poskusu pošiljanja e-pošte",
|
||||
"email-invalid": "Neveljavna e-pošta",
|
||||
"email-invite": "Povabi z uporabo e-pošte",
|
||||
"email-invite-subject": "__inviter__ vam je poslal povabilo",
|
||||
"email-invite-text": "Spoštovani __user__,\n\n__inviter__ vas vabi k sodelovanju na tabli \"__board__\".\n\nProsimo sledite spodnji povezavi:\n\n__url__\n\nHvala.",
|
||||
"email-resetPassword-subject": "Ponastavite geslo na __siteName__",
|
||||
"email-resetPassword-text": "Pozdravljeni __user__,\n\nZa ponastavitev gesla kliknite na spodnjo povezavo.\n\n__url__\n\nHvala.",
|
||||
"email-sent": "E-pošta poslana",
|
||||
"email-verifyEmail-subject": "Preverite svoje e-poštni naslov na __siteName__",
|
||||
"email-verifyEmail-text": "Pozdravljeni __user__,\n\nDa preverite e-poštni naslov za vaš uporabniški račun, kliknite na spodnjo povezavo.\n\n__url__\n\nHvala.",
|
||||
"enable-wip-limit": "Vklopi omejitev št. kartic",
|
||||
"error-board-doesNotExist": "Ta tabla ne obstaja",
|
||||
"error-board-notAdmin": "Če želite to narediti, morate biti skrbnik te table",
|
||||
"error-board-notAMember": "Če želite to narediti, morate biti član te table",
|
||||
"error-json-malformed": "Vaše besedilo ni veljaven JSON",
|
||||
"error-json-schema": "Vaši JSON podatki ne vsebujejo pravilnih informacij v ustreznem formatu",
|
||||
"error-list-doesNotExist": "Seznam ne obstaja",
|
||||
"error-user-doesNotExist": "Uporabnik ne obstaja",
|
||||
"error-user-notAllowSelf": "Ne morete povabiti sebe",
|
||||
"error-user-notCreated": "Ta uporabnik ni ustvarjen",
|
||||
"error-username-taken": "To up. ime že obstaja",
|
||||
"error-email-taken": "E-poštni naslov je že zaseden",
|
||||
"export-board": "Izvozi tablo",
|
||||
"filter": "Filtriraj",
|
||||
"filter-cards": "Filtriraj kartice",
|
||||
"filter-clear": "Počisti filter",
|
||||
"filter-no-label": "Brez oznake",
|
||||
"filter-no-member": "Brez člana",
|
||||
"filter-no-custom-fields": "Brez poljubnih polj",
|
||||
"filter-show-archive": "Prikaži arhivirane sezname",
|
||||
"filter-hide-empty": "Skrij prazne sezname",
|
||||
"filter-on": "Filter vklopljen",
|
||||
"filter-on-desc": "Filtrirane kartice na tej tabli. Kliknite tukaj za urejanje filtra.",
|
||||
"filter-to-selection": "Filtriraj izbrane",
|
||||
"advanced-filter-label": "Napredni filter",
|
||||
"advanced-filter-description": "Napredni filter omogoča pripravo niza, ki vsebuje naslednje operaterje: == != <= >= && || () Preslednica se uporablja kot ločilo med operatorji. Vsa polja po meri lahko filtrirate tako, da vtipkate njihova imena in vrednosti. Na primer: Polje1 == Vrednost1. Opomba: Če polja ali vrednosti vsebujejo presledke, jih morate postaviti v enojne narekovaje. Primer: 'Polje 1' == 'Vrednost 1'. Če želite preskočiti posamezne kontrolne znake (' \\/), lahko uporabite \\. Na primer: Polje1 == I\\'m. Prav tako lahko kombinirate več pogojev. Na primer: F1 == V1 || F1 == V2. Običajno se vsi operaterji interpretirajo od leve proti desni. Vrstni red lahko spremenite tako, da postavite oklepaje. Na primer: F1 == V1 && ( F2 == V2 || F2 == V3 ). Prav tako lahko po besedilu iščete z uporabo pravil regex: F1 == /Tes.*/i",
|
||||
"fullname": "Polno Ime",
|
||||
"header-logo-title": "Pojdi nazaj na stran s tablami.",
|
||||
"hide-system-messages": "Skrij sistemska sporočila",
|
||||
"headerBarCreateBoardPopup-title": "Ustvari tablo",
|
||||
"home": "Domov",
|
||||
"import": "Uvozi",
|
||||
"link": "Poveži",
|
||||
"import-board": "uvozi tablo",
|
||||
"import-board-c": "Uvozi tablo",
|
||||
"import-board-title-trello": "Uvozi tablo iz orodja Trello",
|
||||
"import-board-title-wekan": "Uvozi tablo iz prejšnjega izvoza",
|
||||
"import-sandstorm-backup-warning": "Ne zbrišite podatkov, ki jih uvozite z originalne izvožene table ali Trello, preden preverite ali se tabla uspešno zapre in odpre ali pa boste dobili sporočilo Tabla ni najdena, kar pomeni izgubo podatkov.",
|
||||
"import-sandstorm-warning": "Uvožena tabla bo izbrisala vse obstoječe podatke na tabli in jih zamenjala z uvoženo tablo.",
|
||||
"from-trello": "Iz orodja Trello",
|
||||
"from-wekan": "Od prejšnjega izvoza",
|
||||
"import-board-instruction-trello": "V vaši Trello tabli pojdite na 'Meni', 'Več', 'Natisni in Izvozi', 'Izvozi JSON', in kopirajte prikazano besedilo.",
|
||||
"import-board-instruction-wekan": "V vaši tabli pojdite na 'Meni', 'Izvozi tablo' in kopirajte besedilo iz prenesene datoteke.",
|
||||
"import-board-instruction-about-errors": "Pri napakah med uvozom table v nekaterih primerih uvažanje še deluje, uvožena tabla pa je na strani Vse Table.",
|
||||
"import-json-placeholder": "Tukaj prilepite veljavne JSON podatke",
|
||||
"import-map-members": "Mapiraj člane",
|
||||
"import-members-map": "Vaša uvožena tabla vsebuje nekaj članov. Prosimo mapirajte člane, ki jih želite uvoziti, z vašimi uporabniki.",
|
||||
"import-show-user-mapping": "Preglejte povezane člane",
|
||||
"import-user-select": "Izberite obstoječega uporabnika, ki ga želite uporabiti kot tega člana.",
|
||||
"importMapMembersAddPopup-title": "Izberite člana",
|
||||
"info": "Različica",
|
||||
"initials": "Inicialke",
|
||||
"invalid-date": "Neveljaven datum",
|
||||
"invalid-time": "Neveljaven čas",
|
||||
"invalid-user": "Neveljaven uporabnik",
|
||||
"joined": "se je pridružil",
|
||||
"just-invited": "Povabljeni ste k tej tabli",
|
||||
"keyboard-shortcuts": "Bližnjične tipke",
|
||||
"label-create": "Ustvari Oznako",
|
||||
"label-default": "%s oznaka (privzeto)",
|
||||
"label-delete-pop": "Razveljavitve ni. To bo odstranilo to oznako iz vseh kartic in izbrisalo njeno zgodovino.",
|
||||
"labels": "Oznake",
|
||||
"language": "Jezik",
|
||||
"last-admin-desc": "Ne morete zamenjati vlog, ker mora obstajati vsaj en admin.",
|
||||
"leave-board": "Zapusti tablo",
|
||||
"leave-board-pop": "Ste prepričani, da želite zapustiti tablo __boardTitle__? Odstranjeni boste iz vseh kartic na tej tabli.",
|
||||
"leaveBoardPopup-title": "Zapusti tablo ?",
|
||||
"link-card": "Poveži s to kartico",
|
||||
"list-archive-cards": "Premakni vse kartice v tem seznamu v arhiv",
|
||||
"list-archive-cards-pop": "To bo odstranilo vse kartice tega seznama iz table. Da si ogledate kartice v arhivu in jih vrnete na tablo, kliknite \"Meni\" > \"arhiv\".",
|
||||
"list-move-cards": "Premakni vse kartice na seznamu",
|
||||
"list-select-cards": "Izberi vse kartice na seznamu",
|
||||
"set-color-list": "Nastavi barvo",
|
||||
"listActionPopup-title": "Dejanja seznama",
|
||||
"swimlaneActionPopup-title": "Dejanja plavalnih stez",
|
||||
"swimlaneAddPopup-title": "Dodaj plavalno stezo spodaj",
|
||||
"listImportCardPopup-title": "Uvozi Trello kartico",
|
||||
"listMorePopup-title": "Več",
|
||||
"link-list": "Poveži s tem seznamom",
|
||||
"list-delete-pop": "Vsa dejanja bodo odstranjena iz vira dejavnosti in seznama ne boste mogli obnoviti. Razveljavitve ni.",
|
||||
"list-delete-suggest-archive": "Lahko premaknete seznam v arhiv, da ga odstranite iz table in ohranite dejavnosti.",
|
||||
"lists": "Seznami",
|
||||
"swimlanes": "Plavalne steze",
|
||||
"log-out": "Odjava",
|
||||
"log-in": "Prijava",
|
||||
"loginPopup-title": "Prijava",
|
||||
"memberMenuPopup-title": "Nastavitve članov",
|
||||
"members": "Člani",
|
||||
"menu": "Meni",
|
||||
"move-selection": "Premakni izbiro",
|
||||
"moveCardPopup-title": "Premakni kartico",
|
||||
"moveCardToBottom-title": "Premakni na dno",
|
||||
"moveCardToTop-title": "Premakni na vrh",
|
||||
"moveSelectionPopup-title": "Premakni izbiro",
|
||||
"multi-selection": "Multi-Izbira",
|
||||
"multi-selection-on": "Multi-Izbira je omogočena",
|
||||
"muted": "Utišano",
|
||||
"muted-info": "O spremembah na tej tabli nikoli ne boste obveščeni",
|
||||
"my-boards": "Moje Table",
|
||||
"name": "Ime",
|
||||
"no-archived-cards": "Ni kartic v arhivu",
|
||||
"no-archived-lists": "Ni seznamov v arhivu",
|
||||
"no-archived-swimlanes": "Ni plavalnih stez v arhivu",
|
||||
"no-results": "Ni zadetkov",
|
||||
"normal": "Normalno",
|
||||
"normal-desc": "Lahko gleda in ureja kartice. Ne more spreminjati nastavitev.",
|
||||
"not-accepted-yet": "Povabilo še ni sprejeto.",
|
||||
"notify-participate": "Prejemajte posodobitve kartic, na katerih sodelujete kot ustvarjalec ali član",
|
||||
"notify-watch": "Prejemajte posodobitve opazovanih tabel, seznamov ali kartic",
|
||||
"optional": "opcijsko",
|
||||
"or": "ali",
|
||||
"page-maybe-private": "Ta stran je mogoče privatna. Verjetno si jo lahko ogledate po<a href='%s'>prijavi</a>.",
|
||||
"page-not-found": "Stran ne obstaja.",
|
||||
"password": "Geslo",
|
||||
"paste-or-dragdrop": "prilepi ali povleci & spusti datoteko slike (samo slika)",
|
||||
"participating": "Sodelovanje",
|
||||
"preview": "Predogled",
|
||||
"previewAttachedImagePopup-title": "Predogled",
|
||||
"previewClipboardImagePopup-title": "Predogled",
|
||||
"private": "Zasebno",
|
||||
"private-desc": "Ta tabla je zasebna. Samo dodani uporabniki lahko vidijo ali urejajo vsebino.",
|
||||
"profile": "Profil",
|
||||
"public": "Javno",
|
||||
"public-desc": "Ta tabla je javna. Vidna je vsakomur s povezavo do table in bo prikazana v zadetkih iskalnikov kot Google. Samo uporabniki table jo lahko urejajo.",
|
||||
"quick-access-description": "Če tablo označite z zvezdico, bo tukaj dodana bližnjica.",
|
||||
"remove-cover": "Odstrani ovitek",
|
||||
"remove-from-board": "Odstrani iz table",
|
||||
"remove-label": "Odstrani oznako",
|
||||
"listDeletePopup-title": "Odstrani seznam?",
|
||||
"remove-member": "Odstrani člana",
|
||||
"remove-member-from-card": "Odstrani iz kartice",
|
||||
"remove-member-pop": "Odstrani __name__ (__username__) iz __boardTitle__? Član bo odstranjen iz vseh kartic te table in bo prejel obvestilo.",
|
||||
"removeMemberPopup-title": "Odstrani člana?",
|
||||
"rename": "Preimenuj",
|
||||
"rename-board": "Preimenuj tablo",
|
||||
"restore": "Obnovi",
|
||||
"save": "Shrani",
|
||||
"search": "Išči",
|
||||
"rules": "Pravila",
|
||||
"search-cards": "Išči po imenih kartic in opisih na tej tabli",
|
||||
"search-example": "Besedilo za iskanje?",
|
||||
"select-color": "Izberi barvo",
|
||||
"set-wip-limit-value": "Nastavi omejitev maksimalnega števila opravil v tem seznamu",
|
||||
"setWipLimitPopup-title": "Nastavi omejitev št. kartic",
|
||||
"shortcut-assign-self": "Dodeli sebe k trenutni kartici",
|
||||
"shortcut-autocomplete-emoji": "Samodokončaj emoji",
|
||||
"shortcut-autocomplete-members": "Samodokončaj člane",
|
||||
"shortcut-clear-filters": "Počisti vse filtre",
|
||||
"shortcut-close-dialog": "Zapri dialog",
|
||||
"shortcut-filter-my-cards": "Filtriraj moje kartice",
|
||||
"shortcut-show-shortcuts": "Prikaži ta seznam bližnjic",
|
||||
"shortcut-toggle-filterbar": "Preklopi stransko vrstico za filter",
|
||||
"shortcut-toggle-sidebar": "Preklopi stransko vrstico table",
|
||||
"show-cards-minimum-count": "Prikaži število kartic, če seznam vsebuje več kot",
|
||||
"sidebar-open": "Odpri stransko vrstico",
|
||||
"sidebar-close": "Zapri stransko vrstico",
|
||||
"signupPopup-title": "Ustvari up. račun",
|
||||
"star-board-title": "Kliknite, da označite to tablo z zvezdico. Prikazana bo na vrhu vašega seznama tabel.",
|
||||
"starred-boards": "Table z zvezdico",
|
||||
"starred-boards-description": "Table z zvezdico se prikažejo na vrhu vašega seznama tabel.",
|
||||
"subscribe": "Naročite se",
|
||||
"team": "Skupina",
|
||||
"this-board": "to tablo",
|
||||
"this-card": "kartico",
|
||||
"spent-time-hours": "Porabljen čas (ure)",
|
||||
"overtime-hours": "Presežen čas (ure)",
|
||||
"overtime": "Presežen čas",
|
||||
"has-overtime-cards": "Ima kartice s preseženim časom",
|
||||
"has-spenttime-cards": "Ima kartice s porabljenim časom",
|
||||
"time": "Čas",
|
||||
"title": "Naslov",
|
||||
"tracking": "Sledenje",
|
||||
"tracking-info": "Obveščeni boste o vseh spremembah kartic, kjer sodelujete kot lastnik ali član.",
|
||||
"type": "Tip",
|
||||
"unassign-member": "Odjavi člana",
|
||||
"unsaved-description": "Imate neshranjen opis.",
|
||||
"unwatch": "Prekliči opazovanje",
|
||||
"upload": "Naloži",
|
||||
"upload-avatar": "Naloži avatar",
|
||||
"uploaded-avatar": "Naložil avatar",
|
||||
"username": "Up. ime",
|
||||
"view-it": "Oglej",
|
||||
"warn-list-archived": "opozorilo: ta kartica je v seznamu v arhivu",
|
||||
"watch": "Opazuj",
|
||||
"watching": "Opazuje",
|
||||
"watching-info": "O spremembah na tej tabli boste obveščeni",
|
||||
"welcome-board": "Tabla Dobrodošli",
|
||||
"welcome-swimlane": "Mejnik 1",
|
||||
"welcome-list1": "Osnove",
|
||||
"welcome-list2": "Napredno",
|
||||
"card-templates-swimlane": "Predloge kartice",
|
||||
"list-templates-swimlane": "Predloge seznama",
|
||||
"board-templates-swimlane": "Predloge table",
|
||||
"what-to-do": "Kaj želite storiti?",
|
||||
"wipLimitErrorPopup-title": "Neveljaven limit št. kartic",
|
||||
"wipLimitErrorPopup-dialog-pt1": "Število opravil v tem seznamu je višje od definiranega limita št. kartic.",
|
||||
"wipLimitErrorPopup-dialog-pt2": "Prosimo premaknite nekaj opravil iz tega seznama ali nastavite višji limit št. kartic.",
|
||||
"admin-panel": "Skrbniška plošča",
|
||||
"settings": "Nastavitve",
|
||||
"people": "Ljudje",
|
||||
"registration": "Registracija",
|
||||
"disable-self-registration": "Onemogoči samo-registracijo",
|
||||
"invite": "Povabi",
|
||||
"invite-people": "Povabi ljudi",
|
||||
"to-boards": "K tabli(am)",
|
||||
"email-addresses": "E-poštni naslovi",
|
||||
"smtp-host-description": "Naslov vašega strežnika SMTP.",
|
||||
"smtp-port-description": "Vrata vašega strežnika SMTP za odhodno pošto.",
|
||||
"smtp-tls-description": "Omogoči šifriranje TLS za SMTP strežnik.",
|
||||
"smtp-host": "SMTP gostitelj",
|
||||
"smtp-port": "SMTP vrata",
|
||||
"smtp-username": "Up. ime",
|
||||
"smtp-password": "Geslo",
|
||||
"smtp-tls": "TLS podpora",
|
||||
"send-from": "Od",
|
||||
"send-smtp-test": "Pošljite testno e-pošto na svoj naslov",
|
||||
"invitation-code": "Koda Povabila",
|
||||
"email-invite-register-subject": "__inviter__ vam je poslal povabilo",
|
||||
"email-invite-register-text": "Dragi __user__,\n\n__inviter__ vas vabi na kanban tablo za sodelovanje.\n\nProsimo sledite spodnji povezavi:\n__url__\n\nVaša koda povabila je: __icode__\n\nHvala.",
|
||||
"email-smtp-test-subject": "SMTP testna e-pošta",
|
||||
"email-smtp-test-text": "Uspešno ste poslali e-pošto",
|
||||
"error-invitation-code-not-exist": "Koda povabila ne obstaja",
|
||||
"error-notAuthorized": "Nimate pravic za ogled te strani.",
|
||||
"webhook-title": "Ime spletnega vmesnika (webhook)",
|
||||
"webhook-token": "Žeton (opcijsko za avtentikacijo)",
|
||||
"outgoing-webhooks": "Izhodni spletni vmesniki (webhooks)",
|
||||
"bidirectional-webhooks": "Dvo-smerni spletni vmesniki (webhooks)",
|
||||
"outgoingWebhooksPopup-title": "Izhodni spletni vmesniki (webhooks)",
|
||||
"boardCardTitlePopup-title": "Filter po naslovu kartice",
|
||||
"disable-webhook": "Onemogoči ta spletni vmesnik (webhook)",
|
||||
"global-webhook": "Globalni spletni vmesnik (webhook)",
|
||||
"new-outgoing-webhook": "Nov izhodni spletni vmesnik (webhook)",
|
||||
"no-name": "(Neznano)",
|
||||
"Node_version": "Node različica",
|
||||
"Meteor_version": "Meteor različica",
|
||||
"MongoDB_version": "MongoDB različica",
|
||||
"MongoDB_storage_engine": "MongoDB storage engine",
|
||||
"MongoDB_Oplog_enabled": "MongoDB Oplog omogočen",
|
||||
"OS_Arch": "OS Arhitektura",
|
||||
"OS_Cpus": "OS število CPU",
|
||||
"OS_Freemem": "OS prost pomnilnik",
|
||||
"OS_Loadavg": "OS povp. obremenitev",
|
||||
"OS_Platform": "OS platforma",
|
||||
"OS_Release": "OS izdaja",
|
||||
"OS_Totalmem": "OS skupni pomnilnik",
|
||||
"OS_Type": "OS tip",
|
||||
"OS_Uptime": "OS čas delovanja",
|
||||
"days": "dnevi",
|
||||
"hours": "ure",
|
||||
"minutes": "minute",
|
||||
"seconds": "sekunde",
|
||||
"show-field-on-card": "Prikaži to polje na kartici",
|
||||
"automatically-field-on-card": "Samodejno dodaj polja na vse kartice",
|
||||
"showLabel-field-on-card": "Prikaži oznako polja na mini kartici",
|
||||
"yes": "Da",
|
||||
"no": "Ne",
|
||||
"accounts": "Up. računi",
|
||||
"accounts-allowEmailChange": "Dovoli spremembo e-poštnega naslova",
|
||||
"accounts-allowUserNameChange": "Dovoli spremembo up. imena",
|
||||
"createdAt": "Ustvarjen ob",
|
||||
"verified": "Preverjeno",
|
||||
"active": "Aktivno",
|
||||
"card-received": "Prejeto",
|
||||
"card-received-on": "Prejeto ob",
|
||||
"card-end": "Konec",
|
||||
"card-end-on": "Končano na",
|
||||
"editCardReceivedDatePopup-title": "Spremeni datum prejema",
|
||||
"editCardEndDatePopup-title": "Spremeni končni datum",
|
||||
"setCardColorPopup-title": "Nastavi barvo",
|
||||
"setCardActionsColorPopup-title": "Izberi barvo",
|
||||
"setSwimlaneColorPopup-title": "Izberi barvo",
|
||||
"setListColorPopup-title": "Izberi barvo",
|
||||
"assigned-by": "Dodelil",
|
||||
"requested-by": "Zahteval",
|
||||
"board-delete-notice": "Brisanje je trajno. Izgubili boste vse sezname, kartice in akcije, povezane z desko.",
|
||||
"delete-board-confirm-popup": "Vsi seznami, kartice, oznake in dejavnosti bodo izbrisani in vsebine table ne boste mogli obnoviti. Razveljavitve ni.",
|
||||
"boardDeletePopup-title": "Izbriši tablo?",
|
||||
"delete-board": "Izbriši tablo",
|
||||
"default-subtasks-board": "Podopravila za tablo",
|
||||
"default": "Privzeto",
|
||||
"queue": "Čakalna vrsta",
|
||||
"subtask-settings": "Nastavitve podopravil",
|
||||
"boardSubtaskSettingsPopup-title": "Nastavitve podopravil table",
|
||||
"show-subtasks-field": "Dovoli pod-poravila na karticah",
|
||||
"deposit-subtasks-board": "Deponiraj podopravila na tole tablo:",
|
||||
"deposit-subtasks-list": "Ciljni seznam za deponirana podopravila:",
|
||||
"show-parent-in-minicard": "Pokaži starša na mini-kartici:",
|
||||
"prefix-with-full-path": "Predpona s celotno potjo",
|
||||
"prefix-with-parent": "Predpona s staršem",
|
||||
"subtext-with-full-path": "Podbesedilo s celotno potjo",
|
||||
"subtext-with-parent": "Podbesedilo s staršem",
|
||||
"change-card-parent": "Zamenjaj starša kartice",
|
||||
"parent-card": "Starševska kartica",
|
||||
"source-board": "Izvorna tabla",
|
||||
"no-parent": "Ne prikaži starša",
|
||||
"activity-added-label": "dodal oznako '%s' do %s",
|
||||
"activity-removed-label": "odstranil oznako '%s' od %s",
|
||||
"activity-delete-attach": "izbrisal priponko od %s",
|
||||
"activity-added-label-card": "dodal oznako '%s'",
|
||||
"activity-removed-label-card": "izbrisal oznako '%s'",
|
||||
"activity-delete-attach-card": "izbrisal priponko",
|
||||
"activity-set-customfield": "nastavi polje po meri '%s' do '%s' v %s",
|
||||
"activity-unset-customfield": "zbriši polje po meri '%s' v %s",
|
||||
"r-rule": "Pravilo",
|
||||
"r-add-trigger": "Dodaj prožilec",
|
||||
"r-add-action": "Dodaj akcijo",
|
||||
"r-board-rules": "Pravila table",
|
||||
"r-add-rule": "Dodaj pravilo",
|
||||
"r-view-rule": "Poglej pravilo",
|
||||
"r-delete-rule": "Izbriši pravilo",
|
||||
"r-new-rule-name": "Ime novega pravila",
|
||||
"r-no-rules": "Ni pravil",
|
||||
"r-when-a-card": "Ko je kartica",
|
||||
"r-is": " ",
|
||||
"r-is-moved": "premaknjena",
|
||||
"r-added-to": "dodan na",
|
||||
"r-removed-from": "izbrisan iz",
|
||||
"r-the-board": "tabla",
|
||||
"r-list": "seznam",
|
||||
"set-filter": "Nastavi filter",
|
||||
"r-moved-to": "premaknjena v",
|
||||
"r-moved-from": "premaknjena iz",
|
||||
"r-archived": "premaknjena v arhiv",
|
||||
"r-unarchived": "obnovljena iz arhiva",
|
||||
"r-a-card": "kartico",
|
||||
"r-when-a-label-is": "Ko je oznaka",
|
||||
"r-when-the-label": "Ko je oznaka",
|
||||
"r-list-name": "ime sezn.",
|
||||
"r-when-a-member": "Ko je član",
|
||||
"r-when-the-member": "Ko je član",
|
||||
"r-name": "ime",
|
||||
"r-when-a-attach": "Ko je priponka",
|
||||
"r-when-a-checklist": "Ko je kontrolni seznam",
|
||||
"r-when-the-checklist": "Ko kontrolni seznam",
|
||||
"r-completed": "zaključen",
|
||||
"r-made-incomplete": "nastavljen kot nedokončan",
|
||||
"r-when-a-item": "Ko je kontrolni seznam",
|
||||
"r-when-the-item": "Ko je element kontrolnega seznama",
|
||||
"r-checked": "označen",
|
||||
"r-unchecked": "odznačen",
|
||||
"r-move-card-to": "Premakni kartico na",
|
||||
"r-top-of": "Vrh",
|
||||
"r-bottom-of": "Dno",
|
||||
"r-its-list": "pripadajočega seznama",
|
||||
"r-archive": "premaknjena v arhiv",
|
||||
"r-unarchive": "Obnovi iz arhiva",
|
||||
"r-card": "kartico",
|
||||
"r-add": "Dodaj",
|
||||
"r-remove": "Odstrani",
|
||||
"r-label": "oznaka",
|
||||
"r-member": "član",
|
||||
"r-remove-all": "Izbriši vse člane iz kartice",
|
||||
"r-set-color": "Nastavi barvo na",
|
||||
"r-checklist": "kontrolni seznam",
|
||||
"r-check-all": "Označi vse",
|
||||
"r-uncheck-all": "Odznači vse",
|
||||
"r-items-check": "postavke kontrolnega lista",
|
||||
"r-check": "Označi",
|
||||
"r-uncheck": "Odznači",
|
||||
"r-item": "postavka",
|
||||
"r-of-checklist": "kontrolnega seznama",
|
||||
"r-send-email": "Pošlji e-pošto",
|
||||
"r-to": "naslovnik",
|
||||
"r-subject": "zadeva",
|
||||
"r-rule-details": "Podrobnosti pravila",
|
||||
"r-d-move-to-top-gen": "Premakni kartico na vrh pripadajočega sezama",
|
||||
"r-d-move-to-top-spec": "Premakni kartico na vrh seznama",
|
||||
"r-d-move-to-bottom-gen": "Premakni kartico na dno pripadajočega seznama",
|
||||
"r-d-move-to-bottom-spec": "Premakni kartico na dno seznama",
|
||||
"r-d-send-email": "Pošlji e-pošto",
|
||||
"r-d-send-email-to": "na",
|
||||
"r-d-send-email-subject": "zadeva",
|
||||
"r-d-send-email-message": "vsebina",
|
||||
"r-d-archive": "Premakni kartico v arhiv",
|
||||
"r-d-unarchive": "Obnovi kartico iz arhiva",
|
||||
"r-d-add-label": "Dodaj oznako",
|
||||
"r-d-remove-label": "Izbriši oznako",
|
||||
"r-create-card": "Ustvari novo kartico",
|
||||
"r-in-list": "v seznamu",
|
||||
"r-in-swimlane": "v plavalni stezi",
|
||||
"r-d-add-member": "Dodaj člana",
|
||||
"r-d-remove-member": "Odstrani člana",
|
||||
"r-d-remove-all-member": "Odstrani vse člane",
|
||||
"r-d-check-all": "Označi vse elemente seznama",
|
||||
"r-d-uncheck-all": "Odznači vse elemente seznama",
|
||||
"r-d-check-one": "Označi element",
|
||||
"r-d-uncheck-one": "Odznači element",
|
||||
"r-d-check-of-list": "kontrolnega seznama",
|
||||
"r-d-add-checklist": "Dodaj kontrolni list",
|
||||
"r-d-remove-checklist": "Odstrani kotrolni list",
|
||||
"r-by": "od",
|
||||
"r-add-checklist": "Dodaj kontrolni list",
|
||||
"r-with-items": "s postavkami",
|
||||
"r-items-list": "el1,el2,el3",
|
||||
"r-add-swimlane": "Dodaj plavalno stezo",
|
||||
"r-swimlane-name": "ime pl. steze",
|
||||
"r-board-note": "Opomba: polje pustite prazno, da ustreza vsaki možni vrednosti.",
|
||||
"r-checklist-note": "Opomba: elementi kontrolnega seznama morajo biti zapisani kot vrednosti, ločene z vejicami.",
|
||||
"r-when-a-card-is-moved": "Ko je kartica premaknjena v drug seznam",
|
||||
"r-set": "Nastavi",
|
||||
"r-update": "Posodobi",
|
||||
"r-datefield": "polje z datumom",
|
||||
"r-df-start-at": "začetek",
|
||||
"r-df-due-at": "rok",
|
||||
"r-df-end-at": "konec",
|
||||
"r-df-received-at": "prejeto",
|
||||
"r-to-current-datetime": "v trenutni datum/čas",
|
||||
"r-remove-value-from": "Izbriši vrednost iz",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
"authentication-method": "Metoda avtentikacije",
|
||||
"authentication-type": "Način avtentikacije",
|
||||
"custom-product-name": "Ime izdelka po meri",
|
||||
"layout": "Postavitev",
|
||||
"hide-logo": "Skrij logo",
|
||||
"add-custom-html-after-body-start": "Dodaj HTML po meri po <body> začetku",
|
||||
"add-custom-html-before-body-end": "Dodaj HMTL po meri po </body> koncu",
|
||||
"error-undefined": "Prišlo je do napake",
|
||||
"error-ldap-login": "Prišlo je do napake ob prijavi",
|
||||
"display-authentication-method": "Prikaži metodo avtentikacije",
|
||||
"default-authentication-method": "Privzeta metoda avtentikacije",
|
||||
"duplicate-board": "Dupliciraj tablo",
|
||||
"people-number": "Število ljudi je:",
|
||||
"swimlaneDeletePopup-title": "Zbriši plavalno stezo?",
|
||||
"swimlane-delete-pop": "Vsa dejanja bodo odstranjena iz seznama dejavnosti. Plavalne steze ne boste mogli obnoviti. Razveljavitve ni.",
|
||||
"restore-all": "Obnovi vse",
|
||||
"delete-all": "Izbriši vse",
|
||||
"loading": "Nalagam, prosimo počakajte",
|
||||
"previous_as": "zadnji čas je bil",
|
||||
"act-a-dueAt": "spremenil rok zapadlosti na \nKdaj: __timeValue__\nKje: __card__\n prejšnji rok zapadlosti je bil __timeOldValue__",
|
||||
"act-a-endAt": "spremenil čas dokončanja na __timeValue__ iz (__timeOldValue__)",
|
||||
"act-a-startAt": "spremenil čas pričetka na __timeValue__ iz (__timeOldValue__)",
|
||||
"act-a-receivedAt": "spremenil čas prejema na __timeValue__ iz (__timeOldValue__)",
|
||||
"a-dueAt": "spremenil rok v",
|
||||
"a-endAt": "spremenil končni čas v",
|
||||
"a-startAt": "spremenil začetni čas v",
|
||||
"a-receivedAt": "spremenil čas prejetja v",
|
||||
"almostdue": "trenutni rok %s se približuje",
|
||||
"pastdue": "trenutni rok %s je potekel",
|
||||
"duenow": "trenutni rok %s je danes",
|
||||
"act-newDue": "__list__/__card__ ima 1. opomnik roka zapadlosti [__board__]",
|
||||
"act-withDue": "__list__/__card__ opomniki roka zapadlosti [__board__]",
|
||||
"act-almostdue": "je opomnil trenuten rok zapadlosti (__timeValue__) kartice __card__ se bliža",
|
||||
"act-pastdue": "je opomnil trenuten rok zapadlosti (__timeValue__) kartice __card__ je potekel",
|
||||
"act-duenow": "je opomnil trenuten rok zapadlosti (__timeValue__) kartice __card__ je sedaj",
|
||||
"act-atUserComment": "Omenjeni ste bili v [__board__] __list__/__card__",
|
||||
"delete-user-confirm-popup": "Ali ste prepričani, da želite izbrisati ta račun? Razveljavitve ni.",
|
||||
"accounts-allowUserDelete": "Dovoli uporabnikom, da sami izbrišejo svoj račun",
|
||||
"hide-minicard-label-text": "Skrij besedilo oznak na karticah",
|
||||
"show-desktop-drag-handles": "Pokaži ročke za povleko na namizju"
|
||||
}
|
||||
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+12
-5
@@ -510,9 +510,14 @@
|
||||
"email-smtp-test-text": "E-Posta başarıyla gönderildi",
|
||||
"error-invitation-code-not-exist": "Davetiye kodu bulunamadı",
|
||||
"error-notAuthorized": "Bu sayfayı görmek için yetkiniz yok.",
|
||||
"webhook-title": "Webhook Name",
|
||||
"webhook-token": "Token (Optional for Authentication)",
|
||||
"outgoing-webhooks": "Dışarı giden bağlantılar",
|
||||
"bidirectional-webhooks": "Two-Way Webhooks",
|
||||
"outgoingWebhooksPopup-title": "Dışarı giden bağlantılar",
|
||||
"boardCardTitlePopup-title": "Kart Başlığı Filtresi",
|
||||
"disable-webhook": "Disable This Webhook",
|
||||
"global-webhook": "Global Webhooks",
|
||||
"new-outgoing-webhook": "Yeni Dışarı Giden Web Bağlantısı",
|
||||
"no-name": "(Bilinmeyen)",
|
||||
"Node_version": "Node sürümü",
|
||||
@@ -723,12 +728,14 @@
|
||||
"almostdue": "current due time %s is approaching",
|
||||
"pastdue": "current due time %s is past",
|
||||
"duenow": "current due time %s is today",
|
||||
"act-withDue": "__card__ due reminders [__board__]",
|
||||
"act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
|
||||
"act-withDue": "__list__/__card__ due reminders [__board__]",
|
||||
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
|
||||
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
|
||||
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
|
||||
"act-atUserComment": "You were mentioned in [__board__] __card__",
|
||||
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
|
||||
"accounts-allowUserDelete": "Allow users to self delete their account",
|
||||
"hide-minicard-label-text": "Hide minicard label text"
|
||||
"act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
|
||||
"delete-user-confirm-popup": "Bu kullanıcı hesabını silmek istediğinize emin misiniz? Bu işlemi geri alamazsınız.",
|
||||
"accounts-allowUserDelete": "Kullanıcılara hesaplarını silmek için izin ver.",
|
||||
"hide-minicard-label-text": "Mini kart etiklerini gizle",
|
||||
"show-desktop-drag-handles": "Show desktop drag handles"
|
||||
}
|
||||
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
+10
-3
@@ -510,9 +510,14 @@
|
||||
"email-smtp-test-text": "你已成功发送邮件",
|
||||
"error-invitation-code-not-exist": "邀请码不存在",
|
||||
"error-notAuthorized": "您无权查看此页面。",
|
||||
"webhook-title": "Webhook名称",
|
||||
"webhook-token": "Token(认证选项)",
|
||||
"outgoing-webhooks": "外部Web挂钩",
|
||||
"bidirectional-webhooks": "双向Webhook",
|
||||
"outgoingWebhooksPopup-title": "外部Web挂钩",
|
||||
"boardCardTitlePopup-title": "卡片标题过滤",
|
||||
"disable-webhook": "禁用Webhook",
|
||||
"global-webhook": "全局Webhook",
|
||||
"new-outgoing-webhook": "新建外部Web挂钩",
|
||||
"no-name": "(未知)",
|
||||
"Node_version": "Node.js版本",
|
||||
@@ -723,12 +728,14 @@
|
||||
"almostdue": "当前到期时间%s即将到来",
|
||||
"pastdue": "当前到期时间%s已过",
|
||||
"duenow": "当前到期时间%s为今天",
|
||||
"act-withDue": "__card__ 到期提醒[__board__]",
|
||||
"act-newDue": "__list__/__card__ 有 1st 到期提醒 [__board__]",
|
||||
"act-withDue": "__list__/__card__ 到期提醒 [__board__]",
|
||||
"act-almostdue": "__card__ 的当前到期提醒(__timeValue__) 正在接近",
|
||||
"act-pastdue": "__card__ 的当前到期提醒(__timeValue__) 已经过去了",
|
||||
"act-duenow": "__card__ 的当前到期提醒(__timeValue__) 现在到期",
|
||||
"act-atUserComment": "您在 [__board__] __card__中被提到",
|
||||
"act-atUserComment": "[__board__] __list__/__card__ 提到了您",
|
||||
"delete-user-confirm-popup": "确实要删除此帐户吗?此操作无法撤销。",
|
||||
"accounts-allowUserDelete": "允许用户自行删除其帐户",
|
||||
"hide-minicard-label-text": "隐藏迷你卡片标签文本"
|
||||
"hide-minicard-label-text": "隐藏迷你卡片标签文本",
|
||||
"show-desktop-drag-handles": "显示桌面拖放手柄"
|
||||
}
|
||||
+740
-733
File diff suppressed because it is too large.
Load diff
+740
-733
File diff suppressed because it is too large.
Load diff
@@ -20,6 +20,8 @@ AccountSettings.attachSchema(
|
||||
autoValue() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
|
||||
@@ -14,6 +14,16 @@ Actions.allow({
|
||||
},
|
||||
});
|
||||
|
||||
Actions.before.insert((userId, doc) => {
|
||||
doc.createdAt = new Date();
|
||||
doc.modifiedAt = doc.createdAt;
|
||||
});
|
||||
|
||||
Actions.before.update((userId, doc, fieldNames, modifier) => {
|
||||
modifier.$set = modifier.$set || {};
|
||||
modifier.$set.modifiedAt = new Date();
|
||||
});
|
||||
|
||||
Actions.helpers({
|
||||
description() {
|
||||
return this.desc;
|
||||
|
||||
+48
-22
@@ -62,8 +62,14 @@ Activities.helpers({
|
||||
//},
|
||||
});
|
||||
|
||||
Activities.before.update((userId, doc, fieldNames, modifier) => {
|
||||
modifier.$set = modifier.$set || {};
|
||||
modifier.$set.modifiedAt = new Date();
|
||||
});
|
||||
|
||||
Activities.before.insert((userId, doc) => {
|
||||
doc.createdAt = new Date();
|
||||
doc.modifiedAt = doc.createdAt;
|
||||
});
|
||||
|
||||
Activities.after.insert((userId, doc) => {
|
||||
@@ -174,25 +180,34 @@ if (Meteor.isServer) {
|
||||
const comment = activity.comment();
|
||||
params.comment = comment.text;
|
||||
if (board) {
|
||||
const atUser = /(?:^|>|\b|\s)@(\S+)(?:\s|$|<|\b)/g;
|
||||
const comment = params.comment;
|
||||
if (comment.match(atUser)) {
|
||||
const commenter = params.user;
|
||||
while (atUser.exec(comment)) {
|
||||
const username = RegExp.$1;
|
||||
if (commenter === username) {
|
||||
// it's person at himself, ignore it?
|
||||
continue;
|
||||
}
|
||||
const user = Users.findOne(username) || Users.findOne({ username });
|
||||
const uid = user && user._id;
|
||||
params.atUsername = username;
|
||||
params.atEmails = user.emails;
|
||||
if (board.hasMember(uid)) {
|
||||
title = 'act-atUserComment';
|
||||
watchers = _.union(watchers, [uid]);
|
||||
}
|
||||
const knownUsers = board.members.map(member => {
|
||||
const u = Users.findOne(member.userId);
|
||||
if (u) {
|
||||
member.username = u.username;
|
||||
member.emails = u.emails;
|
||||
}
|
||||
return member;
|
||||
});
|
||||
const mentionRegex = /\B@(?:(?:"([\w.\s]*)")|([\w.]+))/gi; // including space in username
|
||||
let currentMention;
|
||||
while ((currentMention = mentionRegex.exec(comment)) !== null) {
|
||||
/*eslint no-unused-vars: ["error", { "varsIgnorePattern": "[iI]gnored" }]*/
|
||||
const [ignored, quoteduser, simple] = currentMention;
|
||||
const username = quoteduser || simple;
|
||||
if (username === params.user) {
|
||||
// ignore commenter mention himself?
|
||||
continue;
|
||||
}
|
||||
const atUser = _.findWhere(knownUsers, { username });
|
||||
if (!atUser) {
|
||||
continue;
|
||||
}
|
||||
const uid = atUser.userId;
|
||||
params.atUsername = username;
|
||||
params.atEmails = atUser.emails;
|
||||
title = 'act-atUserComment';
|
||||
watchers = _.union(watchers, [uid]);
|
||||
}
|
||||
}
|
||||
params.commentId = comment._id;
|
||||
@@ -227,8 +242,8 @@ if (Meteor.isServer) {
|
||||
(!activity.timeKey || activity.timeKey === 'dueAt') &&
|
||||
activity.timeValue
|
||||
) {
|
||||
// due time reminder
|
||||
title = 'act-withDue';
|
||||
// due time reminder, if it doesn't have old value, it's a brand new set, need some differentiation
|
||||
title = activity.timeOldValue ? 'act-withDue' : 'act-newDue';
|
||||
}
|
||||
['timeValue', 'timeOldValue'].forEach(key => {
|
||||
// copy time related keys & values to params
|
||||
@@ -268,13 +283,24 @@ if (Meteor.isServer) {
|
||||
});
|
||||
|
||||
const integrations = Integrations.find({
|
||||
boardId: board._id,
|
||||
type: 'outgoing-webhooks',
|
||||
boardId: { $in: [board._id, Integrations.Const.GLOBAL_WEBHOOK_ID] },
|
||||
// type: 'outgoing-webhooks', // all types
|
||||
enabled: true,
|
||||
activities: { $in: [description, 'all'] },
|
||||
}).fetch();
|
||||
if (integrations.length > 0) {
|
||||
Meteor.call('outgoingWebhooks', integrations, description, params);
|
||||
params.watchers = watchers;
|
||||
integrations.forEach(integration => {
|
||||
Meteor.call(
|
||||
'outgoingWebhooks',
|
||||
integration,
|
||||
description,
|
||||
params,
|
||||
() => {
|
||||
return;
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -25,6 +25,8 @@ Announcements.attachSchema(
|
||||
autoValue() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
|
||||
@@ -55,6 +55,8 @@ Boards.attachSchema(
|
||||
autoValue() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
@@ -697,6 +699,13 @@ Boards.helpers({
|
||||
return result;
|
||||
},
|
||||
|
||||
cardsDueInBetween(start, end) {
|
||||
return Cards.find({
|
||||
boardId: this._id,
|
||||
dueAt: { $gte: start, $lte: end },
|
||||
});
|
||||
},
|
||||
|
||||
cardsInInterval(start, end) {
|
||||
return Cards.find({
|
||||
boardId: this._id,
|
||||
|
||||
@@ -34,6 +34,8 @@ CardComments.attachSchema(
|
||||
autoValue() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
|
||||
+38
-8
@@ -107,6 +107,8 @@ Cards.attachSchema(
|
||||
autoValue() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
@@ -1556,6 +1558,7 @@ function cardRemover(userId, doc) {
|
||||
const findDueCards = days => {
|
||||
const seekDue = ($from, $to, activityType) => {
|
||||
Cards.find({
|
||||
archived: false,
|
||||
dueAt: { $gte: $from, $lt: $to },
|
||||
}).forEach(card => {
|
||||
const username = Users.findOne(card.userId).username;
|
||||
@@ -1576,18 +1579,38 @@ const findDueCards = days => {
|
||||
const now = new Date(),
|
||||
aday = 3600 * 24 * 1e3,
|
||||
then = day => new Date(now.setHours(0, 0, 0, 0) + day * aday);
|
||||
seekDue(then(1), then(days), 'almostdue');
|
||||
seekDue(then(0), then(1), 'duenow');
|
||||
seekDue(then(-days), now, 'pastdue');
|
||||
if (!days) return;
|
||||
if (!days.map) days = [days];
|
||||
days.map(day => {
|
||||
let args = [];
|
||||
if (day === 0) {
|
||||
args = [then(0), then(1), 'duenow'];
|
||||
} else if (day > 0) {
|
||||
args = [then(1), then(day), 'almostdue'];
|
||||
} else {
|
||||
args = [then(day), now, 'pastdue'];
|
||||
}
|
||||
seekDue(...args);
|
||||
});
|
||||
};
|
||||
const addCronJob = _.debounce(
|
||||
Meteor.bindEnvironment(function findDueCardsDebounced() {
|
||||
const notifydays =
|
||||
parseInt(process.env.NOTIFY_DUE_DAYS_BEFORE_AND_AFTER, 10) || 2; // default as 2 days before and after
|
||||
if (!(notifydays > 0 && notifydays < 15)) {
|
||||
// notifying due is disabled
|
||||
const envValue = process.env.NOTIFY_DUE_DAYS_BEFORE_AND_AFTER;
|
||||
if (!envValue) {
|
||||
return;
|
||||
}
|
||||
const notifydays = envValue
|
||||
.split(',')
|
||||
.map(value => {
|
||||
const iValue = parseInt(value, 10);
|
||||
if (!(iValue > 0 && iValue < 15)) {
|
||||
// notifying due is disabled
|
||||
return false;
|
||||
} else {
|
||||
return iValue;
|
||||
}
|
||||
})
|
||||
.filter(Boolean);
|
||||
const notifyitvl = process.env.NOTIFY_DUE_AT_HOUR_OF_DAY; //passed in the itvl has to be a number standing for the hour of current time
|
||||
const defaultitvl = 8; // default every morning at 8am, if the passed env variable has parsing error use default
|
||||
const itvl = parseInt(notifyitvl, 10) || defaultitvl;
|
||||
@@ -1829,8 +1852,15 @@ if (Meteor.isServer) {
|
||||
const check = Users.findOne({
|
||||
_id: req.body.authorId,
|
||||
});
|
||||
const members = req.body.members || [req.body.authorId];
|
||||
if (typeof check !== 'undefined') {
|
||||
let members = req.body.members || [];
|
||||
if (_.isString(members)) {
|
||||
if (members === '') {
|
||||
members = [];
|
||||
} else {
|
||||
members = [members];
|
||||
}
|
||||
}
|
||||
const id = Cards.direct.insert({
|
||||
title: req.body.title,
|
||||
boardId: paramBoardId,
|
||||
|
||||
@@ -44,6 +44,8 @@ ChecklistItems.attachSchema(
|
||||
autoValue() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
|
||||
+13
-2
@@ -35,6 +35,8 @@ Checklists.attachSchema(
|
||||
autoValue() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
@@ -274,6 +276,7 @@ if (Meteor.isServer) {
|
||||
* @param {string} boardId the board ID
|
||||
* @param {string} cardId the card ID
|
||||
* @param {string} title the title of the new checklist
|
||||
* @param {string} [items] the list of items on the new checklist
|
||||
* @return_type {_id: string}
|
||||
*/
|
||||
JsonRoutes.add(
|
||||
@@ -289,11 +292,19 @@ if (Meteor.isServer) {
|
||||
sort: 0,
|
||||
});
|
||||
if (id) {
|
||||
req.body.items.forEach(function(item, idx) {
|
||||
let items = req.body.items || [];
|
||||
if (_.isString(items)) {
|
||||
if (items === '') {
|
||||
items = [];
|
||||
} else {
|
||||
items = [items];
|
||||
}
|
||||
}
|
||||
items.forEach(function(item, idx) {
|
||||
ChecklistItems.insert({
|
||||
cardId: paramCardId,
|
||||
checklistId: id,
|
||||
title: item.title,
|
||||
title: item,
|
||||
sort: idx,
|
||||
});
|
||||
});
|
||||
|
||||
@@ -78,6 +78,8 @@ CustomFields.attachSchema(
|
||||
autoValue() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
|
||||
+20
-4
@@ -63,6 +63,8 @@ Integrations.attachSchema(
|
||||
autoValue() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
@@ -88,16 +90,30 @@ Integrations.attachSchema(
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
Integrations.Const = {
|
||||
GLOBAL_WEBHOOK_ID: '_global',
|
||||
ONEWAY: 'outgoing-webhooks',
|
||||
TWOWAY: 'bidirectional-webhooks',
|
||||
get WEBHOOK_TYPES() {
|
||||
return [this.ONEWAY, this.TWOWAY];
|
||||
},
|
||||
};
|
||||
const permissionHelper = {
|
||||
allow(userId, doc) {
|
||||
const user = Users.findOne(userId);
|
||||
const isAdmin = user && Meteor.user().isAdmin;
|
||||
return isAdmin || allowIsBoardAdmin(userId, Boards.findOne(doc.boardId));
|
||||
},
|
||||
};
|
||||
Integrations.allow({
|
||||
insert(userId, doc) {
|
||||
return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId));
|
||||
return permissionHelper.allow(userId, doc);
|
||||
},
|
||||
update(userId, doc) {
|
||||
return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId));
|
||||
return permissionHelper.allow(userId, doc);
|
||||
},
|
||||
remove(userId, doc) {
|
||||
return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId));
|
||||
return permissionHelper.allow(userId, doc);
|
||||
},
|
||||
fetch: ['boardId'],
|
||||
});
|
||||
|
||||
@@ -18,6 +18,8 @@ InvitationCodes.attachSchema(
|
||||
autoValue() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
|
||||
@@ -45,6 +45,8 @@ Lists.attachSchema(
|
||||
autoValue() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
|
||||
@@ -98,6 +98,8 @@ Org.attachSchema(
|
||||
autoValue() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
|
||||
@@ -49,6 +49,8 @@ OrgUser.attachSchema(
|
||||
autoValue() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
|
||||
@@ -27,6 +27,8 @@ Rules.attachSchema(
|
||||
autoValue() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
|
||||
@@ -60,6 +60,8 @@ Settings.attachSchema(
|
||||
autoValue() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
|
||||
@@ -38,6 +38,8 @@ Swimlanes.attachSchema(
|
||||
autoValue() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
|
||||
@@ -12,6 +12,16 @@ Triggers.mutations({
|
||||
},
|
||||
});
|
||||
|
||||
Triggers.before.insert((userId, doc) => {
|
||||
doc.createdAt = new Date();
|
||||
doc.updatedAt = doc.createdAt;
|
||||
});
|
||||
|
||||
Triggers.before.update((userId, doc, fieldNames, modifier) => {
|
||||
modifier.$set = modifier.$set || {};
|
||||
modifier.$set.updatedAt = new Date();
|
||||
});
|
||||
|
||||
Triggers.allow({
|
||||
insert(userId, doc) {
|
||||
return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId));
|
||||
|
||||
@@ -29,6 +29,8 @@ UnsavedEditCollection.attachSchema(
|
||||
autoValue() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
|
||||
@@ -54,6 +54,8 @@ Users.attachSchema(
|
||||
autoValue() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
@@ -539,6 +541,7 @@ Users.mutations({
|
||||
Meteor.methods({
|
||||
setUsername(username, userId) {
|
||||
check(username, String);
|
||||
check(userId, String);
|
||||
const nUsersWithUsername = Users.find({ username }).count();
|
||||
if (nUsersWithUsername > 0) {
|
||||
throw new Meteor.Error('username-already-taken');
|
||||
|
||||
Loaded 100 of 119 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user