1
0
Fork 0
mirror of https://github.com/codex-team/codex.docs.git synced 2025-08-08 06:55:26 +02:00

replace the shortcuts with event listener

This commit is contained in:
Umang G. Patel 2022-08-30 08:55:10 +05:30
parent 09706f0a66
commit 8277fc7a6c
2 changed files with 17 additions and 41 deletions

View file

@ -7,7 +7,7 @@
<aside class="docs-sidebar__content docs-sidebar__content--invisible"> <aside class="docs-sidebar__content docs-sidebar__content--invisible">
<span> <span>
<input class="docs-sidebar__search" type="text" placeholder="Search"> <input class="docs-sidebar__search" type="text" placeholder="Search" />
</span> </span>
{% for firstLevelPage in menu %} {% for firstLevelPage in menu %}
<section class="docs-sidebar__section" data-id="{{firstLevelPage._id}}"> <section class="docs-sidebar__section" data-id="{{firstLevelPage._id}}">

View file

@ -112,6 +112,8 @@ export default class Sidebar {
}); });
// Get search results if search input is empty. // Get search results if search input is empty.
this.search(''); this.search('');
// Add event listener for keyboard events.
this.nodes.sidebar.addEventListener('keydown', e => this.handleKeyboardEventOnSearch(e));
this.ready(); this.ready();
} }
@ -245,38 +247,12 @@ export default class Sidebar {
new Shortcut({ new Shortcut({
name: 'CMD+P', name: 'CMD+P',
on: document.body, on: document.body,
callback: () => { callback: (e) => {
document.activeElement.blur();
this.nodes.search.focus(); this.nodes.search.focus();
}, // Stop propagation of event.
}); e.stopImmediatePropagation();
e.preventDefault();
// Add event listener for up key during search input focus.
// eslint-disable-next-line no-new
new Shortcut({
name: 'up',
on: document.body,
callback: () => {
this.handleKeyboardEventOnSearch('up');
},
});
// Add event listener for down key during search input focus.
// eslint-disable-next-line no-new
new Shortcut({
name: 'down',
on: document.body,
callback: () => {
this.handleKeyboardEventOnSearch('down');
},
});
// Add event listener for enter key during search input focus.
// eslint-disable-next-line no-new
new Shortcut({
name: 'enter',
on: document.body,
callback: () => {
this.handleKeyboardEventOnSearch('enter');
}, },
}); });
} }
@ -304,22 +280,22 @@ export default class Sidebar {
/** /**
* Handle keyboard events when search input is focused. * Handle keyboard events when search input is focused.
* *
* @param {string} eventType - type of the event. * @param {Event} e - Event Object.
* @returns {void} * @returns {void}
*/ */
handleKeyboardEventOnSearch(eventType) { handleKeyboardEventOnSearch(e) {
// Return if search is not focused. // Return if search is not focused.
if (this.nodes.search !== document.activeElement) { if (this.nodes.search !== document.activeElement) {
return; return;
} }
// if enter is pressed and item is focused, then click on focused item. // if enter is pressed and item is focused, then click on focused item.
if (eventType === 'enter' && this.nodes.selectedSearchResultIndex !== null) { if (e.code === 'Enter' && this.nodes.selectedSearchResultIndex !== null) {
this.nodes.searchResults[this.nodes.selectedSearchResultIndex].element.click(); this.nodes.searchResults[this.nodes.selectedSearchResultIndex].element.click();
} }
if (eventType === 'up' || eventType === 'down') { if (e.code === 'ArrowUp' || e.code === 'ArrowDown') {
// check for search results. // check for search results.
if (this.nodes.searchResults.length === 0) { if (this.nodes.searchResults.length === 0) {
return; return;
@ -330,23 +306,23 @@ export default class Sidebar {
// get next item index. // get next item index.
if (this.nodes.selectedSearchResultIndex === null) { if (this.nodes.selectedSearchResultIndex === null) {
// if no item is focused and up press, focus last item. // if no item is focused and up press, focus last item.
if (eventType === 'up') { if (e.code === 'ArrowUp') {
this.nodes.selectedSearchResultIndex = this.nodes.searchResults.length - 1; this.nodes.selectedSearchResultIndex = this.nodes.searchResults.length - 1;
} }
// if no item is focused and down press, focus first item. // if no item is focused and down press, focus first item.
if (eventType === 'down') { if (e.code === 'ArrowDown') {
this.nodes.selectedSearchResultIndex = 0; this.nodes.selectedSearchResultIndex = 0;
} }
} else { } else {
// if item is focused and up press, focus previous item. // if item is focused and up press, focus previous item.
if (eventType === 'up') { if (e.code === 'ArrowUp') {
this.nodes.selectedSearchResultIndex--; this.nodes.selectedSearchResultIndex--;
if (this.nodes.selectedSearchResultIndex < 0) { if (this.nodes.selectedSearchResultIndex < 0) {
this.nodes.selectedSearchResultIndex = this.nodes.searchResults.length - 1; this.nodes.selectedSearchResultIndex = this.nodes.searchResults.length - 1;
} }
} }
// if item is focused and down press, focus next item. // if item is focused and down press, focus next item.
if (eventType === 'down') { if (e.code === 'ArrowDown') {
this.nodes.selectedSearchResultIndex++; this.nodes.selectedSearchResultIndex++;
if (this.nodes.selectedSearchResultIndex >= this.nodes.searchResults.length) { if (this.nodes.selectedSearchResultIndex >= this.nodes.searchResults.length) {
this.nodes.selectedSearchResultIndex = 0; this.nodes.selectedSearchResultIndex = 0;