From 0c1b8d7d83dfcb1ce5b1899bceaa8d9e1e88773d Mon Sep 17 00:00:00 2001
From: Romain Courteaud <romain@nexedi.com>
Date: Fri, 21 Feb 2020 14:52:21 +0000
Subject: [PATCH] [erp5_xhtml_style/web_renderjs_ui] renderJS 0.23.0

---
 .../web_page_module/rjs_renderjs_js.js        | 58 +++++--------------
 .../web_page_module/rjs_renderjs_js.xml       |  4 +-
 .../erp5_xhtml_style/renderjs.js.js           | 58 +++++--------------
 3 files changed, 28 insertions(+), 92 deletions(-)

diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_renderjs_js.js b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_renderjs_js.js
index 6b4aa434ab..805a5e1cea 100644
--- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_renderjs_js.js
+++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_renderjs_js.js
@@ -763,18 +763,12 @@ if (typeof document.contains !== 'function') {
     try {
       result = callback.apply(context, argument_list);
     } catch (e) {
-      return new RSVP.Queue()
-        .push(function returnPushableError() {
-          return RSVP.reject(e);
-        });
+      return new RSVP.Queue(RSVP.reject(e));
     }
     if (result instanceof RSVP.Queue) {
       return result;
     }
-    return new RSVP.Queue()
-      .push(function returnPushableResult() {
-        return result;
-      });
+    return new RSVP.Queue(result);
   }
 
   function readBlobAsDataURL(blob) {
@@ -829,20 +823,10 @@ if (typeof document.contains !== 'function') {
         try {
           result = callback(evt);
         } catch (e) {
-          result = RSVP.reject(e);
+          return reject(e);
         }
 
-        callback_promise = result;
-        new RSVP.Queue()
-          .push(function waitForEventCallbackResult() {
-            return result;
-          })
-          .push(undefined, function handleEventCallbackError(error) {
-            if (!(error instanceof RSVP.CancellationError)) {
-              canceller();
-              reject(error);
-            }
-          });
+        callback_promise = new RSVP.Queue(result).push(undefined, reject);
       };
 
       target.addEventListener(type, handle_event_callback, useCapture);
@@ -1141,10 +1125,7 @@ if (typeof document.contains !== 'function') {
       if (resolved) {
         throw new ResolvedMonitorError();
       }
-      var queue = new RSVP.Queue()
-        .push(function waitForPromiseToMonitor() {
-          return promise_to_monitor;
-        })
+      var queue = new RSVP.Queue(promise_to_monitor)
         .push(function handlePromiseToMonitorSuccess(fulfillmentValue) {
           // Promise to monitor is fullfilled, remove it from the list
           var len = promise_list.length,
@@ -1160,13 +1141,6 @@ if (typeof document.contains !== 'function') {
           }
           promise_list = new_promise_list;
         }, function handlePromiseToMonitorError(rejectedReason) {
-          if (rejectedReason instanceof RSVP.CancellationError) {
-            if (!(promise_to_monitor.isFulfilled &&
-                  promise_to_monitor.isRejected)) {
-              // The queue could be cancelled before the first push is run
-              promise_to_monitor.cancel();
-            }
-          }
           reject(rejectedReason);
           throw rejectedReason;
         });
@@ -1321,16 +1295,16 @@ if (typeof document.contains !== 'function') {
   };
 
   function runJob(gadget, name, callback, argument_list) {
-    var job_promise = ensurePushableQueue(callback, argument_list, gadget);
     if (gadget.__job_dict.hasOwnProperty(name)) {
       gadget.__job_dict[name].cancel();
     }
+    var job_promise = ensurePushableQueue(callback, argument_list, gadget);
     gadget.__job_dict[name] = job_promise;
-    gadget.__monitor.monitor(new RSVP.Queue()
-      .push(function waitForJobPromise() {
-        return job_promise;
-      })
+    // gadget.__monitor.monitor(job_promise
+    gadget.__monitor.monitor(new RSVP.Queue(job_promise)
       .push(undefined, function handleJobError(error) {
+        // Do not crash monitor if the job has been cancelled
+        // by a new execution
         if (!(error instanceof RSVP.CancellationError)) {
           throw error;
         }
@@ -1918,10 +1892,7 @@ if (typeof document.contains !== 'function') {
       result = method(url, options, parent_gadget, old_element);
       // Set the HTML context
       if (typeof result.then === 'function') {
-        return new RSVP.Queue()
-          .push(function () {
-            return result;
-          })
+        return new RSVP.Queue(result)
           .push(function setAsyncGadgetInstanceHTMLContext(gadget_instance) {
             return setGadgetInstanceHTMLContext(gadget_instance, options,
                                                 parent_gadget, url,
@@ -2641,11 +2612,8 @@ if (typeof document.contains !== 'function') {
       embedded_channel,
       declare_method_list_waiting;
 
-    return new RSVP.Queue()
-      .push(function waitForLoadingGadget() {
-        // Wait for the loading gadget to be created
-        return wait_for_gadget_loaded;
-      })
+    // Wait for the loading gadget to be created
+    return new RSVP.Queue(wait_for_gadget_loaded)
       .push(function handleLoadingGadget(result_list) {
         TmpConstructor = result_list[0];
         root_gadget = result_list[1];
diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_renderjs_js.xml b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_renderjs_js.xml
index db92f62d15..d23d461733 100644
--- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_renderjs_js.xml
+++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_renderjs_js.xml
@@ -234,7 +234,7 @@
                   </item>
                   <item>
                       <key> <string>serial</string> </key>
-                      <value> <string>981.31793.23133.50602</string> </value>
+                      <value> <string>982.6529.44506.21401</string> </value>
                   </item>
                   <item>
                       <key> <string>state</string> </key>
@@ -252,7 +252,7 @@
                           </tuple>
                           <state>
                             <tuple>
-                              <float>1580395066.9</float>
+                              <float>1582798736.54</float>
                               <string>UTC</string>
                             </tuple>
                           </state>
diff --git a/product/ERP5/bootstrap/erp5_xhtml_style/SkinTemplateItem/portal_skins/erp5_xhtml_style/renderjs.js.js b/product/ERP5/bootstrap/erp5_xhtml_style/SkinTemplateItem/portal_skins/erp5_xhtml_style/renderjs.js.js
index 6b4aa434ab..805a5e1cea 100644
--- a/product/ERP5/bootstrap/erp5_xhtml_style/SkinTemplateItem/portal_skins/erp5_xhtml_style/renderjs.js.js
+++ b/product/ERP5/bootstrap/erp5_xhtml_style/SkinTemplateItem/portal_skins/erp5_xhtml_style/renderjs.js.js
@@ -763,18 +763,12 @@ if (typeof document.contains !== 'function') {
     try {
       result = callback.apply(context, argument_list);
     } catch (e) {
-      return new RSVP.Queue()
-        .push(function returnPushableError() {
-          return RSVP.reject(e);
-        });
+      return new RSVP.Queue(RSVP.reject(e));
     }
     if (result instanceof RSVP.Queue) {
       return result;
     }
-    return new RSVP.Queue()
-      .push(function returnPushableResult() {
-        return result;
-      });
+    return new RSVP.Queue(result);
   }
 
   function readBlobAsDataURL(blob) {
@@ -829,20 +823,10 @@ if (typeof document.contains !== 'function') {
         try {
           result = callback(evt);
         } catch (e) {
-          result = RSVP.reject(e);
+          return reject(e);
         }
 
-        callback_promise = result;
-        new RSVP.Queue()
-          .push(function waitForEventCallbackResult() {
-            return result;
-          })
-          .push(undefined, function handleEventCallbackError(error) {
-            if (!(error instanceof RSVP.CancellationError)) {
-              canceller();
-              reject(error);
-            }
-          });
+        callback_promise = new RSVP.Queue(result).push(undefined, reject);
       };
 
       target.addEventListener(type, handle_event_callback, useCapture);
@@ -1141,10 +1125,7 @@ if (typeof document.contains !== 'function') {
       if (resolved) {
         throw new ResolvedMonitorError();
       }
-      var queue = new RSVP.Queue()
-        .push(function waitForPromiseToMonitor() {
-          return promise_to_monitor;
-        })
+      var queue = new RSVP.Queue(promise_to_monitor)
         .push(function handlePromiseToMonitorSuccess(fulfillmentValue) {
           // Promise to monitor is fullfilled, remove it from the list
           var len = promise_list.length,
@@ -1160,13 +1141,6 @@ if (typeof document.contains !== 'function') {
           }
           promise_list = new_promise_list;
         }, function handlePromiseToMonitorError(rejectedReason) {
-          if (rejectedReason instanceof RSVP.CancellationError) {
-            if (!(promise_to_monitor.isFulfilled &&
-                  promise_to_monitor.isRejected)) {
-              // The queue could be cancelled before the first push is run
-              promise_to_monitor.cancel();
-            }
-          }
           reject(rejectedReason);
           throw rejectedReason;
         });
@@ -1321,16 +1295,16 @@ if (typeof document.contains !== 'function') {
   };
 
   function runJob(gadget, name, callback, argument_list) {
-    var job_promise = ensurePushableQueue(callback, argument_list, gadget);
     if (gadget.__job_dict.hasOwnProperty(name)) {
       gadget.__job_dict[name].cancel();
     }
+    var job_promise = ensurePushableQueue(callback, argument_list, gadget);
     gadget.__job_dict[name] = job_promise;
-    gadget.__monitor.monitor(new RSVP.Queue()
-      .push(function waitForJobPromise() {
-        return job_promise;
-      })
+    // gadget.__monitor.monitor(job_promise
+    gadget.__monitor.monitor(new RSVP.Queue(job_promise)
       .push(undefined, function handleJobError(error) {
+        // Do not crash monitor if the job has been cancelled
+        // by a new execution
         if (!(error instanceof RSVP.CancellationError)) {
           throw error;
         }
@@ -1918,10 +1892,7 @@ if (typeof document.contains !== 'function') {
       result = method(url, options, parent_gadget, old_element);
       // Set the HTML context
       if (typeof result.then === 'function') {
-        return new RSVP.Queue()
-          .push(function () {
-            return result;
-          })
+        return new RSVP.Queue(result)
           .push(function setAsyncGadgetInstanceHTMLContext(gadget_instance) {
             return setGadgetInstanceHTMLContext(gadget_instance, options,
                                                 parent_gadget, url,
@@ -2641,11 +2612,8 @@ if (typeof document.contains !== 'function') {
       embedded_channel,
       declare_method_list_waiting;
 
-    return new RSVP.Queue()
-      .push(function waitForLoadingGadget() {
-        // Wait for the loading gadget to be created
-        return wait_for_gadget_loaded;
-      })
+    // Wait for the loading gadget to be created
+    return new RSVP.Queue(wait_for_gadget_loaded)
       .push(function handleLoadingGadget(result_list) {
         TmpConstructor = result_list[0];
         root_gadget = result_list[1];
-- 
2.30.9