Current section

Files

Jump to
nitro priv js comboLookup.js
Raw

priv/js/comboLookup.js

function comboClear(dom) {
let elem = qi('comboContainer_' + dom)
if (elem) { elem.style.display = 'none' }
activeCombo = undefined; currentItem = undefined;
}
function comboSelect(dom, row, feed, mod, id) {
let elem = qi(dom); comboClear(dom);
if (qi(id)) elem.setAttribute("data-bind", qi(id).getAttribute('data-bind'));
elem.value = row;
elem.style.backgroundColor = 'white';
direct(tuple(atom('comboSelect'),
string(dom),
string(row),
string(feed),
atom(mod)));
}
function comboLookupChange(dom) {
let elem = qi(dom);
if (elem && elem.value == "" && elem.getAttribute("data-bind")) {
elem.removeAttribute("data-bind");
}
}
function comboLookupClick(dom, feed, mod) {
var char = event.which || event.keyCode;
if (char == 1 && !activeCombo && qi(dom).value == '') {
activeCombo = dom;
currentItem = undefined;
direct(tuple(atom('comboKey'),
atom('all'),
string(dom),
string(feed),
atom(mod)));
return
} else if(char == 1 && activeCombo == dom){comboClear(dom);}
}
function comboLookupKeydown(dom, feed, mod) {
var char = event.which || event.keyCode;
if (char == 40 && !activeCombo && qi(dom).value == '') {
activeCombo = dom;
currentItem = undefined;
direct(tuple(atom('comboKey'),
atom('all'),
string(dom),
string(feed),
atom(mod)));
return
}
if (activeCombo && [38, 40].includes(char)) {
event.preventDefault();
console.log('Keycode: ' + char + ", DOM: " + dom);
if (char == 40) { set_focus( currentItem && ( !cycleEnabled || currentItem.nextSibling)
? currentItem.nextSibling : qi('comboContainer_' + dom).firstChild, true) }
if (char == 38) { set_focus( currentItem && ( !cycleEnabled || currentItem.previousSibling)
? currentItem.previousSibling : qi('comboContainer_' + dom).lastChild, true) }
}
}
function comboLookupKeyup(dom, feed, mod) {
var char = event.which || event.keyCode;
if (char == 27 || (char == 8 || char == 46) && qi(dom).value == '') {
qi(dom).value = '';
comboClear(dom);
return
}
if (char == 13 && currentItem) { currentItem.click(); return }
if ([33, 34, 35, 36, 37, 39].includes(char)) { return }
if (activeCombo && [38, 40].includes(char)) { return }
else {
activeCombo = dom;
currentItem = undefined;
direct(tuple(atom('comboKey'),
bin(qi(dom).value),
string(dom),
string(feed),
atom(mod)));
}
}
function comboLookupMouseMove(dom) {
set_focus(event.target.closest('.dropdown-item'), false)
}
function set_focus(elem, scroll) {
if (elem) {
if(currentItem) {currentItem.className = "dropdown-item"}
elem.className = "dropdown-item focus"
if (scroll==true) {elem.scrollIntoView({block: "nearest", inline: "nearest"})}
currentItem = elem
}
}
document.addEventListener("click", () => {
if (activeCombo && event.target.className != 'triangle' &&
!event.target.closest('#comboContainer_' + activeCombo)) {
qi(activeCombo).value = '';
comboClear(activeCombo);
}
})
function comboLostFocus(e) { }
function comboOnFocus(e) { }
function comboLookupMouseOut(dom) { }
var activeCombo = undefined
var currentItem = undefined
var cycleEnabled = false