@yuneta/gobj-ui 7.26.27 → 7.26.29
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 +590 -25
- package/dist/gobj-ui.cjs.js +1080 -229
- package/dist/gobj-ui.es.js +1081 -230
- package/package.json +4 -2
- package/scripts/validate-locales.mjs +2656 -315
- package/src/c_g6_nodes_tree.js +1086 -253
- package/src/c_yui_form.js +16 -4
- package/src/c_yui_fsm_graph.js +5 -0
- package/src/c_yui_gclass.js +11 -0
- package/src/c_yui_gobj_tree_js.js +18 -1
- package/src/c_yui_json_graph.js +5 -0
- package/src/c_yui_nav.js +21 -16
- package/src/c_yui_pager.js +1 -1
- package/src/c_yui_period.js +10 -3
- package/src/c_yui_schema_editor.js +34 -18
- package/src/c_yui_shell.js +11 -10
- package/src/c_yui_treedb_graph.js +17 -9
- package/src/c_yui_treedb_schema.js +5 -0
- package/src/c_yui_treedb_topic_with_form.js +9 -9
- package/src/c_yui_treedb_topics.js +13 -13
- package/src/c_yui_window.js +2 -2
- package/src/c_yui_window_manager.js +5 -2
- package/src/c_yui_wizard.js +8 -1
- package/src/form_json_field.js +7 -0
- package/src/g6_canvas_tab_order.js +84 -0
- package/src/g6_canvas_tab_order.wiring.test.js +232 -0
- package/src/g6_nodes_tree_controls.test.js +547 -0
- package/src/g6_nodes_tree_focus.wiring.test.js +1360 -0
- package/src/g6_nodes_tree_i18n_keys.test.js +241 -5
- package/src/i18n_key_functions.js +235 -0
- package/src/i18n_key_functions.test.js +1525 -0
- package/src/lib_graph.js +38 -1
- package/src/nav_backbar_name.wiring.test.js +82 -0
- package/src/schema_flags.js +47 -0
- package/src/schema_import.js +7 -0
- package/src/shell_modals.js +20 -16
- package/src/shell_route_map.js +13 -3
- package/src/wizard_helpers.js +8 -0
- package/src/yui_dev.js +16 -3
- package/src/yui_dev_controls.test.js +174 -0
- package/src/yui_gclass_view.js +1 -1
- package/src/yui_graph_camera.js +1 -1
- package/src/yui_install.js +10 -8
- package/src/yui_table_select.js +2 -2
- package/src/yui_time.js +17 -2
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
/***********************************************************************
|
|
2
2
|
* g6_nodes_tree_i18n_keys.test.js
|
|
3
3
|
*
|
|
4
|
-
* The
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* The keys of c_g6_nodes_tree.js that reach t() as DATA or as an
|
|
5
|
+
* ARGUMENT -- the shape tables, the labels and buttons of the
|
|
6
|
+
* popovers, the names of the floating buttons, the shell's error
|
|
7
|
+
* messages -- are invisible to a consumer's validate-locales, which
|
|
8
|
+
* only sees `t('<literal>')` and the `data-i18n*` / `i18n:` forms.
|
|
9
|
+
* So the view publishes them in G6_NODES_TREE_I18N_KEYS, and a key
|
|
10
|
+
* missing from that list renders raw in every language with the
|
|
11
|
+
* validator green (REV-CLOUD V20.5.1: "some records were gone
|
|
12
|
+
* before the delete").
|
|
13
|
+
*
|
|
14
|
+
* The module is read as a syntax tree, so every CALL is checked,
|
|
15
|
+
* not only the tables: a key handed to one of those helpers and
|
|
16
|
+
* not published fails here, and so does a new helper that hands
|
|
17
|
+
* t() a variable this test does not know the source of.
|
|
8
18
|
*
|
|
9
19
|
* Copyright (c) 2026, ArtGins.
|
|
10
20
|
* All Rights Reserved.
|
|
@@ -13,8 +23,10 @@ import {describe, test, expect} from "vitest";
|
|
|
13
23
|
import {readFileSync} from "node:fs";
|
|
14
24
|
import {dirname, join} from "node:path";
|
|
15
25
|
import {fileURLToPath} from "node:url";
|
|
26
|
+
import {parse} from "acorn";
|
|
16
27
|
|
|
17
28
|
const SRC = readFileSync(join(dirname(fileURLToPath(import.meta.url)), "c_g6_nodes_tree.js"), "utf8");
|
|
29
|
+
const AST = parse(SRC, {ecmaVersion: "latest", sourceType: "module"});
|
|
18
30
|
|
|
19
31
|
function array_of(name)
|
|
20
32
|
{
|
|
@@ -23,7 +35,130 @@ function array_of(name)
|
|
|
23
35
|
return [...m[1].matchAll(/'([^']+)'/g)].map((x) => x[1]);
|
|
24
36
|
}
|
|
25
37
|
|
|
26
|
-
|
|
38
|
+
/* The helpers that hand t() a key they were given, and which argument
|
|
39
|
+
* carries it. A call passes a literal (it must be published) or the
|
|
40
|
+
* parameter of another of these (it passes the key through). */
|
|
41
|
+
const KEY_ARGS = {
|
|
42
|
+
create_form_label: [1],
|
|
43
|
+
create_floating_icon: [4],
|
|
44
|
+
show_dual_icons: [3, 5],
|
|
45
|
+
show_confirm_popover: [3],
|
|
46
|
+
yui_shell_show_error: [1],
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/* The functions that call t() with something other than a literal,
|
|
50
|
+
* each with the place its keys come from:
|
|
51
|
+
* create_form_label, create_floating_icon: an argument (KEY_ARGS);
|
|
52
|
+
* name_form_control: the `data-i18n` create_form_label wrote;
|
|
53
|
+
* create_form_select, create_form_button_row: an `i18n:` property. */
|
|
54
|
+
const VARIABLE_T_CALLERS = [
|
|
55
|
+
"create_floating_icon",
|
|
56
|
+
"create_form_button_row",
|
|
57
|
+
"create_form_label",
|
|
58
|
+
"create_form_select",
|
|
59
|
+
"name_form_control",
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
/* The tables whose items reach `i18n:` through a `.map()`: the first
|
|
63
|
+
* test of this file checks that their keys are published. */
|
|
64
|
+
const KEY_TABLES = ["NODE_SHAPES", "PORT_SHAPES"];
|
|
65
|
+
|
|
66
|
+
/* Every node of the tree, with the stack of the nodes above it. */
|
|
67
|
+
function each_node(node, visit, stack = [])
|
|
68
|
+
{
|
|
69
|
+
visit(node, stack);
|
|
70
|
+
stack.push(node);
|
|
71
|
+
for(const k of Object.keys(node)) {
|
|
72
|
+
const v = node[k];
|
|
73
|
+
if(Array.isArray(v)) {
|
|
74
|
+
for(const c of v) {
|
|
75
|
+
if(c && typeof c.type === "string") {
|
|
76
|
+
each_node(c, visit, stack);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
} else if(v && typeof v.type === "string") {
|
|
80
|
+
each_node(v, visit, stack);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
stack.pop();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function is_string_literal(n)
|
|
87
|
+
{
|
|
88
|
+
if(!n) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
if(n.type === "Literal" && typeof n.value === "string") {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
return n.type === "TemplateLiteral" && n.expressions.length === 0;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function literal_value(n)
|
|
98
|
+
{
|
|
99
|
+
if(n.type === "Literal") {
|
|
100
|
+
return n.value;
|
|
101
|
+
}
|
|
102
|
+
return n.quasis[0].value.cooked;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function is_function(n)
|
|
106
|
+
{
|
|
107
|
+
return n.type === "FunctionDeclaration" || n.type === "FunctionExpression" ||
|
|
108
|
+
n.type === "ArrowFunctionExpression";
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function has_param(fn, name)
|
|
112
|
+
{
|
|
113
|
+
return fn.params.some((p) => p.type === "Identifier" && p.name === name);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/* The innermost function above, that declares `name` as a parameter. */
|
|
117
|
+
function function_with_param(stack, name)
|
|
118
|
+
{
|
|
119
|
+
for(let i = stack.length - 1; i >= 0; i--) {
|
|
120
|
+
if(is_function(stack[i]) && has_param(stack[i], name)) {
|
|
121
|
+
return {fn: stack[i], parent: stack[i - 1]};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function enclosing_declaration(stack)
|
|
128
|
+
{
|
|
129
|
+
for(let i = stack.length - 1; i >= 0; i--) {
|
|
130
|
+
if(stack[i].type === "FunctionDeclaration") {
|
|
131
|
+
return stack[i].id.name;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return "<module>";
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function line_of(n)
|
|
138
|
+
{
|
|
139
|
+
return SRC.slice(0, n.start).split("\n").length;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/* A key handed on by name is the parameter of one of the KEY_ARGS
|
|
143
|
+
* helpers (passed through), or the item of a KEY_TABLES `.map()`. */
|
|
144
|
+
function variable_key_is_known(stack, name)
|
|
145
|
+
{
|
|
146
|
+
const found = function_with_param(stack, name);
|
|
147
|
+
if(!found) {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
if(found.fn.type === "FunctionDeclaration" && KEY_ARGS[found.fn.id.name]) {
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
const call = found.parent;
|
|
154
|
+
return !!(call && call.type === "CallExpression" && call.arguments[0] === found.fn &&
|
|
155
|
+
call.callee.type === "MemberExpression" &&
|
|
156
|
+
call.callee.property.name === "map" &&
|
|
157
|
+
call.callee.object.type === "Identifier" &&
|
|
158
|
+
KEY_TABLES.includes(call.callee.object.name));
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
describe("c_g6_nodes_tree publishes the keys it hands to t() as data", () => {
|
|
27
162
|
test("every node and port shape is in G6_NODES_TREE_I18N_KEYS", () => {
|
|
28
163
|
const published = new Set(array_of("G6_NODES_TREE_I18N_KEYS"));
|
|
29
164
|
for(const shape of [...array_of("NODE_SHAPES"), ...array_of("PORT_SHAPES")]) {
|
|
@@ -36,4 +171,105 @@ describe("c_g6_nodes_tree publishes the keys of its shape tables", () => {
|
|
|
36
171
|
expect(SRC).toMatch(/o\.setAttribute\('data-i18n', opt\.i18n\)/);
|
|
37
172
|
expect(SRC).not.toMatch(/label: t\('/);
|
|
38
173
|
});
|
|
174
|
+
|
|
175
|
+
test("every function that hands t() a variable is one whose keys are checked here", () => {
|
|
176
|
+
const callers = new Set();
|
|
177
|
+
each_node(AST, (n, stack) => {
|
|
178
|
+
if(n.type === "CallExpression" && n.callee.type === "Identifier" &&
|
|
179
|
+
n.callee.name === "t" && !is_string_literal(n.arguments[0])) {
|
|
180
|
+
callers.add(enclosing_declaration(stack));
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
/* A new one fails here: teach KEY_ARGS (or the `i18n:` check
|
|
184
|
+
* below) where its keys come from, and publish them. */
|
|
185
|
+
expect([...callers].sort()).toEqual(VARIABLE_T_CALLERS);
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
test("every key handed to those helpers by argument is published", () => {
|
|
189
|
+
const published = new Set(array_of("G6_NODES_TREE_I18N_KEYS"));
|
|
190
|
+
const missing = [];
|
|
191
|
+
const unknowable = [];
|
|
192
|
+
let calls = 0;
|
|
193
|
+
each_node(AST, (n, stack) => {
|
|
194
|
+
if(n.type !== "CallExpression" || n.callee.type !== "Identifier" ||
|
|
195
|
+
!KEY_ARGS[n.callee.name]) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
calls++;
|
|
199
|
+
for(const i of KEY_ARGS[n.callee.name]) {
|
|
200
|
+
const arg = n.arguments[i];
|
|
201
|
+
if(is_string_literal(arg)) {
|
|
202
|
+
if(!published.has(literal_value(arg))) {
|
|
203
|
+
missing.push(`${n.callee.name}('${literal_value(arg)}') :${line_of(n)}`);
|
|
204
|
+
}
|
|
205
|
+
} else if(!(arg && arg.type === "Identifier" &&
|
|
206
|
+
variable_key_is_known(stack, arg.name))) {
|
|
207
|
+
unknowable.push(`${n.callee.name} argument ${i} :${line_of(n)}`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
expect(calls).toBeGreaterThan(10);
|
|
212
|
+
expect(missing).toEqual([]);
|
|
213
|
+
expect(unknowable).toEqual([]);
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
test("an `i18n:` property is a literal, or a key the checks above reach", () => {
|
|
217
|
+
const unknowable = [];
|
|
218
|
+
each_node(AST, (n, stack) => {
|
|
219
|
+
if(n.type !== "Property" || n.shorthand || n.key.type !== "Identifier" ||
|
|
220
|
+
n.key.name !== "i18n" || stack[stack.length - 1].type !== "ObjectExpression") {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
if(is_string_literal(n.value)) {
|
|
224
|
+
return; /* validate-locales reads `i18n: '<key>'` */
|
|
225
|
+
}
|
|
226
|
+
if(!(n.value.type === "Identifier" && variable_key_is_known(stack, n.value.name))) {
|
|
227
|
+
unknowable.push(`i18n: ${SRC.slice(n.value.start, n.value.end)} :${line_of(n)}`);
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
expect(unknowable).toEqual([]);
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
test("a toolbar item's `title_key` is the key of its `title`", () => {
|
|
234
|
+
/* toolbar_item_html() writes `title` as the name and
|
|
235
|
+
* `title_key` as its data-i18n-title / -aria-label: two
|
|
236
|
+
* writings of one key, which must not drift apart. Every
|
|
237
|
+
* object with a `title: t('<key>')` is a toolbar item here. */
|
|
238
|
+
const prop = (obj, name) => obj.properties.find((p) => p.type === "Property" &&
|
|
239
|
+
!p.computed && p.key.type === "Identifier" && p.key.name === name);
|
|
240
|
+
const bad = [];
|
|
241
|
+
let items = 0;
|
|
242
|
+
each_node(AST, (n) => {
|
|
243
|
+
if(n.type !== "ObjectExpression") {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
const title = prop(n, "title");
|
|
247
|
+
const key = prop(n, "title_key");
|
|
248
|
+
if(!title && !key) {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
const is_t = title && title.value.type === "CallExpression" &&
|
|
252
|
+
title.value.callee.type === "Identifier" && title.value.callee.name === "t" &&
|
|
253
|
+
is_string_literal(title.value.arguments[0]);
|
|
254
|
+
if(!is_t) {
|
|
255
|
+
return; /* not a translated title: nothing to key */
|
|
256
|
+
}
|
|
257
|
+
items++;
|
|
258
|
+
const want = literal_value(title.value.arguments[0]);
|
|
259
|
+
if(!key || !is_string_literal(key.value) || literal_value(key.value) !== want) {
|
|
260
|
+
bad.push(`title: t('${want}') without title_key '${want}' :${line_of(n)}`);
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
expect(items).toBeGreaterThan(15);
|
|
264
|
+
expect(bad).toEqual([]);
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
test("the published list holds the keys REV-CLOUD V20.5.1 found missing", () => {
|
|
268
|
+
const published = new Set(array_of("G6_NODES_TREE_I18N_KEYS"));
|
|
269
|
+
for(const key of ["some records were gone before the delete",
|
|
270
|
+
"node properties", "delete node", "edge properties",
|
|
271
|
+
"unlink", "link to hook", "port properties"]) {
|
|
272
|
+
expect(published.has(key), key).toBe(true);
|
|
273
|
+
}
|
|
274
|
+
});
|
|
39
275
|
});
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/***********************************************************************
|
|
2
|
+
* i18n_key_functions.js
|
|
3
|
+
*
|
|
4
|
+
* The gobj-ui functions that RECEIVE an i18n key as an
|
|
5
|
+
* argument, and where it goes. Pure data: no import, no code.
|
|
6
|
+
*
|
|
7
|
+
* A key handed to a function -- `yui_shell_show_error(shell,
|
|
8
|
+
* "the connection dropped")`, `icon_button(gobj, "yi-copy",
|
|
9
|
+
* "EV_COPY_ALL", "copy json")` -- reaches t() inside the function,
|
|
10
|
+
* by a parameter, where no scan of `t("...")` can see it. Up to
|
|
11
|
+
* gobj-ui 7.26.27 such a key was invisible to validate-locales,
|
|
12
|
+
* and several shipped untranslated (REV-CLOUD V20.5.1). This table
|
|
13
|
+
* names every such function: validate-locales reads the string
|
|
14
|
+
* literals given at these positions as keys the source asks for,
|
|
15
|
+
* in the app's own source and in the gobj-ui modules it mounts.
|
|
16
|
+
*
|
|
17
|
+
* An entry:
|
|
18
|
+
*
|
|
19
|
+
* module the src/ module that defines the function
|
|
20
|
+
* name its name
|
|
21
|
+
* exported true: an app or another module imports it, and
|
|
22
|
+
* every call bound to that import is read;
|
|
23
|
+
* false: a helper of its own module, read there
|
|
24
|
+
* keys where the keys are, one string per position:
|
|
25
|
+
* "1" the second argument
|
|
26
|
+
* "2.title" property `title` of an object
|
|
27
|
+
* literal given as the third
|
|
28
|
+
* "1.actions[].label"
|
|
29
|
+
* `label` of each object literal
|
|
30
|
+
* of the array `actions`
|
|
31
|
+
* A position may also hold DOM or nothing: only
|
|
32
|
+
* a string there is a key. DOM is an array (a
|
|
33
|
+
* createElement2 spec), a call of createElement2(),
|
|
34
|
+
* createOneHtml() or html_markup() of gobj-js, of
|
|
35
|
+
* text_node() of gobj-ui, of document.createElement()
|
|
36
|
+
* and the like, a const bound to one, a plain `let`
|
|
37
|
+
* only ever given one -- known by where it comes
|
|
38
|
+
* from, never by a variable's name.
|
|
39
|
+
*
|
|
40
|
+
* What is read at a position: a string literal, a template with
|
|
41
|
+
* no `${}`, every branch of a `?:`, `||`, `??` (the right one of
|
|
42
|
+
* `&&`), and what the reader follows -- a const to its value, a
|
|
43
|
+
* property of a const object, the element of a const array a
|
|
44
|
+
* `.map()` or a for...of walks (and what a destructuring reads
|
|
45
|
+
* from it), String(x) and `${x}` as x, the default of a parameter,
|
|
46
|
+
* a call of a function of the same module whose every return is
|
|
47
|
+
* one of these. A `let`, a parameter or data is not read: its keys
|
|
48
|
+
* are published in an exported `<NAME>_I18N_KEYS` array, and the
|
|
49
|
+
* call is MARKED with a comment right before what it hands over,
|
|
50
|
+
* `i18n: <NAME>_I18N_KEYS` (the list) or `i18n: data` (no key a
|
|
51
|
+
* list can hold). A marked `let` is held to its marker: every
|
|
52
|
+
* literal it is given is read and must be in the list, and one
|
|
53
|
+
* given nothing but literals fails (write it as a const, which the
|
|
54
|
+
* reader follows). A `data` marker on what the reader follows to
|
|
55
|
+
* keys and nothing else -- a literal, a const or a branch that is
|
|
56
|
+
* one, a call that returns literals -- fails too: it claims data
|
|
57
|
+
* where the reader reads a key.
|
|
58
|
+
*
|
|
59
|
+
* The rule, per CALL: a key position given anything else than a
|
|
60
|
+
* literal (or DOM, or nothing), a const the reader follows, a key
|
|
61
|
+
* position of the enclosing table function handed on, or a marked
|
|
62
|
+
* value fails, with the file and the line; a TRANSLATED text,
|
|
63
|
+
* t("..."), fails even marked (it would be translated again, and
|
|
64
|
+
* never change language). A test (i18n_key_functions.test.js)
|
|
65
|
+
* holds the library to it, and validate-locales an app's own code.
|
|
66
|
+
* Publishing a list exempts no module.
|
|
67
|
+
*
|
|
68
|
+
* The table is COMPLETE, and the same test proves it: it finds
|
|
69
|
+
* every function of the library that hands one of its parameters
|
|
70
|
+
* -- or what it reads from one, `opts.title`, a destructured
|
|
71
|
+
* `{label}`, each `items[].name` -- to t(), to an `i18n`, `code` or
|
|
72
|
+
* `data-i18n*` value, or to a key position of a function of this
|
|
73
|
+
* table (REV-CLOUD V21.4.1: up to 7.26.28 it lacked 39 such
|
|
74
|
+
* functions, and 6 entries lacked positions).
|
|
75
|
+
* One called by name goes here, with that position. One nothing
|
|
76
|
+
* calls by name -- an FSM action, a callback, a method -- has no
|
|
77
|
+
* call to read: it marks what it hands on, where it hands it. What
|
|
78
|
+
* a gobj keeps in its `priv` is its own state, never a position.
|
|
79
|
+
*
|
|
80
|
+
* Copyright (c) 2026, ArtGins.
|
|
81
|
+
* All Rights Reserved.
|
|
82
|
+
***********************************************************************/
|
|
83
|
+
|
|
84
|
+
export const I18N_KEY_FUNCTIONS = Object.freeze([
|
|
85
|
+
/*
|
|
86
|
+
* Exported: an app calls them
|
|
87
|
+
*/
|
|
88
|
+
/* shell_modals.js -- a string message IS a key (DOM is drawn as it is) */
|
|
89
|
+
{module: "shell_modals.js", name: "yui_shell_show_info", exported: true, keys: ["1"]},
|
|
90
|
+
{module: "shell_modals.js", name: "yui_shell_show_warning", exported: true, keys: ["1"]},
|
|
91
|
+
{module: "shell_modals.js", name: "yui_shell_show_error", exported: true, keys: ["1"]},
|
|
92
|
+
{module: "shell_modals.js", name: "yui_shell_show_modal", exported: true, keys: ["1", "2.title"]},
|
|
93
|
+
{module: "shell_modals.js", name: "yui_shell_confirm_ok", exported: true,
|
|
94
|
+
keys: ["1", "2.title", "2.ok_label"]},
|
|
95
|
+
{module: "shell_modals.js", name: "yui_shell_confirm_yesno", exported: true,
|
|
96
|
+
keys: ["1", "2.title", "2.yes_label", "2.no_label"]},
|
|
97
|
+
{module: "shell_modals.js", name: "yui_shell_confirm_danger", exported: true,
|
|
98
|
+
keys: ["1", "2.title", "2.confirm_label", "2.cancel_label"]},
|
|
99
|
+
{module: "shell_modals.js", name: "yui_shell_confirm_yesnocancel", exported: true,
|
|
100
|
+
keys: ["1", "2.title", "2.yes_label", "2.no_label", "2.cancel_label"]},
|
|
101
|
+
/* yui_install.js */
|
|
102
|
+
{module: "yui_install.js", name: "yui_install_ask_once", exported: true,
|
|
103
|
+
keys: ["1.message", "1.yes_label", "1.no_label"]},
|
|
104
|
+
/* yui_table_select.js -- the actions of the selection bar */
|
|
105
|
+
{module: "yui_table_select.js", name: "yui_selection_bar", exported: true,
|
|
106
|
+
keys: ["1.actions[].label"]},
|
|
107
|
+
/* yui_asset.js -- the marker of a missing asset */
|
|
108
|
+
{module: "yui_asset.js", name: "yui_asset_missing", exported: true, keys: ["1.key"]},
|
|
109
|
+
{module: "yui_asset.js", name: "yui_asset_element", exported: true, keys: ["1.key"]},
|
|
110
|
+
/* table_cell_text.js -- the tooltip key of a hook cell */
|
|
111
|
+
{module: "table_cell_text.js", name: "hook_cell_spec", exported: true, keys: ["4"]},
|
|
112
|
+
/* yui_time.js -- a granularity names itself by its id */
|
|
113
|
+
{module: "yui_time.js", name: "period_name", exported: true, keys: ["0", "0.id"]},
|
|
114
|
+
/* nav_cards_helpers.js -- a nav item's name, tooltip and aria label */
|
|
115
|
+
{module: "nav_cards_helpers.js", name: "card_descriptor", exported: true,
|
|
116
|
+
keys: ["0.name", "0.tooltip", "0.aria_label"]},
|
|
117
|
+
{module: "nav_cards_helpers.js", name: "cards_grid_descriptor", exported: true,
|
|
118
|
+
keys: ["0[].name", "0[].tooltip", "0[].aria_label"]},
|
|
119
|
+
/* yui_gclass_view.js -- the dialog's title is the gclass name */
|
|
120
|
+
{module: "yui_gclass_view.js", name: "open_gclass_view", exported: true, keys: ["1"]},
|
|
121
|
+
|
|
122
|
+
/*
|
|
123
|
+
* Helpers of their own module
|
|
124
|
+
*/
|
|
125
|
+
{module: "shell_modals.js", name: "show_notification", exported: false, keys: ["2"]},
|
|
126
|
+
{module: "shell_modals.js", name: "build_dialog", exported: false,
|
|
127
|
+
keys: ["1", "2[].label", "3.title"]},
|
|
128
|
+
{module: "yui_time.js", name: "tr", exported: false, keys: ["1"]},
|
|
129
|
+
{module: "yui_tabulator_i18n.js", name: "tr", exported: false, keys: ["0"]},
|
|
130
|
+
{module: "yui_toolbar.js", name: "arrow_button", exported: false, keys: ["2"]},
|
|
131
|
+
{module: "yui_graph_camera.js", name: "camera_button", exported: false, keys: ["3"]},
|
|
132
|
+
{module: "c_yui_json.js", name: "icon_button", exported: false, keys: ["3"]},
|
|
133
|
+
{module: "c_yui_json_pad.js", name: "pad_button", exported: false, keys: ["3"]},
|
|
134
|
+
{module: "c_yui_json_pad.js", name: "build_pane", exported: false, keys: ["2"]},
|
|
135
|
+
{module: "c_yui_gclass.js", name: "icon_button", exported: false, keys: ["3"]},
|
|
136
|
+
{module: "c_yui_gclass.js", name: "empty_line", exported: false, keys: ["0"]},
|
|
137
|
+
{module: "c_yui_gclass.js", name: "build_zone", exported: false, keys: ["1.key"]},
|
|
138
|
+
{module: "c_yui_period.js", name: "nav_button", exported: false, keys: ["3"]},
|
|
139
|
+
{module: "c_yui_period.js", name: "mode_name", exported: false,
|
|
140
|
+
keys: ["0.id", "0.roll.label", "0.spec", "0.spec.id"]},
|
|
141
|
+
{module: "c_yui_period.js", name: "build_mode_button", exported: false,
|
|
142
|
+
keys: ["1.id", "1.roll.label", "1.spec", "1.spec.id"]},
|
|
143
|
+
{module: "c_yui_form.js", name: "cell_icon", exported: false, keys: ["1"]},
|
|
144
|
+
{module: "c_yui_form.js", name: "name_form_control", exported: false, keys: ["1.label_i18n", "1.label"]},
|
|
145
|
+
{module: "c_yui_form.js", name: "create_form_field", exported: false,
|
|
146
|
+
keys: ["4.label_i18n", "4.label", "4.options", "4.options[]"]},
|
|
147
|
+
{module: "c_yui_treedb_graph.js", name: "step_button", exported: false, keys: ["2"]},
|
|
148
|
+
{module: "c_yui_treedb_graph.js", name: "layout_step_button", exported: false, keys: ["3"]},
|
|
149
|
+
{module: "c_yui_treedb_graph.js", name: "answer_print_tranger_refused", exported: false,
|
|
150
|
+
keys: ["2.i18n", "2.error"]},
|
|
151
|
+
{module: "c_yui_treedb_topics.js", name: "answer_print_tranger_refused", exported: false,
|
|
152
|
+
keys: ["2.i18n", "2.error"]},
|
|
153
|
+
{module: "c_yui_treedb_topics.js", name: "card_action_anchor", exported: false, keys: ["2"]},
|
|
154
|
+
{module: "c_yui_treedb_topics.js", name: "push_meta", exported: false, keys: ["0"]},
|
|
155
|
+
{module: "c_yui_treedb_topics.js", name: "relation", exported: false, keys: ["1"]},
|
|
156
|
+
{module: "c_yui_treedb_topics.js", name: "add_tab", exported: false, keys: ["3"]},
|
|
157
|
+
{module: "c_yui_treedb_topics.js", name: "add_topic_card", exported: false, keys: ["2"]},
|
|
158
|
+
{module: "c_yui_treedb_topics.js", name: "show_topic_info", exported: false, keys: ["1"]},
|
|
159
|
+
{module: "c_yui_treedb_topics.js", name: "build_topic_info_panel", exported: false, keys: ["2"]},
|
|
160
|
+
{module: "c_yui_treedb_topic_with_form.js", name: "confirm_then", exported: false, keys: ["1"]},
|
|
161
|
+
{module: "c_yui_treedb_topic_with_form.js", name: "present_json_popup", exported: false,
|
|
162
|
+
keys: ["1", "2.title"]},
|
|
163
|
+
{module: "c_yui_treedb_topic_with_form.js", name: "col_title_formatter", exported: false, keys: ["1.id"]},
|
|
164
|
+
{module: "c_yui_treedb_topic_with_form.js", name: "open_cell_json_dialog", exported: false, keys: ["2"]},
|
|
165
|
+
{module: "c_yui_treedb_topic_with_form.js", name: "open_cell_file_dialog", exported: false, keys: ["2"]},
|
|
166
|
+
{module: "c_yui_treedb_topic_with_form.js", name: "open_hook_choice_dialog", exported: false,
|
|
167
|
+
keys: ["1[].topic_name"]},
|
|
168
|
+
{module: "c_yui_schema_editor.js", name: "show_notice", exported: false, keys: ["1", "2"]},
|
|
169
|
+
{module: "c_yui_schema_editor.js", name: "toolbar_button", exported: false, keys: ["2"]},
|
|
170
|
+
{module: "c_yui_schema_editor.js", name: "row_icon", exported: false, keys: ["3"]},
|
|
171
|
+
{module: "c_yui_schema_editor.js", name: "name_control", exported: false, keys: ["1"]},
|
|
172
|
+
{module: "c_yui_schema_editor.js", name: "named", exported: false, keys: ["1"]},
|
|
173
|
+
{module: "c_yui_schema_editor.js", name: "name_attrs", exported: false, keys: ["0"]},
|
|
174
|
+
{module: "c_yui_schema_editor.js", name: "field", exported: false, keys: ["2", "4"]},
|
|
175
|
+
{module: "c_yui_schema_editor.js", name: "row", exported: false, keys: ["0"]},
|
|
176
|
+
{module: "c_yui_schema_editor.js", name: "confirm_then", exported: false, keys: ["1"]},
|
|
177
|
+
{module: "c_yui_schema_editor.js", name: "end_writes", exported: false, keys: ["1"]},
|
|
178
|
+
{module: "c_yui_schema_editor.js", name: "open_dialog", exported: false, keys: ["1", "2"]},
|
|
179
|
+
{module: "c_yui_schema_editor.js", name: "refuse_bad_name", exported: false, keys: ["1"]},
|
|
180
|
+
{module: "c_yui_schema_editor.js", name: "open_card", exported: false, keys: ["4[].i18n"]},
|
|
181
|
+
{module: "c_yui_schema_editor.js", name: "open_report", exported: false,
|
|
182
|
+
keys: ["1[].severity", "1[].code"]},
|
|
183
|
+
{module: "c_yui_schema_editor.js", name: "render_import_plan", exported: false,
|
|
184
|
+
keys: ["1.conflicts[].code", "1.writes[].op"]},
|
|
185
|
+
{module: "schema_validate.js", name: "add", exported: false, keys: ["1"]},
|
|
186
|
+
{module: "c_g6_nodes_tree.js", name: "create_floating_icon", exported: false, keys: ["4"]},
|
|
187
|
+
{module: "c_g6_nodes_tree.js", name: "show_dual_icons", exported: false, keys: ["3", "5"]},
|
|
188
|
+
{module: "c_g6_nodes_tree.js", name: "create_form_label", exported: false, keys: ["1"]},
|
|
189
|
+
{module: "c_g6_nodes_tree.js", name: "create_form_select", exported: false, keys: ["1[].i18n"]},
|
|
190
|
+
{module: "c_g6_nodes_tree.js", name: "create_form_button_row", exported: false, keys: ["1[].i18n"]},
|
|
191
|
+
{module: "c_g6_nodes_tree.js", name: "show_confirm_popover", exported: false, keys: ["3"]},
|
|
192
|
+
{module: "yui_dev.js", name: "mk_view", exported: false, keys: ["1"]},
|
|
193
|
+
{module: "yui_dev.js", name: "mk_out", exported: false, keys: ["1"]},
|
|
194
|
+
{module: "yui_dev.js", name: "mk_expand", exported: false, keys: ["1"]},
|
|
195
|
+
{module: "yui_dev.js", name: "mk_dir", exported: false, keys: ["3"]},
|
|
196
|
+
{module: "yui_dev.js", name: "grp", exported: false, keys: ["0"]},
|
|
197
|
+
{module: "yui_dev.js", name: "grp_scroll", exported: false, keys: ["0"]},
|
|
198
|
+
/* c_yui_nav.js -- the items of a menu: the app's nav declaration */
|
|
199
|
+
{module: "c_yui_nav.js", name: "item_li", exported: false, keys: ["1.name", "1.tooltip", "1.aria_label"]},
|
|
200
|
+
{module: "c_yui_nav.js", name: "item_iconbar", exported: false, keys: ["1.name", "1.tooltip", "1.aria_label"]},
|
|
201
|
+
{module: "c_yui_nav.js", name: "render_vertical", exported: false,
|
|
202
|
+
keys: ["1[].name", "1[].tooltip", "1[].aria_label"]},
|
|
203
|
+
{module: "c_yui_nav.js", name: "render_icon_bar", exported: false,
|
|
204
|
+
keys: ["1[].name", "1[].tooltip", "1[].aria_label"]},
|
|
205
|
+
{module: "c_yui_nav.js", name: "render_tabs", exported: false,
|
|
206
|
+
keys: ["1[].name", "1[].tooltip", "1[].aria_label"]},
|
|
207
|
+
{module: "c_yui_nav.js", name: "render_cards", exported: false,
|
|
208
|
+
keys: ["1[].name", "1[].tooltip", "1[].aria_label"]},
|
|
209
|
+
{module: "c_yui_nav.js", name: "render_submenu", exported: false,
|
|
210
|
+
keys: ["1[].name", "1[].tooltip", "1[].aria_label"]},
|
|
211
|
+
{module: "c_yui_nav.js", name: "render_drawer", exported: false,
|
|
212
|
+
keys: ["1[].name", "1[].tooltip", "1[].aria_label"]},
|
|
213
|
+
{module: "c_yui_nav.js", name: "render_breadcrumb", exported: false, keys: ["1[].name", "1[].id"]},
|
|
214
|
+
{module: "c_yui_nav.js", name: "render_accordion", exported: false,
|
|
215
|
+
keys: ["1[].name", "1[].submenu.items[].name", "1[].submenu.items[].tooltip",
|
|
216
|
+
"1[].submenu.items[].aria_label"]},
|
|
217
|
+
/* c_yui_shell.js -- the toolbar items: the app's shell declaration */
|
|
218
|
+
{module: "c_yui_shell.js", name: "build_toolbar", exported: false,
|
|
219
|
+
keys: ["1.toolbar.aria_label", "1.toolbar.items[].name", "1.toolbar.items[].aria_label",
|
|
220
|
+
"1.toolbar.items[].tooltip", "1.toolbar.items[].wordmark"]},
|
|
221
|
+
{module: "c_yui_shell.js", name: "build_toolbar_action_item", exported: false,
|
|
222
|
+
keys: ["1.name", "1.aria_label", "1.tooltip"]},
|
|
223
|
+
{module: "c_yui_shell.js", name: "build_toolbar_brand_item", exported: false,
|
|
224
|
+
keys: ["1.name", "1.aria_label", "1.tooltip", "1.wordmark"]},
|
|
225
|
+
{module: "c_yui_shell.js", name: "build_toolbar_avatar_item", exported: false,
|
|
226
|
+
keys: ["1.name", "1.aria_label", "1.tooltip"]},
|
|
227
|
+
{module: "c_yui_shell.js", name: "build_toolbar_connection_item", exported: false,
|
|
228
|
+
keys: ["1.name", "1.aria_label", "1.tooltip"]},
|
|
229
|
+
{module: "c_yui_shell.js", name: "handle_toolbar_action", exported: false, keys: ["1.name", "1.aria_label"]},
|
|
230
|
+
{module: "c_yui_shell.js", name: "toggle_toolbar_dropdown", exported: false, keys: ["1.name", "1.aria_label"]},
|
|
231
|
+
{module: "c_yui_shell.js", name: "open_toolbar_dropdown", exported: false, keys: ["1.name", "1.aria_label"]},
|
|
232
|
+
{module: "c_yui_shell.js", name: "build_dropdown_row", exported: false, keys: ["1.name", "1.aria_label"]},
|
|
233
|
+
/* shell_route_map.js -- a node of the route map */
|
|
234
|
+
{module: "shell_route_map.js", name: "render_node", exported: false, keys: ["0.label"]},
|
|
235
|
+
]);
|