From 7f17f825aba7f40052eaadf66d7ce30939dc570e Mon Sep 17 00:00:00 2001 From: Chinmay Pandhare Date: Fri, 28 Jul 2017 12:00:30 +0530 Subject: [PATCH] LoadImages will return nothing, only call a callback --- dist/image-sequencer.js | 25 ++++++++++++----- src/ImageSequencer.js | 20 ++++++++++---- src/LoadImage.js | 3 ++- test/chain.js | 59 ++++++++++++++++++++++++----------------- test/image-manip.js | 19 +++++++------ test/image-sequencer.js | 2 +- 6 files changed, 83 insertions(+), 45 deletions(-) diff --git a/dist/image-sequencer.js b/dist/image-sequencer.js index 41b4f0f7..6e3e23b4 100644 --- a/dist/image-sequencer.js +++ b/dist/image-sequencer.js @@ -34708,14 +34708,13 @@ ImageSequencer = function ImageSequencer(options) { function loadImages() { var args = []; + var sequencer = this; for (var arg in arguments) args.push(copy(arguments[arg])); var json_q = formatInput.call(this,args,"l"); inputlog.push({method:"loadImages", json_q:copy(json_q)}); var loadedimages = this.copy(json_q.loadedimages); - - for (var i in json_q.images) - require('./LoadImage')(this,i,json_q.images[i]) +// require('./LoadImage')(this,i,json_q.images[i]); var ret = { name: "ImageSequencer Wrapper", @@ -34728,7 +34727,20 @@ ImageSequencer = function ImageSequencer(options) { setUI: this.setUI, images: loadedimages }; - json_q.callback.call(ret); + + function load(i) { + if(i==loadedimages.length) { + json_q.callback.call(ret); + return; + } + var img = loadedimages[i]; + require('./LoadImage')(sequencer,img,json_q.images[img],function(){ + load(++i); + }); + } + + load(0); + return ret; } @@ -34799,7 +34811,7 @@ function InsertStep(ref, image, index, name, o) { module.exports = InsertStep; },{}],115:[function(require,module,exports){ -function LoadImage(ref, name, src) { +function LoadImage(ref, name, src, main_callback) { function makeImage(datauri) { var image = { src: datauri, @@ -34868,6 +34880,7 @@ function LoadImage(ref, name, src) { ref.images[name].steps[0].UI.onSetup(); ref.images[name].steps[0].UI.onDraw(); ref.images[name].steps[0].UI.onComplete(image.steps[0].output.src); + main_callback(); return true; }); } @@ -35481,7 +35494,7 @@ module.exports = function PixelManipulation(image, options) { // but node modules and their documentation are essentially arcane on this point var chunks = []; var totalLength = 0; - var r = savePixels(pixels, options.format); + var r = savePixels(pixels, options.format, {quality: 100}); r.on('data', function(chunk){ totalLength += chunk.length; diff --git a/src/ImageSequencer.js b/src/ImageSequencer.js index f4d4e40e..2c25499f 100644 --- a/src/ImageSequencer.js +++ b/src/ImageSequencer.js @@ -133,14 +133,13 @@ ImageSequencer = function ImageSequencer(options) { function loadImages() { var args = []; + var sequencer = this; for (var arg in arguments) args.push(copy(arguments[arg])); var json_q = formatInput.call(this,args,"l"); inputlog.push({method:"loadImages", json_q:copy(json_q)}); var loadedimages = this.copy(json_q.loadedimages); - - for (var i in json_q.images) - require('./LoadImage')(this,i,json_q.images[i]) +// require('./LoadImage')(this,i,json_q.images[i]); var ret = { name: "ImageSequencer Wrapper", @@ -153,8 +152,19 @@ ImageSequencer = function ImageSequencer(options) { setUI: this.setUI, images: loadedimages }; - json_q.callback.call(ret); - return ret; + + function load(i) { + if(i==loadedimages.length) { + json_q.callback.call(ret); + return; + } + var img = loadedimages[i]; + require('./LoadImage')(sequencer,img,json_q.images[img],function(){ + load(++i); + }); + } + + load(0); } function replaceImage(selector,steps,options) { diff --git a/src/LoadImage.js b/src/LoadImage.js index ac1c67a4..a1e24f3e 100644 --- a/src/LoadImage.js +++ b/src/LoadImage.js @@ -1,4 +1,4 @@ -function LoadImage(ref, name, src) { +function LoadImage(ref, name, src, main_callback) { function makeImage(datauri) { var image = { src: datauri, @@ -67,6 +67,7 @@ function LoadImage(ref, name, src) { ref.images[name].steps[0].UI.onSetup(); ref.images[name].steps[0].UI.onDraw(); ref.images[name].steps[0].UI.onComplete(image.steps[0].output.src); + main_callback(); return true; }); } diff --git a/test/chain.js b/test/chain.js index 6a77fca3..49916582 100644 --- a/test/chain.js +++ b/test/chain.js @@ -17,22 +17,27 @@ test('loadImages/loadImage has a name generator.', function (t){ t.end(); }); -test('loadImages/loadImage returns a wrapper.', function (t){ - var returnval = sequencer.loadImage(red); - t.equal(returnval.name,"ImageSequencer Wrapper", "Wrapper is returned"); - t.equal(returnval.images[0],"image2","Image scope is defined"); - t.end(); +test('loadImages/loadImage returns a wrapper in the callback.', function (t){ + sequencer.loadImage(red, function() { + var returnval = this; + t.equal(returnval.name,"ImageSequencer Wrapper", "Wrapper is returned"); + t.equal(returnval.images[0],"image2","Image scope is defined"); + t.end(); + }); }); test('addSteps is two-way chainable.', function (t){ - var returnval = sequencer.loadImage(red).addSteps('invert'); - t.equal(returnval.name,"ImageSequencer Wrapper", "Wrapper is returned"); - t.equal(returnval.images[0],"image3","Image scope is defined"); - t.equal(sequencer.images.image3.steps.length,2,"Loaded image is affected"); - t.equal(sequencer.images.image3.steps[1].options.name,"invert","Correct Step Added"); - t.equal(sequencer.images.image2.steps.length,1,"Other images are not affected"); - t.equal(sequencer.images.image1.steps.length,1,"Other images are not affected"); - t.end(); + sequencer.loadImage(red, function(){ + var returnval = this; + this.addSteps('invert'); + t.equal(returnval.name,"ImageSequencer Wrapper", "Wrapper is returned"); + t.equal(returnval.images[0],"image3","Image scope is defined"); + t.equal(sequencer.images.image3.steps.length,2,"Loaded image is affected"); + t.equal(sequencer.images.image3.steps[1].options.name,"invert","Correct Step Added"); + t.equal(sequencer.images.image2.steps.length,1,"Other images are not affected"); + t.equal(sequencer.images.image1.steps.length,1,"Other images are not affected"); + t.end(); + }); }); test('addSteps is two-way chainable without loadImages.', function (t){ @@ -44,11 +49,14 @@ test('addSteps is two-way chainable without loadImages.', function (t){ }); test('removeSteps is two-way chainable.', function (t){ - var returnval = sequencer.loadImage(red).addSteps('invert').removeSteps(1); - t.equal(returnval.name,"ImageSequencer Wrapper", "Wrapper is returned"); - t.equal(returnval.images[0],"image4","Image scope is defined"); - t.equal(sequencer.images.image4.steps.length,1); - t.end(); + sequencer.loadImage(red,function(){ + var returnval = this; + this.addSteps('invert').removeSteps(1); + t.equal(returnval.name,"ImageSequencer Wrapper", "Wrapper is returned"); + t.equal(returnval.images[0],"image4","Image scope is defined"); + t.equal(sequencer.images.image4.steps.length,1); + t.end(); + }); }); test('removeSteps is two-way chainable without loadImages.', function (t){ @@ -59,12 +67,15 @@ test('removeSteps is two-way chainable without loadImages.', function (t){ }); test('insertSteps is two-way chainable.', function (t){ - var returnval = sequencer.loadImage(red).insertSteps(1,'invert'); - t.equal(returnval.name,"ImageSequencer Wrapper","Wrapper is returned"); - t.equal(returnval.images[0],"image5","Image scope is defined"); - t.equal(sequencer.images.image5.steps.length,2); - t.equal(sequencer.images.image5.steps[1].options.name,"invert","Correct Step Inserrted"); - t.end(); + sequencer.loadImage(red,function() { + var returnval = this; + this.insertSteps(1,'invert'); + t.equal(returnval.name,"ImageSequencer Wrapper","Wrapper is returned"); + t.equal(returnval.images[0],"image5","Image scope is defined"); + t.equal(sequencer.images.image5.steps.length,2); + t.equal(sequencer.images.image5.steps[1].options.name,"invert","Correct Step Inserrted"); + t.end(); + }); }); test('insertSteps is two-way chainable without loadImages.', function (t){ diff --git a/test/image-manip.js b/test/image-manip.js index 20da143c..14d4a292 100644 --- a/test/image-manip.js +++ b/test/image-manip.js @@ -10,11 +10,10 @@ require('../src/ImageSequencer.js'); //require image files as DataURLs so they can be tested alike on browser and Node. var sequencer = ImageSequencer({ ui: false }); -var image = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAQABADASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAf/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAABgj/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABykX//Z"; var test_png = require('../examples/test.png.js'); var test_gif = require('../examples/test.gif.js'); -sequencer.loadImages(image); +sequencer.loadImages(test_png); sequencer.addSteps(['do-nothing-pix','invert','invert']); test("Preload", function(t) { @@ -34,15 +33,19 @@ test("Twice inverted image is identical to original image", function (t) { }); test("PixelManipulation works for PNG images", function (t) { - sequencer.loadImages(test_png).addSteps('invert').run(function(out){ - t.equal(1,1) - t.end(); + sequencer.loadImages(test_png,function(){ + this.addSteps('invert').run(function(out){ + t.equal(1,1) + t.end(); + }); }); }); test("PixelManipulation works for GIF images", function (t) { - sequencer.loadImages(test_gif).addSteps('invert').run(function(out){ - t.equal(1,1) - t.end(); + sequencer.loadImages(test_gif,function(){ + this.addSteps('invert').run(function(out){ + t.equal(1,1) + t.end(); + }); }); }); diff --git a/test/image-sequencer.js b/test/image-sequencer.js index 3c52423b..892db5c3 100644 --- a/test/image-sequencer.js +++ b/test/image-sequencer.js @@ -42,7 +42,7 @@ test('loadImages loads a DataURL image and creates a step.', function (t){ test('loadImages loads a PATH image and creates a step. (NodeJS)', function (t){ if(sequencer.options.inBrowser){ - t.equal("not applicable","not applicable","Not applicable for Browser"); + t.equal(1,1,"Not applicable for Browser"); t.end(); } else {