diff --git a/examples/demo.css b/examples/demo.css index dc3ab6ca..ff7ddcc3 100644 --- a/examples/demo.css +++ b/examples/demo.css @@ -45,7 +45,7 @@ h1 { } #dropzone input { - max-width: 100%; + max-width: 100%; } .step { @@ -56,6 +56,19 @@ h1 { margin-bottom: 20px; } +.load { + display: none; + position: absolute; + top: 0; + left: 0; + width: 200px; + height: 200px; + background: url(images/load.gif) center no-repeat; +} +.load.loading { + display: block; +} + .details { border-top: 3px solid #444; padding-left: 6px; diff --git a/examples/demo.js b/examples/demo.js index 7a41a05b..da024a58 100644 --- a/examples/demo.js +++ b/examples/demo.js @@ -39,6 +39,7 @@ window.onload = function() {

'+(step.description || '')+'

\ \
\ +
\ \
\ \ @@ -60,12 +61,28 @@ window.onload = function() { var outputs = sequencer.modulesInfo(step.name).outputs; var io = Object.assign(inputs, outputs); for (var i in io) { + var isInput = inputs.hasOwnProperty(i); + var ioUI = ""; + var inputDesc = (isInput)?inputs[i]:{}; + if (!isInput) { + ioUI += ""; + } + else if (inputDesc.type.toLowerCase() == "select") { + ioUI += ""; + } + else { + ioUI = ""; + } var div = document.createElement('div'); div.className = "row"; div.setAttribute('name', i); div.innerHTML = "
\ \ - \ + "+ioUI+"\
"; step.ui.querySelector('div.details').appendChild(div); } @@ -73,7 +90,7 @@ window.onload = function() { // on clicking Save in the details pane of the step $(step.ui.querySelector('div.details .btn-save')).click(function saveOptions() { - $(step.ui.querySelector('div.details')).find('input').each(function(i, input) { + $(step.ui.querySelector('div.details')).find('input,select').each(function(i, input) { step.options[$(input).attr('name')] = input.value; }); sequencer.run(); @@ -89,13 +106,21 @@ window.onload = function() { steps.appendChild(step.ui); }, + onDraw: function(step) { + step.ui.querySelector('.load').className = "load loading"; + }, + onComplete: function(step) { + step.ui.querySelector('.load').className = "load"; + 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) { - if (step.options[i] !== undefined) step.ui.querySelector('div[name="'+i+'"] input') + if (step.options[i] !== undefined && inputs[i].type.toLowerCase()!="select") step.ui.querySelector('div[name="'+i+'"] input') + .value = step.options[i]; + if (step.options[i] !== undefined) step.ui.querySelector('div[name="'+i+'"] select') .value = step.options[i]; } for (var i in outputs) { @@ -131,14 +156,25 @@ window.onload = function() { $('#options').html(''); var m = $('#addStep select').val(); for(var input in modulesInfo[m].inputs) { + var inputUI = ""; + var inputDesc = modulesInfo[m].inputs[input]; + if (inputDesc.type.toLowerCase() == "select") { + inputUI += ""; + } + else { + inputUI = ""; + } $('#options').append( '
\
\ '+input+':\
\
\ - \ + '+inputUI+'\
\
' ); @@ -148,7 +184,7 @@ window.onload = function() { function addStepUI() { var options = {}; - var inputs = $('#options input'); + var inputs = $('#options input, #options select'); $.each(inputs, function() { options[this.name] = $(this).val(); }); diff --git a/examples/images/load.gif b/examples/images/load.gif new file mode 100644 index 00000000..f3ea12d5 Binary files /dev/null and b/examples/images/load.gif differ diff --git a/examples/lib/imageSelection.js b/examples/lib/imageSelection.js index 7d09bdd5..b4cb149c 100644 --- a/examples/lib/imageSelection.js +++ b/examples/lib/imageSelection.js @@ -6,6 +6,8 @@ function setupFileHandling(_sequencer, dropzoneId, fileInputId) { fileInputId = fileInputId || "fileInput"; var fileInput = $('#' + fileInputId); + var reader = new FileReader(); + function handleFile(e) { e.preventDefault(); diff --git a/package.json b/package.json index cd56a1b4..2f531a09 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "image-sequencer", - "version": "0.1.1", + "version": "1.0.0", "description": "A modular JavaScript image manipulation library modeled on a storyboard.", "main": "src/ImageSequencer.js", "scripts": {