diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-10-09 00:08:52 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-10-09 00:08:52 +0300 |
commit | b0980f5557a8621fb08785b06be950ee46796c18 (patch) | |
tree | 39ceec05cf89f69adb79a427f673031cd2d5c070 /app/assets/javascripts/editor | |
parent | 2ac48330152821211934d8aee396679d5895c5fe (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts/editor')
-rw-r--r-- | app/assets/javascripts/editor/editor_lite.js | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/app/assets/javascripts/editor/editor_lite.js b/app/assets/javascripts/editor/editor_lite.js index bbd5461ae4d..e52e64d4c2d 100644 --- a/app/assets/javascripts/editor/editor_lite.js +++ b/app/assets/javascripts/editor/editor_lite.js @@ -39,6 +39,26 @@ export default class Editor { monacoEditor.setModelLanguage(model, id); } + static pushToImportsArray(arr, toImport) { + arr.push(import(toImport)); + } + + static loadExtensions(extensions) { + if (!extensions) { + return Promise.resolve(); + } + const promises = []; + const extensionsArray = typeof extensions === 'string' ? extensions.split(',') : extensions; + + extensionsArray.forEach(ext => { + const prefix = ext.includes('/') ? '' : 'editor/'; + const trimmedExt = ext.replace(/^\//, '').trim(); + Editor.pushToImportsArray(promises, `~/${prefix}${trimmedExt}`); + }); + + return Promise.all(promises); + } + /** * Creates a monaco instance with the given options. * @@ -53,6 +73,7 @@ export default class Editor { blobPath = '', blobContent = '', blobGlobalId = '', + extensions = [], ...instanceOptions } = {}) { if (!el) { @@ -80,6 +101,22 @@ export default class Editor { model.dispose(); }); instance.updateModelLanguage = path => Editor.updateModelLanguage(path, instance); + instance.use = args => this.use(args, instance); + + Editor.loadExtensions(extensions, instance) + .then(modules => { + if (modules) { + modules.forEach(module => { + instance.use(module.default); + }); + } + }) + .then(() => { + el.dispatchEvent(new Event('editor-ready')); + }) + .catch(e => { + throw e; + }); this.instances.push(instance); return instance; |