@trullock/page-manager 0.7.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/readme.md +32 -2
- package/src/index.js +28 -28
- package/tests/dist/index.html +1 -0
- package/tests/dist/main.js +32 -28
- package/tests/dist/main.js.map +1 -1
- package/tests/index.html +1 -0
- package/tests/lolpack.js +4 -1
- package/tests/page-page3.js +2 -0
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Page Manager
|
|
2
2
|
|
|
3
|
-
This project provides a skeleton for building single page webapps, with a focus on advanced browser navigation support and
|
|
3
|
+
This project provides a skeleton for building single page webapps, with a focus on advanced browser navigation support, history manipulation and lazy loading.
|
|
4
4
|
|
|
5
5
|
## Pages
|
|
6
6
|
|
|
@@ -11,7 +11,6 @@ import {registerPage, Page} from '@trullock/page-manager';
|
|
|
11
11
|
registerPage('view-thing', '/things/{thingId}', class extends Page {
|
|
12
12
|
|
|
13
13
|
});
|
|
14
|
-
|
|
15
14
|
```
|
|
16
15
|
|
|
17
16
|
The first argument `'view-thing'` is the name of the page, this can be used to build/look-up its url later without needing to hardcode url strings everywhere
|
|
@@ -118,6 +117,37 @@ e.g. Update the time the page was shown, every time its shown
|
|
|
118
117
|
}
|
|
119
118
|
```
|
|
120
119
|
|
|
120
|
+
## Navigating
|
|
121
|
+
|
|
122
|
+
To show a new page, use the `navigate(url, data, checkBeforeHide = true)` method.
|
|
123
|
+
|
|
124
|
+
`url` is the URL of the page to show
|
|
125
|
+
|
|
126
|
+
`data` is optional data to pass to the page, as well as certain special instructions for how to perform the navigation
|
|
127
|
+
|
|
128
|
+
`checkBeforeHide` defaults to true, and causes the current page's `beforeHide` method to be called before hiding the current page and showing the next
|
|
129
|
+
|
|
130
|
+
### beforeHide
|
|
131
|
+
|
|
132
|
+
If you wish to force the user to confirm a navigation away from the current page (e.g. to prevent losing unsaved changes in a form) you can use the `beforeHide` functionality.
|
|
133
|
+
|
|
134
|
+
Define the `beforeHide` handler on the PageManager setup:
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
pageManager.init({
|
|
138
|
+
beforeHide: message => new Promise(resolve => {
|
|
139
|
+
resolve(confirm(message))
|
|
140
|
+
})
|
|
141
|
+
});
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
and then define page specific `beforeHide` begaviours:
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
pageManager.registerPage('edit-thing', '/thing/{thingId}/edit', class extends Page {
|
|
148
|
+
beforeHide = () => 'Are you sure?'
|
|
149
|
+
});
|
|
150
|
+
```
|
|
121
151
|
|
|
122
152
|
## Page Container
|
|
123
153
|
|
package/src/index.js
CHANGED
|
@@ -7,7 +7,7 @@ var pageHash = {},
|
|
|
7
7
|
stackPointer = -1;
|
|
8
8
|
|
|
9
9
|
var manuallyAdjustingHistory = false;
|
|
10
|
-
var
|
|
10
|
+
var handlingBeforeHide = false;
|
|
11
11
|
var lastNavigationDirection = null;
|
|
12
12
|
|
|
13
13
|
var goal = null;
|
|
@@ -34,7 +34,7 @@ var options = {
|
|
|
34
34
|
loadingPageName: 'loading',
|
|
35
35
|
error404PageName: 'error-404',
|
|
36
36
|
defaultPageName: 'root',
|
|
37
|
-
|
|
37
|
+
beforeHide: null
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
export const pages = pageHash;
|
|
@@ -132,7 +132,7 @@ function showPage(url, data, event) {
|
|
|
132
132
|
if(!page404)
|
|
133
133
|
return Promise.reject(new PageShowError('/', `Can't find page: '${url}'. Also can't find 404 page: '${options.error404PageName}'`, {}, 'replace'));
|
|
134
134
|
|
|
135
|
-
return Promise.reject(new PageShowError(page404.url, `Can't find page: '${url}'`, {}, '
|
|
135
|
+
return Promise.reject(new PageShowError(page404.url, `Can't find page: '${url}'`, {}, 'show'));
|
|
136
136
|
}
|
|
137
137
|
|
|
138
138
|
data = data || {};
|
|
@@ -359,18 +359,18 @@ export async function init(opts) {
|
|
|
359
359
|
})
|
|
360
360
|
}
|
|
361
361
|
|
|
362
|
-
function
|
|
363
|
-
// if we're ignoring
|
|
364
|
-
if (
|
|
365
|
-
|
|
362
|
+
function handleBeforeHidePart1() {
|
|
363
|
+
// if we're ignoring beforeHide this navigation
|
|
364
|
+
if (handlingBeforeHide === 'ignore') {
|
|
365
|
+
handlingBeforeHide = false;
|
|
366
366
|
return false;
|
|
367
367
|
}
|
|
368
368
|
|
|
369
369
|
// if we have a before-unload confirm to show
|
|
370
|
-
if (stack[stackPointer].page.
|
|
371
|
-
var interrupt = stack[stackPointer].page.
|
|
370
|
+
if (stack[stackPointer].page.beforeHide && options.beforeHide && handlingBeforeHide === false) {
|
|
371
|
+
var interrupt = stack[stackPointer].page.beforeHide();
|
|
372
372
|
if (interrupt) {
|
|
373
|
-
|
|
373
|
+
handlingBeforeHide = 'step1';
|
|
374
374
|
|
|
375
375
|
// do this in a new thread, you cant call history actions from inside a history-aciton-handler
|
|
376
376
|
window.setTimeout(() => {
|
|
@@ -385,31 +385,31 @@ export async function init(opts) {
|
|
|
385
385
|
}
|
|
386
386
|
}
|
|
387
387
|
|
|
388
|
-
// we've finished
|
|
389
|
-
if (
|
|
390
|
-
|
|
388
|
+
// we've finished beforeHiding
|
|
389
|
+
if (handlingBeforeHide === 'step2')
|
|
390
|
+
handlingBeforeHide = false;
|
|
391
391
|
|
|
392
392
|
return false;
|
|
393
393
|
}
|
|
394
394
|
|
|
395
|
-
function
|
|
396
|
-
if (
|
|
395
|
+
function handleBeforeHidePart2() {
|
|
396
|
+
if (handlingBeforeHide !== 'step1')
|
|
397
397
|
return false;
|
|
398
398
|
|
|
399
|
-
// do the
|
|
400
|
-
options.
|
|
399
|
+
// do the beforeHide action, then...
|
|
400
|
+
options.beforeHide(stack[stackPointer].page.beforeHide()).then(result => {
|
|
401
401
|
|
|
402
402
|
// if the user confirmed, redo the original action
|
|
403
403
|
if (result) {
|
|
404
404
|
|
|
405
|
-
|
|
405
|
+
handlingBeforeHide = 'step2';
|
|
406
406
|
|
|
407
407
|
if (lastNavigationDirection == 'fwd')
|
|
408
408
|
history.forward();
|
|
409
409
|
else if (lastNavigationDirection == 'back')
|
|
410
410
|
history.back();
|
|
411
411
|
} else {
|
|
412
|
-
|
|
412
|
+
handlingBeforeHide = false;
|
|
413
413
|
}
|
|
414
414
|
});
|
|
415
415
|
|
|
@@ -418,7 +418,7 @@ export async function init(opts) {
|
|
|
418
418
|
|
|
419
419
|
// listen for browser navigations
|
|
420
420
|
window.addEventListener("popstate", e => {
|
|
421
|
-
var interrupted =
|
|
421
|
+
var interrupted = handleBeforeHidePart2();
|
|
422
422
|
if (interrupted)
|
|
423
423
|
return;
|
|
424
424
|
|
|
@@ -428,7 +428,7 @@ export async function init(opts) {
|
|
|
428
428
|
lastNavigationDirection = newUid > previousUid ? 'fwd' : 'back';
|
|
429
429
|
let distance = Math.abs(newUid - previousUid);
|
|
430
430
|
|
|
431
|
-
var interrupted =
|
|
431
|
+
var interrupted = handleBeforeHidePart1();
|
|
432
432
|
if (interrupted)
|
|
433
433
|
return;
|
|
434
434
|
|
|
@@ -438,7 +438,7 @@ export async function init(opts) {
|
|
|
438
438
|
|
|
439
439
|
if(storageAvailable())
|
|
440
440
|
{
|
|
441
|
-
window.addEventListener("
|
|
441
|
+
window.addEventListener("beforeHide", () => {
|
|
442
442
|
|
|
443
443
|
let stackToSerialize = stack.map(s => ({
|
|
444
444
|
uid: s.uid,
|
|
@@ -476,15 +476,15 @@ function expandOnlyHash(url)
|
|
|
476
476
|
return url;
|
|
477
477
|
}
|
|
478
478
|
|
|
479
|
-
export function navigate(url, data,
|
|
479
|
+
export function navigate(url, data, checkBeforeHide = true) {
|
|
480
480
|
|
|
481
481
|
url = expandOnlyHash(url);
|
|
482
482
|
|
|
483
|
-
if (
|
|
483
|
+
if (checkBeforeHide === true && stack[stackPointer].page.beforeHide && options.beforeHide) {
|
|
484
484
|
|
|
485
|
-
var interrupt = stack[stackPointer].page.
|
|
485
|
+
var interrupt = stack[stackPointer].page.beforeHide();
|
|
486
486
|
if (interrupt !== false) {
|
|
487
|
-
options.
|
|
487
|
+
options.beforeHide(interrupt).then(result => {
|
|
488
488
|
if (result)
|
|
489
489
|
doNavigate(url, data);
|
|
490
490
|
});
|
|
@@ -508,9 +508,9 @@ export function show(url, data) {
|
|
|
508
508
|
return showPage(url, data, { action: 'show', distance: 0 });
|
|
509
509
|
}
|
|
510
510
|
|
|
511
|
-
export function back(data,
|
|
511
|
+
export function back(data, checkBeforeHide) {
|
|
512
512
|
backData = data || {};
|
|
513
|
-
|
|
513
|
+
handlingBeforeHide = checkBeforeHide === false ? 'ignore' : false;
|
|
514
514
|
history.go(-1);
|
|
515
515
|
}
|
|
516
516
|
|
package/tests/dist/index.html
CHANGED
package/tests/dist/main.js
CHANGED
|
@@ -585,7 +585,7 @@ var pageHash = {},
|
|
|
585
585
|
stack = [],
|
|
586
586
|
stackPointer = -1;
|
|
587
587
|
var manuallyAdjustingHistory = false;
|
|
588
|
-
var
|
|
588
|
+
var handlingBeforeHide = false;
|
|
589
589
|
var lastNavigationDirection = null;
|
|
590
590
|
var goal = null;
|
|
591
591
|
var backData = {};
|
|
@@ -608,7 +608,7 @@ var options = {
|
|
|
608
608
|
loadingPageName: 'loading',
|
|
609
609
|
error404PageName: 'error-404',
|
|
610
610
|
defaultPageName: 'root',
|
|
611
|
-
|
|
611
|
+
beforeHide: null
|
|
612
612
|
};
|
|
613
613
|
const pages = pageHash;
|
|
614
614
|
function registerPage(argA, argB, argC) {
|
|
@@ -682,7 +682,7 @@ function showPage(url, data, event) {
|
|
|
682
682
|
console.error(`Can't find page: '${url}'`);
|
|
683
683
|
let page404 = pageHash[options.error404PageName];
|
|
684
684
|
if (!page404) return Promise.reject(new PageShowError('/', `Can't find page: '${url}'. Also can't find 404 page: '${options.error404PageName}'`, {}, 'replace'));
|
|
685
|
-
return Promise.reject(new PageShowError(page404.url, `Can't find page: '${url}'`, {}, '
|
|
685
|
+
return Promise.reject(new PageShowError(page404.url, `Can't find page: '${url}'`, {}, 'show'));
|
|
686
686
|
}
|
|
687
687
|
data = data || {};
|
|
688
688
|
for (let key in route.params) data[key] = route.params[key];
|
|
@@ -885,18 +885,18 @@ async function init(opts) {
|
|
|
885
885
|
context.page = page;
|
|
886
886
|
});
|
|
887
887
|
}
|
|
888
|
-
function
|
|
889
|
-
// if we're ignoring
|
|
890
|
-
if (
|
|
891
|
-
|
|
888
|
+
function handleBeforeHidePart1() {
|
|
889
|
+
// if we're ignoring beforeHide this navigation
|
|
890
|
+
if (handlingBeforeHide === 'ignore') {
|
|
891
|
+
handlingBeforeHide = false;
|
|
892
892
|
return false;
|
|
893
893
|
}
|
|
894
894
|
|
|
895
895
|
// if we have a before-unload confirm to show
|
|
896
|
-
if (stack[stackPointer].page.
|
|
897
|
-
var interrupt = stack[stackPointer].page.
|
|
896
|
+
if (stack[stackPointer].page.beforeHide && options.beforeHide && handlingBeforeHide === false) {
|
|
897
|
+
var interrupt = stack[stackPointer].page.beforeHide();
|
|
898
898
|
if (interrupt) {
|
|
899
|
-
|
|
899
|
+
handlingBeforeHide = 'step1';
|
|
900
900
|
|
|
901
901
|
// do this in a new thread, you cant call history actions from inside a history-aciton-handler
|
|
902
902
|
window.setTimeout(() => {
|
|
@@ -907,21 +907,21 @@ async function init(opts) {
|
|
|
907
907
|
}
|
|
908
908
|
}
|
|
909
909
|
|
|
910
|
-
// we've finished
|
|
911
|
-
if (
|
|
910
|
+
// we've finished beforeHiding
|
|
911
|
+
if (handlingBeforeHide === 'step2') handlingBeforeHide = false;
|
|
912
912
|
return false;
|
|
913
913
|
}
|
|
914
|
-
function
|
|
915
|
-
if (
|
|
914
|
+
function handleBeforeHidePart2() {
|
|
915
|
+
if (handlingBeforeHide !== 'step1') return false;
|
|
916
916
|
|
|
917
|
-
// do the
|
|
918
|
-
options.
|
|
917
|
+
// do the beforeHide action, then...
|
|
918
|
+
options.beforeHide(stack[stackPointer].page.beforeHide()).then(result => {
|
|
919
919
|
// if the user confirmed, redo the original action
|
|
920
920
|
if (result) {
|
|
921
|
-
|
|
921
|
+
handlingBeforeHide = 'step2';
|
|
922
922
|
if (lastNavigationDirection == 'fwd') history.forward();else if (lastNavigationDirection == 'back') history.back();
|
|
923
923
|
} else {
|
|
924
|
-
|
|
924
|
+
handlingBeforeHide = false;
|
|
925
925
|
}
|
|
926
926
|
});
|
|
927
927
|
return true;
|
|
@@ -929,19 +929,19 @@ async function init(opts) {
|
|
|
929
929
|
|
|
930
930
|
// listen for browser navigations
|
|
931
931
|
window.addEventListener("popstate", e => {
|
|
932
|
-
var interrupted =
|
|
932
|
+
var interrupted = handleBeforeHidePart2();
|
|
933
933
|
if (interrupted) return;
|
|
934
934
|
let newUid = e.state?.uid || 0;
|
|
935
935
|
let previousUid = stack[stackPointer].uid;
|
|
936
936
|
lastNavigationDirection = newUid > previousUid ? 'fwd' : 'back';
|
|
937
937
|
let distance = Math.abs(newUid - previousUid);
|
|
938
|
-
var interrupted =
|
|
938
|
+
var interrupted = handleBeforeHidePart1();
|
|
939
939
|
if (interrupted) return;
|
|
940
940
|
var context = findContext(newUid);
|
|
941
941
|
handlePopstate(context, lastNavigationDirection, distance);
|
|
942
942
|
});
|
|
943
943
|
if (storageAvailable()) {
|
|
944
|
-
window.addEventListener("
|
|
944
|
+
window.addEventListener("beforeHide", () => {
|
|
945
945
|
let stackToSerialize = stack.map(s => ({
|
|
946
946
|
uid: s.uid,
|
|
947
947
|
data: s.data
|
|
@@ -970,12 +970,12 @@ function expandOnlyHash(url) {
|
|
|
970
970
|
}
|
|
971
971
|
return url;
|
|
972
972
|
}
|
|
973
|
-
function navigate(url, data,
|
|
973
|
+
function navigate(url, data, checkBeforeHide = true) {
|
|
974
974
|
url = expandOnlyHash(url);
|
|
975
|
-
if (
|
|
976
|
-
var interrupt = stack[stackPointer].page.
|
|
975
|
+
if (checkBeforeHide === true && stack[stackPointer].page.beforeHide && options.beforeHide) {
|
|
976
|
+
var interrupt = stack[stackPointer].page.beforeHide();
|
|
977
977
|
if (interrupt !== false) {
|
|
978
|
-
options.
|
|
978
|
+
options.beforeHide(interrupt).then(result => {
|
|
979
979
|
if (result) doNavigate(url, data);
|
|
980
980
|
});
|
|
981
981
|
return;
|
|
@@ -1001,9 +1001,9 @@ function show(url, data) {
|
|
|
1001
1001
|
distance: 0
|
|
1002
1002
|
});
|
|
1003
1003
|
}
|
|
1004
|
-
function back(data,
|
|
1004
|
+
function back(data, checkBeforeHide) {
|
|
1005
1005
|
backData = data || {};
|
|
1006
|
-
|
|
1006
|
+
handlingBeforeHide = checkBeforeHide === false ? 'ignore' : false;
|
|
1007
1007
|
history.go(-1);
|
|
1008
1008
|
}
|
|
1009
1009
|
function printStack() {
|
|
@@ -1194,6 +1194,7 @@ function _toPrimitive(input, hint) { if (typeof input !== "object" || input ===
|
|
|
1194
1194
|
constructor($page) {
|
|
1195
1195
|
super($page);
|
|
1196
1196
|
_defineProperty(this, "title", "Page 3");
|
|
1197
|
+
_defineProperty(this, "beforeHide", () => 'Are you sure?');
|
|
1197
1198
|
$page.querySelector('.btnRemove').addEventListener('click', e => {
|
|
1198
1199
|
_trullock_page_manager__WEBPACK_IMPORTED_MODULE_2__.removeHistory(state => {
|
|
1199
1200
|
return state.page.type == 'A';
|
|
@@ -1388,7 +1389,10 @@ window.addEventListener('DOMContentLoaded', function () {
|
|
|
1388
1389
|
_src_index_js__WEBPACK_IMPORTED_MODULE_0__.init({
|
|
1389
1390
|
pageContainer: () => document.body,
|
|
1390
1391
|
fetchPath: route => '/pages/' + route.routeName + '.htm',
|
|
1391
|
-
error404PageName: 'page404'
|
|
1392
|
+
error404PageName: 'page404',
|
|
1393
|
+
beforeHide: message => new Promise(resolve => {
|
|
1394
|
+
resolve(confirm(message));
|
|
1395
|
+
})
|
|
1392
1396
|
});
|
|
1393
1397
|
|
|
1394
1398
|
// listen for navigations
|
package/tests/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","mappings":";;;;;;;;;;;;;;AAAA,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,gBAAgB;;;;;;;;;;;;;;;ACAT;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,eAAe,cAAc,6BAA6B;AAC1G;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe;AACf;AACA;AACA;AACA,sBAAsB,6DAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,sCAAsC,oBAAoB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,KAAK;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE;;;;;;;;;;;;;;AC3NH,6BAAe,sCAAY;AAC3B;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC,wBAAwB,OAAO,SAAS;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB,SAAS,UAAU;AACnE,cAAc,sBAAsB;AACpC,eAAe,IAAI;AACnB;AACA,IAAI;AACJ;AACA;AACA,sCAAsC,SAAS;AAC/C,cAAc,QAAQ;AACtB,eAAe,IAAI;AACnB;AACA,IAAI;AACJ;AACA,sDAAsD,GAAG;AACzD,YAAY,MAAM,KAAK;AACvB;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,4CAA4C,EAAE;AAC9C,YAAY,IAAI,OAAO;AACvB;AACA,IAAI;AACJ;AACA;AACA,+CAA+C;AAC/C,YAAY,IAAI,KAAK;AACrB;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,IAAI;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3OsC;AAEtC,IAAIC,QAAQ,GAAG,CAAC,CAAC;EAChBC,SAAS,GAAG,CAAC,CAAC;EACdC,iBAAiB,GAAG,CAAC,CAAC;EACtBC,KAAK,GAAG,EAAE;EACVC,YAAY,GAAG,CAAC,CAAC;AAElB,IAAIC,wBAAwB,GAAG,KAAK;AACpC,IAAIC,oBAAoB,GAAG,KAAK;AAChC,IAAIC,uBAAuB,GAAG,IAAI;AAElC,IAAIC,IAAI,GAAG,IAAI;AACf,IAAIC,QAAQ,GAAG,CAAC,CAAC;AACjB,IAAIC,OAAO,GAAG;EACbC,SAAS,EAAEC,KAAK,IAAI,SAAS,GAAGA,KAAK,CAACC,SAAS,GAAG,OAAO;EACzDC,iBAAiB,EAAEF,KAAK,IAAI;IAC3B,OAAOG,KAAK,CAACL,OAAO,CAACC,SAAS,CAACC,KAAK,CAAC,CAAC,CACpCI,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,IAAI,EAAE,CAAC,CACnBF,IAAI,CAACG,IAAI,IAAI;MACb,IAAIC,IAAI,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;MACxCF,IAAI,CAA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","sources":["webpack://@trullock/page-manager/./tests/page1.htm","webpack://@trullock/page-manager/./tests/page2.htm","webpack://@trullock/page-manager/./tests/page3.htm","webpack://@trullock/page-manager/./tests/page4.htm","webpack://@trullock/page-manager/./tests/page404.htm","webpack://@trullock/page-manager/./node_modules/@trullock/router/src/index.js","webpack://@trullock/page-manager/./node_modules/@trullock/router/src/pattern-lexer.js","webpack://@trullock/page-manager/./src/index.js","webpack://@trullock/page-manager/./tests/page-loading.js","webpack://@trullock/page-manager/./tests/page-page1.js","webpack://@trullock/page-manager/./tests/page-page2.js","webpack://@trullock/page-manager/./tests/page-page3.js","webpack://@trullock/page-manager/./tests/page-page4.js","webpack://@trullock/page-manager/./tests/page-page404.js","webpack://@trullock/page-manager/./tests/page.js","webpack://@trullock/page-manager/webpack/bootstrap","webpack://@trullock/page-manager/webpack/runtime/define property getters","webpack://@trullock/page-manager/webpack/runtime/hasOwnProperty shorthand","webpack://@trullock/page-manager/webpack/runtime/make namespace object","webpack://@trullock/page-manager/webpack/runtime/publicPath","webpack://@trullock/page-manager/./tests/lolpack.js"],"sourcesContent":["export default __webpack_public_path__ + \"page1.htm\";","export default __webpack_public_path__ + \"page2.htm\";","export default __webpack_public_path__ + \"page3.htm\";","export default __webpack_public_path__ + \"page4.htm\";","export default __webpack_public_path__ + \"page404.htm\";","import PatternLexer from './pattern-lexer.js'\r\n\r\nfunction isKind(val, kind) {\r\n\treturn '[object ' + kind + ']' === Object.prototype.toString.call(val);\r\n}\r\nfunction isRegExp(val) {\r\n\treturn isKind(val, 'RegExp');\r\n}\r\n\r\nfunction decodeQueryString(queryStr, shouldTypecast) {\r\n\tvar queryArr = (queryStr || '').replace('?', '').split('&'),\r\n\t\treg = /([^=]+)=(.+)/,\r\n\t\ti = -1,\r\n\t\tobj = {},\r\n\t\tequalIndex, cur, pValue, pName;\r\n\r\n\twhile ((cur = queryArr[++i])) {\r\n\t\tequalIndex = cur.indexOf('=');\r\n\t\tpName = cur.substring(0, equalIndex);\r\n\t\tpValue = decodeURIComponent(cur.substring(equalIndex + 1));\r\n\r\n\t\tif (pName in obj){\r\n\t\t\tif(isArray(obj[pName])){\r\n\t\t\t\tobj[pName].push(pValue);\r\n\t\t\t} else {\r\n\t\t\t\tobj[pName] = [obj[pName], pValue];\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tobj[pName] = pValue;\r\n\t }\r\n\t}\r\n\treturn obj;\r\n}\r\n\r\nfunction Route(name, pattern, pageClass, priority, router) {\r\n\tvar isRegexPattern = isRegExp(pattern);\r\n\tthis._name = name;\r\n\tthis._router = router;\r\n\tthis._pattern = pattern;\r\n\tthis._paramsIds = isRegexPattern ? null : router.patternLexer.getParamIds(pattern);\r\n\tthis._optionalParamsIds = isRegexPattern ? null : router.patternLexer.getOptionalParamsIds(pattern);\r\n\tthis._matchRegexp = isRegexPattern ? pattern : router.patternLexer.compilePattern(pattern, router.ignoreCase);\r\n\tthis._pageClass = pageClass;\r\n\tthis._priority = priority || 0;\r\n}\r\n\r\nRoute.prototype = {\r\n\r\n\tmatch: function (request) {\r\n\t\treturn this._matchRegexp.test(request);\r\n\t},\r\n\r\n\t_isValidParam: function (request, prop, values) {\r\n\t\tvar validationRule = this.rules[prop],\r\n\t\t\tval = values[prop],\r\n\t\t\tisValid = false,\r\n\t\t\tisQuery = (prop.indexOf('?') === 0);\r\n\r\n\t\tif (val == null && this._optionalParamsIds && arrayIndexOf(this._optionalParamsIds, prop) !== -1) {\r\n\t\t\tisValid = true;\r\n\t\t}\r\n\t\telse if (isRegExp(validationRule)) {\r\n\t\t\tif (isQuery)\r\n\t\t\t\tval = values[prop + '_']; //use raw string\r\n\r\n\t\t\tisValid = validationRule.test(val);\r\n\t\t}\r\n\t\telse if (isArray(validationRule)) {\r\n\t\t\tif (isQuery)\r\n\t\t\t\tval = values[prop + '_']; //use raw string\r\n\r\n\t\t\tisValid = this._isValidArrayRule(validationRule, val);\r\n\t\t}\r\n\t\telse if (isFunction(validationRule)) {\r\n\t\t\tisValid = validationRule(val, request, values);\r\n\t\t}\r\n\r\n\t\treturn isValid; //fail silently if validationRule is from an unsupported type\r\n\t},\r\n\r\n\t_isValidArrayRule: function (arr, val) {\r\n\t\tif (!this._router.ignoreCase) {\r\n\t\t\treturn arrayIndexOf(arr, val) !== -1;\r\n\t\t}\r\n\r\n\t\tif (typeof val === 'string') {\r\n\t\t\tval = val.toLowerCase();\r\n\t\t}\r\n\r\n\t\tvar n = arr.length,\r\n\t\t\titem,\r\n\t\t\tcompareVal;\r\n\r\n\t\twhile (n--) {\r\n\t\t\titem = arr[n];\r\n\t\t\tcompareVal = (typeof item === 'string') ? item.toLowerCase() : item;\r\n\t\t\tif (compareVal === val) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t_getParamsObject: function (request) {\r\n\t\tvar shouldTypecast = this._router.shouldTypecast,\r\n\t\t\tvalues = this._router.patternLexer.getParamValues(request, this._matchRegexp, shouldTypecast),\r\n\t\t\to = {},\r\n\t\t\tn = values.length,\r\n\t\t\tparam, val;\r\n\t\twhile (n--) {\r\n\t\t\tval = values[n];\r\n\t\t\tif (this._paramsIds) {\r\n\t\t\t\tparam = this._paramsIds[n];\r\n\t\t\t\tif (param.indexOf('?') === 0 && val) {\r\n\t\t\t\t\tval = decodeQueryString(val, shouldTypecast);\r\n\t\t\t\t\t\r\n\t\t\t\t\tfor(var key in val){\r\n\t\t\t\t\t\tif(!o[key])\r\n\t\t\t\t\t\t\to[key] = val[key];\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\to['?' + key] = val[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t\to[n] = val;\r\n\t\t\t\t} \r\n\t\t\t\telse \r\n\t\t\t\t\to[param] = val;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn o;\r\n\t},\r\n\r\n\tinterpolate: function (replacements) {\r\n\t\ttry {\r\n\t\t\tvar str = this._router.patternLexer.interpolate(this._pattern, replacements);\r\n\t\t\treturn str;\r\n\t\t}\r\n\t\tcatch(e) {\r\n\t\t\tthrow new Error(`Error interpolating route ${this._pattern} with values ${JSON.stringify(replacements)}\\n` + e);\r\n\t\t}\r\n\t},\r\n\r\n\ttoString: function () {\r\n\t\treturn '[Route pattern:\"' + this._pattern + '\", numListeners:' + this.matched.getNumListeners() + ']';\r\n\t}\r\n\r\n};\r\n\r\n\r\nexport default new class {\r\n\tconstructor() {\r\n\t\tthis.routes = [];\r\n\t\tthis.routesByName = {};\r\n\t\tthis.patternLexer = PatternLexer();\r\n\t}\r\n\r\n\taddRoute (name, pattern, pageClass, priority) {\r\n\t\tpattern += pattern.endsWith('/') ? ':?query:' : '/:?query:';\r\n\t\tvar route = new Route(name, pattern, pageClass, priority, this);\r\n\r\n\t\tvar n = this.routes.length;\r\n\t\tdo\r\n\t\t{ \r\n\t\t\t--n; \r\n\t\t} while (this.routes[n] && route._priority <= this.routes[n]._priority);\r\n\t\tthis.routes.splice(n + 1, 0, route);\r\n\r\n\t\tthis.routesByName[name] = route;\r\n\t\tObject.defineProperty(this, name, { get: () => pattern });\r\n\r\n\t\treturn route;\r\n\t}\r\n\r\n\tinterpolate(name, data){\r\n\t\tif(!this.routesByName[name])\r\n\t\t\tthrow new Error(`Cannot find route by name ${name}`);\r\n\t\t\t\r\n\t\treturn this.routesByName[name].interpolate(data);\r\n\t}\r\n\r\n\tparse (request) {\r\n\t\tvar n = this.routes.length;\r\n\t\tvar route, hash, path;\r\n\r\n\t\tvar index = request.indexOf('#');\r\n\t\tif(index > -1)\r\n\t\t{\r\n\t\t\thash = request.substr(index + 1);\r\n\t\t\trequest = request.substr(0, index);\r\n\t\t}\r\n\r\n\t\tindex = request.indexOf('?');\r\n\t\tif(index > -1)\r\n\t\t\tpath = request.substr(0, index)\r\n\t\telse\r\n\t\t\tpath = request;\t\r\n\t\t\r\n\r\n\t\twhile (route = this.routes[--n]) {\r\n\t\t\tif (route.match(request)) {\r\n\t\t\t\tvar params = route._getParamsObject(request);\r\n\t\t\t\tparams.hash = hash;\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\tpath: path.toLowerCase(),\r\n\t\t\t\t\trouteName: route._name,\r\n\t\t\t\t\tpattern: route._pattern,\r\n\t\t\t\t\tpageClass: route._pageClass,\r\n\t\t\t\t\tparams: params\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\ttoString () {\r\n\t\treturn '[Router numRoutes:' + this.getNumRoutes() + ']';\r\n\t}\r\n}();","export default function () {\r\n\r\n\tvar\r\n\t\t//match chars that should be escaped on string regexp\r\n\t\tESCAPE_CHARS_REGEXP = /[\\\\.+*?\\^$\\[\\](){}\\/'#]/g,\r\n\r\n\t\t//trailing slashes (begin/end of string)\r\n\t\tLOOSE_SLASHES_REGEXP = /^\\/|\\/$/g,\r\n\t\tLEGACY_SLASHES_REGEXP = /\\/$/g,\r\n\r\n\t\t//params - everything between `{ }` or `: :`\r\n\t\tPARAMS_REGEXP = /(?:\\{|:)([^}:]+)(?:\\}|:)/g,\r\n\r\n\t\t//used to save params during compile (avoid escaping things that\r\n\t\t//shouldn't be escaped).\r\n\t\tTOKENS = {\r\n\t\t\t'OS': {\r\n\t\t\t\t//optional slashes\r\n\t\t\t\t//slash between `::` or `}:` or `\\w:` or `:{?` or `}{?` or `\\w{?`\r\n\t\t\t\trgx: /([:}]|\\w(?=\\/))\\/?(:|(?:\\{\\?))/g,\r\n\t\t\t\tsave: '$1{{id}}$2',\r\n\t\t\t\tres: '\\\\/?'\r\n\t\t\t},\r\n\t\t\t'RS': {\r\n\t\t\t\t//required slashes\r\n\t\t\t\t//used to insert slash between `:{` and `}{`\r\n\t\t\t\trgx: /([:}])\\/?(\\{)/g,\r\n\t\t\t\tsave: '$1{{id}}$2',\r\n\t\t\t\tres: '\\\\/'\r\n\t\t\t},\r\n\t\t\t'RQ': {\r\n\t\t\t\t//required query string - everything in between `{? }`\r\n\t\t\t\trgx: /\\{\\?([^}]+)\\}/g,\r\n\t\t\t\t//everything from `?` till `#` or end of string\r\n\t\t\t\tres: '\\\\?([^#]+)'\r\n\t\t\t},\r\n\t\t\t'OQ': {\r\n\t\t\t\t//optional query string - everything in between `:? :`\r\n\t\t\t\trgx: /:\\?([^:]+):/g,\r\n\t\t\t\t//everything from `?` till `#` or end of string\r\n\t\t\t\tres: '(?:\\\\?([^#]*))?'\r\n\t\t\t},\r\n\t\t\t'OR': {\r\n\t\t\t\t//optional rest - everything in between `: *:`\r\n\t\t\t\trgx: /:([^:]+)\\*:/g,\r\n\t\t\t\tres: '(.*)?' // optional group to avoid passing empty string as captured\r\n\t\t\t},\r\n\t\t\t'RR': {\r\n\t\t\t\t//rest param - everything in between `{ *}`\r\n\t\t\t\trgx: /\\{([^}]+)\\*\\}/g,\r\n\t\t\t\tres: '(.+)'\r\n\t\t\t},\r\n\t\t\t// required/optional params should come after rest segments\r\n\t\t\t'RP': {\r\n\t\t\t\t//required params - everything between `{ }`\r\n\t\t\t\trgx: /\\{([^}]+)\\}/g,\r\n\t\t\t\tres: '([^\\\\/?]+)'\r\n\t\t\t},\r\n\t\t\t'OP': {\r\n\t\t\t\t//optional params - everything between `: :`\r\n\t\t\t\trgx: /:([^:]+):/g,\r\n\t\t\t\tres: '([^\\\\/?]+)?\\/?'\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tLOOSE_SLASH = 1,\r\n\t\tSTRICT_SLASH = 2,\r\n\t\tLEGACY_SLASH = 3,\r\n\r\n\t\t_slashMode = LOOSE_SLASH;\r\n\r\n\r\n\tfunction precompileTokens() {\r\n\t\tvar key, cur;\r\n\t\tfor (key in TOKENS) {\r\n\t\t\tif (TOKENS.hasOwnProperty(key)) {\r\n\t\t\t\tcur = TOKENS[key];\r\n\t\t\t\tcur.id = '__CR_' + key + '__';\r\n\t\t\t\tcur.save = ('save' in cur) ? cur.save.replace('{{id}}', cur.id) : cur.id;\r\n\t\t\t\tcur.rRestore = new RegExp(cur.id, 'g');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tprecompileTokens();\r\n\r\n\r\n\tfunction captureVals(regex, pattern) {\r\n\t\tvar vals = [], match;\r\n\t\t// very important to reset lastIndex since RegExp can have \"g\" flag\r\n\t\t// and multiple runs might affect the result, specially if matching\r\n\t\t// same string multiple times on IE 7-8\r\n\t\tregex.lastIndex = 0;\r\n\t\twhile (match = regex.exec(pattern)) {\r\n\t\t\tvals.push(match[1]);\r\n\t\t}\r\n\t\treturn vals;\r\n\t}\r\n\r\n\tfunction getParamIds(pattern) {\r\n\t\treturn captureVals(PARAMS_REGEXP, pattern);\r\n\t}\r\n\r\n\tfunction getOptionalParamsIds(pattern) {\r\n\t\treturn captureVals(TOKENS.OP.rgx, pattern);\r\n\t}\r\n\r\n\tfunction compilePattern(pattern, ignoreCase) {\r\n\t\tpattern = pattern || '';\r\n\r\n\t\tif (pattern) {\r\n\t\t\tif (_slashMode === LOOSE_SLASH) {\r\n\t\t\t\tpattern = pattern.replace(LOOSE_SLASHES_REGEXP, '');\r\n\t\t\t}\r\n\t\t\telse if (_slashMode === LEGACY_SLASH) {\r\n\t\t\t\tpattern = pattern.replace(LEGACY_SLASHES_REGEXP, '');\r\n\t\t\t}\r\n\r\n\t\t\t//save tokens\r\n\t\t\tpattern = replaceTokens(pattern, 'rgx', 'save');\r\n\t\t\t//regexp escape\r\n\t\t\tpattern = pattern.replace(ESCAPE_CHARS_REGEXP, '\\\\$&');\r\n\t\t\t//restore tokens\r\n\t\t\tpattern = replaceTokens(pattern, 'rRestore', 'res');\r\n\r\n\t\t\tif (_slashMode === LOOSE_SLASH) {\r\n\t\t\t\tpattern = '\\\\/?' + pattern;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (_slashMode !== STRICT_SLASH) {\r\n\t\t\t//single slash is treated as empty and end slash is optional\r\n\t\t\tpattern += '\\\\/?';\r\n\t\t}\r\n\t\treturn new RegExp('^' + pattern + '$', ignoreCase ? 'i' : '');\r\n\t}\r\n\r\n\tfunction replaceTokens(pattern, regexpName, replaceName) {\r\n\t\tvar cur, key;\r\n\t\tfor (key in TOKENS) {\r\n\t\t\tif (TOKENS.hasOwnProperty(key)) {\r\n\t\t\t\tcur = TOKENS[key];\r\n\t\t\t\tpattern = pattern.replace(cur[regexpName], cur[replaceName]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn pattern;\r\n\t}\r\n\r\n\tfunction getParamValues(request, regexp, shouldTypecast) {\r\n\t\tvar vals = regexp.exec(request);\r\n\t\tif (vals) {\r\n\t\t\tvals.shift();\r\n\t\t\tif (shouldTypecast) {\r\n\t\t\t\tvals = typecastArrayValues(vals);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn vals;\r\n\t}\r\n\r\n\tfunction interpolate(pattern, replacements) {\r\n\t\t// default to an empty object because pattern might have just\r\n\t\t// optional arguments\r\n\t\treplacements = replacements || {};\r\n\t\tif (typeof pattern !== 'string') {\r\n\t\t\tthrow new Error('Route pattern should be a string.');\r\n\t\t}\r\n\t\t\r\n\t\tvar replaceFn = function (match, prop) {\r\n\t\t\tvar val;\r\n\t\t\tprop = (prop.substr(0, 1) === '?') ? prop.substr(1) : prop;\r\n\t\t\tif (replacements[prop] != null) {\r\n\t\t\t\tif (typeof replacements[prop] === 'object') {\r\n\t\t\t\t\tvar queryParts = [], rep;\r\n\t\t\t\t\tfor (var key in replacements[prop]) {\r\n\t\t\t\t\t\trep = replacements[prop][key];\r\n\t\t\t\t\t\tif (isArray(rep)) {\r\n\t\t\t\t\t\t\tfor (var k in rep) {\r\n\t\t\t\t\t\t\t\tif (key.slice(-2) == '[]') {\r\n\t\t\t\t\t\t\t\t\tqueryParts.push(encodeURIComponent(key.slice(0, -2)) + '[]=' + encodeURIComponent(rep[k]));\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tqueryParts.push(encodeURIComponent(key + '=' + rep[k]));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tqueryParts.push(encodeURIComponent(key + '=' + rep));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tval = '?' + queryParts.join('&');\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// make sure value is a string see #gh-54\r\n\t\t\t\t\tval = String(replacements[prop]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (match.indexOf('*') === -1 && val.indexOf('/') !== -1) {\r\n\t\t\t\t\tthrow new Error('Invalid value \"' + val + '\" for segment \"' + match + '\".');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (match.indexOf('{') !== -1) {\r\n\t\t\t\tthrow new Error('The segment ' + match + ' is required.');\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tval = '';\r\n\t\t\t}\r\n\t\t\treturn val;\r\n\t\t};\r\n\r\n\t\tif (!TOKENS.OS.trail) {\r\n\t\t\tTOKENS.OS.trail = new RegExp('(?:' + TOKENS.OS.id + ')+$');\r\n\t\t}\r\n\r\n\t\treturn pattern\r\n\t\t\t.replace(TOKENS.OS.rgx, TOKENS.OS.save)\r\n\t\t\t.replace(PARAMS_REGEXP, replaceFn)\r\n\t\t\t.replace(TOKENS.OS.trail, '') // remove trailing\r\n\t\t\t.replace(TOKENS.OS.rRestore, '/'); // add slash between segments\r\n\t}\r\n\r\n\t//API\r\n\treturn {\r\n\t\tstrict: function () {\r\n\t\t\t_slashMode = STRICT_SLASH;\r\n\t\t},\r\n\t\tloose: function () {\r\n\t\t\t_slashMode = LOOSE_SLASH;\r\n\t\t},\r\n\t\tlegacy: function () {\r\n\t\t\t_slashMode = LEGACY_SLASH;\r\n\t\t},\r\n\t\tgetParamIds: getParamIds,\r\n\t\tgetOptionalParamsIds: getOptionalParamsIds,\r\n\t\tgetParamValues: getParamValues,\r\n\t\tcompilePattern: compilePattern,\r\n\t\tinterpolate: interpolate\r\n\t};\r\n\r\n}","import router from '@trullock/router';\n\nvar pageHash = {},\n\tpageCache = {},\n\tpageTemplateCache = {},\n\tstack = [],\n\tstackPointer = -1;\n\nvar manuallyAdjustingHistory = false;\nvar handlingBeforeUnload = false;\nvar lastNavigationDirection = null;\n\nvar goal = null;\nvar backData = {};\nvar options = {\n\tfetchPath: route => '/pages/' + route.routeName + '.html',\n\tfetchPageTemplate: route => {\n\t\treturn fetch(options.fetchPath(route))\n\t\t\t.then(r => r.text())\n\t\t\t.then(html => {\n\t\t\t\tvar $div = document.createElement('div');\n\t\t\t\t$div.innerHTML = html;\n\t\t\t\t// Pages are assumed to have a single wrapping element\n\t\t\t\treturn $div.firstElementChild;\n\t\t\t})\n\t\t\t.then($template => {\n\t\t\t\tpageTemplateCache[route.pattern] = $template;\n\t\t\t\treturn $template;\n\t\t\t});\n\t},\n\tpageInterrupt: route => null,\n\tattachMarkup: $html => document.body.appendChild($html),\n\tprepareMarkup: $html => { },\n\tloadingPageName: 'loading',\n\terror404PageName: 'error-404',\n\tdefaultPageName: 'root',\n\tbeforeUnload: null\n}\n\nexport const pages = pageHash;\n\nexport function registerPage(argA, argB, argC) {\n\n\tlet namedRoutes = null, \n\t\tpageClass = null;\n\n\tif(argC == undefined)\n\t{\n\t\tnamedRoutes = argA;\n\t\tpageClass = argB;\n\t} else {\n\t\tnamedRoutes = {\n\t\t\t[argA]: argB\n\t\t};\n\t\tpageClass = argC;\n\t}\n\t\n\n\tfor (const [name, route] of Object.entries(namedRoutes)) {\n\t\trouter.addRoute(name, route, pageClass);\n\n\t\tpageHash[name] = {\n\t\t\turl: route,\n\t\t\tpageClass: pageClass\n\t\t}\n\t}\n\n\treturn pageClass;\n}\n\nexport function getPath(name, values) {\n\tlet url = router.interpolate(name, values);\n\tif (values?.hash)\n\t\turl += '#' + values.hash;\n\treturn url;\n}\n\nexport function refresh() {\n\tlet frame = stack[stackPointer];\n\tshowPage(frame.data.route.url, frame.data, 'replace');\n}\n\n// TODO: 404 and error too?\nfunction initLoading()\n{\n\tvar page = pageHash[options.loadingPageName];\n\tvar route = router.parse(page.url);\n\treturn loadPage(route, {});\n}\n\nfunction showLoading() {\n\tvar page = pageHash[options.loadingPageName];\n\tvar route = router.parse(page.url);\n\tvar data = {\n\t\troute: route,\n\t\tscrollY: window.scrollY,\n\t\tevent: {\n\t\t\taction: 'replace'\n\t\t}\n\t};\n\n\tvar page = pageCache[page.url].page;\n\n\treturn Promise.resolve(page.show(data));\n}\n\nfunction loadPage(route, data) {\n\n\tvar fetchPage = pageTemplateCache[route.pattern] ? Promise.resolve(pageTemplateCache[route.pattern]) : options.fetchPageTemplate(route);\n\n\treturn fetchPage.then($template => {\n\t\tvar $html = $template.cloneNode(true);\n\t\toptions.prepareMarkup($html);\n\t\toptions.attachMarkup($html);\n\t\tpageCache[route.path] = {\n\t\t\t$html,\n\t\t\tpage: new (route.pageClass)($html)\n\t\t}\n\n\t\tvar page = pageCache[route.path].page;\n\t\t\n\t\tlet booted = new Promise(resolve => resolve(page.boot(data)));\n\t\treturn booted.then(() => page);\n\t});\n}\n\nfunction showPage(url, data, event) {\n\tvar route = router.parse(url);\n\tif (route == null) {\n\t\tconsole.error(`Can't find page: '${url}'`);\n\t\tlet page404 = pageHash[options.error404PageName];\n\t\tif(!page404)\n\t\t\treturn Promise.reject(new PageShowError('/', `Can't find page: '${url}'. Also can't find 404 page: '${options.error404PageName}'`, {}, 'replace'));\n\n\t\treturn Promise.reject(new PageShowError(page404.url, `Can't find page: '${url}'`, {}, 'replace'));\n\t}\n\n\tdata = data || {};\n\tfor (let key in route.params)\n\t\tdata[key] = route.params[key];\n\n\tdata.route = {\n\t\turl: url,\n\t\tpath: route.path,\n\t\trouteName: route.routeName,\n\t\tparams: route.params\n\t};\n\tdata.event = event;\n\n\tlet interrupt = options.pageInterrupt(route);\n\tif(interrupt)\n\t{\n\t\tgoal = { url, data };\n\t\treturn showPage(interrupt.url, null, event);\n\t}\n\t\n\tvar getPage = showLoading().then(() => {\n\t\tif (pageCache[route.path])\n\t\t\treturn pageCache[route.path].page;\n\n\t\treturn loadPage(route, data)\n\t});\n\n\t// handle initial page\n\tif (event.action == 'load')\n\t{\n\t\treturn getPage\n\t\t\t\t\t.then(page => doShow(page, data))\n\t\t\t\t\t.then(page => {\n\t\t\t\t\t\t// clean initial load\n\t\t\t\t\t\tif(stackPointer == -1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstack.push({ uid: 0, data, page });\n\t\t\t\t\t\t\tstackPointer = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// page refresh\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstack[stackPointer].page = page;\n\t\t\t\t\t\t\tstack[stackPointer].data = data;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn page;\n\t\t\t\t\t});\n\t}\n\n\tlet currentState = stack[stackPointer];\n\n\tif (currentState.data.route.path == route.path) {\n\t\thandleHistoryAction(event, url, data, currentState.page);\n\t\treturn getPage.then(page => doUpdate(page, data));\n\t}\n\n\tcurrentState.data.scrollY = window.scrollY;\n\n\treturn Promise.all([\n\t\t\tcurrentState.page.hide(event),\n\t\t\tgetPage\n\t\t])\n\t\t\t.then(results => results[1])\n\t\t\t.then(page => {\n\t\t\t\thandleHistoryAction(event, url, data, page);\n\t\t\t\treturn doShow(page, data);\n\t\t\t});\n\t\t\t// .catch(e => {\n\t\t\t// \t// TODO: what case is this?\n\t\t\t// \tmanuallyAdjustingHistory = () => manuallyAdjustingHistory = false;\n\t\t\t// \tif (event.action == 'back')\n\t\t\t// \t\thistory.go(1);\n\t\t\t// \telse if (event.action == 'fwd')\n\t\t\t// \t\thistory.go(-1);\n\t\t\t// });\n}\n\nfunction doShow(page, data) {\n\n\twindow.scroll(0, 0);\n\n\treturn Promise.resolve(page.show(data))\n\t\t\t.then(() => document.title = page.title)\n\t\t\t// todo: hide() should be passed an event object\n\t\t\t.then(() => pageCache[pageHash[options.loadingPageName].url].page.hide())\n\t\t\t// return page\n\t\t\t.then(() => page);\n}\n\n\nasync function doUpdate(page, data) {\n\n\tawait Promise.resolve(page.update(data));\n\n\tdocument.title = page.title\n\t// todo: hide() should be passed an event object\n\tawait pageCache[pageHash[options.loadingPageName].url].page.hide()\n\treturn page;\n}\n\nfunction handleHistoryAction(event, url, data, page) {\n\tif (event.action == 'push') {\n\t\tlet newUid = stack[stackPointer].uid + 1;\n\n\t\twindow.history.pushState({ uid: newUid }, null, url);\n\t\t\n\t\t// remove future\n\t\tstack.splice(stackPointer + 1, stack.length - stackPointer);\n\n\t\tstack.push({ uid: newUid, data, page });\n\t\tstackPointer++;\n\t}\n\telse if (event.action == 'replace') {\n\t\t// TODO: this case may be buggy\n\n\t\tlet currentUid = stack[stackPointer].uid;\n\t\twindow.history.replaceState({ uid: currentUid }, null, url);\n\t\t\n\t\tstack.pop();\n\t\tstack.push({ uid: currentUid, data, page });\n\t}\n\telse if(event.action == 'back')\n\t{\n\t\tstackPointer -= event.distance;\n\t}\n\telse if (event.action == 'fwd')\n\t{\n\t\tstackPointer += event.distance;\n\t}\t\n}\n\nfunction doNavigate(url, data) {\n\n\tif (url === 'goal') {\n\t\turl = goal ? goal.url : data?.fallback || getPath(options.defaultPageName);\n\t\tdata = goal?.data || {}\n\t\tgoal = null;\n\t}\n\n\treturn showPage(url, data, { action: 'push', distance: 0 });\n}\n\nfunction storageAvailable() {\n\treturn false;\n try {\n var x = '__storage_test__';\n window.sessionStorage.setItem(x, x);\n window.sessionStorage.removeItem(x);\n return true;\n }\n catch(e) {\n return false;\n }\n}\n\nexport async function init(opts) {\n\n\tObject.assign(options, opts);\n\n\tif(storageAvailable())\n\t{\n\t\tlet storedStack = window.sessionStorage.getItem(\"stack\");\n\t\tif(storedStack)\n\t\t{\n\t\t\tstoredStack = JSON.parse(storedStack);\n\t\t\tstack = storedStack.stack;\n\t\t\tstackPointer = storedStack.stackPointer;\n\t\t\twindow.sessionStorage.removeItem(\"stack\");\n\t\t}\n\t}\n\n\t// handle pages whose markup is already loaded in the page\n\tfor (var key in pageHash) {\n\t\tif (pageHash[key].pageClass.existingDomSelector) {\n\t\t\tlet $html = document.querySelector(pageHash[key].pageClass.existingDomSelector)\n\t\t\tif(!$html)\n\t\t\t{\n\t\t\t\tconsole.error(`Unable to find DOM element '${pageHash[key].pageClass.existingDomSelector}' for page '${key}'`)\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t\n\t\t\t// TODO: this is inefficient for non parameterised routes. There will always be HTML in memory and then copied for the page once loaded\n\t\t\tpageTemplateCache[router.routesByName[key]._pattern] = $html;\n\t\t\t$html.parentElement.removeChild($html);\t\n\t\t}\n\t}\n\n\tawait initLoading();\n\t\n\t// set initial page\n\tshowPage(window.location.pathname + window.location.search + window.location.hash, null, { action: 'load', distance: 0 }).catch(e => {\n\t\tconsole.error(e);\n\t\t\n\t\tif (e instanceof PageShowError)\n\t\t{\n\t\t\treturn showPage(e.url, e.data, { action: stackPointer == -1 ? 'load' : e.action || 'show' }).then(page => {\n\t\t\t\tif(e.action == 'replace')\n\t\t\t\t\thandleHistoryAction({ action: e.action }, e.url, e.data, page);\n\t\t\t\treturn page;\n\t\t\t});\n\t\t\t\n\t\t}\n\t});\n\n\tfunction handlePopstate(context, direction, distance) {\n\n\t\tif (manuallyAdjustingHistory) {\n\t\t\tmanuallyAdjustingHistory(context, { action: direction, distance });\n\t\t\treturn;\n\t\t}\n\n\t\tif (direction == 'back')\n\t\t\tObject.assign(context.data, backData);\n\t\tbackData = {};\n\n\t\tshowPage(context.data.route.url, context.data, { action: direction, distance }).catch(e => {\n\t\t\tconsole.error(e);\n\t\t\tif (e instanceof PageShowError)\n\t\t\t\treturn showPage(e.url, e.data, { action: e.action || 'show' });\n\t\t}).then(page => {\n\t\t\t// set page as it can be missing in the case of refreshes\n\t\t\tcontext.page = page;\n\t\t})\n\t}\n\n\tfunction handleBeforeUnloadPart1() {\n\t\t// if we're ignoring beforeUnload this navigation\n\t\tif (handlingBeforeUnload === 'ignore') {\n\t\t\thandlingBeforeUnload = false;\n\t\t\treturn false;\n\t\t}\n\n\t\t// if we have a before-unload confirm to show\n\t\tif (stack[stackPointer].page.beforeUnload && options.beforeUnload && handlingBeforeUnload === false) {\n\t\t\tvar interrupt = stack[stackPointer].page.beforeUnload();\n\t\t\tif (interrupt) {\n\t\t\t\thandlingBeforeUnload = 'step1';\n\n\t\t\t\t// do this in a new thread, you cant call history actions from inside a history-aciton-handler\n\t\t\t\twindow.setTimeout(() => {\n\t\t\t\t\t// undo the navigation so the URL remains correct whilst we show the confirm dialog\n\t\t\t\t\tif (lastNavigationDirection == 'fwd')\n\t\t\t\t\t\thistory.back();\n\t\t\t\t\telse if (lastNavigationDirection == 'back')\n\t\t\t\t\t\thistory.forward();\n\t\t\t\t}, 1);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// we've finished beforeUnloading\n\t\tif (handlingBeforeUnload === 'step2')\n\t\t\thandlingBeforeUnload = false;\n\n\t\treturn false;\n\t}\n\n\tfunction handleBeforeUnloadPart2() {\n\t\tif (handlingBeforeUnload !== 'step1')\n\t\t\treturn false;\n\n\t\t// do the beforeUnload action, then...\n\t\toptions.beforeUnload(stack[stackPointer].page.beforeUnload()).then(result => {\n\n\t\t\t// if the user confirmed, redo the original action\n\t\t\tif (result) {\n\n\t\t\t\thandlingBeforeUnload = 'step2';\n\n\t\t\t\tif (lastNavigationDirection == 'fwd')\n\t\t\t\t\thistory.forward();\n\t\t\t\telse if (lastNavigationDirection == 'back')\n\t\t\t\t\thistory.back();\n\t\t\t} else {\n\t\t\t\thandlingBeforeUnload = false;\n\t\t\t}\n\t\t});\n\n\t\treturn true;\n\t}\n\n\t// listen for browser navigations\n\twindow.addEventListener(\"popstate\", e => {\n\t\tvar interrupted = handleBeforeUnloadPart2();\n\t\tif (interrupted)\n\t\t\treturn;\n\n\t\tlet newUid = e.state?.uid || 0;\n\t\tlet previousUid = stack[stackPointer].uid;\n\n\t\tlastNavigationDirection = newUid > previousUid ? 'fwd' : 'back';\n\t\tlet distance = Math.abs(newUid - previousUid);\n\n\t\tvar interrupted = handleBeforeUnloadPart1();\n\t\tif (interrupted)\n\t\t\treturn;\n\n\t\tvar context = findContext(newUid);\n\t\thandlePopstate(context, lastNavigationDirection, distance);\n\t});\n\n\tif(storageAvailable())\n\t{\n\t\twindow.addEventListener(\"beforeunload\", () => {\n\n\t\t\tlet stackToSerialize = stack.map(s => ({\n\t\t\t\tuid: s.uid,\n\t\t\t\tdata: s.data\n\t\t\t}));\n\t\t\tlet stackToStore = {\n\t\t\t\tstack: stackToSerialize,\n\t\t\t\tstackPointer\n\t\t\t}\n\t\t\twindow.sessionStorage.setItem('stack', JSON.stringify(stackToStore));\n\t\t});\n\t}\n}\n\nfunction findContext(uid){\n\tfor (var i = 0; i < stack.length; i++) {\n\t\tif (stack[i].uid == uid)\n\t\t\treturn stack[i];\n\t}\n\treturn null;\n}\n\nfunction expandOnlyHash(url)\n{\n\tif(url.startsWith('#'))\n\t{\n\t\tlet currentState = stack[stackPointer];\n\t\tlet currentUrl = currentState.data.route.url;\n\t\tlet hashIndex = currentUrl.indexOf('#');\n\t\tif(hashIndex > -1)\n\t\t\treturn currentUrl.substr(0, hashIndex);\n\t\treturn currentUrl + url;\n\t}\n\n\treturn url;\n}\n\nexport function navigate(url, data, checkBeforeUnload) {\n\n\turl = expandOnlyHash(url);\n\n\tif (checkBeforeUnload === true && stack[stackPointer].page.beforeUnload && options.beforeUnload) {\n\n\t\tvar interrupt = stack[stackPointer].page.beforeUnload();\n\t\tif (interrupt !== false) {\n\t\t\toptions.beforeUnload(interrupt).then(result => {\n\t\t\t\tif (result)\n\t\t\t\t\tdoNavigate(url, data);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t}\n\n\tdoNavigate(url, data).catch(e => {\n\t\tconsole.error(e);\n\t\tif (e instanceof PageShowError)\n\t\t\treturn showPage(e.url, e.data, { action: e.action || 'show' });\n\t});\n}\n\nexport function replace(url, data) {\n\turl = expandOnlyHash(url);\n\treturn showPage(url, data, { action: 'replace', distance: 0 });\n}\n\nexport function show(url, data) {\n\treturn showPage(url, data, { action: 'show', distance: 0 });\n}\n\nexport function back(data, checkBeforeUnload) {\n\tbackData = data || {};\n\thandlingBeforeUnload = checkBeforeUnload === false ? 'ignore' : false;\n\thistory.go(-1);\n}\n\nexport function printStack() {\n\tconsole.log(\"Stack length: \" + stack.length);\n\tconsole.log(\"Stack pointer: \" + stackPointer);\n\tfor(var i = 0; i < stack.length; i++)\n\t\tconsole.log(stack[i]);\n}\n\nexport function removeHistory(predicate)\n{\n\tlet statesToKeep = [];\n\tfor (var i = 0; i < stack.length; i++)\n\t{\n\t\tif (!predicate(stack[i], i))\n\t\t\tstatesToKeep.push(stack[i]);\n\t}\n\n\t// TODO: ensure we always have at least 1 state to keep - must/can this always be the current page?\n\n\tif (statesToKeep.length == stack.length)\n\t\treturn Promise.resolve();\n\n\n\treturn new Promise((resolve, reject) => {\n\n\n\t\tlet backsToDo = stackPointer - 1;\n\t\tlet currentUid = -1;\n\n\t\t// TODO: handle stack pointer not being at the tail when this process starts\n\n\t\tmanuallyAdjustingHistory = _ => {\n\t\t\t// rewind to the first history position\n\t\t\tif(backsToDo > 0)\n\t\t\t{\n\t\t\t\twindow.setTimeout(() => {\n\t\t\t\t\tbacksToDo--;\n\t\t\t\t\thistory.back();\n\t\t\t\t}, 1);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// reset the stack\n\t\t\tstack = [];\n\n\t\t\tfor (var k = 0; k < statesToKeep.length; k++) {\n\t\t\t\tlet currentState = statesToKeep[k];\n\t\t\t\tcurrentState.uid = ++currentUid;\n\n\t\t\t\tif (k == 0)\n\t\t\t\t\twindow.history.replaceState({ uid: currentState.uid }, null, currentState.data.route.url);\n\t\t\t\telse\n\t\t\t\t\twindow.history.pushState({ uid: currentState.uid }, null, currentState.data.route.url);\n\t\t\t\t\n\t\t\t\t\t// TODO: this doesnt seem to work when k=0\n\t\t\t\tdocument.title = currentState.page.title;\n\n\t\t\t\tstack.push(currentState);\n\t\t\t}\n\n\t\t\tstackPointer = stack.length - 1;\n\n\t\t\tmanuallyAdjustingHistory = false;\n\t\t};\n\n\t\thistory.back();\n\t});\n}\n\nexport function purgeCache() {\n\tfor (const path in pageCache)\n\t{\n\t\tpageCache[path].page.destroy && pageCache[path].page.destroy();\n\t\tif (!pageCache[path].page.constructor.existingDomSelector)\n\t\t{\n\t\t\tpageCache[path].$html.remove();\n\t\t\tdelete pageCache[path];\n\t\t}\n\t}\n}\n\nexport class PageShowError extends Error {\n\tconstructor(url, message, data, action) {\n\t\tsuper(message || 'Error showing requested page')\n\n\t\t// Maintains proper stack trace for where our error was thrown (only available on V8)\n\t\tif (Error.captureStackTrace)\n\t\t\tError.captureStackTrace(this, PageShowError)\n\n\t\tthis.name = 'PageShowError'\n\t\tthis.url = url;\n\t\tthis.data = data;\n\t\tthis.action = action;\n\t}\n}","import Page from './page.js';\r\nimport {registerPage} from '@trullock/page-manager';\r\n\r\nexport default registerPage('loading', '/loading', class extends Page {\r\n\r\n\tstatic existingDomSelector = '#page-loading';\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\t}\r\n});","import './page1.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, refresh} from '@trullock/page-manager';\r\n\r\nexport default registerPage('page1', '/page1', class extends Page {\r\n\r\n\ttitle = \"Page 1\";\r\n\r\n\ttype = 'A';\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\r\n\t\t$page.querySelector('button').addEventListener('click', e => {\r\n\t\t\trefresh();\r\n\t\t})\r\n\t}\r\n\r\n\tupdate(data) {\r\n\t\tthis.$page.querySelector('.js-time').textContent = new Date().getTime();\r\n\t}\r\n});","import './page2.htm'\r\nimport Page from './page.js';\r\nimport {registerPage} from '@trullock/page-manager';\r\n\r\nexport default registerPage('page2', '/page2', class extends Page {\r\n\r\n\ttitle = \"Page 2\";\r\n\r\n\ttype = 'A';\r\n\t\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\t}\r\n});","import './page3.htm'\r\nimport Page from './page.js';\r\nimport * as pageManager from '@trullock/page-manager';\r\n\r\nexport default pageManager.registerPage('page3', '/page3', class extends Page {\r\n\r\n\ttitle = \"Page 3\";\r\n\t\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\r\n\t\t$page.querySelector('.btnRemove').addEventListener('click', e => {\r\n\t\t\tpageManager.removeHistory(state => {\r\n\t\t\t\treturn state.page.type == 'A';\r\n\t\t\t})\r\n\t\t})\r\n\t}\r\n});","import './page4.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\n\r\nexport default registerPage('page4', '/page4', class extends Page {\r\n\r\n\ttitle = \"Page 4\";\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\t}\r\n\r\n\tshow(opts)\r\n\t{\r\n\t\tthrow new PageShowError('/page1', 'Cant show page4, showing page1 instead', {}, 'replace')\r\n\t}\r\n});","import './page404.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\n\r\nexport default registerPage('page404', '/404', class extends Page {\r\n\r\n\ttitle = \"Page 404\";\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\t}\r\n});","export default class Page {\r\n\r\n\tdirty = false;\r\n\r\n\tconstructor($page){\r\n\t\tthis.$page = $page;\r\n\t}\r\n\r\n\tget title() {\r\n\t\treturn this.$page.dataset['title'] || 'PageManager'\r\n\t}\r\n\r\n\tboot(opts){\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\r\n\tshow(opts) {\r\n\t\tthis.$page.style.display = 'block';\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\r\n\tupdate() {\r\n\t\treturn Promise.resolve();\r\n\t }\r\n\r\n\thide() {\r\n\t\tthis.$page.style.display = 'none';\r\n\t\treturn Promise.resolve();\r\n\t}\r\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","import * as pageManager from '../src/index.js'\r\n\r\nimport pageLoading from './page-loading.js'\r\nimport page1 from './page-page1.js'\r\nimport page2 from './page-page2.js'\r\nimport page3 from './page-page3.js'\r\nimport page4 from './page-page4.js'\r\nimport page404 from './page-page404.js'\r\n\r\nwindow.addEventListener('DOMContentLoaded', function () {\r\n\tpageManager.init({\r\n\t\tpageContainer: () => document.body,\r\n\t\tfetchPath: route => '/pages/' + route.routeName + '.htm',\r\n\t\terror404PageName: 'page404'\r\n\t});\r\n\r\n\r\n\t// listen for navigations\r\n\tdocument.addEventListener('click', e => {\r\n\t\tif (e.ctrlKey || e.metaKey)\r\n\t\t\treturn;\r\n\r\n\t\tvar $a = e.target.matches('a') ? e.target : e.target.closest('a');\r\n\t\tif (!$a)\r\n\t\t\treturn;\r\n\r\n\t\tvar href = $a.pathname + $a.search + $a.hash;\r\n\t\tpageManager.navigate(href)\r\n\r\n\t\te.preventDefault();\r\n\t}, false);\r\n\r\n\tdocument.querySelector('.btnStack').addEventListener('click', e => {\r\n\t\tpageManager.printStack();\r\n\t})\r\n});"],"names":["router","pageHash","pageCache","pageTemplateCache","stack","stackPointer","manuallyAdjustingHistory","handlingBeforeUnload","lastNavigationDirection","goal","backData","options","fetchPath","route","routeName","fetchPageTemplate","fetch","then","r","text","html","$div","document","createElement","innerHTML","firstElementChild","$template","pattern","pageInterrupt","attachMarkup","$html","body","appendChild","prepareMarkup","loadingPageName","error404PageName","defaultPageName","beforeUnload","pages","registerPage","argA","argB","argC","namedRoutes","pageClass","undefined","name","Object","entries","addRoute","url","getPath","values","interpolate","hash","refresh","frame","showPage","data","initLoading","page","parse","loadPage","showLoading","scrollY","window","event","action","Promise","resolve","show","fetchPage","cloneNode","path","booted","boot","console","error","page404","reject","PageShowError","key","params","interrupt","getPage","doShow","push","uid","currentState","handleHistoryAction","doUpdate","all","hide","results","scroll","title","update","newUid","history","pushState","splice","length","currentUid","replaceState","pop","distance","doNavigate","fallback","storageAvailable","x","sessionStorage","setItem","removeItem","e","init","opts","assign","storedStack","getItem","JSON","existingDomSelector","querySelector","routesByName","_pattern","parentElement","removeChild","location","pathname","search","catch","handlePopstate","context","direction","handleBeforeUnloadPart1","setTimeout","back","forward","handleBeforeUnloadPart2","result","addEventListener","interrupted","state","previousUid","Math","abs","findContext","stackToSerialize","map","s","stackToStore","stringify","i","expandOnlyHash","startsWith","currentUrl","hashIndex","indexOf","substr","navigate","checkBeforeUnload","replace","go","printStack","log","removeHistory","predicate","statesToKeep","backsToDo","_","k","purgeCache","destroy","constructor","remove","Error","message","captureStackTrace","Page","_class","$page","_defineProperty","textContent","Date","getTime","pageManager","type","dataset","style","display","pageLoading","page1","page2","page3","page4","pageContainer","ctrlKey","metaKey","$a","target","matches","closest","href","preventDefault"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"main.js","mappings":";;;;;;;;;;;;;;AAAA,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,gBAAgB;;;;;;;;;;;;;;;ACAT;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,eAAe,cAAc,6BAA6B;AAC1G;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe;AACf;AACA;AACA;AACA,sBAAsB,6DAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,sCAAsC,oBAAoB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,KAAK;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE;;;;;;;;;;;;;;AC3NH,6BAAe,sCAAY;AAC3B;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC,wBAAwB,OAAO,SAAS;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB,SAAS,UAAU;AACnE,cAAc,sBAAsB;AACpC,eAAe,IAAI;AACnB;AACA,IAAI;AACJ;AACA;AACA,sCAAsC,SAAS;AAC/C,cAAc,QAAQ;AACtB,eAAe,IAAI;AACnB;AACA,IAAI;AACJ;AACA,sDAAsD,GAAG;AACzD,YAAY,MAAM,KAAK;AACvB;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,4CAA4C,EAAE;AAC9C,YAAY,IAAI,OAAO;AACvB;AACA,IAAI;AACJ;AACA;AACA,+CAA+C;AAC/C,YAAY,IAAI,KAAK;AACrB;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,IAAI;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3OsC;AAEtC,IAAIC,QAAQ,GAAG,CAAC,CAAC;EAChBC,SAAS,GAAG,CAAC,CAAC;EACdC,iBAAiB,GAAG,CAAC,CAAC;EACtBC,KAAK,GAAG,EAAE;EACVC,YAAY,GAAG,CAAC,CAAC;AAElB,IAAIC,wBAAwB,GAAG,KAAK;AACpC,IAAIC,kBAAkB,GAAG,KAAK;AAC9B,IAAIC,uBAAuB,GAAG,IAAI;AAElC,IAAIC,IAAI,GAAG,IAAI;AACf,IAAIC,QAAQ,GAAG,CAAC,CAAC;AACjB,IAAIC,OAAO,GAAG;EACbC,SAAS,EAAEC,KAAK,IAAI,SAAS,GAAGA,KAAK,CAACC,SAAS,GAAG,OAAO;EACzDC,iBAAiB,EAAEF,KAAK,IAAI;IAC3B,OAAOG,KAAK,CAACL,OAAO,CAACC,SAAS,CAACC,KAAK,CAAC,CAAC,CACpCI,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,IAAI,EAAE,CAAC,CACnBF,IAAI,CAACG,IAAI,IAAI;MACb,IAAIC,IAAI,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;MACxCF,IAAI,CAA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","sources":["webpack://@trullock/page-manager/./tests/page1.htm","webpack://@trullock/page-manager/./tests/page2.htm","webpack://@trullock/page-manager/./tests/page3.htm","webpack://@trullock/page-manager/./tests/page4.htm","webpack://@trullock/page-manager/./tests/page404.htm","webpack://@trullock/page-manager/./node_modules/@trullock/router/src/index.js","webpack://@trullock/page-manager/./node_modules/@trullock/router/src/pattern-lexer.js","webpack://@trullock/page-manager/./src/index.js","webpack://@trullock/page-manager/./tests/page-loading.js","webpack://@trullock/page-manager/./tests/page-page1.js","webpack://@trullock/page-manager/./tests/page-page2.js","webpack://@trullock/page-manager/./tests/page-page3.js","webpack://@trullock/page-manager/./tests/page-page4.js","webpack://@trullock/page-manager/./tests/page-page404.js","webpack://@trullock/page-manager/./tests/page.js","webpack://@trullock/page-manager/webpack/bootstrap","webpack://@trullock/page-manager/webpack/runtime/define property getters","webpack://@trullock/page-manager/webpack/runtime/hasOwnProperty shorthand","webpack://@trullock/page-manager/webpack/runtime/make namespace object","webpack://@trullock/page-manager/webpack/runtime/publicPath","webpack://@trullock/page-manager/./tests/lolpack.js"],"sourcesContent":["export default __webpack_public_path__ + \"page1.htm\";","export default __webpack_public_path__ + \"page2.htm\";","export default __webpack_public_path__ + \"page3.htm\";","export default __webpack_public_path__ + \"page4.htm\";","export default __webpack_public_path__ + \"page404.htm\";","import PatternLexer from './pattern-lexer.js'\r\n\r\nfunction isKind(val, kind) {\r\n\treturn '[object ' + kind + ']' === Object.prototype.toString.call(val);\r\n}\r\nfunction isRegExp(val) {\r\n\treturn isKind(val, 'RegExp');\r\n}\r\n\r\nfunction decodeQueryString(queryStr, shouldTypecast) {\r\n\tvar queryArr = (queryStr || '').replace('?', '').split('&'),\r\n\t\treg = /([^=]+)=(.+)/,\r\n\t\ti = -1,\r\n\t\tobj = {},\r\n\t\tequalIndex, cur, pValue, pName;\r\n\r\n\twhile ((cur = queryArr[++i])) {\r\n\t\tequalIndex = cur.indexOf('=');\r\n\t\tpName = cur.substring(0, equalIndex);\r\n\t\tpValue = decodeURIComponent(cur.substring(equalIndex + 1));\r\n\r\n\t\tif (pName in obj){\r\n\t\t\tif(isArray(obj[pName])){\r\n\t\t\t\tobj[pName].push(pValue);\r\n\t\t\t} else {\r\n\t\t\t\tobj[pName] = [obj[pName], pValue];\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tobj[pName] = pValue;\r\n\t }\r\n\t}\r\n\treturn obj;\r\n}\r\n\r\nfunction Route(name, pattern, pageClass, priority, router) {\r\n\tvar isRegexPattern = isRegExp(pattern);\r\n\tthis._name = name;\r\n\tthis._router = router;\r\n\tthis._pattern = pattern;\r\n\tthis._paramsIds = isRegexPattern ? null : router.patternLexer.getParamIds(pattern);\r\n\tthis._optionalParamsIds = isRegexPattern ? null : router.patternLexer.getOptionalParamsIds(pattern);\r\n\tthis._matchRegexp = isRegexPattern ? pattern : router.patternLexer.compilePattern(pattern, router.ignoreCase);\r\n\tthis._pageClass = pageClass;\r\n\tthis._priority = priority || 0;\r\n}\r\n\r\nRoute.prototype = {\r\n\r\n\tmatch: function (request) {\r\n\t\treturn this._matchRegexp.test(request);\r\n\t},\r\n\r\n\t_isValidParam: function (request, prop, values) {\r\n\t\tvar validationRule = this.rules[prop],\r\n\t\t\tval = values[prop],\r\n\t\t\tisValid = false,\r\n\t\t\tisQuery = (prop.indexOf('?') === 0);\r\n\r\n\t\tif (val == null && this._optionalParamsIds && arrayIndexOf(this._optionalParamsIds, prop) !== -1) {\r\n\t\t\tisValid = true;\r\n\t\t}\r\n\t\telse if (isRegExp(validationRule)) {\r\n\t\t\tif (isQuery)\r\n\t\t\t\tval = values[prop + '_']; //use raw string\r\n\r\n\t\t\tisValid = validationRule.test(val);\r\n\t\t}\r\n\t\telse if (isArray(validationRule)) {\r\n\t\t\tif (isQuery)\r\n\t\t\t\tval = values[prop + '_']; //use raw string\r\n\r\n\t\t\tisValid = this._isValidArrayRule(validationRule, val);\r\n\t\t}\r\n\t\telse if (isFunction(validationRule)) {\r\n\t\t\tisValid = validationRule(val, request, values);\r\n\t\t}\r\n\r\n\t\treturn isValid; //fail silently if validationRule is from an unsupported type\r\n\t},\r\n\r\n\t_isValidArrayRule: function (arr, val) {\r\n\t\tif (!this._router.ignoreCase) {\r\n\t\t\treturn arrayIndexOf(arr, val) !== -1;\r\n\t\t}\r\n\r\n\t\tif (typeof val === 'string') {\r\n\t\t\tval = val.toLowerCase();\r\n\t\t}\r\n\r\n\t\tvar n = arr.length,\r\n\t\t\titem,\r\n\t\t\tcompareVal;\r\n\r\n\t\twhile (n--) {\r\n\t\t\titem = arr[n];\r\n\t\t\tcompareVal = (typeof item === 'string') ? item.toLowerCase() : item;\r\n\t\t\tif (compareVal === val) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t_getParamsObject: function (request) {\r\n\t\tvar shouldTypecast = this._router.shouldTypecast,\r\n\t\t\tvalues = this._router.patternLexer.getParamValues(request, this._matchRegexp, shouldTypecast),\r\n\t\t\to = {},\r\n\t\t\tn = values.length,\r\n\t\t\tparam, val;\r\n\t\twhile (n--) {\r\n\t\t\tval = values[n];\r\n\t\t\tif (this._paramsIds) {\r\n\t\t\t\tparam = this._paramsIds[n];\r\n\t\t\t\tif (param.indexOf('?') === 0 && val) {\r\n\t\t\t\t\tval = decodeQueryString(val, shouldTypecast);\r\n\t\t\t\t\t\r\n\t\t\t\t\tfor(var key in val){\r\n\t\t\t\t\t\tif(!o[key])\r\n\t\t\t\t\t\t\to[key] = val[key];\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\to['?' + key] = val[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t\to[n] = val;\r\n\t\t\t\t} \r\n\t\t\t\telse \r\n\t\t\t\t\to[param] = val;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn o;\r\n\t},\r\n\r\n\tinterpolate: function (replacements) {\r\n\t\ttry {\r\n\t\t\tvar str = this._router.patternLexer.interpolate(this._pattern, replacements);\r\n\t\t\treturn str;\r\n\t\t}\r\n\t\tcatch(e) {\r\n\t\t\tthrow new Error(`Error interpolating route ${this._pattern} with values ${JSON.stringify(replacements)}\\n` + e);\r\n\t\t}\r\n\t},\r\n\r\n\ttoString: function () {\r\n\t\treturn '[Route pattern:\"' + this._pattern + '\", numListeners:' + this.matched.getNumListeners() + ']';\r\n\t}\r\n\r\n};\r\n\r\n\r\nexport default new class {\r\n\tconstructor() {\r\n\t\tthis.routes = [];\r\n\t\tthis.routesByName = {};\r\n\t\tthis.patternLexer = PatternLexer();\r\n\t}\r\n\r\n\taddRoute (name, pattern, pageClass, priority) {\r\n\t\tpattern += pattern.endsWith('/') ? ':?query:' : '/:?query:';\r\n\t\tvar route = new Route(name, pattern, pageClass, priority, this);\r\n\r\n\t\tvar n = this.routes.length;\r\n\t\tdo\r\n\t\t{ \r\n\t\t\t--n; \r\n\t\t} while (this.routes[n] && route._priority <= this.routes[n]._priority);\r\n\t\tthis.routes.splice(n + 1, 0, route);\r\n\r\n\t\tthis.routesByName[name] = route;\r\n\t\tObject.defineProperty(this, name, { get: () => pattern });\r\n\r\n\t\treturn route;\r\n\t}\r\n\r\n\tinterpolate(name, data){\r\n\t\tif(!this.routesByName[name])\r\n\t\t\tthrow new Error(`Cannot find route by name ${name}`);\r\n\t\t\t\r\n\t\treturn this.routesByName[name].interpolate(data);\r\n\t}\r\n\r\n\tparse (request) {\r\n\t\tvar n = this.routes.length;\r\n\t\tvar route, hash, path;\r\n\r\n\t\tvar index = request.indexOf('#');\r\n\t\tif(index > -1)\r\n\t\t{\r\n\t\t\thash = request.substr(index + 1);\r\n\t\t\trequest = request.substr(0, index);\r\n\t\t}\r\n\r\n\t\tindex = request.indexOf('?');\r\n\t\tif(index > -1)\r\n\t\t\tpath = request.substr(0, index)\r\n\t\telse\r\n\t\t\tpath = request;\t\r\n\t\t\r\n\r\n\t\twhile (route = this.routes[--n]) {\r\n\t\t\tif (route.match(request)) {\r\n\t\t\t\tvar params = route._getParamsObject(request);\r\n\t\t\t\tparams.hash = hash;\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\tpath: path.toLowerCase(),\r\n\t\t\t\t\trouteName: route._name,\r\n\t\t\t\t\tpattern: route._pattern,\r\n\t\t\t\t\tpageClass: route._pageClass,\r\n\t\t\t\t\tparams: params\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\ttoString () {\r\n\t\treturn '[Router numRoutes:' + this.getNumRoutes() + ']';\r\n\t}\r\n}();","export default function () {\r\n\r\n\tvar\r\n\t\t//match chars that should be escaped on string regexp\r\n\t\tESCAPE_CHARS_REGEXP = /[\\\\.+*?\\^$\\[\\](){}\\/'#]/g,\r\n\r\n\t\t//trailing slashes (begin/end of string)\r\n\t\tLOOSE_SLASHES_REGEXP = /^\\/|\\/$/g,\r\n\t\tLEGACY_SLASHES_REGEXP = /\\/$/g,\r\n\r\n\t\t//params - everything between `{ }` or `: :`\r\n\t\tPARAMS_REGEXP = /(?:\\{|:)([^}:]+)(?:\\}|:)/g,\r\n\r\n\t\t//used to save params during compile (avoid escaping things that\r\n\t\t//shouldn't be escaped).\r\n\t\tTOKENS = {\r\n\t\t\t'OS': {\r\n\t\t\t\t//optional slashes\r\n\t\t\t\t//slash between `::` or `}:` or `\\w:` or `:{?` or `}{?` or `\\w{?`\r\n\t\t\t\trgx: /([:}]|\\w(?=\\/))\\/?(:|(?:\\{\\?))/g,\r\n\t\t\t\tsave: '$1{{id}}$2',\r\n\t\t\t\tres: '\\\\/?'\r\n\t\t\t},\r\n\t\t\t'RS': {\r\n\t\t\t\t//required slashes\r\n\t\t\t\t//used to insert slash between `:{` and `}{`\r\n\t\t\t\trgx: /([:}])\\/?(\\{)/g,\r\n\t\t\t\tsave: '$1{{id}}$2',\r\n\t\t\t\tres: '\\\\/'\r\n\t\t\t},\r\n\t\t\t'RQ': {\r\n\t\t\t\t//required query string - everything in between `{? }`\r\n\t\t\t\trgx: /\\{\\?([^}]+)\\}/g,\r\n\t\t\t\t//everything from `?` till `#` or end of string\r\n\t\t\t\tres: '\\\\?([^#]+)'\r\n\t\t\t},\r\n\t\t\t'OQ': {\r\n\t\t\t\t//optional query string - everything in between `:? :`\r\n\t\t\t\trgx: /:\\?([^:]+):/g,\r\n\t\t\t\t//everything from `?` till `#` or end of string\r\n\t\t\t\tres: '(?:\\\\?([^#]*))?'\r\n\t\t\t},\r\n\t\t\t'OR': {\r\n\t\t\t\t//optional rest - everything in between `: *:`\r\n\t\t\t\trgx: /:([^:]+)\\*:/g,\r\n\t\t\t\tres: '(.*)?' // optional group to avoid passing empty string as captured\r\n\t\t\t},\r\n\t\t\t'RR': {\r\n\t\t\t\t//rest param - everything in between `{ *}`\r\n\t\t\t\trgx: /\\{([^}]+)\\*\\}/g,\r\n\t\t\t\tres: '(.+)'\r\n\t\t\t},\r\n\t\t\t// required/optional params should come after rest segments\r\n\t\t\t'RP': {\r\n\t\t\t\t//required params - everything between `{ }`\r\n\t\t\t\trgx: /\\{([^}]+)\\}/g,\r\n\t\t\t\tres: '([^\\\\/?]+)'\r\n\t\t\t},\r\n\t\t\t'OP': {\r\n\t\t\t\t//optional params - everything between `: :`\r\n\t\t\t\trgx: /:([^:]+):/g,\r\n\t\t\t\tres: '([^\\\\/?]+)?\\/?'\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tLOOSE_SLASH = 1,\r\n\t\tSTRICT_SLASH = 2,\r\n\t\tLEGACY_SLASH = 3,\r\n\r\n\t\t_slashMode = LOOSE_SLASH;\r\n\r\n\r\n\tfunction precompileTokens() {\r\n\t\tvar key, cur;\r\n\t\tfor (key in TOKENS) {\r\n\t\t\tif (TOKENS.hasOwnProperty(key)) {\r\n\t\t\t\tcur = TOKENS[key];\r\n\t\t\t\tcur.id = '__CR_' + key + '__';\r\n\t\t\t\tcur.save = ('save' in cur) ? cur.save.replace('{{id}}', cur.id) : cur.id;\r\n\t\t\t\tcur.rRestore = new RegExp(cur.id, 'g');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tprecompileTokens();\r\n\r\n\r\n\tfunction captureVals(regex, pattern) {\r\n\t\tvar vals = [], match;\r\n\t\t// very important to reset lastIndex since RegExp can have \"g\" flag\r\n\t\t// and multiple runs might affect the result, specially if matching\r\n\t\t// same string multiple times on IE 7-8\r\n\t\tregex.lastIndex = 0;\r\n\t\twhile (match = regex.exec(pattern)) {\r\n\t\t\tvals.push(match[1]);\r\n\t\t}\r\n\t\treturn vals;\r\n\t}\r\n\r\n\tfunction getParamIds(pattern) {\r\n\t\treturn captureVals(PARAMS_REGEXP, pattern);\r\n\t}\r\n\r\n\tfunction getOptionalParamsIds(pattern) {\r\n\t\treturn captureVals(TOKENS.OP.rgx, pattern);\r\n\t}\r\n\r\n\tfunction compilePattern(pattern, ignoreCase) {\r\n\t\tpattern = pattern || '';\r\n\r\n\t\tif (pattern) {\r\n\t\t\tif (_slashMode === LOOSE_SLASH) {\r\n\t\t\t\tpattern = pattern.replace(LOOSE_SLASHES_REGEXP, '');\r\n\t\t\t}\r\n\t\t\telse if (_slashMode === LEGACY_SLASH) {\r\n\t\t\t\tpattern = pattern.replace(LEGACY_SLASHES_REGEXP, '');\r\n\t\t\t}\r\n\r\n\t\t\t//save tokens\r\n\t\t\tpattern = replaceTokens(pattern, 'rgx', 'save');\r\n\t\t\t//regexp escape\r\n\t\t\tpattern = pattern.replace(ESCAPE_CHARS_REGEXP, '\\\\$&');\r\n\t\t\t//restore tokens\r\n\t\t\tpattern = replaceTokens(pattern, 'rRestore', 'res');\r\n\r\n\t\t\tif (_slashMode === LOOSE_SLASH) {\r\n\t\t\t\tpattern = '\\\\/?' + pattern;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (_slashMode !== STRICT_SLASH) {\r\n\t\t\t//single slash is treated as empty and end slash is optional\r\n\t\t\tpattern += '\\\\/?';\r\n\t\t}\r\n\t\treturn new RegExp('^' + pattern + '$', ignoreCase ? 'i' : '');\r\n\t}\r\n\r\n\tfunction replaceTokens(pattern, regexpName, replaceName) {\r\n\t\tvar cur, key;\r\n\t\tfor (key in TOKENS) {\r\n\t\t\tif (TOKENS.hasOwnProperty(key)) {\r\n\t\t\t\tcur = TOKENS[key];\r\n\t\t\t\tpattern = pattern.replace(cur[regexpName], cur[replaceName]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn pattern;\r\n\t}\r\n\r\n\tfunction getParamValues(request, regexp, shouldTypecast) {\r\n\t\tvar vals = regexp.exec(request);\r\n\t\tif (vals) {\r\n\t\t\tvals.shift();\r\n\t\t\tif (shouldTypecast) {\r\n\t\t\t\tvals = typecastArrayValues(vals);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn vals;\r\n\t}\r\n\r\n\tfunction interpolate(pattern, replacements) {\r\n\t\t// default to an empty object because pattern might have just\r\n\t\t// optional arguments\r\n\t\treplacements = replacements || {};\r\n\t\tif (typeof pattern !== 'string') {\r\n\t\t\tthrow new Error('Route pattern should be a string.');\r\n\t\t}\r\n\t\t\r\n\t\tvar replaceFn = function (match, prop) {\r\n\t\t\tvar val;\r\n\t\t\tprop = (prop.substr(0, 1) === '?') ? prop.substr(1) : prop;\r\n\t\t\tif (replacements[prop] != null) {\r\n\t\t\t\tif (typeof replacements[prop] === 'object') {\r\n\t\t\t\t\tvar queryParts = [], rep;\r\n\t\t\t\t\tfor (var key in replacements[prop]) {\r\n\t\t\t\t\t\trep = replacements[prop][key];\r\n\t\t\t\t\t\tif (isArray(rep)) {\r\n\t\t\t\t\t\t\tfor (var k in rep) {\r\n\t\t\t\t\t\t\t\tif (key.slice(-2) == '[]') {\r\n\t\t\t\t\t\t\t\t\tqueryParts.push(encodeURIComponent(key.slice(0, -2)) + '[]=' + encodeURIComponent(rep[k]));\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tqueryParts.push(encodeURIComponent(key + '=' + rep[k]));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tqueryParts.push(encodeURIComponent(key + '=' + rep));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tval = '?' + queryParts.join('&');\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// make sure value is a string see #gh-54\r\n\t\t\t\t\tval = String(replacements[prop]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (match.indexOf('*') === -1 && val.indexOf('/') !== -1) {\r\n\t\t\t\t\tthrow new Error('Invalid value \"' + val + '\" for segment \"' + match + '\".');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (match.indexOf('{') !== -1) {\r\n\t\t\t\tthrow new Error('The segment ' + match + ' is required.');\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tval = '';\r\n\t\t\t}\r\n\t\t\treturn val;\r\n\t\t};\r\n\r\n\t\tif (!TOKENS.OS.trail) {\r\n\t\t\tTOKENS.OS.trail = new RegExp('(?:' + TOKENS.OS.id + ')+$');\r\n\t\t}\r\n\r\n\t\treturn pattern\r\n\t\t\t.replace(TOKENS.OS.rgx, TOKENS.OS.save)\r\n\t\t\t.replace(PARAMS_REGEXP, replaceFn)\r\n\t\t\t.replace(TOKENS.OS.trail, '') // remove trailing\r\n\t\t\t.replace(TOKENS.OS.rRestore, '/'); // add slash between segments\r\n\t}\r\n\r\n\t//API\r\n\treturn {\r\n\t\tstrict: function () {\r\n\t\t\t_slashMode = STRICT_SLASH;\r\n\t\t},\r\n\t\tloose: function () {\r\n\t\t\t_slashMode = LOOSE_SLASH;\r\n\t\t},\r\n\t\tlegacy: function () {\r\n\t\t\t_slashMode = LEGACY_SLASH;\r\n\t\t},\r\n\t\tgetParamIds: getParamIds,\r\n\t\tgetOptionalParamsIds: getOptionalParamsIds,\r\n\t\tgetParamValues: getParamValues,\r\n\t\tcompilePattern: compilePattern,\r\n\t\tinterpolate: interpolate\r\n\t};\r\n\r\n}","import router from '@trullock/router';\n\nvar pageHash = {},\n\tpageCache = {},\n\tpageTemplateCache = {},\n\tstack = [],\n\tstackPointer = -1;\n\nvar manuallyAdjustingHistory = false;\nvar handlingBeforeHide = false;\nvar lastNavigationDirection = null;\n\nvar goal = null;\nvar backData = {};\nvar options = {\n\tfetchPath: route => '/pages/' + route.routeName + '.html',\n\tfetchPageTemplate: route => {\n\t\treturn fetch(options.fetchPath(route))\n\t\t\t.then(r => r.text())\n\t\t\t.then(html => {\n\t\t\t\tvar $div = document.createElement('div');\n\t\t\t\t$div.innerHTML = html;\n\t\t\t\t// Pages are assumed to have a single wrapping element\n\t\t\t\treturn $div.firstElementChild;\n\t\t\t})\n\t\t\t.then($template => {\n\t\t\t\tpageTemplateCache[route.pattern] = $template;\n\t\t\t\treturn $template;\n\t\t\t});\n\t},\n\tpageInterrupt: route => null,\n\tattachMarkup: $html => document.body.appendChild($html),\n\tprepareMarkup: $html => { },\n\tloadingPageName: 'loading',\n\terror404PageName: 'error-404',\n\tdefaultPageName: 'root',\n\tbeforeHide: null\n}\n\nexport const pages = pageHash;\n\nexport function registerPage(argA, argB, argC) {\n\n\tlet namedRoutes = null, \n\t\tpageClass = null;\n\n\tif(argC == undefined)\n\t{\n\t\tnamedRoutes = argA;\n\t\tpageClass = argB;\n\t} else {\n\t\tnamedRoutes = {\n\t\t\t[argA]: argB\n\t\t};\n\t\tpageClass = argC;\n\t}\n\t\n\n\tfor (const [name, route] of Object.entries(namedRoutes)) {\n\t\trouter.addRoute(name, route, pageClass);\n\n\t\tpageHash[name] = {\n\t\t\turl: route,\n\t\t\tpageClass: pageClass\n\t\t}\n\t}\n\n\treturn pageClass;\n}\n\nexport function getPath(name, values) {\n\tlet url = router.interpolate(name, values);\n\tif (values?.hash)\n\t\turl += '#' + values.hash;\n\treturn url;\n}\n\nexport function refresh() {\n\tlet frame = stack[stackPointer];\n\tshowPage(frame.data.route.url, frame.data, 'replace');\n}\n\n// TODO: 404 and error too?\nfunction initLoading()\n{\n\tvar page = pageHash[options.loadingPageName];\n\tvar route = router.parse(page.url);\n\treturn loadPage(route, {});\n}\n\nfunction showLoading() {\n\tvar page = pageHash[options.loadingPageName];\n\tvar route = router.parse(page.url);\n\tvar data = {\n\t\troute: route,\n\t\tscrollY: window.scrollY,\n\t\tevent: {\n\t\t\taction: 'replace'\n\t\t}\n\t};\n\n\tvar page = pageCache[page.url].page;\n\n\treturn Promise.resolve(page.show(data));\n}\n\nfunction loadPage(route, data) {\n\n\tvar fetchPage = pageTemplateCache[route.pattern] ? Promise.resolve(pageTemplateCache[route.pattern]) : options.fetchPageTemplate(route);\n\n\treturn fetchPage.then($template => {\n\t\tvar $html = $template.cloneNode(true);\n\t\toptions.prepareMarkup($html);\n\t\toptions.attachMarkup($html);\n\t\tpageCache[route.path] = {\n\t\t\t$html,\n\t\t\tpage: new (route.pageClass)($html)\n\t\t}\n\n\t\tvar page = pageCache[route.path].page;\n\t\t\n\t\tlet booted = new Promise(resolve => resolve(page.boot(data)));\n\t\treturn booted.then(() => page);\n\t});\n}\n\nfunction showPage(url, data, event) {\n\tvar route = router.parse(url);\n\tif (route == null) {\n\t\tconsole.error(`Can't find page: '${url}'`);\n\t\tlet page404 = pageHash[options.error404PageName];\n\t\tif(!page404)\n\t\t\treturn Promise.reject(new PageShowError('/', `Can't find page: '${url}'. Also can't find 404 page: '${options.error404PageName}'`, {}, 'replace'));\n\n\t\treturn Promise.reject(new PageShowError(page404.url, `Can't find page: '${url}'`, {}, 'show'));\n\t}\n\n\tdata = data || {};\n\tfor (let key in route.params)\n\t\tdata[key] = route.params[key];\n\n\tdata.route = {\n\t\turl: url,\n\t\tpath: route.path,\n\t\trouteName: route.routeName,\n\t\tparams: route.params\n\t};\n\tdata.event = event;\n\n\tlet interrupt = options.pageInterrupt(route);\n\tif(interrupt)\n\t{\n\t\tgoal = { url, data };\n\t\treturn showPage(interrupt.url, null, event);\n\t}\n\t\n\tvar getPage = showLoading().then(() => {\n\t\tif (pageCache[route.path])\n\t\t\treturn pageCache[route.path].page;\n\n\t\treturn loadPage(route, data)\n\t});\n\n\t// handle initial page\n\tif (event.action == 'load')\n\t{\n\t\treturn getPage\n\t\t\t\t\t.then(page => doShow(page, data))\n\t\t\t\t\t.then(page => {\n\t\t\t\t\t\t// clean initial load\n\t\t\t\t\t\tif(stackPointer == -1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstack.push({ uid: 0, data, page });\n\t\t\t\t\t\t\tstackPointer = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// page refresh\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstack[stackPointer].page = page;\n\t\t\t\t\t\t\tstack[stackPointer].data = data;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn page;\n\t\t\t\t\t});\n\t}\n\n\tlet currentState = stack[stackPointer];\n\n\tif (currentState.data.route.path == route.path) {\n\t\thandleHistoryAction(event, url, data, currentState.page);\n\t\treturn getPage.then(page => doUpdate(page, data));\n\t}\n\n\tcurrentState.data.scrollY = window.scrollY;\n\n\treturn Promise.all([\n\t\t\tcurrentState.page.hide(event),\n\t\t\tgetPage\n\t\t])\n\t\t\t.then(results => results[1])\n\t\t\t.then(page => {\n\t\t\t\thandleHistoryAction(event, url, data, page);\n\t\t\t\treturn doShow(page, data);\n\t\t\t});\n\t\t\t// .catch(e => {\n\t\t\t// \t// TODO: what case is this?\n\t\t\t// \tmanuallyAdjustingHistory = () => manuallyAdjustingHistory = false;\n\t\t\t// \tif (event.action == 'back')\n\t\t\t// \t\thistory.go(1);\n\t\t\t// \telse if (event.action == 'fwd')\n\t\t\t// \t\thistory.go(-1);\n\t\t\t// });\n}\n\nfunction doShow(page, data) {\n\n\twindow.scroll(0, 0);\n\n\treturn Promise.resolve(page.show(data))\n\t\t\t.then(() => document.title = page.title)\n\t\t\t// todo: hide() should be passed an event object\n\t\t\t.then(() => pageCache[pageHash[options.loadingPageName].url].page.hide())\n\t\t\t// return page\n\t\t\t.then(() => page);\n}\n\n\nasync function doUpdate(page, data) {\n\n\tawait Promise.resolve(page.update(data));\n\n\tdocument.title = page.title\n\t// todo: hide() should be passed an event object\n\tawait pageCache[pageHash[options.loadingPageName].url].page.hide()\n\treturn page;\n}\n\nfunction handleHistoryAction(event, url, data, page) {\n\tif (event.action == 'push') {\n\t\tlet newUid = stack[stackPointer].uid + 1;\n\n\t\twindow.history.pushState({ uid: newUid }, null, url);\n\t\t\n\t\t// remove future\n\t\tstack.splice(stackPointer + 1, stack.length - stackPointer);\n\n\t\tstack.push({ uid: newUid, data, page });\n\t\tstackPointer++;\n\t}\n\telse if (event.action == 'replace') {\n\t\t// TODO: this case may be buggy\n\n\t\tlet currentUid = stack[stackPointer].uid;\n\t\twindow.history.replaceState({ uid: currentUid }, null, url);\n\t\t\n\t\tstack.pop();\n\t\tstack.push({ uid: currentUid, data, page });\n\t}\n\telse if(event.action == 'back')\n\t{\n\t\tstackPointer -= event.distance;\n\t}\n\telse if (event.action == 'fwd')\n\t{\n\t\tstackPointer += event.distance;\n\t}\t\n}\n\nfunction doNavigate(url, data) {\n\n\tif (url === 'goal') {\n\t\turl = goal ? goal.url : data?.fallback || getPath(options.defaultPageName);\n\t\tdata = goal?.data || {}\n\t\tgoal = null;\n\t}\n\n\treturn showPage(url, data, { action: 'push', distance: 0 });\n}\n\nfunction storageAvailable() {\n\treturn false;\n try {\n var x = '__storage_test__';\n window.sessionStorage.setItem(x, x);\n window.sessionStorage.removeItem(x);\n return true;\n }\n catch(e) {\n return false;\n }\n}\n\nexport async function init(opts) {\n\n\tObject.assign(options, opts);\n\n\tif(storageAvailable())\n\t{\n\t\tlet storedStack = window.sessionStorage.getItem(\"stack\");\n\t\tif(storedStack)\n\t\t{\n\t\t\tstoredStack = JSON.parse(storedStack);\n\t\t\tstack = storedStack.stack;\n\t\t\tstackPointer = storedStack.stackPointer;\n\t\t\twindow.sessionStorage.removeItem(\"stack\");\n\t\t}\n\t}\n\n\t// handle pages whose markup is already loaded in the page\n\tfor (var key in pageHash) {\n\t\tif (pageHash[key].pageClass.existingDomSelector) {\n\t\t\tlet $html = document.querySelector(pageHash[key].pageClass.existingDomSelector)\n\t\t\tif(!$html)\n\t\t\t{\n\t\t\t\tconsole.error(`Unable to find DOM element '${pageHash[key].pageClass.existingDomSelector}' for page '${key}'`)\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t\n\t\t\t// TODO: this is inefficient for non parameterised routes. There will always be HTML in memory and then copied for the page once loaded\n\t\t\tpageTemplateCache[router.routesByName[key]._pattern] = $html;\n\t\t\t$html.parentElement.removeChild($html);\t\n\t\t}\n\t}\n\n\tawait initLoading();\n\t\n\t// set initial page\n\tshowPage(window.location.pathname + window.location.search + window.location.hash, null, { action: 'load', distance: 0 }).catch(e => {\n\t\tconsole.error(e);\n\t\t\n\t\tif (e instanceof PageShowError)\n\t\t{\n\t\t\treturn showPage(e.url, e.data, { action: stackPointer == -1 ? 'load' : e.action || 'show' }).then(page => {\n\t\t\t\tif(e.action == 'replace')\n\t\t\t\t\thandleHistoryAction({ action: e.action }, e.url, e.data, page);\n\t\t\t\treturn page;\n\t\t\t});\n\t\t\t\n\t\t}\n\t});\n\n\tfunction handlePopstate(context, direction, distance) {\n\n\t\tif (manuallyAdjustingHistory) {\n\t\t\tmanuallyAdjustingHistory(context, { action: direction, distance });\n\t\t\treturn;\n\t\t}\n\n\t\tif (direction == 'back')\n\t\t\tObject.assign(context.data, backData);\n\t\tbackData = {};\n\n\t\tshowPage(context.data.route.url, context.data, { action: direction, distance }).catch(e => {\n\t\t\tconsole.error(e);\n\t\t\tif (e instanceof PageShowError)\n\t\t\t\treturn showPage(e.url, e.data, { action: e.action || 'show' });\n\t\t}).then(page => {\n\t\t\t// set page as it can be missing in the case of refreshes\n\t\t\tcontext.page = page;\n\t\t})\n\t}\n\n\tfunction handleBeforeHidePart1() {\n\t\t// if we're ignoring beforeHide this navigation\n\t\tif (handlingBeforeHide === 'ignore') {\n\t\t\thandlingBeforeHide = false;\n\t\t\treturn false;\n\t\t}\n\n\t\t// if we have a before-unload confirm to show\n\t\tif (stack[stackPointer].page.beforeHide && options.beforeHide && handlingBeforeHide === false) {\n\t\t\tvar interrupt = stack[stackPointer].page.beforeHide();\n\t\t\tif (interrupt) {\n\t\t\t\thandlingBeforeHide = 'step1';\n\n\t\t\t\t// do this in a new thread, you cant call history actions from inside a history-aciton-handler\n\t\t\t\twindow.setTimeout(() => {\n\t\t\t\t\t// undo the navigation so the URL remains correct whilst we show the confirm dialog\n\t\t\t\t\tif (lastNavigationDirection == 'fwd')\n\t\t\t\t\t\thistory.back();\n\t\t\t\t\telse if (lastNavigationDirection == 'back')\n\t\t\t\t\t\thistory.forward();\n\t\t\t\t}, 1);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// we've finished beforeHiding\n\t\tif (handlingBeforeHide === 'step2')\n\t\t\thandlingBeforeHide = false;\n\n\t\treturn false;\n\t}\n\n\tfunction handleBeforeHidePart2() {\n\t\tif (handlingBeforeHide !== 'step1')\n\t\t\treturn false;\n\n\t\t// do the beforeHide action, then...\n\t\toptions.beforeHide(stack[stackPointer].page.beforeHide()).then(result => {\n\n\t\t\t// if the user confirmed, redo the original action\n\t\t\tif (result) {\n\n\t\t\t\thandlingBeforeHide = 'step2';\n\n\t\t\t\tif (lastNavigationDirection == 'fwd')\n\t\t\t\t\thistory.forward();\n\t\t\t\telse if (lastNavigationDirection == 'back')\n\t\t\t\t\thistory.back();\n\t\t\t} else {\n\t\t\t\thandlingBeforeHide = false;\n\t\t\t}\n\t\t});\n\n\t\treturn true;\n\t}\n\n\t// listen for browser navigations\n\twindow.addEventListener(\"popstate\", e => {\n\t\tvar interrupted = handleBeforeHidePart2();\n\t\tif (interrupted)\n\t\t\treturn;\n\n\t\tlet newUid = e.state?.uid || 0;\n\t\tlet previousUid = stack[stackPointer].uid;\n\n\t\tlastNavigationDirection = newUid > previousUid ? 'fwd' : 'back';\n\t\tlet distance = Math.abs(newUid - previousUid);\n\n\t\tvar interrupted = handleBeforeHidePart1();\n\t\tif (interrupted)\n\t\t\treturn;\n\n\t\tvar context = findContext(newUid);\n\t\thandlePopstate(context, lastNavigationDirection, distance);\n\t});\n\n\tif(storageAvailable())\n\t{\n\t\twindow.addEventListener(\"beforeHide\", () => {\n\n\t\t\tlet stackToSerialize = stack.map(s => ({\n\t\t\t\tuid: s.uid,\n\t\t\t\tdata: s.data\n\t\t\t}));\n\t\t\tlet stackToStore = {\n\t\t\t\tstack: stackToSerialize,\n\t\t\t\tstackPointer\n\t\t\t}\n\t\t\twindow.sessionStorage.setItem('stack', JSON.stringify(stackToStore));\n\t\t});\n\t}\n}\n\nfunction findContext(uid){\n\tfor (var i = 0; i < stack.length; i++) {\n\t\tif (stack[i].uid == uid)\n\t\t\treturn stack[i];\n\t}\n\treturn null;\n}\n\nfunction expandOnlyHash(url)\n{\n\tif(url.startsWith('#'))\n\t{\n\t\tlet currentState = stack[stackPointer];\n\t\tlet currentUrl = currentState.data.route.url;\n\t\tlet hashIndex = currentUrl.indexOf('#');\n\t\tif(hashIndex > -1)\n\t\t\treturn currentUrl.substr(0, hashIndex);\n\t\treturn currentUrl + url;\n\t}\n\n\treturn url;\n}\n\nexport function navigate(url, data, checkBeforeHide = true) {\n\n\turl = expandOnlyHash(url);\n\n\tif (checkBeforeHide === true && stack[stackPointer].page.beforeHide && options.beforeHide) {\n\n\t\tvar interrupt = stack[stackPointer].page.beforeHide();\n\t\tif (interrupt !== false) {\n\t\t\toptions.beforeHide(interrupt).then(result => {\n\t\t\t\tif (result)\n\t\t\t\t\tdoNavigate(url, data);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t}\n\n\tdoNavigate(url, data).catch(e => {\n\t\tconsole.error(e);\n\t\tif (e instanceof PageShowError)\n\t\t\treturn showPage(e.url, e.data, { action: e.action || 'show' });\n\t});\n}\n\nexport function replace(url, data) {\n\turl = expandOnlyHash(url);\n\treturn showPage(url, data, { action: 'replace', distance: 0 });\n}\n\nexport function show(url, data) {\n\treturn showPage(url, data, { action: 'show', distance: 0 });\n}\n\nexport function back(data, checkBeforeHide) {\n\tbackData = data || {};\n\thandlingBeforeHide = checkBeforeHide === false ? 'ignore' : false;\n\thistory.go(-1);\n}\n\nexport function printStack() {\n\tconsole.log(\"Stack length: \" + stack.length);\n\tconsole.log(\"Stack pointer: \" + stackPointer);\n\tfor(var i = 0; i < stack.length; i++)\n\t\tconsole.log(stack[i]);\n}\n\nexport function removeHistory(predicate)\n{\n\tlet statesToKeep = [];\n\tfor (var i = 0; i < stack.length; i++)\n\t{\n\t\tif (!predicate(stack[i], i))\n\t\t\tstatesToKeep.push(stack[i]);\n\t}\n\n\t// TODO: ensure we always have at least 1 state to keep - must/can this always be the current page?\n\n\tif (statesToKeep.length == stack.length)\n\t\treturn Promise.resolve();\n\n\n\treturn new Promise((resolve, reject) => {\n\n\n\t\tlet backsToDo = stackPointer - 1;\n\t\tlet currentUid = -1;\n\n\t\t// TODO: handle stack pointer not being at the tail when this process starts\n\n\t\tmanuallyAdjustingHistory = _ => {\n\t\t\t// rewind to the first history position\n\t\t\tif(backsToDo > 0)\n\t\t\t{\n\t\t\t\twindow.setTimeout(() => {\n\t\t\t\t\tbacksToDo--;\n\t\t\t\t\thistory.back();\n\t\t\t\t}, 1);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// reset the stack\n\t\t\tstack = [];\n\n\t\t\tfor (var k = 0; k < statesToKeep.length; k++) {\n\t\t\t\tlet currentState = statesToKeep[k];\n\t\t\t\tcurrentState.uid = ++currentUid;\n\n\t\t\t\tif (k == 0)\n\t\t\t\t\twindow.history.replaceState({ uid: currentState.uid }, null, currentState.data.route.url);\n\t\t\t\telse\n\t\t\t\t\twindow.history.pushState({ uid: currentState.uid }, null, currentState.data.route.url);\n\t\t\t\t\n\t\t\t\t\t// TODO: this doesnt seem to work when k=0\n\t\t\t\tdocument.title = currentState.page.title;\n\n\t\t\t\tstack.push(currentState);\n\t\t\t}\n\n\t\t\tstackPointer = stack.length - 1;\n\n\t\t\tmanuallyAdjustingHistory = false;\n\t\t};\n\n\t\thistory.back();\n\t});\n}\n\nexport function purgeCache() {\n\tfor (const path in pageCache)\n\t{\n\t\tpageCache[path].page.destroy && pageCache[path].page.destroy();\n\t\tif (!pageCache[path].page.constructor.existingDomSelector)\n\t\t{\n\t\t\tpageCache[path].$html.remove();\n\t\t\tdelete pageCache[path];\n\t\t}\n\t}\n}\n\nexport class PageShowError extends Error {\n\tconstructor(url, message, data, action) {\n\t\tsuper(message || 'Error showing requested page')\n\n\t\t// Maintains proper stack trace for where our error was thrown (only available on V8)\n\t\tif (Error.captureStackTrace)\n\t\t\tError.captureStackTrace(this, PageShowError)\n\n\t\tthis.name = 'PageShowError'\n\t\tthis.url = url;\n\t\tthis.data = data;\n\t\tthis.action = action;\n\t}\n}","import Page from './page.js';\r\nimport {registerPage} from '@trullock/page-manager';\r\n\r\nexport default registerPage('loading', '/loading', class extends Page {\r\n\r\n\tstatic existingDomSelector = '#page-loading';\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\t}\r\n});","import './page1.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, refresh} from '@trullock/page-manager';\r\n\r\nexport default registerPage('page1', '/page1', class extends Page {\r\n\r\n\ttitle = \"Page 1\";\r\n\r\n\ttype = 'A';\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\r\n\t\t$page.querySelector('button').addEventListener('click', e => {\r\n\t\t\trefresh();\r\n\t\t})\r\n\t}\r\n\r\n\tupdate(data) {\r\n\t\tthis.$page.querySelector('.js-time').textContent = new Date().getTime();\r\n\t}\r\n});","import './page2.htm'\r\nimport Page from './page.js';\r\nimport {registerPage} from '@trullock/page-manager';\r\n\r\nexport default registerPage('page2', '/page2', class extends Page {\r\n\r\n\ttitle = \"Page 2\";\r\n\r\n\ttype = 'A';\r\n\t\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\t}\r\n});","import './page3.htm'\r\nimport Page from './page.js';\r\nimport * as pageManager from '@trullock/page-manager';\r\n\r\nexport default pageManager.registerPage('page3', '/page3', class extends Page {\r\n\r\n\ttitle = \"Page 3\";\r\n\t\r\n\tbeforeHide = () => 'Are you sure?'\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\r\n\t\t$page.querySelector('.btnRemove').addEventListener('click', e => {\r\n\t\t\tpageManager.removeHistory(state => {\r\n\t\t\t\treturn state.page.type == 'A';\r\n\t\t\t})\r\n\t\t})\r\n\t}\r\n});","import './page4.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\n\r\nexport default registerPage('page4', '/page4', class extends Page {\r\n\r\n\ttitle = \"Page 4\";\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\t}\r\n\r\n\tshow(opts)\r\n\t{\r\n\t\tthrow new PageShowError('/page1', 'Cant show page4, showing page1 instead', {}, 'replace')\r\n\t}\r\n});","import './page404.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\n\r\nexport default registerPage('page404', '/404', class extends Page {\r\n\r\n\ttitle = \"Page 404\";\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\t}\r\n});","export default class Page {\r\n\r\n\tdirty = false;\r\n\r\n\tconstructor($page){\r\n\t\tthis.$page = $page;\r\n\t}\r\n\r\n\tget title() {\r\n\t\treturn this.$page.dataset['title'] || 'PageManager'\r\n\t}\r\n\r\n\tboot(opts){\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\r\n\tshow(opts) {\r\n\t\tthis.$page.style.display = 'block';\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\r\n\tupdate() {\r\n\t\treturn Promise.resolve();\r\n\t }\r\n\r\n\thide() {\r\n\t\tthis.$page.style.display = 'none';\r\n\t\treturn Promise.resolve();\r\n\t}\r\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","import * as pageManager from '../src/index.js'\r\n\r\nimport pageLoading from './page-loading.js'\r\nimport page1 from './page-page1.js'\r\nimport page2 from './page-page2.js'\r\nimport page3 from './page-page3.js'\r\nimport page4 from './page-page4.js'\r\nimport page404 from './page-page404.js'\r\n\r\nwindow.addEventListener('DOMContentLoaded', function () {\r\n\tpageManager.init({\r\n\t\tpageContainer: () => document.body,\r\n\t\tfetchPath: route => '/pages/' + route.routeName + '.htm',\r\n\t\terror404PageName: 'page404',\r\n\t\tbeforeHide: message => new Promise(resolve => {\r\n\t\t\tresolve(confirm(message))\r\n\t\t})\r\n\t});\r\n\r\n\r\n\t// listen for navigations\r\n\tdocument.addEventListener('click', e => {\r\n\t\tif (e.ctrlKey || e.metaKey)\r\n\t\t\treturn;\r\n\r\n\t\tvar $a = e.target.matches('a') ? e.target : e.target.closest('a');\r\n\t\tif (!$a)\r\n\t\t\treturn;\r\n\r\n\t\tvar href = $a.pathname + $a.search + $a.hash;\r\n\t\tpageManager.navigate(href)\r\n\r\n\t\te.preventDefault();\r\n\t}, false);\r\n\r\n\tdocument.querySelector('.btnStack').addEventListener('click', e => {\r\n\t\tpageManager.printStack();\r\n\t})\r\n});"],"names":["router","pageHash","pageCache","pageTemplateCache","stack","stackPointer","manuallyAdjustingHistory","handlingBeforeHide","lastNavigationDirection","goal","backData","options","fetchPath","route","routeName","fetchPageTemplate","fetch","then","r","text","html","$div","document","createElement","innerHTML","firstElementChild","$template","pattern","pageInterrupt","attachMarkup","$html","body","appendChild","prepareMarkup","loadingPageName","error404PageName","defaultPageName","beforeHide","pages","registerPage","argA","argB","argC","namedRoutes","pageClass","undefined","name","Object","entries","addRoute","url","getPath","values","interpolate","hash","refresh","frame","showPage","data","initLoading","page","parse","loadPage","showLoading","scrollY","window","event","action","Promise","resolve","show","fetchPage","cloneNode","path","booted","boot","console","error","page404","reject","PageShowError","key","params","interrupt","getPage","doShow","push","uid","currentState","handleHistoryAction","doUpdate","all","hide","results","scroll","title","update","newUid","history","pushState","splice","length","currentUid","replaceState","pop","distance","doNavigate","fallback","storageAvailable","x","sessionStorage","setItem","removeItem","e","init","opts","assign","storedStack","getItem","JSON","existingDomSelector","querySelector","routesByName","_pattern","parentElement","removeChild","location","pathname","search","catch","handlePopstate","context","direction","handleBeforeHidePart1","setTimeout","back","forward","handleBeforeHidePart2","result","addEventListener","interrupted","state","previousUid","Math","abs","findContext","stackToSerialize","map","s","stackToStore","stringify","i","expandOnlyHash","startsWith","currentUrl","hashIndex","indexOf","substr","navigate","checkBeforeHide","replace","go","printStack","log","removeHistory","predicate","statesToKeep","backsToDo","_","k","purgeCache","destroy","constructor","remove","Error","message","captureStackTrace","Page","_class","$page","_defineProperty","textContent","Date","getTime","pageManager","type","dataset","style","display","pageLoading","page1","page2","page3","page4","pageContainer","confirm","ctrlKey","metaKey","$a","target","matches","closest","href","preventDefault"],"sourceRoot":""}
|
package/tests/index.html
CHANGED
package/tests/lolpack.js
CHANGED
|
@@ -11,7 +11,10 @@ window.addEventListener('DOMContentLoaded', function () {
|
|
|
11
11
|
pageManager.init({
|
|
12
12
|
pageContainer: () => document.body,
|
|
13
13
|
fetchPath: route => '/pages/' + route.routeName + '.htm',
|
|
14
|
-
error404PageName: 'page404'
|
|
14
|
+
error404PageName: 'page404',
|
|
15
|
+
beforeHide: message => new Promise(resolve => {
|
|
16
|
+
resolve(confirm(message))
|
|
17
|
+
})
|
|
15
18
|
});
|
|
16
19
|
|
|
17
20
|
|