mirror of
https://github.com/wekan/wekan.git
synced 2025-04-22 04:57:07 -04:00
commit
9bb31d2380
99 changed files with 58176 additions and 56218 deletions
|
@ -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
|
||||
|
|
|
@ -1 +1 @@
|
|||
METEOR@2.1.1
|
||||
METEOR@2.2
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
91
CHANGELOG.md
91
CHANGELOG.md
|
@ -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:
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -3,7 +3,7 @@ const commentFormIsOpen = new ReactiveVar(false);
|
|||
BlazeComponent.extendComponent({
|
||||
onDestroyed() {
|
||||
commentFormIsOpen.set(false);
|
||||
$(".note-popover").hide();
|
||||
$('.note-popover').hide();
|
||||
},
|
||||
|
||||
commentFormIsOpen() {
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { DatePicker } from '/client/lib/datepicker';
|
||||
import moment from 'moment';
|
||||
import Cards from '/models/cards';
|
||||
|
||||
Template.cardCustomFieldsPopup.helpers({
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ const descriptionFormIsOpen = new ReactiveVar(false);
|
|||
BlazeComponent.extendComponent({
|
||||
onDestroyed() {
|
||||
descriptionFormIsOpen.set(false);
|
||||
$(".note-popover").hide();
|
||||
$('.note-popover').hide();
|
||||
},
|
||||
|
||||
descriptionFormIsOpen() {
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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']],
|
||||
|
|
|
@ -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 = 'فارسی/پارسی (ایران)';
|
||||
|
|
|
@ -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'}}
|
||||
|
|
|
@ -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'));
|
||||
|
|
|
@ -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') {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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',
|
||||
],
|
||||
|
||||
|
|
2010
i18n/ar-EG.i18n.json
2010
i18n/ar-EG.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/ar.i18n.json
2010
i18n/ar.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/bg.i18n.json
2010
i18n/bg.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/br.i18n.json
2010
i18n/br.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/ca.i18n.json
2010
i18n/ca.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/cs.i18n.json
2010
i18n/cs.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/da.i18n.json
2010
i18n/da.i18n.json
File diff suppressed because it is too large
Load diff
1010
i18n/de-CH.i18n.json
Normal file
1010
i18n/de-CH.i18n.json
Normal file
File diff suppressed because it is too large
Load diff
|
@ -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"
|
||||
}
|
||||
|
|
2010
i18n/el.i18n.json
2010
i18n/el.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/en-GB.i18n.json
2010
i18n/en-GB.i18n.json
File diff suppressed because it is too large
Load diff
|
@ -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"
|
||||
}
|
||||
|
|
2010
i18n/eo.i18n.json
2010
i18n/eo.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/es-AR.i18n.json
2010
i18n/es-AR.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/es-CL.i18n.json
2010
i18n/es-CL.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/es-LA.i18n.json
2010
i18n/es-LA.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/es-MX.i18n.json
2010
i18n/es-MX.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/es-PE.i18n.json
2010
i18n/es-PE.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/es-PY.i18n.json
2010
i18n/es-PY.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/es.i18n.json
2010
i18n/es.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/eu.i18n.json
2010
i18n/eu.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/fa-IR.i18n.json
2010
i18n/fa-IR.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/fa.i18n.json
2010
i18n/fa.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/fi.i18n.json
2010
i18n/fi.i18n.json
File diff suppressed because it is too large
Load diff
|
@ -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   or 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   ou 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"
|
||||
}
|
||||
|
|
2010
i18n/gl.i18n.json
2010
i18n/gl.i18n.json
File diff suppressed because it is too large
Load diff
|
@ -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": "העתקת מסלול"
|
||||
}
|
||||
|
|
2010
i18n/hi.i18n.json
2010
i18n/hi.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/hr.i18n.json
2010
i18n/hr.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/hu.i18n.json
2010
i18n/hu.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/hy.i18n.json
2010
i18n/hy.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/id.i18n.json
2010
i18n/id.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/ig.i18n.json
2010
i18n/ig.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/it.i18n.json
2010
i18n/it.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/ja.i18n.json
2010
i18n/ja.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/ka.i18n.json
2010
i18n/ka.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/km.i18n.json
2010
i18n/km.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/ko.i18n.json
2010
i18n/ko.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/lt.i18n.json
2010
i18n/lt.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/lv.i18n.json
2010
i18n/lv.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/mk.i18n.json
2010
i18n/mk.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/mn.i18n.json
2010
i18n/mn.i18n.json
File diff suppressed because it is too large
Load diff
|
@ -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   eller 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"
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
|
2010
i18n/oc.i18n.json
2010
i18n/oc.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/pa.i18n.json
2010
i18n/pa.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/pl.i18n.json
2010
i18n/pl.i18n.json
File diff suppressed because it is too large
Load diff
|
@ -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"
|
||||
}
|
||||
|
|
2010
i18n/pt.i18n.json
2010
i18n/pt.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/ro.i18n.json
2010
i18n/ro.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/ru.i18n.json
2010
i18n/ru.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/sk.i18n.json
2010
i18n/sk.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/sl.i18n.json
2010
i18n/sl.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/sr.i18n.json
2010
i18n/sr.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/sv.i18n.json
2010
i18n/sv.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/sw.i18n.json
2010
i18n/sw.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/ta.i18n.json
2010
i18n/ta.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/th.i18n.json
2010
i18n/th.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/tr.i18n.json
2010
i18n/tr.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/uk.i18n.json
2010
i18n/uk.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/vi.i18n.json
2010
i18n/vi.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/zh-CN.i18n.json
2010
i18n/zh-CN.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/zh-HK.i18n.json
2010
i18n/zh-HK.i18n.json
File diff suppressed because it is too large
Load diff
2010
i18n/zh-TW.i18n.json
2010
i18n/zh-TW.i18n.json
File diff suppressed because it is too large
Load diff
|
@ -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: {
|
||||
/**
|
||||
|
|
|
@ -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({
|
||||
|
|
|
@ -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
2
package-lock.json
generated
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "wekan",
|
||||
"version": "v5.20.0",
|
||||
"version": "v5.24.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "wekan",
|
||||
"version": "v5.20.0",
|
||||
"version": "v5.24.0",
|
||||
"description": "Open-Source kanban",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
|
|
@ -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">"userId"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"sort"</span>: <span class="hljs-number">0</span>,
|
||||
<span class="hljs-attr">"subtaskSort"</span>: <span class="hljs-number">0</span>,
|
||||
<span class="hljs-attr">"type"</span>: <span class="hljs-string">"cardtype-card"</span>,
|
||||
<span class="hljs-attr">"type"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"linkedId"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"vote"</span>: {
|
||||
<span class="hljs-attr">"question"</span>: <span class="hljs-string">"string"</span>,
|
||||
|
@ -18978,7 +18978,7 @@ UserSecurity
|
|||
<span class="hljs-attr">"userId"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"sort"</span>: <span class="hljs-number">0</span>,
|
||||
<span class="hljs-attr">"subtaskSort"</span>: <span class="hljs-number">0</span>,
|
||||
<span class="hljs-attr">"type"</span>: <span class="hljs-string">"cardtype-card"</span>,
|
||||
<span class="hljs-attr">"type"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"linkedId"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"vote"</span>: {
|
||||
<span class="hljs-attr">"question"</span>: <span class="hljs-string">"string"</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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue