From e950b2aadd7cdfc8f1534a7568b3afba048f0643 Mon Sep 17 00:00:00 2001 From: Tulika Date: Wed, 18 Oct 2017 21:59:49 +0530 Subject: [PATCH 1/3] Update to ecma Promises in surface.html --- public/templates/surface.html | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/public/templates/surface.html b/public/templates/surface.html index 9e338be..a906c38 100644 --- a/public/templates/surface.html +++ b/public/templates/surface.html @@ -97,13 +97,23 @@ loadScript("/lib/three.min.js") var dot=0;setInterval(function(){if($("#dot"))$("#dot").css({marginLeft:50*(1+Math.sin(dot))+"%"});dot+=0.1},33); function loadScript(script) { - var def=new $.Deferred(); - var s = document.createElement("script"); - s.src = script; - s.onload=function(){console.log("loaded",script,new Date());def.resolve();} - s.onerror=function(e){console.log("unable to load",script);def.reject();} + return new Promise(function(resolve,reject){ + const s=document.createElement("script"); + s.src=script; + let r = false; + s.onload = s.onreadystatechange = function() { + if (!r && (!this.readyState || this.readyState == 'complete')) { + r = true; + console.log("loaded",script,new Date()); + resolve(); + } + } + s.onerror = function(err) { + console.log("unable to load",script); + reject(err, s); + } document.body.appendChild(s); - return def.promise(); + }); } function deparam() { @@ -199,4 +209,4 @@ function onWindowResize(event) { } - \ No newline at end of file + -- GitLab From aa81271972146efb720f2955c83020772a71504e Mon Sep 17 00:00:00 2001 From: Tulika Date: Thu, 19 Oct 2017 00:31:11 +0530 Subject: [PATCH 2/3] Shift to ecma promises --- public/js/brainbox.js | 62 +++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/public/js/brainbox.js b/public/js/brainbox.js index 9acb02f..18bc21d 100644 --- a/public/js/brainbox.js +++ b/public/js/brainbox.js @@ -61,28 +61,32 @@ var BrainBox={ * If undefined, the script will be loaded. */ loadScript: function loadScript(path, testScriptPresent) { - var def = new $.Deferred(); - - if(testScriptPresent && testScriptPresent()) { - console.log("[loadScript] Script",path,"already present, not loading it again"); - return def.resolve().promise(); - } - var s = document.createElement("script"); - s.src = path; - s.onload=function () { - console.log("Loaded",path); - def.resolve(); - }; - document.body.appendChild(s); - return def.promise(); + return new Promise(function(resolve,reject){ + if(testScriptPresent && testScriptPresent()){ + console.log("[loadScript] Script",path,"already present, not loading it again"); + return resolve(); + } + var s = document.createElement("script"); + s.src = path; + s.async = true; + let r = false; + s.onload = s.onreadystatechange = function() { + console.log("Loaded",path); + if (!r && (!this.readyState || this.readyState == 'complete')) { + r = true; + console.log("Loaded",path); + resolve(); + } + } + document.body.appendChild(s); + }); }, /** * @function initBrainBox */ initBrainBox: function initBrainBox() { + return new Promise(function(resolve,reject){ var l=BrainBox.traceLog(initBrainBox);if(l)console.log(l); - - var def=$.Deferred(); // Add AtlasMaker and friends $("#stereotaxic").html('
'); @@ -95,14 +99,14 @@ var BrainBox={ .then(function(){return BrainBox.loadScript('/lib/npm-bundle.js')}) .then(function(){return BrainBox.loadScript('/js/twoWayBinding.js')}) .then(function(){ - $.when( + Promise.all([ BrainBox.loadScript('/js/atlasMaker-draw.js'), BrainBox.loadScript('/js/atlasMaker-interaction.js'), BrainBox.loadScript('/js/atlasMaker-io.js'), BrainBox.loadScript('/js/atlasMaker-paint.js'), BrainBox.loadScript('/js/atlasMaker-ui.js'), BrainBox.loadScript('/js/atlasMaker-ws.js'), - BrainBox.loadScript('/js/atlasMaker.js') + BrainBox.loadScript('/js/atlasMaker.js')] ).then(function () { $.extend(AtlasMakerWidget,AtlasMakerDraw); $.extend(AtlasMakerWidget,AtlasMakerInteraction); @@ -112,23 +116,23 @@ var BrainBox={ $.extend(AtlasMakerWidget,AtlasMakerWS); AtlasMakerWidget.initAtlasMaker($("#atlasMaker")) .then(function() { - def.resolve(); + resolve(); }); + }); }) }); // store state on exit $(window).on('unload',BrainBox.unload); - return def.promise(); }, /** * @function configureBrainBox */ configureBrainBox: function configureBrainBox(param) { + return new Promise(function(resolve,reject){ var l=BrainBox.traceLog(configureBrainBox);if(l)console.log(l); - var def=$.Deferred(); var date=new Date(); var index=param.annotationItemIndex||0; @@ -140,7 +144,7 @@ var BrainBox={ date=new Date(); $("#msgLog").append("

ERROR: "+param.info.message+"."); console.log("

ERROR: "+param.info.message+"."); - return def.promise().reject(); + return reject(); } BrainBox.info=param.info; @@ -197,14 +201,14 @@ var BrainBox={ else AtlasMakerWidget.editMode = 0; - def.resolve(); + resolve(); }) .catch(function(err) { console.log("ERROR:",err); - def.reject(); + reject(); }); - return def.promise(); + }); }, /** * @function convertImgObjectURLToDataURL @@ -212,18 +216,18 @@ var BrainBox={ * suitable to be stored as a string in localStorage */ convertImgObjectURLToDataURL: function convertImgObjectURLToDataURL(objURL) { - var def = $.Deferred(); + return new Promise(function(resolve,reject){ var x = new XMLHttpRequest(), f = new FileReader(); x.open('GET',objURL,true); x.responseType = 'blob'; x.onload = function (e) { f.onload = function (evt) { - def.resolve(evt.target.result); + resolve(evt.target.result); }; f.readAsDataURL(x.response); }; x.send(); - return def; + }); }, /** * @function addCurrentMRIToHistory @@ -404,4 +408,4 @@ var BrainBox={ $('#atlasMaker').append('

'); } -} \ No newline at end of file +} -- GitLab From 386fc36ebc83b2ac2036bc2eb9c9511c53ccf7e4 Mon Sep 17 00:00:00 2001 From: Tulika Date: Thu, 19 Oct 2017 00:44:49 +0530 Subject: [PATCH 3/3] Shift to ecma Promises in atlasMaker.js --- public/js/atlasMaker.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/public/js/atlasMaker.js b/public/js/atlasMaker.js index 90fc0bd..be441fb 100755 --- a/public/js/atlasMaker.js +++ b/public/js/atlasMaker.js @@ -123,6 +123,7 @@ var AtlasMakerWidget = { * @function initAtlasMaker */ initAtlasMaker: function initAtlasMaker(elem) { + return new Promise(function(resolve,reject){ var me=AtlasMakerWidget; var l=me.traceLog(initAtlasMaker,0,"#bbd");if(l)console.log.apply(undefined,l); @@ -189,7 +190,6 @@ var AtlasMakerWidget = { me.progress=$("a.download_MRI"); // Init the toolbar: load template, wire actions - var def=$.Deferred(); $.get("/templates/tools.html",function from_initAtlasMaker(html) { me.container.append(html); @@ -228,19 +228,19 @@ var AtlasMakerWidget = { // Init web socket connection return me.initSocketConnection(); }).then(function() { - def.resolve() + resolve() }); - return def.promise(); + }); }, /** * @function configureAtlasMaker */ configureAtlasMaker: function configureAtlasMaker(info,index) { + return new Promise(funcion(resolve,reject){ var me=AtlasMakerWidget; var l=me.traceLog(configureAtlasMaker,0,"#bbd");if(l)console.log.apply(undefined,l); - var def=$.Deferred(); me.configureMRI(info,index) .then(function (info2) { @@ -266,14 +266,14 @@ var AtlasMakerWidget = { me.sendUserDataMessage("sendAtlas"); me.changePenColor( 0 ); - def.resolve(info); + resolve(info); }) .catch(function(err) { console.log("ERROR:",err); - def.reject(); + reject(); }); - return def.promise(); + }); }, /** * @function configureOntology @@ -321,10 +321,10 @@ var AtlasMakerWidget = { * @function configureMRI */ configureMRI: function configureMRI(info,index) { + return new Promise(function(resolve,reject){ var me=AtlasMakerWidget; var l=me.traceLog(configureMRI,0,"#bbd");if(l)console.log.apply(undefined,l); - var def=$.Deferred(); me.User.source=info.source; me.requestMRIInfo(info.source) @@ -376,15 +376,15 @@ var AtlasMakerWidget = { else me.brain_pixdim=[1,1,1]; - def.resolve(info2); + resolve(info2); }) .catch(function(err) { console.log("ERROR: DOWNLOAD FAILED", err); - def.reject(err); + reject(err); }); - return def.promise(); + }); } }; /* -- GitLab