diff --git a/examples/lib/defaultHtmlStepUi.js b/examples/lib/defaultHtmlStepUi.js index d4349354..b24e34d0 100644 --- a/examples/lib/defaultHtmlStepUi.js +++ b/examples/lib/defaultHtmlStepUi.js @@ -31,6 +31,7 @@ function DefaultHtmlStepUi(_sequencer, options) { '\
Press apply to see changes
" + "Press apply to see changes
" ); - function focusInput() { - $(step.ui.querySelector("div.details .target")).focus(); - } - - function saveOptions(e) { - e.preventDefault(); - $(step.ui.querySelector("div.details")) - .find("input,select") - .each(function(i, input) { - step.options[$(input).attr("name")] = input.value; - }); - _sequencer.run({ index: step.index - 1 }); - - // modify the url hash - setUrlHashParameter("steps", _sequencer.toString()); - // disable the save button - $(step.ui.querySelector("div.details .btn-save")).prop("disabled", true); - } - - // on clicking Save in the details pane of the step - $(step.ui.querySelector("div.details .btn-save")).click(saveOptions); - $(step.ui.querySelector("div.details .input-form")).on('submit', saveOptions); + } if (step.name != "load-image") { @@ -184,6 +156,63 @@ function DefaultHtmlStepUi(_sequencer, options) { $("#load-image").append(step.ui); } + + + function saveOptions(e) { + e.preventDefault(); + if (optionsChanged){ + $(step.ui.querySelector("div.details")) + .find("input,select") + .each(function(i, input) { + $(input) + .data('initValue', $(input).val()) + .data('hasChangedBefore', false); + step.options[$(input).attr("name")] = $(input).val(); + }); + _sequencer.run({ index: step.index - 1 }); + + // modify the url hash + setUrlHashParameter("steps", _sequencer.toString()); + + // disable the save button + $(step.ui.querySelector('.btn-save')).prop('disabled', true); + optionsChanged = false; + changedInputs = 0; + } + } + + function handleInputValueChange(currentValue, initValue, hasChangedBefore) { + var inputChanged = !(isNaN(initValue) || isNaN(currentValue) ? currentValue === initValue : currentValue - initValue === 0); + changedInputs += hasChangedBefore ? inputChanged ? 0 : -1 : inputChanged ? 1 : 0; + optionsChanged = changedInputs > 0; + + $(step.ui.querySelector('.btn-save')).prop('disabled', !optionsChanged); + return inputChanged; + } + + var + changedInputs = 0, + optionsChanged = false; + $(step.ui.querySelector('.input-form')).on('submit', saveOptions); + $(step.ui.querySelectorAll('.target')).each(function(i, input) { + $(input) + .data('initValue', $(input).val()) + .data('hasChangedBefore', false) + .on('input', function() { + $(this) + .focus() + .data('hasChangedBefore', + handleInputValueChange( + $(this).val(), + $(this).data('initValue'), + $(this).data('hasChangedBefore') + ) + ) + }) + }) + + + $('input[type="range"]').on('input', function() { $(this).next().html($(this).val()); }) @@ -223,17 +252,19 @@ function DefaultHtmlStepUi(_sequencer, options) { for (var i in inputs) { if (step.options[i] !== undefined) { if (inputs[i].type.toLowerCase() === "input") - step.ui.querySelector('div[name="' + i + '"] input').value = - step.options[i]; + $(step.ui.querySelector('div[name="' + i + '"] input')) + .val(step.options[i]) + .data('initValue', step.options[i]); if (inputs[i].type.toLowerCase() === "select") - step.ui.querySelector('div[name="' + i + '"] select').value = - step.options[i]; + $(step.ui.querySelector('div[name="' + i + '"] select')) + .val(step.options[i]) + .data('initValue', step.options[i]); } } for (var i in outputs) { if (step[i] !== undefined) - step.ui.querySelector('div[name="' + i + '"] input').value = - step[i]; + $(step.ui.querySelector('div[name="' + i + '"] input')) + .val(step[i]); } } }