@trullock/page-manager 1.3.0 → 1.3.1
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/src/index.js +35 -20
- package/tests/dist/main.js +37 -24
- package/tests/dist/main.js.map +1 -1
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -220,9 +220,19 @@ async function doUpdate(page, data) {
|
|
|
220
220
|
document.title = page.title
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
+
function getNewUid()
|
|
224
|
+
{
|
|
225
|
+
let uid = -1;
|
|
226
|
+
|
|
227
|
+
for(let i = 0; i < stack.length; i++)
|
|
228
|
+
uid = Math.max(uid, stack[i].uid)
|
|
229
|
+
|
|
230
|
+
return uid + 1;
|
|
231
|
+
}
|
|
232
|
+
|
|
223
233
|
async function handleHistoryAction(event, url, data, page) {
|
|
224
234
|
if (event.action == 'push') {
|
|
225
|
-
let newUid =
|
|
235
|
+
let newUid = getNewUid()
|
|
226
236
|
|
|
227
237
|
window.history.pushState({ uid: newUid }, null, url);
|
|
228
238
|
emitUrlChanged(url);
|
|
@@ -235,20 +245,22 @@ async function handleHistoryAction(event, url, data, page) {
|
|
|
235
245
|
}
|
|
236
246
|
else if (event.action == 'replace')
|
|
237
247
|
{
|
|
238
|
-
|
|
239
|
-
window.history.replaceState({ uid: currentUid }, null, url);
|
|
240
|
-
emitUrlChanged(url);
|
|
241
|
-
stack[stackPointer] = { uid: currentUid, data, page };
|
|
242
|
-
|
|
243
|
-
if(stack[stackPointer].data.route.url == stack[stackPointer - 1]?.data?.route?.url)
|
|
248
|
+
if(data.route.url == stack[stackPointer - 1]?.data?.route?.url)
|
|
244
249
|
{
|
|
245
250
|
let statesToKeep = [];
|
|
246
251
|
for (var i = 0; i < stackPointer - 1; i++)
|
|
247
252
|
statesToKeep.push(stack[i]);
|
|
248
|
-
statesToKeep.push(stack[stackPointer]);
|
|
253
|
+
statesToKeep.push({ uid: stack[stackPointer - 1].uid, data, page });
|
|
249
254
|
|
|
250
255
|
await modifyHistory(statesToKeep);
|
|
251
256
|
}
|
|
257
|
+
else
|
|
258
|
+
{
|
|
259
|
+
let newId = getNewUid();
|
|
260
|
+
window.history.replaceState({ uid: newId }, null, url);
|
|
261
|
+
stack[stackPointer] = { uid: newId, data, page };
|
|
262
|
+
emitUrlChanged(url);
|
|
263
|
+
}
|
|
252
264
|
}
|
|
253
265
|
else if(event.action == 'back')
|
|
254
266
|
{
|
|
@@ -413,6 +425,7 @@ export async function ready()
|
|
|
413
425
|
|
|
414
426
|
// listen for browser navigations
|
|
415
427
|
window.addEventListener("popstate", async e => {
|
|
428
|
+
// TODO: is 0 sensible here, or should we call getNewId()?
|
|
416
429
|
let newUid = e.state?.uid || 0;
|
|
417
430
|
let previousUid = stack[stackPointer].uid;
|
|
418
431
|
let lastNavigationDirection = newUid > previousUid ? 'fwd' : 'back';
|
|
@@ -528,12 +541,12 @@ function modifyHistory(statesToKeep)
|
|
|
528
541
|
return new Promise(async (resolve, reject) => {
|
|
529
542
|
|
|
530
543
|
let backsToDo = stackPointer;
|
|
531
|
-
let currentUid = -1;
|
|
532
544
|
|
|
533
545
|
// TODO: handle stack pointer not being at the tail when this process starts
|
|
534
546
|
|
|
535
547
|
// see BUG comments at the top of this method
|
|
536
548
|
let apply2ndFrameHack = statesToKeep.length == 1 && stack.length > 1
|
|
549
|
+
let secondFrameHackUid = -1
|
|
537
550
|
let defaultPageRouteResult = null;
|
|
538
551
|
let defaultPage = null;
|
|
539
552
|
if(apply2ndFrameHack)
|
|
@@ -541,6 +554,8 @@ function modifyHistory(statesToKeep)
|
|
|
541
554
|
let url = getPath(options.defaultPageName);
|
|
542
555
|
defaultPageRouteResult = router.parse(url);
|
|
543
556
|
defaultPage = await loadPage(defaultPageRouteResult, {});
|
|
557
|
+
|
|
558
|
+
secondFrameHackUid = getNewUid();
|
|
544
559
|
}
|
|
545
560
|
|
|
546
561
|
manuallyAdjustingHistory = async _ => {
|
|
@@ -548,13 +563,6 @@ function modifyHistory(statesToKeep)
|
|
|
548
563
|
if(backsToDo > 0)
|
|
549
564
|
{
|
|
550
565
|
window.setTimeout(() => {
|
|
551
|
-
// see BUG comments at the top of this method
|
|
552
|
-
if(apply2ndFrameHack && backsToDo == 1)
|
|
553
|
-
{
|
|
554
|
-
window.history.replaceState({ uid: stack[1].uid }, defaultPage.title, defaultPageRouteResult.path);
|
|
555
|
-
document.title = defaultPage.title;
|
|
556
|
-
}
|
|
557
|
-
|
|
558
566
|
backsToDo--;
|
|
559
567
|
history.back();
|
|
560
568
|
}, 1);
|
|
@@ -567,26 +575,25 @@ function modifyHistory(statesToKeep)
|
|
|
567
575
|
|
|
568
576
|
for (var k = 0; k < statesToKeep.length; k++) {
|
|
569
577
|
let currentState = statesToKeep[k];
|
|
570
|
-
currentState.uid = ++currentUid;
|
|
571
578
|
|
|
572
579
|
if (k == 0)
|
|
573
580
|
window.history.replaceState({ uid: currentState.uid }, currentState.page.title, currentState.data.route.url);
|
|
574
581
|
else
|
|
575
582
|
window.history.pushState({ uid: currentState.uid }, currentState.page.title, currentState.data.route.url);
|
|
576
583
|
|
|
577
|
-
emitUrlChanged(currentState.data.route.url)
|
|
578
|
-
|
|
579
584
|
// TODO: this doesnt seem to work when k=0
|
|
580
585
|
document.title = currentState.page.title;
|
|
581
586
|
|
|
582
587
|
stack.push(currentState);
|
|
588
|
+
|
|
589
|
+
emitUrlChanged(currentState.data.route.url)
|
|
583
590
|
}
|
|
584
591
|
|
|
585
592
|
// see BUG comments at the top of this method
|
|
586
593
|
if(apply2ndFrameHack)
|
|
587
594
|
{
|
|
588
595
|
stack.push({
|
|
589
|
-
uid:
|
|
596
|
+
uid: secondFrameHackUid,
|
|
590
597
|
data: {
|
|
591
598
|
route: {
|
|
592
599
|
url: defaultPageRouteResult.path,
|
|
@@ -610,6 +617,14 @@ function modifyHistory(statesToKeep)
|
|
|
610
617
|
resolve();
|
|
611
618
|
};
|
|
612
619
|
|
|
620
|
+
// see BUG comments at the top of this method
|
|
621
|
+
if(apply2ndFrameHack && backsToDo == 1)
|
|
622
|
+
{
|
|
623
|
+
window.history.replaceState({ uid: secondFrameHackUid }, defaultPage.title, defaultPageRouteResult.path);
|
|
624
|
+
document.title = defaultPage.title;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
backsToDo--;
|
|
613
628
|
history.back();
|
|
614
629
|
});
|
|
615
630
|
}
|
package/tests/dist/main.js
CHANGED
|
@@ -800,9 +800,14 @@ async function doUpdate(page, data) {
|
|
|
800
800
|
await Promise.resolve(page.update(data));
|
|
801
801
|
document.title = page.title;
|
|
802
802
|
}
|
|
803
|
+
function getNewUid() {
|
|
804
|
+
let uid = -1;
|
|
805
|
+
for (let i = 0; i < stack.length; i++) uid = Math.max(uid, stack[i].uid);
|
|
806
|
+
return uid + 1;
|
|
807
|
+
}
|
|
803
808
|
async function handleHistoryAction(event, url, data, page) {
|
|
804
809
|
if (event.action == 'push') {
|
|
805
|
-
let newUid =
|
|
810
|
+
let newUid = getNewUid();
|
|
806
811
|
window.history.pushState({
|
|
807
812
|
uid: newUid
|
|
808
813
|
}, null, url);
|
|
@@ -817,21 +822,26 @@ async function handleHistoryAction(event, url, data, page) {
|
|
|
817
822
|
});
|
|
818
823
|
stackPointer++;
|
|
819
824
|
} else if (event.action == 'replace') {
|
|
820
|
-
|
|
821
|
-
window.history.replaceState({
|
|
822
|
-
uid: currentUid
|
|
823
|
-
}, null, url);
|
|
824
|
-
emitUrlChanged(url);
|
|
825
|
-
stack[stackPointer] = {
|
|
826
|
-
uid: currentUid,
|
|
827
|
-
data,
|
|
828
|
-
page
|
|
829
|
-
};
|
|
830
|
-
if (stack[stackPointer].data.route.url == stack[stackPointer - 1]?.data?.route?.url) {
|
|
825
|
+
if (data.route.url == stack[stackPointer - 1]?.data?.route?.url) {
|
|
831
826
|
let statesToKeep = [];
|
|
832
827
|
for (var i = 0; i < stackPointer - 1; i++) statesToKeep.push(stack[i]);
|
|
833
|
-
statesToKeep.push(
|
|
828
|
+
statesToKeep.push({
|
|
829
|
+
uid: stack[stackPointer - 1].uid,
|
|
830
|
+
data,
|
|
831
|
+
page
|
|
832
|
+
});
|
|
834
833
|
await modifyHistory(statesToKeep);
|
|
834
|
+
} else {
|
|
835
|
+
let newId = getNewUid();
|
|
836
|
+
window.history.replaceState({
|
|
837
|
+
uid: newId
|
|
838
|
+
}, null, url);
|
|
839
|
+
stack[stackPointer] = {
|
|
840
|
+
uid: newId,
|
|
841
|
+
data,
|
|
842
|
+
page
|
|
843
|
+
};
|
|
844
|
+
emitUrlChanged(url);
|
|
835
845
|
}
|
|
836
846
|
} else if (event.action == 'back') {
|
|
837
847
|
stackPointer -= event.distance;
|
|
@@ -968,6 +978,7 @@ async function ready() {
|
|
|
968
978
|
|
|
969
979
|
// listen for browser navigations
|
|
970
980
|
window.addEventListener("popstate", async e => {
|
|
981
|
+
// TODO: is 0 sensible here, or should we call getNewId()?
|
|
971
982
|
let newUid = e.state?.uid || 0;
|
|
972
983
|
let previousUid = stack[stackPointer].uid;
|
|
973
984
|
let lastNavigationDirection = newUid > previousUid ? 'fwd' : 'back';
|
|
@@ -1059,30 +1070,24 @@ function modifyHistory(statesToKeep) {
|
|
|
1059
1070
|
if (statesToKeep.length == stack.length) return Promise.resolve();
|
|
1060
1071
|
return new Promise(async (resolve, reject) => {
|
|
1061
1072
|
let backsToDo = stackPointer;
|
|
1062
|
-
let currentUid = -1;
|
|
1063
1073
|
|
|
1064
1074
|
// TODO: handle stack pointer not being at the tail when this process starts
|
|
1065
1075
|
|
|
1066
1076
|
// see BUG comments at the top of this method
|
|
1067
1077
|
let apply2ndFrameHack = statesToKeep.length == 1 && stack.length > 1;
|
|
1078
|
+
let secondFrameHackUid = -1;
|
|
1068
1079
|
let defaultPageRouteResult = null;
|
|
1069
1080
|
let defaultPage = null;
|
|
1070
1081
|
if (apply2ndFrameHack) {
|
|
1071
1082
|
let url = getPath(options.defaultPageName);
|
|
1072
1083
|
defaultPageRouteResult = _trullock_router__WEBPACK_IMPORTED_MODULE_0__["default"].parse(url);
|
|
1073
1084
|
defaultPage = await loadPage(defaultPageRouteResult, {});
|
|
1085
|
+
secondFrameHackUid = getNewUid();
|
|
1074
1086
|
}
|
|
1075
1087
|
manuallyAdjustingHistory = async _ => {
|
|
1076
1088
|
// rewind to the first history position
|
|
1077
1089
|
if (backsToDo > 0) {
|
|
1078
1090
|
window.setTimeout(() => {
|
|
1079
|
-
// see BUG comments at the top of this method
|
|
1080
|
-
if (apply2ndFrameHack && backsToDo == 1) {
|
|
1081
|
-
window.history.replaceState({
|
|
1082
|
-
uid: stack[1].uid
|
|
1083
|
-
}, defaultPage.title, defaultPageRouteResult.path);
|
|
1084
|
-
document.title = defaultPage.title;
|
|
1085
|
-
}
|
|
1086
1091
|
backsToDo--;
|
|
1087
1092
|
history.back();
|
|
1088
1093
|
}, 1);
|
|
@@ -1094,23 +1099,22 @@ function modifyHistory(statesToKeep) {
|
|
|
1094
1099
|
stack = [];
|
|
1095
1100
|
for (var k = 0; k < statesToKeep.length; k++) {
|
|
1096
1101
|
let currentState = statesToKeep[k];
|
|
1097
|
-
currentState.uid = ++currentUid;
|
|
1098
1102
|
if (k == 0) window.history.replaceState({
|
|
1099
1103
|
uid: currentState.uid
|
|
1100
1104
|
}, currentState.page.title, currentState.data.route.url);else window.history.pushState({
|
|
1101
1105
|
uid: currentState.uid
|
|
1102
1106
|
}, currentState.page.title, currentState.data.route.url);
|
|
1103
|
-
emitUrlChanged(currentState.data.route.url);
|
|
1104
1107
|
|
|
1105
1108
|
// TODO: this doesnt seem to work when k=0
|
|
1106
1109
|
document.title = currentState.page.title;
|
|
1107
1110
|
stack.push(currentState);
|
|
1111
|
+
emitUrlChanged(currentState.data.route.url);
|
|
1108
1112
|
}
|
|
1109
1113
|
|
|
1110
1114
|
// see BUG comments at the top of this method
|
|
1111
1115
|
if (apply2ndFrameHack) {
|
|
1112
1116
|
stack.push({
|
|
1113
|
-
uid:
|
|
1117
|
+
uid: secondFrameHackUid,
|
|
1114
1118
|
data: {
|
|
1115
1119
|
route: {
|
|
1116
1120
|
url: defaultPageRouteResult.path,
|
|
@@ -1128,6 +1132,15 @@ function modifyHistory(statesToKeep) {
|
|
|
1128
1132
|
manuallyAdjustingHistory = false;
|
|
1129
1133
|
resolve();
|
|
1130
1134
|
};
|
|
1135
|
+
|
|
1136
|
+
// see BUG comments at the top of this method
|
|
1137
|
+
if (apply2ndFrameHack && backsToDo == 1) {
|
|
1138
|
+
window.history.replaceState({
|
|
1139
|
+
uid: secondFrameHackUid
|
|
1140
|
+
}, defaultPage.title, defaultPageRouteResult.path);
|
|
1141
|
+
document.title = defaultPage.title;
|
|
1142
|
+
}
|
|
1143
|
+
backsToDo--;
|
|
1131
1144
|
history.back();
|
|
1132
1145
|
});
|
|
1133
1146
|
}
|
package/tests/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","mappings":";;;;;;;;;;;;;;AAAA,iEAAe,qBAAuB,gBAAgB;;;;;;;;;;;;;;ACAtD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,gBAAgB;;;;;;;;;;;;;;ACAtD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;;ACAP;AAC7C;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;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,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;AACA;AACA,sBAAsB,6DAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,sCAAsC,oBAAoB;AAC1D;AACA;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;AACA;AACA;AACA,CAAC,EAAE;;;;;;;;;;;;;;AC1OH,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,SAAS,GAAG,CAAC,CAAC;EACjBC,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,sBAAsB,GAAG,IAAI;AAEjC,IAAIC,IAAI,GAAG,IAAI;AACf,IAAIC,QAAQ,GAAG,CAAC,CAAC;AACjB,IAAIC,OAAO,GAAG;EACbC,aAAa,EAAEC,WAAW,IAAI,IAAI;EAClCC,YAAY,EAAEC,KAAK,IAAIC,QAAQ,CAACC,IAAI,CAACC,WAAW,CAACH,KAAK,CAAC;EACvDI,aAAa,EAAEJ,KAAK,IAAI,CAAE,CAAC;EAC3BK,eAAe,EAAE,SAAS;EAC1BC,gBAAgB,EAAE,WAAW;EA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","sources":["webpack://@trullock/page-manager/./tests/loading.htm","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/./tests/pageX.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/helpers.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-pageX.js","webpack://@trullock/page-manager/./tests/page-show-fail.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__ + \"loading.htm\";","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\";","export default __webpack_public_path__ + \"pageX.htm\";","import PatternLexer from './pattern-lexer.js'\r\n\r\nfunction isKind(val, kind)\r\n{\r\n\treturn '[object ' + kind + ']' === Object.prototype.toString.call(val);\r\n}\r\n\r\nfunction isRegExp(val)\r\n{\r\n\treturn isKind(val, 'RegExp');\r\n}\r\n\r\nfunction decodeQueryString(queryStr)\r\n{\r\n\tlet queryArr = (queryStr || '').replace('?', '').split('&'),\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{\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{\r\n\t\t\tif(isArray(obj[pName]))\r\n\t\t\t\tobj[pName].push(pValue);\r\n\t\t\telse\r\n\t\t\t\tobj[pName] = [obj[pName], pValue];\r\n\t\t\t\r\n\t\t}\r\n\t\telse\r\n\t\t{\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, data, 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._data = data;\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{\r\n\tconstructor()\r\n\t{\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, data, priority)\r\n\t{\r\n\t\tpattern += pattern.endsWith('/') ? ':?query:' : '/:?query:';\r\n\t\tvar route = new Route(name, pattern, data, 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\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{\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{\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\t\twhile (route = this.routes[--n])\r\n\t\t{\r\n\t\t\tif (route.match(request))\r\n\t\t\t{\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\tname: route._name,\r\n\t\t\t\t\tpattern: route._pattern,\r\n\t\t\t\t\tdata: route._data,\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{\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 pageCache = {},\n\tpageTemplateCache = {},\n\tstack = [],\n\tstackPointer = -1;\n\nvar manuallyAdjustingHistory = false;\nvar handlingBeforeHide = false;\nvar beforeHideNavDirection = null;\n\nvar goal = null;\nvar backData = {};\nvar options = {\n\tpageInterrupt: routeResult => 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 function registerPage(opts) {\n\n\tlet loadPageClass = opts.pageClass ? (() => opts.pageClass) : opts.loadPageClass;\n\tlet namedRoutes = opts.namedRoutes || { [opts.name]: opts.route };\n\tlet cacheMarkupBy = opts.cacheMarkupBy || 'path'\n\tlet extra = opts.extra || {}\n\n\tfor (const [name, route] of Object.entries(namedRoutes)) {\n\t\trouter.addRoute(name, route, {\n\t\t\troute,\n\t\t\tloadPageClass,\n\t\t\tloadMarkup: opts.loadMarkup,\n\t\t\tcacheMarkupBy,\n\t\t\textra\n\t\t});\n\t}\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\nfunction emitUrlChanged(url)\n{\n\twindow.dispatchEvent(new CustomEvent('page-manager.url-changed', { \n\t\tdetail: {\n\t\t\turl: url\n\t\t},\n\t\tbubbles: true\n\t}))\n}\n\n// TODO: 404 and error too?\nfunction initLoading()\n{\n\tvar url = router.interpolate(options.loadingPageName, {});\n\tvar routeResult = router.parse(url);\n\treturn loadPage(routeResult, {});\n}\n\nfunction showLoading() {\n\tvar url = router.interpolate(options.loadingPageName, {});\n\tvar route = router.parse(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[route.path] || pageCache[route.pattern]).page;\n\treturn Promise.resolve(page.show(data));\n}\n\nfunction hideLoading() {\n\tvar url = router.interpolate(options.loadingPageName, {});\n\tvar route = router.parse(url);\n\tvar page = (pageCache[route.path] || pageCache[route.pattern]).page;\n\treturn Promise.resolve(page.hide());\n}\n\nasync function loadPage(routeResult, data)\n{\n\tif(!pageTemplateCache[routeResult.pattern])\n\t\tpageTemplateCache[routeResult.pattern] = await routeResult.data.loadMarkup(routeResult);\n\tlet $template = pageTemplateCache[routeResult.pattern]\n\n\tvar $html = $template.cloneNode(true);\n\toptions.prepareMarkup($html);\n\toptions.attachMarkup($html);\n\t\n\trouteResult.data.pageClass = await Promise.resolve(routeResult.data.loadPageClass());\n\tlet page = new (routeResult.data.pageClass)($html);\n\t\n\tawait Promise.resolve(page.boot(data));\n\t\n\tlet cacheKey = routeResult.data.cacheMarkupBy == 'path' ? routeResult.path : routeResult.pattern;\n\tpageCache[cacheKey] = {\n\t\t$html,\n\t\tpage\n\t};\n\t\n\treturn page;\n}\n\nasync function showPage(url, data, event)\n{\n\tvar routeResult = router.parse(url);\n\tif (routeResult == null) {\n\t\tconsole.error(`Can't find page: '${url}'`);\n\t\t\n\t\tlet url = router.interpolate(options.error404PageName, {});\n\t\trouteResult = router.parse(url)\n\t}\n\n\tdata = data || {};\n\tfor (let key in routeResult.params)\n\t\tdata[key] = routeResult.params[key];\n\n\tdata.route = {\n\t\turl: url,\n\t\tpath: routeResult.path,\n\t\tname: routeResult.name,\n\t\tparams: routeResult.params\n\t};\n\tdata.event = event;\n\n\tlet interrupt = await Promise.resolve(options.pageInterrupt(routeResult));\n\tif(interrupt)\n\t{\n\t\tgoal = { url, data };\n\t\treturn showPage(interrupt.url, null, event);\n\t}\n\t\n\tawait showLoading();\n\n\tvar getPage = null\n\tif (pageCache[routeResult.path])\n\t\tgetPage = pageCache[routeResult.path].page;\n\telse if (pageCache[routeResult.pattern])\n\t\tgetPage = pageCache[routeResult.pattern].page;\n\telse\n\t\tgetPage = loadPage(routeResult, data)\n\n\t// handle initial page\n\tif (event.action == 'load')\n\t{\n\t\tconst page = await getPage;\n\t\tawait doShow(page, data);\n\t\tawait hideLoading();\n\n\t\t// clean initial load\n\t\tif (stackPointer == -1) {\n\t\t\tstack.push({ uid: 0, data, page });\n\t\t\tstackPointer = 0;\n\t\t}\n\n\t\t// page refresh\n\t\telse {\n\t\t\tstack[stackPointer].page = page;\n\t\t\tstack[stackPointer].data = data;\n\t\t}\n\t\treturn page;\n\t}\n\n\tlet currentState = stack[stackPointer];\n\n\tif (currentState.data.route.path == routeResult.path) {\n\t\thandleHistoryAction(event, url, data, currentState.page);\n\t\tconst page = await getPage;\n\t\tawait doUpdate(page, data);\n\t\tawait hideLoading();\n\t\treturn page;\n\t}\n\n\tcurrentState.data.scrollY = window.scrollY;\n\n\tconst results = await Promise.all([\n\t\tcurrentState.page.hide(event),\n\t\tgetPage\n\t]);\n\tconst page = results[1];\n\thandleHistoryAction(event, url, data, page);\n\tawait doShow(page, data);\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\tawait hideLoading();\n\treturn page\n}\n\nasync function doShow(page, data) {\n\n\twindow.scroll(0, 0);\n\n\tawait Promise.resolve(page.show(data));\n\tdocument.title = page.title;\n}\n\nasync function doUpdate(page, data) {\n\n\tawait Promise.resolve(page.update(data));\n\tdocument.title = page.title\n}\n\nasync function 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\temitUrlChanged(url);\n\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{\n\t\tlet currentUid = stack[stackPointer].uid;\n\t\twindow.history.replaceState({ uid: currentUid }, null, url);\n\t\temitUrlChanged(url);\n\t\tstack[stackPointer] = { uid: currentUid, data, page };\n\t\t\n\t\tif(stack[stackPointer].data.route.url == stack[stackPointer - 1]?.data?.route?.url)\n\t\t{\n\t\t\tlet statesToKeep = [];\n\t\t\tfor (var i = 0; i < stackPointer - 1; i++)\n\t\t\t\tstatesToKeep.push(stack[i]);\n\t\t\tstatesToKeep.push(stack[stackPointer]);\n\n\t\t\tawait modifyHistory(statesToKeep);\n\t\t}\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 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\tawait initLoading();\n\tawait showLoading();\n}\n\nexport async function ready()\n{\n\t// set initial page\n\temitUrlChanged(window.location.pathname + window.location.search + window.location.hash);\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: 'load', distance: 0 }).then(async page => {\n\t\t\t\tif(e.action == 'replace')\n\t\t\t\t\tawait handleHistoryAction({ action: e.action }, e.url, e.data, page);\n\t\t\t\treturn page;\n\t\t\t});\n\t\t}\n\t});\n\n\tasync function handlePopstate(context, direction, distance) {\n\n\t\tif (manuallyAdjustingHistory) {\n\t\t\tawait manuallyAdjustingHistory(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\temitUrlChanged(context.data.route.url);\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(lastNavDirection) {\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\tbeforeHideNavDirection = lastNavDirection;\n\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 (beforeHideNavDirection == 'fwd')\n\t\t\t\t\t\thistory.back();\n\t\t\t\t\telse if (beforeHideNavDirection == '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{\n\t\t\thandlingBeforeHide = false;\n\t\t\tbeforeHideNavDirection = null;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tfunction handleBeforeHidePart2() {\n\t\tif (handlingBeforeHide !== 'step1')\n\t\t\treturn false;\n\n\t\tif(manuallyAdjustingHistory)\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\t\t\t{\n\t\t\t\thandlingBeforeHide = 'step2';\n\n\t\t\t\tif (beforeHideNavDirection == 'fwd')\n\t\t\t\t\thistory.forward();\n\t\t\t\telse if (beforeHideNavDirection == 'back')\n\t\t\t\t\thistory.back();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\thandlingBeforeHide = false;\n\t\t\t\tbeforeHideNavDirection = null;\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\", async e => {\n\t\tlet newUid = e.state?.uid || 0;\n\t\tlet previousUid = stack[stackPointer].uid;\n\t\tlet lastNavigationDirection = newUid > previousUid ? 'fwd' : 'back';\n\t\tlet distance = Math.abs(newUid - previousUid);\n\n\t\tvar interrupted = handleBeforeHidePart2();\n\t\tif (interrupted)\n\t\t\treturn;\n\n\t\tvar interrupted = handleBeforeHidePart1(lastNavigationDirection);\n\t\tif (interrupted)\n\t\t\treturn;\n\n\t\tvar context = findContext(newUid);\n\t\tawait handlePopstate(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, checkBeforeHide = true) {\n\n\turl = expandOnlyHash(url);\n\n\tif (checkBeforeHide === true && options.beforeHide && stack[stackPointer].page.beforeHide) {\n\n\t\tvar interrupt = stack[stackPointer].page.beforeHide();\n\t\tif (interrupt) {\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\nfunction modifyHistory(statesToKeep)\n{\n\t// BUG: You can't remove the 2nd stack frame. This is because you'd have to go back to -1, to then go forward to 0 (removing frame 1)\n\t// For clarity, you can remove (replace) frame 0 (1st), and frame 2+ (3rd+)\n\t// As a workaround, we replace the 2nd stack frame, if it is the tail, with the root \"/\". \n\t// This at least hopefully removes any meaning from it, simply taking you \"home\" rather than to wherever you were likely trying to remove.\n\n\tif (statesToKeep.length == stack.length)\n\t\treturn Promise.resolve();\n\n\treturn new Promise(async (resolve, reject) => {\n\n\t\tlet backsToDo = stackPointer;\n\t\tlet currentUid = -1;\n\n\t\t// TODO: handle stack pointer not being at the tail when this process starts\n\t\t\n\t\t// see BUG comments at the top of this method\n\t\tlet apply2ndFrameHack = statesToKeep.length == 1 && stack.length > 1\n\t\tlet defaultPageRouteResult = null;\n\t\tlet defaultPage = null;\n\t\tif(apply2ndFrameHack)\n\t\t{\n\t\t\tlet url = getPath(options.defaultPageName);\n\t\t\tdefaultPageRouteResult = router.parse(url);\n\t\t\tdefaultPage = await loadPage(defaultPageRouteResult, {});\n\t\t}\n\n\t\tmanuallyAdjustingHistory = async _ => {\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\t// see BUG comments at the top of this method\n\t\t\t\t\tif(apply2ndFrameHack && backsToDo == 1)\n\t\t\t\t\t{\n\t\t\t\t\t\twindow.history.replaceState({ uid: stack[1].uid }, defaultPage.title, defaultPageRouteResult.path);\n\t\t\t\t\t\tdocument.title = defaultPage.title;\n\t\t\t\t\t}\n\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\t\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 }, currentState.page.title, currentState.data.route.url);\n\t\t\t\telse\n\t\t\t\t\twindow.history.pushState({ uid: currentState.uid }, currentState.page.title, currentState.data.route.url);\n\t\t\t\t\n\t\t\t\temitUrlChanged(currentState.data.route.url)\n\n\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\t// see BUG comments at the top of this method\n\t\t\tif(apply2ndFrameHack)\n\t\t\t{\n\t\t\t\tstack.push({\n\t\t\t\t\tuid: 1,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\troute: {\n\t\t\t\t\t\t\turl: defaultPageRouteResult.path,\n\t\t\t\t\t\t\tpath: defaultPageRouteResult.path,\n\t\t\t\t\t\t\tname: defaultPageRouteResult.name,\n\t\t\t\t\t\t\tparams: defaultPageRouteResult.params\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tpage: defaultPage\n\t\t\t\t})\n\n\t\t\t\tstackPointer = 0;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tstackPointer = stack.length - 1;\n\t\t\t}\n\t\t\t\n\t\t\tmanuallyAdjustingHistory = false;\n\n\t\t\tresolve();\n\t\t};\n\n\t\thistory.back();\n\t});\n}\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\treturn modifyHistory(statesToKeep);\n}\n\nexport function purgeCache() {\n\tfor (const key in pageCache)\n\t{\n\t\tpageCache[key].page.destroy && pageCache[key].page.destroy();\n\t\tif (!pageCache[key].page.constructor.existingDomSelector)\n\t\t{\n\t\t\tpageCache[key].$html.remove();\n\t\t\tdelete pageCache[key];\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}","export async function loadMarkup (routeResult) {\n\tlet url = '/pages/' + routeResult.name + '.htm';\n\tlet response = await fetch(url)\n\tlet text = await response.text();\n\n const parser = new DOMParser()\n const doc = parser.parseFromString(text, \"text/html\")\n\tconst elem = doc.querySelector('body').firstElementChild;\n\t\n\treturn elem;\n}","import './loading.htm'\r\nimport { loadMarkup } from './helpers.js';\r\nimport Page from './page.js';\r\nimport {registerPage} from '@trullock/page-manager';\r\n\r\nexport default registerPage({\r\n\tname: 'loading', \r\n\troute: '/loading', \r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\tstatic existingDomSelector = '#page-loading';\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\t\t}\r\n\t}\r\n});","import './page1.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, refresh} from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default registerPage({\r\n\tname: 'page1', \r\n\troute: '/page1',\r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\ttitle = \"Page 1\";\r\n\r\n\t\ttype = 'A';\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\r\n\t\t\t$page.querySelector('button').addEventListener('click', e => {\r\n\t\t\t\trefresh();\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tupdate(data) {\r\n\t\t\tthis.$page.querySelector('.js-time').textContent = new Date().getTime();\r\n\t\t}\r\n\t}\r\n});","import './page2.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, replace} from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default registerPage({\r\n\tname: 'page2', \r\n\troute: '/page2', \r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\ttitle = \"Page 2\";\r\n\r\n\t\ttype = 'A';\r\n\t\t\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\r\n\t\t\t$page.querySelector('button').addEventListener('click', e => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\treplace('/page3')\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n});","import './page3.htm'\r\nimport Page from './page.js';\r\nimport * as pageManager from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default pageManager.registerPage({\r\n\tname: 'page3', \r\n\troute: '/page3', \r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\ttitle = \"Page 3\";\r\n\t\t\r\n\t\tbeforeHide = () => 'Are you sure?'\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\r\n\t\t\t$page.querySelector('.btnRemove').addEventListener('click', e => {\r\n\t\t\t\tpageManager.removeHistory(state => {\r\n\t\t\t\t\treturn state.page.type == 'A';\r\n\t\t\t\t})\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\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default registerPage({\r\n\tname: 'page4', \r\n\troute: '/page4',\r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\ttitle = \"Page 4\";\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\t\t}\r\n\r\n\t\tshow(opts)\r\n\t\t{\r\n\t\t\tthrow new PageShowError('/page1', 'Cant show page4, showing page1 instead', {}, 'replace')\r\n\t\t}\r\n\t}\r\n});","import './page404.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default registerPage({\r\n\tname: 'page404', \r\n\troute: '/404',\r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\ttitle = \"Page 404\";\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\t\t}\r\n\t}\r\n});","import './pageX.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default registerPage({\r\n\tname: 'pageX', \r\n\troute: '/page/{x}',\r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\ttitle = \"Page X\";\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\t\t}\r\n\r\n\t\tshow(opts)\r\n\t\t{\r\n\t\t\tthis.$page.querySelector('#PageX').textContent = \"Page: \" + opts.x;\r\n\t\t\treturn super.show(opts);\r\n\t\t}\r\n\t}\r\n});","import './page404.htm' // doesnt matter\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default registerPage({\r\n\tname: 'pageShowFail', \r\n\troute: '/show-fail',\r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\t\ttitle = \"Page 4\";\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\t\t}\r\n\r\n\t\tshow(opts)\r\n\t\t{\r\n\t\t\tthrow new PageShowError('/page1', 'Cant show pageShowFail, showing page1 instead', {}, 'replace')\r\n\t\t}\r\n\t}\r\n});","export const cacheMarkupBy = 'route'\r\n\r\nexport default class Page {\r\n\t\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 pageX from './page-pageX.js'\r\nimport page404 from './page-page404.js'\r\nimport pageShowFail from './page-show-fail.js'\r\n\r\nwindow.addEventListener('DOMContentLoaded', async function () {\r\n\tawait pageManager.init({\r\n\t\terror404PageName: 'page404',\r\n\t\tdefaultPageName: 'page1',\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\t\t\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\r\n\t\r\n\twindow.addEventListener(\"page-manager.url-changed\", e => {\r\n\t\tconsole.log(e.detail.url);\r\n\t});\r\n\r\n\tawait pageManager.ready()\r\n});"],"names":["router","pageCache","pageTemplateCache","stack","stackPointer","manuallyAdjustingHistory","handlingBeforeHide","beforeHideNavDirection","goal","backData","options","pageInterrupt","routeResult","attachMarkup","$html","document","body","appendChild","prepareMarkup","loadingPageName","error404PageName","defaultPageName","beforeHide","registerPage","opts","loadPageClass","pageClass","namedRoutes","name","route","cacheMarkupBy","extra","Object","entries","addRoute","loadMarkup","getPath","values","url","interpolate","hash","refresh","frame","showPage","data","emitUrlChanged","window","dispatchEvent","CustomEvent","detail","bubbles","initLoading","parse","loadPage","showLoading","scrollY","event","action","page","path","pattern","Promise","resolve","show","hideLoading","hide","$template","cloneNode","boot","cacheKey","console","error","key","params","interrupt","getPage","doShow","push","uid","currentState","handleHistoryAction","doUpdate","results","all","scroll","title","update","newUid","history","pushState","splice","length","currentUid","replaceState","statesToKeep","i","modifyHistory","distance","doNavigate","fallback","storageAvailable","x","sessionStorage","setItem","removeItem","e","init","assign","storedStack","getItem","JSON","ready","location","pathname","search","catch","PageShowError","then","handlePopstate","context","direction","handleBeforeHidePart1","lastNavDirection","setTimeout","back","forward","handleBeforeHidePart2","result","addEventListener","state","previousUid","lastNavigationDirection","Math","abs","interrupted","findContext","stackToSerialize","map","s","stackToStore","stringify","expandOnlyHash","startsWith","currentUrl","hashIndex","indexOf","substr","navigate","checkBeforeHide","replace","go","printStack","log","reject","backsToDo","apply2ndFrameHack","defaultPageRouteResult","defaultPage","_","k","removeHistory","predicate","purgeCache","destroy","constructor","existingDomSelector","remove","Error","message","captureStackTrace","response","fetch","text","parser","DOMParser","doc","parseFromString","elem","querySelector","firstElementChild","Page","_class","$page","_defineProperty","textContent","Date","getTime","preventDefault","pageManager","type","dataset","style","display","pageLoading","page1","page2","page3","page4","pageX","page404","pageShowFail","confirm","ctrlKey","metaKey","$a","target","matches","closest","href"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"main.js","mappings":";;;;;;;;;;;;;;AAAA,iEAAe,qBAAuB,gBAAgB;;;;;;;;;;;;;;ACAtD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,gBAAgB;;;;;;;;;;;;;;ACAtD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;;ACAP;AAC7C;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;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,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;AACA;AACA,sBAAsB,6DAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,sCAAsC,oBAAoB;AAC1D;AACA;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;AACA;AACA;AACA,CAAC,EAAE;;;;;;;;;;;;;;AC1OH,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,SAAS,GAAG,CAAC,CAAC;EACjBC,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,sBAAsB,GAAG,IAAI;AAEjC,IAAIC,IAAI,GAAG,IAAI;AACf,IAAIC,QAAQ,GAAG,CAAC,CAAC;AACjB,IAAIC,OAAO,GAAG;EACbC,aAAa,EAAEC,WAAW,IAAI,IAAI;EAClCC,YAAY,EAAEC,KAAK,IAAIC,QAAQ,CAACC,IAAI,CAACC,WAAW,CAACH,KAAK,CAAC;EACvDI,aAAa,EAAEJ,KAAK,IAAI,CAAE,CAAC;EAC3BK,eAAe,EAAE,SAAS;EAC1BC,gBAAgB,EAAE,WAAW;EAC7BC,eAAe,EAAE,MAAM;EACvBC,UAAU,EAAE;AACb,CAAC;AAEM,SAASC,YAAYA,CAACC,IAAI,EAAE;EAElC,IAAIC,aAAa,GAAGD,IAAI,CAACE,SAAS,GAAI,MAAMF,IAAI,CAACE,SAAS,GAAIF,IAAI,CAACC,aAAa;EAChF,IAAIE,WAAW,GAAGH,IAAI,CAACG,WAAW,IAAI;IAAE,CAACH,IAAI,CAACI,IAAI,GAAGJ,IAAI,CAACK;EAAM,CAAC;EACjE,IAAIC,aAAa,GAAGN,IAAI,CAACM,aAAa,IAAI,MAAM;EAChD,IAAIC,KAAK,GAAGP,IAAI,CAACO,KAAK,IAAI,CAAC,CAAC;EAE5B,KAAK,MAAM,CAACH,IAAI,EAAEC,KAAK,CAAC,IAAIG,MAAM,CAACC,OAAO,CAACN,WAAW,CAAC,EAAE;IACxD3B,iEAAe,CAAC4B,IAAI,EAAEC,KAAK,EAAE;MAC5BA,KAAK;MACLJ,aAAa;MACbU,UAAU,EAAEX,IAAI,CAACW,UAAU;MAC3BL,aAAa;MACbC;IACD,CAAC,CAAC;EACH;AACD;AAEO,SAASK,OAAOA,CAACR,IAAI,EAAES,MAAM,EAAE;EACrC,IAAIC,GAAG,GAAGtC,oEAAkB,CAAC4B,IAAI,EAAES,MAAM,CAAC;EAC1C,IAAIA,MAAM,EAAEG,IAAI,EACfF,GAAG,IAAI,GAAG,GAAGD,MAAM,CAACG,IAAI;EACzB,OAAOF,GAAG;AACX;AAEO,SAASG,OAAOA,CAAA,EAAG;EACzB,IAAIC,KAAK,GAAGvC,KAAK,CAACC,YAAY,CAAC;EAC/BuC,QAAQ,CAACD,KAAK,CAACE,IAAI,CAACf,KAAK,CAACS,GAAG,EAAEI,KAAK,CAACE,IAAI,EAAE,SAAS,CAAC;AACtD;AAEA,SAASC,cAAcA,CAACP,GAAG,EAC3B;EACCQ,MAAM,CAACC,aAAa,CAAC,IAAIC,WAAW,CAAC,0BAA0B,EAAE;IAChEC,MAAM,EAAE;MACPX,GAAG,EAAEA;IACN,CAAC;IACDY,OAAO,EAAE;EACV,CAAC,CAAC,CAAC;AACJ;;AAEA;AACA,SAASC,WAAWA,CAAA,EACpB;EACC,IAAIb,GAAG,GAAGtC,oEAAkB,CAACU,OAAO,CAACS,eAAe,EAAE,CAAC,CAAC,CAAC;EACzD,IAAIP,WAAW,GAAGZ,8DAAY,CAACsC,GAAG,CAAC;EACnC,OAAOe,QAAQ,CAACzC,WAAW,EAAE,CAAC,CAAC,CAAC;AACjC;AAEA,SAAS0C,WAAWA,CAAA,EAAG;EACtB,IAAIhB,GAAG,GAAGtC,oEAAkB,CAACU,OAAO,CAACS,eAAe,EAAE,CAAC,CAAC,CAAC;EACzD,IAAIU,KAAK,GAAG7B,8DAAY,CAACsC,GAAG,CAAC;EAC7B,IAAIM,IAAI,GAAG;IACVf,KAAK,EAAEA,KAAK;IACZ0B,OAAO,EAAET,MAAM,CAACS,OAAO;IACvBC,KAAK,EAAE;MACNC,MAAM,EAAE;IACT;EACD,CAAC;EAED,IAAIC,IAAI,GAAG,CAACzD,SAAS,CAAC4B,KAAK,CAAC8B,IAAI,CAAC,IAAI1D,SAAS,CAAC4B,KAAK,CAAC+B,OAAO,CAAC,EAAEF,IAAI;EACnE,OAAOG,OAAO,CAACC,OAAO,CAACJ,IAAI,CAACK,IAAI,CAACnB,IAAI,CAAC,CAAC;AACxC;AAEA,SAASoB,WAAWA,CAAA,EAAG;EACtB,IAAI1B,GAAG,GAAGtC,oEAAkB,CAACU,OAAO,CAACS,eAAe,EAAE,CAAC,CAAC,CAAC;EACzD,IAAIU,KAAK,GAAG7B,8DAAY,CAACsC,GAAG,CAAC;EAC7B,IAAIoB,IAAI,GAAG,CAACzD,SAAS,CAAC4B,KAAK,CAAC8B,IAAI,CAAC,IAAI1D,SAAS,CAAC4B,KAAK,CAAC+B,OAAO,CAAC,EAAEF,IAAI;EACnE,OAAOG,OAAO,CAACC,OAAO,CAACJ,IAAI,CAACO,IAAI,EAAE,CAAC;AACpC;AAEA,eAAeZ,QAAQA,CAACzC,WAAW,EAAEgC,IAAI,EACzC;EACC,IAAG,CAAC1C,iBAAiB,CAACU,WAAW,CAACgD,OAAO,CAAC,EACzC1D,iBAAiB,CAACU,WAAW,CAACgD,OAAO,CAAC,GAAG,MAAMhD,WAAW,CAACgC,IAAI,CAACT,UAAU,CAACvB,WAAW,CAAC;EACxF,IAAIsD,SAAS,GAAGhE,iBAAiB,CAACU,WAAW,CAACgD,OAAO,CAAC;EAEtD,IAAI9C,KAAK,GAAGoD,SAAS,CAACC,SAAS,CAAC,IAAI,CAAC;EACrCzD,OAAO,CAACQ,aAAa,CAACJ,KAAK,CAAC;EAC5BJ,OAAO,CAACG,YAAY,CAACC,KAAK,CAAC;EAE3BF,WAAW,CAACgC,IAAI,CAAClB,SAAS,GAAG,MAAMmC,OAAO,CAACC,OAAO,CAAClD,WAAW,CAACgC,IAAI,CAACnB,aAAa,EAAE,CAAC;EACpF,IAAIiC,IAAI,GAAG,IAAK9C,WAAW,CAACgC,IAAI,CAAClB,SAAS,CAAEZ,KAAK,CAAC;EAElD,MAAM+C,OAAO,CAACC,OAAO,CAACJ,IAAI,CAACU,IAAI,CAACxB,IAAI,CAAC,CAAC;EAEtC,IAAIyB,QAAQ,GAAGzD,WAAW,CAACgC,IAAI,CAACd,aAAa,IAAI,MAAM,GAAGlB,WAAW,CAAC+C,IAAI,GAAG/C,WAAW,CAACgD,OAAO;EAChG3D,SAAS,CAACoE,QAAQ,CAAC,GAAG;IACrBvD,KAAK;IACL4C;EACD,CAAC;EAED,OAAOA,IAAI;AACZ;AAEA,eAAef,QAAQA,CAACL,GAAG,EAAEM,IAAI,EAAEY,KAAK,EACxC;EACC,IAAI5C,WAAW,GAAGZ,8DAAY,CAACsC,GAAG,CAAC;EACnC,IAAI1B,WAAW,IAAI,IAAI,EAAE;IACxB0D,OAAO,CAACC,KAAK,CAAE,qBAAoBjC,GAAI,GAAE,CAAC;IAE1C,IAAIA,GAAG,GAAGtC,oEAAkB,CAACU,OAAO,CAACU,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAC1DR,WAAW,GAAGZ,8DAAY,CAACsC,GAAG,CAAC;EAChC;EAEAM,IAAI,GAAGA,IAAI,IAAI,CAAC,CAAC;EACjB,KAAK,IAAI4B,GAAG,IAAI5D,WAAW,CAAC6D,MAAM,EACjC7B,IAAI,CAAC4B,GAAG,CAAC,GAAG5D,WAAW,CAAC6D,MAAM,CAACD,GAAG,CAAC;EAEpC5B,IAAI,CAACf,KAAK,GAAG;IACZS,GAAG,EAAEA,GAAG;IACRqB,IAAI,EAAE/C,WAAW,CAAC+C,IAAI;IACtB/B,IAAI,EAAEhB,WAAW,CAACgB,IAAI;IACtB6C,MAAM,EAAE7D,WAAW,CAAC6D;EACrB,CAAC;EACD7B,IAAI,CAACY,KAAK,GAAGA,KAAK;EAElB,IAAIkB,SAAS,GAAG,MAAMb,OAAO,CAACC,OAAO,CAACpD,OAAO,CAACC,aAAa,CAACC,WAAW,CAAC,CAAC;EACzE,IAAG8D,SAAS,EACZ;IACClE,IAAI,GAAG;MAAE8B,GAAG;MAAEM;IAAK,CAAC;IACpB,OAAOD,QAAQ,CAAC+B,SAAS,CAACpC,GAAG,EAAE,IAAI,EAAEkB,KAAK,CAAC;EAC5C;EAEA,MAAMF,WAAW,EAAE;EAEnB,IAAIqB,OAAO,GAAG,IAAI;EAClB,IAAI1E,SAAS,CAACW,WAAW,CAAC+C,IAAI,CAAC,EAC9BgB,OAAO,GAAG1E,SAAS,CAACW,WAAW,CAAC+C,IAAI,CAAC,CAACD,IAAI,CAAC,KACvC,IAAIzD,SAAS,CAACW,WAAW,CAACgD,OAAO,CAAC,EACtCe,OAAO,GAAG1E,SAAS,CAACW,WAAW,CAACgD,OAAO,CAAC,CAACF,IAAI,CAAC,KAE9CiB,OAAO,GAAGtB,QAAQ,CAACzC,WAAW,EAAEgC,IAAI,CAAC;;EAEtC;EACA,IAAIY,KAAK,CAACC,MAAM,IAAI,MAAM,EAC1B;IACC,MAAMC,IAAI,GAAG,MAAMiB,OAAO;IAC1B,MAAMC,MAAM,CAAClB,IAAI,EAAEd,IAAI,CAAC;IACxB,MAAMoB,WAAW,EAAE;;IAEnB;IACA,IAAI5D,YAAY,IAAI,CAAC,CAAC,EAAE;MACvBD,KAAK,CAAC0E,IAAI,CAAC;QAAEC,GAAG,EAAE,CAAC;QAAElC,IAAI;QAAEc;MAAK,CAAC,CAAC;MAClCtD,YAAY,GAAG,CAAC;IACjB;;IAEA;IAAA,KACK;MACJD,KAAK,CAACC,YAAY,CAAC,CAACsD,IAAI,GAAGA,IAAI;MAC/BvD,KAAK,CAACC,YAAY,CAAC,CAACwC,IAAI,GAAGA,IAAI;IAChC;IACA,OAAOc,IAAI;EACZ;EAEA,IAAIqB,YAAY,GAAG5E,KAAK,CAACC,YAAY,CAAC;EAEtC,IAAI2E,YAAY,CAACnC,IAAI,CAACf,KAAK,CAAC8B,IAAI,IAAI/C,WAAW,CAAC+C,IAAI,EAAE;IACrDqB,mBAAmB,CAACxB,KAAK,EAAElB,GAAG,EAAEM,IAAI,EAAEmC,YAAY,CAACrB,IAAI,CAAC;IACxD,MAAMA,IAAI,GAAG,MAAMiB,OAAO;IAC1B,MAAMM,QAAQ,CAACvB,IAAI,EAAEd,IAAI,CAAC;IAC1B,MAAMoB,WAAW,EAAE;IACnB,OAAON,IAAI;EACZ;EAEAqB,YAAY,CAACnC,IAAI,CAACW,OAAO,GAAGT,MAAM,CAACS,OAAO;EAE1C,MAAM2B,OAAO,GAAG,MAAMrB,OAAO,CAACsB,GAAG,CAAC,CACjCJ,YAAY,CAACrB,IAAI,CAACO,IAAI,CAACT,KAAK,CAAC,EAC7BmB,OAAO,CACP,CAAC;EACF,MAAMjB,IAAI,GAAGwB,OAAO,CAAC,CAAC,CAAC;EACvBF,mBAAmB,CAACxB,KAAK,EAAElB,GAAG,EAAEM,IAAI,EAAEc,IAAI,CAAC;EAC3C,MAAMkB,MAAM,CAAClB,IAAI,EAAEd,IAAI,CAAC;EACtB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACF,MAAMoB,WAAW,EAAE;EACnB,OAAON,IAAI;AACZ;AAEA,eAAekB,MAAMA,CAAClB,IAAI,EAAEd,IAAI,EAAE;EAEjCE,MAAM,CAACsC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;EAEnB,MAAMvB,OAAO,CAACC,OAAO,CAACJ,IAAI,CAACK,IAAI,CAACnB,IAAI,CAAC,CAAC;EACtC7B,QAAQ,CAACsE,KAAK,GAAG3B,IAAI,CAAC2B,KAAK;AAC5B;AAEA,eAAeJ,QAAQA,CAACvB,IAAI,EAAEd,IAAI,EAAE;EAEnC,MAAMiB,OAAO,CAACC,OAAO,CAACJ,IAAI,CAAC4B,MAAM,CAAC1C,IAAI,CAAC,CAAC;EACxC7B,QAAQ,CAACsE,KAAK,GAAG3B,IAAI,CAAC2B,KAAK;AAC5B;AAEA,SAASE,SAASA,CAAA,EAClB;EACC,IAAIT,GAAG,GAAG,CAAC,CAAC;EAEZ,KAAI,IAAIU,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGrF,KAAK,CAACsF,MAAM,EAAED,CAAC,EAAE,EACnCV,GAAG,GAAGY,IAAI,CAACC,GAAG,CAACb,GAAG,EAAE3E,KAAK,CAACqF,CAAC,CAAC,CAACV,GAAG,CAAC;EAElC,OAAOA,GAAG,GAAG,CAAC;AACf;AAEA,eAAeE,mBAAmBA,CAACxB,KAAK,EAAElB,GAAG,EAAEM,IAAI,EAAEc,IAAI,EAAE;EAC1D,IAAIF,KAAK,CAACC,MAAM,IAAI,MAAM,EAAE;IAC3B,IAAImC,MAAM,GAAGL,SAAS,EAAE;IAExBzC,MAAM,CAAC+C,OAAO,CAACC,SAAS,CAAC;MAAEhB,GAAG,EAAEc;IAAO,CAAC,EAAE,IAAI,EAAEtD,GAAG,CAAC;IACpDO,cAAc,CAACP,GAAG,CAAC;;IAEnB;IACAnC,KAAK,CAAC4F,MAAM,CAAC3F,YAAY,GAAG,CAAC,EAAED,KAAK,CAACsF,MAAM,GAAGrF,YAAY,CAAC;IAE3DD,KAAK,CAAC0E,IAAI,CAAC;MAAEC,GAAG,EAAEc,MAAM;MAAEhD,IAAI;MAAEc;IAAK,CAAC,CAAC;IACvCtD,YAAY,EAAE;EACf,CAAC,MACI,IAAIoD,KAAK,CAACC,MAAM,IAAI,SAAS,EAClC;IACC,IAAGb,IAAI,CAACf,KAAK,CAACS,GAAG,IAAInC,KAAK,CAACC,YAAY,GAAG,CAAC,CAAC,EAAEwC,IAAI,EAAEf,KAAK,EAAES,GAAG,EAC9D;MACC,IAAI0D,YAAY,GAAG,EAAE;MACrB,KAAK,IAAIR,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGpF,YAAY,GAAG,CAAC,EAAEoF,CAAC,EAAE,EACxCQ,YAAY,CAACnB,IAAI,CAAC1E,KAAK,CAACqF,CAAC,CAAC,CAAC;MAC5BQ,YAAY,CAACnB,IAAI,CAAC;QAAEC,GAAG,EAAE3E,KAAK,CAACC,YAAY,GAAG,CAAC,CAAC,CAAC0E,GAAG;QAAElC,IAAI;QAAEc;MAAK,CAAC,CAAC;MAEnE,MAAMuC,aAAa,CAACD,YAAY,CAAC;IAClC,CAAC,MAED;MACC,IAAIE,KAAK,GAAGX,SAAS,EAAE;MACvBzC,MAAM,CAAC+C,OAAO,CAACM,YAAY,CAAC;QAAErB,GAAG,EAAEoB;MAAM,CAAC,EAAE,IAAI,EAAE5D,GAAG,CAAC;MACtDnC,KAAK,CAACC,YAAY,CAAC,GAAG;QAAE0E,GAAG,EAAEoB,KAAK;QAAEtD,IAAI;QAAEc;MAAK,CAAC;MAChDb,cAAc,CAACP,GAAG,CAAC;IACpB;EACD,CAAC,MACI,IAAGkB,KAAK,CAACC,MAAM,IAAI,MAAM,EAC9B;IACCrD,YAAY,IAAIoD,KAAK,CAAC4C,QAAQ;EAC/B,CAAC,MACI,IAAI5C,KAAK,CAACC,MAAM,IAAI,KAAK,EAC9B;IACCrD,YAAY,IAAIoD,KAAK,CAAC4C,QAAQ;EAC/B;AACD;AAEA,SAASC,UAAUA,CAAC/D,GAAG,EAAEM,IAAI,EAAE;EAE9B,IAAIN,GAAG,KAAK,MAAM,EAAE;IACnBA,GAAG,GAAG9B,IAAI,GAAGA,IAAI,CAAC8B,GAAG,GAAGM,IAAI,EAAE0D,QAAQ,IAAIlE,OAAO,CAAC1B,OAAO,CAACW,eAAe,CAAC;IAC1EuB,IAAI,GAAGpC,IAAI,EAAEoC,IAAI,IAAI,CAAC,CAAC;IACvBpC,IAAI,GAAG,IAAI;EACZ;EAEA,OAAOmC,QAAQ,CAACL,GAAG,EAAEM,IAAI,EAAE;IAAEa,MAAM,EAAE,MAAM;IAAE2C,QAAQ,EAAE;EAAE,CAAC,CAAC;AAC5D;AAEA,SAASG,gBAAgBA,CAAA,EAAG;EACxB,IAAI;IACA,IAAIC,CAAC,GAAG,kBAAkB;IAC1B1D,MAAM,CAAC2D,cAAc,CAACC,OAAO,CAACF,CAAC,EAAEA,CAAC,CAAC;IACnC1D,MAAM,CAAC2D,cAAc,CAACE,UAAU,CAACH,CAAC,CAAC;IACnC,OAAO,IAAI;EACf,CAAC,CACD,OAAMI,CAAC,EAAE;IACL,OAAO,KAAK;EAChB;AACJ;AAEO,eAAeC,IAAIA,CAACrF,IAAI,EAAE;EAEhCQ,MAAM,CAAC8E,MAAM,CAACpG,OAAO,EAAEc,IAAI,CAAC;EAE5B,IAAG+E,gBAAgB,EAAE,EACrB;IACC,IAAIQ,WAAW,GAAGjE,MAAM,CAAC2D,cAAc,CAACO,OAAO,CAAC,OAAO,CAAC;IACxD,IAAGD,WAAW,EACd;MACCA,WAAW,GAAGE,IAAI,CAAC7D,KAAK,CAAC2D,WAAW,CAAC;MACrC5G,KAAK,GAAG4G,WAAW,CAAC5G,KAAK;MACzBC,YAAY,GAAG2G,WAAW,CAAC3G,YAAY;MACvC0C,MAAM,CAAC2D,cAAc,CAACE,UAAU,CAAC,OAAO,CAAC;IAC1C;EACD;EAEA,MAAMxD,WAAW,EAAE;EACnB,MAAMG,WAAW,EAAE;AACpB;AAEO,eAAe4D,KAAKA,CAAA,EAC3B;EACC;EACArE,cAAc,CAACC,MAAM,CAACqE,QAAQ,CAACC,QAAQ,GAAGtE,MAAM,CAACqE,QAAQ,CAACE,MAAM,GAAGvE,MAAM,CAACqE,QAAQ,CAAC3E,IAAI,CAAC;EACxFG,QAAQ,CAACG,MAAM,CAACqE,QAAQ,CAACC,QAAQ,GAAGtE,MAAM,CAACqE,QAAQ,CAACE,MAAM,GAAGvE,MAAM,CAACqE,QAAQ,CAAC3E,IAAI,EAAE,IAAI,EAAE;IAAEiB,MAAM,EAAE,MAAM;IAAE2C,QAAQ,EAAE;EAAE,CAAC,CAAC,CAACkB,KAAK,CAACV,CAAC,IAAI;IACpItC,OAAO,CAACC,KAAK,CAACqC,CAAC,CAAC;IAEhB,IAAIA,CAAC,YAAYW,aAAa,EAC9B;MACC,OAAO5E,QAAQ,CAACiE,CAAC,CAACtE,GAAG,EAAEsE,CAAC,CAAChE,IAAI,EAAE;QAAEa,MAAM,EAAE,MAAM;QAAE2C,QAAQ,EAAE;MAAE,CAAC,CAAC,CAACoB,IAAI,CAAC,MAAM9D,IAAI,IAAI;QAClF,IAAGkD,CAAC,CAACnD,MAAM,IAAI,SAAS,EACvB,MAAMuB,mBAAmB,CAAC;UAAEvB,MAAM,EAAEmD,CAAC,CAACnD;QAAO,CAAC,EAAEmD,CAAC,CAACtE,GAAG,EAAEsE,CAAC,CAAChE,IAAI,EAAEc,IAAI,CAAC;QACrE,OAAOA,IAAI;MACZ,CAAC,CAAC;IACH;EACD,CAAC,CAAC;EAEF,eAAe+D,cAAcA,CAACC,OAAO,EAAEC,SAAS,EAAEvB,QAAQ,EAAE;IAE3D,IAAI/F,wBAAwB,EAAE;MAC7B,MAAMA,wBAAwB,CAACqH,OAAO,EAAE;QAAEjE,MAAM,EAAEkE,SAAS;QAAEvB;MAAS,CAAC,CAAC;MACxE;IACD;IAEA,IAAIuB,SAAS,IAAI,MAAM,EACtB3F,MAAM,CAAC8E,MAAM,CAACY,OAAO,CAAC9E,IAAI,EAAEnC,QAAQ,CAAC;IACtCA,QAAQ,GAAG,CAAC,CAAC;IAEboC,cAAc,CAAC6E,OAAO,CAAC9E,IAAI,CAACf,KAAK,CAACS,GAAG,CAAC;IAEtCK,QAAQ,CAAC+E,OAAO,CAAC9E,IAAI,CAACf,KAAK,CAACS,GAAG,EAAEoF,OAAO,CAAC9E,IAAI,EAAE;MAAEa,MAAM,EAAEkE,SAAS;MAAEvB;IAAS,CAAC,CAAC,CAACkB,KAAK,CAACV,CAAC,IAAI;MAC1FtC,OAAO,CAACC,KAAK,CAACqC,CAAC,CAAC;MAChB,IAAIA,CAAC,YAAYW,aAAa,EAC7B,OAAO5E,QAAQ,CAACiE,CAAC,CAACtE,GAAG,EAAEsE,CAAC,CAAChE,IAAI,EAAE;QAAEa,MAAM,EAAEmD,CAAC,CAACnD,MAAM,IAAI;MAAO,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC+D,IAAI,CAAC9D,IAAI,IAAI;MACf;MACAgE,OAAO,CAAChE,IAAI,GAAGA,IAAI;IACpB,CAAC,CAAC;EACH;EAEA,SAASkE,qBAAqBA,CAACC,gBAAgB,EAAE;IAChD;IACA,IAAIvH,kBAAkB,KAAK,QAAQ,EAAE;MACpCA,kBAAkB,GAAG,KAAK;MAC1B,OAAO,KAAK;IACb;;IAEA;IACA,IAAIH,KAAK,CAACC,YAAY,CAAC,CAACsD,IAAI,CAACpC,UAAU,IAAIZ,OAAO,CAACY,UAAU,IAAIhB,kBAAkB,KAAK,KAAK,EAAE;MAC9FC,sBAAsB,GAAGsH,gBAAgB;MAEzC,IAAInD,SAAS,GAAGvE,KAAK,CAACC,YAAY,CAAC,CAACsD,IAAI,CAACpC,UAAU,EAAE;MACrD,IAAIoD,SAAS,EAAE;QACdpE,kBAAkB,GAAG,OAAO;;QAE5B;QACAwC,MAAM,CAACgF,UAAU,CAAC,MAAM;UACvB;UACA,IAAIvH,sBAAsB,IAAI,KAAK,EAClCsF,OAAO,CAACkC,IAAI,EAAE,CAAC,KACX,IAAIxH,sBAAsB,IAAI,MAAM,EACxCsF,OAAO,CAACmC,OAAO,EAAE;QACnB,CAAC,EAAE,CAAC,CAAC;QAEL,OAAO,IAAI;MACZ;IACD;;IAEA;IACA,IAAI1H,kBAAkB,KAAK,OAAO,EAClC;MACCA,kBAAkB,GAAG,KAAK;MAC1BC,sBAAsB,GAAG,IAAI;IAC9B;IAEA,OAAO,KAAK;EACb;EAEA,SAAS0H,qBAAqBA,CAAA,EAAG;IAChC,IAAI3H,kBAAkB,KAAK,OAAO,EACjC,OAAO,KAAK;IAEb,IAAGD,wBAAwB,EAC1B,OAAO,KAAK;;IAEb;IACAK,OAAO,CAACY,UAAU,CAACnB,KAAK,CAACC,YAAY,CAAC,CAACsD,IAAI,CAACpC,UAAU,EAAE,CAAC,CAACkG,IAAI,CAACU,MAAM,IAAI;MAExE;MACA,IAAIA,MAAM,EACV;QACC5H,kBAAkB,GAAG,OAAO;QAE5B,IAAIC,sBAAsB,IAAI,KAAK,EAClCsF,OAAO,CAACmC,OAAO,EAAE,CAAC,KACd,IAAIzH,sBAAsB,IAAI,MAAM,EACxCsF,OAAO,CAACkC,IAAI,EAAE;MAChB,CAAC,MAED;QACCzH,kBAAkB,GAAG,KAAK;QAC1BC,sBAAsB,GAAG,IAAI;MAC9B;IACD,CAAC,CAAC;IAEF,OAAO,IAAI;EACZ;;EAEA;EACAuC,MAAM,CAACqF,gBAAgB,CAAC,UAAU,EAAE,MAAMvB,CAAC,IAAI;IAC9C;IACA,IAAIhB,MAAM,GAAGgB,CAAC,CAACwB,KAAK,EAAEtD,GAAG,IAAI,CAAC;IAC9B,IAAIuD,WAAW,GAAGlI,KAAK,CAACC,YAAY,CAAC,CAAC0E,GAAG;IACzC,IAAIwD,uBAAuB,GAAG1C,MAAM,GAAGyC,WAAW,GAAG,KAAK,GAAG,MAAM;IACnE,IAAIjC,QAAQ,GAAGV,IAAI,CAAC6C,GAAG,CAAC3C,MAAM,GAAGyC,WAAW,CAAC;IAE7C,IAAIG,WAAW,GAAGP,qBAAqB,EAAE;IACzC,IAAIO,WAAW,EACd;IAED,IAAIA,WAAW,GAAGZ,qBAAqB,CAACU,uBAAuB,CAAC;IAChE,IAAIE,WAAW,EACd;IAED,IAAId,OAAO,GAAGe,WAAW,CAAC7C,MAAM,CAAC;IACjC,MAAM6B,cAAc,CAACC,OAAO,EAAEY,uBAAuB,EAAElC,QAAQ,CAAC;EACjE,CAAC,CAAC;EAEF,IAAGG,gBAAgB,EAAE,EACrB;IACCzD,MAAM,CAACqF,gBAAgB,CAAC,cAAc,EAAE,MAAM;MAE7C,IAAIO,gBAAgB,GAAGvI,KAAK,CAACwI,GAAG,CAACC,CAAC,KAAK;QACtC9D,GAAG,EAAE8D,CAAC,CAAC9D,GAAG;QACVlC,IAAI,EAAEgG,CAAC,CAAChG;MACT,CAAC,CAAC,CAAC;MACH,IAAIiG,YAAY,GAAG;QAClB1I,KAAK,EAAEuI,gBAAgB;QACvBtI;MACD,CAAC;MACD0C,MAAM,CAAC2D,cAAc,CAACC,OAAO,CAAC,OAAO,EAAEO,IAAI,CAAC6B,SAAS,CAACD,YAAY,CAAC,CAAC;IACrE,CAAC,CAAC;EACH;AACD;AAEA,SAASJ,WAAWA,CAAC3D,GAAG,EAAC;EACxB,KAAK,IAAIU,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGrF,KAAK,CAACsF,MAAM,EAAED,CAAC,EAAE,EAAE;IACtC,IAAIrF,KAAK,CAACqF,CAAC,CAAC,CAACV,GAAG,IAAIA,GAAG,EACtB,OAAO3E,KAAK,CAACqF,CAAC,CAAC;EACjB;EACA,OAAO,IAAI;AACZ;AAEA,SAASuD,cAAcA,CAACzG,GAAG,EAC3B;EACC,IAAGA,GAAG,CAAC0G,UAAU,CAAC,GAAG,CAAC,EACtB;IACC,IAAIjE,YAAY,GAAG5E,KAAK,CAACC,YAAY,CAAC;IACtC,IAAI6I,UAAU,GAAGlE,YAAY,CAACnC,IAAI,CAACf,KAAK,CAACS,GAAG;IAC5C,IAAI4G,SAAS,GAAGD,UAAU,CAACE,OAAO,CAAC,GAAG,CAAC;IACvC,IAAGD,SAAS,GAAG,CAAC,CAAC,EAChB,OAAOD,UAAU,CAACG,MAAM,CAAC,CAAC,EAAEF,SAAS,CAAC;IACvC,OAAOD,UAAU,GAAG3G,GAAG;EACxB;EAEA,OAAOA,GAAG;AACX;AAEO,SAAS+G,QAAQA,CAAC/G,GAAG,EAAEM,IAAI,EAAE0G,eAAe,GAAG,IAAI,EAAE;EAE3DhH,GAAG,GAAGyG,cAAc,CAACzG,GAAG,CAAC;EAEzB,IAAIgH,eAAe,KAAK,IAAI,IAAI5I,OAAO,CAACY,UAAU,IAAInB,KAAK,CAACC,YAAY,CAAC,CAACsD,IAAI,CAACpC,UAAU,EAAE;IAE1F,IAAIoD,SAAS,GAAGvE,KAAK,CAACC,YAAY,CAAC,CAACsD,IAAI,CAACpC,UAAU,EAAE;IACrD,IAAIoD,SAAS,EAAE;MACdhE,OAAO,CAACY,UAAU,CAACoD,SAAS,CAAC,CAAC8C,IAAI,CAACU,MAAM,IAAI;QAC5C,IAAIA,MAAM,EACT7B,UAAU,CAAC/D,GAAG,EAAEM,IAAI,CAAC;MACvB,CAAC,CAAC;MACF;IACD;EACD;EAEAyD,UAAU,CAAC/D,GAAG,EAAEM,IAAI,CAAC,CAAC0E,KAAK,CAACV,CAAC,IAAI;IAChCtC,OAAO,CAACC,KAAK,CAACqC,CAAC,CAAC;IAChB,IAAIA,CAAC,YAAYW,aAAa,EAC7B,OAAO5E,QAAQ,CAACiE,CAAC,CAACtE,GAAG,EAAEsE,CAAC,CAAChE,IAAI,EAAE;MAAEa,MAAM,EAAEmD,CAAC,CAACnD,MAAM,IAAI;IAAO,CAAC,CAAC;EAChE,CAAC,CAAC;AACH;AAEO,SAAS8F,OAAOA,CAACjH,GAAG,EAAEM,IAAI,EAAE;EAClCN,GAAG,GAAGyG,cAAc,CAACzG,GAAG,CAAC;EACzB,OAAOK,QAAQ,CAACL,GAAG,EAAEM,IAAI,EAAE;IAAEa,MAAM,EAAE,SAAS;IAAE2C,QAAQ,EAAE;EAAE,CAAC,CAAC;AAC/D;AAEO,SAASrC,IAAIA,CAACzB,GAAG,EAAEM,IAAI,EAAE;EAC/B,OAAOD,QAAQ,CAACL,GAAG,EAAEM,IAAI,EAAE;IAAEa,MAAM,EAAE,MAAM;IAAE2C,QAAQ,EAAE;EAAE,CAAC,CAAC;AAC5D;AAEO,SAAS2B,IAAIA,CAACnF,IAAI,EAAE0G,eAAe,EAAE;EAC3C7I,QAAQ,GAAGmC,IAAI,IAAI,CAAC,CAAC;EACrBtC,kBAAkB,GAAGgJ,eAAe,KAAK,KAAK,GAAG,QAAQ,GAAG,KAAK;EACjEzD,OAAO,CAAC2D,EAAE,CAAC,CAAC,CAAC,CAAC;AACf;AAEO,SAASC,UAAUA,CAAA,EAAG;EAC5BnF,OAAO,CAACoF,GAAG,CAAC,gBAAgB,GAAGvJ,KAAK,CAACsF,MAAM,CAAC;EAC5CnB,OAAO,CAACoF,GAAG,CAAC,iBAAiB,GAAGtJ,YAAY,CAAC;EAC7C,KAAI,IAAIoF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGrF,KAAK,CAACsF,MAAM,EAAED,CAAC,EAAE,EACnClB,OAAO,CAACoF,GAAG,CAACvJ,KAAK,CAACqF,CAAC,CAAC,CAAC;AACvB;AAEA,SAASS,aAAaA,CAACD,YAAY,EACnC;EACC;EACA;EACA;EACA;;EAEA,IAAIA,YAAY,CAACP,MAAM,IAAItF,KAAK,CAACsF,MAAM,EACtC,OAAO5B,OAAO,CAACC,OAAO,EAAE;EAEzB,OAAO,IAAID,OAAO,CAAC,OAAOC,OAAO,EAAE6F,MAAM,KAAK;IAE7C,IAAIC,SAAS,GAAGxJ,YAAY;;IAE5B;;IAEA;IACA,IAAIyJ,iBAAiB,GAAG7D,YAAY,CAACP,MAAM,IAAI,CAAC,IAAItF,KAAK,CAACsF,MAAM,GAAG,CAAC;IACpE,IAAIqE,kBAAkB,GAAG,CAAC,CAAC;IAC3B,IAAIC,sBAAsB,GAAG,IAAI;IACjC,IAAIC,WAAW,GAAG,IAAI;IACtB,IAAGH,iBAAiB,EACpB;MACC,IAAIvH,GAAG,GAAGF,OAAO,CAAC1B,OAAO,CAACW,eAAe,CAAC;MAC1C0I,sBAAsB,GAAG/J,8DAAY,CAACsC,GAAG,CAAC;MAC1C0H,WAAW,GAAG,MAAM3G,QAAQ,CAAC0G,sBAAsB,EAAE,CAAC,CAAC,CAAC;MAExDD,kBAAkB,GAAGvE,SAAS,EAAE;IACjC;IAEAlF,wBAAwB,GAAG,MAAM4J,CAAC,IAAI;MACrC;MACA,IAAGL,SAAS,GAAG,CAAC,EAChB;QACC9G,MAAM,CAACgF,UAAU,CAAC,MAAM;UACvB8B,SAAS,EAAE;UACX/D,OAAO,CAACkC,IAAI,EAAE;QACf,CAAC,EAAE,CAAC,CAAC;QACL;MACD;;MAEA;;MAEA5H,KAAK,GAAG,EAAE;MAEV,KAAK,IAAI+J,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGlE,YAAY,CAACP,MAAM,EAAEyE,CAAC,EAAE,EAAE;QAC7C,IAAInF,YAAY,GAAGiB,YAAY,CAACkE,CAAC,CAAC;QAElC,IAAIA,CAAC,IAAI,CAAC,EACTpH,MAAM,CAAC+C,OAAO,CAACM,YAAY,CAAC;UAAErB,GAAG,EAAEC,YAAY,CAACD;QAAI,CAAC,EAAEC,YAAY,CAACrB,IAAI,CAAC2B,KAAK,EAAEN,YAAY,CAACnC,IAAI,CAACf,KAAK,CAACS,GAAG,CAAC,CAAC,KAE7GQ,MAAM,CAAC+C,OAAO,CAACC,SAAS,CAAC;UAAEhB,GAAG,EAAEC,YAAY,CAACD;QAAI,CAAC,EAAEC,YAAY,CAACrB,IAAI,CAAC2B,KAAK,EAAEN,YAAY,CAACnC,IAAI,CAACf,KAAK,CAACS,GAAG,CAAC;;QAE1G;QACAvB,QAAQ,CAACsE,KAAK,GAAGN,YAAY,CAACrB,IAAI,CAAC2B,KAAK;QAExClF,KAAK,CAAC0E,IAAI,CAACE,YAAY,CAAC;QAExBlC,cAAc,CAACkC,YAAY,CAACnC,IAAI,CAACf,KAAK,CAACS,GAAG,CAAC;MAC5C;;MAEA;MACA,IAAGuH,iBAAiB,EACpB;QACC1J,KAAK,CAAC0E,IAAI,CAAC;UACVC,GAAG,EAAEgF,kBAAkB;UACvBlH,IAAI,EAAE;YACLf,KAAK,EAAE;cACNS,GAAG,EAAEyH,sBAAsB,CAACpG,IAAI;cAChCA,IAAI,EAAEoG,sBAAsB,CAACpG,IAAI;cACjC/B,IAAI,EAAEmI,sBAAsB,CAACnI,IAAI;cACjC6C,MAAM,EAAEsF,sBAAsB,CAACtF;YAChC;UACD,CAAC;UACDf,IAAI,EAAEsG;QACP,CAAC,CAAC;QAEF5J,YAAY,GAAG,CAAC;MACjB,CAAC,MAED;QACCA,YAAY,GAAGD,KAAK,CAACsF,MAAM,GAAG,CAAC;MAChC;MAEApF,wBAAwB,GAAG,KAAK;MAEhCyD,OAAO,EAAE;IACV,CAAC;;IAED;IACA,IAAG+F,iBAAiB,IAAID,SAAS,IAAI,CAAC,EACtC;MACC9G,MAAM,CAAC+C,OAAO,CAACM,YAAY,CAAC;QAAErB,GAAG,EAAEgF;MAAmB,CAAC,EAAEE,WAAW,CAAC3E,KAAK,EAAE0E,sBAAsB,CAACpG,IAAI,CAAC;MACxG5C,QAAQ,CAACsE,KAAK,GAAG2E,WAAW,CAAC3E,KAAK;IACnC;IAEAuE,SAAS,EAAE;IACX/D,OAAO,CAACkC,IAAI,EAAE;EACf,CAAC,CAAC;AACH;AAGO,SAASoC,aAAaA,CAACC,SAAS,EACvC;EACC,IAAIpE,YAAY,GAAG,EAAE;EACrB,KAAK,IAAIR,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGrF,KAAK,CAACsF,MAAM,EAAED,CAAC,EAAE,EACrC;IACC,IAAI,CAAC4E,SAAS,CAACjK,KAAK,CAACqF,CAAC,CAAC,EAAEA,CAAC,CAAC,EAC1BQ,YAAY,CAACnB,IAAI,CAAC1E,KAAK,CAACqF,CAAC,CAAC,CAAC;EAC7B;EAEA,OAAOS,aAAa,CAACD,YAAY,CAAC;AACnC;AAEO,SAASqE,UAAUA,CAAA,EAAG;EAC5B,KAAK,MAAM7F,GAAG,IAAIvE,SAAS,EAC3B;IACCA,SAAS,CAACuE,GAAG,CAAC,CAACd,IAAI,CAAC4G,OAAO,IAAIrK,SAAS,CAACuE,GAAG,CAAC,CAACd,IAAI,CAAC4G,OAAO,EAAE;IAC5D,IAAI,CAACrK,SAAS,CAACuE,GAAG,CAAC,CAACd,IAAI,CAAC6G,WAAW,CAACC,mBAAmB,EACxD;MACCvK,SAAS,CAACuE,GAAG,CAAC,CAAC1D,KAAK,CAAC2J,MAAM,EAAE;MAC7B,OAAOxK,SAAS,CAACuE,GAAG,CAAC;IACtB;EACD;AACD;AAEO,MAAM+C,aAAa,SAASmD,KAAK,CAAC;EACxCH,WAAWA,CAACjI,GAAG,EAAEqI,OAAO,EAAE/H,IAAI,EAAEa,MAAM,EAAE;IACvC,KAAK,CAACkH,OAAO,IAAI,8BAA8B,CAAC;;IAEhD;IACA,IAAID,KAAK,CAACE,iBAAiB,EAC1BF,KAAK,CAACE,iBAAiB,CAAC,IAAI,EAAErD,aAAa,CAAC;IAE7C,IAAI,CAAC3F,IAAI,GAAG,eAAe;IAC3B,IAAI,CAACU,GAAG,GAAGA,GAAG;IACd,IAAI,CAACM,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACa,MAAM,GAAGA,MAAM;EACrB;AACD;;;;;;;;;;;;;;AC7pBO,eAAetB,UAAUA,CAAEvB,WAAW,EAAE;EAC9C,IAAI0B,GAAG,GAAG,SAAS,GAAG1B,WAAW,CAACgB,IAAI,GAAG,MAAM;EAC/C,IAAIiJ,QAAQ,GAAG,MAAMC,KAAK,CAACxI,GAAG,CAAC;EAC/B,IAAIyI,IAAI,GAAG,MAAMF,QAAQ,CAACE,IAAI,EAAE;EAE7B,MAAMC,MAAM,GAAG,IAAIC,SAAS,EAAE;EAC9B,MAAMC,GAAG,GAAGF,MAAM,CAACG,eAAe,CAACJ,IAAI,EAAE,WAAW,CAAC;EACxD,MAAMK,IAAI,GAAGF,GAAG,CAACG,aAAa,CAAC,MAAM,CAAC,CAACC,iBAAiB;EAExD,OAAOF,IAAI;AACZ;;;;;;;;;;;;;;;;;;;;;;ACVsB;AACoB;AACb;AACuB;AAEpD,iEAAe7J,oEAAY,CAAC;EAC3BK,IAAI,EAAE,SAAS;EACfC,KAAK,EAAE,UAAU;EACjBM,UAAU;EACVT,SAAS,GAAA8J,MAAA,GAAE,MAAA9J,SAAA,SAAc6J,gDAAI,CAAC;IAI7BhB,WAAWA,CAACkB,KAAK,EAAE;MAClB,KAAK,CAACA,KAAK,CAAC;IACb;EACD,CAAC,EAAAC,eAAA,CAAAF,MAAA,yBAL6B,eAAe,GAAAA,MAAA;AAM9C,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;ACjBkB;AACS;AACgC;AACnB;AAE1C,iEAAejK,oEAAY,CAAC;EAC3BK,IAAI,EAAE,OAAO;EACbC,KAAK,EAAE,QAAQ;EACfM,UAAU;EACVT,SAAS,EAAE,MAAAA,SAAA,SAAc6J,gDAAI,CAAC;IAM7BhB,WAAWA,CAACkB,KAAK,EAAE;MAClB,KAAK,CAACA,KAAK,CAAC;MAACC,eAAA,gBALN,QAAQ;MAAAA,eAAA,eAET,GAAG;MAKTD,KAAK,CAACJ,aAAa,CAAC,QAAQ,CAAC,CAAClD,gBAAgB,CAAC,OAAO,EAAEvB,CAAC,IAAI;QAC5DnE,+DAAO,EAAE;MACV,CAAC,CAAC;IACH;IAEA6C,MAAMA,CAAC1C,IAAI,EAAE;MACZ,IAAI,CAAC6I,KAAK,CAACJ,aAAa,CAAC,UAAU,CAAC,CAACM,WAAW,GAAG,IAAIC,IAAI,EAAE,CAACC,OAAO,EAAE;IACxE;EACD;AACD,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;AC3BkB;AACS;AACgC;AACnB;AAE1C,iEAAetK,oEAAY,CAAC;EAC3BK,IAAI,EAAE,OAAO;EACbC,KAAK,EAAE,QAAQ;EACfM,UAAU;EACVT,SAAS,EAAE,MAAAA,SAAA,SAAc6J,gDAAI,CAAC;IAM7BhB,WAAWA,CAACkB,KAAK,EAAE;MAClB,KAAK,CAACA,KAAK,CAAC;MAACC,eAAA,gBALN,QAAQ;MAAAA,eAAA,eAET,GAAG;MAKTD,KAAK,CAACJ,aAAa,CAAC,QAAQ,CAAC,CAAClD,gBAAgB,CAAC,OAAO,EAAEvB,CAAC,IAAI;QAC5DA,CAAC,CAACkF,cAAc,EAAE;QAClBvC,+DAAO,CAAC,QAAQ,CAAC;MAClB,CAAC,CAAC;IACH;EACD;AACD,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;ACxBkB;AACS;AACyB;AACZ;AAE1C,iEAAewC,gEAAwB,CAAC;EACvCnK,IAAI,EAAE,OAAO;EACbC,KAAK,EAAE,QAAQ;EACfM,UAAU;EACVT,SAAS,EAAE,MAAAA,SAAA,SAAc6J,gDAAI,CAAC;IAM7BhB,WAAWA,CAACkB,KAAK,EAAE;MAClB,KAAK,CAACA,KAAK,CAAC;MAACC,eAAA,gBALN,QAAQ;MAAAA,eAAA,qBAEH,MAAM,eAAe;MAKjCD,KAAK,CAACJ,aAAa,CAAC,YAAY,CAAC,CAAClD,gBAAgB,CAAC,OAAO,EAAEvB,CAAC,IAAI;QAChEmF,iEAAyB,CAAC3D,KAAK,IAAI;UAClC,OAAOA,KAAK,CAAC1E,IAAI,CAACsI,IAAI,IAAI,GAAG;QAC9B,CAAC,CAAC;MACH,CAAC,CAAC;IACH;EACD;AACD,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;ACzBkB;AACS;AACsC;AACzB;AAE1C,iEAAezK,oEAAY,CAAC;EAC3BK,IAAI,EAAE,OAAO;EACbC,KAAK,EAAE,QAAQ;EACfM,UAAU;EACVT,SAAS,EAAE,MAAAA,SAAA,SAAc6J,gDAAI,CAAC;IAI7BhB,WAAWA,CAACkB,KAAK,EAAE;MAClB,KAAK,CAACA,KAAK,CAAC;MAACC,eAAA,gBAHN,QAAQ;IAIhB;IAEA3H,IAAIA,CAACvC,IAAI,EACT;MACC,MAAM,IAAI+F,iEAAa,CAAC,QAAQ,EAAE,wCAAwC,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC;IAC3F;EACD;AACD,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;ACtBoB;AACO;AACsC;AACzB;AAE1C,iEAAehG,oEAAY,CAAC;EAC3BK,IAAI,EAAE,SAAS;EACfC,KAAK,EAAE,MAAM;EACbM,UAAU;EACVT,SAAS,EAAE,MAAAA,SAAA,SAAc6J,gDAAI,CAAC;IAI7BhB,WAAWA,CAACkB,KAAK,EAAE;MAClB,KAAK,CAACA,KAAK,CAAC;MAACC,eAAA,gBAHN,UAAU;IAIlB;EACD;AACD,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;ACjBkB;AACS;AACsC;AACzB;AAE1C,iEAAenK,oEAAY,CAAC;EAC3BK,IAAI,EAAE,OAAO;EACbC,KAAK,EAAE,WAAW;EAClBM,UAAU;EACVT,SAAS,EAAE,MAAAA,SAAA,SAAc6J,gDAAI,CAAC;IAI7BhB,WAAWA,CAACkB,KAAK,EAAE;MAClB,KAAK,CAACA,KAAK,CAAC;MAACC,eAAA,gBAHN,QAAQ;IAIhB;IAEA3H,IAAIA,CAACvC,IAAI,EACT;MACC,IAAI,CAACiK,KAAK,CAACJ,aAAa,CAAC,QAAQ,CAAC,CAACM,WAAW,GAAG,QAAQ,GAAGnK,IAAI,CAACgF,CAAC;MAClE,OAAO,KAAK,CAACzC,IAAI,CAACvC,IAAI,CAAC;IACxB;EACD;AACD,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;ACvBoB,CAAC;AACM;AACsC;AACzB;AAE1C,iEAAeD,oEAAY,CAAC;EAC3BK,IAAI,EAAE,cAAc;EACpBC,KAAK,EAAE,YAAY;EACnBM,UAAU;EACVT,SAAS,EAAE,MAAAA,SAAA,SAAc6J,gDAAI,CAAC;IAG7BhB,WAAWA,CAACkB,KAAK,EAAE;MAClB,KAAK,CAACA,KAAK,CAAC;MAACC,eAAA,gBAHN,QAAQ;IAIhB;IAEA3H,IAAIA,CAACvC,IAAI,EACT;MACC,MAAM,IAAI+F,iEAAa,CAAC,QAAQ,EAAE,+CAA+C,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC;IAClG;EACD;AACD,CAAC,CAAC;;;;;;;;;;;;;;;ACrBK,MAAMzF,aAAa,GAAG,OAAO;AAErB,MAAMyJ,IAAI,CAAC;EAEzBhB,WAAWA,CAACkB,KAAK,EAAC;IACjB,IAAI,CAACA,KAAK,GAAGA,KAAK;EACnB;EAEA,IAAIpG,KAAKA,CAAA,EAAG;IACX,OAAO,IAAI,CAACoG,KAAK,CAACQ,OAAO,CAAC,OAAO,CAAC,IAAI,aAAa;EACpD;EAEA7H,IAAIA,CAAC5C,IAAI,EAAC;IACT,OAAOqC,OAAO,CAACC,OAAO,EAAE;EACzB;EAEAC,IAAIA,CAACvC,IAAI,EAAE;IACV,IAAI,CAACiK,KAAK,CAACS,KAAK,CAACC,OAAO,GAAG,OAAO;IAClC,OAAOtI,OAAO,CAACC,OAAO,EAAE;EACzB;EAEAwB,MAAMA,CAAA,EAAG;IACR,OAAOzB,OAAO,CAACC,OAAO,EAAE;EACxB;EAEDG,IAAIA,CAAA,EAAG;IACN,IAAI,CAACwH,KAAK,CAACS,KAAK,CAACC,OAAO,GAAG,MAAM;IACjC,OAAOtI,OAAO,CAACC,OAAO,EAAE;EACzB;AACD;;;;;;UC7BA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;;;;;;;;;;;;;;;;;;;;ACA8C;AAEH;AACR;AACA;AACA;AACA;AACA;AACI;AACO;AAE9ChB,MAAM,CAACqF,gBAAgB,CAAC,kBAAkB,EAAE,kBAAkB;EAC7D,MAAM4D,+CAAgB,CAAC;IACtB3K,gBAAgB,EAAE,SAAS;IAC3BC,eAAe,EAAE,OAAO;IACxBC,UAAU,EAAEqJ,OAAO,IAAI,IAAI9G,OAAO,CAACC,OAAO,IAAI;MAC7CA,OAAO,CAAC8I,OAAO,CAACjC,OAAO,CAAC,CAAC;IAC1B,CAAC;EACF,CAAC,CAAC;;EAGF;EACA5J,QAAQ,CAACoH,gBAAgB,CAAC,OAAO,EAAEvB,CAAC,IAAI;IACvC,IAAIA,CAAC,CAACiG,OAAO,IAAIjG,CAAC,CAACkG,OAAO,EACzB;IAED,IAAIC,EAAE,GAAGnG,CAAC,CAACoG,MAAM,CAACC,OAAO,CAAC,GAAG,CAAC,GAAGrG,CAAC,CAACoG,MAAM,GAAGpG,CAAC,CAACoG,MAAM,CAACE,OAAO,CAAC,GAAG,CAAC;IACjE,IAAI,CAACH,EAAE,EACN;IAED,IAAII,IAAI,GAAGJ,EAAE,CAAC3F,QAAQ,GAAG2F,EAAE,CAAC1F,MAAM,GAAG0F,EAAE,CAACvK,IAAI;IAC5CuJ,mDAAoB,CAACoB,IAAI,CAAC;IAE1BvG,CAAC,CAACkF,cAAc,EAAE;EACnB,CAAC,EAAE,KAAK,CAAC;EAET/K,QAAQ,CAACsK,aAAa,CAAC,WAAW,CAAC,CAAClD,gBAAgB,CAAC,OAAO,EAAEvB,CAAC,IAAI;IAClEmF,qDAAsB,EAAE;EACzB,CAAC,CAAC;EAGFjJ,MAAM,CAACqF,gBAAgB,CAAC,0BAA0B,EAAEvB,CAAC,IAAI;IACxDtC,OAAO,CAACoF,GAAG,CAAC9C,CAAC,CAAC3D,MAAM,CAACX,GAAG,CAAC;EAC1B,CAAC,CAAC;EAEF,MAAMyJ,gDAAiB,EAAE;AAC1B,CAAC,CAAC,C","sources":["webpack://@trullock/page-manager/./tests/loading.htm","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/./tests/pageX.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/helpers.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-pageX.js","webpack://@trullock/page-manager/./tests/page-show-fail.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__ + \"loading.htm\";","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\";","export default __webpack_public_path__ + \"pageX.htm\";","import PatternLexer from './pattern-lexer.js'\r\n\r\nfunction isKind(val, kind)\r\n{\r\n\treturn '[object ' + kind + ']' === Object.prototype.toString.call(val);\r\n}\r\n\r\nfunction isRegExp(val)\r\n{\r\n\treturn isKind(val, 'RegExp');\r\n}\r\n\r\nfunction decodeQueryString(queryStr)\r\n{\r\n\tlet queryArr = (queryStr || '').replace('?', '').split('&'),\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{\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{\r\n\t\t\tif(isArray(obj[pName]))\r\n\t\t\t\tobj[pName].push(pValue);\r\n\t\t\telse\r\n\t\t\t\tobj[pName] = [obj[pName], pValue];\r\n\t\t\t\r\n\t\t}\r\n\t\telse\r\n\t\t{\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, data, 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._data = data;\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{\r\n\tconstructor()\r\n\t{\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, data, priority)\r\n\t{\r\n\t\tpattern += pattern.endsWith('/') ? ':?query:' : '/:?query:';\r\n\t\tvar route = new Route(name, pattern, data, 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\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{\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{\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\t\twhile (route = this.routes[--n])\r\n\t\t{\r\n\t\t\tif (route.match(request))\r\n\t\t\t{\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\tname: route._name,\r\n\t\t\t\t\tpattern: route._pattern,\r\n\t\t\t\t\tdata: route._data,\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{\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 pageCache = {},\n\tpageTemplateCache = {},\n\tstack = [],\n\tstackPointer = -1;\n\nvar manuallyAdjustingHistory = false;\nvar handlingBeforeHide = false;\nvar beforeHideNavDirection = null;\n\nvar goal = null;\nvar backData = {};\nvar options = {\n\tpageInterrupt: routeResult => 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 function registerPage(opts) {\n\n\tlet loadPageClass = opts.pageClass ? (() => opts.pageClass) : opts.loadPageClass;\n\tlet namedRoutes = opts.namedRoutes || { [opts.name]: opts.route };\n\tlet cacheMarkupBy = opts.cacheMarkupBy || 'path'\n\tlet extra = opts.extra || {}\n\n\tfor (const [name, route] of Object.entries(namedRoutes)) {\n\t\trouter.addRoute(name, route, {\n\t\t\troute,\n\t\t\tloadPageClass,\n\t\t\tloadMarkup: opts.loadMarkup,\n\t\t\tcacheMarkupBy,\n\t\t\textra\n\t\t});\n\t}\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\nfunction emitUrlChanged(url)\n{\n\twindow.dispatchEvent(new CustomEvent('page-manager.url-changed', { \n\t\tdetail: {\n\t\t\turl: url\n\t\t},\n\t\tbubbles: true\n\t}))\n}\n\n// TODO: 404 and error too?\nfunction initLoading()\n{\n\tvar url = router.interpolate(options.loadingPageName, {});\n\tvar routeResult = router.parse(url);\n\treturn loadPage(routeResult, {});\n}\n\nfunction showLoading() {\n\tvar url = router.interpolate(options.loadingPageName, {});\n\tvar route = router.parse(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[route.path] || pageCache[route.pattern]).page;\n\treturn Promise.resolve(page.show(data));\n}\n\nfunction hideLoading() {\n\tvar url = router.interpolate(options.loadingPageName, {});\n\tvar route = router.parse(url);\n\tvar page = (pageCache[route.path] || pageCache[route.pattern]).page;\n\treturn Promise.resolve(page.hide());\n}\n\nasync function loadPage(routeResult, data)\n{\n\tif(!pageTemplateCache[routeResult.pattern])\n\t\tpageTemplateCache[routeResult.pattern] = await routeResult.data.loadMarkup(routeResult);\n\tlet $template = pageTemplateCache[routeResult.pattern]\n\n\tvar $html = $template.cloneNode(true);\n\toptions.prepareMarkup($html);\n\toptions.attachMarkup($html);\n\t\n\trouteResult.data.pageClass = await Promise.resolve(routeResult.data.loadPageClass());\n\tlet page = new (routeResult.data.pageClass)($html);\n\t\n\tawait Promise.resolve(page.boot(data));\n\t\n\tlet cacheKey = routeResult.data.cacheMarkupBy == 'path' ? routeResult.path : routeResult.pattern;\n\tpageCache[cacheKey] = {\n\t\t$html,\n\t\tpage\n\t};\n\t\n\treturn page;\n}\n\nasync function showPage(url, data, event)\n{\n\tvar routeResult = router.parse(url);\n\tif (routeResult == null) {\n\t\tconsole.error(`Can't find page: '${url}'`);\n\t\t\n\t\tlet url = router.interpolate(options.error404PageName, {});\n\t\trouteResult = router.parse(url)\n\t}\n\n\tdata = data || {};\n\tfor (let key in routeResult.params)\n\t\tdata[key] = routeResult.params[key];\n\n\tdata.route = {\n\t\turl: url,\n\t\tpath: routeResult.path,\n\t\tname: routeResult.name,\n\t\tparams: routeResult.params\n\t};\n\tdata.event = event;\n\n\tlet interrupt = await Promise.resolve(options.pageInterrupt(routeResult));\n\tif(interrupt)\n\t{\n\t\tgoal = { url, data };\n\t\treturn showPage(interrupt.url, null, event);\n\t}\n\t\n\tawait showLoading();\n\n\tvar getPage = null\n\tif (pageCache[routeResult.path])\n\t\tgetPage = pageCache[routeResult.path].page;\n\telse if (pageCache[routeResult.pattern])\n\t\tgetPage = pageCache[routeResult.pattern].page;\n\telse\n\t\tgetPage = loadPage(routeResult, data)\n\n\t// handle initial page\n\tif (event.action == 'load')\n\t{\n\t\tconst page = await getPage;\n\t\tawait doShow(page, data);\n\t\tawait hideLoading();\n\n\t\t// clean initial load\n\t\tif (stackPointer == -1) {\n\t\t\tstack.push({ uid: 0, data, page });\n\t\t\tstackPointer = 0;\n\t\t}\n\n\t\t// page refresh\n\t\telse {\n\t\t\tstack[stackPointer].page = page;\n\t\t\tstack[stackPointer].data = data;\n\t\t}\n\t\treturn page;\n\t}\n\n\tlet currentState = stack[stackPointer];\n\n\tif (currentState.data.route.path == routeResult.path) {\n\t\thandleHistoryAction(event, url, data, currentState.page);\n\t\tconst page = await getPage;\n\t\tawait doUpdate(page, data);\n\t\tawait hideLoading();\n\t\treturn page;\n\t}\n\n\tcurrentState.data.scrollY = window.scrollY;\n\n\tconst results = await Promise.all([\n\t\tcurrentState.page.hide(event),\n\t\tgetPage\n\t]);\n\tconst page = results[1];\n\thandleHistoryAction(event, url, data, page);\n\tawait doShow(page, data);\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\tawait hideLoading();\n\treturn page\n}\n\nasync function doShow(page, data) {\n\n\twindow.scroll(0, 0);\n\n\tawait Promise.resolve(page.show(data));\n\tdocument.title = page.title;\n}\n\nasync function doUpdate(page, data) {\n\n\tawait Promise.resolve(page.update(data));\n\tdocument.title = page.title\n}\n\nfunction getNewUid()\n{\n\tlet uid = -1;\n\n\tfor(let i = 0; i < stack.length; i++)\n\t\tuid = Math.max(uid, stack[i].uid)\n\n\treturn uid + 1;\n}\n\nasync function handleHistoryAction(event, url, data, page) {\n\tif (event.action == 'push') {\n\t\tlet newUid = getNewUid()\n\n\t\twindow.history.pushState({ uid: newUid }, null, url);\n\t\temitUrlChanged(url);\n\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{\n\t\tif(data.route.url == stack[stackPointer - 1]?.data?.route?.url)\n\t\t{\n\t\t\tlet statesToKeep = [];\n\t\t\tfor (var i = 0; i < stackPointer - 1; i++)\n\t\t\t\tstatesToKeep.push(stack[i]);\n\t\t\tstatesToKeep.push({ uid: stack[stackPointer - 1].uid, data, page });\n\n\t\t\tawait modifyHistory(statesToKeep);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tlet newId = getNewUid();\n\t\t\twindow.history.replaceState({ uid: newId }, null, url);\n\t\t\tstack[stackPointer] = { uid: newId, data, page };\n\t\t\temitUrlChanged(url);\n\t\t}\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 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\tawait initLoading();\n\tawait showLoading();\n}\n\nexport async function ready()\n{\n\t// set initial page\n\temitUrlChanged(window.location.pathname + window.location.search + window.location.hash);\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: 'load', distance: 0 }).then(async page => {\n\t\t\t\tif(e.action == 'replace')\n\t\t\t\t\tawait handleHistoryAction({ action: e.action }, e.url, e.data, page);\n\t\t\t\treturn page;\n\t\t\t});\n\t\t}\n\t});\n\n\tasync function handlePopstate(context, direction, distance) {\n\n\t\tif (manuallyAdjustingHistory) {\n\t\t\tawait manuallyAdjustingHistory(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\temitUrlChanged(context.data.route.url);\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(lastNavDirection) {\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\tbeforeHideNavDirection = lastNavDirection;\n\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 (beforeHideNavDirection == 'fwd')\n\t\t\t\t\t\thistory.back();\n\t\t\t\t\telse if (beforeHideNavDirection == '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{\n\t\t\thandlingBeforeHide = false;\n\t\t\tbeforeHideNavDirection = null;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tfunction handleBeforeHidePart2() {\n\t\tif (handlingBeforeHide !== 'step1')\n\t\t\treturn false;\n\n\t\tif(manuallyAdjustingHistory)\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\t\t\t{\n\t\t\t\thandlingBeforeHide = 'step2';\n\n\t\t\t\tif (beforeHideNavDirection == 'fwd')\n\t\t\t\t\thistory.forward();\n\t\t\t\telse if (beforeHideNavDirection == 'back')\n\t\t\t\t\thistory.back();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\thandlingBeforeHide = false;\n\t\t\t\tbeforeHideNavDirection = null;\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\", async e => {\n\t\t// TODO: is 0 sensible here, or should we call getNewId()?\n\t\tlet newUid = e.state?.uid || 0;\n\t\tlet previousUid = stack[stackPointer].uid;\n\t\tlet lastNavigationDirection = newUid > previousUid ? 'fwd' : 'back';\n\t\tlet distance = Math.abs(newUid - previousUid);\n\n\t\tvar interrupted = handleBeforeHidePart2();\n\t\tif (interrupted)\n\t\t\treturn;\n\n\t\tvar interrupted = handleBeforeHidePart1(lastNavigationDirection);\n\t\tif (interrupted)\n\t\t\treturn;\n\n\t\tvar context = findContext(newUid);\n\t\tawait handlePopstate(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, checkBeforeHide = true) {\n\n\turl = expandOnlyHash(url);\n\n\tif (checkBeforeHide === true && options.beforeHide && stack[stackPointer].page.beforeHide) {\n\n\t\tvar interrupt = stack[stackPointer].page.beforeHide();\n\t\tif (interrupt) {\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\nfunction modifyHistory(statesToKeep)\n{\n\t// BUG: You can't remove the 2nd stack frame. This is because you'd have to go back to -1, to then go forward to 0 (removing frame 1)\n\t// For clarity, you can remove (replace) frame 0 (1st), and frame 2+ (3rd+)\n\t// As a workaround, we replace the 2nd stack frame, if it is the tail, with the root \"/\". \n\t// This at least hopefully removes any meaning from it, simply taking you \"home\" rather than to wherever you were likely trying to remove.\n\n\tif (statesToKeep.length == stack.length)\n\t\treturn Promise.resolve();\n\n\treturn new Promise(async (resolve, reject) => {\n\n\t\tlet backsToDo = stackPointer;\n\n\t\t// TODO: handle stack pointer not being at the tail when this process starts\n\t\t\n\t\t// see BUG comments at the top of this method\n\t\tlet apply2ndFrameHack = statesToKeep.length == 1 && stack.length > 1\n\t\tlet secondFrameHackUid = -1\n\t\tlet defaultPageRouteResult = null;\n\t\tlet defaultPage = null;\n\t\tif(apply2ndFrameHack)\n\t\t{\n\t\t\tlet url = getPath(options.defaultPageName);\n\t\t\tdefaultPageRouteResult = router.parse(url);\n\t\t\tdefaultPage = await loadPage(defaultPageRouteResult, {});\n\n\t\t\tsecondFrameHackUid = getNewUid();\n\t\t}\n\n\t\tmanuallyAdjustingHistory = async _ => {\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\t\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\n\t\t\t\tif (k == 0)\n\t\t\t\t\twindow.history.replaceState({ uid: currentState.uid }, currentState.page.title, currentState.data.route.url);\n\t\t\t\telse\n\t\t\t\t\twindow.history.pushState({ uid: currentState.uid }, currentState.page.title, currentState.data.route.url);\n\t\t\t\t\n\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\n\t\t\t\temitUrlChanged(currentState.data.route.url)\n\t\t\t}\n\n\t\t\t// see BUG comments at the top of this method\n\t\t\tif(apply2ndFrameHack)\n\t\t\t{\n\t\t\t\tstack.push({\n\t\t\t\t\tuid: secondFrameHackUid,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\troute: {\n\t\t\t\t\t\t\turl: defaultPageRouteResult.path,\n\t\t\t\t\t\t\tpath: defaultPageRouteResult.path,\n\t\t\t\t\t\t\tname: defaultPageRouteResult.name,\n\t\t\t\t\t\t\tparams: defaultPageRouteResult.params\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tpage: defaultPage\n\t\t\t\t})\n\n\t\t\t\tstackPointer = 0;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tstackPointer = stack.length - 1;\n\t\t\t}\n\t\t\t\n\t\t\tmanuallyAdjustingHistory = false;\n\n\t\t\tresolve();\n\t\t};\n\n\t\t// see BUG comments at the top of this method\n\t\tif(apply2ndFrameHack && backsToDo == 1)\n\t\t{\n\t\t\twindow.history.replaceState({ uid: secondFrameHackUid }, defaultPage.title, defaultPageRouteResult.path);\n\t\t\tdocument.title = defaultPage.title;\n\t\t}\n\n\t\tbacksToDo--;\n\t\thistory.back();\n\t});\n}\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\treturn modifyHistory(statesToKeep);\n}\n\nexport function purgeCache() {\n\tfor (const key in pageCache)\n\t{\n\t\tpageCache[key].page.destroy && pageCache[key].page.destroy();\n\t\tif (!pageCache[key].page.constructor.existingDomSelector)\n\t\t{\n\t\t\tpageCache[key].$html.remove();\n\t\t\tdelete pageCache[key];\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}","export async function loadMarkup (routeResult) {\n\tlet url = '/pages/' + routeResult.name + '.htm';\n\tlet response = await fetch(url)\n\tlet text = await response.text();\n\n const parser = new DOMParser()\n const doc = parser.parseFromString(text, \"text/html\")\n\tconst elem = doc.querySelector('body').firstElementChild;\n\t\n\treturn elem;\n}","import './loading.htm'\r\nimport { loadMarkup } from './helpers.js';\r\nimport Page from './page.js';\r\nimport {registerPage} from '@trullock/page-manager';\r\n\r\nexport default registerPage({\r\n\tname: 'loading', \r\n\troute: '/loading', \r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\tstatic existingDomSelector = '#page-loading';\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\t\t}\r\n\t}\r\n});","import './page1.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, refresh} from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default registerPage({\r\n\tname: 'page1', \r\n\troute: '/page1',\r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\ttitle = \"Page 1\";\r\n\r\n\t\ttype = 'A';\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\r\n\t\t\t$page.querySelector('button').addEventListener('click', e => {\r\n\t\t\t\trefresh();\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tupdate(data) {\r\n\t\t\tthis.$page.querySelector('.js-time').textContent = new Date().getTime();\r\n\t\t}\r\n\t}\r\n});","import './page2.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, replace} from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default registerPage({\r\n\tname: 'page2', \r\n\troute: '/page2', \r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\ttitle = \"Page 2\";\r\n\r\n\t\ttype = 'A';\r\n\t\t\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\r\n\t\t\t$page.querySelector('button').addEventListener('click', e => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\treplace('/page3')\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n});","import './page3.htm'\r\nimport Page from './page.js';\r\nimport * as pageManager from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default pageManager.registerPage({\r\n\tname: 'page3', \r\n\troute: '/page3', \r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\ttitle = \"Page 3\";\r\n\t\t\r\n\t\tbeforeHide = () => 'Are you sure?'\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\r\n\t\t\t$page.querySelector('.btnRemove').addEventListener('click', e => {\r\n\t\t\t\tpageManager.removeHistory(state => {\r\n\t\t\t\t\treturn state.page.type == 'A';\r\n\t\t\t\t})\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\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default registerPage({\r\n\tname: 'page4', \r\n\troute: '/page4',\r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\ttitle = \"Page 4\";\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\t\t}\r\n\r\n\t\tshow(opts)\r\n\t\t{\r\n\t\t\tthrow new PageShowError('/page1', 'Cant show page4, showing page1 instead', {}, 'replace')\r\n\t\t}\r\n\t}\r\n});","import './page404.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default registerPage({\r\n\tname: 'page404', \r\n\troute: '/404',\r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\ttitle = \"Page 404\";\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\t\t}\r\n\t}\r\n});","import './pageX.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default registerPage({\r\n\tname: 'pageX', \r\n\troute: '/page/{x}',\r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\ttitle = \"Page X\";\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\t\t}\r\n\r\n\t\tshow(opts)\r\n\t\t{\r\n\t\t\tthis.$page.querySelector('#PageX').textContent = \"Page: \" + opts.x;\r\n\t\t\treturn super.show(opts);\r\n\t\t}\r\n\t}\r\n});","import './page404.htm' // doesnt matter\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default registerPage({\r\n\tname: 'pageShowFail', \r\n\troute: '/show-fail',\r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\t\ttitle = \"Page 4\";\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\t\t}\r\n\r\n\t\tshow(opts)\r\n\t\t{\r\n\t\t\tthrow new PageShowError('/page1', 'Cant show pageShowFail, showing page1 instead', {}, 'replace')\r\n\t\t}\r\n\t}\r\n});","export const cacheMarkupBy = 'route'\r\n\r\nexport default class Page {\r\n\t\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 pageX from './page-pageX.js'\r\nimport page404 from './page-page404.js'\r\nimport pageShowFail from './page-show-fail.js'\r\n\r\nwindow.addEventListener('DOMContentLoaded', async function () {\r\n\tawait pageManager.init({\r\n\t\terror404PageName: 'page404',\r\n\t\tdefaultPageName: 'page1',\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\t\t\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\r\n\t\r\n\twindow.addEventListener(\"page-manager.url-changed\", e => {\r\n\t\tconsole.log(e.detail.url);\r\n\t});\r\n\r\n\tawait pageManager.ready()\r\n});"],"names":["router","pageCache","pageTemplateCache","stack","stackPointer","manuallyAdjustingHistory","handlingBeforeHide","beforeHideNavDirection","goal","backData","options","pageInterrupt","routeResult","attachMarkup","$html","document","body","appendChild","prepareMarkup","loadingPageName","error404PageName","defaultPageName","beforeHide","registerPage","opts","loadPageClass","pageClass","namedRoutes","name","route","cacheMarkupBy","extra","Object","entries","addRoute","loadMarkup","getPath","values","url","interpolate","hash","refresh","frame","showPage","data","emitUrlChanged","window","dispatchEvent","CustomEvent","detail","bubbles","initLoading","parse","loadPage","showLoading","scrollY","event","action","page","path","pattern","Promise","resolve","show","hideLoading","hide","$template","cloneNode","boot","cacheKey","console","error","key","params","interrupt","getPage","doShow","push","uid","currentState","handleHistoryAction","doUpdate","results","all","scroll","title","update","getNewUid","i","length","Math","max","newUid","history","pushState","splice","statesToKeep","modifyHistory","newId","replaceState","distance","doNavigate","fallback","storageAvailable","x","sessionStorage","setItem","removeItem","e","init","assign","storedStack","getItem","JSON","ready","location","pathname","search","catch","PageShowError","then","handlePopstate","context","direction","handleBeforeHidePart1","lastNavDirection","setTimeout","back","forward","handleBeforeHidePart2","result","addEventListener","state","previousUid","lastNavigationDirection","abs","interrupted","findContext","stackToSerialize","map","s","stackToStore","stringify","expandOnlyHash","startsWith","currentUrl","hashIndex","indexOf","substr","navigate","checkBeforeHide","replace","go","printStack","log","reject","backsToDo","apply2ndFrameHack","secondFrameHackUid","defaultPageRouteResult","defaultPage","_","k","removeHistory","predicate","purgeCache","destroy","constructor","existingDomSelector","remove","Error","message","captureStackTrace","response","fetch","text","parser","DOMParser","doc","parseFromString","elem","querySelector","firstElementChild","Page","_class","$page","_defineProperty","textContent","Date","getTime","preventDefault","pageManager","type","dataset","style","display","pageLoading","page1","page2","page3","page4","pageX","page404","pageShowFail","confirm","ctrlKey","metaKey","$a","target","matches","closest","href"],"sourceRoot":""}
|