diff options
-rw-r--r-- | core/search/js/search.js | 106 |
1 files changed, 78 insertions, 28 deletions
diff --git a/core/search/js/search.js b/core/search/js/search.js index 5b44027af38..0822eee0364 100644 --- a/core/search/js/search.js +++ b/core/search/js/search.js @@ -1,4 +1,4 @@ -/* +/** * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com> * * @author John Molakvoæ <skjnldsv@protonmail.com> @@ -69,7 +69,7 @@ /** * Search */ - this.search = function(event) { + this._search = function(event) { event.preventDefault(); var query = document.getElementById('searchbox').value; self.searchCallback(query); @@ -78,34 +78,25 @@ /** * Reset form */ - this.reset = function(event) { + this._reset = function(event) { event.preventDefault(); document.getElementById('searchbox').value = ''; self.resetCallback(); }; - // Show search - document.getElementById('searchbox').style.display = 'block'; - - // Register input event - document - .getElementById('searchbox') - .addEventListener('input', _.debounce(self.search, 500), true); - document - .querySelector('form.searchbox') - .addEventListener('submit', function(event) { - // Avoid form submit - event.preventDefault(); - _.debounce(self.search, 500); - }, true); - - // Register reset - document - .querySelector('form.searchbox') - .addEventListener('reset', _.debounce(self.reset, 500), true); + /** + * Submit event handler + */ + this._submitHandler = function(event) { + // Avoid form submit + event.preventDefault(); + _.debounce(self.search, 500); + } - // Register esc key shortcut reset if focused - document.addEventListener('keyup', function(event) { + /** + * keyUp event handler for the escape key + */ + this._keyUpHandler = function(event) { if (event.defaultPrevented) { return; } @@ -116,13 +107,20 @@ document.getElementById('searchbox').value === '' ) { if (key === 'Escape' || key === 'Esc' || key === 27) { + document.activeElement.blur(); // remove focus on searchbox _.debounce(self.reset, 500); } } - }); + } - // Register ctrl+F key shortcut to focus - document.addEventListener('keydown', function(event) { + this._searchDebounced = _.debounce(self._search, 500) + + this._resetDebounced = _.debounce(self._reset, 500) + + /** + * keyDown event handler for the ctrl+F shortcut + */ + this._keyDownHandler = function(event) { if (event.defaultPrevented) { return; } @@ -139,7 +137,59 @@ document.getElementById('searchbox').select(); } } - }); + } + + // Show search + document.getElementById('searchbox').style.display = 'block'; + + // Register input event + document + .getElementById('searchbox') + .addEventListener('input', this._searchDebounced, true); + document + .querySelector('form.searchbox') + .addEventListener('submit', this._submitHandler, true); + + // Register reset + document + .querySelector('form.searchbox') + .addEventListener('reset', this._resetDebounced, true); + + // Register esc key shortcut reset if focused + document.addEventListener('keyup', this._keyUpHandler); + + // Register ctrl+F key shortcut to focus + document.addEventListener('keydown', this._keyDownHandler); + }, + + unregister: function() { + // Hide search + document.getElementById('searchbox').style.display = 'none'; + + // Reset search + document.getElementById('searchbox').value = ''; + this.resetCallback(); + + // Unregister input event + document + .getElementById('searchbox') + .removeEventListener('input', this._searchDebounced, true); + document + .querySelector('form.searchbox') + .removeEventListener('submit', this._submitHandler, true); + + // Unregister reset + document + .querySelector('form.searchbox') + .removeEventListener('reset', this._resetDebounced, true); + + // Unregister esc key shortcut reset if focused + document.removeEventListener('keyup', this._keyUpHandler); + + // Unregister ctrl+F key shortcut to focus + document.removeEventListener('keydown', this._keyDownHandler); + + console.debug('Search handler unregistered'); } }; |