|
|
@@ -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
|
|
|
});
|
|
|
|
|
|
|