Commit bf8171fd by Alexander Zobnin

code-editor: initial autocomplete

parent b74fe05f
......@@ -9,22 +9,27 @@ const ACE_SRC_BASE = "public/vendor/npm/ace-builds/src-noconflict/";
// Trick for loading additional modules
function fixModuleUrl(moduleType, name) {
let aceModeName = `ace/${moduleType}/${name}`;
ace.config.setModuleUrl(aceModeName, ACE_SRC_BASE + `${moduleType}-${name}.js`);
let componentName = `${moduleType}-${name}.js`;
if (moduleType === 'snippets') {
componentName = `${moduleType}/${name}.js`;
}
ace.config.setModuleUrl(aceModeName, ACE_SRC_BASE + componentName);
}
fixModuleUrl("theme", "solarized_dark");
fixModuleUrl("ext", "language_tools");
let editorTemplate = `
<div class="gf-code-editor"></div>
`;
let editorTemplate = `<div></div>`;
function link(scope, elem, attrs) {
let aceElem = elem.get(0);
let codeEditor = ace.edit(aceElem);
let editorSession = codeEditor.getSession();
codeEditor.setTheme("ace/theme/solarized_dark");
codeEditor.setHighlightActiveLine(false);
codeEditor.setShowPrintMargin(false);
// disable depreacation warning
codeEditor.$blockScrolling = Infinity;
setLangMode();
......@@ -36,7 +41,7 @@ function link(scope, elem, attrs) {
textarea.addClass('gf-form-input width-25');
textarea.attr("rows", "4");
editorSession.on('change', e => {
editorSession.on('change', (e) => {
scope.$apply(() => {
let newValue = codeEditor.getValue();
scope.content = newValue;
......@@ -47,7 +52,15 @@ function link(scope, elem, attrs) {
let lang = attrs.mode || 'text';
let aceModeName = `ace/mode/${lang}`;
fixModuleUrl("mode", lang);
fixModuleUrl("snippets", lang);
editorSession.setMode(aceModeName);
ace.config.loadModule("ace/ext/language_tools", (language_tools) => {
codeEditor.setOptions({
enableBasicAutocompletion: true,
enableLiveAutocompletion: true,
enableSnippets: true
});
});
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment