diff --git a/o2web/source/o2_core/o2/widget/JavascriptEditor.js b/o2web/source/o2_core/o2/widget/JavascriptEditor.js index 9f53fc27479f2b19dc880cffd38b78757e33c7bd..71f241d9d8d51041b8f894f3c1e1e39926e2d806 100644 --- a/o2web/source/o2_core/o2/widget/JavascriptEditor.js +++ b/o2web/source/o2_core/o2/widget/JavascriptEditor.js @@ -103,14 +103,16 @@ o2.widget.JavascriptEditor = new Class({ o2.getJSON("/o2_core/o2/widget/$JavascriptEditor/environment.json", function(data){ json = data; }, false); this.Macro = new o2.Macro.FormContext(json); - monaco.languages.registerCompletionItemProvider('json', { - provideCompletionItems: function(model, position) { - // find out if we are completing a property in the 'dependencies' object. - var textUntilPosition = model.getValueInRange({startLineNumber: 1, startColumn: 1, endLineNumber: position.lineNumber, endColumn: position.column}); - var match = textUntilPosition.match(/[a-zA-Z_0-9\$\-\u00A2-\uFFFF\.]/); - if (!match) { - return { suggestions: [] }; - } + //registerReferenceProvider + //monaco.languages.registerReferenceProvider('javascript', { + monaco.languages.registerCompletionItemProvider('javascript', { + provideCompletionItems: function(model, position, context, token) { + debugger; + var textUntilPosition = model.getValueInRange({startLineNumber: position.lineNumber, startColumn: 1, endLineNumber: position.lineNumber, endColumn: position.column}); + var textPrefix = textUntilPosition.substr(0, textUntilPosition.lastIndexOf(".")); + code = "try {return "+textPrefix+";}catch(e){return null;}"; + var o = this.Macro.exec(code); + var word = model.getWordUntilPosition(position); var range = { startLineNumber: position.lineNumber, @@ -118,20 +120,39 @@ o2.widget.JavascriptEditor = new Class({ startColumn: word.startColumn, endColumn: word.endColumn }; - return { - suggestions: function (range) { - return [{ - label: '"my-third-party-library"', + if (o){ + var arr = []; + Object.keys(o).each(function(key){ + var type = typeOf(o[key]); + if (type==="function") { + var count = o[key].length; + var v = key+"("; + for (var i=1; i<=count; i++) v+= (i==count) ? "par"+i : "par"+i+", "; + v+=");"; + arr.push({ + label: key, kind: monaco.languages.CompletionItemKind.Function, - documentation: "Describe your library here", - insertText: '"${1:my-third-party-library}": "${2:1.2.3}"', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - range: range - }]; - } - }; - } + //documentation: "Fast, unopinionated, minimalist web framework", + insertText: v, + range: range + }); + }else{ + arr.push({ + label: key, + kind: monaco.languages.CompletionItemKind.Interface, + //documentation: "Fast, unopinionated, minimalist web framework", + insertText: key, + range: range + }); + } + }); + } + + return {suggestions: arr} + + }.bind(this), + resolveCompletionItem: this.provideCompletionItems });