Skip to content

Commit ca1a73a

Browse files
committed
move event listeners into private functions
1 parent 772c88f commit ca1a73a

1 file changed

Lines changed: 45 additions & 38 deletions

File tree

src/tab-container-element.ts

Lines changed: 45 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -86,50 +86,52 @@ export class TabContainerElement extends HTMLElement {
8686
}
8787
}
8888

89-
connectedCallback(): void {
90-
this.addEventListener('keydown', (event: KeyboardEvent) => {
91-
const target = event.target
92-
if (!(target instanceof HTMLElement)) return
93-
if (target.closest(this.tagName) !== this) return
94-
if (target.getAttribute('role') !== 'tab' && !target.closest('[role="tablist"]')) return
95-
const tabs = getTabs(this)
96-
const currentIndex = tabs.indexOf(tabs.find(tab => tab.matches('[aria-selected="true"]'))!)
97-
const [incrementKeys, decrementKeys] = getNavigationKeyCodes(
98-
target.closest('[role="tablist"]')?.getAttribute('aria-orientation') === 'vertical',
99-
)
89+
#handleKeydown(event: KeyboardEvent) {
90+
const target = event.target
91+
if (!(target instanceof HTMLElement)) return
92+
if (target.closest(this.tagName) !== this) return
93+
if (target.getAttribute('role') !== 'tab' && !target.closest('[role="tablist"]')) return
94+
const tabs = getTabs(this)
95+
const currentIndex = tabs.indexOf(tabs.find(tab => tab.matches('[aria-selected="true"]'))!)
96+
const [incrementKeys, decrementKeys] = getNavigationKeyCodes(
97+
target.closest('[role="tablist"]')?.getAttribute('aria-orientation') === 'vertical',
98+
)
10099

101-
if (incrementKeys.some(code => event.code === code)) {
102-
let index = currentIndex + 1
103-
if (index >= tabs.length) index = 0
104-
this.selectTab(index)
105-
} else if (decrementKeys.some(code => event.code === code)) {
106-
let index = currentIndex - 1
107-
if (index < 0) index = tabs.length - 1
108-
this.selectTab(index)
109-
} else if (event.code === 'Home') {
110-
this.selectTab(0)
111-
event.preventDefault()
112-
} else if (event.code === 'End') {
113-
this.selectTab(tabs.length - 1)
114-
event.preventDefault()
115-
}
116-
})
100+
if (incrementKeys.some(code => event.code === code)) {
101+
let index = currentIndex + 1
102+
if (index >= tabs.length) index = 0
103+
this.selectTab(index)
104+
} else if (decrementKeys.some(code => event.code === code)) {
105+
let index = currentIndex - 1
106+
if (index < 0) index = tabs.length - 1
107+
this.selectTab(index)
108+
} else if (event.code === 'Home') {
109+
this.selectTab(0)
110+
event.preventDefault()
111+
} else if (event.code === 'End') {
112+
this.selectTab(tabs.length - 1)
113+
event.preventDefault()
114+
}
115+
}
117116

118-
this.addEventListener('click', (event: MouseEvent) => {
119-
const tabs = getTabs(this)
117+
#handleClick(event: MouseEvent) {
118+
const tabs = getTabs(this)
120119

121-
if (!(event.target instanceof Element)) return
122-
if (event.target.closest(this.tagName) !== this) return
120+
if (!(event.target instanceof Element)) return
121+
if (event.target.closest(this.tagName) !== this) return
123122

124-
const tab = event.target.closest('[role="tab"]')
125-
if (!(tab instanceof HTMLElement) || !tab.closest('[role="tablist"]')) {
126-
return
127-
}
123+
const tab = event.target.closest('[role="tab"]')
124+
if (!(tab instanceof HTMLElement) || !tab.closest('[role="tablist"]')) {
125+
return
126+
}
128127

129-
const index = tabs.indexOf(tab)
130-
this.selectTab(index)
131-
})
128+
const index = tabs.indexOf(tab)
129+
this.selectTab(index)
130+
}
132131

132+
connectedCallback(): void {
133+
this.addEventListener('keydown', this)
134+
this.addEventListener('click', this)
133135
for (const tab of getTabs(this)) {
134136
if (!tab.hasAttribute('aria-selected')) {
135137
tab.setAttribute('aria-selected', 'false')
@@ -144,6 +146,11 @@ export class TabContainerElement extends HTMLElement {
144146
}
145147
}
146148

149+
handleEvent(event: Event) {
150+
if (event.type === 'click') return this.#handleClick(event as MouseEvent)
151+
if (event.type === 'keydown') return this.#handleKeydown(event as KeyboardEvent)
152+
}
153+
147154
selectTab(index: number): void {
148155
const tabs = getTabs(this)
149156
const panels = Array.from(this.querySelectorAll<HTMLElement>('[role="tabpanel"]')).filter(

0 commit comments

Comments
 (0)