Skip to content
Snippets Groups Projects
Verified Commit 76219632 authored by Volker Schukai's avatar Volker Schukai :alien:
Browse files

feat: new transformer commands (date, map, time, dayofweek, timestamp...)

parent cf48be6b
No related branches found
No related tags found
No related merge requests found
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
*/ */
import {getLocaleOfDocument} from "../dom/locale.mjs";
import {Base} from "../types/base.mjs"; import {Base} from "../types/base.mjs";
import {getGlobal, getGlobalObject} from "../types/global.mjs"; import {getGlobal, getGlobalObject} from "../types/global.mjs";
import {ID} from "../types/id.mjs"; import {ID} from "../types/id.mjs";
...@@ -169,6 +170,11 @@ function transform(value) { ...@@ -169,6 +170,11 @@ function transform(value) {
let element; let element;
let attribute; let attribute;
let translations; let translations;
let date;
let locale;
let timestamp;
let map;
let keyValue;
switch (this.command) { switch (this.command) {
case "static": case "static":
...@@ -491,6 +497,117 @@ function transform(value) { ...@@ -491,6 +497,117 @@ function transform(value) {
throw new Error("type not supported"); throw new Error("type not supported");
case "map":
map = new Map();
while (args.length > 0) {
keyValue = args.shift();
if (keyValue === undefined) {
throw new Error("missing key parameter");
}
keyValue = keyValue.split("=");
map.set(keyValue[0], keyValue[1]);
}
return map.get(value);
case "timestamp":
date = new Date(value);
timestamp = date.getTime();
if (isNaN(timestamp)) {
throw new Error("invalid date");
}
return timestamp;
case "time":
date = new Date(value);
if (isNaN(date.getTime())) {
throw new Error("invalid date");
}
try {
locale = getLocaleOfDocument();
return date.toLocaleTimeString(locale);
} catch (e) {
throw new Error("unsupported locale or missing format (" + e.message + ")");
}
case "year":
date = new Date(value);
if (isNaN(date.getTime())) {
throw new Error("invalid date");
}
return date.getFullYear();
case "month":
date = new Date(value);
if (isNaN(date.getTime())) {
throw new Error("invalid date");
}
return date.getMonth() + 1;
case "day":
date = new Date(value);
if (isNaN(date.getTime())) {
throw new Error("invalid date");
}
return date.getDate();
case "weekday":
date = new Date(value);
if (isNaN(date.getTime())) {
throw new Error("invalid date");
}
return date.getDay();
case "hour":
case "hours":
date = new Date(value);
if (isNaN(date.getTime())) {
throw new Error("invalid date");
}
return date.getHours();
case "minute":
case "minutes":
date = new Date(value);
if (isNaN(date.getTime())) {
throw new Error("invalid date");
}
return date.getMinutes();
case "second":
case "seconds":
date = new Date(value);
if (isNaN(date.getTime())) {
throw new Error("invalid date");
}
return date.getSeconds();
case "date":
date = new Date(value);
if (isNaN(date.getTime())) {
throw new Error("invalid date");
}
try {
locale = getLocaleOfDocument();
return date.toLocaleDateString(locale);
} catch (e) {
throw new Error("unsupported locale or missing format (" + e.message + ")");
}
case "i18n": case "i18n":
case "translation": case "translation":
translations = getDocumentTranslations(); translations = getDocumentTranslations();
......
...@@ -27,6 +27,17 @@ describe('Transformer', function () { ...@@ -27,6 +27,17 @@ describe('Transformer', function () {
describe('Transformer.run()', function () { describe('Transformer.run()', function () {
[ [
['map:a=4:b=5:c=6', "a", "4"],
['date', "2023-02-14", "14.2.2023"],
['year', "2023-02-14", 2023],
['month', "2023-02-14", 2],
['day', "2023-02-14", 14],
['weekday', "2023-02-14", 2],
['minutes', "2023-02-14 06:12:21", 12],
['seconds', "2023-02-14 06:12:21", 21],
['hours', "2023-02-14 06:12:21", 6],
['time', "2023-02-14 06:12:21", "06:12:21"],
['timestamp', "2023-02-14", 1676332800000],
['concat:a.b.c:test:a.b.d', {a: {b: {c: 4, d: 6}}}, "4test6"], ['concat:a.b.c:test:a.b.d', {a: {b: {c: 4, d: 6}}}, "4test6"],
['concat:a.b.c:\\ \\ :a.b.d', {a: {b: {c: 4, d: 6}}}, "4 6"], ['concat:a.b.c:\\ \\ :a.b.d', {a: {b: {c: 4, d: 6}}}, "4 6"],
['concat:a.b.c:,:a.b.d', {a: {b: {c: 4, d: 6}}}, "4,6"], ['concat:a.b.c:,:a.b.d', {a: {b: {c: 4, d: 6}}}, "4,6"],
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment