forked from zaclys/searxng
[feature] key bindings: left & right arrow are always on
This commit is contained in:
parent
25ba076395
commit
ba7659dd1d
|
@ -55,13 +55,30 @@ searxng.ready(function () {
|
||||||
}
|
}
|
||||||
}, true);
|
}, true);
|
||||||
|
|
||||||
var vimKeys = {
|
// these bindings are always on
|
||||||
|
var keyBindings = {
|
||||||
27: {
|
27: {
|
||||||
key: 'Escape',
|
key: 'Escape',
|
||||||
fun: removeFocus,
|
fun: removeFocus,
|
||||||
des: 'remove focus from the focused input',
|
des: 'remove focus from the focused input',
|
||||||
cat: 'Control'
|
cat: 'Control'
|
||||||
},
|
},
|
||||||
|
37: {
|
||||||
|
key: 'Left',
|
||||||
|
fun: ifDetailOpened(highlightResult('up')),
|
||||||
|
des: 'select previous search result',
|
||||||
|
cat: 'Results'
|
||||||
|
},
|
||||||
|
39: {
|
||||||
|
key: 'Right',
|
||||||
|
fun: ifDetailOpened(highlightResult('down')),
|
||||||
|
des: 'select next search result',
|
||||||
|
cat: 'Results'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// these bindings are enabled by user preferences
|
||||||
|
var vimKeys = {
|
||||||
73: {
|
73: {
|
||||||
key: 'i',
|
key: 'i',
|
||||||
fun: searchInputFocus,
|
fun: searchInputFocus,
|
||||||
|
@ -155,20 +172,31 @@ searxng.ready(function () {
|
||||||
};
|
};
|
||||||
|
|
||||||
if (searxng.settings.hotkeys) {
|
if (searxng.settings.hotkeys) {
|
||||||
|
// To add Vim-like key bindings, merge the 'vimKeys' into 'keyBindings'.
|
||||||
|
Object.assign(keyBindings, vimKeys);
|
||||||
|
}
|
||||||
|
|
||||||
searxng.on(document, "keydown", function (e) {
|
searxng.on(document, "keydown", function (e) {
|
||||||
// check for modifiers so we don't break browser's hotkeys
|
// check for modifiers so we don't break browser's hotkeys
|
||||||
if (Object.prototype.hasOwnProperty.call(vimKeys, e.keyCode) && !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) {
|
if (Object.prototype.hasOwnProperty.call(keyBindings, e.keyCode) && !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) {
|
||||||
var tagName = e.target.tagName.toLowerCase();
|
var tagName = e.target.tagName.toLowerCase();
|
||||||
if (e.keyCode === 27) {
|
if (e.keyCode === 27) {
|
||||||
vimKeys[e.keyCode].fun(e);
|
keyBindings[e.keyCode].fun(e);
|
||||||
} else {
|
} else {
|
||||||
if (e.target === document.body || tagName === 'a' || tagName === 'button') {
|
if (e.target === document.body || tagName === 'a' || tagName === 'button') {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
vimKeys[e.keyCode].fun();
|
keyBindings[e.keyCode].fun();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function ifDetailOpened (f) {
|
||||||
|
return function () {
|
||||||
|
if (searxng.isDetailOpened()) {
|
||||||
|
f();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function highlightResult (which) {
|
function highlightResult (which) {
|
||||||
|
@ -347,8 +375,8 @@ searxng.ready(function () {
|
||||||
function initHelpContent (divElement) {
|
function initHelpContent (divElement) {
|
||||||
var categories = {};
|
var categories = {};
|
||||||
|
|
||||||
for (var k in vimKeys) {
|
for (var k in keyBindings) {
|
||||||
var key = vimKeys[k];
|
var key = keyBindings[k];
|
||||||
categories[key.cat] = categories[key.cat] || [];
|
categories[key.cat] = categories[key.cat] || [];
|
||||||
categories[key.cat].push(key);
|
categories[key.cat].push(key);
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,6 +74,10 @@
|
||||||
searxng.scrollPageToSelected();
|
searxng.scrollPageToSelected();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
searxng.isDetailOpened = function () {
|
||||||
|
return d.getElementById('results').classList.contains('image-detail-open');
|
||||||
|
}
|
||||||
|
|
||||||
searxng.closeDetail = function (e) {
|
searxng.closeDetail = function (e) {
|
||||||
d.getElementById('results').classList.remove('image-detail-open');
|
d.getElementById('results').classList.remove('image-detail-open');
|
||||||
searxng.scrollPageToSelected();
|
searxng.scrollPageToSelected();
|
||||||
|
|
Loading…
Reference in New Issue