lexgui 0.7.15 → 8.1.0
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/LICENSE +201 -21
- package/README.md +14 -5
- package/build/components/AlertDialog.d.ts +7 -0
- package/build/components/ArrayInput.d.ts +9 -0
- package/build/components/BaseComponent.d.ts +73 -0
- package/build/components/Button.d.ts +14 -0
- package/build/components/Calendar.d.ts +41 -0
- package/build/components/CalendarRange.d.ts +16 -0
- package/build/components/CanvasCurve.d.ts +10 -0
- package/build/components/CanvasDial.d.ts +11 -0
- package/build/components/CanvasMap2D.d.ts +61 -0
- package/build/components/Card.d.ts +8 -0
- package/build/components/Checkbox.d.ts +8 -0
- package/build/components/Color.d.ts +20 -0
- package/build/components/ColorInput.d.ts +13 -0
- package/build/components/ColorPicker.d.ts +29 -0
- package/build/components/ComboButtons.d.ts +8 -0
- package/build/components/ContextMenu.d.ts +16 -0
- package/build/components/Counter.d.ts +9 -0
- package/build/components/Curve.d.ts +10 -0
- package/build/components/DatePicker.d.ts +13 -0
- package/build/components/Dial.d.ts +10 -0
- package/build/components/Dialog.d.ts +20 -0
- package/build/components/DropdownMenu.d.ts +32 -0
- package/build/components/FileInput.d.ts +8 -0
- package/build/components/Footer.d.ts +14 -0
- package/build/components/Form.d.ts +8 -0
- package/build/components/Layers.d.ts +9 -0
- package/build/components/List.d.ts +9 -0
- package/build/components/Map2D.d.ts +12 -0
- package/build/components/Menubar.d.ts +59 -0
- package/build/components/NodeTree.d.ts +26 -0
- package/build/components/NumberInput.d.ts +9 -0
- package/build/components/OTPInput.d.ts +8 -0
- package/build/components/Pad.d.ts +8 -0
- package/build/components/Pagination.d.ts +26 -0
- package/build/components/PocketDialog.d.ts +11 -0
- package/build/components/Popover.d.ts +20 -0
- package/build/components/Progress.d.ts +8 -0
- package/build/components/RadioGroup.d.ts +8 -0
- package/build/components/RangeInput.d.ts +11 -0
- package/build/components/Rate.d.ts +8 -0
- package/build/components/Select.d.ts +10 -0
- package/build/components/Sheet.d.ts +10 -0
- package/build/components/Sidebar.d.ts +84 -0
- package/build/components/SizeInput.d.ts +8 -0
- package/build/components/Skeleton.d.ts +5 -0
- package/build/components/Spinner.d.ts +9 -0
- package/build/components/TabSections.d.ts +11 -0
- package/build/components/Table.d.ts +34 -0
- package/build/components/Tabs.d.ts +20 -0
- package/build/components/Tags.d.ts +9 -0
- package/build/components/TextArea.d.ts +8 -0
- package/build/components/TextInput.d.ts +11 -0
- package/build/components/Title.d.ts +8 -0
- package/build/components/Toggle.d.ts +8 -0
- package/build/components/Tour.d.ts +36 -0
- package/build/components/Vector.d.ts +9 -0
- package/build/core/Area.d.ts +143 -0
- package/build/core/Branch.d.ts +19 -0
- package/build/core/Core.d.ts +1 -0
- package/build/core/Event.d.ts +26 -0
- package/build/core/Icons.d.ts +4 -0
- package/build/core/Namespace.d.ts +2 -0
- package/build/core/Namespace.js +34 -0
- package/build/core/Namespace.js.map +1 -0
- package/build/core/Panel.d.ts +538 -0
- package/build/core/Utils.d.ts +1 -0
- package/build/core/Vec2.d.ts +21 -0
- package/build/extensions/AssetView.d.ts +136 -0
- package/build/extensions/AssetView.js +1367 -0
- package/build/extensions/AssetView.js.map +1 -0
- package/build/extensions/Audio.d.ts +9 -0
- package/build/extensions/Audio.js +163 -0
- package/build/extensions/Audio.js.map +1 -0
- package/build/extensions/CodeEditor.d.ts +350 -0
- package/build/extensions/CodeEditor.js +5022 -0
- package/build/extensions/CodeEditor.js.map +1 -0
- package/build/extensions/DocMaker.d.ts +27 -0
- package/build/extensions/DocMaker.js +327 -0
- package/build/extensions/DocMaker.js.map +1 -0
- package/build/extensions/GraphEditor.d.ts +276 -0
- package/build/extensions/GraphEditor.js +2770 -0
- package/build/extensions/GraphEditor.js.map +1 -0
- package/build/extensions/ImUi.d.ts +46 -0
- package/build/extensions/ImUi.js +227 -0
- package/build/extensions/ImUi.js.map +1 -0
- package/build/extensions/Timeline.d.ts +670 -0
- package/build/extensions/Timeline.js +3955 -0
- package/build/extensions/Timeline.js.map +1 -0
- package/build/extensions/VideoEditor.d.ts +128 -0
- package/build/extensions/VideoEditor.js +898 -0
- package/build/extensions/VideoEditor.js.map +1 -0
- package/build/extensions/index.d.ts +8 -0
- package/build/extensions/index.js +10 -0
- package/build/extensions/index.js.map +1 -0
- package/build/index.all.d.ts +2 -0
- package/build/index.css.d.ts +4 -0
- package/build/index.d.ts +56 -0
- package/build/lexgui.all.js +28498 -0
- package/build/lexgui.all.js.map +1 -0
- package/build/lexgui.all.min.js +1 -0
- package/build/lexgui.all.module.js +28422 -0
- package/build/lexgui.all.module.js.map +1 -0
- package/build/lexgui.all.module.min.js +1 -0
- package/build/lexgui.css +939 -346
- package/build/lexgui.js +13406 -17286
- package/build/lexgui.js.map +1 -0
- package/build/lexgui.min.css +3 -10
- package/build/lexgui.min.js +1 -1
- package/build/lexgui.module.js +12762 -16698
- package/build/lexgui.module.js.map +1 -0
- package/build/lexgui.module.min.js +1 -1
- package/changelog.md +170 -74
- package/demo.js +162 -48
- package/examples/all-components.html +45 -14
- package/examples/asset-view.html +110 -47
- package/examples/code-editor.html +5 -5
- package/examples/dialogs.html +3 -3
- package/examples/editor.html +27 -13
- package/examples/index.html +19 -14
- package/examples/node-graph.html +2 -2
- package/examples/previews/video-editor.png +0 -0
- package/examples/timeline.html +1 -1
- package/examples/video-editor.html +2 -2
- package/package.json +25 -9
- package/build/extensions/audio.js +0 -212
- package/build/extensions/codeeditor.js +0 -6319
- package/build/extensions/docmaker.js +0 -432
- package/build/extensions/imui.js +0 -325
- package/build/extensions/nodegraph.js +0 -3696
- package/build/extensions/timeline.js +0 -4636
- package/build/extensions/videoeditor.js +0 -953
- package/build/lexgui-docs.css +0 -352
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare class DocMaker {
|
|
2
|
+
root: Element;
|
|
3
|
+
_listQueued: Element | undefined;
|
|
4
|
+
constructor(element?: Element);
|
|
5
|
+
setDomTarget(element: Element): void;
|
|
6
|
+
lineBreak(target?: Element): void;
|
|
7
|
+
header(string: string, type: string, id: string): void;
|
|
8
|
+
paragraph(string: string, sup?: boolean, className?: string): void;
|
|
9
|
+
code(text: string, language?: string): void;
|
|
10
|
+
list(list: any[], type: string, target?: Element): void;
|
|
11
|
+
bulletList(list: any[]): void;
|
|
12
|
+
numberedList(list: any[]): void;
|
|
13
|
+
startCodeBulletList(): void;
|
|
14
|
+
endCodeBulletList(): void;
|
|
15
|
+
codeListItem(item: any, target?: Element): void;
|
|
16
|
+
codeBulletList(list: any[], target?: Element): void;
|
|
17
|
+
image(src: string, caption?: string, parent?: Element): void;
|
|
18
|
+
images(sources: string[], captions?: string[], width?: string, height?: string): void;
|
|
19
|
+
video(src: string, caption?: string, controls?: boolean, autoplay?: boolean): void;
|
|
20
|
+
note(text: string, warning?: boolean, title?: string, icon?: string): void;
|
|
21
|
+
classCtor(name: string, params: any[], language?: string): void;
|
|
22
|
+
classMethod(name: string, desc: string, params: any[], ret?: string): HTMLElement | null;
|
|
23
|
+
iLink(text: string, href: string): string;
|
|
24
|
+
iPage(text: string, page: string): string | undefined;
|
|
25
|
+
iCode(text: string, codeClass?: string): string;
|
|
26
|
+
_copySnippet(b: any): void;
|
|
27
|
+
}
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
// This is a generated file. Do not edit.
|
|
2
|
+
import { LX } from '../core/Namespace.js';
|
|
3
|
+
|
|
4
|
+
// DocMaker.ts @jxarco
|
|
5
|
+
if (!LX) {
|
|
6
|
+
throw ('Missing LX namespace!');
|
|
7
|
+
}
|
|
8
|
+
LX.extensions.push('DocMaker');
|
|
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'];
|
|
12
|
+
const CLASS_WORDS = ['uint32_t', 'uint64_t', 'uint8_t'];
|
|
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'];
|
|
17
|
+
const HTML_ATTRIBUTES = ['html', 'charset', 'rel', 'src', 'href', 'crossorigin', 'type', 'lang'];
|
|
18
|
+
const HTML_TAGS = ['html', 'DOCTYPE', 'head', 'meta', 'title', 'link', 'script', 'body', 'style'];
|
|
19
|
+
class DocMaker {
|
|
20
|
+
root;
|
|
21
|
+
_listQueued = undefined;
|
|
22
|
+
constructor(element) {
|
|
23
|
+
this.root = element ?? document.body;
|
|
24
|
+
}
|
|
25
|
+
setDomTarget(element) {
|
|
26
|
+
this.root = element;
|
|
27
|
+
}
|
|
28
|
+
lineBreak(target) {
|
|
29
|
+
target = target ?? this.root;
|
|
30
|
+
target.appendChild(document.createElement('br'));
|
|
31
|
+
}
|
|
32
|
+
header(string, type, id) {
|
|
33
|
+
console.assert(string !== undefined && type !== undefined);
|
|
34
|
+
let header = document.createElement(type);
|
|
35
|
+
header.innerHTML = string;
|
|
36
|
+
if (id)
|
|
37
|
+
header.id = id;
|
|
38
|
+
this.root.appendChild(header);
|
|
39
|
+
}
|
|
40
|
+
paragraph(string, sup = false, className) {
|
|
41
|
+
console.assert(string !== undefined);
|
|
42
|
+
let paragraph = document.createElement(sup ? 'sup' : 'p');
|
|
43
|
+
paragraph.className = 'leading-relaxed ' + (className ?? '');
|
|
44
|
+
paragraph.innerHTML = string;
|
|
45
|
+
this.root.appendChild(paragraph);
|
|
46
|
+
}
|
|
47
|
+
code(text, language = 'js') {
|
|
48
|
+
console.assert(text !== undefined);
|
|
49
|
+
text.replaceAll('<', '<');
|
|
50
|
+
text.replaceAll('>', '>');
|
|
51
|
+
let highlight = '';
|
|
52
|
+
let content = '';
|
|
53
|
+
const getHTML = (h, c) => {
|
|
54
|
+
return `<span class="${h}">${c}</span>`;
|
|
55
|
+
};
|
|
56
|
+
for (let i = 0; i < text.length; ++i) {
|
|
57
|
+
const char = text[i];
|
|
58
|
+
const string = text.substr(i);
|
|
59
|
+
const endLineIdx = string.indexOf('\n');
|
|
60
|
+
const line = string.substring(0, endLineIdx > -1 ? endLineIdx : undefined);
|
|
61
|
+
if (char == '@') {
|
|
62
|
+
const str = line.substr(1);
|
|
63
|
+
if (!(str.indexOf('@') > -1) && !(str.indexOf('[') > -1)) {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
let html = null;
|
|
67
|
+
const tagIndex = str.indexOf('@');
|
|
68
|
+
const skipTag = str[tagIndex - 1] == '|';
|
|
69
|
+
// Highlight is specified
|
|
70
|
+
if (text[i + 1] == '[') {
|
|
71
|
+
highlight = str.substr(1, 3);
|
|
72
|
+
content = str.substring(5, tagIndex);
|
|
73
|
+
if (skipTag) {
|
|
74
|
+
const newString = str.substring(6 + content.length);
|
|
75
|
+
const preContent = content;
|
|
76
|
+
const postContent = newString.substring(0, newString.indexOf('@'));
|
|
77
|
+
const finalContent = preContent.substring(0, preContent.length - 1) + '@' + postContent;
|
|
78
|
+
html = getHTML(highlight, finalContent);
|
|
79
|
+
const ogContent = preContent + '@' + postContent;
|
|
80
|
+
text = text.replace(`@[${highlight}]${ogContent}@`, html);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
html = getHTML(highlight, content);
|
|
84
|
+
text = text.replace(`@[${highlight}]${content}@`, html);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
content = str.substring(0, tagIndex);
|
|
89
|
+
if (skipTag) {
|
|
90
|
+
const preContent = str.substring(0, str.indexOf('@') - 1);
|
|
91
|
+
content = str.substring(preContent.length + 1);
|
|
92
|
+
content = preContent + content.substring(0, content.substring(1).indexOf('@') + 1);
|
|
93
|
+
text = text.substr(0, i) + '@' + content + '@' + text.substr(i + content.length + 3);
|
|
94
|
+
}
|
|
95
|
+
if (language == 'cpp' && CPP_KEY_WORDS.includes(content)) {
|
|
96
|
+
highlight = 'kwd';
|
|
97
|
+
}
|
|
98
|
+
else if (language == 'js' && JS_KEY_WORDS.includes(content)) {
|
|
99
|
+
highlight = 'kwd';
|
|
100
|
+
}
|
|
101
|
+
else if (CLASS_WORDS.includes(content)) {
|
|
102
|
+
highlight = 'cls';
|
|
103
|
+
}
|
|
104
|
+
else if (STATEMENT_WORDS.includes(content)) {
|
|
105
|
+
highlight = 'lit';
|
|
106
|
+
}
|
|
107
|
+
else if (HTML_TAGS.includes(content)) {
|
|
108
|
+
highlight = 'tag';
|
|
109
|
+
}
|
|
110
|
+
else if (HTML_ATTRIBUTES.includes(content)) {
|
|
111
|
+
highlight = 'atn';
|
|
112
|
+
}
|
|
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';
|
|
117
|
+
}
|
|
118
|
+
else if (!Number.isNaN(parseFloat(content))) {
|
|
119
|
+
highlight = 'dec';
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
console.error('ERROR[Code Parsing]: Unknown highlight type: ' + content);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
html = getHTML(highlight, content);
|
|
126
|
+
text = text.replace(`@${content}@`, html);
|
|
127
|
+
}
|
|
128
|
+
i += html.length - 1;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
let container = document.createElement('div');
|
|
132
|
+
container.className = 'code-container';
|
|
133
|
+
let pre = document.createElement('pre');
|
|
134
|
+
let code = document.createElement('code');
|
|
135
|
+
code.innerHTML = text;
|
|
136
|
+
let button = document.createElement('button');
|
|
137
|
+
button.title = 'Copy code sample';
|
|
138
|
+
button.appendChild(LX.makeIcon('Copy'));
|
|
139
|
+
button.addEventListener('click', this._copySnippet.bind(this, button));
|
|
140
|
+
container.appendChild(button);
|
|
141
|
+
pre.appendChild(code);
|
|
142
|
+
container.appendChild(pre);
|
|
143
|
+
this.root.appendChild(container);
|
|
144
|
+
}
|
|
145
|
+
list(list, type, target) {
|
|
146
|
+
const validTypes = ['bullet', 'numbered'];
|
|
147
|
+
console.assert(list && list.length > 0 && validTypes.includes(type), 'Invalid list type or empty list' + type);
|
|
148
|
+
const typeString = type == 'bullet' ? 'ul' : 'ol';
|
|
149
|
+
let ul = document.createElement(typeString);
|
|
150
|
+
target = target ?? this.root;
|
|
151
|
+
target.appendChild(ul);
|
|
152
|
+
for (var el of list) {
|
|
153
|
+
if (el.constructor === Array) {
|
|
154
|
+
this.list(el, type, ul);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
let li = document.createElement('li');
|
|
158
|
+
li.className = 'leading-loose';
|
|
159
|
+
li.innerHTML = el;
|
|
160
|
+
ul.appendChild(li);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
bulletList(list) {
|
|
164
|
+
this.list(list, 'bullet');
|
|
165
|
+
}
|
|
166
|
+
numberedList(list) {
|
|
167
|
+
this.list(list, 'numbered');
|
|
168
|
+
}
|
|
169
|
+
startCodeBulletList() {
|
|
170
|
+
let ul = document.createElement('ul');
|
|
171
|
+
this._listQueued = ul;
|
|
172
|
+
}
|
|
173
|
+
endCodeBulletList() {
|
|
174
|
+
if (this._listQueued === undefined)
|
|
175
|
+
return;
|
|
176
|
+
console.assert(this._listQueued !== undefined);
|
|
177
|
+
this.root.appendChild(this._listQueued);
|
|
178
|
+
this._listQueued = undefined;
|
|
179
|
+
}
|
|
180
|
+
codeListItem(item, target) {
|
|
181
|
+
target = target ?? this._listQueued;
|
|
182
|
+
let split = item.constructor === Array;
|
|
183
|
+
if (split && item[0].constructor === Array) {
|
|
184
|
+
this.codeBulletList(item, target);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
let li = document.createElement('li');
|
|
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);
|
|
194
|
+
target?.appendChild(li);
|
|
195
|
+
}
|
|
196
|
+
codeBulletList(list, target) {
|
|
197
|
+
console.assert(list !== undefined && list.length > 0);
|
|
198
|
+
let ul = document.createElement('ul');
|
|
199
|
+
for (var el of list) {
|
|
200
|
+
this.codeListItem(el, ul);
|
|
201
|
+
}
|
|
202
|
+
if (target) {
|
|
203
|
+
target.appendChild(ul);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
this.root.appendChild(ul);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
image(src, caption = '', parent) {
|
|
210
|
+
let img = document.createElement('img');
|
|
211
|
+
img.src = src;
|
|
212
|
+
img.alt = caption;
|
|
213
|
+
img.className = 'my-1';
|
|
214
|
+
parent = parent ?? this.root;
|
|
215
|
+
parent.appendChild(img);
|
|
216
|
+
}
|
|
217
|
+
images(sources, captions = [], width, height) {
|
|
218
|
+
const mobile = navigator && /Android|iPhone/i.test(navigator.userAgent);
|
|
219
|
+
if (!mobile) {
|
|
220
|
+
let div = document.createElement('div');
|
|
221
|
+
div.style.width = width ?? 'auto';
|
|
222
|
+
div.style.height = height ?? '256px';
|
|
223
|
+
div.className = 'flex flex-row justify-center';
|
|
224
|
+
for (let i = 0; i < sources.length; ++i) {
|
|
225
|
+
this.image(sources[i], captions[i], div);
|
|
226
|
+
}
|
|
227
|
+
this.root.appendChild(div);
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
for (let i = 0; i < sources.length; ++i) {
|
|
231
|
+
this.image(sources[i], captions[i]);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
video(src, caption = '', controls = true, autoplay = false) {
|
|
236
|
+
let video = document.createElement('video');
|
|
237
|
+
video.src = src;
|
|
238
|
+
video.controls = controls;
|
|
239
|
+
video.autoplay = autoplay;
|
|
240
|
+
if (autoplay) {
|
|
241
|
+
video.muted = true;
|
|
242
|
+
}
|
|
243
|
+
video.loop = true;
|
|
244
|
+
video.alt = caption;
|
|
245
|
+
this.root.appendChild(video);
|
|
246
|
+
}
|
|
247
|
+
note(text, warning = false, title, icon) {
|
|
248
|
+
console.assert(text !== undefined);
|
|
249
|
+
const note = LX.makeContainer([], 'border rounded-lg overflow-hidden text-md fg-secondary my-6', '', this.root);
|
|
250
|
+
let header = document.createElement('div');
|
|
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');
|
|
254
|
+
note.appendChild(header);
|
|
255
|
+
// Node body
|
|
256
|
+
LX.makeContainer([], 'leading-6 p-3', text, note);
|
|
257
|
+
}
|
|
258
|
+
classCtor(name, params, language = 'js') {
|
|
259
|
+
let paramsHTML = '';
|
|
260
|
+
for (var p of params) {
|
|
261
|
+
const str1 = p[0]; // cpp: param js: name
|
|
262
|
+
const str2 = p[1]; // cpp: defaultValue js: type
|
|
263
|
+
if (language == 'cpp') {
|
|
264
|
+
paramsHTML += str1 + (str2 ? " = <span class='desc'>" + str2 + '</span>' : '')
|
|
265
|
+
+ (params.indexOf(p) != (params.length - 1) ? ', ' : '');
|
|
266
|
+
}
|
|
267
|
+
else if (language == 'js') {
|
|
268
|
+
paramsHTML += str1 + ": <span class='desc'>" + str2 + '</span>'
|
|
269
|
+
+ (params.indexOf(p) != (params.length - 1) ? ', ' : '');
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
let pr = document.createElement('p');
|
|
273
|
+
pr.innerHTML = this.iCode("<span class='constructor'>" + name + '(' + paramsHTML + ')' + '</span>');
|
|
274
|
+
this.root.appendChild(pr);
|
|
275
|
+
}
|
|
276
|
+
classMethod(name, desc, params, ret) {
|
|
277
|
+
this.startCodeBulletList();
|
|
278
|
+
let paramsHTML = '';
|
|
279
|
+
for (var p of params) {
|
|
280
|
+
const name = p[0];
|
|
281
|
+
const type = p[1];
|
|
282
|
+
paramsHTML += name + ": <span class='desc'>" + type + '</span>'
|
|
283
|
+
+ (params.indexOf(p) != (params.length - 1) ? ', ' : '');
|
|
284
|
+
}
|
|
285
|
+
let li = document.createElement('li');
|
|
286
|
+
li.innerHTML = this.iCode("<span class='method'>" + name + ' (' + paramsHTML + ')' + (ret ? (': ' + ret) : '') + '</span>');
|
|
287
|
+
this._listQueued?.appendChild(li);
|
|
288
|
+
this.endCodeBulletList();
|
|
289
|
+
this.paragraph(desc);
|
|
290
|
+
return li.parentElement;
|
|
291
|
+
}
|
|
292
|
+
iLink(text, href) {
|
|
293
|
+
console.assert(text !== undefined && href !== undefined);
|
|
294
|
+
return `<a href="${href}">${text}</a>`;
|
|
295
|
+
}
|
|
296
|
+
iPage(text, page) {
|
|
297
|
+
console.assert(text !== undefined && page !== undefined);
|
|
298
|
+
const startPage = page.replace('.html', '');
|
|
299
|
+
const g = globalThis;
|
|
300
|
+
if (g.setPath && g.loadPage) {
|
|
301
|
+
const tabName = g.setPath(startPage);
|
|
302
|
+
return `<a onclick="loadPage('${page}', true, '${tabName}')">${text}</a>`;
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
console.warn('[DocMaker] Create globalThis.setPath and globalThis.loadPage to use inline pages!');
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
iCode(text, codeClass) {
|
|
309
|
+
console.assert(text !== undefined);
|
|
310
|
+
return `<code class="inline ${codeClass ?? ''}">${text}</code>`;
|
|
311
|
+
}
|
|
312
|
+
_copySnippet(b) {
|
|
313
|
+
b.innerHTML = '';
|
|
314
|
+
b.appendChild(LX.makeIcon('Check'));
|
|
315
|
+
b.classList.add('copied');
|
|
316
|
+
setTimeout(() => {
|
|
317
|
+
b.innerHTML = '';
|
|
318
|
+
b.appendChild(LX.makeIcon('Copy'));
|
|
319
|
+
b.classList.remove('copied');
|
|
320
|
+
}, 2000);
|
|
321
|
+
navigator.clipboard.writeText(b.dataset['snippet'] ?? b.parentElement.innerText);
|
|
322
|
+
console.log('Copied!');
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
export { DocMaker };
|
|
327
|
+
//# sourceMappingURL=DocMaker.js.map
|
|
@@ -0,0 +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',\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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"}
|