diff --git a/src/lib/components/Sidebar/SidebarItem.svelte b/src/lib/components/Sidebar/SidebarItem.svelte
deleted file mode 100644
index ff542ab..0000000
--- a/src/lib/components/Sidebar/SidebarItem.svelte
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/src/lib/pages/BrowseSeriesPage.svelte b/src/lib/pages/BrowseSeriesPage.svelte
index 6be2528..229b0f5 100644
--- a/src/lib/pages/BrowseSeriesPage.svelte
+++ b/src/lib/pages/BrowseSeriesPage.svelte
@@ -1,6 +1,6 @@
-
-
- {$_('discover.streamingNow')}
-
- {#await fetchNowStreaming()}
-
- {:then props}
- {#each props as prop (prop.tmdbId)}
-
-
-
- {/each}
- {/await}
-
+
+
+
+ {$_('discover.streamingNow')}
+
+ {#await fetchNowStreaming()}
+
+ {:then props}
+ {#each props as prop (prop.tmdbId)}
+
+
+
+ {/each}
+ {/await}
+
+
+
diff --git a/src/lib/selectable.ts b/src/lib/selectable.ts
index 086c9e4..9598598 100644
--- a/src/lib/selectable.ts
+++ b/src/lib/selectable.ts
@@ -4,6 +4,12 @@ export type Registerer = (htmlElement: HTMLElement) => { destroy: () => void };
export type Direction = 'up' | 'down' | 'left' | 'right';
export type FlowDirection = 'vertical' | 'horizontal';
+export type NavigationActions = {
+ [direction in Direction]?: (selectable: Selectable) => boolean;
+} & {
+ back?: (selectable: Selectable) => boolean;
+ enter?: (selectable: Selectable) => boolean;
+};
export class Selectable {
id: symbol;
@@ -19,6 +25,7 @@ export class Selectable {
};
private focusByDefault: boolean = false;
private isInitialized: boolean = false;
+ private navigationActions: NavigationActions = {};
private direction: FlowDirection = 'vertical';
@@ -299,6 +306,15 @@ export class Selectable {
this.htmlElement.click();
}
}
+
+ setNavigationActions(actions: NavigationActions) {
+ this.navigationActions = actions;
+ return this;
+ }
+
+ getNavigationActions(): NavigationActions {
+ return this.navigationActions;
+ }
}
export function handleKeyboardNavigation(event: KeyboardEvent) {
@@ -317,15 +333,26 @@ export function handleKeyboardNavigation(event: KeyboardEvent) {
// console.log('Currently focused object: ', currentlyFocusedObject.name, currentlyFocusedObject);
+ const navigationActions = currentlyFocusedObject.getNavigationActions();
if (event.key === 'ArrowUp') {
- if (Selectable.focusUp()) event.preventDefault();
+ if (navigationActions.up && navigationActions.up(currentlyFocusedObject))
+ event.preventDefault();
+ else if (Selectable.focusUp()) event.preventDefault();
} else if (event.key === 'ArrowDown') {
- if (Selectable.focusDown()) event.preventDefault();
+ if (navigationActions.down && navigationActions.down(currentlyFocusedObject))
+ event.preventDefault();
+ else if (Selectable.focusDown()) event.preventDefault();
} else if (event.key === 'ArrowLeft') {
- if (Selectable.focusLeft()) event.preventDefault();
+ if (navigationActions.left && navigationActions.left(currentlyFocusedObject))
+ event.preventDefault();
+ else if (Selectable.focusLeft()) event.preventDefault();
} else if (event.key === 'ArrowRight') {
- if (Selectable.focusRight()) event.preventDefault();
+ if (navigationActions.right && navigationActions.right(currentlyFocusedObject))
+ event.preventDefault();
+ else if (Selectable.focusRight()) event.preventDefault();
} else if (event.key === 'Enter') {
- currentlyFocusedObject.click();
+ if (navigationActions.enter && navigationActions.enter(currentlyFocusedObject))
+ event.preventDefault();
+ else currentlyFocusedObject.click();
}
}