Compare commits

...
13 Commits
15 changed files with 117 additions and 25 deletions

No files matched your search

+21
View File
@@ -15,8 +15,27 @@ Fixing other platforms In Progress.
[How to upgrade WeKan](https://github.com/wekan/wekan/issues/4585)
# v7.90 2025-05-14 WeKan ® release
This release fixes the following bugs:
- [Fix Due Date Problem in Non-English Numbers](https://github.com/wekan/wekan/pull/5774).
Thanks to valhalla-creator.
- [Added missing quotes to Fix Due Date Problem in Non-English Numbers](https://github.com/wekan/wekan/commit/c0a9780f803ed445a93a274d13504a8f245c1885).
Thanks to xet7.
- [Changed start.bat default ROOT_URL=http://localhost , although it only works for local user](https://github.com/wekan/wekan/commit/e52158b729c8ba39a55fe52e38fd6b134b42548e).
Thanks to xet7.
- [Fix Lines in multiline markdown code block to not anymore have darker background](https://github.com/wekan/wekan/commit/b82ba63532b32ec3a0c860a380648cef6739db0f).
Thanks to mueller-ma and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.89 2025-05-13 WeKan ® release
Note: Docker image is only at ghcr.io (GitHub) and Docker Hub (wekanteam/wekan).
Quay.io is at read only mode, they are fixing something, so it's not possible to
push Docker image yet to quay.io .
This release adds the following new features:
- [Add email notifications language localization feature](https://github.com/wekan/wekan/pull/5769).
@@ -37,6 +56,8 @@ and fixes the following bugs:
- [Fix list insertion order and prevent runtime error in "Add After" feature](https://github.com/wekan/wekan/pull/5767).
Thanks to valhalla-creator.
- [Add missing code of fix insertion order of list](https://github.com/wekan/wekan/commit/7d1a1475baefb3fd20da3df835c349a62b425041).
Thanks to xet7.
- [Fix: Add CSS vendor prefixes for user-select and text-size-adjust for better browser compatibility](https://github.com/wekan/wekan/pull/5772).
Thanks to oussama-madimagh.
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v7.89.0"
appVersion: "v7.90.0"
files:
userUploads:
- README.md
+1
View File
@@ -1,3 +1,4 @@
import { Utils } from '/client/lib/utils';
import moment from 'moment/min/moment-with-locales';
import { TAPi18n } from '/imports/i18n';
import { DatePicker } from '/client/lib/datepicker';
+3 -2
View File
@@ -214,7 +214,7 @@ pre,
code,
tt {
font-family: lucida console, monospace;
line-height: 1.25em;
line-height: 1.3em;
}
blockquote {
margin: 8px 0 8px 8px;
@@ -438,7 +438,8 @@ a:not(.disabled).is-active i.fa {
.viewer em {
font-style: italic;
}
.viewer pre {
.viewer pre,
.viewer code {
padding: 10px 12px 7px;
background: #dedede;
overflow-y: auto;
+11 -7
View File
@@ -83,7 +83,8 @@ export class DatePicker extends BlazeComponent {
{
'keyup .js-date-field'() {
// parse for localized date format in strict mode
const dateMoment = moment(this.find('#date').value, 'L', true);
const normalizedValue = Utils.normalizeDigits(this.find('#date').value);
const dateMoment = moment(normalizedValue, 'L', true);
if (dateMoment.isValid()) {
this.error.set('');
this.$('.js-datepicker').datepicker('update', dateMoment.toDate());
@@ -91,9 +92,10 @@ export class DatePicker extends BlazeComponent {
},
'keyup .js-time-field'() {
// parse for localized time format in strict mode
const normalizedValue = Utils.normalizeDigits(this.find('#time').value);
const dateMoment = moment(
this.find('#time').value,
adjustedTimeFormat(),
normalizedValue,
adjustedTimeFormat(),
true,
);
if (dateMoment.isValid()) {
@@ -104,12 +106,14 @@ export class DatePicker extends BlazeComponent {
evt.preventDefault();
// if no time was given, init with 12:00
const timeValue = Utils.normalizeDigits(evt.target.time.value);
const time =
evt.target.time.value ||
moment(new Date().setHours(12, 0, 0)).format('LT');
timeValue ||
moment(new Date().setHours(12, 0, 0)).format('LT');
const newTime = moment(time, adjustedTimeFormat(), true);
const newDate = moment(evt.target.date.value, 'L', true);
const dateString = `${evt.target.date.value} ${time}`;
const dateValue = Utils.normalizeDigits(evt.target.date.value);
const newDate = moment(dateValue, 'L', true);
const dateString = `${dateValue} ${time}`;
const newCompleteDate = moment(
dateString,
`L ${adjustedTimeFormat()}`,
+11
View File
@@ -11,6 +11,17 @@ Utils = {
currentBoard.setColor(currentBoard["background-color"]);
}
},
// Normalize non-Western (Persian/Arabic) digits to Western Arabic (0-9)
// This helps with date parsing in non-English languages
normalizeDigits(str) {
if (!str) return str;
const persian = [/۰/g, /۱/g, /۲/g, /۳/g, /۴/g, /۵/g, /۶/g, /۷/g, /۸/g, /۹/g];
const arabic = [/٠/g, /١/g, /٢/g, /٣/g, /٤/g, /٥/g, /٦/g, /٧/g, /٨/g, /٩/g];
for (let i = 0; i < 10; i++) {
str = str.replace(persian[i], i).replace(arabic[i], i);
}
return str;
},
/** returns the current board id
* <li> returns the current board id or the board id of the popup card if set
*/
+2 -2
View File
@@ -10,7 +10,7 @@ This is without container (without Docker or Snap).
Right click and download files 1-4:
1. [wekan-7.89-amd64-windows.zip](https://github.com/wekan/wekan/releases/download/v7.89/wekan-7.89-amd64-windows.zip)
1. [wekan-7.90-amd64-windows.zip](https://github.com/wekan/wekan/releases/download/v7.90/wekan-7.90-amd64-windows.zip)
2. [node.exe](https://nodejs.org/dist/latest-v14.x/win-x64/node.exe)
@@ -22,7 +22,7 @@ Right click and download files 1-4:
6. Double click `mongodb-windows-x86_64-6.0.23-signed.msi` . In installer, uncheck downloading MongoDB compass.
7. Unzip `wekan-7.89-amd64-windows.zip` , inside it is directory `bundle`, to it copy other files:
7. Unzip `wekan-7.90-amd64-windows.zip` , inside it is directory `bundle`, to it copy other files:
```
bundle (directory)
+55 -1
View File
@@ -27,4 +27,58 @@ Then in your JADE files, use the string like so:
We pull all translations from Transifex before every new Wekan release
candidate, ask the translators to review the app, and pull all translations
again for the final release.
again for the final release.
## Example
```
diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade
index ee31d76be..e3b2ea7cd 100644
--- a/client/components/cards/cardDetails.jade
+++ b/client/components/cards/cardDetails.jade
@@ -142,19 +142,19 @@ template(name="cardDetails")
.card-details-item.card-details-item-recurring
h3.card-details-item-title
i.fa.fa-repeat
- | Recurrence
+ | {{_ 'recurrence'}}
label
input.js-recurring-checkbox(type="checkbox" checked=card.isRecurring)
- | Repeat this card
+ | {{_ 'repeat-this-card'}}
if card.isRecurring
label
- | Repeat every
+ | {{_ 'repeat-every'}}
select.js-recurring-pattern
- option(value="daily" selected=card.recurrencePattern === 'daily') Daily
- option(value="weekly" selected=card.recurrencePattern === 'weekly') Weekly
- option(value="monthly" selected=card.recurrencePattern === 'monthly') Monthly
+ option(value="daily", selected="#{card.recurrencePattern === 'daily'}") {{_ 'daily'}}
+ option(value="weekly", selected="#{card.recurrencePattern === 'weekly'}") {{_ 'weekly'}}
+ option(value="monthly", selected="#{card.recurrencePattern === 'monthly'}") {{_ 'monthly'}}
label
- | End repeat on
+ | {{_ 'end-repeat-on'}}
input.js-recurring-end-date(type="date" value=card.recurrenceEndDate)
if currentBoard.hasAnyAllowsUser
hr
diff --git a/imports/i18n/data/en.i18n.json b/imports/i18n/data/en.i18n.json
index 10260ff2b..b16200c1a 100644
--- a/imports/i18n/data/en.i18n.json
+++ b/imports/i18n/data/en.i18n.json
@@ -1270,5 +1270,12 @@
"supportPopup-title": "Support",
"accessibility-page-enabled": "Accessibility page enabled",
"accessibility-title": "Accessibility topic",
- "accessibility-content": "Accessibility content"
+ "accessibility-content": "Accessibility content",
+ "recurrence": "Recurrence",
+ "repeat-this-card": "Repeat this card",
+ "repeat-every": "Repeat every",
+ "daily": "Daily",
+ "weekly": "Weekly",
+ "monthly": "Monthly",
+ "end-repeat-on": "End repeat on"
}
```
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v7.89.0",
"version": "v7.90.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v7.89.0",
"version": "v7.90.0",
"description": "Open-Source kanban",
"private": true,
"repository": {
+2 -2
View File
@@ -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 v7.89">Wekan REST API v7.89</a>
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v7.90">Wekan REST API v7.90</a>
</li>
@@ -1963,7 +1963,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 v7.89</h1>
<h1 id="wekan-rest-api">Wekan REST API v7.90</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 -1
View File
@@ -1,7 +1,7 @@
swagger: '2.0'
info:
title: Wekan REST API
version: v7.89
version: v7.90
description: |
The REST API allows you to control and extend Wekan with ease.
+2 -2
View File
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user.
appVersion = 789,
appVersion = 790,
# Increment this for every release.
appMarketingVersion = (defaultText = "7.89.0~2025-05-13"),
appMarketingVersion = (defaultText = "7.90.0~2025-05-14"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,
+4 -4
View File
@@ -1,5 +1,5 @@
name: wekan
version: '7.89'
version: '7.90'
base: core20
summary: Open Source kanban
description: |
@@ -170,9 +170,9 @@ parts:
# Cleanup
mkdir .build
cd .build
wget https://github.com/wekan/wekan/releases/download/v7.89/wekan-7.89-amd64.zip
unzip wekan-7.89-amd64.zip
rm wekan-7.89-amd64.zip
wget https://github.com/wekan/wekan/releases/download/v7.90/wekan-7.90-amd64.zip
unzip wekan-7.90-amd64.zip
rm wekan-7.90-amd64.zip
cd ..
##cd .build/bundle
##find . -type d -name '*-garbage*' | xargs rm -rf
+1 -1
View File
@@ -14,7 +14,7 @@ SET MONGO_URL=mongodb://127.0.0.1:27017/wekan
REM # If port is 80, must change ROOT_URL to: http://YOUR-WEKAN-SERVER-IPv4-ADDRESS , like http://192.168.0.100
REM # If port is not 80, must change ROOT_URL to: http://YOUR-WEKAN-SERVER-IPv4-ADDRESS:YOUR-PORT-NUMBER , like http://192.168.0.100:2000
REM # If ROOT_URL is not correct, these do not work: translations, uploading attachments.
SET ROOT_URL=http://192.168.0.21
SET ROOT_URL=http://localhost
REM # Must change to YOUR-PORT-NUMBER:
SET PORT=80