Namdak Tonpa 5 лет назад
Родитель
Сommit
de550a798e
1 измененных файлов с 59 добавлено и 35 удалено
  1. 59 35
      priv/js/comboLookup.js

+ 59 - 35
priv/js/comboLookup.js

@@ -1,50 +1,70 @@
 function comboClear(dom) {
-  let elem = qi('comboContainer_' + dom)
-  if (elem) {elem.style.display = 'none'}
-  activeCombo = undefined; currentItem = undefined;
+    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)));
+    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 comboLostFocus(e) { }
-function comboOnFocus(e) { }
 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) }
-  }
+    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) { var next = currentItem.nextSibling;
+                          set_focus( currentItem && ( !cycleEnabled || next)
+                        ? next : qi('comboContainer_' + dom).firstChild, true) }
+        if (char == 38) { var prev = currentItem.previousSibling;
+                          set_focus( currentItem && ( !cycleEnabled || prev)
+                        ? prev : 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)));
-  }
+    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 comboLookupMouseMove(dom) { set_focus(event.target.closest('.dropdown-item'), false) }
-function comboLookupMouseOut(dom) { }
 function set_focus(elem, scroll) {
   if (elem) {
     if(currentItem) {currentItem.className = "dropdown-item"}
@@ -61,6 +81,10 @@ document.addEventListener("click", () => {
   }
 })
 
+function comboLostFocus(e) { }
+function comboOnFocus(e) { }
+function comboLookupMouseOut(dom) { }
+
 var activeCombo = undefined
 var currentItem = undefined
 var cycleEnabled = false