UNPKG

1.89 kBJavaScriptView Raw
1import Router from '../router.js';
2
3export default async function (event) {
4
5 // ignore canceled events, modified clicks, and right clicks
6 if (
7 event.target.type ||
8 event.button !== 0 ||
9 event.defaultPrevented ||
10 event.altKey || event.ctrlKey || event.metaKey || event.shiftKey
11 ) {
12 return;
13 }
14
15 // if shadow dom use
16 var target = event.path ? event.path[0] : event.target;
17 var parent = target.parentElement;
18
19 if (Router.contain) {
20
21 while (parent) {
22
23 if (parent.nodeName === 'O-ROUTER') {
24 break;
25 } else {
26 parent = parent.parentElement;
27 }
28
29 }
30
31 if (parent.nodeName !== 'O-ROUTER') {
32 return;
33 }
34
35 }
36
37 while (target && 'A' !== target.nodeName) {
38 target = target.parentElement;
39 }
40
41 if (!target || 'A' !== target.nodeName) {
42 return;
43 }
44
45 // check non-acceptables
46 if (target.hasAttribute('download') ||
47 target.hasAttribute('external') ||
48 target.hasAttribute('o-external') ||
49 target.href.indexOf('tel:') === 0 ||
50 target.href.indexOf('ftp:') === 0 ||
51 target.href.indexOf('file:') === 0 ||
52 target.href.indexOf('mailto:') === 0 ||
53 target.href.indexOf(window.location.origin) !== 0 ||
54 (target.hash !== '' &&
55 target.origin === window.location.origin &&
56 target.pathname === window.location.pathname)
57 ) return;
58
59 // if external is true then default action
60 if (Router.external &&
61 (Router.external.constructor === RegExp && Router.external.test(target.href) ||
62 Router.external.constructor === Function && Router.external(target.href) ||
63 Router.external.constructor === String && Router.external === target.href)
64 ) return;
65
66 event.preventDefault();
67
68 if (Router.location.href !== target.href) {
69 Router.route(target.href);
70 }
71
72}