mirror of
https://github.com/publiclab/image-sequencer.git
synced 2025-12-13 11:50:02 +01:00
Modularization
This commit is contained in:
11
README.md
11
README.md
@@ -51,10 +51,13 @@ loadImages accepts 1, 2, or 3 parameters.
|
|||||||
* 1/2 parameters (JSON) :
|
* 1/2 parameters (JSON) :
|
||||||
```js
|
```js
|
||||||
sequencer.loadImages({
|
sequencer.loadImages({
|
||||||
image_name_1: image_src,
|
images: {
|
||||||
image_name_2: image_src,
|
image_name_1: image_src,
|
||||||
...
|
image_name_2: image_src,
|
||||||
}, optional_callback);
|
...
|
||||||
|
},
|
||||||
|
callback: optional_callback
|
||||||
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
### Adding Steps on Images
|
### Adding Steps on Images
|
||||||
|
|||||||
4
index.js
4
index.js
@@ -1,11 +1,11 @@
|
|||||||
console.log('\x1b[31m%s\x1b[0m',"This is the output of the module");
|
console.log('\x1b[31m%s\x1b[0m',"This is the output of the module");
|
||||||
require('./src/ImageSequencer');
|
require('./src/ImageSequencer');
|
||||||
sequencer = ImageSequencer();
|
sequencer = ImageSequencer();
|
||||||
sequencer.loadImages({red:'examples/red.jpg'},function(){
|
sequencer.loadImages({images:{red:'examples/red.jpg'},callback:function(){
|
||||||
sequencer.addSteps(['do-nothing','do-nothing-pix','do-nothing-pix','ndvi-red']);
|
sequencer.addSteps(['do-nothing','do-nothing-pix','do-nothing-pix','ndvi-red']);
|
||||||
sequencer.removeSteps(1);
|
sequencer.removeSteps(1);
|
||||||
sequencer.insertSteps({
|
sequencer.insertSteps({
|
||||||
red: [{index: -1, name: 'do-nothing', o:{}}]
|
red: [{index: -1, name: 'do-nothing', o:{}}]
|
||||||
});
|
});
|
||||||
sequencer.run();
|
sequencer.run();
|
||||||
});
|
}});
|
||||||
|
|||||||
33
src/AddStep.js
Normal file
33
src/AddStep.js
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
function AddStep(ref, image, name, o) {
|
||||||
|
|
||||||
|
function addStep(image, name, o_) {
|
||||||
|
ref.log('\x1b[36m%s\x1b[0m','adding step \"' + name + '\" to \"' + image + '\".');
|
||||||
|
|
||||||
|
o = {};
|
||||||
|
o.id = ref.options.sequencerCounter++; //Gives a Unique ID to each step
|
||||||
|
o.name = o_.name || name;
|
||||||
|
o.selector = o_.selector || 'ismod-' + name;
|
||||||
|
o.container = o_.container || ref.options.selector;
|
||||||
|
o.image = image;
|
||||||
|
|
||||||
|
var module = ref.modules[name].call(ref.images,o);
|
||||||
|
ref.images[image].steps.push(module);
|
||||||
|
|
||||||
|
|
||||||
|
function defaultSetupModule() {
|
||||||
|
if (ref.options.ui && ref.options.ui!="none") module.options.ui = ref.options.ui({
|
||||||
|
selector: o.selector,
|
||||||
|
title: module.options.title,
|
||||||
|
id: o.id
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (module.hasOwnProperty('setup')) module.setup(); // add a default UI, unless the module has one specified
|
||||||
|
else defaultSetupModule.apply(module); // run default setup() in scope of module (is this right?)
|
||||||
|
|
||||||
|
// tell the UI that a step has been added.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
addStep(image, name, o);
|
||||||
|
}
|
||||||
|
module.exports = AddStep;
|
||||||
@@ -13,7 +13,13 @@ function makeArray(input) {
|
|||||||
function copy(a) {
|
function copy(a) {
|
||||||
if (!typeof(a) == "object") return a;
|
if (!typeof(a) == "object") return a;
|
||||||
if (objTypeOf(a) == "Array") return a.slice();
|
if (objTypeOf(a) == "Array") return a.slice();
|
||||||
if (objTypeOf(a) == "Object") return JSON.parse(JSON.stringify(a));
|
if (objTypeOf(a) == "Object") {
|
||||||
|
var b = {};
|
||||||
|
for (v in a) {
|
||||||
|
b[v] = copy(a[v]);
|
||||||
|
}
|
||||||
|
return b;
|
||||||
|
}
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -32,6 +38,9 @@ function formatInput(args,format,images) {
|
|||||||
format = ['o_string_a', 'number', 'string', 'o_object'];
|
format = ['o_string_a', 'number', 'string', 'o_object'];
|
||||||
else if (format == "r")
|
else if (format == "r")
|
||||||
format = ['o_string_a', 'o_number'];
|
format = ['o_string_a', 'o_number'];
|
||||||
|
else if (format == "l")
|
||||||
|
format = ['string','string','o_function'];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
formats:
|
formats:
|
||||||
addSteps :: o_image_a, name_a, o_o
|
addSteps :: o_image_a, name_a, o_o
|
||||||
@@ -42,11 +51,14 @@ function formatInput(args,format,images) {
|
|||||||
o_string_a, number, string, o_object => { image: [{index,name,o}] }
|
o_string_a, number, string, o_object => { image: [{index,name,o}] }
|
||||||
run :: o_image_a, o_from
|
run :: o_image_a, o_from
|
||||||
o_string_a, o_number => { image: index }
|
o_string_a, o_number => { image: index }
|
||||||
|
loadImages :: image, src, o_function
|
||||||
|
string, string, o_function => { images: [{image:src}], callback }
|
||||||
|
|
||||||
optionals:
|
optionals:
|
||||||
image: o_string_a
|
image: o_string_a
|
||||||
options: o_object
|
options: o_object
|
||||||
from: o_number
|
from: o_number
|
||||||
|
callback: o_function
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if(format[format.length-1] == "o_object") {
|
if(format[format.length-1] == "o_object") {
|
||||||
@@ -57,6 +69,11 @@ function formatInput(args,format,images) {
|
|||||||
if(typeof(args[args.length-1]) != "number" && objTypeOf(args[0])!="Object")
|
if(typeof(args[args.length-1]) != "number" && objTypeOf(args[0])!="Object")
|
||||||
args.push(1);
|
args.push(1);
|
||||||
}
|
}
|
||||||
|
else if (format[format.length-1] == "o_function") {
|
||||||
|
if(objTypeOf(args[args.length-1]) != "Function" && objTypeOf(args[0])!="Object")
|
||||||
|
args.push(function(){});
|
||||||
|
}
|
||||||
|
|
||||||
if(format[0] == "o_string_a") {
|
if(format[0] == "o_string_a") {
|
||||||
if(args.length == format.length - 1) {
|
if(args.length == format.length - 1) {
|
||||||
insert = false;
|
insert = false;
|
||||||
@@ -80,13 +97,21 @@ function formatInput(args,format,images) {
|
|||||||
|
|
||||||
if (args.length == 1) {
|
if (args.length == 1) {
|
||||||
json_q = copy(args[0]);
|
json_q = copy(args[0]);
|
||||||
if(!(format_i == "r"))
|
if(!(format_i == "r" || format_i == "l")) {
|
||||||
for (img in json_q) {
|
for (img in json_q)
|
||||||
json_q[img] = makeArray(json_q[img]);
|
json_q[img] = makeArray(json_q[img]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (format_i == "r")
|
else if (format_i == "r") {
|
||||||
for (img in args[0]) json_q[args[0][img]] = args[1];
|
for (img in args[0]) json_q[args[0][img]] = args[1];
|
||||||
|
}
|
||||||
|
else if (format_i == "l") {
|
||||||
|
json_q = {
|
||||||
|
images: {},
|
||||||
|
callback: args[2]
|
||||||
|
}
|
||||||
|
json_q.images[args[0]] = args[1];
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
for (img in args[0]) {
|
for (img in args[0]) {
|
||||||
image = args[0][img];
|
image = args[0][img];
|
||||||
|
|||||||
@@ -8,15 +8,6 @@ ImageSequencer = function ImageSequencer(options) {
|
|||||||
// if (options.inBrowser) options.ui = options.ui || require('./UserInterface');
|
// if (options.inBrowser) options.ui = options.ui || require('./UserInterface');
|
||||||
options.sequencerCounter = 0;
|
options.sequencerCounter = 0;
|
||||||
|
|
||||||
function CImage(src) {
|
|
||||||
datauri = (options.inBrowser)?(src):require('urify')(src);
|
|
||||||
image = {
|
|
||||||
src: datauri,
|
|
||||||
format: datauri.split(':')[1].split(';')[0].split('/')[1]
|
|
||||||
}
|
|
||||||
return image;
|
|
||||||
}
|
|
||||||
|
|
||||||
function objTypeOf(object){
|
function objTypeOf(object){
|
||||||
return Object.prototype.toString.call(object).split(" ")[1].slice(0,-1)
|
return Object.prototype.toString.call(object).split(" ")[1].slice(0,-1)
|
||||||
}
|
}
|
||||||
@@ -31,7 +22,13 @@ ImageSequencer = function ImageSequencer(options) {
|
|||||||
function copy(a) {
|
function copy(a) {
|
||||||
if (!typeof(a) == "object") return a;
|
if (!typeof(a) == "object") return a;
|
||||||
if (objTypeOf(a) == "Array") return a.slice();
|
if (objTypeOf(a) == "Array") return a.slice();
|
||||||
if (objTypeOf(a) == "Object") return JSON.parse(JSON.stringify(a));
|
if (objTypeOf(a) == "Object") {
|
||||||
|
var b = {};
|
||||||
|
for (v in a) {
|
||||||
|
b[v] = copy(a[v]);
|
||||||
|
}
|
||||||
|
return b;
|
||||||
|
}
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,34 +47,6 @@ ImageSequencer = function ImageSequencer(options) {
|
|||||||
// if (options.imageSelect || options.inBrowser) addStep('image-select');
|
// if (options.imageSelect || options.inBrowser) addStep('image-select');
|
||||||
// else if (options.imageUrl) loadImage(imageUrl);
|
// else if (options.imageUrl) loadImage(imageUrl);
|
||||||
|
|
||||||
function addStep(image, name, o_) {
|
|
||||||
log('\x1b[36m%s\x1b[0m','adding step \"' + name + '\" to \"' + image + '\".');
|
|
||||||
|
|
||||||
o = {};
|
|
||||||
o.id = options.sequencerCounter++; //Gives a Unique ID to each step
|
|
||||||
o.name = o_.name || name;
|
|
||||||
o.selector = o_.selector || 'ismod-' + name;
|
|
||||||
o.container = o_.container || options.selector;
|
|
||||||
o.image = image;
|
|
||||||
|
|
||||||
var module = modules[name].call(this.images,o);
|
|
||||||
images[image].steps.push(module);
|
|
||||||
|
|
||||||
|
|
||||||
function defaultSetupModule() {
|
|
||||||
if (options.ui && options.ui!="none") module.options.ui = options.ui({
|
|
||||||
selector: o.selector,
|
|
||||||
title: module.options.title,
|
|
||||||
id: o.id
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (module.hasOwnProperty('setup')) module.setup(); // add a default UI, unless the module has one specified
|
|
||||||
else defaultSetupModule.apply(module); // run default setup() in scope of module (is this right?)
|
|
||||||
|
|
||||||
// tell the UI that a step has been added.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function addSteps(){
|
function addSteps(){
|
||||||
args = [];
|
args = [];
|
||||||
json_q = {};
|
json_q = {};
|
||||||
@@ -85,8 +54,7 @@ ImageSequencer = function ImageSequencer(options) {
|
|||||||
json_q = formatInput.call(this,args,"+");
|
json_q = formatInput.call(this,args,"+");
|
||||||
for (i in json_q)
|
for (i in json_q)
|
||||||
for (j in json_q[i])
|
for (j in json_q[i])
|
||||||
addStep.call(this,i,json_q[i][j].name,json_q[i][j].o);
|
require("./AddStep")(this,i,json_q[i][j].name,json_q[i][j].o);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeStep(image,index) {
|
function removeStep(image,index) {
|
||||||
@@ -96,7 +64,6 @@ ImageSequencer = function ImageSequencer(options) {
|
|||||||
images[image].steps.splice(index,1);
|
images[image].steps.splice(index,1);
|
||||||
}
|
}
|
||||||
//tell the UI a step has been removed
|
//tell the UI a step has been removed
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeSteps(image,index) {
|
function removeSteps(image,index) {
|
||||||
@@ -114,34 +81,6 @@ ImageSequencer = function ImageSequencer(options) {
|
|||||||
// this.run(run); // This is creating problems
|
// this.run(run); // This is creating problems
|
||||||
}
|
}
|
||||||
|
|
||||||
function insertStep(image, index, name, o) {
|
|
||||||
log('\x1b[36m%s\x1b[0m','inserting step \"' + name + '\" to \"' + image + '\" at \"'+index+'\".');
|
|
||||||
|
|
||||||
o = o || {};
|
|
||||||
o.id = options.sequencerCounter++; //Gives a Unique ID to each step
|
|
||||||
o.name = o.name || name;
|
|
||||||
o.selector = o.selector || 'ismod-' + name;
|
|
||||||
o.container = o.container || options.selector;
|
|
||||||
o.image = image;
|
|
||||||
|
|
||||||
var module = modules[name](o);
|
|
||||||
images[image].steps.splice(index, 0, module);
|
|
||||||
|
|
||||||
function defaultSetupModule() {
|
|
||||||
if (options.ui && options.ui!="none") module.options.ui = options.ui({
|
|
||||||
selector: o.selector,
|
|
||||||
title: module.options.title,
|
|
||||||
id: o.id
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (module.hasOwnProperty('setup')) module.setup(); // add a default UI, unless the module has one specified
|
|
||||||
else defaultSetupModule.apply(module); // run default setup() in scope of module (is this right?)
|
|
||||||
|
|
||||||
// tell the UI that a step has been inserted.
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function insertSteps(image, index, name, o) {
|
function insertSteps(image, index, name, o) {
|
||||||
run = {};
|
run = {};
|
||||||
this_ = this;
|
this_ = this;
|
||||||
@@ -154,7 +93,7 @@ ImageSequencer = function ImageSequencer(options) {
|
|||||||
var details = json_q[img];
|
var details = json_q[img];
|
||||||
details = details.sort(function(a,b){return b.index-a.index});
|
details = details.sort(function(a,b){return b.index-a.index});
|
||||||
for (i in details)
|
for (i in details)
|
||||||
insertStep(img,details[i].index,details[i].name,details[i].o);
|
require("./InsertStep")(this,img,details[i].index,details[i].name,details[i].o);
|
||||||
// run[img] = details[details.length-1].index;
|
// run[img] = details[details.length-1].index;
|
||||||
}
|
}
|
||||||
// this.run(run); // This is Creating issues
|
// this.run(run); // This is Creating issues
|
||||||
@@ -165,92 +104,25 @@ ImageSequencer = function ImageSequencer(options) {
|
|||||||
this_ = this;
|
this_ = this;
|
||||||
args = [];
|
args = [];
|
||||||
for (var arg in arguments) args.push(copy(arguments[arg]));
|
for (var arg in arguments) args.push(copy(arguments[arg]));
|
||||||
|
callback = function() {};
|
||||||
for (var arg in args)
|
for (var arg in args)
|
||||||
if(objTypeOf(args[arg]) == "Function")
|
if(objTypeOf(args[arg]) == "Function")
|
||||||
var callback = args.splice(arg,1)[0];
|
callback = args.splice(arg,1)[0];
|
||||||
function drawStep(drawarray,pos) {
|
|
||||||
if(pos==drawarray.length) if(objTypeOf(callback)=='Function') callback();
|
|
||||||
if(pos>=drawarray.length) return true;
|
|
||||||
image = drawarray[pos].image;
|
|
||||||
i = drawarray[pos].i;
|
|
||||||
input = images[image].steps[i-1].output;
|
|
||||||
images[image].steps[i].draw(copy(input),function(){
|
|
||||||
drawStep(drawarray,++pos);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function drawSteps(json_q) {
|
|
||||||
drawarray = [];
|
|
||||||
for (image in json_q) {
|
|
||||||
no_steps = images[image].steps.length;
|
|
||||||
init = json_q[image];
|
|
||||||
for(i = 0; i < no_steps-init; i++) {
|
|
||||||
drawarray.push({image: image,i: init+i});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
drawStep(drawarray,0);
|
|
||||||
}
|
|
||||||
function filter(json_q){
|
|
||||||
for (image in json_q) {
|
|
||||||
if (json_q[image]==0 && this_.images[image].steps.length==1)
|
|
||||||
delete json_q[image];
|
|
||||||
else json_q[image]++;
|
|
||||||
}
|
|
||||||
for (image in json_q) {
|
|
||||||
prevstep = images[image].steps[json_q[image]-1];
|
|
||||||
while (typeof(prevstep) == "undefined" || typeof(prevstep.output) == "undefined") {
|
|
||||||
prevstep = images[image].steps[(--json_q[image]) - 1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return json_q;
|
|
||||||
}
|
|
||||||
|
|
||||||
json_q = formatInput.call(this,args,"r");
|
json_q = formatInput.call(this,args,"r");
|
||||||
json_q = filter(json_q);
|
|
||||||
drawSteps(json_q);
|
|
||||||
}
|
|
||||||
|
|
||||||
function loadImage(name, src, callback) {
|
require('./Run')(this, json_q, callback);
|
||||||
image = {
|
|
||||||
src: src,
|
|
||||||
steps: [{
|
|
||||||
options: {
|
|
||||||
id: options.sequencerCounter++,
|
|
||||||
name: "load-image",
|
|
||||||
title: "Load Image"
|
|
||||||
},
|
|
||||||
draw: function() {
|
|
||||||
if(arguments.length==1){
|
|
||||||
this.outputData = CImage(arguments[0]);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
output: CImage(src)
|
|
||||||
}]
|
|
||||||
};
|
|
||||||
images[name] = image;
|
|
||||||
if (callback) callback();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadImages() {
|
function loadImages() {
|
||||||
if (arguments.length == 1) {
|
args = [];
|
||||||
for (image in arguments[0])
|
for (arg in arguments) args.push(copy(arguments[arg]));
|
||||||
loadImage(image,arguments[0][image]);
|
json_q = formatInput.call(this,args,"l");
|
||||||
}
|
|
||||||
else if (arguments.length == 2) {
|
for (i in json_q.images)
|
||||||
if (objTypeOf(arguments[1]) == "Function") {
|
require('./LoadImage')(this,i,json_q.images[i])
|
||||||
for (image in arguments[0]) {
|
|
||||||
loadImage(image,arguments[0][image])
|
json_q.callback();
|
||||||
}
|
|
||||||
arguments[1]();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
loadImage(arguments[0],arguments[1])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (arguments.length == 3) {
|
|
||||||
loadImage(arguments[0],arguments[1],arguments[2])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -262,9 +134,11 @@ ImageSequencer = function ImageSequencer(options) {
|
|||||||
run: run,
|
run: run,
|
||||||
modules: modules,
|
modules: modules,
|
||||||
images: images,
|
images: images,
|
||||||
ui: options.ui
|
ui: options.ui,
|
||||||
|
log: log,
|
||||||
|
objTypeOf: objTypeOf,
|
||||||
|
copy: copy
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = ImageSequencer;
|
module.exports = ImageSequencer;
|
||||||
|
|||||||
35
src/InsertStep.js
Normal file
35
src/InsertStep.js
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
function InsertStep(ref, image, index, name, o) {
|
||||||
|
|
||||||
|
function insertStep(image, index, name, o) {
|
||||||
|
ref.log('\x1b[36m%s\x1b[0m','inserting step \"' + name + '\" to \"' + image + '\" at \"'+index+'\".');
|
||||||
|
|
||||||
|
o = o || {};
|
||||||
|
o.id = ref.options.sequencerCounter++; //Gives a Unique ID to each step
|
||||||
|
o.name = o.name || name;
|
||||||
|
o.selector = o.selector || 'ismod-' + name;
|
||||||
|
o.container = o.container || ref.options.selector;
|
||||||
|
o.image = image;
|
||||||
|
|
||||||
|
if(index==-1) index = ref.images[image].steps.length;
|
||||||
|
|
||||||
|
var module = ref.modules[name](o);
|
||||||
|
ref.images[image].steps.splice(index, 0, module);
|
||||||
|
|
||||||
|
function defaultSetupModule() {
|
||||||
|
if (ref.options.ui && ref.options.ui!="none") module.options.ui = ref.options.ui({
|
||||||
|
selector: o.selector,
|
||||||
|
title: module.options.title,
|
||||||
|
id: o.id
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (module.hasOwnProperty('setup')) module.setup(); // add a default UI, unless the module has one specified
|
||||||
|
else defaultSetupModule.apply(module); // run default setup() in scope of module (is this right?)
|
||||||
|
|
||||||
|
// tell the UI that a step has been inserted.
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
insertStep(image, index, name, o);
|
||||||
|
}
|
||||||
|
module.exports = InsertStep;
|
||||||
36
src/LoadImage.js
Normal file
36
src/LoadImage.js
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
function LoadImage(ref, name, src) {
|
||||||
|
function CImage(src) {
|
||||||
|
datauri = (ref.options.inBrowser)?(src):require('urify')(src);
|
||||||
|
image = {
|
||||||
|
src: datauri,
|
||||||
|
format: datauri.split(':')[1].split(';')[0].split('/')[1]
|
||||||
|
}
|
||||||
|
return image;
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadImage(name, src) {
|
||||||
|
image = {
|
||||||
|
src: src,
|
||||||
|
steps: [{
|
||||||
|
options: {
|
||||||
|
id: ref.options.sequencerCounter++,
|
||||||
|
name: "load-image",
|
||||||
|
title: "Load Image"
|
||||||
|
},
|
||||||
|
draw: function() {
|
||||||
|
if(arguments.length==1){
|
||||||
|
this.outputData = CImage(arguments[0]);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
output: CImage(src)
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
ref.images[name] = image;
|
||||||
|
}
|
||||||
|
|
||||||
|
return loadImage(name,src);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = LoadImage;
|
||||||
41
src/Run.js
Normal file
41
src/Run.js
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
function Run(ref, json_q, callback) {
|
||||||
|
|
||||||
|
function drawStep(drawarray,pos) {
|
||||||
|
if(pos==drawarray.length) if(ref.objTypeOf(callback)=='Function') callback();
|
||||||
|
if(pos>=drawarray.length) return true;
|
||||||
|
image = drawarray[pos].image;
|
||||||
|
i = drawarray[pos].i;
|
||||||
|
input = ref.images[image].steps[i-1].output;
|
||||||
|
ref.images[image].steps[i].draw(ref.copy(input),function(){
|
||||||
|
drawStep(drawarray,++pos);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function drawSteps(json_q) {
|
||||||
|
drawarray = [];
|
||||||
|
for (image in json_q) {
|
||||||
|
no_steps = ref.images[image].steps.length;
|
||||||
|
init = json_q[image];
|
||||||
|
for(i = 0; i < no_steps-init; i++) {
|
||||||
|
drawarray.push({image: image,i: init+i});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
drawStep(drawarray,0);
|
||||||
|
}
|
||||||
|
function filter(json_q){
|
||||||
|
for (image in json_q) {
|
||||||
|
if (json_q[image]==0 && ref.images[image].steps.length==1)
|
||||||
|
delete json_q[image];
|
||||||
|
else json_q[image]++;
|
||||||
|
}
|
||||||
|
for (image in json_q) {
|
||||||
|
prevstep = ref.images[image].steps[json_q[image]-1];
|
||||||
|
while (typeof(prevstep) == "undefined" || typeof(prevstep.output) == "undefined") {
|
||||||
|
prevstep = ref.images[image].steps[(--json_q[image]) - 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return json_q;
|
||||||
|
}
|
||||||
|
json_q = filter(json_q);
|
||||||
|
drawSteps(json_q);
|
||||||
|
}
|
||||||
|
module.exports = Run;
|
||||||
Reference in New Issue
Block a user