Files
remanso/src/hooks/useLinks.hook.ts

52 lines
1.1 KiB
TypeScript

import { noteEventBus } from '@/bus/noteBusEvent'
import { onUnmounted } from '@vue/runtime-core'
const LINKS = ['http://', 'https://']
export const useLinks = (className: string, sha?: string) => {
const linkNote: EventListener = (event) => {
event.preventDefault()
const target = event.target as HTMLElement
const href = target.getAttribute('href')
if (!href) {
return
}
if (LINKS.some((link) => href.startsWith(link))) {
window.open(href, '_blank')
return
}
noteEventBus.emit({
path: href,
currentNoteSHA: sha
})
}
const selector = `.${className} a`
const removeListeners = () => {
const elements = document.querySelectorAll(selector)
elements.forEach((element) => {
element.removeEventListener('click', linkNote)
})
}
const listenToClick = () => {
removeListeners()
const elements = document.querySelectorAll(selector)
elements.forEach((element) => {
element.addEventListener('click', linkNote)
})
}
onUnmounted(() => {
removeListeners()
})
return {
listenToClick
}
}