@@ -3,21 +3,26 @@ let lastPathname = null;
33let  lastLayout  =  null ; 
44let  lastProps  =  null ; 
55
6+ async  function  clickHandler ( e )  { 
7+   const  {  origin,  pathname }  =  e . target ; 
8+   if  ( typeof  pathname  !==  'string' )  return ; 
9+   if  ( e . altKey  ||  e . ctrlKey  ||  e . metaKey  ||  e . shiftKey )  return ; 
10+   if  ( origin  !==  location . origin )  return ; 
11+   await  rerender ( e . target ,  { 
12+     preventDefault : ( )  =>  e . preventDefault ( ) , 
13+     pushState : ( )  =>  window . history . pushState ( { } ,  '' ,  e . target . href ) 
14+   } ) ; 
15+ } 
16+ 
17+ function  popstateHandler ( )  { 
18+   rerender ( location ) ; 
19+ } 
20+ 
621async  function  main ( )  { 
722  rerender ( location ,  {  isHydrate : true  } ) ; 
823
9-   document . addEventListener ( 'click' ,  async  ( e )  =>  { 
10-     const  {  origin,  pathname }  =  e . target ; 
11-     if  ( typeof  pathname  !==  'string' )  return ; 
12-     if  ( e . altKey  ||  e . ctrlKey  ||  e . metaKey  ||  e . shiftKey )  return ; 
13-     if  ( origin  !==  location . origin )  return ; 
14-     await  rerender ( e . target ,  { 
15-       preventDefault : ( )  =>  e . preventDefault ( ) , 
16-       pushState : ( )  =>  window . history . pushState ( { } ,  '' ,  e . target . href ) 
17-     } ) ; 
18-   } ) ; 
19- 
20-   window . addEventListener ( 'popstate' ,  ( )  =>  rerender ( location ) ) ; 
24+   document . addEventListener ( 'click' ,  clickHandler ) ; 
25+   window . addEventListener ( 'popstate' ,  popstateHandler ) ; 
2126} 
2227
2328async  function  rerender ( 
@@ -71,4 +76,12 @@ async function rerender(
7176  loading  =  false ; 
7277} 
7378
74- main ( ) ; 
79+ try  { 
80+   main ( ) ; 
81+ }  catch  ( e )  { 
82+   console . error ( e ) ; 
83+   console . log ( 'Error occured, disable spa' ) ; 
84+ 
85+   document . removeEventListener ( 'click' ,  clickHandler ) ; 
86+   window . removeEventListener ( 'popstate' ,  popstateHandler ) ; 
87+ } 
0 commit comments