@@ -79,17 +79,11 @@ function routeTo(url) {
79
79
80
80
81
81
function routeFromLink ( node ) {
82
- // only valid elements
83
- if ( ! node || ! node . getAttribute ) return ;
84
-
85
- let href = node . getAttribute ( 'href' ) ,
86
- target = node . getAttribute ( 'target' ) ;
87
-
88
- // ignore links with targets and non-path URLs
89
- if ( ! href || ! href . match ( / ^ \/ / g) || ( target && ! target . match ( / ^ _ ? s e l f $ / i) ) ) return ;
82
+ // ignore invalid & external links:
83
+ if ( ! node || node . protocol !== location . protocol || node . host !== location . host || ( node . target && ! node . target . match ( / ^ _ ? s e l f $ / i) ) ) return ;
90
84
91
85
// attempt to route, if no match simply cede control to browser
92
- return route ( href ) ;
86
+ return route ( node . pathname + node . search + node . hash ) ;
93
87
}
94
88
95
89
@@ -117,12 +111,9 @@ function delegateLinkHandler(e) {
117
111
118
112
let t = e . target ;
119
113
do {
120
- if ( String ( t . nodeName ) . toUpperCase ( ) === 'A' && t . getAttribute ( 'href' ) && isPreactElement ( t ) ) {
121
- if ( t . hasAttribute ( 'native' ) ) return ;
114
+ if ( String ( t . nodeName ) . toUpperCase ( ) === 'A' && t . pathname && isPreactElement ( t ) && ! t . hasAttribute ( 'native' ) && routeFromLink ( t ) ) {
122
115
// if link is handled by the router, prevent browser defaults
123
- if ( routeFromLink ( t ) ) {
124
- return prevent ( e ) ;
125
- }
116
+ return prevent ( e ) ;
126
117
}
127
118
} while ( ( t = t . parentNode ) ) ;
128
119
}
@@ -131,13 +122,13 @@ function delegateLinkHandler(e) {
131
122
let eventListenersInitialized = false ;
132
123
133
124
function initEventListeners ( ) {
134
- if ( eventListenersInitialized ) {
135
- return ;
136
- }
125
+ if ( eventListenersInitialized ) return ;
137
126
138
127
if ( typeof addEventListener === 'function' ) {
139
128
if ( ! customHistory ) {
140
- addEventListener ( 'popstate' , ( ) => routeTo ( getCurrentUrl ( ) ) ) ;
129
+ addEventListener ( 'popstate' , ( ) => {
130
+ routeTo ( getCurrentUrl ( ) ) ;
131
+ } ) ;
141
132
}
142
133
addEventListener ( 'click' , delegateLinkHandler ) ;
143
134
}
0 commit comments