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

fix: optimize i18n: transformer

parent fbbee53d
No related branches found
No related tags found
No related merge requests found
......@@ -9,6 +9,7 @@ import {Base} from "../types/base.mjs";
import {getGlobal, getGlobalObject} from "../types/global.mjs";
import {ID} from "../types/id.mjs";
import {isArray, isObject, isString} from "../types/is.mjs";
import {getDocumentTranslations, Translations} from "../i18n/translations.mjs";
import {
validateFunction,
validateInteger,
......@@ -167,6 +168,7 @@ function transform(value) {
let element;
let attribute;
let translations;
switch (this.command) {
case "static":
......@@ -461,43 +463,21 @@ function transform(value) {
throw new Error("type not supported");
// case "element-by-id":
// return getGlobal("document").getElementById(convertToString(value));
//
// case "element-query":
// case "element-query-selector":
// return getGlobal("document").querySelector(convertToString(value));
//
// case "element-value":
// return getGlobal("document").getElementById(convertToString(value))?.value;
//
// case "element-text":
// return getGlobal("document").getElementById(convertToString(value))?.innerText;
//
// case "element-html":
// return getGlobal("document").getElementById(convertToString(value))?.innerHTML;
//
// case "element-attribute":
// let element = getGlobal("document").getElementById(convertToString(value));
// let attribute = args.shift();
// if (attribute === undefined) {
// throw new Error("missing attribute parameter");
// }
// return element?.getAttribute(attribute);
case "i18n":
case "translation":
element = getGlobal("document").getElementById(convertToString(value));
if (element === undefined) {
throw new Error("missing element parameter");
}
translations = getDocumentTranslations();
if (!(translations instanceof Translations)) {
throw new Error("missing translations");
}
attribute = args.shift();
if (attribute === undefined) {
throw new Error("missing attribute parameter");
key = args.shift() || undefined;
if (key === undefined) {
key = value;
}
return element?.getAttribute(attribute);
defaultValue = args.shift() || undefined;
return translations.getText(key, defaultValue);
default:
throw new Error(`unknown command ${this.command}`);
......
......@@ -6,6 +6,7 @@
*/
import { getLinkedObjects,hasObjectLink} from "../dom/attributes.mjs";
import {ATTRIBUTE_OBJECTLINK} from "../dom/constants.mjs";
import {getDocument} from "../dom/util.mjs";
import {Base} from "../types/base.mjs";
import {isObject, isString} from "../types/is.mjs";
......@@ -199,7 +200,7 @@ function getDocumentTranslations(element) {
const d = getDocument()
if (!(element instanceof HTMLElement)) {
element = d.querySelector("body");
element = d.querySelector('['+ATTRIBUTE_OBJECTLINK+'="' + translationsLinkSymbol.toString() + '"]');
}
if (!(element instanceof HTMLElement)) {
......
......@@ -2,6 +2,7 @@
import {expect} from "chai"
import {Transformer} from "../../../../application/source/data/transformer.mjs";
import {Embed} from "../../../../application/source/i18n/providers/embed.mjs";
import {initJSDOM} from "../../util/jsdom.mjs";
describe('Transformer', function () {
......@@ -202,13 +203,24 @@ describe('Transformer', function () {
describe('i18n', function () {
let html1 = `
<div id="test1">
</div>
<div id="mock-translations"></div>
<script type="application/json" data-monster-role="translations">
{
"test1": "xyz",
"test3": {
"other": "xyz"
}
}
</script>
`;
beforeEach(() => {
beforeEach((done) => {
let mocks = document.getElementById('mocks');
mocks.innerHTML = html1;
let elem = document.getElementById('mock-translations');
Embed.assignTranslationsToElement(elem).then((o) => {
done()
})
})
......@@ -224,10 +236,25 @@ describe('Transformer', function () {
});
});
it('should', function () {
const t = new Transformer('i18n:en:de');
[
[ 'i18n:test1',"", "xyz"],
[ 'i18n:',"test1", "xyz"], // key by value
[ 'i18n::',"test1", "xyz"], // key by value no default
[ 'i18n::eee',"test2", "eee"], // key by value with default
[ 'i18n::ddd',"test2", "ddd"], // key by value and default
].forEach(function (data) {
let a = data.shift()
let b = data.shift()
let c = data.shift()
it('should transform('+a+').run('+b+') return ' + JSON.stringify(c), function () {
const t = new Transformer(a);
expect(t.run(b)).to.be.eql(c);
});
})
})
});
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment