Merge pull request #1 from wekan/master

newest wekan
This commit is contained in:
ryan neal 2021-04-26 12:10:21 -07:00 committed by GitHub
commit 9bb31d2380
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
99 changed files with 58176 additions and 56218 deletions

View file

@ -6,7 +6,7 @@
meteor-base@1.4.0
# Build system
ecmascript@0.15.0
ecmascript@0.15.1
standard-minifier-css@1.7.2
standard-minifier-js@2.6.0
mquandalle:jade
@ -23,7 +23,7 @@ dburles:collection-helpers
idmontie:migrations
matb33:collection-hooks
matteodem:easy-search
mongo@1.10.1
mongo@1.11.0
mquandalle:collection-mutations
# Account system

View file

@ -1 +1 @@
METEOR@2.1.1
METEOR@2.2

View file

@ -1,5 +1,5 @@
3stack:presence@1.1.2
accounts-base@1.8.0
accounts-base@1.9.0
accounts-oauth@1.2.0
accounts-password@1.7.0
aldeed:collection2@2.10.0
@ -11,17 +11,17 @@ allow-deny@1.1.0
arillo:flow-router-helpers@0.5.2
audit-argument-checks@1.0.7
autoupdate@1.7.0
babel-compiler@7.6.0
babel-compiler@7.6.1
babel-runtime@1.5.0
base64@1.0.12
binary-heap@1.0.11
blaze@2.4.0
blaze-tools@1.0.10
blaze-tools@1.1.1
boilerplate-generator@1.7.1
browser-policy-common@1.0.11
browser-policy-framing@1.1.0
caching-compiler@1.2.2
caching-html-compiler@1.1.3
caching-html-compiler@1.2.0
callback-hook@1.3.0
cfs:access-point@0.1.49
cfs:base-package@0.0.30
@ -52,12 +52,12 @@ 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
easylogic:summernote@0.8.8
ecmascript@0.15.0
ecmascript@0.15.1
ecmascript-runtime@0.7.0
ecmascript-runtime-client@0.11.0
ecmascript-runtime-server@0.10.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.0.11
html-tools@1.1.1
htmljs@1.1.0
http@1.4.3
id-map@1.1.0
@ -84,7 +84,7 @@ kenton:accounts-sandstorm@0.7.0
konecty:mongo-counter@0.0.5_3
lamhieu:meteorx@2.1.1
lamhieu:unblock@1.0.0
launch-screen@1.2.0
launch-screen@1.2.1
livedata@1.0.18
localstorage@1.2.0
logging@1.2.0
@ -100,16 +100,16 @@ 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.1
minimongo@1.6.2
mobile-status-bar@1.1.0
modern-browsers@0.1.5
modules@0.16.0
modules-runtime@0.12.0
momentjs:moment@2.29.1
mongo@1.10.1
mongo@1.11.0
mongo-decimal@0.1.2
mongo-dev-server@1.1.0
mongo-id@1.0.7
@ -125,7 +125,7 @@ mquandalle:moment@1.0.1
mquandalle:mousetrap-bindglobal@0.0.1
msavin:usercache@1.8.0
npm-bcrypt@0.9.3
npm-mongo@3.8.1
npm-mongo@3.9.0
oauth@1.3.2
oauth2@1.3.0
observe-sequence@1.0.16
@ -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.1.3
spacebars-compiler@1.2.1
srp@1.1.0
standard-minifier-css@1.7.2
standard-minifier-js@2.6.0
@ -220,10 +220,10 @@ staringatlights:inject-data@2.3.0
steffo:meteor-accounts-saml@0.0.18
tap:i18n@1.8.2
templates:tabs@2.3.0
templating@1.3.2
templating-compiler@1.3.3
templating-runtime@1.3.2
templating-tools@1.1.2
templating@1.4.0
templating-compiler@1.4.0
templating-runtime@1.4.0
templating-tools@1.2.0
tmeasday:check-npm-versions@0.3.2
tracker@1.2.0
twbs:bootstrap@3.3.6
@ -234,7 +234,7 @@ useraccounts:core@1.14.2
useraccounts:flow-routing@1.14.2
useraccounts:unstyled@1.14.2
verron:autosize@3.0.8
webapp@1.10.0
webapp@1.10.1
webapp-hashing@1.1.0
wekan-accounts-cas@0.1.0
wekan-accounts-oidc@1.0.10

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, 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

View file

