示例#1
0
 function _handleSnippet(props) {
     var editor = EditorManager.getCurrentFullEditor();
     var document = DocumentManager.getCurrentDocument();
     var pos = editor.getCursorPos();
     var line = document.getLine(pos.line);
     if (!props) {
         props = $.trim(line).split(" ");
     }
     
     //we don't need to see the trigger text
     CommandManager.execute(Commands.EDIT_DELETE_LINES);
     
     function completeInsert(editor, pos, output) {
         var s,
             x,
             cursorPos,
             lines = output.split("\n");
        
         //figure out cursor pos, remove cursor marker
         for (s = 0; s < lines.length; s++) {
             if (lines[s].indexOf('!!{cursor}') >= 0) {
                 cursorPos = s;
                 output = output.replace('!!{cursor}', '');
                 break;
             }
         }
                                 
         //do insertion
         document.replaceRange(output + "\n", {line: pos.line, ch: 0}, {line: pos.line, ch: 0});
         
         //set curosr
         if (cursorPos) {
             editor._codeMirror.setCursor(pos.line + cursorPos, pos.ch);
         }
         
         //indent lines
         for (x = 0; x < lines.length; x++) {
             editor._codeMirror.indentLine(pos.line + x);
         }
         
         //give focus back
         EditorManager.focusEditor();
     }
     function startInsert(output) {
         //find variables
         var tmp = output.match(/\$\$\{[0-9A-Z_a-z]{1,32}\}/g);
          //remove duplicate variables
         var snippetVariables = [],
             j;
                     
         if (tmp && tmp.length > 0) {
             for (j = 0; j < tmp.length; j++) {
                 if ($.inArray(tmp[j], snippetVariables) === -1) {
                     snippetVariables.push(tmp[j]);
                 }
             }
         }
         
         //if the same number of variables
         if (props.length - 1 >= snippetVariables.length) {
             var x;
             for (x = 0; x < snippetVariables.length; x++) {
                 //even my escapes have escapes
                 var re = new RegExp(snippetVariables[x].replace('$${', '\\$\\$\\{').replace('}', '\\}'), 'g');
                 output = output.replace(re, props[x + 1]);
             }
             completeInsert(editor, pos, output);
         } else {
             var snippetPromise,
                 result = new $.Deferred();
             snippetPromise = inlineSnippetFormProvider(editor, snippetVariables, output);
             
             snippetPromise.done(function (inlineWidget) {
                 var newPos = {line: pos.line - 1, ch: pos.ch};
                 editor.addInlineWidget(newPos, inlineWidget);
                 var inlineComplete = function () {
                     var z;
                     for (z = 0; z < snippetVariables.length; z++) {
                         //even my escapes have escapes
                         var re = new RegExp(snippetVariables[z].replace('$${', '\\$\\$\\{').replace('}', '\\}'), 'g');
                         output = output.replace(re, inlineWidget.$form.find('.snipvar-' + snippetVariables[z].replace('$${', '').replace('}', '')).val());
                     }
                     
                     completeInsert(editor, pos, output);
                 };
                 inlineWidget.$form.on('complete', function () {
                     inlineComplete();
                     inlineWidget.close();
                 });
             }).fail(function () {
                 result.reject();
                 console.log("Can't create inline snippet form");
             });
         }
     }
             
     function readSnippetFromFile(fieName) {
         var snippetFile = new NativeFileSystem.FileEntry(directory + '/snippets/' + fieName);
         FileUtils.readAsText(snippetFile)
             .done(function (text, readTimestamp) {
                 startInsert(SnippetPresets.execute(text));
             }).fail(function (error) {
                 FileUtils.showFileOpenError(error.code, snippetFile);
             });
     }
     
     if (props.length) {
         //try to find the snippet, given the trigger text
         var i;
         for (i = 0; i < snippets.length; i++) {
             if (snippets[i].trigger === props[0]) {
                 var output = snippets[i].template;
                 if (output.indexOf('.snippet') === output.length - 8) {
                     readSnippetFromFile(output);
                 } else {
                     startInsert(SnippetPresets.execute(output));
                 }
                 break;
             }
         }
     }
 }
示例#2
0
 .done(function (text, readTimestamp) {
     startInsert(SnippetPresets.execute(text));
 }).fail(function (error) {