Compare commits

...
56 Commits
Author SHA1 Message Date
Lauri Ojansivu 843ff8eaaa v5.26 2021-04-28 12:38:15 +03:00
Lauri Ojansivu c5143e2c54 Updated translations. 2021-04-28 12:34:30 +03:00
Lauri Ojansivu 0596f5e864 Updated ChangeLog. 2021-04-28 12:28:09 +03:00
Lauri Ojansivu 8ca1b25daf Bring back Almost-Due for Start Date.
Thanks to darren-teo !

Fixes #3766
2021-04-28 12:26:31 +03:00
Lauri Ojansivu 1f76159bfe Updated ChangeLog. 2021-04-28 12:19:43 +03:00
Lauri Ojansivu 39ece35f52 Merge pull request #3765 from HappyMushroom-TechTeam/feature/miniCard_subtaskCount
Feature/mini card subtask count
2021-04-28 12:18:03 +03:00
ryanMushy 63c1bb9e17 count subtasks just like checklists 2021-04-27 18:28:23 -07:00
Lauri Ojansivu 354622c5ad v5.25 2021-04-27 23:11:23 +03:00
Lauri Ojansivu df7fd8c900 v5.25 2021-04-27 23:02:49 +03:00
Lauri Ojansivu 7957690fca Updated translations. 2021-04-27 22:57:25 +03:00
Lauri Ojansivu 63d19447a0 Updated ChangeLog. 2021-04-27 22:50:53 +03:00
Lauri Ojansivu 018a84ec59 Merge pull request #3764 from HappyMushroom-TechTeam/feature/excel_swimlanExport
cherry pick the excel export feature to add swimlanes to the output
2021-04-27 22:47:41 +03:00
ryanMushy e5c0e623a0 cherry pick the excel export feature to add swimlanes to the output 2021-04-27 12:38:38 -07:00
ryan neal 9a2d3e15e8 Merge pull request #2 from wekan/master
newest version
2021-04-27 12:36:57 -07:00
Lauri Ojansivu c07e262e68 Updated translations. 2021-04-27 20:29:01 +03:00
Lauri Ojansivu cacb2b91ee Updated ChangeLog. 2021-04-27 20:18:37 +03:00
Lauri Ojansivu 6f269d598f Merge pull request #3762 from bentiss/nested-openapi
openapi: better handle nested schemas
2021-04-27 20:16:59 +03:00
Lauri Ojansivu 57ea254bff Updated ChangeLog. 2021-04-27 19:51:09 +03:00
Lauri Ojansivu 7e183c838f Merge pull request #3761 from HappyMushroom-TechTeam/bugfix/summernoteOnPaste
Bugfix/summernote on paste
2021-04-27 19:48:46 +03:00
Lauri Ojansivu 3ffdfd9736 Updated ChangeLog. 2021-04-27 19:47:40 +03:00
Lauri Ojansivu 621c701bef Fixed language name of Deutsch (Schweiz).
Thanks to urmel1960 !

Fixes #3763
2021-04-27 19:45:18 +03:00
Lauri Ojansivu 3c24c9966c Updated ChangeLog. 2021-04-27 19:38:20 +03:00
Lauri Ojansivu 995de525d9 Added missing postgres password to ToroDB.
Thanks to xet7 !
2021-04-27 19:36:34 +03:00
Benjamin Tissoires ae30b1220a openapi: better handle nested schemas
there is a 2 levels schemas in profile.notifications.

The code previously assumed we could only have one level, and so was not
producing the correct UsersProfileNotifications.

Fix that by being more generic in the way we retrieve the nested
subschemas.
2021-04-27 10:44:27 +02:00
ryanMushy e380ad26c2 Images are uploaded twice
- make sure only pastes which contain text are processed
- remove execCommand() as it results in errors
- enable drag & drop
- fix resize buttons to be the proper summernote commands
- remove un-needed comma
2021-04-26 23:31:07 -07:00
ryan neal 9bb31d2380 Merge pull request #1 from wekan/master
newest wekan
2021-04-26 12:10:21 -07:00
Lauri Ojansivu 8ec1e4f3fa Updated ChangeLog. 2021-04-24 20:18:04 +03:00
Lauri Ojansivu 9f0f6841b0 Updated release scripts. 2021-04-24 20:16:27 +03:00
Lauri Ojansivu 5d18f98b44 v5.24 2021-04-24 19:47:12 +03:00
Lauri Ojansivu e738177e08 Updated dependencies.
Thanks to developers of dependencies !
2021-04-24 19:40:50 +03:00
Lauri Ojansivu bb201935b9 Updated translations. 2021-04-24 19:35:48 +03:00
Lauri Ojansivu bcfe6bd616 Updated translations.
Thanks to translators and xet7 !

Fixes #3756
2021-04-24 19:08:08 +03:00
Lauri Ojansivu 9c6352a7bc Updated translations. 2021-04-23 12:53:15 +03:00
Lauri Ojansivu 9110e41f20 Updated ChangeLog. 2021-04-23 00:19:39 +03:00
Lauri Ojansivu 7ae871d3a6 Merge pull request #3753 from jrsupplee/copy-swimlane
Add copy swimlane functionality
2021-04-22 22:50:27 +03:00
Lauri Ojansivu 0ddf027d43 Updated ChangeLog. 2021-04-22 16:54:37 +03:00
Lauri Ojansivu 45124a39f3 Fix Snap: Delete extra symlink that prevented building Snap.
Thanks to xet7 !
2021-04-22 16:52:51 +03:00
John R. Supplee 4940af0573 Add copy swimlane functionality 2021-04-22 14:16:35 +02:00
Lauri Ojansivu 924b5d1733 v5.23 2021-04-22 15:16:22 +03:00
Lauri Ojansivu 2119a3a51e Updated translations. 2021-04-22 14:58:24 +03:00
Lauri Ojansivu dcda99ddf3 Updated ChangeLog. 2021-04-22 14:48:39 +03:00
Lauri Ojansivu 0e35dcd5ad Merge pull request #3749 from listenerri/patch-1
Fix: The bg color of start at button is almost-due
2021-04-22 14:44:34 +03:00
listenerri 991d42ca0b Fix: The bg color of start at button is almost-due
One minute earlier than the current time is almost-due? This should be a faulty logic.
2021-04-22 18:24:18 +08:00
Lauri Ojansivu ac242c96b7 Updated translations. 2021-04-20 21:13:04 +03:00
Lauri Ojansivu 79d45c8e33 Updated ChangeLog. 2021-04-20 21:09:43 +03:00
Lauri Ojansivu 8e9f7102f9 Merge pull request #3741 from jrsupplee/master
Bug fix for Due Cards
2021-04-20 21:07:05 +03:00
John R. Supplee 1952dc309b Bug fix for Due Cards 2021-04-20 16:23:56 +02:00
Lauri Ojansivu 5e7767247f Updated ChangeLog. 2021-04-20 10:09:49 +03:00
Lauri Ojansivu 676bf686c7 Updated dependencies.
Thanks to developers of dependencies !
2021-04-20 10:08:32 +03:00
Lauri Ojansivu 5cd6985368 Updated translations. 2021-04-20 10:02:37 +03:00
Lauri Ojansivu 807e72dcce Updated ChangeLog. 2021-04-20 09:59:30 +03:00
Lauri Ojansivu 71702b5821 Merge pull request #3733 from jrsupplee/issue-1569
Fix: Trello data without labels definition
2021-04-20 09:58:18 +03:00
Lauri Ojansivu 40c56248f1 Merge branch 'mcrute-master' 2021-04-20 08:37:40 +03:00
John R. Supplee 74ac7d8d3f Fix for issue #1569 Trello data without labels definition 2021-04-19 22:37:26 +02:00
Mike Crute e7186b47b0 Support filtering by due date 2021-04-19 07:44:09 -07:00
Lauri Ojansivu 12aa7ea2cb Updated ChangeLog. 2021-04-16 22:33:34 +03:00
95 changed files with 57321 additions and 56280 deletions

No files matched your search

