in seriously.js [4029:4108]
function setInput(inputName, def, input) {
var inputKey, lookup, value;
lookup = me.inputElements[inputName];
//todo: there is some duplicate code with Effect here. Consolidate.
if (typeof input === 'string' && isNaN(input)) {
if (def.type === 'enum') {
if (!def.options.hasOwnProperty(input)) {
input = getElement(input, ['select']);
}
} else if (def.type === 'number' || def.type === 'boolean') {
input = getElement(input, ['input', 'select']);
} else if (def.type === 'image') {
input = getElement(input, ['canvas', 'img', 'video']);
}
}
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 (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(inputName, oldValue);
//special case for color type
if (input.type === 'color') {
newValue = colorArrayToHex(newValue);
}
//if input validator changes our value, update HTML Element
//todo: make this optional...somehow
if (newValue !== oldValue) {
element.value = newValue;
}
};
}(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);
}