mirror of
https://github.com/wekan/wekan.git
synced 2026-11-06 05:52:33 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
62ba8ed8d8 | ||
|
|
6eeef96886 | ||
|
|
4acf852650 | ||
|
|
9b3f1562a5 | ||
|
|
49774e46a3 | ||
|
|
ae2447393d | ||
|
|
3435192640 | ||
|
|
6ba4da9711 |
No files matched your search
@@ -1,3 +1,14 @@
|
||||
# v4.91 2021-01-29 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Use `new RegExp(...)` to define a regex](https://github.com/wekan/wekan/pull/3505).
|
||||
Thanks to jrsupplee.
|
||||
- [Fixed typos in docker-compose.yml](https://github.com/wekan/wekan/commit/4acf8526509ffe852e6e48e3503560448239d8cd).
|
||||
Thanks to farfoodyou and xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v4.90 2021-01-28 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
||||
appVersion: "v4.90.0"
|
||||
appVersion: "v4.91.0"
|
||||
files:
|
||||
userUploads:
|
||||
- README.md
|
||||
|
||||
@@ -190,10 +190,19 @@ BlazeComponent.extendComponent({
|
||||
|
||||
this.searching.set(true);
|
||||
|
||||
const reOperator1 = `/^((?<operator>[\p{Letter}\p{Mark}]+):|(?<abbrev>[#@]))(?<value>[\p{Letter}\p{Mark}]+)(\s+|$)/iu`;
|
||||
const reOperator2 = `/^((?<operator>[\p{Letter}\p{Mark}]+):|(?<abbrev>[#@]))(?<quote>["']*)(?<value>.*?)\k<quote>(\s+|$)/iu`;
|
||||
const reText = `/^(?<text>\S+)(\s+|$)/u`;
|
||||
const reQuotedText = `/^(?<quote>["'])(?<text>[\w\p{L}]+)\k<quote>(\s+|$)/u`;
|
||||
const reOperator1 = new RegExp(
|
||||
'^((?<operator>[\\p{Letter}\\p{Mark}]+):|(?<abbrev>[#@]))(?<value>[\\p{Letter}\\p{Mark}]+)(\\s+|$)',
|
||||
'iu',
|
||||
);
|
||||
const reOperator2 = new RegExp(
|
||||
'^((?<operator>[\\p{Letter}\\p{Mark}]+):|(?<abbrev>[#@]))(?<quote>["\']*)(?<value>.*?)\\k<quote>(\\s+|$)',
|
||||
'iu',
|
||||
);
|
||||
const reText = new RegExp('^(?<text>\\S+)(\\s+|$)', 'u');
|
||||
const reQuotedText = new RegExp(
|
||||
'^(?<quote>["\'])(?<text>.*?)\\k<quote>(\\s+|$)',
|
||||
'u',
|
||||
);
|
||||
|
||||
const operators = {
|
||||
'operator-board': 'boards',
|
||||
|
||||
+5
-5
@@ -95,9 +95,9 @@ services:
|
||||
# 2020-12-03:
|
||||
# - Mongo image copied from Docker Hub mongo:4.4.2-bionic to Quay
|
||||
# to avoid Docker Hub rate limits.
|
||||
# Quay image
|
||||
# Quay image does work:
|
||||
# image: quay.io/wekan/mongo:4.4.2-bionic
|
||||
# Docker Hub MongoDB image works:
|
||||
# Docker Hub MongoDB image does work:
|
||||
image: mongo:4.4
|
||||
#-------------------------------------------------------------------------------------
|
||||
container_name: wekan-db
|
||||
@@ -117,12 +117,12 @@ services:
|
||||
wekan:
|
||||
#-------------------------------------------------------------------------------------
|
||||
# ==== MONGODB AND METEOR VERSION ====
|
||||
# a) Quay automatic builds do not currently work, https://quay.io/wekan/wekan
|
||||
# a) Quay automatic builds do work work, https://quay.io/wekan/wekan
|
||||
# image: quay.io/wekan/wekan
|
||||
# b) Using specific version tag:
|
||||
# image: quay.io/wekan/wekan:v4.52
|
||||
c) Docker Hub builds do work https://hub.docker.com/r/wekanteam/wekan
|
||||
# image: wekanteam/wekan
|
||||
# c) Docker Hub builds do work https://hub.docker.com/r/wekanteam/wekan
|
||||
image: wekanteam/wekan
|
||||
#-------------------------------------------------------------------------------------
|
||||
container_name: wekan-app
|
||||
restart: always
|
||||
|
||||
+2
-2
@@ -916,8 +916,8 @@
|
||||
"operator-number-expected": "סימון הפעולה __operator__ ציפה למספר, קיבל ‚__value__’",
|
||||
"operator-sort-invalid": "sort of '%s' is invalid",
|
||||
"operator-status-invalid": "'%s' is not a valid status",
|
||||
"next-page": "Next Page",
|
||||
"previous-page": "Previous Page",
|
||||
"next-page": "העמוד הבא",
|
||||
"previous-page": "העמוד הקודם",
|
||||
"heading-notes": "הערות",
|
||||
"globalSearch-instructions-heading": "הנחיות לחיפוש",
|
||||
"globalSearch-instructions-description": "חיפושים יכולים לכלול סימוני פעולה כדי לחדד את החיפוש. ניתן לציין סימוני פעולה על ידי כתיבת שם הפעולה והערך מופרדים בנקודתיים. למשל, ציון סימון פעולה של `list:חסומים` יגביל את החיפוש לכרטיסים שבתוך רשימה בשם *חסומים*. אם הערך מכיל רווחים או תווים מיוחדים יש לתחום אותו בסימני ציטוט (למשל: `__operator_list__:\"לסקירה\"`).",
|
||||
|
||||
+9
-9
@@ -925,23 +925,23 @@
|
||||
"globalSearch-instructions-operator-board": "`__operator_board__:title` - карточки на досках с названием соответствующим \"title\"",
|
||||
"globalSearch-instructions-operator-list": "`__operator_list__:title` - карточки в списках соответствующих \"title\"",
|
||||
"globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:title` - карточки в дорожках соответствующих заданному \"title\"",
|
||||
"globalSearch-instructions-operator-comment": "`__operator_comment__:text` - cards with with a comment containing *text*.",
|
||||
"globalSearch-instructions-operator-comment": "`__operator_comment__:text` - карточки с комментарием содержащим текст *text*.",
|
||||
"globalSearch-instructions-operator-label": "`__operator_label__:color` `__operator_label__:name` - карточки, которые имеют метки соответствующие заданным \"color\" или \"name\"",
|
||||
"globalSearch-instructions-operator-hash": "`__operator_label_abbrev__label` - сокращенный вариант `__operator_label__:label`",
|
||||
"globalSearch-instructions-operator-user": "`__operator_user__:username` - карточки, где указанный пользователь является участником или исполнителем",
|
||||
"globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - сокращенный вариант `user:username`",
|
||||
"globalSearch-instructions-operator-member": "`__operator_member__:username` - карточки, где указанный пользователь является участником",
|
||||
"globalSearch-instructions-operator-assignee": "`__operator_assignee__:username` - карточка назначенная указанному пользователю",
|
||||
"globalSearch-instructions-operator-due": "`__operator_due__:n` - cards which are due *n* days from now. `__operator_due__:__predicate_overdue__ lists all cards past their due date.",
|
||||
"globalSearch-instructions-operator-created": "`__operator_created__:n` - cards which which were created *n* days ago",
|
||||
"globalSearch-instructions-operator-modified": "`__operator_modified__:n` - cards which which were modified *n* days ago",
|
||||
"globalSearch-instructions-status-archived": "`__operator_status__:__predicate_archived__` - cards that are archived.",
|
||||
"globalSearch-instructions-status-all": "`__operator_status__:__predicate_all__` - all archived and unarchived cards.",
|
||||
"globalSearch-instructions-status-ended": "`__operator_status__:__predicate_ended__` - cards with an end date.",
|
||||
"globalSearch-instructions-operator-due": "`__operator_due__:n` - карточки с датой завершения *n* дней от текущей даты. `__operator_due__:__predicate_overdue__ выводит все карточки с просроченной датой завершения.",
|
||||
"globalSearch-instructions-operator-created": "`__operator_created__:n` - карточки, которые были созданы *n* дней назад",
|
||||
"globalSearch-instructions-operator-modified": "`__operator_modified__:n` - карточки, которые были изменены *n* дней назад",
|
||||
"globalSearch-instructions-status-archived": "`__operator_status__:__predicate_archived__` - карточки, которые были архивированы.",
|
||||
"globalSearch-instructions-status-all": "`__operator_status__:__predicate_all__` - все карточки, включая архивированные.",
|
||||
"globalSearch-instructions-status-ended": "`__operator_status__:__predicate_ended__` - карточки с датой завершения.",
|
||||
"globalSearch-instructions-notes-1": "Может быть задано несколько операторов.",
|
||||
"globalSearch-instructions-notes-2": "Одинаковые операторы объединяются логическим \"ИЛИ\", например:\n`__operator_list__:Available __operator_list__:Blocked` вернет карточки, которые содержатся в списке *Blocked* или *Available*.",
|
||||
"globalSearch-instructions-notes-3": "Differing operators are *AND*ed together. Only cards that match all of the differing operators are returned. `__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.",
|
||||
"globalSearch-instructions-notes-3-2": "Days can be specified as an integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__`",
|
||||
"globalSearch-instructions-notes-3": "Разные операторы объединяются логическим \"И\". Возвращаются только объекты удовлетворяющие всем заданным условиям.`__operator_list__:Available __operator_label__:red` вернет карточки, которые содержатся в списке *Available* и имеют метку *red*.",
|
||||
"globalSearch-instructions-notes-3-2": "Длительность может быть задана числом в днях или используя `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` или `__predicate_year__`",
|
||||
"globalSearch-instructions-notes-4": "Текстовый поиск нечувствителен к регистру символов.",
|
||||
"globalSearch-instructions-notes-5": "В архивированных карточках поиск не производится.",
|
||||
"link-to-search": "Ссылка на этот поиск",
|
||||
|
||||
+6
-2
@@ -1263,12 +1263,16 @@ function boardRemover(userId, doc) {
|
||||
}
|
||||
|
||||
Boards.uniqueTitle = title => {
|
||||
const m = title.match(`/^(?<title>.*?)\s*(\[(?<num>\d+)]\s*$|\s*$)/`);
|
||||
const m = title.match(
|
||||
new RegExp('^(?<title>.*?)\\s*(\\[(?<num>\\d+)]\\s*$|\\s*$)'),
|
||||
);
|
||||
const base = escapeForRegex(m.groups.title);
|
||||
let num = 0;
|
||||
Boards.find({ title: new RegExp(`^${base}\\s*\\[\\d+]\\s*$`) }).forEach(
|
||||
board => {
|
||||
const m = board.title.match(`/^(?<title>.*?)\s*\[(?<num>\d+)]\s*$/`);
|
||||
const m = board.title.match(
|
||||
new RegExp('^(?<title>.*?)\\s*\\[(?<num>\\d+)]\\s*$'),
|
||||
);
|
||||
if (m) {
|
||||
const n = parseInt(m.groups.num, 10);
|
||||
num = num < n ? n : num;
|
||||
|
||||
Generated
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v4.90.0",
|
||||
"version": "v4.91.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v4.90.0",
|
||||
"version": "v4.91.0",
|
||||
"description": "Open-Source kanban",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -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.90">Wekan REST API v4.90</a>
|
||||
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v4.91">Wekan REST API v4.91</a>
|
||||
|
||||
</li>
|
||||
|
||||
@@ -2037,7 +2037,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.90</h1>
|
||||
<h1 id="wekan-rest-api">Wekan REST API v4.91</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>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
swagger: '2.0'
|
||||
info:
|
||||
title: Wekan REST API
|
||||
version: v4.90
|
||||
version: v4.91
|
||||
description: |
|
||||
The REST API allows you to control and extend Wekan with ease.
|
||||
|
||||
|
||||
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
|
||||
appTitle = (defaultText = "Wekan"),
|
||||
# The name of the app as it is displayed to the user.
|
||||
|
||||
appVersion = 490,
|
||||
appVersion = 491,
|
||||
# Increment this for every release.
|
||||
|
||||
appMarketingVersion = (defaultText = "4.90.0~2021-01-28"),
|
||||
appMarketingVersion = (defaultText = "4.91.0~2021-01-29"),
|
||||
# Human-readable presentation of the app version.
|
||||
|
||||
minUpgradableAppVersion = 0,
|
||||
|
||||
Reference in new issue
Block a user