+6 -6
View File
@@ -16,7 +16,7 @@ babel-runtime@1.5.0
base64@1.0.12
binary-heap@1.0.11
blaze@2.4.0
blaze-tools@1.1.0
blaze-tools@1.1.1
boilerplate-generator@1.7.1
browser-policy-common@1.0.11
browser-policy-framing@1.1.0
@@ -52,7 +52,7 @@ ddp@1.4.0
ddp-client@2.4.0
ddp-common@1.4.0
ddp-rate-limiter@1.0.9
ddp-server@2.3.2
ddp-server@2.3.3
deps@1.0.12
diff-sequence@1.1.1
dynamic-import@0.6.0
@@ -70,7 +70,7 @@ fortawesome:fontawesome@4.7.0
geojson-utils@1.0.10
horka:swipebox@1.0.2
hot-code-push@1.0.4
html-tools@1.1.0
html-tools@1.1.1
htmljs@1.1.0
http@1.4.3
id-map@1.1.0
@@ -100,7 +100,7 @@ meteorhacks:collection-utils@1.2.0
meteorhacks:picker@1.0.3
meteorhacks:subs-manager@1.6.4
meteorspark:util@0.2.0
minifier-css@1.5.3
minifier-css@1.5.4
minifier-js@2.6.0
minifiers@1.1.8-faster-rebuild.0
minimongo@1.6.2
@@ -208,10 +208,10 @@ simple:json-routes@2.1.0
simple:rest-accounts-password@1.1.2
simple:rest-bearer-token-parser@1.0.1
simple:rest-json-error-handler@1.0.1
socket-stream-client@0.3.1
socket-stream-client@0.3.2
softwarerero:accounts-t9n@1.3.11
spacebars@1.1.0
spacebars-compiler@1.2.0
spacebars-compiler@1.2.1
srp@1.1.0
standard-minifier-css@1.7.2
standard-minifier-js@2.6.0
+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 = ar_EG:ar-EG, bg_BG:bg, de_CH:de-CH, en_GB:en-GB, es_AR:es-AR, es_CL:es-CL, es_419:es-LA, es_PE:es-PE, es_MX:es-MX, es_TX:es-TX, es_PY:es-PY, el_GR:el, fa_IR:fa-IR, fi_FI:fi, hu_HU:hu, id_ID:id, mn_MN:mn, 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
lang_map = ar_EG:ar-EG, bg_BG:bg, de_CH:de-CH, en_GB:en-GB, es_AR:es-AR, es_CL:es-CL, es_419:es-LA, es_PE:es-PE, es_MX:es-MX, es_TX:es-TX, es_PY:es-PY, el_GR:el, fa_IR:fa-IR, fi_FI:fi, hu_HU:hu, id_ID:id, mn_MN:mn, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, sl_SI:sl, zh_CN:zh-CN, zh_TW:zh-TW, zh_HK:zh-HK
[wekan.application]
file_filter = i18n/<lang>.i18n.json
+84 -3
View File
@@ -1,10 +1,91 @@
# v5.26 2021-04-28 Wekan release
This release adds the following new features:
- [Feature/mini card subtask count](https://github.com/wekan/wekan/pull/3765).
Thanks to ryanMushy.
and fixes the following bugs:
- [Bring back Almost-Due for Start Date](https://github.com/wekan/wekan/commit/8ca1b25daf3be60c2dc64f03830dea8437bbd8ad).
Thanks to darren-teo.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.25 2021-04-27 Wekan release
This release adds the following new features:
- [Swimlane in Export to Excel](https://github.com/wekan/wekan/pull/3764).
Thanks to Keelan and ryanMushy.
and adds the following updates:
- [Updated release scripts](https://github.com/wekan/wekan/commit/9f0f6841b01b88f5559724b047d5e245617a02c8).
Thanks to xet7.
and fixes the following bugs:
- [Added missing PostgreSQL password to ToroDB](https://github.com/wekan/wekan/commit/995de525d96946702536f0cdcb98ef281b9df94e).
Thanks to xet7.
- [Fixed language name of Deutsch (Schweiz)](https://github.com/wekan/wekan/commit/621c701bef1d09d4ddfc93be411cfad98869f0ae).
Thanks to urmel1960.
- [Bugfix/Summernote on paste](https://github.com/wekan/wekan/pull/3761).
Thanks to ryanMushy.
- [OpenAPI: Better handle nested schemas](https://github.com/wekan/wekan/pull/3762).
Thanks to bentiss.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.24 2021-04-24 Wekan release
This release adds the following new features:
- [Copy Swimlane](https://github.com/wekan/wekan/pull/3753).
Thanks to jrsupplee.
and adds the following updates:
- [Updated dependencies](https://github.com/wekan/wekan/commit/e738177e081e4a7e83fed3389f47847403551fc2).
Thanks to developers of dependencies.
and fixes the following bugs:
- [Fix Snap: Delete extra symlink that prevented building Snap](https://github.com/wekan/wekan/commit/45124a39f34a918b251a4a36fb016639b558f119).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.23 2021-04-22 Wekan release
This release adds the following new features:
- [Filtering by due date](https://github.com/wekan/wekan/pull/3731).
Thanks to mcrute.
and adds the following updates:
- [Updated dependencies](https://github.com/wekan/wekan/commit/676bf686c7a121b0da744afce5911807a6be48fe).
Thanks to developers of dependencies.
and fixes the following bugs:
- [Fix: Trello data without labels definition](https://github.com/wekan/wekan/pull/3733).
Thanks to jrsupplee.
- [Bug fix for Due Cards](https://github.com/wekan/wekan/pull/3741).
Thanks to jrsupplee.
- [Fix: The bg color of start at button is almost-due](https://github.com/wekan/wekan/pull/3749).
Thanks to listenerri.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.22 2021-04-16 Wekan release
This release adds the following new translations:
- Added German (Switzerland) (de_CH) (Schwiizerdütsch). Updated translations.
[Part 1](https://github.com/wekan/wekan/commit/09506c78f3c3439db622574eb851fa0c20d3a066),
[Part 2](https://github.com/wekan/wekan/commit/dce99c00be80cceba686fd73b4b78b6c778d78a6).
[Part 2](https://github.com/wekan/wekan/commit/dce99c00be80cceba686fd73b4b78b6c778d78a6),
[Part 3](https://github.com/wekan/wekan/commit/6ff9c5b58d25ba52b11e5429c9cfe6ed6a97000e).
Thanks to translators.
@@ -19,11 +100,11 @@ Thanks to above GitHub users for their contributions and translators for their t
This release adds the following new features:
- [Summernote Rich Text Editor:
- [Summernote Rich Text Editor](https://github.com/wekan/wekan/pull/3720):
1) Add new button to insert a URL link.
2) Add new popover allowing you to edit existing URL links.
3) Enable spell check.
4) Allow client side grammerly extension](https://github.com/wekan/wekan/pull/3720).
4) Allow client side grammerly extension.
Thanks to ryanMushy.
and adds the following updates:
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v5.22.0"
appVersion: "v5.26.0"
files:
userUploads:
- README.md
+5
View File
@@ -129,3 +129,8 @@ template(name="minicard")
.badge(class="{{#if checklistFinished}}is-finished{{/if}}")
span.badge-icon.fa.fa-check-square-o
span.badge-text.check-list-text {{checklistFinishedCount}}/{{checklistItemCount}}
if allSubtasks.count
.badge
span.badge-icon.fa.fa-sitemap
span.badge-text.check-list-text {{subtasksFinishedCount}}/{{allSubtasksCount}}
//{{subtasksFinishedCount}}/{{subtasksCount}} does not work because when a subtaks is archived, the count goes down
+3 -3
View File
@@ -3,7 +3,7 @@ import {
OPERATOR_HAS,
OPERATOR_SORT,
OPERATOR_USER,
ORDER_DESCENDING,
ORDER_ASCENDING,
PREDICATE_DUE_AT,
} from '../../../config/search-const';
import { QueryParams } from '../../../config/query-classes';
@@ -62,14 +62,14 @@ class DueCardsComponent extends CardSearchPagedComponent {
// queryParams[OPERATOR_LIMIT] = 5;
queryParams.addPredicate(OPERATOR_SORT, {
name: PREDICATE_DUE_AT,
order: ORDER_DESCENDING,
order: ORDER_ASCENDING,
});
if (Utils.dueCardsView() !== 'all') {
queryParams.addPredicate(OPERATOR_USER, Meteor.user().username);
}
this.runGlobalSearch(queryParams.getQueryParams());
this.runGlobalSearch(queryParams);
}
dueCardsView() {
+15 -8
View File
@@ -145,6 +145,7 @@ Template.editor.onRendered(() => {
const MAX_IMAGE_PIXEL = Utils.MAX_IMAGE_PIXEL;
const COMPRESS_RATIO = Utils.IMAGE_COMPRESS_RATIO;
const insertImage = src => {
// process all image upload types to the description/comment window
const img = document.createElement('img');
img.src = src;
img.setAttribute('width', '100%');
@@ -210,7 +211,16 @@ Template.editor.onRendered(() => {
}
}
},
onPaste() {
onPaste(e) {
var clipboardData = e.clipboardData;
var pastedData = clipboardData.getData('Text');
//if pasted data is an image, exit
if( !pastedData.length ){
e.preventDefault();
return;
}
// clear up unwanted tag info when user pasted in text
const thisNote = this;
const updatePastedText = function(object) {
@@ -219,7 +229,7 @@ Template.editor.onRendered(() => {
// (and multiplies by pasting more) by changing paste "p" to "br".
// Fixes https://github.com/wekan/wekan/2890 .
// == Fix Start ==
someNote.execCommand('defaultParagraphSeparator', false, 'br');
//someNote.execCommand('defaultParagraphSeparator', false, 'br');
// == Fix End ==
const original = someNote.summernote('code');
const cleaned = cleanPastedHTML(original); //this is where to call whatever clean function you want. I have mine in a different file, called CleanPastedHTML.
@@ -231,19 +241,16 @@ Template.editor.onRendered(() => {
//the function is called before the text is really pasted.
updatePastedText(thisNote);
}, 10);
},
}
},
dialogsInBody: true,
spellCheck: true,
disableGrammar: false,
disableDragAndDrop: true,
disableDragAndDrop: false,
toolbar,
popover: {
image: [
[
'image',
['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone'],
],
['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']],
['float', ['floatLeft', 'floatRight', 'floatNone']],
['remove', ['removeMedia']],
],
+1 -1
View File
@@ -78,7 +78,7 @@ Template.userFormsLayout.helpers({
// ar-EG = Arabic (Egypt), simply Masri (مَصرى, [ˈmɑsˤɾi], Egyptian, Masr refers to Cairo)
name = 'مَصرى';
} else if (lang.name === 'de-CH') {
name = 'Schwiizerdütsch';
name = 'Deutsch (Schweiz)';
} else if (lang.name === 'fa-IR') {
// fa-IR = Persian (Iran)
name = 'فارسی/پارسی (ایران‎)';
@@ -72,6 +72,43 @@ template(name="filterSidebar")
| (<span class="username">{{ username }}</span>)
if Filter.assignees.isSelected _id
i.fa.fa-check
hr
h3
i.fa.fa-list-alt
| {{_ 'filter-dates-label' }}
ul.sidebar-list
li(class="{{#if Filter.dueAt.isSelected 'noDate'}}active{{/if}}")
a.name.js-toggle-no-due-date-filter
span.sidebar-list-item-description
| {{_ 'filter-no-due-date' }}
if Filter.dueAt.isSelected 'noDate'
i.fa.fa-check
li(class="{{#if Filter.dueAt.isSelected 'past'}}active{{/if}}")
a.name.js-toggle-overdue-filter
span.sidebar-list-item-description
| {{_ 'filter-overdue' }}
if Filter.dueAt.isSelected 'past'
i.fa.fa-check
li(class="{{#if Filter.dueAt.isSelected 'today'}}active{{/if}}")
a.name.js-toggle-due-today-filter
span.sidebar-list-item-description
| {{_ 'filter-due-today' }}
if Filter.dueAt.isSelected 'today'
i.fa.fa-check
li(class="{{#if Filter.dueAt.isSelected 'tomorrow'}}active{{/if}}")
a.name.js-toggle-due-tomorrow-filter
span.sidebar-list-item-description
| {{_ 'filter-due-tomorrow' }}
if Filter.dueAt.isSelected 'tomorrow'
i.fa.fa-check
li(class="{{#if Filter.dueAt.isSelected 'week'}}active{{/if}}")
a.name.js-toggle-due-this-week-filter
span.sidebar-list-item-description
| {{_ 'filter-due-this-week' }}
if Filter.dueAt.isSelected 'week'
i.fa.fa-check
hr
h3
i.fa.fa-list-alt
@@ -23,6 +23,31 @@ BlazeComponent.extendComponent({
Filter.assignees.toggle(this.currentData()._id);
Filter.resetExceptions();
},
'click .js-toggle-no-due-date-filter'(evt) {
evt.preventDefault();
Filter.dueAt.noDate();
Filter.resetExceptions();
},
'click .js-toggle-overdue-filter'(evt) {
evt.preventDefault();
Filter.dueAt.past();
Filter.resetExceptions();
},
'click .js-toggle-due-today-filter'(evt) {
evt.preventDefault();
Filter.dueAt.today();
Filter.resetExceptions();
},
'click .js-toggle-due-tomorrow-filter'(evt) {
evt.preventDefault();
Filter.dueAt.tomorrow();
Filter.resetExceptions();
},
'click .js-toggle-due-this-week-filter'(evt) {
evt.preventDefault();
Filter.dueAt.thisWeek();
Filter.resetExceptions();
},
'click .js-toggle-archive-filter'(evt) {
evt.preventDefault();
Filter.archive.toggle(this.currentData()._id);
@@ -39,6 +39,8 @@ template(name="swimlaneActionPopup")
hr
ul.pop-over-list
li: a.js-close-swimlane {{_ 'archive-swimlane'}}
ul.pop-over-list
li: a.js-copy-swimlane {{_ 'copy-swimlane'}}
ul.pop-over-list
li: a.js-move-swimlane {{_ 'move-swimlane'}}
@@ -55,6 +55,7 @@ Template.swimlaneActionPopup.events({
Popup.close();
},
'click .js-move-swimlane': Popup.open('moveSwimlane'),
'click .js-copy-swimlane': Popup.open('copySwimlane'),
});
Template.swimlaneActionPopup.events({
@@ -71,3 +71,13 @@ template(name="moveSwimlanePopup")
.edit-controls.clearfix
button.primary.confirm.js-done {{_ 'done'}}
template(name="copySwimlanePopup")
unless currentUser.isWorker
label {{_ 'boards'}}:
select.js-select-boards(autofocus)
each toBoard in toBoards
option(value="{{toBoard._id}}" selected="{{#if $eq toBoard.title board.title}}1{{/if}}") {{toBoard.title}}
.edit-controls.clearfix
button.primary.confirm.js-done {{_ 'done'}}
+30 -21
View File
@@ -324,45 +324,54 @@ BlazeComponent.extendComponent({
},
}).register('listsGroup');
BlazeComponent.extendComponent({
class MoveSwimlaneComponent extends BlazeComponent {
serverMethod = 'moveSwimlane';
onCreated() {
this.currentSwimlane = this.currentData();
},
}
board() {
return Boards.findOne(Session.get('currentBoard'));
},
}
toBoardsSelector() {
return {
archived: false,
'members.userId': Meteor.userId(),
type: 'board',
_id: { $ne: this.board()._id },
};
}
toBoards() {
const boards = Boards.find(
{
archived: false,
'members.userId': Meteor.userId(),
type: 'board',
_id: { $ne: this.board()._id },
},
{
sort: { title: 1 },
},
);
return boards;
},
return Boards.find(this.toBoardsSelector(), { sort: { title: 1 } });
}
events() {
return [
{
'click .js-done'() {
const swimlane = Swimlanes.findOne(this.currentSwimlane._id);
// const swimlane = Swimlanes.findOne(this.currentSwimlane._id);
const bSelect = $('.js-select-boards')[0];
let boardId;
if (bSelect) {
boardId = bSelect.options[bSelect.selectedIndex].value;
Meteor.call('moveSwimlane', this.currentSwimlane._id, boardId);
Meteor.call(this.serverMethod, this.currentSwimlane._id, boardId);
}
Popup.close();
},
},
];
},
}).register('moveSwimlanePopup');
}
}
MoveSwimlaneComponent.register('moveSwimlanePopup');
(class extends MoveSwimlaneComponent {
serverMethod = 'copySwimlane';
toBoardsSelector() {
const selector = super.toBoardsSelector();
delete selector._id;
return selector;
}
}.register('copySwimlanePopup'));
+1 -1
View File
@@ -175,7 +175,7 @@ Template.changeLanguagePopup.helpers({
// fa-IR = Persian (Iran)
name = 'فارسی/پارسی (ایران‎)';
} else if (lang.name === 'de-CH') {
name = 'Schwiizerdütsch';
name = 'Deutsch (Schweiz)';
} else if (lang.name === 'fr-BE') {
name = 'Français (Belgique)';
} else if (lang.name === 'fr-CA') {
+121
View File
@@ -7,6 +7,125 @@ function showFilterSidebar() {
Sidebar.setView('filter');
}
class DateFilter {
constructor() {
this._dep = new Tracker.Dependency();
this.subField = ''; // Prevent name mangling in Filter
this._filter = null;
this._filterState = null;
}
_updateState(state) {
this._filterState = state;
showFilterSidebar();
this._dep.changed();
}
// past builds a filter for all dates before now
past() {
if (this._filterState == 'past') { this.reset(); return; }
this._filter = { $lte: moment().toDate() };
this._updateState('past');
}
// today is a convenience method for calling relativeDay with 0
today() {
if (this._filterState == 'today') { this.reset(); return; }
this.relativeDay(0);
this._updateState('today');
}
// tomorrow is a convenience method for calling relativeDay with 1
tomorrow() {
if (this._filterState == 'tomorrow') { this.reset(); return; }
this.relativeDay(1);
this._updateState('tomorrow');
}
// thisWeek is a convenience method for calling relativeWeek with 1
thisWeek() {
this.relativeWeek(1);
}
// relativeDay builds a filter starting from now and including all
// days up to today +/- offset.
relativeDay(offset) {
if (this._filterState == 'day') { this.reset(); return; }
var startDay = moment().startOf('day').toDate(),
endDay = moment().endOf('day').add(offset, 'day').toDate();
if (offset >= 0) {
this._filter = { $gte: startDay, $lte: endDay };
} else {
this._filter = { $lte: startDay, $gte: endDay };
}
this._updateState('day');
}
// relativeWeek builds a filter starting from today and including all
// weeks up to today +/- offset. This considers the user's preferred
// start of week day (as defined by Meteor).
relativeWeek(offset) {
if (this._filterState == 'week') { this.reset(); return; }
// getStartDayOfWeek returns the offset from Sunday of the user's
// preferred starting day of the week. This date should be added
// to the moment start of week to get the real start of week date.
// The default is 1, meaning Monday.
const currentUser = Meteor.user();
const weekStartDay = currentUser ? currentUser.getStartDayOfWeek() : 1;
// Moments are mutable so they must be cloned before modification
var thisWeekStart = moment().startOf('day').startOf('week').add(weekStartDay, 'days');
var thisWeekEnd = thisWeekStart.clone().add(offset, 'week').endOf('day');
var startDate = thisWeekStart.toDate();
var endDate = thisWeekEnd.toDate();
if (offset >= 0) {
this._filter = { $gte: startDate, $lte: endDate };
} else {
this._filter = { $lte: startDate, $gte: endDate };
}
this._updateState('week');
}
// noDate builds a filter for items where date is not set
noDate() {
if (this._filterState == 'noDate') { this.reset(); return; }
this._filter = null;
this._updateState('noDate');
}
reset() {
this._filter = null;
this._filterState = null;
this._dep.changed();
}
isSelected(val) {
this._dep.depend();
return this._filterState == val;
}
_isActive() {
this._dep.depend();
return this._filterState !== null;
}
_getMongoSelector() {
this._dep.depend();
return this._filter;
}
_getEmptySelector() {
this._dep.depend();
return null;
}
}
// Use a "set" filter for a field that is a set of documents uniquely
// identified. For instance `{ labels: ['labelA', 'labelC', 'labelD'] }`.
// use "subField" for searching inside object Fields.
@@ -462,6 +581,7 @@ Filter = {
assignees: new SetFilter(),
archive: new SetFilter(),
hideEmpty: new SetFilter(),
dueAt: new DateFilter(),
customFields: new SetFilter('_id'),
advanced: new AdvancedFilter(),
lists: new AdvancedFilter(), // we need the ability to filter list by name as well
@@ -472,6 +592,7 @@ Filter = {
'assignees',
'archive',
'hideEmpty',
'dueAt',
'customFields',
],
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+963 -955
View File
File diff suppressed because it is too large. Load diff
+9 -1
View File
@@ -344,6 +344,12 @@
"list-label-short-sort": "(M)",
"filter": "Filter",
"filter-cards": "Karten oder Listen filtern",
"filter-dates-label": "Nach Datum filtern",
"filter-no-due-date": "Kein Fälligkeitsdatum",
"filter-overdue": "Überfällig",
"filter-due-today": "Heute fällig",
"filter-due-this-week": "Diese Woche fällig",
"filter-due-tomorrow": "Morgen fällig",
"list-filter-label": "Liste nach Titel filtern",
"filter-clear": "Filter entfernen",
"filter-labels-label": "Nach Label filtern",
@@ -998,5 +1004,7 @@
"filesReportTitle": "Dateien-Bericht",
"orphanedFilesReportTitle": "Verwaister Datei-Bericht",
"reports": "Berichte",
"rulesReportTitle": "Regeln-Bericht"
"rulesReportTitle": "Regeln-Bericht",
"copy-swimlane": "Kopiere Swimlane",
"copySwimlanePopup-title": "Swimlane kopieren"
}
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+9 -1
View File
@@ -344,6 +344,12 @@
"list-label-short-sort": "(M)",
"filter": "Filter",
"filter-cards": "Filter Cards or Lists",
"filter-dates-label": "Filter by date",
"filter-no-due-date": "No due date",
"filter-overdue": "Overdue",
"filter-due-today": "Due today",
"filter-due-this-week": "Due this week",
"filter-due-tomorrow": "Due tomorrow",
"list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-labels-label": "Filter by label",
@@ -999,5 +1005,7 @@
"filesReportTitle": "Files Report",
"orphanedFilesReportTitle": "Orphaned Files Report",
"reports": "Reports",
"rulesReportTitle": "Rules Report"
"rulesReportTitle": "Rules Report",
"copy-swimlane": "Copy Swimlane",
"copySwimlanePopup-title": "Copy Swimlane"
}
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+19 -11
View File
@@ -344,6 +344,12 @@
"list-label-short-sort": "(M)",
"filter": "Filtrer",
"filter-cards": "Filtrer les cartes ou listes",
"filter-dates-label": "Filtrer par date",
"filter-no-due-date": "Pas de date d'échéance",
"filter-overdue": "Échue",
"filter-due-today": "Arrive à échéance aujourd'hui",
"filter-due-this-week": "Arrive à échéance cette semaine",
"filter-due-tomorrow": "Arrive à échéance demain",
"list-filter-label": "Filtrer la liste par titre",
"filter-clear": "Supprimer les filtres",
"filter-labels-label": "Filtrer par étiquette",
@@ -900,7 +906,7 @@
"operator-member-abbrev": "m",
"operator-assignee": "personne assignée",
"operator-assignee-abbrev": "a",
"operator-creator": "creator",
"operator-creator": "créateur",
"operator-status": "statut",
"operator-due": "échéance",
"operator-created": "créé",
@@ -952,7 +958,7 @@
"globalSearch-instructions-operator-at": "`__operator_user_abbrev__nom` - raccourci pour `__operator_user__:<nom>`",
"globalSearch-instructions-operator-member": "`__operator_member__:<nom>` - cartes pour lesquelles l'utilisateur *<nom>* est *participant*",
"globalSearch-instructions-operator-assignee": "`__operator_assignee__:<nom>` - cartes *assignées* à l'utilisateur *<nom>*",
"globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - cards where *<username>* is the card's creator",
"globalSearch-instructions-operator-creator": "`__operator_creator__:<utilisateur>` - cartes dont le créateur est *<utilisateur>*",
"globalSearch-instructions-operator-due": "`__operator_due__:<n>` - cartes qui arrive à échéance dans moins de *<n>* jours à partir d'aujourd'hui.\n`__operator_due__:__predicate_overdue__` liste toutes les cartes ayant passé la date d'échéance.",
"globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cartes qui ont été créées il y a *<n>* jours ou moins",
"globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cartes qui ont été modifiées il y a *<n>* jours ou moins",
@@ -990,13 +996,15 @@
"now-system-messages-of-all-users-are-hidden": "Les messages système de tous les utilisateurs seront dorénavant masqués",
"move-swimlane": "Déplacer le couloir",
"moveSwimlanePopup-title": "Déplacer le Couloir",
"custom-field-stringtemplate": "String Template",
"custom-field-stringtemplate-format": "Format (use %{value} as placeholder)",
"custom-field-stringtemplate-separator": "Separator (use &#32; or &nbsp; for a space)",
"custom-field-stringtemplate-item-placeholder": "Press enter to add more items",
"creator": "Creator",
"filesReportTitle": "Files Report",
"orphanedFilesReportTitle": "Orphaned Files Report",
"reports": "Reports",
"rulesReportTitle": "Rules Report"
"custom-field-stringtemplate": "Modèle de chaîne",
"custom-field-stringtemplate-format": "Format (utiliser %{valeur} pour marquer un emplacement)",
"custom-field-stringtemplate-separator": "Séparateur (utiliser &#32; ou &nbsp; pour un espace)",
"custom-field-stringtemplate-item-placeholder": "Appuyez sur Entrée pour ajouter plus d'éléments",
"creator": "Créateur",
"filesReportTitle": "Rapports sur les fichiers",
"orphanedFilesReportTitle": "Rapports sur les fichiers orphelins",
"reports": "Rapports",
"rulesReportTitle": "Rapports sur les règles",
"copy-swimlane": "Copier le couloir",
"copySwimlanePopup-title": "Copie de Couloir"
}
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+9 -1
View File
@@ -344,6 +344,12 @@
"list-label-short-sort": "(י)",
"filter": "מסנן",
"filter-cards": "סינון כרטיסים או רשימות",
"filter-dates-label": "סינון לפי תאריך",
"filter-no-due-date": "אין מועד סיום",
"filter-overdue": "מועד הסיום עבר",
"filter-due-today": "מועד הסיום הוא היום",
"filter-due-this-week": "מועד הסיום הוא השבוע",
"filter-due-tomorrow": "מועד הסיום הוא מחר",
"list-filter-label": "סינון רשימה לפי כותרת",
"filter-clear": "ניקוי המסנן",
"filter-labels-label": "סינון לפי תווית",
@@ -998,5 +1004,7 @@
"filesReportTitle": "דוח קבצים",
"orphanedFilesReportTitle": "דוח קבצים יתומים",
"reports": "דוחות",
"rulesReportTitle": "דוח כללים"
"rulesReportTitle": "דוח כללים",
"copy-swimlane": "העתקת מסלול",
"copySwimlanePopup-title": "העתקת מסלול"
}
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+155 -11
View File
@@ -144,7 +144,7 @@
"board-view-collapse": "Slå sammen",
"board-view-gantt": "Gantt",
"board-view-lists": "Lister",
"bucket-example": "Som \"Bucket List\" for eksempel",
"bucket-example": "Som 'Bucket List' for eksempel",
"cancel": "Avbryt",
"card-archived": "Dette kortet er flyttet til Arkivet",
"board-archived": "Denne tavlen er flyttet til Arkivet",
@@ -207,7 +207,7 @@
"clipboard": "Utklippstavle eller Dra og Slipp",
"close": "Lukk",
"close-board": "Lukk Tavle",
"close-board-pop": "Du vil ha muligheten til å gjenopprette Tavle ved å klikke på \"Arkiv\"-knappen i hjem-menyen.",
"close-board-pop": "Du vil ha muligheten til å gjenopprette Tavle ved å klikke på 'Arkiv'-knappen i hjem-menyen.",
"color-black": "svart",
"color-blue": "blå",
"color-crimson": "høyrød",
@@ -322,11 +322,15 @@
"error-user-notAllowSelf": "Du kan ikke invitere deg selv",
"error-user-notCreated": "Denne Brukeren er ikke opprettet",
"error-username-taken": "Brukernavn allerede i bruk",
"error-orgname-taken": "Navn på Organisasjon allerede benyttet",
"error-teamname-taken": "Navn på Team allerede benyttet",
"error-email-taken": "E-postadressen er allerede i bruk",
"export-board": "Eksporter tavle",
"export-board-json": "Eksporter tavle til JSON",
"export-board-csv": "Eksporter tavle til CSV",
"export-board-tsv": "Eksporter tavle til TSV",
"export-board-excel": "Eksporter Tavle til Excel",
"user-can-not-export-excel": "Bruker kan ikke eksportere til Excel",
"export-board-html": "Eksporter tavle til HTML",
"exportBoardPopup-title": "Eksporter tavle",
"sort": "Sorter",
@@ -340,6 +344,12 @@
"list-label-short-sort": "(M)",
"filter": "Filtrer",
"filter-cards": "Filtrer Kort eller Lister",
"filter-dates-label": "Filtrer etter dato",
"filter-no-due-date": "Ingen forfallsdato",
"filter-overdue": "Forfalt",
"filter-due-today": "Forfall i dag",
"filter-due-this-week": "Forfall denne uke",
"filter-due-tomorrow": "Forfall i morgen",
"list-filter-label": "Filtrer Liste etter tittel",
"filter-clear": "Fjern filter",
"filter-labels-label": "Filtrer etter Etikett",
@@ -382,6 +392,7 @@
"import-csv-placeholder": "Lim inn gyldig CSV/TSV-data her",
"import-map-members": "Tilknytt medlemmer",
"import-members-map": "Importert Tavle har medlemmer. Vennligst tilknytt medlemmer som skal importeres til dine Brukere.",
"import-members-map-note": "Merk: Ikke registrerte medlemmer vil bli lagt til nåværende bruker.",
"import-show-user-mapping": "Gjennomgang tilknytning medlemmer",
"import-user-select": "Velg eksisterende Bruker som skal tilknyttes dette Medlemmet",
"importMapMembersAddPopup-title": "Velg Medlem",
@@ -527,7 +538,9 @@
"custom-login-logo-image-url": "Tilpass URL logo-bilde innlogging",
"custom-login-logo-link-url": "Tilpass URL logo-link innlogging",
"text-below-custom-login-logo": "Tekst under tilpasset logo innlogging",
"automatic-linked-url-schemes": "Egendefinerte URL-tilordninger som automatisk skal kunne klikkes på. Kun én URL-tilordning per linje",
"username": "Brukernavn",
"import-usernames": "Importer Brukernavn",
"view-it": "Se det",
"warn-list-archived": "advarsel: dette kortet er i en liste i arkivet",
"watch": "Overvåk",
@@ -546,7 +559,7 @@
"wipLimitErrorPopup-dialog-pt2": "Vennligst flytt noen oppgaver ut av denne listen eller sett høyere WIP-begrensning.",
"admin-panel": "Admin-panel",
"settings": "Innstillinger",
"people": "Folk",
"people": "Medlemmer",
"registration": "Registrering",
"disable-self-registration": "Deaktiver selvregistrering",
"invite": "Inviter",
@@ -599,7 +612,8 @@
"minutes": "minutter",
"seconds": "sekunder",
"show-field-on-card": "Vis dette feltet på kort",
"automatically-field-on-card": "Automatisk oppretting av felt på alle kort",
"automatically-field-on-card": "Legg til felt på nye kort",
"always-field-on-card": "Legg til felt på alle kort",
"showLabel-field-on-card": "Vis feltetikett på minikort",
"yes": "Ja",
"no": "Nei",
@@ -607,6 +621,7 @@
"accounts-allowEmailChange": "Tillat endring e-post",
"accounts-allowUserNameChange": "Tillat endring brukernavn",
"createdAt": "Opprettet på",
"modifiedAt": "Endret kl. ",
"verified": "Verifisert",
"active": "Aktiv",
"card-received": "Mottatt",
@@ -669,6 +684,7 @@
"r-removed-from": "Fjernet fra",
"r-the-board": "tavlen",
"r-list": "listen",
"list": "Liste",
"set-filter": "Sett filter",
"r-moved-to": "Flyttet til",
"r-moved-from": "Flyttet fra",
@@ -851,16 +867,144 @@
"person": "Person",
"my-cards": "Mine Kort",
"card": "Kort",
"list": "Liste",
"board": "Tavle",
"context-separator": "/",
"myCardsSortChange-title": "Sortering mine Kort",
"myCardsSortChangePopup-title": "Sortering mine Kort",
"myCardsSortChange-choice-board": "På Tavle",
"myCardsSortChange-choice-dueat": "På dato Varighet",
"dueCards-title": "Due Cards",
"dueCardsViewChange-title": "Due Cards View",
"dueCardsViewChange-choice-me": "Me",
"dueCardsViewChange-choice-all": "All Users",
"dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.",
"broken-cards": "Broken Cards"
"dueCards-title": "Forfalte Kort",
"dueCardsViewChange-title": "Oversikt Forfalte Kort",
"dueCardsViewChangePopup-title": "Oversikt Forfalte Kort",
"dueCardsViewChange-choice-me": "Meg",
"dueCardsViewChange-choice-all": "Alle Brukere",
"dueCardsViewChange-choice-all-description": "Viser alle kort som ikke er ferdigstilt, med \"Forfallsdato\" fra tavler som brukeren har rettigheter til.",
"broken-cards": "Broken Cards",
"board-title-not-found": "Tavle '%s' ikke funnet.",
"swimlane-title-not-found": "Svømmebane '%s' ikke funnet.",
"list-title-not-found": "Liste '%s' ikke funnet.",
"label-not-found": "Merke '%s' ikke funnet.",
"label-color-not-found": "Farge på Merke %s ikke funnet.",
"user-username-not-found": "Brukernavn '%s' ikke funnet.",
"comment-not-found": "Kort med kommentar som inneholder teksten '%s' ikke funnet.",
"globalSearch-title": "Søk i alle Tavler.",
"no-cards-found": "Ingen Kort funnet.",
"one-card-found": "Ett Kort funnet.",
"n-cards-found": "%s Kort funnet.",
"n-n-of-n-cards-found": "__start__-__end__ av __total__ Kort funnet",
"operator-board": "Tavle",
"operator-board-abbrev": "t",
"operator-swimlane": "svømmebane",
"operator-swimlane-abbrev": "s",
"operator-list": "listen",
"operator-list-abbrev": "l",
"operator-label": "etikett",
"operator-label-abbrev": "#",
"operator-user": "bruker",
"operator-user-abbrev": "@",
"operator-member": "Medlem",
"operator-member-abbrev": "m",
"operator-assignee": "Rettighetstaker",
"operator-assignee-abbrev": "r",
"operator-creator": "oppretter",
"operator-status": "status",
"operator-due": "forfall",
"operator-created": "opprettet",
"operator-modified": "endret",
"operator-sort": "sorter",
"operator-comment": "kommentar",
"operator-has": "har",
"operator-limit": "begens",
"predicate-archived": "arkivert",
"predicate-open": "åpne",
"predicate-ended": "avsluttet",
"predicate-all": "alle",
"predicate-overdue": "forfalt",
"predicate-week": "uke",
"predicate-month": "måned",
"predicate-quarter": "kvartal",
"predicate-year": "år",
"predicate-due": "forfall",
"predicate-modified": "endret",
"predicate-created": "opprettet",
"predicate-attachment": "vedlegg",
"predicate-description": "beskrivelse",
"predicate-checklist": "sjekkliste",
"predicate-start": "start",
"predicate-end": "slutt",
"predicate-assignee": "Rettighetstaker",
"predicate-member": "Medlem",
"predicate-public": "offentlig",
"predicate-private": "privat",
"operator-unknown-error": "%s er ikke en operator",
"operator-number-expected": "operator __operator__ forventet et tall, mottok '__value__'",
"operator-sort-invalid": "sortering av '%s' er ugyldig",
"operator-status-invalid": "'%s' er ikke en gyldig status",
"operator-has-invalid": "%s er ikke en gyldig kontroll av eksistens",
"operator-limit-invalid": "%ser ikke en gyldig begrensning. Begrensning må være et positivt heltall.",
"next-page": "Neste Side",
"previous-page": "Forrige Side",
"heading-notes": "Notater",
"globalSearch-instructions-heading": "Søk etter Instruksjoner",
"globalSearch-instructions-description": "Søk kan inkludere operatorer for å avgrense søket. Operatoren spesifiseres ved å skrive operatorens navn og verdi, atskilt med et kolon. For eksempel vil en spesifisering av operatoren `liste:Blokkert' begrense søket til Kort som er inkludert i en liste med navnet \"Blokkert\". Hvis verdien inneholder mellomrom eller spesialtegn, må den være spesifisert i anførselstegn (f.eks. `__operator_list__:\"To Review\"`).",
"globalSearch-instructions-operators": "Tilgjengelige operatorer:",
"globalSearch-instructions-operator-board": "`__operator_board__:<title>` - kort i tavlene samsvarer med angitt *<title>*",
"globalSearch-instructions-operator-list": "`__operator_list__:<title>` - kort i listene stemmer med angitt *<title>*",
"globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - kort i svømmebaner samsvarer med angitt *<title>*",
"globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - kort med en kommetar inneholdende *<text>*.",
"globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - kort med merke som samsvarer med *<color>* or *<name>",
"globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name|color>` - forkortelse for `__operator_label__:<color>` eller `__operator_label__:<name>`",
"globalSearch-instructions-operator-user": "`__operator_user__:<username>` - kort hvor *<username>* ier et *medlemr* or *rettighetstaker*",
"globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - forkortelse for bruker:<username>`",
"globalSearch-instructions-operator-member": "`__operator_member__:<username>` - kort hvor *<username>* er et *medlem*",
"globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - kort hvor *<username>* er en *rettighetstaker*",
"globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - kort hvor *<username>* er kortenes oppretter",
"globalSearch-instructions-operator-due": "`__operator_due__:<n>` - kort som forfaller om *<n>* dager fra nå. `__operator_due__:__predicate_overdue__ lister alle kort med passert forfallsdato.",
"globalSearch-instructions-operator-created": "`__operator_created__:<n>` - kort som er opprettet *<n>* dager siden eller mindre",
"globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - kort som er modifisert *<n>* dager siden eller mindre",
"globalSearch-instructions-operator-status": "`__operator_status__:<status>` - hvor *<status>* er en av de følgende:",
"globalSearch-instructions-status-archived": "`__predicate_archived__` - arkiverte kort",
"globalSearch-instructions-status-all": "`__predicate_all__` - alle arkiverte eller ikke arkiverte kort",
"globalSearch-instructions-status-ended": "`__predicate_ended__` - kort med en sluttdato",
"globalSearch-instructions-status-public": "`__predicate_public__` - kort bare i offentlige tavler",
"globalSearch-instructions-status-private": "`__predicate_private__` - kort bare i private tavler",
"globalSearch-instructions-operator-has": "`__operator_has__:<field>` - hvor *<field>* er en av `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` eller `__predicate_member__`. Plassering av et `-` foran *<field>* søk i mangel på en verdi i et felt (f.eks. `har:-forfall` søker etter alle kort uten en forfallsdato).",
"globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - hvor *<sort-name>* er en av `__predicate_due__`, `__predicate_created__` eller `__predicate_modified__`. For en synkende sortering, plassér en `-` foran navn på sortering.",
"globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - hvor*<n>* er et positivt heltall som angir antall kort som skal vises på siden.",
"globalSearch-instructions-notes-1": "Flere operatorer kan angis.",
"globalSearch-instructions-notes-2": "Like operatorer er knyttet sammen med \"ELLER\". Kort som samsvarer med noen av de angitte kriteriene vil returneres.\n`__operator_list__:Tilgjengelig __operator_list__:Blokkert` vil returnere Kort som inneholder lister med navnet \"Blokkert\" eller \"Tilgjengelig\".",
"globalSearch-instructions-notes-3": "Forskjellige operatorer er knyttet sammen med *OG*. Bare kort som samsvarer med alle de angitte kriteriene vil returneres. `__operator_list__:Tilgjengelig __operator_list__:rød` vil kun returnere kort i listen *Tilgjengelig* og som er markert med et *rødt* merke.",
"globalSearch-instructions-notes-3-2": "Dager kan angis som et positivt eller negativt heltall, eller ved bruk av `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` eller `__predicate_year__` for den aktuelle perioden.",
"globalSearch-instructions-notes-4": "Tekstsøk er ikke \"case\"-sensitive.",
"globalSearch-instructions-notes-5": "Som standard er arkiverte kort ikke søkbare, ",
"link-to-search": "Link til dette søket",
"excel-font": "Arial",
"number": "Nummer",
"label-colors": "Farge Merke",
"label-names": "Navn på Merke",
"archived-at": "arkivert på",
"sort-cards": "Sortér Kort",
"cardsSortPopup-title": "Sortér Kort",
"due-date": "Forfalldato",
"server-error": "Serverfeil",
"server-error-troubleshooting": "For hjelp til feilsøk ber vi om innsending av feilmelding generert av server.\nFor Snap-installasjon, kjør: `sudo snap logs wekan.wekan`\nFor Docker-installasjon, kjør: `sudo docker logs wekan-app`",
"title-alphabetically": "Tittel (alfabetisk)",
"created-at-newest-first": "Opprettet på (Nyeste Først)",
"created-at-oldest-first": "Opprettet på (Eldste Først)",
"links-heading": "Linker",
"hide-system-messages-of-all-users": "Skjul systemmeldinger for alle brukere",
"now-system-messages-of-all-users-are-hidden": "Systemmeldinger er nå skjult for alle brukere",
"move-swimlane": "Flytt Svømmebane",
"moveSwimlanePopup-title": "Flytt Svømmebane",
"custom-field-stringtemplate": "Mal Tekststreng",
"custom-field-stringtemplate-format": "Format (bruk %{value} som standardverdi)",
"custom-field-stringtemplate-separator": "Tekstseparator (bruk &#32; eller &nbsp; som separator)",
"custom-field-stringtemplate-item-placeholder": "Trykk Enter for å legge til flere objekt",
"creator": "Oppretter",
"filesReportTitle": "Rapportering Filer",
"orphanedFilesReportTitle": "Rapportering Foreldreløse Filer",
"reports": "Rapportering",
"rulesReportTitle": "Rapportering Regler",
"copy-swimlane": "Kopiér Svømmebane",
"copySwimlanePopup-title": "Kopiér Svømmebane"
}
+10 -2
View File
@@ -172,7 +172,7 @@
"card-edit-voting": "Wijzig stemming",
"editVoteEndDatePopup-title": "Wijzig einddatum stemming",
"allowNonBoardMembers": "Sta alle ingelogde gebruikers toe",
"vote-question": "Stemvraag",
"vote-question": "Vraag",
"vote-public": "Toon wie wat gestemd heeft",
"vote-for-it": "Voor",
"vote-against": "tegen",
@@ -344,6 +344,12 @@
"list-label-short-sort": "(M)",
"filter": "Filter",
"filter-cards": "Filter kaarten of lijsten",
"filter-dates-label": "Filter op datum",
"filter-no-due-date": "Geen vervaldatum",
"filter-overdue": "verlopen",
"filter-due-today": "Vervalt vandaag",
"filter-due-this-week": "Vervalt deze week",
"filter-due-tomorrow": "Vervalt morgen",
"list-filter-label": "Filter lijst op titel",
"filter-clear": "Wis filter",
"filter-labels-label": "Filter op label",
@@ -998,5 +1004,7 @@
"filesReportTitle": "Bestanden Rapportage",
"orphanedFilesReportTitle": "Verweesde Bestanden Rapportage",
"reports": "Rapportages",
"rulesReportTitle": "Regels Rapportage"
"rulesReportTitle": "Regels Rapportage",
"copy-swimlane": "Kopieer Swimlane",
"copySwimlanePopup-title": "Kopieer Swimlane"
}
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+9 -1
View File
@@ -344,6 +344,12 @@
"list-label-short-sort": "(M)",
"filter": "Filtrar",
"filter-cards": "Filtrar Cartões ou Listas",
"filter-dates-label": "Filtrar por data",
"filter-no-due-date": "Sem prazo final",
"filter-overdue": "Atrasado",
"filter-due-today": "Para hoje",
"filter-due-this-week": "Para nesta semana",
"filter-due-tomorrow": "Para amanhã",
"list-filter-label": "Filtrar Lista por Título",
"filter-clear": "Limpar filtro",
"filter-labels-label": "Filtrar por etiqueta",
@@ -998,5 +1004,7 @@
"filesReportTitle": "Relatório de Arquivos",
"orphanedFilesReportTitle": "Relatório de Arquivos Órfãos",
"reports": "Relatórios",
"rulesReportTitle": "Regras de Relatório"
"rulesReportTitle": "Regras de Relatório",
"copy-swimlane": "Copiar Raia",
"copySwimlanePopup-title": "Copiar Raia"
}
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+15 -7
View File
@@ -344,6 +344,12 @@
"list-label-short-sort": "(M)",
"filter": "Фильтр",
"filter-cards": "Фильтр Карточек или Списков",
"filter-dates-label": "Фильтр по дате",
"filter-no-due-date": "Без срока выполнения",
"filter-overdue": "Просрочено",
"filter-due-today": "Крайний срок - сегодня",
"filter-due-this-week": "Крайний срок - эта неделя",
"filter-due-tomorrow": "Крайний срок - завтра",
"list-filter-label": "Фильтровать Список по Названию",
"filter-clear": "Очистить фильтр",
"filter-labels-label": "Фильтр по метке",
@@ -900,7 +906,7 @@
"operator-member-abbrev": "m",
"operator-assignee": "Кому назначено",
"operator-assignee-abbrev": "a",
"operator-creator": "creator",
"operator-creator": "автор",
"operator-status": "статус",
"operator-due": "выполнить к",
"operator-created": "создано",
@@ -992,11 +998,13 @@
"moveSwimlanePopup-title": "Переместить дорожку",
"custom-field-stringtemplate": "Строковый шаблон",
"custom-field-stringtemplate-format": "Формат (используйте %{значение} для подстановки)",
"custom-field-stringtemplate-separator": "Separator (use &#32; or &nbsp; for a space)",
"custom-field-stringtemplate-separator": "Разделитель (для пробела используйте &#32; или &nbsp;)",
"custom-field-stringtemplate-item-placeholder": "Press enter to add more items",
"creator": "Creator",
"filesReportTitle": "Files Report",
"orphanedFilesReportTitle": "Orphaned Files Report",
"reports": "Reports",
"rulesReportTitle": "Rules Report"
"creator": "Автор",
"filesReportTitle": "Отчёт по файлам",
"orphanedFilesReportTitle": "Отчёт по потерянным файлам",
"reports": "Отчёты",
"rulesReportTitle": "Отчёт по правилам",
"copy-swimlane": "Скопировать дорожку",
"copySwimlanePopup-title": "Скопировать дорожку"
}
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+1009 -1001
View File
File diff suppressed because it is too large. Load diff
+21 -26
View File
@@ -641,37 +641,32 @@ Cards.helpers({
);
},
allSubtasks() {
return Cards.find(
{
parentId: this._id,
archived: false,
},
{
sort: {
sort: 1,
},
},
);
},
subtasksCount() {
return Cards.find({
parentId: this._id,
archived: false,
}).count();
},
subtasksFinishedCount() {
subtasksFinished() {
return Cards.find({
parentId: this._id,
archived: true,
}).count();
});
},
subtasksFinished() {
const finishCount = this.subtasksFinishedCount();
return finishCount > 0 && this.subtasksCount() === finishCount;
allSubtasks() {
return Cards.find({
parentId: this._id
});
},
subtasksCount() {
const subtasks = this.subtasks();
return subtasks.count();
},
subtasksFinishedCount() {
const subtasksArchived = this.subtasksFinished();
return subtasksArchived.count();
},
allSubtasksCount() {
const allSubtasks = this.allSubtasks();
return allSubtasks.count();
},
allowsSubtasks() {
+27 -4
View File
@@ -239,7 +239,7 @@ export class ExporterExcel {
},
{
key: 'c',
width: 20,
width: 60,
},
{
key: 'd',
@@ -342,6 +342,10 @@ export class ExporterExcel {
key: 'p',
width: 20,
},
{
key: 'q',
width: 20,
},
];
//add title line
@@ -378,10 +382,23 @@ export class ExporterExcel {
for (const klist in result.lists) {
jlist[result.lists[klist]._id] = result.lists[klist].title;
}
//get kanban swimlanes info
const jswimlane = {};
for (const kswimlane in result.swimlanes) {
jswimlane[result.swimlanes[kswimlane]._id] = result.swimlanes[kswimlane].title;
}
//get kanban label info
const jlabel = {};
for (const klabel in result.labels) {
jlabel[result.labels[klabel]._id] = result.labels[klabel].name;
var isFirst = 1;
for (const klabel in result.labels){
console.log(klabel);
if (isFirst == 0){
jlabel[result.labels[klabel]._id] = `,${result.labels[klabel].name}`;
}
else{
isFirst = 0;
jlabel[result.labels[klabel]._id] = result.labels[klabel].name;
}
}
//add data +8 hours
function addTZhours(jdate) {
@@ -413,7 +430,7 @@ export class ExporterExcel {
size: 10,
bold: true,
};
ws.mergeCells('F3:P3');
ws.mergeCells('F3:Q3');
ws.getCell('B3').style = {
font: {
name: TAPi18n.__('excel-font'),
@@ -487,6 +504,7 @@ export class ExporterExcel {
];
//add card title
//ws.addRow().values = ['编号', '标题', '创建人', '创建时间', '更新时间', '列表', '成员', '描述', '标签'];
//this is where order in which the excel file generates
ws.addRow().values = [
TAPi18n.__('number'),
TAPi18n.__('title'),
@@ -499,6 +517,7 @@ export class ExporterExcel {
TAPi18n.__('card-due'),
TAPi18n.__('card-end'),
TAPi18n.__('list'),
TAPi18n.__('swimlane'),
TAPi18n.__('assignee'),
TAPi18n.__('members'),
TAPi18n.__('labels'),
@@ -522,6 +541,7 @@ export class ExporterExcel {
allBorder('N5');
allBorder('O5');
allBorder('P5');
allBorder('Q5');
cellCenter('A5');
cellCenter('B5');
cellCenter('C5');
@@ -538,6 +558,7 @@ export class ExporterExcel {
cellCenter('N5');
cellCenter('O5');
cellCenter('P5');
cellCenter('Q5');
ws.getRow(5).font = {
name: TAPi18n.__('excel-font'),
size: 12,
@@ -580,6 +601,7 @@ export class ExporterExcel {
addTZhours(jcard.dueAt),
addTZhours(jcard.endAt),
jlist[jcard.listId],
jswimlane[jcard.swimlaneId],
jcassig,
jcmem,
jclabel,
@@ -604,6 +626,7 @@ export class ExporterExcel {
allBorder(`N${y}`);
allBorder(`O${y}`);
allBorder(`P${y}`);
allBorder(`Q${y}`);
cellCenter(`A${y}`);
ws.getCell(`B${y}`).alignment = {
wrapText: true,
+39
View File
@@ -147,6 +147,45 @@ Swimlanes.helpers({
});
},
move(toBoardId) {
this.lists().forEach(list => {
const toList = Lists.findOne({
boardId: toBoardId,
title: list.title,
archived: false,
});
let toListId;
if (toList) {
toListId = toList._id;
} else {
toListId = Lists.insert({
title: list.title,
boardId: toBoardId,
type: list.type,
archived: false,
wipLimit: list.wipLimit,
});
}
Cards.find({
listId: list._id,
swimlaneId: this._id,
}).forEach(card => {
card.move(toBoardId, this._id, toListId);
});
});
Swimlanes.update(this._id, {
$set: {
boardId: toBoardId,
},
});
// make sure there is a default swimlane
this.board().getDefaultSwimline();
},
cards() {
return Cards.find(
Filter.mongoSelector({
+13 -11
View File
@@ -208,17 +208,19 @@ export class TrelloCreator {
}
});
}
trelloBoard.labels.forEach(label => {
const labelToCreate = {
_id: Random.id(6),
color: label.color ? label.color : 'black',
name: label.name,
};
// We need to remember them by Trello ID, as this is the only ref we have
// when importing cards.
this.labels[label.id] = labelToCreate._id;
boardToCreate.labels.push(labelToCreate);
});
if (trelloBoard.labels) {
trelloBoard.labels.forEach(label => {
const labelToCreate = {
_id: Random.id(6),
color: label.color ? label.color : 'black',
name: label.name,
};
// We need to remember them by Trello ID, as this is the only ref we have
// when importing cards.
this.labels[label.id] = labelToCreate._id;
boardToCreate.labels.push(labelToCreate);
});
}
const boardId = Boards.direct.insert(boardToCreate);
Boards.direct.update(boardId, { $set: { modifiedAt: this._now() } });
// log activity
+10 -4
View File
@@ -607,6 +607,9 @@ class SchemaProperty(object):
# deal with subschemas
if '.' in name:
subschema = name.split('.')[0]
subschema = subschema.capitalize()
if name.endswith('$'):
# reference in reference
subschema = ''.join([n.capitalize() for n in self.name.split('.')[:-1]])
@@ -621,9 +624,12 @@ class SchemaProperty(object):
print(''' {}:
type: object'''.format(subschema))
return current_schema
elif '$' in name:
# In the form of 'profile.notifications.$.activity'
subschema = name[:name.index('$') - 1] # 'profile.notifications'
subschema = ''.join([s.capitalize() for s in subschema.split('.')])
subschema = name.split('.')[0]
schema_name = self.schema.name + subschema.capitalize()
schema_name = self.schema.name + subschema
name = name.split('.')[-1]
if current_schema != schema_name:
@@ -755,7 +761,7 @@ class Schemas(object):
# then print the references
current = None
required_properties = []
properties = [f for f in self.fields if '.' in f.name and not f.name.endswith('$')]
properties = [f for f in self.fields if '.' in f.name and not '$' in f.name]
for prop in properties:
current = prop.print_openapi(6, current, required_properties)
@@ -766,7 +772,7 @@ class Schemas(object):
required_properties = []
# then print the references in the references
for prop in [f for f in self.fields if '.' in f.name and f.name.endswith('$')]:
for prop in [f for f in self.fields if '.' in f.name and '$' in f.name]:
current = prop.print_openapi(6, current, required_properties)
if required_properties:
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v5.22.0",
"version": "v5.26.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v5.22.0",
"version": "v5.26.0",
"description": "Open-Source kanban",
"private": true,
"scripts": {
+119 -75
View File
@@ -7,7 +7,7 @@
<meta charset="utf-8">
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title>Wekan REST API v5.22</title>
<title>Wekan REST API v5.26</title>
<style>
</style>
@@ -1486,6 +1486,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
<!-- backwards compatibility -->
<!-- backwards compatibility -->
<!-- backwards compatibility -->
<!-- backwards compatibility -->
<!-- backwards compatibility -->
</head>
@@ -1549,7 +1550,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
<ul class="toc-list-h1">
<li>
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v5.22">Wekan REST API v5.22</a>
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v5.26">Wekan REST API v5.26</a>
</li>
@@ -2062,11 +2063,6 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
</li>
<li>
<a href="#tocs_usersemails" class="toc-h2 toc-link" data-title="">UsersEmails</a>
</li>
<li>
<a href="#tocs_usersprofile" class="toc-h2 toc-link" data-title="">UsersProfile</a>
@@ -2077,6 +2073,16 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
</li>
<li>
<a href="#tocs_usersemails" class="toc-h2 toc-link" data-title="">UsersEmails</a>
</li>
<li>
<a href="#tocs_usersprofilenotifications" class="toc-h2 toc-link" data-title="">UsersProfileNotifications</a>
</li>
</ul>
</li>
@@ -2092,7 +2098,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
<div class="page-wrapper">
<div class="dark-box"></div>
<div class="content">
<h1 id="wekan-rest-api">Wekan REST API v5.22</h1>
<h1 id="wekan-rest-api">Wekan REST API v5.26</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>
@@ -15915,9 +15921,12 @@ System.out.println(response.toString());
<span class="hljs-string">&quot;string&quot;</span>
],
<span class="hljs-attr">&quot;language&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;notifications&quot;</span>: [],
<span class="hljs-attr">&quot;activity&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;read&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;notifications&quot;</span>: [
{
<span class="hljs-attr">&quot;activity&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;read&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>
}
],
<span class="hljs-attr">&quot;showCardsCountAt&quot;</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">&quot;startDayOfWeek&quot;</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">&quot;starredBoards&quot;</span>: [
@@ -16653,9 +16662,12 @@ System.out.println(response.toString());
<span class="hljs-string">&quot;string&quot;</span>
],
<span class="hljs-attr">&quot;language&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;notifications&quot;</span>: [],
<span class="hljs-attr">&quot;activity&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;read&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;notifications&quot;</span>: [
{
<span class="hljs-attr">&quot;activity&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;read&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>
}
],
<span class="hljs-attr">&quot;showCardsCountAt&quot;</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">&quot;startDayOfWeek&quot;</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">&quot;starredBoards&quot;</span>: [
@@ -20434,9 +20446,12 @@ UserSecurity
<span class="hljs-string">&quot;string&quot;</span>
],
<span class="hljs-attr">&quot;language&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;notifications&quot;</span>: [],
<span class="hljs-attr">&quot;activity&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;read&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;notifications&quot;</span>: [
{
<span class="hljs-attr">&quot;activity&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;read&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>
}
],
<span class="hljs-attr">&quot;showCardsCountAt&quot;</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">&quot;startDayOfWeek&quot;</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">&quot;starredBoards&quot;</span>: [
@@ -20572,45 +20587,6 @@ UserSecurity
</tr>
</tbody>
</table>
<h2 id="tocs_usersemails">UsersEmails</h2>
<p><a id="schemausersemails"></a>
<a id="schema_UsersEmails"></a>
<a id="tocSusersemails"></a>
<a id="tocsusersemails"></a></p>
<pre class="highlight tab tab-json"><code>{
<span class="hljs-attr">&quot;address&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;verified&quot;</span>: <span class="hljs-literal">true</span>
}
</code></pre>
<h3 id="properties-18">Properties</h3>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Required</th>
<th>Restrictions</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>address</td>
<td>string</td>
<td>true</td>
<td>none</td>
<td>The email address</td>
</tr>
<tr>
<td>verified</td>
<td>boolean</td>
<td>true</td>
<td>none</td>
<td>Has the email been verified</td>
</tr>
</tbody>
</table>
<h2 id="tocs_usersprofile">UsersProfile</h2>
<p><a id="schemausersprofile"></a>
<a id="schema_UsersProfile"></a>
@@ -20631,9 +20607,12 @@ UserSecurity
<span class="hljs-string">&quot;string&quot;</span>
],
<span class="hljs-attr">&quot;language&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;notifications&quot;</span>: [],
<span class="hljs-attr">&quot;activity&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;read&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;notifications&quot;</span>: [
{
<span class="hljs-attr">&quot;activity&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;read&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>
}
],
<span class="hljs-attr">&quot;showCardsCountAt&quot;</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">&quot;startDayOfWeek&quot;</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">&quot;starredBoards&quot;</span>: [
@@ -20649,7 +20628,7 @@ UserSecurity
}
</code></pre>
<h3 id="properties-19">Properties</h3>
<h3 id="properties-18">Properties</h3>
<table>
<thead>
<tr>
@@ -20739,20 +20718,6 @@ UserSecurity
<td>enabled notifications for the user</td>
</tr>
<tr>
<td>activity</td>
<td>string</td>
<td>true</td>
<td>none</td>
<td>The id of the activity this notification references</td>
</tr>
<tr>
<td>read</td>
<td>string</td>
<td>false</td>
<td>none</td>
<td>the date on which this notification was read</td>
</tr>
<tr>
<td>showCardsCountAt</td>
<td>number</td>
<td>false</td>
@@ -20882,7 +20847,7 @@ UserSecurity
}
</code></pre>
<h3 id="properties-20">Properties</h3>
<h3 id="properties-19">Properties</h3>
<table>
<thead>
<tr>
@@ -20910,6 +20875,84 @@ UserSecurity
</tr>
</tbody>
</table>
<h2 id="tocs_usersemails">UsersEmails</h2>
<p><a id="schemausersemails"></a>
<a id="schema_UsersEmails"></a>
<a id="tocSusersemails"></a>
<a id="tocsusersemails"></a></p>
<pre class="highlight tab tab-json"><code>{
<span class="hljs-attr">&quot;address&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;verified&quot;</span>: <span class="hljs-literal">true</span>
}
</code></pre>
<h3 id="properties-20">Properties</h3>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Required</th>
<th>Restrictions</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>address</td>
<td>string</td>
<td>true</td>
<td>none</td>
<td>The email address</td>
</tr>
<tr>
<td>verified</td>
<td>boolean</td>
<td>true</td>
<td>none</td>
<td>Has the email been verified</td>
</tr>
</tbody>
</table>
<h2 id="tocs_usersprofilenotifications">UsersProfileNotifications</h2>
<p><a id="schemausersprofilenotifications"></a>
<a id="schema_UsersProfileNotifications"></a>
<a id="tocSusersprofilenotifications"></a>
<a id="tocsusersprofilenotifications"></a></p>
<pre class="highlight tab tab-json"><code>{
<span class="hljs-attr">&quot;activity&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;read&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>
}
</code></pre>
<h3 id="properties-21">Properties</h3>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Required</th>
<th>Restrictions</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>activity</td>
<td>string</td>
<td>true</td>
<td>none</td>
<td>The id of the activity this notification references</td>
</tr>
<tr>
<td>read</td>
<td>string</td>
<td>false</td>
<td>none</td>
<td>the date on which this notification was read</td>
</tr>
</tbody>
</table>
<!-- Renderer: Shins v2.6.0 -->
<!-- Generator: Widdershins v4.0.1 -->
<!-- backwards compatibility -->
@@ -20931,6 +20974,7 @@ UserSecurity
<!-- backwards compatibility -->
<!-- backwards compatibility -->
<!-- backwards compatibility -->
<!-- backwards compatibility -->
<!-- backwards compatibility -->
</div>
<div class="dark-box">
+28 -24
View File
@@ -1,7 +1,7 @@
swagger: '2.0'
info:
title: Wekan REST API
version: v5.22
version: v5.26
description: |
The REST API allows you to control and extend Wekan with ease.
@@ -3681,20 +3681,6 @@ definitions:
- createdAt
- modifiedAt
- authenticationMethod
UsersEmails:
type: object
properties:
address:
description: |
The email address
type: string
verified:
description: |
Has the email been verified
type: boolean
required:
- address
- verified
UsersProfile:
type: object
properties:
@@ -3750,14 +3736,6 @@ definitions:
type: array
items:
$ref: "#/definitions/UsersProfileNotifications"
activity:
description: |
The id of the activity this notification references
type: string
read:
description: |
the date on which this notification was read
type: string
showCardsCountAt:
description: |
showCardCountAt field of the user
@@ -3813,7 +3791,6 @@ definitions:
Reference to the board templates swimlane Id
type: string
required:
- activity
- templatesBoardId
- cardTemplatesSwimlaneId
- listTemplatesSwimlaneId
@@ -3829,3 +3806,30 @@ definitions:
description: |
last hit that was returned
type: number
UsersEmails:
type: object
properties:
address:
description: |
The email address
type: string
verified:
description: |
Has the email been verified
type: boolean
required:
- address
- verified
UsersProfileNotifications:
type: object
properties:
activity:
description: |
The id of the activity this notification references
type: string
read:
description: |
the date on which this notification was read
type: string
required:
- activity
+3
View File
@@ -30,5 +30,8 @@ meteor-spk pack wekan-$1.spk
# Publish Sandstorm Wekan to exprimental App Market
spk publish wekan-$1.spk
# Upload spk to https://releases.wekan.team/sandstorm/
scp wekan-$1.spk x2:/var/snap/wekan/common/releases.wekan.team/sandstorm/
# Delete old temporary build directory
rm -rf ~/repos/wekan/.meteor-spk
+1 -1
View File
@@ -63,7 +63,7 @@ tx pull -f -l ka
echo "German:"
tx pull -f -l de
echo "German (Switzerland):"
echo "German (Switzerland) => Deutsch (Schweiz):"
tx pull -f -l de_CH
echo "Greek:"
+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 = 522,
appVersion = 526,
# Increment this for every release.
appMarketingVersion = (defaultText = "5.22.0~2021-04-16"),
appMarketingVersion = (defaultText = "5.26.0~2021-04-28"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,
+16 -37
View File
@@ -1,49 +1,28 @@
Meteor.methods({
copySwimlane(swimlaneId, toBoardId) {
check(swimlaneId, String);
check(toBoardId, String);
const swimlane = Swimlanes.findOne(swimlaneId);
const toBoard = Boards.findOne(toBoardId);
if (swimlane && toBoard) {
swimlane.copy(toBoardId);
return true;
}
return false;
},
moveSwimlane(swimlaneId, toBoardId) {
check(swimlaneId, String);
check(toBoardId, String);
const swimlane = Swimlanes.findOne(swimlaneId);
const fromBoard = Boards.findOne(swimlane.boardId);
const toBoard = Boards.findOne(toBoardId);
if (swimlane && toBoard) {
swimlane.lists().forEach(list => {
const toList = Lists.findOne({
boardId: toBoardId,
title: list.title,
archived: false,
});
let toListId;
if (toList) {
toListId = toList._id;
} else {
toListId = Lists.insert({
title: list.title,
boardId: toBoardId,
type: list.type,
archived: false,
wipLimit: list.wipLimit,
});
}
Cards.find({
listId: list._id,
swimlaneId,
}).forEach(card => {
card.move(toBoardId, swimlaneId, toListId);
});
});
Swimlanes.update(swimlaneId, {
$set: {
boardId: toBoardId,
},
});
// make sure there is a default swimlane
fromBoard.getDefaultSwimline();
swimlane.move(toBoardId);
return true;
}
+2 -2
View File
@@ -1,6 +1,5 @@
name: wekan
version: 0
version-script: git describe --tags | cut -c 2-
version: '5.26'
summary: The open-source kanban
description: |
Wekan is an open-source and collaborative kanban board application.
@@ -155,6 +154,7 @@ parts:
README: README.wekan
prime:
- -lib/node_modules/node-pre-gyp/node_modules/tar/lib/.unpack.js.swp
- -lib/node_modules/weka*
helpers:
source: snap-src
+2 -2
View File
@@ -99,7 +99,7 @@ services:
- postgres
- mongodb
environment:
- POSTGRES_PASSWORD
- POSTGRES_PASSWORD=wekan
- TORODB_SETUP=true
- TORODB_SYNC_SOURCE=mongodb:27017
- TORODB_BACKEND_HOST=postgres
@@ -113,7 +113,7 @@ services:
networks:
- wekan-tier
environment:
- POSTGRES_PASSWORD
- POSTGRES_PASSWORD=wekan
ports:
- "5432:5432"
mongodb: