whisper.cat/weboasis/todo/scripts/TodoItemInput.js

64 lines
1.3 KiB
JavaScript
Raw Normal View History

2023-10-05 23:28:32 +11:00
/* global VT */
window.VT = window.VT || {};
VT.TodoItemInput = function (el) {
var saveOnBlur = true;
el.innerHTML = [
'<input type="text" class="input use-focus-other">',
'<button class="app-button save"><i class="app-icon" data-id="plus-24"></i></button>',
].join('\n');
var inputEl = el.querySelector('.input');
var saveEl = el.querySelector('.save');
el.querySelectorAll('.app-icon').forEach(VT.AppIcon);
inputEl.addEventListener('keyup', function (e) {
switch (e.keyCode) {
case 13: // enter
save();
break;
case 27: // escape
clear();
break;
}
});
inputEl.addEventListener('blur', function () {
if (saveOnBlur) save();
saveOnBlur = true;
});
inputEl.addEventListener('focusOther', save);
saveEl.addEventListener('mousedown', function () {
saveOnBlur = false;
});
saveEl.addEventListener('click', function () {
save();
inputEl.focus();
});
function save() {
var label = inputEl.value.trim();
if (label === '') return;
inputEl.value = '';
el.dispatchEvent(
new CustomEvent('addItem', {
detail: { label: label },
bubbles: true,
})
);
}
function clear() {
inputEl.value = '';
inputEl.blur();
}
};