iobroker.vis-jsontemplate 4.5.0 → 4.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -9
- package/io-package.json +27 -27
- package/package.json +1 -1
- package/widgets/vis-jsontemplate/dist/jsontemplate-dist.js +120 -3
- package/widgets/vis-jsontemplate/dist/jsontemplate-dist.js.map +2 -2
- package/widgets/vis-jsontemplate/js/jsontemplate.js +111 -0
- package/widgets/vis-jsontemplate/myi18n/words.json +13 -0
- package/widgets/vis-jsontemplate.html +2 -2
- package/widgets/vis2vis-jsontemplate/assets/{EJSAceEditor-Dqhpf5Jr.js → EJSAceEditor-q4P5vgCv.js} +1 -1
- package/widgets/vis2vis-jsontemplate/assets/JSONTemplateWidget-BrIGyvVS.js +80 -0
- package/widgets/vis2vis-jsontemplate/assets/hostInit--w_ScJeB.js +1 -1
- package/widgets/vis2vis-jsontemplate/assets/translations-BLfiYlPH.js +1 -0
- package/widgets/vis2vis-jsontemplate/assets/{virtualExposes-BYOqnIiW.js → virtualExposes-DaLISvQh.js} +2 -2
- package/widgets/vis2vis-jsontemplate/customWidgets.js +1 -1
- package/widgets/vis2vis-jsontemplate/assets/JSONTemplateWidget-DPCnLQWe.js +0 -80
- package/widgets/vis2vis-jsontemplate/assets/translations-BFlvqXQW.js +0 -1
package/README.md
CHANGED
|
@@ -91,6 +91,7 @@ JSONTemplate now supports async calls with await.
|
|
|
91
91
|
| json_oid | Selection of the data point with the corresponding JSON data. |
|
|
92
92
|
| json_dpCount | Number of data points to be made available in the template. |
|
|
93
93
|
| json_dp | Datapoint ID to be made available. |
|
|
94
|
+
| json_dp_variable | Optional JavaScript variable name. The variable contains the datapoint ID; the same name with `_value` appended contains its current value. |
|
|
94
95
|
| json_scriptCount | Number of JavaScript URLs to be loaded |
|
|
95
96
|
| json_script[] | JavaScript URL to be loaded. See example below. |
|
|
96
97
|
| json_cssCount | Number of CSS URLs to be loaded. |
|
|
@@ -124,6 +125,15 @@ B) Indexnumber of the datapoint (the number always start with 0)
|
|
|
124
125
|
<%- dp[Object.keys(dp)[1]] %>
|
|
125
126
|
```
|
|
126
127
|
|
|
128
|
+
C) An optional variable name configured for the datapoint. For a datapoint
|
|
129
|
+
`0_userdata.0.selectwrite`, variable name `dpwrite`, and value `abc`:
|
|
130
|
+
|
|
131
|
+
```javascript
|
|
132
|
+
<%- dpwrite %> <!-- 0_userdata.0.selectwrite -->
|
|
133
|
+
<%- dpwrite_value %> <!-- abc -->
|
|
134
|
+
<%- dp[dpwrite] %> <!-- abc -->
|
|
135
|
+
```
|
|
136
|
+
|
|
127
137
|
Example output of data, widget and style in the template
|
|
128
138
|
|
|
129
139
|
```ejs
|
|
@@ -133,6 +143,9 @@ Example output of data, widget and style in the template
|
|
|
133
143
|
.replace(/ /g, ' '); %>
|
|
134
144
|
```
|
|
135
145
|
|
|
146
|
+
If an error occurs, it is displayed in the widget and output to the
|
|
147
|
+
browser console (F12).
|
|
148
|
+
|
|
136
149
|
#### Advanced use case
|
|
137
150
|
|
|
138
151
|
In the examples above, only the pure output was covered.
|
|
@@ -410,6 +423,18 @@ Loop over the attributes of an object
|
|
|
410
423
|
Placeholder for the next version (at the beginning of the line):
|
|
411
424
|
### **WORK IN PROGRESS**
|
|
412
425
|
-->
|
|
426
|
+
### 4.6.1 (2026-07-31)
|
|
427
|
+
|
|
428
|
+
- Improved error output.
|
|
429
|
+
|
|
430
|
+
### 4.6.0 (2026-07-30)
|
|
431
|
+
|
|
432
|
+
- some changes. see readme/below
|
|
433
|
+
|
|
434
|
+
#### Changes 2026-07-30
|
|
435
|
+
|
|
436
|
+
- add optional variable names to extra datapoints
|
|
437
|
+
|
|
413
438
|
### 4.5.0 (2026-07-29)
|
|
414
439
|
|
|
415
440
|
- some changes. see readme/below
|
|
@@ -437,15 +462,6 @@ Loop over the attributes of an object
|
|
|
437
462
|
- Due to an inconsistency between the vis1 and vis2 widgets,
|
|
438
463
|
both `widgetid` and `widgetID` are now passed to the template.
|
|
439
464
|
|
|
440
|
-
### 4.4.3 (2026-04-21)
|
|
441
|
-
|
|
442
|
-
- revert repochecker warning about fs/node:fs and path/node:path
|
|
443
|
-
because of error loading ejs
|
|
444
|
-
|
|
445
|
-
### 4.4.2 (2026-04-13)
|
|
446
|
-
|
|
447
|
-
- fix runtime
|
|
448
|
-
|
|
449
465
|
[Older changelogs can be found there](CHANGELOG_OLD.md)
|
|
450
466
|
|
|
451
467
|
## License
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "vis-jsontemplate",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.6.1",
|
|
5
5
|
"news": {
|
|
6
|
+
"4.6.1": {
|
|
7
|
+
"en": "- Improved error output.",
|
|
8
|
+
"de": "- Verbesserte Fehlerausgabe.",
|
|
9
|
+
"ru": "- Улучшен вывод сообщений об ошибках.",
|
|
10
|
+
"pt": "- Melhorada a saída de erros.",
|
|
11
|
+
"nl": "- Verbeterde foutuitvoer.",
|
|
12
|
+
"fr": "- Amélioration de l'affichage des erreurs.",
|
|
13
|
+
"it": "- Migliorata la visualizzazione degli errori.",
|
|
14
|
+
"es": "- Se ha mejorado la salida de errores.",
|
|
15
|
+
"pl": "- Ulepszono wyświetlanie błędów.",
|
|
16
|
+
"uk": "- Покращено виведення повідомлень про помилки.",
|
|
17
|
+
"zh-cn": "- 改进了错误输出。"
|
|
18
|
+
},
|
|
19
|
+
"4.6.0": {
|
|
20
|
+
"en": "- some changes. see readme/below",
|
|
21
|
+
"de": "- einige änderungen. siehe readme/unten",
|
|
22
|
+
"ru": "- некоторые изменения. см. readme/low",
|
|
23
|
+
"pt": "- algumas mudanças. ver lerme/abaixo",
|
|
24
|
+
"nl": "- wat veranderingen. zie readme/onder",
|
|
25
|
+
"fr": "- quelques changements. voir lecture/ci-dessous",
|
|
26
|
+
"it": "- qualche cambiamento. vedi readme/below",
|
|
27
|
+
"es": "- algunos cambios. ver readme/below",
|
|
28
|
+
"pl": "- kilka zmian. patrz readme / poniżej",
|
|
29
|
+
"uk": "- деякі зміни. переглянути файл",
|
|
30
|
+
"zh-cn": "- 一些变化。 见readme/以下"
|
|
31
|
+
},
|
|
6
32
|
"4.5.0": {
|
|
7
33
|
"en": "- some changes. see readme/below\n\n#### Changes 2026-07-29\n\n- repair widget rendering\n- add search and fullscreen to ejs-edit for vis-2 widget\n- improve ki documentation for regex expressions\n- improve vis-2 ejs edit theme for dark mode",
|
|
8
34
|
"de": "- einige änderungen. siehe readme/unten\n\nÄnderungen 2026-07-29\n\n- reparatur widget rendering\n- hinzufügen von suche und vollbild zu ejs-edit für vis-2 widget\n- verbesserung der ki-dokumentation für regex-ausdrücke\n- verbesserung von vis-2 ejs edit theme für den dunklen modus",
|
|
@@ -67,32 +93,6 @@
|
|
|
67
93
|
"pl": "napraw środowisko wykonawcze",
|
|
68
94
|
"uk": "фіксувати runtime",
|
|
69
95
|
"zh-cn": "固定运行时间"
|
|
70
|
-
},
|
|
71
|
-
"4.4.1": {
|
|
72
|
-
"en": "fix regression\nupdate packages",
|
|
73
|
-
"de": "regression\nupdate-pakete",
|
|
74
|
-
"ru": "фиксировать регрессию\nобновление пакетов",
|
|
75
|
-
"pt": "corrigir regressão\natualizar pacotes",
|
|
76
|
-
"nl": "repareren regressie\npakketten bijwerken",
|
|
77
|
-
"fr": "fixer la régression\nmettre à jour les paquets",
|
|
78
|
-
"it": "correzione della regressione\npacchetti di aggiornamento",
|
|
79
|
-
"es": "regreso\nactualizar paquetes",
|
|
80
|
-
"pl": "naprawić regresję\naktualizacja pakietów",
|
|
81
|
-
"uk": "фіксація регресія\nоновлення пакетів",
|
|
82
|
-
"zh-cn": "修复回归\n更新软件包"
|
|
83
|
-
},
|
|
84
|
-
"4.4.0": {
|
|
85
|
-
"en": "- optimize lib size\n- The ability to load additional JavaScript and CSS files\n has been added (also for vis2).\n- Improve react components\n- align translation for vis2 widget",
|
|
86
|
-
"de": "- optimierung der lib-größe\n- Die Möglichkeit, zusätzliche JavaScript- und CSS-Dateien zu laden\nwurde hinzugefügt (auch für vis2).\n- Reaktionskomponenten verbessern\n- übersetzung ausrichten für vis2 widget",
|
|
87
|
-
"ru": "оптимизируйте размер lib\nВозможность загрузки дополнительных файлов JavaScript и CSS\nдобавлено (также для vis2).\nУлучшение компонентов реакции\nперевод для vis2 widget",
|
|
88
|
-
"pt": "- otimizar o tamanho da lib\n- A capacidade de carregar arquivos adicionais de JavaScript e CSS\nfoi adicionado (também para vis2).\n- Melhorar os componentes de reacção\n- alinhar a tradução para o widget vis2",
|
|
89
|
-
"nl": "- optimalisatie van de grootte van de lib\n- De mogelijkheid om extra JavaScript- en CSS-bestanden te laden\nis toegevoegd (ook voor vis2).\n- Verbeter reactiecomponenten\n- align vertaling voor vis2 widget",
|
|
90
|
-
"fr": "- optimiser la taille de la lib\n- La possibilité de charger des fichiers supplémentaires JavaScript et CSS\na été ajouté (également pour vis2).\n- Améliorer les composants de réaction\n- traduction alignée pour le widget vis2",
|
|
91
|
-
"it": "- ottimizza la dimensione lib\n- La capacità di caricare ulteriori file JavaScript e CSS\nè stato aggiunto (anche per vis2).\n- Migliorare i componenti reattivi\n- traduzione allineare per widget vis2",
|
|
92
|
-
"es": "- optimizar el tamaño de la lib\n- La capacidad de cargar archivos adicionales JavaScript y CSS\nse ha añadido (también para vis2).\n- Mejorar los componentes de reacción\n- traducción alineada para vis2 widget",
|
|
93
|
-
"pl": "- optymalizacja rozmiaru lib\n- Możliwość wczytania dodatkowych plików JavaScript i CSS\nzostał dodany (także dla vis2).\n- Poprawa składników reakcji\n- tłumaczenie wyrównawcze dla vis2 widget",
|
|
94
|
-
"uk": "- оптимізація розміру lib\n- Можливість завантаження додаткових файлів JavaScript та CSS\nдодано (також для vis2).\n- Покращити компоненти реакції\n- вирівняти переклад для віджету vis2",
|
|
95
|
-
"zh-cn": "- 优化自由体积\n- 装入额外的 JavaScript 和 CSS 文件的能力\n已添加(也用于对比2).\n- 改进反应组件\n- 对齐粘合元件的翻译"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|
package/package.json
CHANGED
|
@@ -1,10 +1,27 @@
|
|
|
1
1
|
(() => {
|
|
2
2
|
var __create = Object.create;
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
|
+
var __defProps = Object.defineProperties;
|
|
4
5
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
5
7
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
6
9
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
10
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
11
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
12
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
13
|
+
var __spreadValues = (a, b) => {
|
|
14
|
+
for (var prop in b || (b = {}))
|
|
15
|
+
if (__hasOwnProp.call(b, prop))
|
|
16
|
+
__defNormalProp(a, prop, b[prop]);
|
|
17
|
+
if (__getOwnPropSymbols)
|
|
18
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
19
|
+
if (__propIsEnum.call(b, prop))
|
|
20
|
+
__defNormalProp(a, prop, b[prop]);
|
|
21
|
+
}
|
|
22
|
+
return a;
|
|
23
|
+
};
|
|
24
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
8
25
|
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
9
26
|
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
10
27
|
}) : x)(function(x) {
|
|
@@ -58,7 +75,7 @@
|
|
|
58
75
|
var version;
|
|
59
76
|
var init_package = __esm({
|
|
60
77
|
"../package.json"() {
|
|
61
|
-
version = "4.
|
|
78
|
+
version = "4.6.1";
|
|
62
79
|
}
|
|
63
80
|
});
|
|
64
81
|
|
|
@@ -71,6 +88,104 @@
|
|
|
71
88
|
const i18n = yield res.json();
|
|
72
89
|
$.extend(true, systemDictionary, i18n);
|
|
73
90
|
}));
|
|
91
|
+
var EJS_CONTEXT_NAMES = /* @__PURE__ */ new Set(["widgetid", "widgetID", "data", "dp", "style", "widget", "I18n"]);
|
|
92
|
+
var RESERVED_WORDS = /* @__PURE__ */ new Set([
|
|
93
|
+
"await",
|
|
94
|
+
"break",
|
|
95
|
+
"case",
|
|
96
|
+
"catch",
|
|
97
|
+
"class",
|
|
98
|
+
"const",
|
|
99
|
+
"continue",
|
|
100
|
+
"debugger",
|
|
101
|
+
"default",
|
|
102
|
+
"delete",
|
|
103
|
+
"do",
|
|
104
|
+
"else",
|
|
105
|
+
"enum",
|
|
106
|
+
"export",
|
|
107
|
+
"extends",
|
|
108
|
+
"false",
|
|
109
|
+
"finally",
|
|
110
|
+
"for",
|
|
111
|
+
"function",
|
|
112
|
+
"if",
|
|
113
|
+
"implements",
|
|
114
|
+
"import",
|
|
115
|
+
"in",
|
|
116
|
+
"instanceof",
|
|
117
|
+
"interface",
|
|
118
|
+
"let",
|
|
119
|
+
"new",
|
|
120
|
+
"null",
|
|
121
|
+
"package",
|
|
122
|
+
"private",
|
|
123
|
+
"protected",
|
|
124
|
+
"public",
|
|
125
|
+
"return",
|
|
126
|
+
"static",
|
|
127
|
+
"super",
|
|
128
|
+
"switch",
|
|
129
|
+
"this",
|
|
130
|
+
"throw",
|
|
131
|
+
"true",
|
|
132
|
+
"try",
|
|
133
|
+
"typeof",
|
|
134
|
+
"var",
|
|
135
|
+
"void",
|
|
136
|
+
"while",
|
|
137
|
+
"with",
|
|
138
|
+
"yield"
|
|
139
|
+
]);
|
|
140
|
+
function isValidJavaScriptIdentifier(value) {
|
|
141
|
+
if (typeof value !== "string" || !value) {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
return /^[$_\p{ID_Start}][$\u200C\u200D_\p{ID_Continue}]*$/u.test(value) && !RESERVED_WORDS.has(value);
|
|
145
|
+
}
|
|
146
|
+
function getDatapointVariableName(data, index) {
|
|
147
|
+
var _a, _b;
|
|
148
|
+
const value = (_b = (_a = data == null ? void 0 : data[`json_dp_variable${index}`]) != null ? _a : data == null ? void 0 : data[`json_dp_variable-${index}`]) != null ? _b : "";
|
|
149
|
+
return typeof value === "string" ? value.trim() : "";
|
|
150
|
+
}
|
|
151
|
+
function buildDatapointVariables(data, dpCount) {
|
|
152
|
+
const variables = {};
|
|
153
|
+
const usedNames = /* @__PURE__ */ new Set();
|
|
154
|
+
for (let i = 1; i <= dpCount; i++) {
|
|
155
|
+
const name = getDatapointVariableName(data, i);
|
|
156
|
+
if (!name) {
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
if (!isValidJavaScriptIdentifier(name)) {
|
|
160
|
+
throw new Error(`Invalid JavaScript variable name: ${name}`);
|
|
161
|
+
}
|
|
162
|
+
const valueName = `${name}_value`;
|
|
163
|
+
if (EJS_CONTEXT_NAMES.has(name) || EJS_CONTEXT_NAMES.has(valueName)) {
|
|
164
|
+
throw new Error(`Variable name is already used by the template context: ${name}`);
|
|
165
|
+
}
|
|
166
|
+
if (usedNames.has(name) || usedNames.has(valueName)) {
|
|
167
|
+
throw new Error(`Variable name is used more than once: ${name}`);
|
|
168
|
+
}
|
|
169
|
+
usedNames.add(name);
|
|
170
|
+
usedNames.add(valueName);
|
|
171
|
+
const oid = data[`json_dp${i}`];
|
|
172
|
+
if (oid) {
|
|
173
|
+
Object.defineProperty(variables, name, {
|
|
174
|
+
value: oid,
|
|
175
|
+
enumerable: true,
|
|
176
|
+
configurable: true,
|
|
177
|
+
writable: true
|
|
178
|
+
});
|
|
179
|
+
Object.defineProperty(variables, valueName, {
|
|
180
|
+
value: vis.states.attr(`${oid}.val`),
|
|
181
|
+
enumerable: true,
|
|
182
|
+
configurable: true,
|
|
183
|
+
writable: true
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return variables;
|
|
188
|
+
}
|
|
74
189
|
vis.binds["jsontemplate"] = {
|
|
75
190
|
version,
|
|
76
191
|
_assetCache: vis.binds["jsontemplate"] && vis.binds["jsontemplate"]._assetCache || /* @__PURE__ */ new Map(),
|
|
@@ -215,20 +330,22 @@
|
|
|
215
330
|
}
|
|
216
331
|
let text = "";
|
|
217
332
|
try {
|
|
333
|
+
const datapointVariables = buildDatapointVariables(data, dpCount);
|
|
218
334
|
text = yield ejs.render(
|
|
219
335
|
template,
|
|
220
|
-
{
|
|
336
|
+
__spreadProps(__spreadValues({}, datapointVariables), {
|
|
221
337
|
widgetID,
|
|
222
338
|
widgetid: widgetID,
|
|
223
339
|
data: oiddata,
|
|
224
340
|
dp: datapoints,
|
|
225
341
|
widget: data,
|
|
226
342
|
style
|
|
227
|
-
},
|
|
343
|
+
}),
|
|
228
344
|
{ async: true }
|
|
229
345
|
);
|
|
230
346
|
} catch (e) {
|
|
231
347
|
text = vis.binds["jsontemplate"].escapeHTML(e.message).replace(/(?:\r\n|\r|\n)/g, "<br>");
|
|
348
|
+
console.error(e.message);
|
|
232
349
|
text = text.replace(/ /gm, " ");
|
|
233
350
|
text = `<code style="color:red;">${text}</code>`;
|
|
234
351
|
}
|