ui: external module support

This commit is contained in:
undefined committed 2022-01-09 05:03:21 +08:00
1 parent f020923d35
commit 86ead663df
8 files changed
+29 -11

No files matched your search

@@ -1,3 +1,5 @@
import loadExternalModule from 'vj/utils/loadModule';
let loaded;
const loaders = {
i18n: async () => {
@@ -16,6 +18,11 @@ const loaders = {
markdown: () => import('./languages/markdown'),
typescript: () => import('./languages/typescript'),
yaml: () => import('./languages/yaml'),
external: async (monaco, feat) => {
let apply = await loadExternalModule(window.externalModules[`monaco-${feat}`]);
if (typeof apply !== 'function') apply = apply.default || apply.apply;
if (typeof apply === 'function') await apply(monaco);
},
};
export async function load(features = ['markdown']) {
@@ -26,18 +33,19 @@ export async function load(features = ['markdown']) {
}
const res = await import('./index');
if (!loaded) {
console.log('Loaded monaco editor in ', Date.now() - s, 'ms');
console.log('Loaded monaco editor in', Date.now() - s, 'ms');
loaded = [];
}
for (const feat of features) {
if (loaded.includes(feat)) continue;
if (!loaders[feat]) {
if (!loaders[feat] && !window.externalModules[`monaco-${feat}`]) {
console.error('Unknown monaco feature:', feat);
continue;
}
s = Date.now();
console.log('Loading monaco feature:', feat);
await loaders[feat]();
if (loaders[feat]) await loaders[feat]();
else await loaders.external(res.default, feat);
console.log('Loaded monaco feature:', feat, 'in', Date.now() - s, 'ms');
loaded.push(feat);
}
@@ -79,7 +79,6 @@ function handleNavbar() {
if (!$(navItems[navItem]).children('a').hasClass('nav--active')) {
$(navItems[navItem]).removeClass('nav__list-item').addClass('menu__item');
$(navItems[navItem]).children('a').removeClass('nav__item').addClass('menu__link');
console.log('hide', navItems[navItem]);
$(menu).prepend($(navItems[navItem]));
}
navItem--;
@@ -91,7 +90,6 @@ function handleNavbar() {
const ele = menu.children(0);
$(ele).addClass('nav__list-item').removeClass('menu__item');
$(ele).children('a').addClass('nav__item').removeClass('menu__link');
console.log('show', ele);
ele.insertBefore(trigger);
}
}
@@ -103,7 +101,6 @@ function handleNavbar() {
if (!$(navItems[navItem]).children('a').hasClass('nav--active')) {
$(navItems[navItem]).removeClass('nav__list-item').addClass('menu__item');
$(navItems[navItem]).children('a').removeClass('nav__item').addClass('menu__link');
console.log('hide', navItems[navItem]);
$(menu).prepend($(navItems[navItem]));
break;
}
@@ -111,7 +108,6 @@ function handleNavbar() {
}
}
console.log('children', menu.children());
if (!menu.children().length) trigger.hide();
}
@@ -25,9 +25,8 @@ export default connect(mapStateToProps, mapDispatchToProps)(class MonacoEditor e
const value = this.props.value || '';
const { language, theme } = this.props;
const { load } = await import('vj/components/monaco/loader');
console.log(load);
const { monaco, registerAction } = await load([language]);
this.model = monaco.editor.createModel(value, language, monaco.Uri.parse('file://model'));
this.model = monaco.editor.createModel(value, language, monaco.Uri.parse(`file:///${UiContext.pdoc.pid || UiContext.pdoc.docId}.${language}`));
if (this.containerElement) {
/** @type {monaco.editor.IStandaloneEditorConstructionOptions} */
const config = {
@@ -108,7 +107,9 @@ export default connect(mapStateToProps, mapDispatchToProps)(class MonacoEditor e
width: '100%',
}}
className="ScratchpadMonacoEditor"
/>
>
<div className="loader-container"><div className="loader"></div></div>
</div>
);
}
});