[feature] key bindings: left & right arrow are always on
This commit is contained in:
		
							parent
							
								
									b189578b6b
								
							
						
					
					
						commit
						e6b160da62
					
				| @ -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
	
	Block a user