Compare commits

...
88 Commits
Author SHA1 Message Date
Lauri Ojansivu 5b415c851b v3.48 2019-10-09 17:44:12 +03:00
Lauri Ojansivu 95fb392692 Update ChangeLog. 2019-10-09 17:36:49 +03:00
Lauri Ojansivu f2453834ac Merge pull request #2754 from moserben16/master
Update attachments.js
2019-10-09 17:33:56 +03:00
benji 3064cdd371 Update attachments.js
added else condition to check if MAX_IMAGE_PIXEL is not set, so that it is possible to  upload attachments using drag-and-drop or Ctrl+V without setting the environmental-variable.
If this change is not allowed, please document in the wiki, that this is necessary for a fully-running wekan-instance
2019-10-09 14:24:45 +02:00
Lauri Ojansivu 417fed8605 v3.47 2019-10-09 14:15:12 +03:00
Lauri Ojansivu 4eca27498c Update translations. 2019-10-09 14:01:39 +03:00
Lauri Ojansivu d962ecd77f Update ChangeLog. 2019-10-09 14:00:05 +03:00
Lauri Ojansivu 6feb35c079 Merge pull request #2751 from liske/fixes/rest-card-members
REST API: fix handling of members property on card creation
2019-10-09 13:56:11 +03:00
Thomas Liske ea90ce8784 REST API: fix handling of members property on card creation 2019-10-09 07:23:21 +02:00
Lauri Ojansivu 4a42d683af v3.46 2019-10-07 00:39:52 +03:00
Lauri Ojansivu 8faa48fe12 Update translations. 2019-10-07 00:30:08 +03:00
Lauri Ojansivu 67c4fae32b Update ChangeLog. 2019-10-07 00:28:00 +03:00
Lauri Ojansivu 42d31901b5 Merge pull request #2747 from liske/fixes/rest-create-checklist-2746
REST API: fix creation of Checklists (closes wekan/wekan#2746)
2019-10-07 00:22:49 +03:00
Thomas Liske 72b22a73b6 REST API: fix creation of Checklists (closes wekan/wekan#2746) 2019-10-06 22:53:43 +02:00
Lauri Ojansivu 4d30503cb5 Update translations. 2019-10-05 12:58:46 +03:00
Lauri Ojansivu 7b45a0fbfe Update ChangeLog. 2019-10-05 12:57:17 +03:00
Lauri Ojansivu 42dee10dbe Merge branch 'master' of github.com:wekan/wekan 2019-10-05 12:55:05 +03:00
Lauri Ojansivu 68be12d166 More black minicard badges.
Thanks to sfahrenholz and xet7 !

Closes #2745
2019-10-05 12:54:16 +03:00
Lauri Ojansivu fd896c29b5 More black minicard badges.
Thanks to sfahrenholz and xet7 !
2019-10-05 12:52:57 +03:00
Lauri Ojansivu 98a4be643e Update translation. 2019-10-04 23:01:57 +03:00
Lauri Ojansivu b650a89728 v3.45 2019-10-03 07:51:50 +03:00
Lauri Ojansivu 346dba4969 Update translations. 2019-10-03 07:46:50 +03:00
Lauri Ojansivu f3b858ca21 Revert drag handle changes. 2019-10-03 06:03:11 +03:00
Lauri Ojansivu 5bc355f9a5 Drag handles. In progress. 2019-10-03 04:23:33 +03:00
Lauri Ojansivu 21fa26a1be Update ChangeLog. 2019-10-01 21:09:27 +03:00
Lauri Ojansivu 66372271c2 Merge pull request #2740 from whowillcare/master
#2738 adding all pertinent help file for due days, plus modified the …
2019-10-01 18:41:01 +03:00
Sam X. Chen e60926f847 #2738 adding all pertinent help file for due days, plus modified the .list-header-name when in mobile mode 2019-10-01 10:39:36 -04:00
Lauri Ojansivu b04df1d54d Update translations. 2019-10-01 16:18:38 +03:00
Lauri Ojansivu 83f81f4586 Fix prettier. 2019-10-01 01:05:02 +03:00
Lauri Ojansivu 4785086e2f Fix lint. 2019-10-01 00:58:12 +03:00
Lauri Ojansivu 98c38fe58f Drag handles continue. In progress.
Thanks to xet7 !
2019-10-01 00:48:36 +03:00
Lauri Ojansivu 44378fe9d1 Update translations. 2019-09-30 21:31:49 +03:00
Lauri Ojansivu afcca947e3 Update translations. 2019-09-30 15:03:15 +03:00
Lauri Ojansivu 20526756db Update translations. 2019-09-28 15:15:23 +03:00
Lauri Ojansivu 58724f93c9 Update ChangeLog. 2019-09-28 15:05:53 +03:00
Lauri Ojansivu 5d6c68a9cf Merge branch 'master' of github.com:wekan/wekan 2019-09-28 14:56:51 +03:00
Lauri Ojansivu ed4c49090a Merge pull request #2738 from whowillcare/master
Add feature: Add due timeline into Calendar view
2019-09-28 14:57:00 +03:00
Lauri Ojansivu 75dc5f226c Merge branch 'feature-drag-handle' 2019-09-28 14:55:09 +03:00
Sam X. Chen 020b663836 Feature enhancement: Allow wekan master have more flexiblity on setting up due reminder 2019-09-26 12:24:40 -04:00
Sam X. Chen e5f0dd7dd8 Add feature: Add due timeline into Calendar view 2019-09-26 12:20:14 -04:00
Sam X. Chen 4f34adbd44 Merge remote-tracking branch 'upstream/master' 2019-09-26 10:53:58 -04:00
Sam X. Chen 62b72a03c4 Add feature: Add due timeline into Calendar view 2019-09-26 10:53:40 -04:00
Lauri Ojansivu 5696e4a4c6 Update translations. 2019-09-25 21:37:25 +03:00
Lauri Ojansivu 814e264521 Merge pull request #2720 from whowillcare/master
if username contains space, @ functions will fail at certain point
2019-09-25 20:51:51 +03:00
Lauri Ojansivu 872ed4b2f9 Drag handles continue. In progress. 2019-09-25 20:49:19 +03:00
Lauri Ojansivu 1d8633e7e6 Update translations. 2019-09-25 20:46:35 +03:00
Lauri Ojansivu b3637f2781 Merge branch 'master' of github.com:wekan/wekan 2019-09-25 20:44:46 +03:00
Lauri Ojansivu 68d3cdae58 Merge pull request #2734 from jernejh/patch-1
Update sl.i18n.json
2019-09-25 20:44:53 +03:00
jernejh 620a362244 Update sl.i18n.json 2019-09-25 19:08:18 +02:00
Sam X. Chen d5cff1ec48 Add feature: differentiating new due time and modified due time 2019-09-25 11:48:20 -04:00
Sam X. Chen 8d7714760c BUG FIX: archived cards still sent out notification 2019-09-25 11:26:46 -04:00
Sam X. Chen a37723f8a4 Fixing method in users.js didn't have check userId 2019-09-21 15:32:21 -04:00
Sam X. Chen e3a727edec Merge remote-tracking branch 'upstream/master' 2019-09-19 15:17:01 -04:00
Sam X. Chen 4ee88e026e Buxfixed: if username contains space, it will cause @ commment failed to send out email and other 2019-09-19 15:16:48 -04:00
Lauri Ojansivu 55a2473d81 Merge branch 'feature-drag-handle' 2019-09-19 01:12:04 +03:00
Lauri Ojansivu ba754cfaea v3.44 2019-09-17 23:54:31 +03:00
Lauri Ojansivu 7a8011f887 Update ChangeLog. 2019-09-17 22:19:01 +03:00
Lauri Ojansivu 125231beff Add language: Slovenian.
Thanks to translators!
2019-09-17 22:16:06 +03:00
Lauri Ojansivu f70e47a012 Update ChangeLog. 2019-09-17 20:28:39 +03:00
Lauri Ojansivu 0c34566aef Merge pull request #2717 from whowillcare/master
BugFix: in richer editor @ autocomplete doesn't really insert the username properly
2019-09-17 19:37:38 +03:00
Sam X. Chen f29d7daa1d BugFix: in richer editor @ autocomplete doesn't really insert the user name into comment properly 2019-09-17 09:30:26 -04:00
Sam X. Chen 0120c73a80 Merge remote-tracking branch 'upstream/master' 2019-09-17 09:27:36 -04:00
Sam X. Chen 194b6ad46e BugFix: in richer editor @ autocomplete doesn't really insert the user name into comment properly 2019-09-17 09:27:23 -04:00
Lauri Ojansivu 158ddadf54 v3.43 2019-09-17 03:06:01 +03:00
Lauri Ojansivu 9fb0ef7eb2 Update readme. 2019-09-17 02:51:44 +03:00
Lauri Ojansivu 503be10d36 Update Readme. 2019-09-17 02:49:38 +03:00
Lauri Ojansivu 3021f1cbe1 Update ChangeLog. 2019-09-17 02:39:21 +03:00
Lauri Ojansivu c66eba217b Update ChangeLog. 2019-09-17 02:36:49 +03:00
Lauri Ojansivu 8486ccbaa8 Update translations. 2019-09-17 01:43:26 +03:00
Lauri Ojansivu 03d7fc02ec Drag handles. In Progress. 2019-09-17 01:39:10 +03:00
Lauri Ojansivu ddd00a27a9 Merge pull request #2715 from whowillcare/master
fix some issues found
2019-09-17 01:34:55 +03:00
Sam X. Chen b31c42acc4 Merge remote-tracking branch 'upstream/master' 2019-09-16 14:43:51 -04:00
Sam X. Chen 616903114f Fix two-way webhooks - locking might fail sometime 2019-09-16 14:43:32 -04:00
Lauri Ojansivu 6e6e7ded82 Update translations. 2019-09-15 00:03:27 +03:00
Lauri Ojansivu 6c7e1ed3ae Add translation for "Show desktop drag handles".
Thanks to xet7 !
2019-09-14 23:53:56 +03:00
Lauri Ojansivu d896f6dbcf v3.42 2019-09-14 06:06:08 +03:00
Lauri Ojansivu 5e963375cb Update translations. 2019-09-14 06:00:05 +03:00
Lauri Ojansivu 57119868bb Revert drag handle changes.
Thanks to Keelan !

Related #2704
2019-09-14 05:55:32 +03:00
Lauri Ojansivu 7b445dfc93 v3.41 2019-09-13 03:59:51 +03:00
Lauri Ojansivu 5f27a76312 Update translations. 2019-09-13 03:56:37 +03:00
Lauri Ojansivu b34960d1bd Update ChangeLog. 2019-09-13 03:50:09 +03:00
Lauri Ojansivu ff550e9110 Mobile and Desktop drag handles part 1.
Thanks to xet7 !

Related #2081
2019-09-13 03:45:55 +03:00
Lauri Ojansivu 0fcfc3a340 Update readme. 2019-09-12 13:06:35 +03:00
Lauri Ojansivu f95d19ab49 Update readme. 2019-09-12 13:05:01 +03:00
Lauri Ojansivu 50744dead8 Update links at readme. 2019-09-12 12:59:27 +03:00
Lauri Ojansivu a0e5737e4c Anonymize data please. 2019-09-12 10:18:53 +03:00
Sam X. Chen 0b52ba4ded Merge remote-tracking branch 'upstream/master' 2019-09-11 09:05:28 -04:00
Sam X. Chen e0046032e8 Fixing @user in comments doesn't work if it's in a separate line 2019-09-11 09:05:16 -04:00
84 changed files with 35231 additions and 34144 deletions

No files matched your search

+4 -4
View File
@@ -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*
+1 -1
View File
@@ -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
+93
View File
@@ -1,3 +1,96 @@
# 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:
+8 -28
View File
@@ -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
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v3.40.0"
appVersion: "v3.48.0"
files:
userUploads:
- README.md
+36 -16
View File
@@ -309,26 +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,
}),
className: card.color ? `calendar-event-${card.color}` : null,
});
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) {
+2
View File
@@ -131,6 +131,8 @@ Template.previewClipboardImagePopup.onRendered(() => {
direct(results);
},
});
} else {
direct(results);
}
}
};
+3 -2
View File
@@ -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
+1 -1
View File
@@ -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',
});
+39 -11
View File
@@ -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;
+4
View File
@@ -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
+9 -1
View File
@@ -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),
);
+1
View File
@@ -45,6 +45,7 @@ $.fn.escapeableTextComplete = function(strategies, options, ...otherArgs) {
});
},
});
return this;
};
EscapeActions.register('textcomplete', () => {}, () => dropdownMenuIsOpened, {
+2 -2
View File
@@ -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.
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+5 -3
View File
@@ -731,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 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+5 -3
View File
@@ -728,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 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+12 -10
View File
@@ -352,7 +352,7 @@
"language": "Taal",
"last-admin-desc": "Je kunt de permissies niet veranderen omdat er minimaal een administrator moet zijn.",
"leave-board": "Verlaat bord",
"leave-board-pop": "Weet u zeker dat u __boardTitle__ wilt verlaten? U wordt verwijderd van alle kaarten binnen dit bord",
"leave-board-pop": "Weet je zeker dat je __boardTitle__ wilt verlaten? Je wordt verwijderd van alle kaarten binnen dit bord",
"leaveBoardPopup-title": "Bord verlaten?",
"link-card": "Link naar deze kaart",
"list-archive-cards": "Verplaats alle kaarten in deze lijst naar Archief",
@@ -472,7 +472,7 @@
"warn-list-archived": "Let op: deze kaart zit in gearchiveerde lijst",
"watch": "Bekijk",
"watching": "Bekijken",
"watching-info": "Je zal op de hoogte worden gesteld als er een verandering gebeurt op dit bord.",
"watching-info": "Je zal op de hoogte worden gesteld als er een verandering plaatsvind op dit bord.",
"welcome-board": "Welkom Bord",
"welcome-swimlane": "Mijlpaal 1",
"welcome-list1": "Basis",
@@ -502,12 +502,12 @@
"smtp-password": "Wachtwoord",
"smtp-tls": "TLS ondersteuning",
"send-from": "Van",
"send-smtp-test": "Verzend een test email naar uzelf",
"send-smtp-test": "Verzend een test email naar jezelf",
"invitation-code": "Uitnodigings code",
"email-invite-register-subject": "__inviter__ heeft je een uitnodiging gestuurd",
"email-invite-register-text": "Beste __user__,\n\n__inviter__ nodigt je uit voor een Kanban-bord om samen te werken.\n\nHet bord vind je via onderstaande link:\n__url__\n\nJe uitnodigingscode is: __icode__\n\nBedankt en tot ziens.",
"email-smtp-test-subject": "SMTP Test Email",
"email-smtp-test-text": "U heeft met succes een email verzonden",
"email-smtp-test-text": "Je hebt met succes een email verzonden",
"error-invitation-code-not-exist": "Uitnodigings code bestaat niet",
"error-notAuthorized": "Je bent niet toegestaan om deze pagina te bekijken.",
"webhook-title": "Webhook Naam",
@@ -728,12 +728,14 @@
"almostdue": "huidige vervaldatum %s nadert",
"pastdue": "huidige vervaldatum %s is verlopen",
"duenow": "huidige vervaldatum %s is vandaag",
"act-withDue": "__card__ verval herinneringen [__board__]",
"act-almostdue": "was aan het herinneren aan dat de huidige vervaldatum (__timeValue__) van __card__ nadert",
"act-pastdue": "was aan het herinneren aan dat de huidige vervaldatum (__timeValue__) van __card__ is verlopen",
"act-duenow": "was aan het herinneren aan dat de huidige vervaldatum (__timeValue__) van __card__ is nu",
"act-atUserComment": "Je bent genoemd op [__board__] op __card__",
"act-newDue": "__list__/__card__ heeft eerste vervaldatum herinnering [__board__]",
"act-withDue": "__list__/__card__ vervaldatum herinneringen [__board__]",
"act-almostdue": "wil je herinneren aan het naderen van de huidige vervaldatum (__timeValue__) van __card__ ",
"act-pastdue": "wil je herinneren aan het verlopen van de huidige vervaldatum (__timeValue__) van __card__ ",
"act-duenow": "wil je herinneren aan het vandaag verlopen van de huidige vervaldatum (__timeValue__) van __card__ ",
"act-atUserComment": "Je werd genoemd in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Weet je zeker dat je dit account wilt verwijderen? Er is geen herstelmogelijkheid.",
"accounts-allowUserDelete": "Sta gebruikers toe om hun eigen account te verwijderen",
"hide-minicard-label-text": "Verberg minikaart labeltekst"
"hide-minicard-label-text": "Verberg minikaart labeltekst",
"show-desktop-drag-handles": "Toon sleep gereedschap op werkblad"
}
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+741
View File
@@ -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 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+7 -5
View File
@@ -728,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 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+5 -3
View File
@@ -728,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 -738
View File
File diff suppressed because it is too large. Load diff
+740 -738
View File
File diff suppressed because it is too large. Load diff
+29 -20
View File
@@ -180,26 +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 atUser =
Users.findOne(username) || Users.findOne({ username });
const uid = atUser && atUser._id;
params.atUsername = username;
params.atEmails = atUser.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;
@@ -234,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
@@ -281,6 +289,7 @@ if (Meteor.isServer) {
activities: { $in: [description, 'all'] },
}).fetch();
if (integrations.length > 0) {
params.watchers = watchers;
integrations.forEach(integration => {
Meteor.call(
'outgoingWebhooks',
+7
View File
@@ -699,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,
+36 -8
View File
@@ -1558,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;
@@ -1578,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;
@@ -1831,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,
+11 -2
View File
@@ -276,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(
@@ -291,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,
});
});
+1
View File
@@ -541,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');
+4 -4
View File
@@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v3.40.0",
"version": "v3.47.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -25,9 +25,9 @@
}
},
"@babel/runtime": {
"version": "7.5.5",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz",
"integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==",
"version": "7.6.2",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.2.tgz",
"integrity": "sha512-EXxN64agfUqqIGeEjI5dL5z0Sw0ZwWo1mLTi4mQowCZ42O59b7DRpZAnTC6OqdF28wMBMFKNb/4uFGrVaigSpg==",
"requires": {
"regenerator-runtime": "^0.13.2"
}
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v3.40.0",
"version": "v3.48.0",
"description": "Open-Source kanban",
"private": true,
"scripts": {
@@ -53,7 +53,7 @@
"prettier-eslint": "^8.8.2"
},
"dependencies": {
"@babel/runtime": "^7.5.5",
"@babel/runtime": "^7.6.2",
"ajv": "^5.0.0",
"babel-runtime": "^6.26.0",
"bcrypt": "^3.0.2",
+12 -3
View File
@@ -1524,7 +1524,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
<ul class="toc-list-h1">
<li>
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v3.39">Wekan REST API v3.39</a>
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v3.48">Wekan REST API v3.48</a>
</li>
@@ -2017,7 +2017,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
<div class="page-wrapper">
<div class="dark-box"></div>
<div class="content">
<h1 id="wekan-rest-api">Wekan REST API v3.39</h1>
<h1 id="wekan-rest-api">Wekan REST API v3.48</h1>
<blockquote>
<p>Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.</p>
</blockquote>
@@ -4479,7 +4479,8 @@ $.ajax({
</code></pre>
<pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>);
<span class="hljs-keyword">const</span> inputBody = <span class="hljs-string">'{
"title": "string"
"title": "string",
"items": "string"
}'</span>;
<span class="hljs-keyword">const</span> headers = {
<span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>,
@@ -4573,6 +4574,7 @@ System.out.println(response.toString());
<p>Body parameter</p>
</blockquote>
<pre class="highlight tab tab-yaml"><code><span class="hljs-attr">title:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">items:</span> <span class="hljs-string">string</span>
</code></pre>
<h3 id="post_board_card_checklists-parameters">Parameters</h3>
@@ -4615,6 +4617,13 @@ System.out.println(response.toString());
<td>true</td>
<td>the title value</td>
</tr>
<tr>
<td>» items</td>
<td>body</td>
<td>string</td>
<td>true</td>
<td>the items value</td>
</tr>
</tbody>
</table>
<h3 id="post_board_card_checklists-responses">Responses</h3>
+6 -1
View File
@@ -1,7 +1,7 @@
swagger: '2.0'
info:
title: Wekan REST API
version: v3.39
version: v3.48
description: |
The REST API allows you to control and extend Wekan with ease.
@@ -319,6 +319,11 @@ paths:
description: the title value
type: string
required: true
- name: items
in: formData
description: the items value
type: string
required: true
- name: board
in: path
description: the board value
@@ -36,6 +36,9 @@ tx pull -f -l en_GB
echo "Greek:"
tx pull -f -l el
echo "Slovenian:"
tx pull -f -l sl_SI
echo "Spanish:"
tx pull -f -l es
+3 -2
View File
@@ -70,8 +70,9 @@
# 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
#export NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=2
# Notify due days, default is None.
#export NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=2,0
# it will notify user 2 days before due day and on the due day
#
# 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.
+2 -2
View File
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user.
appVersion = 342,
appVersion = 350,
# Increment this for every release.
appMarketingVersion = (defaultText = "3.40.0~2019-09-11"),
appMarketingVersion = (defaultText = "3.48.0~2019-10-09"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,
+6 -3
View File
@@ -13,11 +13,14 @@ Meteor.startup(() => {
const lan = user.getLanguage();
const subject = TAPi18n.__(title, params, lan); // the original function has a fault, i believe the title should be used according to original author
const existing = user.getEmailBuffer().length > 0;
const text = `${existing ? `<br/>\n${subject}<br/>\n` : ''}${
const htmlEnabled =
Meteor.settings.public &&
Meteor.settings.public.RICHER_CARD_COMMENT_EDITOR !== false;
const text = `${existing ? `\n${subject}\n` : ''}${
params.user
} ${TAPi18n.__(description, quoteParams, lan)}<br/>\n${params.url}`;
} ${TAPi18n.__(description, quoteParams, lan)}\n${params.url}`;
user.addEmailBuffer(text);
user.addEmailBuffer(htmlEnabled ? text.replace(/\n/g, '<br/>') : text);
// unlike setTimeout(func, delay, args),
// Meteor.setTimeout(func, delay) does not accept args :-(
+81 -47
View File
@@ -10,11 +10,39 @@ const postCatchError = Meteor.wrapAsync((url, options, resolve) => {
const Lock = {
_lock: {},
has(id) {
return !!this._lock[id];
_timer: {},
echoDelay: 500, // echo should be happening much faster
normalDelay: 1e3, // normally user typed comment will be much slower
ECHO: 2,
NORMAL: 1,
NULL: 0,
has(id, value) {
const existing = this._lock[id];
let ret = this.NULL;
if (existing) {
ret = existing === value ? this.ECHO : this.NORMAL;
}
return ret;
},
set(id) {
this._lock[id] = 1;
clear(id, delay) {
const previous = this._timer[id];
if (previous) {
Meteor.clearTimeout(previous);
}
this._timer[id] = Meteor.setTimeout(() => this.unset(id), delay);
},
set(id, value) {
const state = this.has(id, value);
let delay = this.normalDelay;
if (state === this.ECHO) {
delay = this.echoDelay;
}
if (!value) {
// user commented, we set a lock
value = 1;
}
this._lock[id] = value;
this.clear(id, delay); // always auto reset the locker after delay
},
unset(id) {
delete this._lock[id];
@@ -33,40 +61,44 @@ const webhooksAtbts = (process.env.WEBHOOKS_ATTRIBUTES &&
'commentId',
'swimlaneId',
];
const responseFunc = 'reactOnHookResponse';
Meteor.methods({
[responseFunc](data) {
check(data, Object);
const paramCommentId = data.commentId;
const paramCardId = data.cardId;
const paramBoardId = data.boardId;
const newComment = data.comment;
if (paramCardId && paramBoardId && newComment) {
// only process data with the cardid, boardid and comment text, TODO can expand other functions here to react on returned data
const comment = CardComments.findOne({
_id: paramCommentId,
cardId: paramCardId,
boardId: paramBoardId,
});
const responseFunc = data => {
const paramCommentId = data.commentId;
const paramCardId = data.cardId;
const paramBoardId = data.boardId;
const newComment = data.comment;
if (paramCardId && paramBoardId && newComment) {
// only process data with the cardid, boardid and comment text, TODO can expand other functions here to react on returned data
const comment = CardComments.findOne({
_id: paramCommentId,
cardId: paramCardId,
boardId: paramBoardId,
});
const board = Boards.findOne(paramBoardId);
const card = Cards.findOne(paramCardId);
if (board && card) {
if (comment) {
CardComments.update(comment._id, {
Lock.set(comment._id, newComment);
CardComments.direct.update(comment._id, {
$set: {
text: newComment,
},
});
} else {
const userId = data.userId;
if (userId) {
CardComments.insert({
text: newComment,
userId,
cardId,
boardId,
});
}
}
} else {
const userId = data.userId;
if (userId) {
const inserted = CardComments.direct.insert({
text: newComment,
userId,
cardId,
boardId,
});
Lock.set(inserted._id, newComment);
}
}
},
}
};
Meteor.methods({
outgoingWebhooks(integration, description, params) {
check(integration, Object);
check(description, String);
@@ -119,9 +151,20 @@ Meteor.methods({
if (token) headers['X-Wekan-Token'] = token;
const options = {
headers,
data: is2way ? clonedParams : value,
data: is2way ? { description, ...clonedParams } : value,
};
const url = integration.url;
if (is2way) {
const cid = params.commentId;
const comment = params.comment;
const lockState = cid && Lock.has(cid, comment);
if (cid && lockState !== Lock.NULL) {
// it's a comment and there is a previous lock
return;
} else if (cid) {
Lock.set(cid, comment); // set a lock here
}
}
const response = postCatchError(url, options);
if (
@@ -131,21 +174,12 @@ Meteor.methods({
response.statusCode < 300
) {
if (is2way) {
const cid = params.commentId;
const tooSoon = Lock.has(cid); // if an activity happens to fast, notification shouldn't fire with the same id
if (!tooSoon) {
let clearNotification = () => {};
if (cid) {
Lock.set(cid);
const clearNotificationFlagTimeout = 1000;
clearNotification = () => Lock.unset(cid);
Meteor.setTimeout(clearNotification, clearNotificationFlagTimeout);
}
const data = response.data; // only an JSON encoded response will be actioned
if (data) {
Meteor.call(responseFunc, data, () => {
clearNotification();
});
const data = response.data; // only an JSON encoded response will be actioned
if (data) {
try {
responseFunc(data);
} catch (e) {
throw new Meteor.Error('error-process-data');
}
}
}
+1 -1
View File
@@ -108,7 +108,7 @@ DESCRIPTION_BIGEVENTS_PATTERN="Big events pattern: Notify always due etc regardl
DEFAULT_BIGEVENTS_PATTERN="NONE"
KEY_BIGEVENTS_PATTERN="bigevents-pattern"
DESCRIPTION_NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="Notify due days, default 2 days before and after. 0 = due notifications disabled. Default: 2"
DESCRIPTION_NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="Notify due days, accepts ',' delimited string, i.e. 2,0 means notify will be sent out 2 days before and right on due day. Default: empty"
DEFAULT_NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=""
KEY_NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="notify-due-days-before-and-after"
+3 -6
View File
@@ -104,13 +104,10 @@ echo -e "\t$ snap set $SNAP_NAME bigevents-pattern='NONE'"
echo -e "\n"
echo -e "EMAIL DUE DATE NOTIFICATION https://github.com/wekan/wekan/pull/2536"
echo -e "System timelines will be showing any user modification for dueat startat endat receivedat, also notification to the watchers and if any card is due, about due or past due."
echo -e "Notify due days, default 2 days before and after. 0 = due notifications disabled. Default: 2"
echo -e "To enable different Notify Due Days Before And After than default 2:"
echo -e "\t$ snap set $SNAP_NAME notify-due-days-before-and-after='4'"
echo -e "Notify due days, number less than 15 or negative number accepted, you can specify multiple days delimited by ','. Default: NONE"
echo -e "To enable different Notify for Due Days on 2 days before, and on the event day "
echo -e "\t$ snap set $SNAP_NAME notify-due-days-before-and-after='2,0'"
echo -e "\t-Disable Notifying for Due Days:"
echo -e "\t$ snap set $SNAP_NAME notify-due-days-before-and-after='0'"
echo -e "\n"
echo -e "\t-To set back to default 2:"
echo -e "\t$ snap set $SNAP_NAME notify-due-days-before-and-after=''"
echo -e "\n"
echo -e "Notify due at hour of day. Default every morning at 8am. Can be 0-23."
+2 -2
View File
@@ -64,8 +64,8 @@ REM # https://github.com/wekan/wekan/pull/2536
REM # System timelines will be showing any user modification for
REM # dueat startat endat receivedat, also notification to
REM # the watchers and if any card is due, about due or past due.
REM # Notify due days, default 2 days before and after. 0 = due notifications disabled. Default: 2
REM SET NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=2
REM # Notify due days, default is None.
REM # SET NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=2,0
REM # Notify due at hour of day. Default every morning at 8am. Can be 0-23.
REM # If env variable has parsing error, use default. Notification sent to watchers.
REM SET NOTIFY_DUE_AT_HOUR_OF_DAY=8
+3 -2
View File
@@ -71,8 +71,9 @@
# 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
#export NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=2
# Notify due days, default is None.
#export NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=2,0
# it will notify user 2 days before due day and on the due day
#
# 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.