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();