1 | import { h } from 'preact'
|
2 |
|
3 | const findA = (el) => {
|
4 | if (el.tagName === 'A') {
|
5 | return el
|
6 | }
|
7 | if (el.parentElement) {
|
8 | return findA(el.parentElement)
|
9 | }
|
10 | return null
|
11 | }
|
12 |
|
13 | const getLocalPathname = (a) => {
|
14 | if (a && a.origin === window.location.origin) {
|
15 | return a.href.replace(window.location.origin, '')
|
16 | }
|
17 | return null
|
18 | }
|
19 |
|
20 | export default ({onInternalNav, children, className}) => (
|
21 | h('div', {
|
22 | className,
|
23 | onClick: (e) => {
|
24 | const aTag = findA(e.target)
|
25 | if (aTag && aTag.target !== '_blank') {
|
26 | const url = getLocalPathname(aTag)
|
27 | const meta = e.ctrlKey || e.shiftKey || e.altKey || e.metaKey || e.button !== 0
|
28 | if (url && !meta) {
|
29 | e.preventDefault()
|
30 | onInternalNav(url)
|
31 | }
|
32 | }
|
33 | }
|
34 | }, children)
|
35 | )
|