@@ -15,8 +15,13 @@ export class History {
1515 }
1616
1717 go ( n ) {
18+ if ( this . currentPage + n <= 0 ) {
19+ this . setPage ( 0 , true ) ;
20+ return ;
21+ }
1822 this . log ( 'go' , n ) ;
19- return this . history . go ( n ) ;
23+ this . log ( 'source' , new Error ( ) . stack ) ;
24+ this . history . go ( n ) ;
2025 }
2126
2227 log ( ...args ) {
@@ -28,37 +33,42 @@ export class History {
2833 // eslint-disable-next-line
2934 window . addEventListener ( 'popstate' , ( e ) => {
3035 const page = e ?. state ?. page ;
31- this . log ( 'popstate' , e ) ;
32- if ( page === undefined ) {
33- this . currentPage = 0 ;
34- this . history . replaceState ( { } , '' , this . baseUrl + '/' ) ;
35- const state = getState ( ) ;
36- const net = state . getActiveNetwork ( ) ;
37- const buf = state . getActiveBuffer ( ) ;
38- const serverBuffer = net . serverBuffer ( ) ;
39- if ( ! state . activeComponent && buf === serverBuffer ) {
40- this . history . go ( ) ;
41- return ;
42- }
43- state . $emit ( 'active.component' ) ;
44- state . setActiveBuffer ( net . id , serverBuffer . name || '*' , false ) ;
45- // e.preventDefault();
36+ if ( page === 0 && this . currentPage === 0 ) {
37+ this . history . go ( ) ;
4638 return ;
4739 }
40+ this . log ( 'popstate' , e ) ;
41+ const state = getState ( ) ;
42+ const net = state . getActiveNetwork ( ) ;
43+ const buf = state . getActiveBuffer ( ) ;
44+ const serverBuffer = net . serverBuffer ( ) ;
45+ if (
46+ ! state . stateBrowserDrawOpen &&
47+ ! state . activeComponent &&
48+ buf === serverBuffer
49+ ) {
50+ this . history . go ( ) ;
51+ } else if ( page === undefined ) {
52+ this . setPage ( 0 , true ) ;
53+ }
4854 this . setPage ( page ) ;
4955 } ) ;
5056 this . prepared = true ;
5157 }
5258 }
5359
54- setPage ( page ) {
60+ setPage ( page , setUrl = false ) {
5561 this . prepare ( ) ;
62+ this . log ( 'source' , new Error ( ) . stack ) ;
5663 this . log ( 'setting page' , page ) ;
5764 const previousHandler = this . handlers [ this . currentPage ] ;
5865 const handler = this . handlers [ page ] ;
5966 if ( page !== undefined ) {
6067 this . currentPage = page ;
6168 }
69+ if ( setUrl ) {
70+ this . doReplace ( handler ) ;
71+ }
6272 previousHandler && previousHandler . leave ( ) ;
6373 handler && handler . enter ( ) ;
6474 }
@@ -101,7 +111,7 @@ export class History {
101111 this . history . pushState ( {
102112 page,
103113 } , '' , url ) ;
104- this . handlers . push ( { enter, leave, path : '' + url } ) ;
114+ this . handlers . push ( { enter, leave, url } ) ;
105115 this . setPage ( page ) ;
106116 }
107117
@@ -148,7 +158,7 @@ export class History {
148158 page,
149159 } , '' , url ) ;
150160 const previousHandler = this . handlers [ page ] ;
151- const handler = { enter, leave, path : '' + url } ;
161+ const handler = { enter, leave, url } ;
152162 this . handlers [ page ] = handler ;
153163 previousHandler && previousHandler . leave ( ) ;
154164 handler . enter ( ) ;
0 commit comments