// 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. function stepRemovedNotify() { if ($('#stepRemovedNotification').length == 0) { var notification = document.createElement('span'); notification.innerHTML = ' Step Removed '; notification.id = 'stepRemovedNotification'; $('body').append(notification); } $('#stepRemovedNotification').fadeIn(500).delay(200).fadeOut(500); } function DefaultHtmlStepUi(_sequencer, options) { options = options || {}; var stepsEl = options.stepsEl || document.querySelector("#steps"); var selectStepSel = options.selectStepSel = options.selectStepSel || "#selectStep"; function onSetup(step) { if (step.options && step.options.description) step.description = step.options.description; step.ui = '\
\ '; var tools = 'Press save 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") { step.ui .querySelector("div.details") .appendChild( parser.parseFromString(tools, "text/html").querySelector("div") ); setTimeout(()=>{ $(step.ui.querySelectorAll(".insert-step")).on('click',()=>util.insertStep(step.ID)); },500) } stepsEl.appendChild(step.ui); var inputs = document.querySelectorAll('input[type="range"]') for(i in inputs) inputs[i].oninput = function(e) { e.target.nextSibling.innerHTML = e.target.value; } } function onDraw(step) { $(step.ui.querySelector(".load")).show(); $(step.ui.querySelector("img")).hide(); } function onComplete(step) { $(step.ui.querySelector(".load")).hide(); $(step.ui.querySelector("img")).show(); step.imgElement.src = step.output; var imgthumbnail = step.ui.querySelector(".img-thumbnail"); for(let index=0; index < step.linkElements.length; index++) { if(step.linkElements[index].contains(imgthumbnail)) step.linkElements[index].href = step.output; } // TODO: use a generalized version of this function fileExtension(output) { return output.split("/")[1].split(";")[0]; } for(let index=0; index < step.linkElements.length; index++) { step.linkElements[index].download = step.name + "." + fileExtension(step.output); step.linkElements[index].target = "_blank"; } // fill inputs with stored step options 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) { if (inputs[i].type.toLowerCase() === "input") step.ui.querySelector('div[name="' + i + '"] input').value = step.options[i]; if (inputs[i].type.toLowerCase() === "select") step.ui.querySelector('div[name="' + i + '"] select').value = step.options[i]; } } for (var i in outputs) { if (step[i] !== undefined) step.ui.querySelector('div[name="' + i + '"] input').value = step[i]; } } } function onRemove(step) { step.ui.remove(); } function getPreview() { return step.imgElement; } return { getPreview: getPreview, onSetup: onSetup, onComplete: onComplete, onRemove: onRemove, onDraw: onDraw } }