@ -1,3 +1,94 @@
# Upcoming Wekan release
This release adds the following updates:
- [Updated release scripts](https://github.com/wekan/wekan/commit/9f0f6841b01b88f5559724b047d5e245617a02c8).
Thanks to xet7.
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 3](https://github.com/wekan/wekan/commit/6ff9c5b58d25ba52b11e5429c9cfe6ed6a97000e).
Thanks to translators.
and fixes the following bugs:
- [Remove allowedValues from Cards.type schema](https://github.com/wekan/wekan/pull/3724).
Thanks to jrsupplee.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.21 2021-04-16 Wekan release
This release adds the following new features:
- [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.
Thanks to ryanMushy.
and adds the following updates:
- [Upgraded to Meteor 2.2](https://github.com/wekan/wekan/commit/0e7c2b4b94b1c48e8839cfba635b53cdc1a797b1).
Thanks to Meteor developers.
and fixes the following bugs:
- [Bugfix, date format not changed to local format](https://github.com/wekan/wekan/pull/3723).
Thanks to mfilser.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.20 2021-04-14 Wekan release
This release fixes the following bugs:

View file

@ -52,7 +52,7 @@ that by providing one-click installation on various platforms.
- Wekan is used in [most countries of the world](https://snapcraft.io/wekan).
- Wekan largest user has 13k users using Wekan in their company.
- Wekan has been [translated](https://transifex.com/wekan/wekan) to about 62 languages.
- Wekan has been [translated](https://transifex.com/wekan/wekan) to about 63 languages.
- [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.

View file

@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v5.20.0"
appVersion: "v5.24.0"
files:
userUploads:
- README.md

View file

@ -3,7 +3,7 @@ const commentFormIsOpen = new ReactiveVar(false);
BlazeComponent.extendComponent({
onDestroyed() {
commentFormIsOpen.set(false);
$(".note-popover").hide();
$('.note-popover').hide();
},
commentFormIsOpen() {

View file

@ -1,5 +1,4 @@
import { DatePicker } from '/client/lib/datepicker';
import moment from 'moment';
import Cards from '/models/cards';
Template.cardCustomFieldsPopup.helpers({

View file

@ -1,4 +1,3 @@
import moment from 'moment';
import { DatePicker } from '/client/lib/datepicker';
Template.dateBadge.helpers({
@ -188,7 +187,6 @@ class CardStartDate extends CardDate {
// if dueAt or endAt exist & are > startAt, startAt doesn't need to be flagged
if ((endAt && theDate.isAfter(endAt)) || (dueAt && theDate.isAfter(dueAt)))
classes += 'long-overdue';
else if (theDate.isBefore(now, 'minute')) classes += 'almost-due';
else classes += 'current';
return classes;
}

View file

@ -3,7 +3,7 @@ const descriptionFormIsOpen = new ReactiveVar(false);
BlazeComponent.extendComponent({
onDestroyed() {
descriptionFormIsOpen.set(false);
$(".note-popover").hide();
$('.note-popover').hide();
},
descriptionFormIsOpen() {

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() {

View file

@ -49,7 +49,7 @@ Template.editor.onRendered(() => {
['para', ['ul', 'ol', 'paragraph']],
['table', ['table']],
//['insert', ['link', 'picture', 'video']], // iframe tag will be sanitized TODO if iframe[class=note-video-clip] can be added into safe list, insert video can be enabled
//['insert', ['link', 'picture']], // modal popup has issue somehow :(
['insert', ['link']], //, 'picture']], // modal popup has issue somehow :(
['view', ['fullscreen', 'help']],
];
const cleanPastedHTML = function(input) {
@ -234,6 +234,8 @@ Template.editor.onRendered(() => {
},
},
dialogsInBody: true,
spellCheck: true,
disableGrammar: false,
disableDragAndDrop: true,
toolbar,
popover: {
@ -245,6 +247,7 @@ Template.editor.onRendered(() => {
['float', ['floatLeft', 'floatRight', 'floatNone']],
['remove', ['removeMedia']],
],
link: [['link', ['linkDialogShow', 'unlink']]],
table: [
['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],
['delete', ['deleteRow', 'deleteCol', 'deleteTable']],

View file

@ -77,6 +77,8 @@ Template.userFormsLayout.helpers({
} else if (lang.name === 'ar-EG') {
// ar-EG = Arabic (Egypt), simply Masri (مَصرى, [ˈmɑsˤɾi], Egyptian, Masr refers to Cairo)
name = 'مَصرى';
} else if (lang.name === 'de-CH') {
name = 'Schwiizerdütsch';
} else if (lang.name === 'fa-IR') {
// fa-IR = Persian (Iran)
name = 'فارسی/پارسی (ایران‎)';

View file

@ -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

View file

@ -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);

View file

@ -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'}}

View file

@ -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({

View file

@ -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'}}

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'));

View file

@ -174,6 +174,8 @@ Template.changeLanguagePopup.helpers({
} else if (lang.name === 'fa-IR') {
// fa-IR = Persian (Iran)
name = 'فارسی/پارسی (ایران‎)';
} else if (lang.name === 'de-CH') {
name = 'Schwiizerdütsch';
} else if (lang.name === 'fr-BE') {
name = 'Français (Belgique)';
} else if (lang.name === 'fr-CA') {

View file

@ -1,5 +1,3 @@
import moment from 'moment';
// Helper function to replace HH with H for 24 hours format, because H allows also single-digit hours
function adjustedTimeFormat() {
return moment

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',
],

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

1010
i18n/de-CH.i18n.json Normal file

File diff suppressed because it is too large Load diff

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"
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

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"
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

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"
}

File diff suppressed because it is too large Load diff

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": "העתקת מסלול"
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

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"
}

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"
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

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"
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -287,7 +287,7 @@ Cards.attachSchema(
*/
type: String,
defaultValue: TYPE_CARD,
allowedValues: [TYPE_CARD, TYPE_LINKED_CARD, TYPE_LINKED_BOARD],
// allowedValues: [TYPE_CARD, TYPE_LINKED_CARD, TYPE_LINKED_BOARD, TYPE_TEMPLATE_CARD],
},
linkedId: {
/**

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({

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

2
package-lock.json generated
View file

@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v5.20.0",
"version": "v5.24.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View file

@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v5.20.0",
"version": "v5.24.0",
"description": "Open-Source kanban",
"private": true,
"scripts": {

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.20</title>
<title>Wekan REST API v5.24</title>
<style>
</style>
@ -1549,7 +1549,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.20">Wekan REST API v5.20</a>
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v5.24">Wekan REST API v5.24</a>
</li>
@ -2092,7 +2092,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.20</h1>
<h1 id="wekan-rest-api">Wekan REST API v5.24</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>
@ -9029,7 +9029,7 @@ System.out.println(response.toString());
<span class="hljs-attr">&quot;userId&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;sort&quot;</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">&quot;subtaskSort&quot;</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">&quot;type&quot;</span>: <span class="hljs-string">&quot;cardtype-card&quot;</span>,
<span class="hljs-attr">&quot;type&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;linkedId&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;vote&quot;</span>: {
<span class="hljs-attr">&quot;question&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
@ -18978,7 +18978,7 @@ UserSecurity
<span class="hljs-attr">&quot;userId&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;sort&quot;</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">&quot;subtaskSort&quot;</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">&quot;type&quot;</span>: <span class="hljs-string">&quot;cardtype-card&quot;</span>,
<span class="hljs-attr">&quot;type&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;linkedId&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;vote&quot;</span>: {
<span class="hljs-attr">&quot;question&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
@ -19335,18 +19335,6 @@ UserSecurity
<td>color</td>
<td>indigo</td>
</tr>
<tr>
<td>type</td>
<td>cardtype-card</td>
</tr>
<tr>
<td>type</td>
<td>cardtype-linkedcard</td>
</tr>
<tr>
<td>type</td>
<td>cardtype-linkedboard</td>
</tr>
</tbody>
</table>
<h2 id="tocs_cardsvote">CardsVote</h2>

View file

@ -1,7 +1,7 @@
swagger: '2.0'
info:
title: Wekan REST API
version: v5.20
version: v5.24
description: |
The REST API allows you to control and extend Wekan with ease.
@ -3165,10 +3165,6 @@ definitions:
description: |
type of the card
type: string
enum:
- cardtype-card
- cardtype-linkedcard
- cardtype-linkedboard
linkedId:
description: |
ID of the linked card

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

View file

@ -63,6 +63,9 @@ tx pull -f -l ka
echo "German:"
tx pull -f -l de
echo "German (Switzerland):"
tx pull -f -l de_CH
echo "Greek:"
tx pull -f -l el

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 = 520,
appVersion = 524,
# Increment this for every release.
appMarketingVersion = (defaultText = "5.20.0~2021-04-14"),
appMarketingVersion = (defaultText = "5.24.0~2021-04-24"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,

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;
}

View file

@ -1,6 +1,5 @@
name: wekan
version: 0
version-script: git describe --tags | cut -c 2-
version: '5.24'
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