37 lines
1.1 KiB
JavaScript
37 lines
1.1 KiB
JavaScript
import { editor as monacoEditor, languages as monacoLanguages } from 'monaco-editor';
|
|
import { DEFAULT_THEME, themes } from '~/ide/lib/themes';
|
|
|
|
export const clearDomElement = (el) => {
|
|
if (!el || !el.firstChild) return;
|
|
|
|
while (el.firstChild) {
|
|
el.removeChild(el.firstChild);
|
|
}
|
|
};
|
|
|
|
export const setupEditorTheme = () => {
|
|
const themeName = window.gon?.user_color_scheme || DEFAULT_THEME;
|
|
const theme = themes.find((t) => t.name === themeName);
|
|
if (theme) monacoEditor.defineTheme(themeName, theme.data);
|
|
monacoEditor.setTheme(theme ? themeName : DEFAULT_THEME);
|
|
};
|
|
|
|
export const getBlobLanguage = (path) => {
|
|
const defaultLanguage = 'plaintext';
|
|
|
|
if (!path) {
|
|
return defaultLanguage;
|
|
}
|
|
|
|
const blobPath = path.split('/').pop();
|
|
const ext = blobPath.includes('.') ? `.${blobPath.split('.').pop()}` : blobPath;
|
|
const language = monacoLanguages
|
|
.getLanguages()
|
|
.find((lang) => lang.extensions.indexOf(ext.toLowerCase()) !== -1);
|
|
return language ? language.id : defaultLanguage;
|
|
};
|
|
|
|
export const setupCodeSnippet = (el) => {
|
|
monacoEditor.colorizeElement(el);
|
|
setupEditorTheme();
|
|
};
|