Current section

Files

Jump to
nitro priv js comboLookup.js
Raw

priv/js/comboLookup.js

function comboOpenFormById(formId) {
var form = qi(formId);
form && comboOpenForm(form);
}
function comboCloseFormById(formId) {
var form = qi(formId);
form && comboCloseForm(form);
}
function comboOpenForm(container) {
var dropdown = container.parentNode.querySelector('.dropdown');
container.scrollTop = 0;
container.parentNode.classList.add('dropdown-open');
dropdown.classList.add('dropdown-open');
activeForm = container.id;
};
function comboCloseForm(container) {
container.parentNode.classList.remove('dropdown-open');
//container.previousSibling.classList.remove('dropdown-open');
activeForm = undefined;
};
function comboLookupTextApply(dom) {
let elem = qi(dom);
if (elem) {
let textareaSplit = dom.split('_');
textareaSplit.pop();
const textarea = qi(textareaSplit.join('_'));
textarea ? textarea.value = elem.value : null;
}
}
function comboClear(dom) {
let elem = qi('comboContainer_' + dom)
var dropdown = qi(dom).closest('.dropdown');
if (elem) { elem.style.display = 'none' }
dropdown.classList.remove('dropdown-open');
dropdown.classList.remove('is-reversed');
activeCombo = undefined; currentItem = undefined;
}
function comboSelect(uid, 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';
var dropdown = qi(dom).closest('.dropdown');
dropdown.classList.remove('dropdown-open');
dropdown.classList.remove('is-reversed');
dropdown.classList.add('dropdown-bind');
let value = qi(id) ? dec(unbase64(qi(id).getAttribute('data-bind'))) : string(row);
direct(tuple(atom('comboSelect'),
bin(uid),
value,
string(dom),
string(feed),
atom(mod)));
comboLookupTextApply(dom);
}
function comboLookupChange(dom) {
let elem = qi(dom);
if (elem) {
elem.removeAttribute("data-bind");
const dropdown = qi(dom).closest('.dropdown');
if (dropdown) { dropdown.classList.remove('dropdown-bind'); }
comboLookupTextApply(dom);
}
}
function comboLookupClick(uid, dom, feed, mod) {
var dropdown = qi(dom).closest('.dropdown');
var char = event.which || event.keyCode;
if (char == 1 && !activeCombo && qi(dom).value == '') {
activeCombo = dom;
currentItem = undefined;
dropdown.classList.add('dropdown-open');
if (window.innerHeight - dropdown.getBoundingClientRect().bottom < 100)
dropdown.classList.add('is-reversed');
direct(tuple(atom('comboKey'),
bin(uid),
bin('all'),
string(dom),
string(feed),
atom(mod)));
return
} else if (char == 1 && activeCombo == dom) { comboClear(dom); }
}
function comboLookupKeydown(uid, dom, feed, mod) {
var dropdown = qi(dom).closest('.dropdown');
var char = event.which || event.keyCode;
if (char == 40 && !activeCombo && qi(dom).value == '') {
activeCombo = dom;
currentItem = undefined;
dropdown.classList.add('dropdown-open');
if (window.innerHeight - dropdown.getBoundingClientRect().bottom < 100)
dropdown.classList.add('is-reversed');
direct(tuple(atom('comboKey'),
bin(uid),
bin('all'),
string(dom),
string(feed),
atom(mod)));
return
}
if (activeCombo && [35, 36, 38, 40].includes(char)) {
event.preventDefault();
if (char == 40) { set_focus( currentItem && ( !cycleEnabled || currentItem.nextSibling)
? currentItem.nextSibling : qi('comboContainer_' + dom).firstChild, true) }
if (char == 35) { set_focus( currentItem && ( !cycleEnabled || currentItem.nextSibling)
? currentItem.parentNode.lastChild : currentItem, true) }
if (char == 38) { set_focus( currentItem && ( !cycleEnabled || currentItem.previousSibling)
? currentItem.previousSibling : qi('comboContainer_' + dom).lastChild, true) }
if (char == 36) { set_focus( currentItem && ( !cycleEnabled || currentItem.previousSibling)
? currentItem.parentNode.firstChild : currentItem, true) }
}
if (char == 13) { event.preventDefault(); return }
}
function comboLookupKeyup(uid, dom, feed, mod) {
var dropdown = qi(dom).closest('.dropdown')
var char = event.which || event.keyCode;
if (char == 27 || (char == 8 || char == 46) && qi(dom).value == '') { clearInput(dom); return }
if (char == 13 && currentItem) { currentItem.click(); return }
if ([33, 34, 37, 39].includes(char)) { return }
if (activeCombo && [35, 36, 38, 40].includes(char)) { return }
else {
activeCombo = dom;
currentItem = undefined;
dropdown.classList.add('dropdown-open');
if (window.innerHeight - dropdown.getBoundingClientRect().bottom < 100)
dropdown.classList.add('is-reversed');
direct(tuple(atom('comboKey'),
bin(uid),
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
}
}
function clearInput(dom) {
const input = qi(dom);
if (input) {
input.value = '';
input.removeAttribute('value');
}
comboLookupChange(dom);
comboClear(dom);
}
document.addEventListener("click", () => {
if (activeCombo && event.target.className != 'triangle' &&
!event.target.closest('#comboContainer_' + activeCombo)) {
qi(activeCombo).value = '';
comboClear(activeCombo);
} else if (activeForm && event.target.className != 'triangle' &&
!event.target.closest("#" + activeForm)) {
comboCloseFormById(activeForm);
}
})
function comboLostFocus(e) { }
function comboOnFocus(e) { }
function comboLookupMouseOut(dom) { }
var activeCombo = undefined
var activeForm = undefined
var currentItem = undefined
var cycleEnabled = false