1 | import Router from '../router.js';
|
2 |
|
3 | export default async function (event) {
|
4 |
|
5 |
|
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 |
|
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 |
|
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 |
|
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 | }
|