@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trullock/page-manager",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "description": "Single page app manager",
5
5
  "exports": {
6
6
  ".": "./src/index.js"
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 = stack[stackPointer].uid + 1;
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
- let currentUid = stack[stackPointer].uid;
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: 1,
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
  }
@@ -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 = stack[stackPointer].uid + 1;
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
- let currentUid = stack[stackPointer].uid;
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(stack[stackPointer]);
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: 1,
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
  }
@@ -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;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\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":""}