in seriously.js [1821:1903]
function setInput(inputName, input) {
var lookup, value, effectInput, i;
effectInput = me.effect.inputs[inputName];
lookup = me.inputElements[inputName];
if (typeof input === 'string' && isNaN(input)) {
if (effectInput.type === 'enum') {
if (!effectInput.options.hasOwnProperty(input)) {
input = getElement(input, ['select']);
}
} else if (effectInput.type === 'number' || effectInput.type === 'boolean') {
input = getElement(input, ['input', 'select']);
} else if (effectInput.type === 'image') {
input = getElement(input, ['canvas', 'img', 'video']);
}
//todo: color? date/time?
}
if (input instanceof HTMLInputElement || input instanceof HTMLSelectElement) {
value = input.value;
if (lookup && lookup.element !== input) {
lookup.element.removeEventListener('change', lookup.listener, true);
lookup.element.removeEventListener('input', lookup.listener, true);
delete me.inputElements[inputName];
lookup = null;
}
if (!lookup) {
lookup = {
element: input,
listener: (function (name, element) {
return function () {
var oldValue, newValue;
if (input.type === 'checkbox') {
//special case for check box
oldValue = input.checked;
} else {
oldValue = element.value;
}
newValue = me.setInput(name, oldValue);
//special case for color type
if (effectInput.type === 'color') {
newValue = colorArrayToHex(newValue).substr(0, 7);
}
//if input validator changes our value, update HTML Element
//todo: make this optional...somehow
if (newValue !== oldValue) {
element.value = newValue;
}
};
}(inputName, input))
};
me.inputElements[inputName] = lookup;
if (input.type === 'range') {
input.addEventListener('input', lookup.listener, true);
input.addEventListener('change', lookup.listener, true);
} else {
input.addEventListener('change', lookup.listener, true);
}
}
if (lookup && input.type === 'checkbox') {
value = input.checked;
}
} else {
if (lookup) {
lookup.element.removeEventListener('change', lookup.listener, true);
lookup.element.removeEventListener('input', lookup.listener, true);
delete me.inputElements[inputName];
}
value = input;
}
me.setInput(inputName, value);
return me.inputs[inputName];
}