From eeaff6b553dcd0a5e593885a182dea79e8f3b8c0 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Wed, 16 Nov 2016 14:54:51 +0000 Subject: [PATCH] Add insert-function button to expression editor --- Gruntfile.js | 3 ++- editor/js/ui/editor.js | 17 +++++++++++++---- editor/templates/index.mst | 2 +- editor/vendor/jsonata/jsonata.js | 3 +++ red/api/locales/en-US/editor.json | 3 ++- 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index dac1329a6..9c44b782e 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -167,7 +167,8 @@ module.exports = function(grunt) { 'public/red/main.min.js': 'public/red/main.js', 'public/vendor/jsonata/jsonata.min.js': 'public/vendor/jsonata/jsonata.js', 'public/vendor/ace/mode-jsonata.js': 'editor/vendor/jsonata/mode-jsonata.js', - 'public/vendor/ace/worker-jsonata.js': 'editor/vendor/jsonata/worker-jsonata.js' + 'public/vendor/ace/worker-jsonata.js': 'editor/vendor/jsonata/worker-jsonata.js', + 'public/vendor/ace/snippets/jsonata.js': 'editor/vendor/jsonata/snippets-jsonata.js' } } }, diff --git a/editor/js/ui/editor.js b/editor/js/ui/editor.js index 23947b9fb..5e9775ec8 100644 --- a/editor/js/ui/editor.js +++ b/editor/js/ui/editor.js @@ -1421,7 +1421,7 @@ RED.editor = (function() { funcSelect.change(function(e) { var f = $(this).val(); var args = RED._('jsonata:'+f+".args",{defaultValue:''}); - var title = "

"+f+"("+args+")

"; + var title = "
"+f+"("+args+")
"; var body = marked(RED._('jsonata:'+f+'.desc',{defaultValue:''})); $("#node-input-expression-help").html(title+"

"+body+"

"); @@ -1432,7 +1432,7 @@ RED.editor = (function() { mode:"ace/mode/jsonata", options: { enableBasicAutocompletion:true, - enableSnippets:false, + enableSnippets:true, enableLiveAutocompletion: true } }); @@ -1441,14 +1441,23 @@ RED.editor = (function() { expressionEditor.on("changeSelection", function() { var c = expressionEditor.getCursorPosition(); var token = expressionEditor.getSession().getTokenAt(c.row,c.column); - //console.log(token); + // console.log(token); if (token && token.type === 'keyword') { funcSelect.val(token.value).change(); } }); dialogForm.i18n(); - + $("#node-input-expression-func-insert").click(function(e) { + e.preventDefault(); + var pos = expressionEditor.getCursorPosition(); + var f = funcSelect.val(); + var args = RED._('jsonata:'+f+".args",{defaultValue:''}); + expressionEditor.insert(f+"("+args+")"); + pos.column += f.length+1; + expressionEditor.moveCursorToPosition(pos); + expressionEditor.focus(); + }) }, close: function() { editStack.pop(); diff --git a/editor/templates/index.mst b/editor/templates/index.mst index 7dc5fda50..d8cbb2537 100644 --- a/editor/templates/index.mst +++ b/editor/templates/index.mst @@ -166,7 +166,7 @@
- +
diff --git a/editor/vendor/jsonata/jsonata.js b/editor/vendor/jsonata/jsonata.js index 2883b5fc4..814bba28f 100644 --- a/editor/vendor/jsonata/jsonata.js +++ b/editor/vendor/jsonata/jsonata.js @@ -2788,6 +2788,9 @@ var jsonata = (function() { }, assign: function (name, value) { environment.bind(name, value); + }, + ast: function() { + return ast; } }; } diff --git a/red/api/locales/en-US/editor.json b/red/api/locales/en-US/editor.json index 5029b6182..dca0d7ad7 100644 --- a/red/api/locales/en-US/editor.json +++ b/red/api/locales/en-US/editor.json @@ -320,6 +320,7 @@ "empty": "No matches found" }, "expressionEditor": { - "functions": "Functions" + "functions": "Functions", + "insert": "Insert" } }