Packages
nitro
7.2.0
11.4.16
11.4.15
11.4.14
9.9.7
9.9.6
8.2.4
8.2.3
8.2.2
8.2.1
8.2.0
7.12.1
7.10.0
7.9.3
7.9.2
7.9.1
7.9.0
7.8.3
7.8.2
7.8.0
7.7.1
7.7.0
7.6.2
7.6.1
7.6.0
7.5.0
7.4.2
7.4.1
7.4.0
7.2.1
7.2.0
7.1.1
7.1.0
6.12.0
6.11.11
6.11.10
6.11.9
6.11.8
6.11.7
6.11.6
6.11.4
6.11.2
6.11.1
6.10.9
6.10.8
6.10.7
6.10.6
6.10.5
6.10.4
6.10.3
6.10.2
6.10.1
6.9.1
6.6.1
6.5.0
6.4.4
6.4.3
6.4.2
6.4.1
6.4.0
5.12.4
5.12.3
5.12.2
5.12.1
5.12.0
5.11.1
5.11.0
5.9.2
5.9.1
5.8.5
5.8.4
5.8.3
5.8.1
5.8.0
5.6.1
5.5.1
5.4.3
5.4.2
5.4.1
5.3.1
5.3.0
5.2.1
5.1.7
5.1.6
5.1.5
5.1.4
5.1.3
5.1.2
5.1.1
4.12.11
4.12.10
4.12.9
4.12.8
4.12.7
4.12.6
4.12.5
4.12.4
4.12.3
4.12.2
4.12.1
4.12.0
4.11.13
4.11.12
4.11.11
4.11.10
4.11.9
4.11.8
4.11.7
4.11.6
4.11.5
4.11.4
4.11.3
4.11.2
4.11.1
4.11.0
4.10.9
4.10.8
4.10.7
4.10.6
4.10.5
4.10.4
4.10.3
4.10.2
4.10.1
4.10.0
4.7.7
4.7.4
4.7.3
4.7.2
4.7.1
4.7.0
4.4.1
4.4.0
1.4.0
NITRO Nitrogen Web Framework
Current section
Files
Jump to
Current section
Files
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