diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/editors/expression.js b/packages/node_modules/@node-red/editor-client/src/js/ui/editors/expression.js index 64dec3a62..0d6065d84 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/editors/expression.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/editors/expression.js @@ -121,73 +121,75 @@ var currentFunctionMarker = null; expressionEditor.getSession().setValue(value||"",-1); - expressionEditor.on("changeSelection", function() { - var c = expressionEditor.getCursorPosition(); - var token = expressionEditor.getSession().getTokenAt(c.row,c.column); - if (token !== currentToken || (token && /paren/.test(token.type) && c.column !== currentTokenPos)) { - currentToken = token; - var r,p; - var scopedFunction = null; - if (token && token.type === 'keyword') { - r = c.row; - scopedFunction = token; - } else { - var depth = 0; - var next = false; - if (token) { - if (token.type === 'paren.rparen') { - // If this is a block of parens ')))', set - // depth to offset against the cursor position - // within the block - currentTokenPos = c.column; - depth = c.column - (token.start + token.value.length); - } + //ace only (monaco has jsonata tokeniser) + if(expressionEditor.type == "ace") { + expressionEditor.on("changeSelection", function() { + var c = expressionEditor.getCursorPosition(); + var token = expressionEditor.getSession().getTokenAt(c.row,c.column); + if (token !== currentToken || (token && /paren/.test(token.type) && c.column !== currentTokenPos)) { + currentToken = token; + var r,p; + var scopedFunction = null; + if (token && token.type === 'keyword') { r = c.row; - p = token.index; + scopedFunction = token; } else { - r = c.row-1; - p = -1; - } - while ( scopedFunction === null && r > -1) { - var rowTokens = expressionEditor.getSession().getTokens(r); - if (p === -1) { - p = rowTokens.length-1; + var depth = 0; + var next = false; + if (token) { + if (token.type === 'paren.rparen') { + // If this is a block of parens ')))', set + // depth to offset against the cursor position + // within the block + currentTokenPos = c.column; + depth = c.column - (token.start + token.value.length); + } + r = c.row; + p = token.index; + } else { + r = c.row-1; + p = -1; } - while (p > -1) { - var type = rowTokens[p].type; - if (next) { - if (type === 'keyword') { - scopedFunction = rowTokens[p]; - // console.log("HIT",scopedFunction); - break; + while ( scopedFunction === null && r > -1) { + var rowTokens = expressionEditor.getSession().getTokens(r); + if (p === -1) { + p = rowTokens.length-1; + } + while (p > -1) { + var type = rowTokens[p].type; + if (next) { + if (type === 'keyword') { + scopedFunction = rowTokens[p]; + // console.log("HIT",scopedFunction); + break; + } + next = false; } - next = false; + if (type === 'paren.lparen') { + depth-=rowTokens[p].value.length; + } else if (type === 'paren.rparen') { + depth+=rowTokens[p].value.length; + } + if (depth < 0) { + next = true; + depth = 0; + } + // console.log(r,p,depth,next,rowTokens[p]); + p--; } - if (type === 'paren.lparen') { - depth-=rowTokens[p].value.length; - } else if (type === 'paren.rparen') { - depth+=rowTokens[p].value.length; + if (!scopedFunction) { + r--; } - if (depth < 0) { - next = true; - depth = 0; - } - // console.log(r,p,depth,next,rowTokens[p]); - p--; - } - if (!scopedFunction) { - r--; } } + expressionEditor.session.removeMarker(currentFunctionMarker); + if (scopedFunction) { + //console.log(token,.map(function(t) { return t.type})); + funcSelect.val(scopedFunction.value).trigger("change"); + } } - expressionEditor.session.removeMarker(currentFunctionMarker); - if (scopedFunction) { - //console.log(token,.map(function(t) { return t.type})); - funcSelect.val(scopedFunction.value).trigger("change"); - } - } - }); - + }); + } dialogForm.i18n(); $("#red-ui-editor-type-expression-func-insert").on("click", function(e) { e.preventDefault();