lexgui 8.0.0 → 8.1.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 +3 -3
- package/build/components/AlertDialog.d.ts +7 -0
- package/build/components/Counter.d.ts +1 -0
- package/build/components/Dialog.d.ts +1 -1
- package/build/components/Footer.d.ts +1 -1
- package/build/components/Menubar.d.ts +2 -2
- package/build/core/Area.d.ts +22 -22
- package/build/core/Namespace.js +34 -34
- package/build/core/Namespace.js.map +1 -1
- package/build/core/Panel.d.ts +2 -3
- package/build/extensions/AssetView.d.ts +136 -134
- package/build/extensions/AssetView.js +1367 -1320
- package/build/extensions/AssetView.js.map +1 -1
- package/build/extensions/Audio.js +19 -19
- package/build/extensions/Audio.js.map +1 -1
- package/build/extensions/CodeEditor.js +867 -647
- package/build/extensions/CodeEditor.js.map +1 -1
- package/build/extensions/DocMaker.d.ts +1 -1
- package/build/extensions/DocMaker.js +73 -61
- package/build/extensions/DocMaker.js.map +1 -1
- package/build/extensions/GraphEditor.js +406 -305
- package/build/extensions/GraphEditor.js.map +1 -1
- package/build/extensions/ImUi.js +21 -20
- package/build/extensions/ImUi.js.map +1 -1
- package/build/extensions/Timeline.d.ts +29 -36
- package/build/extensions/Timeline.js +421 -424
- package/build/extensions/Timeline.js.map +1 -1
- package/build/extensions/VideoEditor.js +101 -97
- package/build/extensions/VideoEditor.js.map +1 -1
- package/build/extensions/index.d.ts +8 -8
- package/build/extensions/index.js +1 -1
- package/build/index.all.d.ts +2 -2
- package/build/index.css.d.ts +1 -1
- package/build/index.d.ts +56 -55
- package/build/lexgui.all.js +28488 -27640
- package/build/lexgui.all.js.map +1 -1
- package/build/lexgui.all.min.js +1 -1
- package/build/lexgui.all.module.js +28412 -27565
- package/build/lexgui.all.module.js.map +1 -1
- package/build/lexgui.all.module.min.js +1 -1
- package/build/lexgui.css +176 -69
- package/build/lexgui.js +13796 -13330
- package/build/lexgui.js.map +1 -1
- package/build/lexgui.min.css +1 -1
- package/build/lexgui.min.js +1 -1
- package/build/lexgui.module.js +13733 -13268
- package/build/lexgui.module.js.map +1 -1
- package/build/lexgui.module.min.js +1 -1
- package/changelog.md +22 -1
- package/demo.js +6 -5
- package/examples/all-components.html +3 -0
- package/examples/asset-view.html +52 -6
- package/examples/dialogs.html +3 -3
- package/examples/editor.html +1 -1
- package/examples/index.html +1 -1
- package/package.json +4 -1
|
@@ -19,7 +19,7 @@ export declare class DocMaker {
|
|
|
19
19
|
video(src: string, caption?: string, controls?: boolean, autoplay?: boolean): void;
|
|
20
20
|
note(text: string, warning?: boolean, title?: string, icon?: string): void;
|
|
21
21
|
classCtor(name: string, params: any[], language?: string): void;
|
|
22
|
-
classMethod(name: string, desc: string, params: any[], ret?: string):
|
|
22
|
+
classMethod(name: string, desc: string, params: any[], ret?: string): HTMLElement | null;
|
|
23
23
|
iLink(text: string, href: string): string;
|
|
24
24
|
iPage(text: string, page: string): string | undefined;
|
|
25
25
|
iCode(text: string, codeClass?: string): string;
|
|
@@ -3,13 +3,17 @@ import { LX } from '../core/Namespace.js';
|
|
|
3
3
|
|
|
4
4
|
// DocMaker.ts @jxarco
|
|
5
5
|
if (!LX) {
|
|
6
|
-
throw (
|
|
6
|
+
throw ('Missing LX namespace!');
|
|
7
7
|
}
|
|
8
8
|
LX.extensions.push('DocMaker');
|
|
9
|
-
const CPP_KEY_WORDS = ['int', 'float', 'double', 'bool', 'char', 'wchar_t', 'const', 'static_cast', 'dynamic_cast',
|
|
9
|
+
const CPP_KEY_WORDS = ['int', 'float', 'double', 'bool', 'char', 'wchar_t', 'const', 'static_cast', 'dynamic_cast',
|
|
10
|
+
'new', 'delete', 'void', 'true', 'false', 'auto', 'struct', 'typedef', 'nullptr', 'NULL', 'unsigned', 'namespace',
|
|
11
|
+
'auto'];
|
|
10
12
|
const CLASS_WORDS = ['uint32_t', 'uint64_t', 'uint8_t'];
|
|
11
|
-
const STATEMENT_WORDS = ['for', 'if', 'else', 'return', 'continue', 'break', 'case', 'switch', 'while', 'import',
|
|
12
|
-
|
|
13
|
+
const STATEMENT_WORDS = ['for', 'if', 'else', 'return', 'continue', 'break', 'case', 'switch', 'while', 'import',
|
|
14
|
+
'from', 'await'];
|
|
15
|
+
const JS_KEY_WORDS = ['var', 'let', 'const', 'static', 'function', 'null', 'undefined', 'new', 'delete', 'true',
|
|
16
|
+
'false', 'NaN', 'this'];
|
|
13
17
|
const HTML_ATTRIBUTES = ['html', 'charset', 'rel', 'src', 'href', 'crossorigin', 'type', 'lang'];
|
|
14
18
|
const HTML_TAGS = ['html', 'DOCTYPE', 'head', 'meta', 'title', 'link', 'script', 'body', 'style'];
|
|
15
19
|
class DocMaker {
|
|
@@ -36,16 +40,16 @@ class DocMaker {
|
|
|
36
40
|
paragraph(string, sup = false, className) {
|
|
37
41
|
console.assert(string !== undefined);
|
|
38
42
|
let paragraph = document.createElement(sup ? 'sup' : 'p');
|
|
39
|
-
paragraph.className =
|
|
43
|
+
paragraph.className = 'leading-relaxed ' + (className ?? '');
|
|
40
44
|
paragraph.innerHTML = string;
|
|
41
45
|
this.root.appendChild(paragraph);
|
|
42
46
|
}
|
|
43
|
-
code(text, language =
|
|
47
|
+
code(text, language = 'js') {
|
|
44
48
|
console.assert(text !== undefined);
|
|
45
49
|
text.replaceAll('<', '<');
|
|
46
50
|
text.replaceAll('>', '>');
|
|
47
|
-
let highlight =
|
|
48
|
-
let content =
|
|
51
|
+
let highlight = '';
|
|
52
|
+
let content = '';
|
|
49
53
|
const getHTML = (h, c) => {
|
|
50
54
|
return `<span class="${h}">${c}</span>`;
|
|
51
55
|
};
|
|
@@ -61,7 +65,7 @@ class DocMaker {
|
|
|
61
65
|
}
|
|
62
66
|
let html = null;
|
|
63
67
|
const tagIndex = str.indexOf('@');
|
|
64
|
-
const skipTag =
|
|
68
|
+
const skipTag = str[tagIndex - 1] == '|';
|
|
65
69
|
// Highlight is specified
|
|
66
70
|
if (text[i + 1] == '[') {
|
|
67
71
|
highlight = str.substr(1, 3);
|
|
@@ -88,50 +92,50 @@ class DocMaker {
|
|
|
88
92
|
content = preContent + content.substring(0, content.substring(1).indexOf('@') + 1);
|
|
89
93
|
text = text.substr(0, i) + '@' + content + '@' + text.substr(i + content.length + 3);
|
|
90
94
|
}
|
|
91
|
-
if (language ==
|
|
92
|
-
highlight =
|
|
95
|
+
if (language == 'cpp' && CPP_KEY_WORDS.includes(content)) {
|
|
96
|
+
highlight = 'kwd';
|
|
93
97
|
}
|
|
94
|
-
else if (language ==
|
|
95
|
-
highlight =
|
|
98
|
+
else if (language == 'js' && JS_KEY_WORDS.includes(content)) {
|
|
99
|
+
highlight = 'kwd';
|
|
96
100
|
}
|
|
97
101
|
else if (CLASS_WORDS.includes(content)) {
|
|
98
|
-
highlight =
|
|
102
|
+
highlight = 'cls';
|
|
99
103
|
}
|
|
100
104
|
else if (STATEMENT_WORDS.includes(content)) {
|
|
101
|
-
highlight =
|
|
105
|
+
highlight = 'lit';
|
|
102
106
|
}
|
|
103
107
|
else if (HTML_TAGS.includes(content)) {
|
|
104
|
-
highlight =
|
|
108
|
+
highlight = 'tag';
|
|
105
109
|
}
|
|
106
110
|
else if (HTML_ATTRIBUTES.includes(content)) {
|
|
107
|
-
highlight =
|
|
111
|
+
highlight = 'atn';
|
|
108
112
|
}
|
|
109
|
-
else if ((content[0] == '"' && content[content.length - 1] == '"')
|
|
110
|
-
(content[0] == "'" && content[content.length - 1] == "'")
|
|
111
|
-
(content[0] ==
|
|
112
|
-
highlight =
|
|
113
|
+
else if ((content[0] == '"' && content[content.length - 1] == '"')
|
|
114
|
+
|| (content[0] == "'" && content[content.length - 1] == "'")
|
|
115
|
+
|| (content[0] == '`' && content[content.length - 1] == '`')) {
|
|
116
|
+
highlight = 'str';
|
|
113
117
|
}
|
|
114
118
|
else if (!Number.isNaN(parseFloat(content))) {
|
|
115
|
-
highlight =
|
|
119
|
+
highlight = 'dec';
|
|
116
120
|
}
|
|
117
121
|
else {
|
|
118
|
-
console.error(
|
|
122
|
+
console.error('ERROR[Code Parsing]: Unknown highlight type: ' + content);
|
|
119
123
|
return;
|
|
120
124
|
}
|
|
121
125
|
html = getHTML(highlight, content);
|
|
122
126
|
text = text.replace(`@${content}@`, html);
|
|
123
127
|
}
|
|
124
|
-
i +=
|
|
128
|
+
i += html.length - 1;
|
|
125
129
|
}
|
|
126
130
|
}
|
|
127
131
|
let container = document.createElement('div');
|
|
128
|
-
container.className =
|
|
132
|
+
container.className = 'code-container';
|
|
129
133
|
let pre = document.createElement('pre');
|
|
130
134
|
let code = document.createElement('code');
|
|
131
135
|
code.innerHTML = text;
|
|
132
136
|
let button = document.createElement('button');
|
|
133
|
-
button.title =
|
|
134
|
-
button.appendChild(LX.makeIcon(
|
|
137
|
+
button.title = 'Copy code sample';
|
|
138
|
+
button.appendChild(LX.makeIcon('Copy'));
|
|
135
139
|
button.addEventListener('click', this._copySnippet.bind(this, button));
|
|
136
140
|
container.appendChild(button);
|
|
137
141
|
pre.appendChild(code);
|
|
@@ -140,7 +144,7 @@ class DocMaker {
|
|
|
140
144
|
}
|
|
141
145
|
list(list, type, target) {
|
|
142
146
|
const validTypes = ['bullet', 'numbered'];
|
|
143
|
-
console.assert(list && list.length > 0 && validTypes.includes(type),
|
|
147
|
+
console.assert(list && list.length > 0 && validTypes.includes(type), 'Invalid list type or empty list' + type);
|
|
144
148
|
const typeString = type == 'bullet' ? 'ul' : 'ol';
|
|
145
149
|
let ul = document.createElement(typeString);
|
|
146
150
|
target = target ?? this.root;
|
|
@@ -151,7 +155,7 @@ class DocMaker {
|
|
|
151
155
|
return;
|
|
152
156
|
}
|
|
153
157
|
let li = document.createElement('li');
|
|
154
|
-
li.className =
|
|
158
|
+
li.className = 'leading-loose';
|
|
155
159
|
li.innerHTML = el;
|
|
156
160
|
ul.appendChild(li);
|
|
157
161
|
}
|
|
@@ -175,14 +179,18 @@ class DocMaker {
|
|
|
175
179
|
}
|
|
176
180
|
codeListItem(item, target) {
|
|
177
181
|
target = target ?? this._listQueued;
|
|
178
|
-
let split =
|
|
182
|
+
let split = item.constructor === Array;
|
|
179
183
|
if (split && item[0].constructor === Array) {
|
|
180
184
|
this.codeBulletList(item, target);
|
|
181
185
|
return;
|
|
182
186
|
}
|
|
183
187
|
let li = document.createElement('li');
|
|
184
|
-
li.className =
|
|
185
|
-
li.innerHTML = split
|
|
188
|
+
li.className = 'leading-loose';
|
|
189
|
+
li.innerHTML = split
|
|
190
|
+
? (item.length == 2
|
|
191
|
+
? this.iCode(item[0]) + ': ' + item[1]
|
|
192
|
+
: this.iCode(item[0] + " <span class='desc'>(" + item[1] + ')</span>') + ': ' + item[2])
|
|
193
|
+
: this.iCode(item);
|
|
186
194
|
target?.appendChild(li);
|
|
187
195
|
}
|
|
188
196
|
codeBulletList(list, target) {
|
|
@@ -198,11 +206,11 @@ class DocMaker {
|
|
|
198
206
|
this.root.appendChild(ul);
|
|
199
207
|
}
|
|
200
208
|
}
|
|
201
|
-
image(src, caption =
|
|
209
|
+
image(src, caption = '', parent) {
|
|
202
210
|
let img = document.createElement('img');
|
|
203
211
|
img.src = src;
|
|
204
212
|
img.alt = caption;
|
|
205
|
-
img.className =
|
|
213
|
+
img.className = 'my-1';
|
|
206
214
|
parent = parent ?? this.root;
|
|
207
215
|
parent.appendChild(img);
|
|
208
216
|
}
|
|
@@ -210,9 +218,9 @@ class DocMaker {
|
|
|
210
218
|
const mobile = navigator && /Android|iPhone/i.test(navigator.userAgent);
|
|
211
219
|
if (!mobile) {
|
|
212
220
|
let div = document.createElement('div');
|
|
213
|
-
div.style.width = width ??
|
|
214
|
-
div.style.height = height ??
|
|
215
|
-
div.className =
|
|
221
|
+
div.style.width = width ?? 'auto';
|
|
222
|
+
div.style.height = height ?? '256px';
|
|
223
|
+
div.className = 'flex flex-row justify-center';
|
|
216
224
|
for (let i = 0; i < sources.length; ++i) {
|
|
217
225
|
this.image(sources[i], captions[i], div);
|
|
218
226
|
}
|
|
@@ -224,7 +232,7 @@ class DocMaker {
|
|
|
224
232
|
}
|
|
225
233
|
}
|
|
226
234
|
}
|
|
227
|
-
video(src, caption =
|
|
235
|
+
video(src, caption = '', controls = true, autoplay = false) {
|
|
228
236
|
let video = document.createElement('video');
|
|
229
237
|
video.src = src;
|
|
230
238
|
video.controls = controls;
|
|
@@ -238,44 +246,48 @@ class DocMaker {
|
|
|
238
246
|
}
|
|
239
247
|
note(text, warning = false, title, icon) {
|
|
240
248
|
console.assert(text !== undefined);
|
|
241
|
-
const note = LX.makeContainer([],
|
|
249
|
+
const note = LX.makeContainer([], 'border rounded-lg overflow-hidden text-md fg-secondary my-6', '', this.root);
|
|
242
250
|
let header = document.createElement('div');
|
|
243
|
-
header.className =
|
|
244
|
-
header.appendChild(LX.makeIcon(icon ?? (warning ?
|
|
245
|
-
header.innerHTML +=
|
|
251
|
+
header.className = 'flex bg-tertiary font-semibold px-3 py-2 gap-2 fg-secondary';
|
|
252
|
+
header.appendChild(LX.makeIcon(icon ?? (warning ? 'MessageSquareWarning' : 'NotepadText')));
|
|
253
|
+
header.innerHTML += title ?? (warning ? 'Important' : 'Note');
|
|
246
254
|
note.appendChild(header);
|
|
247
255
|
// Node body
|
|
248
|
-
LX.makeContainer([],
|
|
256
|
+
LX.makeContainer([], 'leading-6 p-3', text, note);
|
|
249
257
|
}
|
|
250
|
-
classCtor(name, params, language =
|
|
251
|
-
let paramsHTML =
|
|
258
|
+
classCtor(name, params, language = 'js') {
|
|
259
|
+
let paramsHTML = '';
|
|
252
260
|
for (var p of params) {
|
|
253
261
|
const str1 = p[0]; // cpp: param js: name
|
|
254
262
|
const str2 = p[1]; // cpp: defaultValue js: type
|
|
255
|
-
if (language ==
|
|
256
|
-
paramsHTML += str1 + (str2 ? " = <span class='desc'>" + str2 +
|
|
263
|
+
if (language == 'cpp') {
|
|
264
|
+
paramsHTML += str1 + (str2 ? " = <span class='desc'>" + str2 + '</span>' : '')
|
|
265
|
+
+ (params.indexOf(p) != (params.length - 1) ? ', ' : '');
|
|
257
266
|
}
|
|
258
|
-
else if (language ==
|
|
259
|
-
paramsHTML += str1 + ": <span class='desc'>" + str2 +
|
|
267
|
+
else if (language == 'js') {
|
|
268
|
+
paramsHTML += str1 + ": <span class='desc'>" + str2 + '</span>'
|
|
269
|
+
+ (params.indexOf(p) != (params.length - 1) ? ', ' : '');
|
|
260
270
|
}
|
|
261
271
|
}
|
|
262
272
|
let pr = document.createElement('p');
|
|
263
|
-
pr.innerHTML = this.iCode("<span class='constructor'>" + name +
|
|
273
|
+
pr.innerHTML = this.iCode("<span class='constructor'>" + name + '(' + paramsHTML + ')' + '</span>');
|
|
264
274
|
this.root.appendChild(pr);
|
|
265
275
|
}
|
|
266
276
|
classMethod(name, desc, params, ret) {
|
|
267
277
|
this.startCodeBulletList();
|
|
268
|
-
let paramsHTML =
|
|
278
|
+
let paramsHTML = '';
|
|
269
279
|
for (var p of params) {
|
|
270
280
|
const name = p[0];
|
|
271
281
|
const type = p[1];
|
|
272
|
-
paramsHTML += name + ": <span class='desc'>" + type +
|
|
282
|
+
paramsHTML += name + ": <span class='desc'>" + type + '</span>'
|
|
283
|
+
+ (params.indexOf(p) != (params.length - 1) ? ', ' : '');
|
|
273
284
|
}
|
|
274
285
|
let li = document.createElement('li');
|
|
275
|
-
li.innerHTML = this.iCode("<span class='method'>" + name +
|
|
286
|
+
li.innerHTML = this.iCode("<span class='method'>" + name + ' (' + paramsHTML + ')' + (ret ? (': ' + ret) : '') + '</span>');
|
|
276
287
|
this._listQueued?.appendChild(li);
|
|
277
288
|
this.endCodeBulletList();
|
|
278
289
|
this.paragraph(desc);
|
|
290
|
+
return li.parentElement;
|
|
279
291
|
}
|
|
280
292
|
iLink(text, href) {
|
|
281
293
|
console.assert(text !== undefined && href !== undefined);
|
|
@@ -283,31 +295,31 @@ class DocMaker {
|
|
|
283
295
|
}
|
|
284
296
|
iPage(text, page) {
|
|
285
297
|
console.assert(text !== undefined && page !== undefined);
|
|
286
|
-
const startPage = page.replace(
|
|
298
|
+
const startPage = page.replace('.html', '');
|
|
287
299
|
const g = globalThis;
|
|
288
300
|
if (g.setPath && g.loadPage) {
|
|
289
301
|
const tabName = g.setPath(startPage);
|
|
290
302
|
return `<a onclick="loadPage('${page}', true, '${tabName}')">${text}</a>`;
|
|
291
303
|
}
|
|
292
304
|
else {
|
|
293
|
-
console.warn(
|
|
305
|
+
console.warn('[DocMaker] Create globalThis.setPath and globalThis.loadPage to use inline pages!');
|
|
294
306
|
}
|
|
295
307
|
}
|
|
296
308
|
iCode(text, codeClass) {
|
|
297
309
|
console.assert(text !== undefined);
|
|
298
|
-
return `<code class="inline ${codeClass ??
|
|
310
|
+
return `<code class="inline ${codeClass ?? ''}">${text}</code>`;
|
|
299
311
|
}
|
|
300
312
|
_copySnippet(b) {
|
|
301
|
-
b.innerHTML =
|
|
302
|
-
b.appendChild(LX.makeIcon(
|
|
313
|
+
b.innerHTML = '';
|
|
314
|
+
b.appendChild(LX.makeIcon('Check'));
|
|
303
315
|
b.classList.add('copied');
|
|
304
316
|
setTimeout(() => {
|
|
305
|
-
b.innerHTML =
|
|
306
|
-
b.appendChild(LX.makeIcon(
|
|
317
|
+
b.innerHTML = '';
|
|
318
|
+
b.appendChild(LX.makeIcon('Copy'));
|
|
307
319
|
b.classList.remove('copied');
|
|
308
320
|
}, 2000);
|
|
309
321
|
navigator.clipboard.writeText(b.dataset['snippet'] ?? b.parentElement.innerText);
|
|
310
|
-
console.log(
|
|
322
|
+
console.log('Copied!');
|
|
311
323
|
}
|
|
312
324
|
}
|
|
313
325
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocMaker.js","sources":["../../src/extensions/DocMaker.ts"],"sourcesContent":["// DocMaker.ts @jxarco\r\n\r\nimport { LX } from '../core/Namespace';\r\n\r\nif( !LX )\r\n{\r\n throw( \"Missing LX namespace!\" );\r\n}\r\n\r\nLX.extensions.push( 'DocMaker' );\r\n\r\nconst CPP_KEY_WORDS = ['int', 'float', 'double', 'bool', 'char', 'wchar_t', 'const', 'static_cast', 'dynamic_cast', 'new', 'delete', 'void', 'true', 'false', 'auto', 'struct', 'typedef', 'nullptr', 'NULL', 'unsigned', 'namespace', 'auto'];\r\nconst CLASS_WORDS = ['uint32_t', 'uint64_t', 'uint8_t'];\r\nconst STATEMENT_WORDS = ['for', 'if', 'else', 'return', 'continue', 'break', 'case', 'switch', 'while', 'import', 'from', 'await'];\r\n\r\nconst JS_KEY_WORDS = ['var', 'let', 'const', 'static', 'function', 'null', 'undefined', 'new', 'delete', 'true', 'false', 'NaN', 'this'];\r\nconst HTML_ATTRIBUTES = ['html', 'charset', 'rel', 'src', 'href', 'crossorigin', 'type', 'lang'];\r\nconst HTML_TAGS = ['html', 'DOCTYPE', 'head', 'meta', 'title', 'link', 'script', 'body', 'style'];\r\n\r\nexport class DocMaker\r\n{\r\n root: Element;\r\n _listQueued: Element | undefined = undefined;\r\n\r\n constructor( element?: Element )\r\n {\r\n this.root = element ?? document.body;\r\n }\r\n\r\n setDomTarget( element: Element )\r\n {\r\n this.root = element;\r\n }\r\n\r\n lineBreak( target?: Element )\r\n {\r\n target = target ?? this.root;\r\n target.appendChild( document.createElement('br') );\r\n }\r\n\r\n header( string: string, type: string, id: string )\r\n {\r\n console.assert( string !== undefined && type !== undefined );\r\n let header = document.createElement( type );\r\n header.innerHTML = string;\r\n if( id ) header.id = id;\r\n this.root.appendChild( header );\r\n }\r\n\r\n paragraph( string: string, sup: boolean = false, className?: string )\r\n {\r\n console.assert( string !== undefined );\r\n let paragraph = document.createElement(sup ? 'sup' : 'p');\r\n paragraph.className = \"leading-relaxed \" + ( className ?? \"\" );\r\n paragraph.innerHTML = string;\r\n this.root.appendChild( paragraph );\r\n }\r\n\r\n code( text: string, language: string = \"js\" )\r\n {\r\n console.assert( text !== undefined );\r\n\r\n text.replaceAll('<', '<');\r\n text.replaceAll('>', '>');\r\n\r\n let highlight = \"\";\r\n let content = \"\";\r\n\r\n const getHTML = ( h: string, c: string ) =>\r\n {\r\n return `<span class=\"${ h }\">${ c }</span>`;\r\n };\r\n\r\n for( let i = 0; i < text.length; ++i )\r\n {\r\n const char = text[ i ];\r\n const string = text.substr( i );\r\n\r\n const endLineIdx = string.indexOf( '\\n' ); \r\n const line = string.substring( 0, endLineIdx > -1 ? endLineIdx : undefined );\r\n \r\n if( char == '@' )\r\n {\r\n const str = line.substr( 1 );\r\n \r\n if ( !( str.indexOf( '@' ) > -1 ) && !( str.indexOf( '[' ) > -1 ) )\r\n {\r\n continue;\r\n }\r\n\r\n let html = null;\r\n\r\n const tagIndex = str.indexOf( '@' );\r\n const skipTag = ( str[ tagIndex - 1 ] == '|' );\r\n\r\n // Highlight is specified\r\n if( text[ i + 1 ] == '[' )\r\n {\r\n highlight = str.substr( 1, 3 );\r\n content = str.substring( 5, tagIndex );\r\n\r\n if( skipTag )\r\n {\r\n const newString = str.substring( 6 + content.length );\r\n const preContent = content;\r\n const postContent = newString.substring( 0, newString.indexOf( '@' ) );\r\n const finalContent = preContent.substring( 0, preContent.length - 1 ) + '@' + postContent;\r\n html = getHTML( highlight, finalContent );\r\n\r\n const ogContent = preContent + '@' + postContent;\r\n text = text.replace( `@[${ highlight }]${ ogContent }@`, html );\r\n }\r\n else\r\n {\r\n html = getHTML( highlight, content );\r\n text = text.replace( `@[${ highlight }]${ content }@`, html );\r\n }\r\n }\r\n else\r\n {\r\n content = str.substring( 0, tagIndex );\r\n if( skipTag )\r\n {\r\n const preContent = str.substring( 0, str.indexOf( '@' ) - 1 );\r\n content = str.substring( preContent.length + 1 );\r\n content = preContent + content.substring( 0, content.substring( 1 ).indexOf( '@' ) + 1 );\r\n text = text.substr( 0, i ) + '@' + content + '@' + text.substr( i + content.length + 3 );\r\n }\r\n\r\n if( language == \"cpp\" && CPP_KEY_WORDS.includes( content ) )\r\n {\r\n highlight = \"kwd\";\r\n }\r\n else if( language == \"js\" && JS_KEY_WORDS.includes( content ) )\r\n {\r\n highlight = \"kwd\";\r\n }\r\n else if( CLASS_WORDS.includes( content ) )\r\n {\r\n highlight = \"cls\";\r\n }\r\n else if( STATEMENT_WORDS.includes( content ) )\r\n {\r\n highlight = \"lit\"; \r\n }\r\n else if( HTML_TAGS.includes( content ) )\r\n {\r\n highlight = \"tag\"; \r\n }\r\n else if( HTML_ATTRIBUTES.includes( content ) )\r\n {\r\n highlight = \"atn\"; \r\n }\r\n else if( ( content[ 0 ] == '\"' && content[ content.length - 1 ] == '\"' ) ||\r\n ( content[ 0 ] == \"'\" && content[ content.length - 1 ] == \"'\" ) ||\r\n ( content[ 0 ] == \"`\" && content[ content.length - 1 ] == \"`\" ) )\r\n {\r\n highlight = \"str\";\r\n }\r\n else if( !Number.isNaN( parseFloat( content ) ) )\r\n {\r\n highlight = \"dec\"; \r\n }\r\n else\r\n {\r\n console.error( \"ERROR[Code Parsing]: Unknown highlight type: \" + content );\r\n return;\r\n }\r\n\r\n html = getHTML( highlight, content );\r\n text = text.replace( `@${ content }@`, html );\r\n }\r\n\r\n i += ( html.length - 1 );\r\n }\r\n }\r\n \r\n let container = document.createElement('div');\r\n container.className = \"code-container\";\r\n let pre = document.createElement('pre');\r\n let code = document.createElement('code');\r\n code.innerHTML = text;\r\n\r\n let button = document.createElement('button');\r\n button.title = \"Copy code sample\";\r\n button.appendChild(LX.makeIcon( \"Copy\" ));\r\n button.addEventListener('click', this._copySnippet.bind( this, button ));\r\n container.appendChild( button );\r\n\r\n pre.appendChild( code );\r\n container.appendChild( pre );\r\n this.root.appendChild( container );\r\n }\r\n\r\n list( list: any[], type: string, target?: Element )\r\n {\r\n const validTypes = [ 'bullet', 'numbered' ];\r\n console.assert( list && list.length > 0 && validTypes.includes(type), \"Invalid list type or empty list\" + type );\r\n const typeString = type == 'bullet' ? 'ul' : 'ol';\r\n let ul = document.createElement( typeString );\r\n target = target ?? this.root;\r\n target.appendChild( ul );\r\n for( var el of list )\r\n {\r\n if( el.constructor === Array ) {\r\n this.list( el, type, ul );\r\n return;\r\n }\r\n let li = document.createElement( 'li' );\r\n li.className = \"leading-loose\";\r\n li.innerHTML = el;\r\n ul.appendChild( li );\r\n }\r\n }\r\n\r\n bulletList( list: any[] )\r\n {\r\n this.list( list, 'bullet' );\r\n }\r\n\r\n numberedList( list: any[] )\r\n {\r\n this.list( list, 'numbered' );\r\n }\r\n\r\n startCodeBulletList()\r\n {\r\n let ul = document.createElement('ul');\r\n this._listQueued = ul;\r\n }\r\n\r\n endCodeBulletList()\r\n {\r\n if( this._listQueued === undefined) return;\r\n console.assert( this._listQueued !== undefined );\r\n this.root.appendChild( this._listQueued );\r\n this._listQueued = undefined;\r\n }\r\n\r\n codeListItem( item: any, target?: Element )\r\n {\r\n target = target ?? this._listQueued;\r\n let split = (item.constructor === Array);\r\n if( split && item[0].constructor === Array ) {\r\n this.codeBulletList( item, target );\r\n return;\r\n }\r\n let li = document.createElement('li');\r\n li.className = \"leading-loose\";\r\n li.innerHTML = split ? ( item.length == 2 ? this.iCode( item[0] ) + \": \" + item[1] : this.iCode( item[0] + \" <span class='desc'>(\" + item[1] + \")</span>\" ) + \": \" + item[2] ) : this.iCode( item );\r\n target?.appendChild( li );\r\n }\r\n\r\n codeBulletList( list: any[], target?: Element )\r\n {\r\n console.assert( list !== undefined && list.length > 0 );\r\n let ul = document.createElement('ul');\r\n for( var el of list )\r\n {\r\n this.codeListItem( el, ul );\r\n }\r\n\r\n if( target )\r\n {\r\n target.appendChild( ul );\r\n }\r\n else\r\n {\r\n this.root.appendChild( ul );\r\n }\r\n }\r\n\r\n image( src: string, caption: string = \"\", parent?: Element )\r\n {\r\n let img = document.createElement('img');\r\n img.src = src;\r\n img.alt = caption;\r\n img.className = \"my-1\";\r\n parent = parent ?? this.root;\r\n parent.appendChild( img );\r\n }\r\n\r\n images( sources: string[], captions: string[] = [], width?: string, height?: string )\r\n {\r\n const mobile = navigator && /Android|iPhone/i.test(navigator.userAgent);\r\n\r\n if( !mobile )\r\n {\r\n let div: HTMLElement = document.createElement('div');\r\n div.style.width = width ?? \"auto\";\r\n div.style.height = height ?? \"256px\";\r\n div.className = \"flex flex-row justify-center\";\r\n\r\n for( let i = 0; i < sources.length; ++i )\r\n {\r\n this.image( sources[ i ], captions[ i ], div );\r\n }\r\n\r\n this.root.appendChild( div );\r\n }\r\n else\r\n {\r\n for( let i = 0; i < sources.length; ++i )\r\n {\r\n this.image( sources[ i ], captions[ i ] );\r\n }\r\n }\r\n }\r\n\r\n video( src: string, caption: string = \"\", controls: boolean = true, autoplay: boolean = false )\r\n {\r\n let video: any = document.createElement( 'video' );\r\n video.src = src;\r\n video.controls = controls;\r\n video.autoplay = autoplay;\r\n if( autoplay )\r\n {\r\n video.muted = true;\r\n }\r\n video.loop = true;\r\n video.alt = caption;\r\n this.root.appendChild( video );\r\n }\r\n\r\n note( text: string, warning: boolean = false, title?: string, icon?: string )\r\n {\r\n console.assert( text !== undefined );\r\n\r\n const note = LX.makeContainer( [], \"border rounded-lg overflow-hidden text-md fg-secondary my-6\", \"\", this.root );\r\n\r\n let header = document.createElement( 'div' );\r\n header.className = \"flex bg-tertiary font-semibold px-3 py-2 gap-2 fg-secondary\";\r\n header.appendChild( LX.makeIcon( icon ?? ( warning ? \"MessageSquareWarning\" : \"NotepadText\" ) ) );\r\n header.innerHTML += ( title ?? ( warning ? \"Important\" : \"Note\" ) );\r\n note.appendChild( header );\r\n\r\n // Node body\r\n LX.makeContainer( [], \"leading-6 p-3\", text, note );\r\n }\r\n\r\n classCtor( name: string, params: any[], language: string = \"js\" )\r\n {\r\n let paramsHTML = \"\"; \r\n for( var p of params )\r\n {\r\n const str1 = p[ 0 ]; // cpp: param js: name\r\n const str2 = p[ 1 ]; // cpp: defaultValue js: type\r\n if( language == \"cpp\" )\r\n {\r\n paramsHTML += str1 + ( str2 ? \" = <span class='desc'>\" + str2 + \"</span>\" : \"\" ) + ( params.indexOf( p ) != (params.length - 1) ? ', ' : '' );\r\n }\r\n else if( language == \"js\" )\r\n {\r\n paramsHTML += str1 + \": <span class='desc'>\" + str2 + \"</span>\" + ( params.indexOf( p ) != (params.length - 1) ? ', ' : '' );\r\n }\r\n }\r\n let pr = document.createElement('p');\r\n pr.innerHTML = this.iCode( \"<span class='constructor'>\" + name + \"(\" + paramsHTML + \")\" + \"</span>\" );\r\n this.root.appendChild( pr );\r\n }\r\n\r\n classMethod( name: string, desc: string, params: any[], ret?: string )\r\n {\r\n this.startCodeBulletList();\r\n\r\n let paramsHTML = \"\"; \r\n for( var p of params )\r\n {\r\n const name = p[ 0 ];\r\n const type = p[ 1 ];\r\n paramsHTML += name + \": <span class='desc'>\" + type + \"</span>\" + ( params.indexOf( p ) != (params.length - 1) ? ', ' : '' );\r\n }\r\n let li = document.createElement('li');\r\n li.innerHTML = this.iCode( \"<span class='method'>\" + name + \" (\" + paramsHTML + \")\" + ( ret ? (\": \" + ret) : \"\" ) + \"</span>\" );\r\n this._listQueued?.appendChild( li );\r\n \r\n this.endCodeBulletList();\r\n \r\n this.paragraph( desc );\r\n }\r\n\r\n iLink( text: string, href: string )\r\n {\r\n console.assert( text !== undefined && href !== undefined );\r\n return `<a href=\"${ href }\">${ text }</a>`;\r\n }\r\n\r\n iPage( text: string, page: string )\r\n {\r\n console.assert( text !== undefined && page !== undefined );\r\n const startPage = page.replace( \".html\", \"\" );\r\n const g = globalThis as any;\r\n if( g.setPath && g.loadPage )\r\n {\r\n const tabName = g.setPath( startPage );\r\n return `<a onclick=\"loadPage('${ page }', true, '${ tabName }')\">${ text }</a>`;\r\n }\r\n else\r\n {\r\n console.warn( \"[DocMaker] Create globalThis.setPath and globalThis.loadPage to use inline pages!\" )\r\n }\r\n }\r\n\r\n iCode( text: string, codeClass?: string )\r\n {\r\n console.assert( text !== undefined );\r\n return `<code class=\"inline ${ codeClass ?? \"\" }\">${ text }</code>`;\r\n }\r\n\r\n _copySnippet( b: any )\r\n {\r\n b.innerHTML = \"\";\r\n b.appendChild(LX.makeIcon( \"Check\" ));\r\n b.classList.add('copied');\r\n\r\n setTimeout( () => {\r\n b.innerHTML = \"\";\r\n b.appendChild(LX.makeIcon( \"Copy\" ));\r\n b.classList.remove('copied');\r\n }, 2000 );\r\n\r\n navigator.clipboard.writeText( b.dataset['snippet'] ?? b.parentElement.innerText );\r\n console.log(\"Copied!\");\r\n }\r\n}"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DocMaker.js","sources":["../../src/extensions/DocMaker.ts"],"sourcesContent":["// DocMaker.ts @jxarco\r\n\r\nimport { LX } from '../core/Namespace';\r\n\r\nif ( !LX )\r\n{\r\n throw ( 'Missing LX namespace!' );\r\n}\r\n\r\nLX.extensions.push( 'DocMaker' );\r\n\r\nconst CPP_KEY_WORDS = [ 'int', 'float', 'double', 'bool', 'char', 'wchar_t', 'const', 'static_cast', 'dynamic_cast',\r\n 'new', 'delete', 'void', 'true', 'false', 'auto', 'struct', 'typedef', 'nullptr', 'NULL', 'unsigned', 'namespace',\r\n 'auto' ];\r\nconst CLASS_WORDS = [ 'uint32_t', 'uint64_t', 'uint8_t' ];\r\nconst STATEMENT_WORDS = [ 'for', 'if', 'else', 'return', 'continue', 'break', 'case', 'switch', 'while', 'import',\r\n 'from', 'await' ];\r\n\r\nconst JS_KEY_WORDS = [ 'var', 'let', 'const', 'static', 'function', 'null', 'undefined', 'new', 'delete', 'true',\r\n 'false', 'NaN', 'this' ];\r\nconst HTML_ATTRIBUTES = [ 'html', 'charset', 'rel', 'src', 'href', 'crossorigin', 'type', 'lang' ];\r\nconst HTML_TAGS = [ 'html', 'DOCTYPE', 'head', 'meta', 'title', 'link', 'script', 'body', 'style' ];\r\n\r\nexport class DocMaker\r\n{\r\n root: Element;\r\n _listQueued: Element | undefined = undefined;\r\n\r\n constructor( element?: Element )\r\n {\r\n this.root = element ?? document.body;\r\n }\r\n\r\n setDomTarget( element: Element )\r\n {\r\n this.root = element;\r\n }\r\n\r\n lineBreak( target?: Element )\r\n {\r\n target = target ?? this.root;\r\n target.appendChild( document.createElement( 'br' ) );\r\n }\r\n\r\n header( string: string, type: string, id: string )\r\n {\r\n console.assert( string !== undefined && type !== undefined );\r\n let header = document.createElement( type );\r\n header.innerHTML = string;\r\n if ( id ) header.id = id;\r\n this.root.appendChild( header );\r\n }\r\n\r\n paragraph( string: string, sup: boolean = false, className?: string )\r\n {\r\n console.assert( string !== undefined );\r\n let paragraph = document.createElement( sup ? 'sup' : 'p' );\r\n paragraph.className = 'leading-relaxed ' + ( className ?? '' );\r\n paragraph.innerHTML = string;\r\n this.root.appendChild( paragraph );\r\n }\r\n\r\n code( text: string, language: string = 'js' )\r\n {\r\n console.assert( text !== undefined );\r\n\r\n text.replaceAll( '<', '<' );\r\n text.replaceAll( '>', '>' );\r\n\r\n let highlight = '';\r\n let content = '';\r\n\r\n const getHTML = ( h: string, c: string ) => {\r\n return `<span class=\"${h}\">${c}</span>`;\r\n };\r\n\r\n for ( let i = 0; i < text.length; ++i )\r\n {\r\n const char = text[i];\r\n const string = text.substr( i );\r\n\r\n const endLineIdx = string.indexOf( '\\n' );\r\n const line = string.substring( 0, endLineIdx > -1 ? endLineIdx : undefined );\r\n\r\n if ( char == '@' )\r\n {\r\n const str = line.substr( 1 );\r\n\r\n if ( !( str.indexOf( '@' ) > -1 ) && !( str.indexOf( '[' ) > -1 ) )\r\n {\r\n continue;\r\n }\r\n\r\n let html = null;\r\n\r\n const tagIndex = str.indexOf( '@' );\r\n const skipTag = str[tagIndex - 1] == '|';\r\n\r\n // Highlight is specified\r\n if ( text[i + 1] == '[' )\r\n {\r\n highlight = str.substr( 1, 3 );\r\n content = str.substring( 5, tagIndex );\r\n\r\n if ( skipTag )\r\n {\r\n const newString = str.substring( 6 + content.length );\r\n const preContent = content;\r\n const postContent = newString.substring( 0, newString.indexOf( '@' ) );\r\n const finalContent = preContent.substring( 0, preContent.length - 1 ) + '@' + postContent;\r\n html = getHTML( highlight, finalContent );\r\n\r\n const ogContent = preContent + '@' + postContent;\r\n text = text.replace( `@[${highlight}]${ogContent}@`, html );\r\n }\r\n else\r\n {\r\n html = getHTML( highlight, content );\r\n text = text.replace( `@[${highlight}]${content}@`, html );\r\n }\r\n }\r\n else\r\n {\r\n content = str.substring( 0, tagIndex );\r\n if ( skipTag )\r\n {\r\n const preContent = str.substring( 0, str.indexOf( '@' ) - 1 );\r\n content = str.substring( preContent.length + 1 );\r\n content = preContent + content.substring( 0, content.substring( 1 ).indexOf( '@' ) + 1 );\r\n text = text.substr( 0, i ) + '@' + content + '@' + text.substr( i + content.length + 3 );\r\n }\r\n\r\n if ( language == 'cpp' && CPP_KEY_WORDS.includes( content ) )\r\n {\r\n highlight = 'kwd';\r\n }\r\n else if ( language == 'js' && JS_KEY_WORDS.includes( content ) )\r\n {\r\n highlight = 'kwd';\r\n }\r\n else if ( CLASS_WORDS.includes( content ) )\r\n {\r\n highlight = 'cls';\r\n }\r\n else if ( STATEMENT_WORDS.includes( content ) )\r\n {\r\n highlight = 'lit';\r\n }\r\n else if ( HTML_TAGS.includes( content ) )\r\n {\r\n highlight = 'tag';\r\n }\r\n else if ( HTML_ATTRIBUTES.includes( content ) )\r\n {\r\n highlight = 'atn';\r\n }\r\n else if ( ( content[0] == '\"' && content[content.length - 1] == '\"' )\r\n || ( content[0] == \"'\" && content[content.length - 1] == \"'\" )\r\n || ( content[0] == '`' && content[content.length - 1] == '`' ) )\r\n {\r\n highlight = 'str';\r\n }\r\n else if ( !Number.isNaN( parseFloat( content ) ) )\r\n {\r\n highlight = 'dec';\r\n }\r\n else\r\n {\r\n console.error( 'ERROR[Code Parsing]: Unknown highlight type: ' + content );\r\n return;\r\n }\r\n\r\n html = getHTML( highlight, content );\r\n text = text.replace( `@${content}@`, html );\r\n }\r\n\r\n i += html.length - 1;\r\n }\r\n }\r\n\r\n let container = document.createElement( 'div' );\r\n container.className = 'code-container';\r\n let pre = document.createElement( 'pre' );\r\n let code = document.createElement( 'code' );\r\n code.innerHTML = text;\r\n\r\n let button = document.createElement( 'button' );\r\n button.title = 'Copy code sample';\r\n button.appendChild( LX.makeIcon( 'Copy' ) );\r\n button.addEventListener( 'click', this._copySnippet.bind( this, button ) );\r\n container.appendChild( button );\r\n\r\n pre.appendChild( code );\r\n container.appendChild( pre );\r\n this.root.appendChild( container );\r\n }\r\n\r\n list( list: any[], type: string, target?: Element )\r\n {\r\n const validTypes = [ 'bullet', 'numbered' ];\r\n console.assert( list && list.length > 0 && validTypes.includes( type ),\r\n 'Invalid list type or empty list' + type );\r\n const typeString = type == 'bullet' ? 'ul' : 'ol';\r\n let ul = document.createElement( typeString );\r\n target = target ?? this.root;\r\n target.appendChild( ul );\r\n for ( var el of list )\r\n {\r\n if ( el.constructor === Array )\r\n {\r\n this.list( el, type, ul );\r\n return;\r\n }\r\n let li = document.createElement( 'li' );\r\n li.className = 'leading-loose';\r\n li.innerHTML = el;\r\n ul.appendChild( li );\r\n }\r\n }\r\n\r\n bulletList( list: any[] )\r\n {\r\n this.list( list, 'bullet' );\r\n }\r\n\r\n numberedList( list: any[] )\r\n {\r\n this.list( list, 'numbered' );\r\n }\r\n\r\n startCodeBulletList()\r\n {\r\n let ul = document.createElement( 'ul' );\r\n this._listQueued = ul;\r\n }\r\n\r\n endCodeBulletList()\r\n {\r\n if ( this._listQueued === undefined ) return;\r\n console.assert( this._listQueued !== undefined );\r\n this.root.appendChild( this._listQueued );\r\n this._listQueued = undefined;\r\n }\r\n\r\n codeListItem( item: any, target?: Element )\r\n {\r\n target = target ?? this._listQueued;\r\n let split = item.constructor === Array;\r\n if ( split && item[0].constructor === Array )\r\n {\r\n this.codeBulletList( item, target );\r\n return;\r\n }\r\n let li = document.createElement( 'li' );\r\n li.className = 'leading-loose';\r\n li.innerHTML = split\r\n ? ( item.length == 2\r\n ? this.iCode( item[0] ) + ': ' + item[1]\r\n : this.iCode( item[0] + \" <span class='desc'>(\" + item[1] + ')</span>' ) + ': ' + item[2] )\r\n : this.iCode( item );\r\n target?.appendChild( li );\r\n }\r\n\r\n codeBulletList( list: any[], target?: Element )\r\n {\r\n console.assert( list !== undefined && list.length > 0 );\r\n let ul = document.createElement( 'ul' );\r\n for ( var el of list )\r\n {\r\n this.codeListItem( el, ul );\r\n }\r\n\r\n if ( target )\r\n {\r\n target.appendChild( ul );\r\n }\r\n else\r\n {\r\n this.root.appendChild( ul );\r\n }\r\n }\r\n\r\n image( src: string, caption: string = '', parent?: Element )\r\n {\r\n let img = document.createElement( 'img' );\r\n img.src = src;\r\n img.alt = caption;\r\n img.className = 'my-1';\r\n parent = parent ?? this.root;\r\n parent.appendChild( img );\r\n }\r\n\r\n images( sources: string[], captions: string[] = [], width?: string, height?: string )\r\n {\r\n const mobile = navigator && /Android|iPhone/i.test( navigator.userAgent );\r\n\r\n if ( !mobile )\r\n {\r\n let div: HTMLElement = document.createElement( 'div' );\r\n div.style.width = width ?? 'auto';\r\n div.style.height = height ?? '256px';\r\n div.className = 'flex flex-row justify-center';\r\n\r\n for ( let i = 0; i < sources.length; ++i )\r\n {\r\n this.image( sources[i], captions[i], div );\r\n }\r\n\r\n this.root.appendChild( div );\r\n }\r\n else\r\n {\r\n for ( let i = 0; i < sources.length; ++i )\r\n {\r\n this.image( sources[i], captions[i] );\r\n }\r\n }\r\n }\r\n\r\n video( src: string, caption: string = '', controls: boolean = true, autoplay: boolean = false )\r\n {\r\n let video: any = document.createElement( 'video' );\r\n video.src = src;\r\n video.controls = controls;\r\n video.autoplay = autoplay;\r\n if ( autoplay )\r\n {\r\n video.muted = true;\r\n }\r\n video.loop = true;\r\n video.alt = caption;\r\n this.root.appendChild( video );\r\n }\r\n\r\n note( text: string, warning: boolean = false, title?: string, icon?: string )\r\n {\r\n console.assert( text !== undefined );\r\n\r\n const note = LX.makeContainer( [], 'border rounded-lg overflow-hidden text-md fg-secondary my-6', '',\r\n this.root );\r\n\r\n let header = document.createElement( 'div' );\r\n header.className = 'flex bg-tertiary font-semibold px-3 py-2 gap-2 fg-secondary';\r\n header.appendChild( LX.makeIcon( icon ?? ( warning ? 'MessageSquareWarning' : 'NotepadText' ) ) );\r\n header.innerHTML += title ?? ( warning ? 'Important' : 'Note' );\r\n note.appendChild( header );\r\n\r\n // Node body\r\n LX.makeContainer( [], 'leading-6 p-3', text, note );\r\n }\r\n\r\n classCtor( name: string, params: any[], language: string = 'js' )\r\n {\r\n let paramsHTML = '';\r\n for ( var p of params )\r\n {\r\n const str1 = p[0]; // cpp: param js: name\r\n const str2 = p[1]; // cpp: defaultValue js: type\r\n if ( language == 'cpp' )\r\n {\r\n paramsHTML += str1 + ( str2 ? \" = <span class='desc'>\" + str2 + '</span>' : '' )\r\n + ( params.indexOf( p ) != ( params.length - 1 ) ? ', ' : '' );\r\n }\r\n else if ( language == 'js' )\r\n {\r\n paramsHTML += str1 + \": <span class='desc'>\" + str2 + '</span>'\r\n + ( params.indexOf( p ) != ( params.length - 1 ) ? ', ' : '' );\r\n }\r\n }\r\n let pr = document.createElement( 'p' );\r\n pr.innerHTML = this.iCode( \"<span class='constructor'>\" + name + '(' + paramsHTML + ')' + '</span>' );\r\n this.root.appendChild( pr );\r\n }\r\n\r\n classMethod( name: string, desc: string, params: any[], ret?: string ): HTMLElement | null\r\n {\r\n this.startCodeBulletList();\r\n\r\n let paramsHTML = '';\r\n for ( var p of params )\r\n {\r\n const name = p[0];\r\n const type = p[1];\r\n paramsHTML += name + \": <span class='desc'>\" + type + '</span>'\r\n + ( params.indexOf( p ) != ( params.length - 1 ) ? ', ' : '' );\r\n }\r\n let li = document.createElement( 'li' );\r\n li.innerHTML = this.iCode(\r\n \"<span class='method'>\" + name + ' (' + paramsHTML + ')' + ( ret ? ( ': ' + ret ) : '' ) + '</span>'\r\n );\r\n this._listQueued?.appendChild( li );\r\n\r\n this.endCodeBulletList();\r\n\r\n this.paragraph( desc );\r\n\r\n return li.parentElement;\r\n }\r\n\r\n iLink( text: string, href: string )\r\n {\r\n console.assert( text !== undefined && href !== undefined );\r\n return `<a href=\"${href}\">${text}</a>`;\r\n }\r\n\r\n iPage( text: string, page: string )\r\n {\r\n console.assert( text !== undefined && page !== undefined );\r\n const startPage = page.replace( '.html', '' );\r\n const g = globalThis as any;\r\n if ( g.setPath && g.loadPage )\r\n {\r\n const tabName = g.setPath( startPage );\r\n return `<a onclick=\"loadPage('${page}', true, '${tabName}')\">${text}</a>`;\r\n }\r\n else\r\n {\r\n console.warn( '[DocMaker] Create globalThis.setPath and globalThis.loadPage to use inline pages!' );\r\n }\r\n }\r\n\r\n iCode( text: string, codeClass?: string )\r\n {\r\n console.assert( text !== undefined );\r\n return `<code class=\"inline ${codeClass ?? ''}\">${text}</code>`;\r\n }\r\n\r\n _copySnippet( b: any )\r\n {\r\n b.innerHTML = '';\r\n b.appendChild( LX.makeIcon( 'Check' ) );\r\n b.classList.add( 'copied' );\r\n\r\n setTimeout( () => {\r\n b.innerHTML = '';\r\n b.appendChild( LX.makeIcon( 'Copy' ) );\r\n b.classList.remove( 'copied' );\r\n }, 2000 );\r\n\r\n navigator.clipboard.writeText( b.dataset['snippet'] ?? b.parentElement.innerText );\r\n console.log( 'Copied!' );\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
|