Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ac020a401f | ||
|
|
be238ac743 | ||
|
|
f377e66f02 | ||
|
|
6ea79dff51 | ||
|
|
ba336de74b | ||
|
|
b6b3682d06 | ||
|
|
927d15f2d8 | ||
|
|
31f89121fe | ||
|
|
1189b66748 | ||
|
|
f6370782ec | ||
|
|
4c0bd359f9 | ||
|
|
76491515d9 | ||
|
|
2977f7cf47 | ||
|
|
931bff608c | ||
|
|
fea445c902 | ||
|
|
027771b302 | ||
|
|
814ae5e840 | ||
|
|
37d76e9e06 | ||
|
|
6ba2bb5087 | ||
|
|
4faab518a7 | ||
|
|
e0c6f64788 | ||
|
|
74ad7b9f8d | ||
|
|
5b194285f5 | ||
|
|
ae1269aa68 | ||
|
|
d1c3c85af8 | ||
|
|
143f259904 | ||
|
|
082b16d422 | ||
|
|
7a5aad9cd8 | ||
|
|
9b813dd6a1 | ||
|
|
66f5f254d0 | ||
|
|
0c54260762 | ||
|
|
5346f89f77 | ||
|
|
7909af6a56 | ||
|
|
ef37cb762d | ||
|
|
3799839539 | ||
|
|
81d496bac7 | ||
|
|
528c0d212a | ||
|
|
3b876b2d20 | ||
|
|
a7bd8d42e8 | ||
|
|
f8f14613f9 | ||
|
|
8dd088d727 | ||
|
|
550f7201bb | ||
|
|
e1c14b04ad | ||
|
|
fb690e47e8 | ||
|
|
b537275707 | ||
|
|
545c72fca3 | ||
|
|
39413faff0 | ||
|
|
953cfd6ecd | ||
|
|
36919a25be | ||
|
|
7a66cb46a0 | ||
|
|
3a2926c22e | ||
|
|
4a4c8c2404 | ||
|
|
2531cf549e | ||
|
|
80c395906b | ||
|
|
da12c84609 | ||
|
|
69c0a3cba3 | ||
|
|
124bce8f80 | ||
|
|
1d37f170fd | ||
|
|
99bdee5b12 | ||
|
|
5476a5984c | ||
|
|
74d93a6adc | ||
|
|
fb9524bba8 |
No files matched your search
@@ -1,3 +1,83 @@
|
||||
# v4.87 2021-01-26 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Reject by default LDAP connections not authorized via CA trust store](https://github.com/wekan/wekan/pull/3483).
|
||||
Thanks to robert-scheck.
|
||||
- [Handle '\n' line breaks in PEM-encoded SSL/TLS certificates](https://github.com/wekan/wekan/pull/3485).
|
||||
Thanks to robert-scheck.
|
||||
|
||||
and adds the following improvements
|
||||
|
||||
- [Try parallel build of releases, does it work](https://github.com/wekan/wekan/commit/be238ac7439ce38b4403d9a611dec9bb421a856f).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v4.86 2021-01-25 Wekan release
|
||||
|
||||
This release adds the following improvements:
|
||||
|
||||
- [Added PWA related category, orientation, screenshots, maskable icon and
|
||||
IARC rating ID](https://github.com/wekan/wekan/commit/027771b3021a709d9049015e7d7e6faccf1ad7f3).
|
||||
Thanks to xet7.
|
||||
- [Added PWA related monochrome icon](https://github.com/wekan/wekan/commit/2977f7cf47626b429159cb7b7496919c07ece914).
|
||||
Thanks to xet7.
|
||||
- [Mention Wekan GitHub Discussions at readme](https://github.com/wekan/wekan/commit/4c0bd359f921ae0ea722f78946fcc1168e8b939e).
|
||||
Thanks to xet7.
|
||||
|
||||
and adds the following updates:
|
||||
|
||||
- [Use Node 12.20.1 in rebuild-wekan.sh](https://github.com/wekan/wekan/commit/37d76e9e061d31c11fca8e704e9b4c54f17c0023).
|
||||
Thanks to xet7.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Move call to URL search to onRendered](https://github.com/wekan/wekan/pull/3478).
|
||||
Thanks to jrsupplee.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v4.85 2021-01-23 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Option to add custom field to all cards](https://github.com/wekan/wekan/pulls/3466).
|
||||
Thanks to jrsupplee.
|
||||
- [Added checkbox as an option to custom field create dialog](https://github.com/wekan/wekan/pull/3472).
|
||||
Thanks to jrsupplee.
|
||||
|
||||
and adds the following improvements:
|
||||
|
||||
- [Display My Cards lists using inline-grid](https://github.com/wekan/wekan/pull/3474).
|
||||
Thanks to jrsupplee.
|
||||
- [Added board title link and background color to My Cards](https://github.com/wekan/wekan/pull/3471).
|
||||
Thanks to helioguardabaxo.
|
||||
- [Use simple border at My Cards](https://github.com/wekan/wekan/pull/3475).
|
||||
Thanks to helioguardabaxo.
|
||||
|
||||
and adds the following updates:
|
||||
|
||||
- Updated dependencies.
|
||||
[Part 1](https://github.com/wekan/wekan/commit/7a66cb46a0ec334f4e95a73322641ba029f770ad),
|
||||
[Part 2](https://github.com/wekan/wekan/commit/953cfd6ecd291196ce2ad1d4a5eac19ca21a20d9).
|
||||
Thanks to developers of dependencies.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [WIP Limit: Limited number of cards highlighting to true overbooking](https://github.com/wekan/wekan/pull/3468).
|
||||
Thanks to bronger.
|
||||
- [Revert table-cell back to inline-block at my-cards-list-wrapper](https://github.com/wekan/wekan/commit/da12c84609674bdf5121ad6b74c97c65b9fc0164).
|
||||
Thanks to jrsupplee and xet7.
|
||||
- [Fix for search operators with uppercase letters](https://github.com/wekan/wekan/pull/3470).
|
||||
Thanks to jrsupplee.
|
||||
- [Boards.copyTitle - escape string used in regex](https://github.com/wekan/wekan/pull/3473).
|
||||
Thanks to jrsupplee.
|
||||
- [Bug fix: import regex escape function](https://github.com/wekan/wekan/pull/3476).
|
||||
Thanks to jrsupplee.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v4.84 2021-01-22 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
@@ -20,13 +20,12 @@ New English strings of new features can be added as PRs to edge branch file weka
|
||||
|
||||
## [Wekan feature requests and bugs](https://github.com/wekan/wekan/issues)
|
||||
|
||||
Please add most of your questions as GitHub issue: [Wekan feature requests and bugs](https://github.com/wekan/wekan/issues).
|
||||
Please add most of your questions as GitHub issue: [Wekan Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
|
||||
It's better than at chat where details get lost when chat scrolls up.
|
||||
|
||||
## Chat
|
||||
|
||||
[![Wekan Chat][vanila_badge]][wekan_chat] - Most Wekan community and developers are here. Works on webbrowser
|
||||
and PWA app that can be added as icon on Android and bookmark on iOS, used like native app.
|
||||
[Discussions][discussions] - Wekan Community GitHub Discussions, that are not [Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
|
||||
|
||||
[Wekan IRC FAQ](https://github.com/wekan/wekan/wiki/IRC-FAQ)
|
||||
|
||||
@@ -114,8 +113,6 @@ with [Meteor](https://www.meteor.com).
|
||||
[translate_wekan]: https://www.transifex.com/wekan/wekan/
|
||||
[open_source]: https://en.wikipedia.org/wiki/Open-source_software
|
||||
[free_software]: https://en.wikipedia.org/wiki/Free_software
|
||||
[vanila_badge]: https://vanila.io/img/join-chat-button2.png
|
||||
[wekan_chat]: https://community.vanila.io/wekan
|
||||
|
||||
[discussions]: https://github.com/wekan/wekan/discussions
|
||||
|
||||
[](https://app.fossa.io/projects/git%2Bgithub.com%2Fwekan%2Fwekan?ref=badge_large)
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
||||
appVersion: "v4.84.0"
|
||||
appVersion: "v4.87.0"
|
||||
files:
|
||||
userUploads:
|
||||
- README.md
|
||||
|
||||
@@ -239,7 +239,7 @@ BlazeComponent.extendComponent({
|
||||
.customFields()
|
||||
.fetch(),
|
||||
function(field) {
|
||||
if (field.automaticallyOnCard)
|
||||
if (field.automaticallyOnCard || field.alwaysOnCard)
|
||||
arr.push({ _id: field._id, value: null });
|
||||
},
|
||||
);
|
||||
|
||||
@@ -15,7 +15,7 @@ template(name="listHeader")
|
||||
= title
|
||||
if wipLimit.enabled
|
||||
| (
|
||||
span(class="{{#if reachedWipLimit}}highlight{{/if}}") {{cards.count}}
|
||||
span(class="{{#if exceededWipLimit}}highlight{{/if}}") {{cards.count}}
|
||||
|/#{wipLimit.value})
|
||||
|
||||
if showCardsCountForList cards.count
|
||||
|
||||
@@ -72,6 +72,14 @@ BlazeComponent.extendComponent({
|
||||
);
|
||||
},
|
||||
|
||||
exceededWipLimit() {
|
||||
const list = Template.currentData();
|
||||
return (
|
||||
list.getWipLimit('enabled') &&
|
||||
list.getWipLimit('value') < list.cards().count()
|
||||
);
|
||||
},
|
||||
|
||||
showCardsCountForList(count) {
|
||||
const limit = this.limitToShowCardsCount();
|
||||
return limit > 0 && count > limit;
|
||||
|
||||
@@ -76,7 +76,9 @@ BlazeComponent.extendComponent({
|
||||
this.myBoardNames.set(data);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
onRendered() {
|
||||
Meteor.subscribe('setting');
|
||||
if (Session.get('globalQuery')) {
|
||||
this.searchAllBoards(Session.get('globalQuery'));
|
||||
@@ -193,25 +195,31 @@ BlazeComponent.extendComponent({
|
||||
const reText = /^(?<text>\S+)(\s+|$)/;
|
||||
const reQuotedText = /^(?<quote>["'])(?<text>\w+)\k<quote>(\s+|$)/;
|
||||
|
||||
const operators = {
|
||||
'operator-board': 'boards',
|
||||
'operator-board-abbrev': 'boards',
|
||||
'operator-swimlane': 'swimlanes',
|
||||
'operator-swimlane-abbrev': 'swimlanes',
|
||||
'operator-list': 'lists',
|
||||
'operator-list-abbrev': 'lists',
|
||||
'operator-label': 'labels',
|
||||
'operator-label-abbrev': 'labels',
|
||||
'operator-user': 'users',
|
||||
'operator-user-abbrev': 'users',
|
||||
'operator-member': 'members',
|
||||
'operator-member-abbrev': 'members',
|
||||
'operator-assignee': 'assignees',
|
||||
'operator-assignee-abbrev': 'assignees',
|
||||
'operator-is': 'is',
|
||||
'operator-due': 'dueAt',
|
||||
'operator-created': 'createdAt',
|
||||
'operator-modified': 'modifiedAt',
|
||||
};
|
||||
|
||||
const operatorMap = {};
|
||||
operatorMap[TAPi18n.__('operator-board')] = 'boards';
|
||||
operatorMap[TAPi18n.__('operator-board-abbrev')] = 'boards';
|
||||
operatorMap[TAPi18n.__('operator-swimlane')] = 'swimlanes';
|
||||
operatorMap[TAPi18n.__('operator-swimlane-abbrev')] = 'swimlanes';
|
||||
operatorMap[TAPi18n.__('operator-list')] = 'lists';
|
||||
operatorMap[TAPi18n.__('operator-list-abbrev')] = 'lists';
|
||||
operatorMap[TAPi18n.__('operator-label')] = 'labels';
|
||||
operatorMap[TAPi18n.__('operator-label-abbrev')] = 'labels';
|
||||
operatorMap[TAPi18n.__('operator-user')] = 'users';
|
||||
operatorMap[TAPi18n.__('operator-user-abbrev')] = 'users';
|
||||
operatorMap[TAPi18n.__('operator-member')] = 'members';
|
||||
operatorMap[TAPi18n.__('operator-member-abbrev')] = 'members';
|
||||
operatorMap[TAPi18n.__('operator-assignee')] = 'assignees';
|
||||
operatorMap[TAPi18n.__('operator-assignee-abbrev')] = 'assignees';
|
||||
operatorMap[TAPi18n.__('operator-is')] = 'is';
|
||||
operatorMap[TAPi18n.__('operator-due')] = 'dueAt';
|
||||
operatorMap[TAPi18n.__('operator-created')] = 'createdAt';
|
||||
operatorMap[TAPi18n.__('operator-modified')] = 'modifiedAt';
|
||||
for (const op in operators) {
|
||||
operatorMap[TAPi18n.__(op).toLowerCase()] = operators[op];
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-console
|
||||
console.log('operatorMap:', operatorMap);
|
||||
@@ -247,7 +255,7 @@ BlazeComponent.extendComponent({
|
||||
} else {
|
||||
op = m.groups.abbrev;
|
||||
}
|
||||
if (op !== "__proto__") {
|
||||
if (op !== '__proto__') {
|
||||
if (op in operatorMap) {
|
||||
let value = m.groups.value;
|
||||
if (operatorMap[op] === 'labels') {
|
||||
@@ -259,7 +267,9 @@ BlazeComponent.extendComponent({
|
||||
) {
|
||||
const days = parseInt(value, 10);
|
||||
if (isNaN(days)) {
|
||||
if (['day', 'week', 'month', 'quarter', 'year'].includes(value)) {
|
||||
if (
|
||||
['day', 'week', 'month', 'quarter', 'year'].includes(value)
|
||||
) {
|
||||
value = moment()
|
||||
.subtract(1, value)
|
||||
.format();
|
||||
@@ -318,8 +328,6 @@ BlazeComponent.extendComponent({
|
||||
const handle = subManager.subscribe('globalSearch', params);
|
||||
Tracker.nonreactive(() => {
|
||||
Tracker.autorun(() => {
|
||||
// eslint-disable-next-line no-console
|
||||
// console.log('ready:', handle.ready());
|
||||
if (handle.ready()) {
|
||||
this.searching.set(false);
|
||||
this.hasResults.set(true);
|
||||
|
||||
@@ -29,9 +29,10 @@ template(name="myCards")
|
||||
if $eq myCardsSort 'board'
|
||||
each board in myCardsList
|
||||
.my-cards-board-wrapper
|
||||
.my-cards-board-title
|
||||
+viewer
|
||||
= board.title
|
||||
.my-cards-board-title(class=board.colorClass, id="header")
|
||||
a(href=board.absoluteUrl)
|
||||
+viewer
|
||||
= board.title
|
||||
each swimlane in board.mySwimlanes
|
||||
.my-cards-swimlane-title(class="{{#if swimlane.colorClass}}{{ swimlane.colorClass }}{{else}}swimlane-default-color{{/if}}")
|
||||
+viewer
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
.my-cards-board-wrapper
|
||||
border-radius: 8px
|
||||
border-radius: 0 0 4px 4px;
|
||||
//padding: 0.5rem
|
||||
min-width: 400px
|
||||
border-width: 8px
|
||||
border-color: grey
|
||||
border-style: solid
|
||||
margin-bottom: 2rem
|
||||
margin-right: auto
|
||||
margin-left: auto
|
||||
|
||||
border-width: 2px
|
||||
border-style: solid
|
||||
border-color: #a2a2a2
|
||||
|
||||
.my-cards-board-title
|
||||
font-size: 1.4rem
|
||||
font-weight: bold
|
||||
@@ -41,9 +41,9 @@
|
||||
.my-cards-list-wrapper
|
||||
margin: 1rem
|
||||
border-radius: 5px
|
||||
padding: 1.5rem
|
||||
padding-top: 0.75rem
|
||||
display: table-cell
|
||||
//padding: 1.5rem
|
||||
//padding-top: 0.75rem
|
||||
display: inline-grid
|
||||
min-width: 250px
|
||||
max-width: 350px
|
||||
|
||||
|
||||
@@ -59,6 +59,10 @@ template(name="createCustomFieldPopup")
|
||||
|
||||
span {{_ 'automatically-field-on-card'}}
|
||||
|
||||
a.flex.js-field-always-on-card(class="{{#if alwaysOnCard}}is-checked{{/if}}")
|
||||
.materialCheckBox(class="{{#if alwaysOnCard}}is-checked{{/if}}")
|
||||
span {{_ 'always-field-on-card'}}
|
||||
|
||||
a.flex.js-field-showLabel-on-card(class="{{#if showLabelOnMiniCard}}is-checked{{/if}}")
|
||||
.materialCheckBox(class="{{#if showLabelOnMiniCard}}is-checked{{/if}}")
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ BlazeComponent.extendComponent({
|
||||
}).register('customFieldsSidebar');
|
||||
|
||||
const CreateCustomFieldPopup = BlazeComponent.extendComponent({
|
||||
_types: ['text', 'number', 'date', 'dropdown', 'currency'],
|
||||
_types: ['text', 'number', 'date', 'dropdown', 'currency', 'checkbox'],
|
||||
|
||||
_currencyList: [
|
||||
{
|
||||
@@ -174,6 +174,14 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
|
||||
$target.find('.materialCheckBox').toggleClass('is-checked');
|
||||
$target.toggleClass('is-checked');
|
||||
},
|
||||
'click .js-field-always-on-card'(evt) {
|
||||
let $target = $(evt.target);
|
||||
if (!$target.hasClass('js-field-always-on-card')) {
|
||||
$target = $target.parent();
|
||||
}
|
||||
$target.find('.materialCheckBox').toggleClass('is-checked');
|
||||
$target.toggleClass('is-checked');
|
||||
},
|
||||
'click .js-field-showLabel-on-card'(evt) {
|
||||
let $target = $(evt.target);
|
||||
if (!$target.hasClass('js-field-showLabel-on-card')) {
|
||||
@@ -194,6 +202,8 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
|
||||
this.find('.js-field-showLabel-on-card.is-checked') !== null,
|
||||
automaticallyOnCard:
|
||||
this.find('.js-field-automatically-on-card.is-checked') !== null,
|
||||
alwaysOnCard:
|
||||
this.find('.js-field-always-on-card.is-checked') !== null,
|
||||
};
|
||||
|
||||
// insert or update
|
||||
|
||||
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+2
-1
@@ -601,7 +601,8 @@
|
||||
"minutes": "minutes",
|
||||
"seconds": "seconds",
|
||||
"show-field-on-card": "Show this field on card",
|
||||
"automatically-field-on-card": "Auto create field to all cards",
|
||||
"automatically-field-on-card": "Add field to new cards",
|
||||
"always-field-on-card": "Add field to all cards",
|
||||
"showLabel-field-on-card": "Show field label on minicard",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
|
||||
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+925
-924
File diff suppressed because it is too large.
Load diff
+2
-1
@@ -1,3 +1,4 @@
|
||||
const escapeForRegex = require('escape-string-regexp');
|
||||
Boards = new Mongo.Collection('boards');
|
||||
|
||||
/**
|
||||
@@ -569,7 +570,7 @@ Boards.helpers({
|
||||
*/
|
||||
copyTitle() {
|
||||
const m = this.title.match(/^(?<title>.*?)\s*(\[(?<num>\d+)]\s*$|\s*$)/);
|
||||
const title = m.groups.title;
|
||||
const title = escapeForRegex(m.groups.title);
|
||||
let num = 0;
|
||||
Boards.find({ title: new RegExp(`^${title}\\s*\\[\\d+]\\s*$`) }).forEach(
|
||||
board => {
|
||||
|
||||
@@ -147,6 +147,7 @@ export class CsvCreator {
|
||||
settings,
|
||||
showOnCard: false,
|
||||
automaticallyOnCard: false,
|
||||
alwaysOnCard: false,
|
||||
showLabelOnMiniCard: false,
|
||||
boardIds: [boardId],
|
||||
});
|
||||
|
||||
@@ -76,6 +76,12 @@ CustomFields.attachSchema(
|
||||
*/
|
||||
type: Boolean,
|
||||
},
|
||||
alwaysOnCard: {
|
||||
/**
|
||||
* should the custom field be automatically added to all cards?
|
||||
*/
|
||||
type: Boolean,
|
||||
},
|
||||
showLabelOnMiniCard: {
|
||||
/**
|
||||
* should the label of the custom field be shown on minicards?
|
||||
@@ -111,6 +117,19 @@ CustomFields.attachSchema(
|
||||
}),
|
||||
);
|
||||
|
||||
CustomFields.addToAllCards = cf => {
|
||||
Cards.update(
|
||||
{
|
||||
boardId: { $in: cf.boardIds },
|
||||
customFields: { $not: { $elemMatch: { _id: cf._id } } },
|
||||
},
|
||||
{
|
||||
$push: { customFields: { _id: cf._id, value: null } },
|
||||
},
|
||||
{ multi: true },
|
||||
);
|
||||
};
|
||||
|
||||
CustomFields.mutations({
|
||||
addBoard(boardId) {
|
||||
if (boardId) {
|
||||
@@ -198,6 +217,10 @@ if (Meteor.isServer) {
|
||||
|
||||
CustomFields.after.insert((userId, doc) => {
|
||||
customFieldCreation(userId, doc);
|
||||
|
||||
if (doc.alwaysOnCard) {
|
||||
CustomFields.addToAllCards(doc);
|
||||
}
|
||||
});
|
||||
|
||||
CustomFields.before.update((userId, doc, fieldNames, modifier) => {
|
||||
@@ -224,6 +247,11 @@ if (Meteor.isServer) {
|
||||
}
|
||||
});
|
||||
|
||||
CustomFields.after.update((userId, doc) => {
|
||||
if (doc.alwaysOnCard) {
|
||||
CustomFields.addToAllCards(doc);
|
||||
}
|
||||
});
|
||||
CustomFields.before.remove((userId, doc) => {
|
||||
customFieldDeletion(userId, doc);
|
||||
Activities.remove({
|
||||
|
||||
@@ -243,6 +243,7 @@ export class TrelloCreator {
|
||||
showOnCard: field.display.cardFront,
|
||||
showLabelOnMiniCard: field.display.cardFront,
|
||||
automaticallyOnCard: true,
|
||||
alwaysOnCard: false,
|
||||
type: field.type,
|
||||
boardIds: [boardId],
|
||||
settings: {},
|
||||
|
||||
@@ -537,6 +537,7 @@ export class WekanCreator {
|
||||
showOnCard: field.showOnCard,
|
||||
showLabelOnMiniCard: field.showLabelOnMiniCard,
|
||||
automaticallyOnCard: field.automaticallyOnCard,
|
||||
alwaysOnCard: field.alwaysOnCard,
|
||||
//use date "now" if now created at date is provided (e.g. for very old boards)
|
||||
createdAt: this._now(this.createdAt.customFields[field._id]),
|
||||
modifiedAt: field.modifiedAt,
|
||||
|
||||
Generated
+548
-488
File diff suppressed because it is too large.
Load diff
+16
-16
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v4.84.0",
|
||||
"version": "v4.87.0",
|
||||
"description": "Open-Source kanban",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
@@ -45,38 +45,38 @@
|
||||
"eslint-config-meteor": "0.0.9",
|
||||
"eslint-config-prettier": "^3.6.0",
|
||||
"eslint-import-resolver-meteor": "^0.4.0",
|
||||
"eslint-plugin-import": "^2.20.0",
|
||||
"eslint-plugin-import": "^2.22.1",
|
||||
"eslint-plugin-meteor": "^5.1.0",
|
||||
"eslint-plugin-prettier": "^3.1.2",
|
||||
"eslint-plugin-prettier": "^3.3.1",
|
||||
"lint-staged": "^7.3.0",
|
||||
"pre-commit": "^1.2.2",
|
||||
"prettier": "^1.19.1",
|
||||
"prettier-eslint": "^9.0.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.9.6",
|
||||
"@babel/runtime": "^7.9.6",
|
||||
"@root/request": "^1.6.1",
|
||||
"ajv": "^6.12.4",
|
||||
"@babel/core": "^7.12.10",
|
||||
"@babel/runtime": "^7.12.5",
|
||||
"@root/request": "^1.7.0",
|
||||
"ajv": "^7.0.3",
|
||||
"babel-runtime": "^6.26.0",
|
||||
"bcrypt": "^5.0.0",
|
||||
"bson": "^4.0.3",
|
||||
"bunyan": "^1.8.12",
|
||||
"bson": "^4.2.2",
|
||||
"bunyan": "^1.8.15",
|
||||
"es6-promise": "^4.2.4",
|
||||
"exceljs": "^4.2.0",
|
||||
"fibers": "^5.0.0",
|
||||
"flatted": "^3.0.4",
|
||||
"flatted": "^3.1.1",
|
||||
"gridfs-stream": "https://github.com/wekan/gridfs-stream/tarball/master",
|
||||
"jszip": "^3.4.0",
|
||||
"ldapjs": "^2.1.1",
|
||||
"markdown-it": "^12.0.2",
|
||||
"jszip": "^3.5.0",
|
||||
"ldapjs": "^2.2.3",
|
||||
"markdown-it": "^12.0.4",
|
||||
"markdown-it-emoji": "^2.0.0",
|
||||
"meteor-node-stubs": "^1.0.1",
|
||||
"mongodb": "^3.6.2",
|
||||
"mongodb": "^3.6.3",
|
||||
"os": "^0.1.1",
|
||||
"page": "^1.11.5",
|
||||
"papaparse": "^5.2.0",
|
||||
"qs": "^6.9.4",
|
||||
"papaparse": "^5.3.0",
|
||||
"qs": "^6.9.6",
|
||||
"source-map-support": "^0.5.19",
|
||||
"xss": "^1.0.8"
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ export default class LDAP {
|
||||
idle_timeout : this.constructor.settings_get('LDAP_IDLE_TIMEOUT'),
|
||||
encryption : this.constructor.settings_get('LDAP_ENCRYPTION'),
|
||||
ca_cert : this.constructor.settings_get('LDAP_CA_CERT'),
|
||||
reject_unauthorized : this.constructor.settings_get('LDAP_REJECT_UNAUTHORIZED') || false,
|
||||
reject_unauthorized : this.constructor.settings_get('LDAP_REJECT_UNAUTHORIZED') || true,
|
||||
Authentication : this.constructor.settings_get('LDAP_AUTHENTIFICATION'),
|
||||
Authentication_UserDN : this.constructor.settings_get('LDAP_AUTHENTIFICATION_USERDN'),
|
||||
Authentication_Password : this.constructor.settings_get('LDAP_AUTHENTIFICATION_PASSWORD'),
|
||||
@@ -100,7 +100,7 @@ export default class LDAP {
|
||||
|
||||
if (this.options.ca_cert && this.options.ca_cert !== '') {
|
||||
// Split CA cert into array of strings
|
||||
const chainLines = this.constructor.settings_get('LDAP_CA_CERT').split('\n');
|
||||
const chainLines = this.constructor.settings_get('LDAP_CA_CERT').replace(/\\n/g,'\n').split('\n');
|
||||
let cert = [];
|
||||
const ca = [];
|
||||
chainLines.forEach((line) => {
|
||||
|
||||
+11
-2
@@ -1524,7 +1524,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
|
||||
<ul class="toc-list-h1">
|
||||
|
||||
<li>
|
||||
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v4.84">Wekan REST API v4.84</a>
|
||||
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v4.87">Wekan REST API v4.87</a>
|
||||
|
||||
</li>
|
||||
|
||||
@@ -1982,7 +1982,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 v4.84</h1>
|
||||
<h1 id="wekan-rest-api">Wekan REST API v4.87</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>
|
||||
@@ -7706,6 +7706,7 @@ System.out.println(response.toString());
|
||||
},
|
||||
<span class="hljs-attr">"showOnCard"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"automaticallyOnCard"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"alwaysOnCard"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"showLabelOnMiniCard"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"modifiedAt"</span>: <span class="hljs-string">"string"</span>
|
||||
@@ -13992,6 +13993,7 @@ UserSecurity
|
||||
},
|
||||
<span class="hljs-attr">"showOnCard"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"automaticallyOnCard"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"alwaysOnCard"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"showLabelOnMiniCard"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"modifiedAt"</span>: <span class="hljs-string">"string"</span>
|
||||
@@ -14054,6 +14056,13 @@ UserSecurity
|
||||
<td>should the custom fields automatically be added on cards?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>alwaysOnCard</td>
|
||||
<td>boolean</td>
|
||||
<td>true</td>
|
||||
<td>none</td>
|
||||
<td>should the custom field be automatically added to all cards?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>showLabelOnMiniCard</td>
|
||||
<td>boolean</td>
|
||||
<td>true</td>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
swagger: '2.0'
|
||||
info:
|
||||
title: Wekan REST API
|
||||
version: v4.84
|
||||
version: v4.87
|
||||
description: |
|
||||
The REST API allows you to control and extend Wekan with ease.
|
||||
|
||||
@@ -2392,6 +2392,10 @@ definitions:
|
||||
description: |
|
||||
should the custom fields automatically be added on cards?
|
||||
type: boolean
|
||||
alwaysOnCard:
|
||||
description: |
|
||||
should the custom field be automatically added to all cards?
|
||||
type: boolean
|
||||
showLabelOnMiniCard:
|
||||
description: |
|
||||
should the label of the custom field be shown on minicards?
|
||||
@@ -2408,6 +2412,7 @@ definitions:
|
||||
- settings
|
||||
- showOnCard
|
||||
- automaticallyOnCard
|
||||
- alwaysOnCard
|
||||
- showLabelOnMiniCard
|
||||
- modifiedAt
|
||||
CustomFieldsSettings:
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 117 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 96 KiB |
+28
-1
@@ -26,10 +26,37 @@
|
||||
"src": "/StoreLogo.scale-100.png",
|
||||
"sizes": "50x50",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/maskable_icon.png",
|
||||
"sizes": "474x474",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/monochrome-icon-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "monochrome"
|
||||
}
|
||||
],
|
||||
"screenshots" : [
|
||||
{
|
||||
"src": "/screenshot1.webp",
|
||||
"sizes": "1280x720",
|
||||
"type": "image/webp"
|
||||
},
|
||||
{
|
||||
"src": "/screenshot2.webp",
|
||||
"sizes": "1280x720",
|
||||
"type": "image/webp"
|
||||
}
|
||||
],
|
||||
"theme_color": "#ffffff",
|
||||
"background_color": "#ffffff",
|
||||
"start_url": "/sign-in",
|
||||
"display": "standalone"
|
||||
"display": "standalone",
|
||||
"orientation": "any",
|
||||
"categories": ["productivity"],
|
||||
"iarc_rating_id": "70d7c4a4-3e5a-4714-a7dc-fa006613ba96"
|
||||
}
|
||||
+1
-1
@@ -28,7 +28,7 @@ do
|
||||
#curl -0 -L https://npmjs.org/install.sh | sudo sh
|
||||
#sudo chown -R $(id -u):$(id -g) $HOME/.npm
|
||||
sudo npm -g install n
|
||||
sudo n 12.20.0
|
||||
sudo n 12.20.1
|
||||
#curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
|
||||
#sudo apt-get install -y nodejs
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
|
||||
@@ -1,7 +1,16 @@
|
||||
cd ~/repos/wekan
|
||||
sudo apt -y install parallel
|
||||
./releases/rebuild-release.sh
|
||||
#./releases/delete-phantomjs.sh
|
||||
cd ~/repos/wekan/.build
|
||||
zip -r wekan-$1.zip bundle
|
||||
scp wekan-$1.zip x2:/var/snap/wekan/common/releases.wekan.team/
|
||||
|
||||
{
|
||||
scp wekan-$1.zip x2:/var/snap/wekan/common/releases.wekan.team/
|
||||
scp wekan-$1.zip a:/home/wekan/repos/ && ssh a ' sudo npm -g install npm' && ssh a './maintainer-make-release.sh $1' && scp a:/home/wekan/repos/wekan-$1-arm64.zip . && scp wekan-$1-arm64.zip x2:/var/snap/wekan/common/releases.wekan.team/raspi3/
|
||||
scp wekan-$1.zip s:/home/linux1/ && ssh s 'sudo npm -g install npm ' && ssh s './maintainer-make-release.sh $1' && scp s:/home/linux1/wekan-$1-s390x.zip . && scp wekan-$1-s390x.zip x2:/var/snap/wekan/common/releases.wekan.team/s390x/
|
||||
scp wekan-$1.zip openpower:/home/ubuntu/ && ssh openpower './maintainer-make-release.sh $1' && scp openpower:/home/ubuntu/wekan-$1-ppc64le.zip . && scp wekan-$1-ppc64le.zip x2:/var/snap/wekan/common/releases.wekan.team/ppc64le/
|
||||
sudo systemctl enable sandstorm && sudo sandstorm start && rm -rf ~/sandbuild && sudo mkdir -p /usr/local/lib/node_modules/fibers/.node-gyp && mkdir -p ~/sandbuild && cp -pR ~/repos/wekan ~/sandbuild/ && rm -rf ~/sandbuild/wekan/.meteor-spk && cd ~/sandbuild/wekan/.build/bundle/programs/server && npm install node-gyp node-pre-gyp fibers && cd ~/sandbuild/wekan && meteor-spk pack wekan-$1.spk && spk publish wekan-$1.spk && cd ~/repos/wekan && sudo sandstorm stop && sudo systemctl disable sandstorm && cd ~/repos/wekan
|
||||
} | parallel -k
|
||||
|
||||
cd ..
|
||||
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
|
||||
appTitle = (defaultText = "Wekan"),
|
||||
# The name of the app as it is displayed to the user.
|
||||
|
||||
appVersion = 484,
|
||||
appVersion = 487,
|
||||
# Increment this for every release.
|
||||
|
||||
appMarketingVersion = (defaultText = "4.84.0~2021-01-22"),
|
||||
appMarketingVersion = (defaultText = "4.87.0~2021-01-26"),
|
||||
# Human-readable presentation of the app version.
|
||||
|
||||
minUpgradableAppVersion = 0,
|
||||
|
||||
Reference in new issue
Block a user