window.onload = function() {
sequencer = ImageSequencer();
// Load information of all modules (Name, Inputs, Outputs)
var modulesInfo = sequencer.modulesInfo();
// Add modules to the addStep dropdown
for(var m in modulesInfo) {
$('#addStep select').append(
''
);
}
// Initial definitions
var steps = document.querySelector('#steps');
var parser = new DOMParser();
var reader = new FileReader();
initial = "images/grid.png";
// Set the UI in sequencer. This Will generate HTML based on
// Image Sequencer events :
// onSetup : Called every time a step is added
// onDraw : Called every time a step starts draw
// onComplete : Called every time a step finishes drawing
// onRemove : Called everytime a step is removed
// The variable 'step' stores useful data like input and
// output values, step information.
// See documetation for more details.
sequencer.setUI({
onSetup: function(step) {
step.ui = '\
\
\
'+step.name+'
\
'+(step.description || '')+'
\
\
\
\
\
\
';
var tools =
'
\
\
';
step.ui = parser.parseFromString(step.ui,'text/html');
step.ui = step.ui.querySelector('div.row');
step.imgElement = step.ui.querySelector('img');
if(sequencer.modulesInfo().hasOwnProperty(step.name)) {
var inputs = sequencer.modulesInfo(step.name).inputs;
var outputs = sequencer.modulesInfo(step.name).outputs;
var io = Object.assign(inputs,outputs);
for (var i in io) {
var div = document.createElement('div');
div.className = "row";
div.setAttribute('name',i);
div.innerHTML = "
" + i + ": " + "
";
step.ui.querySelector('div.details').appendChild(div);
}
}
if(step.name != "load-image")
step.ui.querySelector('div.details').appendChild(
parser.parseFromString(tools,'text/html')
.querySelector('div')
);
steps.appendChild(step.ui);
},
onComplete: function(step) {
step.imgElement.src = step.output;
if(sequencer.modulesInfo().hasOwnProperty(step.name)) {
var inputs = sequencer.modulesInfo(step.name).inputs;
var outputs = sequencer.modulesInfo(step.name).outputs;
for (var i in inputs) {
step.ui.querySelector('div[name="'+i+'"] span')
.innerHTML = step.options[i];
}
for (var i in outputs) {
step.ui.querySelector('div[name="'+i+'"] span')
.innerHTML = step[i];
}
}
},
onRemove: function(step) {
step.ui.remove();
}
});
sequencer.loadImage('images/grid.png', function loadImageUI(){
// look up needed steps from Url Hash:
var stepsFromHash = getUrlHashParameter('steps').split(',')
stepsFromHash.forEach(function eachStep(step) {
sequencer.addSteps(step)
});
sequencer.run();
});
// File handling
$('#addStep select').on('change', selectNewStepUI);
function selectNewStepUI() {
$('#options').html('');
var m = $('#addStep select').val();
for(var input in modulesInfo[m].inputs) {
$('#options').append(
'
\
\
'+input+':\
\
\
\
\
'
);
}
}
function addStepUI() {
var options = {};
var inputs = $('#options input');
$.each(inputs, function() {
options[this.name] = $(this).val();
});
if($('#addStep select').val()=="none") return;
// add to URL hash too
setUrlHashParameter('steps', getUrlHashParameter('steps') + ',' + $('#addStep select').val())
sequencer.addSteps($('#addStep select').val(),options).run();
}
$('#addStep button').on('click', addStepUI);
function removeStepUI(){
var index = $('button.remove').index(this) + 1;
sequencer.removeSteps(index).run();
// remove from URL hash too
var urlHash = getUrlHashParameter('steps').split(',');
urlHash.splice(index - 1, 1);
setUrlHashParameter("steps", urlHash.join(','));
}
$('body').on('click','button.remove', removeStepUI);
// Load-image drag/drop handling
// File handling
function handleFile(e) {
e.preventDefault();
e.stopPropagation(); // stops the browser from redirecting.
if (e.target && e.target.files) var file = e.target.files[0];
else var file = e.dataTransfer.files[0];
if(!file) return;
reader.onload = function(){
var loadStep = sequencer.images.image1.steps[0];
loadStep.output.src = reader.result;
sequencer.run(0);
loadStep.options.step.imgElement.src = reader.result;
}
reader.readAsDataURL(file);
}
$('#file').on('change', handleFile);
var select = $('#imageSelect');
select[0].addEventListener('drop', handleFile, false);
select.on('dragover', function(e) {
e.stopPropagation();
e.preventDefault();
e.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.
}, false);
select.on('dragenter', function(e) {
select.addClass('hover');
});
select.on('dragleave', function(e) {
select.removeClass('hover');
});
}