Procházet zdrojové kódy

新增脚本编辑器

(cherry picked from commit c8b08c86c2597bf893a5c160b4657ff87ebbb852)
huqi před 5 roky
rodič
revize
0356c6cd4f
1 změnil soubory, kde provedl 41 přidání a 20 odebrání
  1. 41 20
      o2web/source/o2_core/o2/widget/JavascriptEditor.js

+ 41 - 20
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
                 });