From d980e09e0f84dcb6ebbd0ddc767247b83c5170ae Mon Sep 17 00:00:00 2001 From: chylex <contact@chylex.com> Date: Fri, 16 Jun 2017 04:22:44 +0200 Subject: [PATCH] Fix {ajax} token resolve order in template plugin --- Resources/Plugins/templates/browser.js | 45 ++++++++++++++------------ 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/Resources/Plugins/templates/browser.js b/Resources/Plugins/templates/browser.js index 9e59b564..b7c61afa 100644 --- a/Resources/Plugins/templates/browser.js +++ b/Resources/Plugins/templates/browser.js @@ -153,17 +153,22 @@ enabled(){ return [ contents, data ]; }; - var doAjaxRequest = (url, evaluator) => { + var doAjaxRequest = (index, url, evaluator) => { return new Promise((resolve, reject) => { + if (!url){ + resolve([ index, "{ajax}" ]); + return; + } + $.get(url, function(data){ if (evaluator){ - resolve(eval(evaluator.replace(/\$/g, "'"+data.replace(/(["'\\\n\r\u2028\u2029])/g, "\\$1")+"'"))); + resolve([ index, eval(evaluator.replace(/\$/g, "'"+data.replace(/(["'\\\n\r\u2028\u2029])/g, "\\$1")+"'"))]); } else{ - resolve(data); + resolve([ index, data ]); } }, "text").fail(function(){ - resolve(""); + resolve([ index, "" ]); }); }); }; @@ -205,23 +210,8 @@ enabled(){ url = evaluator; evaluator = null; } - - if (!url){ - break; - } - promises.push(doAjaxRequest(url, evaluator).then(result => { - const placeholderLen = 5; // "(...)".length - - let diff = result.length-placeholderLen; - let realIndex = indexOffset+index2; - - let val = ele.val(); - ele.val(val.substring(0, realIndex)+result+val.substring(realIndex+placeholderLen)); - - indexOffset += diff; - })); - + promises.push(doAjaxRequest(index2, url, evaluator)); break; } } @@ -232,7 +222,20 @@ enabled(){ ele.prop("disabled", true); - Promise.all(promises).then(() => { + Promise.all(promises).then(values => { + const placeholderLen = 5; // "(...)".length + let indexOffset = 0; + + for(let value of values){ + let diff = value[1].length-placeholderLen; + let realIndex = indexOffset+value[0]; + + let val = ele.val(); + ele.val(val.substring(0, realIndex)+value[1]+val.substring(realIndex+placeholderLen)); + + indexOffset += diff; + } + ele.prop("disabled", false); ele.focus();