';
- h += '
' + esc(spawn.id || '') + '';
h += '
';
+ h += '
' + esc(spawn.id || '') + '';
h += '
';
h += '
';
h += '
';
@@ -1066,7 +1066,7 @@ function searchMobs(input) {
function searchAndShow(input, type, onSelect) {
var val = input.value.trim();
var results = input.parentElement.querySelector('.search-results');
- if (!val) { results.style.display = 'none'; results.innerHTML = ''; return; }
+ if (!val) { results.style.display = 'none'; results.innerHTML = ''; results._selectedIndex = -1; return; }
API.get('/api/search?q=' + encodeURIComponent(val)).then(function(data) {
var items = [];
if (type === 'objects' && data.objects) items = data.objects;
@@ -1084,9 +1084,36 @@ function searchAndShow(input, type, onSelect) {
}).join('');
results._items = items;
results._onSelect = onSelect;
+ results._selectedIndex = -1;
}).catch(function() {
results.style.display = 'none';
});
+
+ input._searchKeySetup = input._searchKeySetup || (function() {
+ input.addEventListener('keydown', function(e) {
+ if (results.style.display === 'none' || !results.children.length) return;
+ if (results._selectedIndex === undefined) results._selectedIndex = -1;
+
+ if (e.key === 'ArrowDown') {
+ e.preventDefault();
+ results._selectedIndex = Math.min(results._selectedIndex + 1, results.children.length - 1);
+ updateSearchHighlight(results);
+ } else if (e.key === 'ArrowUp') {
+ e.preventDefault();
+ results._selectedIndex = Math.max(results._selectedIndex - 1, 0);
+ updateSearchHighlight(results);
+ } else if (e.key === 'Enter') {
+ if (results._selectedIndex >= 0) {
+ e.preventDefault();
+ selectSearchResult(results.children[results._selectedIndex]);
+ }
+ } else if (e.key === 'Escape') {
+ results.style.display = 'none';
+ results._selectedIndex = -1;
+ }
+ });
+ return true;
+ })();
}
function selectSearchResult(el) {
@@ -1101,6 +1128,13 @@ function selectSearchResult(el) {
}
}
+function updateSearchHighlight(results) {
+ for (var i = 0; i < results.children.length; i++) {
+ results.children[i].classList.toggle('active', i === results._selectedIndex);
+ if (i === results._selectedIndex) results.children[i].scrollIntoView({block: 'nearest'});
+ }
+}
+
function openEditor(type, id) {
window.open('/editor/' + type + '#' + id, '_blank');
}
@@ -1111,11 +1145,13 @@ function reRenderPanel() {
}
function autoSave() {
+ if (window._colorPickerActive) return;
if (saveTimer) clearTimeout(saveTimer);
saveTimer = setTimeout(function() { doSavePanel(); }, 600);
}
function saveNow() {
+ if (window._colorPickerActive) return;
if (saveTimer) clearTimeout(saveTimer);
saveTimer = null;
doSavePanel();
--
cgit v1.2.3