Skip to content

Commit 95df428

Browse files
committed
Rewrite to typescript
1 parent d69c2df commit 95df428

File tree

2 files changed

+24
-14
lines changed

2 files changed

+24
-14
lines changed

components/tenfoot_layout.pug

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,5 @@ html(lang="en")
3636
p.frit-fit #fritfit (for real)
3737

3838
+scripts
39-
script(type="module" src="/scripts/tenfoot-navigation.js")
39+
script(type="module" src="/scripts/tenfoot-navigation.ts")
4040
block scripts
Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
// Keyboard navigation for 10-foot interface
22

3+
interface ServiceSelected {
4+
service: string;
5+
}
6+
37
class TenFootNavigator {
8+
private cards: NodeListOf<HTMLElement>;
9+
private currentIndex: number;
10+
411
constructor() {
5-
this.cards = document.querySelectorAll('.service-card');
12+
this.cards = document.querySelectorAll<HTMLElement>('.service-card');
613
this.currentIndex = 0;
714
this.init();
815
}
916

10-
init() {
17+
private init(): void {
1118
this.setupKeyboardNavigation();
1219
this.setupClickHandlers();
1320
this.handleLoading();
@@ -18,15 +25,15 @@ class TenFootNavigator {
1825
}
1926
}
2027

21-
focusCard(index) {
28+
private focusCard(index: number): void {
2229
if (index >= 0 && index < this.cards.length) {
2330
this.cards[index].focus();
2431
this.currentIndex = index;
2532
}
2633
}
2734

28-
setupKeyboardNavigation() {
29-
document.addEventListener('keydown', (e) => {
35+
private setupKeyboardNavigation(): void {
36+
document.addEventListener('keydown', (e: KeyboardEvent) => {
3037
switch(e.key) {
3138
case 'ArrowRight':
3239
e.preventDefault();
@@ -46,17 +53,18 @@ class TenFootNavigator {
4653
});
4754
}
4855

49-
setupClickHandlers() {
50-
this.cards.forEach((card, index) => {
56+
private setupClickHandlers(): void {
57+
this.cards.forEach((card: HTMLElement, index: number) => {
5158
card.addEventListener('click', () => {
52-
const service = card.dataset.service;
53-
const title = card.querySelector('.service-title').textContent;
59+
const service = card.dataset.service || '';
60+
const titleElement = card.querySelector('.service-title');
61+
const title = titleElement?.textContent || '';
5462

5563
console.log(`Selected: ${title} (${service})`);
5664

5765
// Dispatch custom event for handling navigation
58-
const event = new CustomEvent('serviceSelected', {
59-
detail: { service, title, index }
66+
const event = new CustomEvent<ServiceSelected>('serviceSelected', {
67+
detail: { service }
6068
});
6169
document.dispatchEvent(event);
6270

@@ -76,7 +84,7 @@ class TenFootNavigator {
7684
});
7785
}
7886

79-
handleLoading() {
87+
private handleLoading(): void {
8088
const loadingIndicator = document.getElementById('loading-indicator');
8189

8290
if (loadingIndicator) {
@@ -89,10 +97,12 @@ class TenFootNavigator {
8997
}
9098
}
9199

92-
93100
if (document.readyState === 'loading') {
94101
document.addEventListener('DOMContentLoaded', () => {
95102
new TenFootNavigator();
103+
104+
//const songbook = pug.compileFile("/pages/songbook/index.pug")
105+
//document.getElementById('app').innerHTML = homePage({ data: someData });
96106
});
97107
} else {
98108
new TenFootNavigator();

0 commit comments

Comments
 (0)