@trullock/page-manager 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/readme.md +91 -6
- package/src/index.js +6 -4
- package/tests/dist/index.html +1 -0
- package/tests/dist/main.js +38 -2
- package/tests/dist/main.js.map +1 -1
- package/tests/index.html +1 -0
- package/tests/lolpack.js +1 -0
- package/tests/page-show-fail.js +17 -0
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -119,11 +119,41 @@ e.g. Update the time the page was shown, every time its shown
|
|
|
119
119
|
|
|
120
120
|
## Navigating
|
|
121
121
|
|
|
122
|
-
|
|
122
|
+
### Navigate
|
|
123
|
+
|
|
124
|
+
To show a new page and push the url onto the history stack (a la a normal brower hyperlink click), use the `navigate(url, data, checkBeforeHide = true)` method.
|
|
123
125
|
|
|
124
126
|
`url` is the URL of the page to show
|
|
125
127
|
|
|
126
|
-
`data` is optional data to pass to the page
|
|
128
|
+
`data` is optional data to pass to the page
|
|
129
|
+
|
|
130
|
+
`checkBeforeHide` defaults to true, and causes the current page's `beforeHide` method to be called before hiding the current page and showing the next
|
|
131
|
+
|
|
132
|
+
### replace
|
|
133
|
+
|
|
134
|
+
To show a new page and replace the current url (removing any evidence in history) use the `replace(url, data)` function.
|
|
135
|
+
|
|
136
|
+
`url` is the URL of the page to show
|
|
137
|
+
|
|
138
|
+
`data` is optional data to pass to the page
|
|
139
|
+
|
|
140
|
+
Note: this doesn't currently support `beforeHide` checks. This is a known limitation.
|
|
141
|
+
|
|
142
|
+
### show
|
|
143
|
+
|
|
144
|
+
To show a new page and keep the current url use the `show(url, data)` function.
|
|
145
|
+
|
|
146
|
+
`url` is the URL of the page to show
|
|
147
|
+
|
|
148
|
+
`data` is optional data to pass to the page
|
|
149
|
+
|
|
150
|
+
Note: this doesn't currently support `beforeHide` checks. This is a known limitation.
|
|
151
|
+
|
|
152
|
+
### back
|
|
153
|
+
|
|
154
|
+
To manually trigger a backwards (in history) page navigation, use the `back(data, checkBeforeHide)` method.
|
|
155
|
+
|
|
156
|
+
`data` is optional data to pass to the page
|
|
127
157
|
|
|
128
158
|
`checkBeforeHide` defaults to true, and causes the current page's `beforeHide` method to be called before hiding the current page and showing the next
|
|
129
159
|
|
|
@@ -135,13 +165,11 @@ Define the `beforeHide` handler on the PageManager setup:
|
|
|
135
165
|
|
|
136
166
|
```
|
|
137
167
|
pageManager.init({
|
|
138
|
-
beforeHide: message =>
|
|
139
|
-
resolve(confirm(message))
|
|
140
|
-
})
|
|
168
|
+
beforeHide: message => Promise.resolve(confirm(message))
|
|
141
169
|
});
|
|
142
170
|
```
|
|
143
171
|
|
|
144
|
-
and then define page specific `beforeHide`
|
|
172
|
+
and then define page specific `beforeHide` behaviours:
|
|
145
173
|
|
|
146
174
|
```
|
|
147
175
|
pageManager.registerPage('edit-thing', '/thing/{thingId}/edit', class extends Page {
|
|
@@ -149,6 +177,63 @@ pageManager.registerPage('edit-thing', '/thing/{thingId}/edit', class extends Pa
|
|
|
149
177
|
});
|
|
150
178
|
```
|
|
151
179
|
|
|
180
|
+
## History manipulation
|
|
181
|
+
|
|
182
|
+
Sometimes in application-style webapps it's convenient to remove pages from the browser's history.
|
|
183
|
+
|
|
184
|
+
Say you have a form to create a new Thing, and your navigation path looks like this:
|
|
185
|
+
|
|
186
|
+
```
|
|
187
|
+
Home -> Add New Thing -> View Newly Added Thing
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Traditionally, if you press Back when on the last page, you'd go back to the `Add New Thing` page. This is probably undesireable, you really want to go back to `Home`. In this case, make the navigation from `Add New Thing` to `View Newly Added Thing` use `replace(url, data)` instead of `navigate(url, data)`.
|
|
191
|
+
|
|
192
|
+
However, what if you have multiple steps to add a new thing, like a wizard.
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
Home -> Add New Thing Step 1 -> Add New Thing Step 2 -> Add New Thing Step 3 -> View Newly Added Thing
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
In this case, you want to use `removeHistory(predicate)`. This will rewind history until `predicate` no longer matches and then re-add the current page onto the end of the history stack, thus splicing any matched history entries from the record.
|
|
199
|
+
|
|
200
|
+
`predicate` must be a function of the following form:
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
function(historyEntry, index) {
|
|
204
|
+
return <bool>
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
A `historyEntry` looks like this:
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
{
|
|
212
|
+
uid: 123 // internal unique state id, not very useful to you,
|
|
213
|
+
data: {} // this is the data associated with the page that was shown (i.e. what was passed to `show(opts)`)
|
|
214
|
+
page: <Page> // this is the instance of the Page class associated with this history entry
|
|
215
|
+
}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
So if your url history was as below:
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
/
|
|
222
|
+
/add-thing/step1
|
|
223
|
+
/add-thing/step2
|
|
224
|
+
/add-thing/step3
|
|
225
|
+
/thing/1
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
then you might call `removeHistory()` like this:
|
|
229
|
+
|
|
230
|
+
```
|
|
231
|
+
removeHistory((entry, i) => {
|
|
232
|
+
return entry.data.route.path.indexOf('/add-thing/') == 0;
|
|
233
|
+
})
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
|
|
152
237
|
## Page Container
|
|
153
238
|
|
|
154
239
|
The `pageContainer` option is a function which returns a document element which will contain the markup for each page when it's loaded:
|
package/src/index.js
CHANGED
|
@@ -128,11 +128,9 @@ function showPage(url, data, event) {
|
|
|
128
128
|
var route = router.parse(url);
|
|
129
129
|
if (route == null) {
|
|
130
130
|
console.error(`Can't find page: '${url}'`);
|
|
131
|
+
|
|
131
132
|
let page404 = pageHash[options.error404PageName];
|
|
132
|
-
|
|
133
|
-
return Promise.reject(new PageShowError('/', `Can't find page: '${url}'. Also can't find 404 page: '${options.error404PageName}'`, {}, 'replace'));
|
|
134
|
-
|
|
135
|
-
return Promise.reject(new PageShowError(page404.url, `Can't find page: '${url}'`, {}, 'show'));
|
|
133
|
+
route = router.parse(page404.url)
|
|
136
134
|
}
|
|
137
135
|
|
|
138
136
|
data = data || {};
|
|
@@ -249,6 +247,10 @@ function handleHistoryAction(event, url, data, page) {
|
|
|
249
247
|
else if (event.action == 'replace') {
|
|
250
248
|
// TODO: this case may be buggy
|
|
251
249
|
|
|
250
|
+
// BUG: you can replace the current state with the same url as the previous state, which shouldnt be allowed,
|
|
251
|
+
// you cant have the same url in the history twice (next to each other).
|
|
252
|
+
// Update this to check for such a case and handle it
|
|
253
|
+
|
|
252
254
|
let currentUid = stack[stackPointer].uid;
|
|
253
255
|
window.history.replaceState({ uid: currentUid }, null, url);
|
|
254
256
|
|
package/tests/dist/index.html
CHANGED
package/tests/dist/main.js
CHANGED
|
@@ -681,8 +681,7 @@ function showPage(url, data, event) {
|
|
|
681
681
|
if (route == null) {
|
|
682
682
|
console.error(`Can't find page: '${url}'`);
|
|
683
683
|
let page404 = pageHash[options.error404PageName];
|
|
684
|
-
|
|
685
|
-
return Promise.reject(new PageShowError(page404.url, `Can't find page: '${url}'`, {}, 'show'));
|
|
684
|
+
route = _trullock_router__WEBPACK_IMPORTED_MODULE_0__["default"].parse(page404.url);
|
|
686
685
|
}
|
|
687
686
|
data = data || {};
|
|
688
687
|
for (let key in route.params) data[key] = route.params[key];
|
|
@@ -779,6 +778,10 @@ function handleHistoryAction(event, url, data, page) {
|
|
|
779
778
|
} else if (event.action == 'replace') {
|
|
780
779
|
// TODO: this case may be buggy
|
|
781
780
|
|
|
781
|
+
// BUG: you can replace the current state with the same url as the previous state, which shouldnt be allowed,
|
|
782
|
+
// you cant have the same url in the history twice (next to each other).
|
|
783
|
+
// Update this to check for such a case and handle it
|
|
784
|
+
|
|
782
785
|
let currentUid = stack[stackPointer].uid;
|
|
783
786
|
window.history.replaceState({
|
|
784
787
|
uid: currentUid
|
|
@@ -1264,6 +1267,37 @@ function _toPrimitive(input, hint) { if (typeof input !== "object" || input ===
|
|
|
1264
1267
|
|
|
1265
1268
|
/***/ }),
|
|
1266
1269
|
|
|
1270
|
+
/***/ "./tests/page-show-fail.js":
|
|
1271
|
+
/*!*********************************!*\
|
|
1272
|
+
!*** ./tests/page-show-fail.js ***!
|
|
1273
|
+
\*********************************/
|
|
1274
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
1275
|
+
|
|
1276
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1277
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1278
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
1279
|
+
/* harmony export */ });
|
|
1280
|
+
/* harmony import */ var _page404_htm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./page404.htm */ "./tests/page404.htm");
|
|
1281
|
+
/* harmony import */ var _page_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./page.js */ "./tests/page.js");
|
|
1282
|
+
/* harmony import */ var _trullock_page_manager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @trullock/page-manager */ "./src/index.js");
|
|
1283
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
1284
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
1285
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
1286
|
+
// doesnt matter
|
|
1287
|
+
|
|
1288
|
+
|
|
1289
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_trullock_page_manager__WEBPACK_IMPORTED_MODULE_2__.registerPage)('pageShowFail', '/show-fail', class extends _page_js__WEBPACK_IMPORTED_MODULE_1__["default"] {
|
|
1290
|
+
constructor($page) {
|
|
1291
|
+
super($page);
|
|
1292
|
+
_defineProperty(this, "title", "Page 4");
|
|
1293
|
+
}
|
|
1294
|
+
show(opts) {
|
|
1295
|
+
throw new _trullock_page_manager__WEBPACK_IMPORTED_MODULE_2__.PageShowError('/page1', 'Cant show pageShowFail, showing page1 instead', {}, 'replace');
|
|
1296
|
+
}
|
|
1297
|
+
}));
|
|
1298
|
+
|
|
1299
|
+
/***/ }),
|
|
1300
|
+
|
|
1267
1301
|
/***/ "./tests/page.js":
|
|
1268
1302
|
/*!***********************!*\
|
|
1269
1303
|
!*** ./tests/page.js ***!
|
|
@@ -1378,6 +1412,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1378
1412
|
/* harmony import */ var _page_page3_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./page-page3.js */ "./tests/page-page3.js");
|
|
1379
1413
|
/* harmony import */ var _page_page4_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./page-page4.js */ "./tests/page-page4.js");
|
|
1380
1414
|
/* harmony import */ var _page_page404_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./page-page404.js */ "./tests/page-page404.js");
|
|
1415
|
+
/* harmony import */ var _page_show_fail_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./page-show-fail.js */ "./tests/page-show-fail.js");
|
|
1416
|
+
|
|
1381
1417
|
|
|
1382
1418
|
|
|
1383
1419
|
|
package/tests/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","mappings":";;;;;;;;;;;;;;AAAA,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,gBAAgB;;;;;;;;;;;;;;;ACAT;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,eAAe,cAAc,6BAA6B;AAC1G;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe;AACf;AACA;AACA;AACA,sBAAsB,6DAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,sCAAsC,oBAAoB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,KAAK;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE;;;;;;;;;;;;;;AC3NH,6BAAe,sCAAY;AAC3B;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC,wBAAwB,OAAO,SAAS;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB,SAAS,UAAU;AACnE,cAAc,sBAAsB;AACpC,eAAe,IAAI;AACnB;AACA,IAAI;AACJ;AACA;AACA,sCAAsC,SAAS;AAC/C,cAAc,QAAQ;AACtB,eAAe,IAAI;AACnB;AACA,IAAI;AACJ;AACA,sDAAsD,GAAG;AACzD,YAAY,MAAM,KAAK;AACvB;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,4CAA4C,EAAE;AAC9C,YAAY,IAAI,OAAO;AACvB;AACA,IAAI;AACJ;AACA;AACA,+CAA+C;AAC/C,YAAY,IAAI,KAAK;AACrB;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,IAAI;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3OsC;AAEtC,IAAIC,QAAQ,GAAG,CAAC,CAAC;EAChBC,SAAS,GAAG,CAAC,CAAC;EACdC,iBAAiB,GAAG,CAAC,CAAC;EACtBC,KAAK,GAAG,EAAE;EACVC,YAAY,GAAG,CAAC,CAAC;AAElB,IAAIC,wBAAwB,GAAG,KAAK;AACpC,IAAIC,kBAAkB,GAAG,KAAK;AAC9B,IAAIC,uBAAuB,GAAG,IAAI;AAElC,IAAIC,IAAI,GAAG,IAAI;AACf,IAAIC,QAAQ,GAAG,CAAC,CAAC;AACjB,IAAIC,OAAO,GAAG;EACbC,SAAS,EAAEC,KAAK,IAAI,SAAS,GAAGA,KAAK,CAACC,SAAS,GAAG,OAAO;EACzDC,iBAAiB,EAAEF,KAAK,IAAI;IAC3B,OAAOG,KAAK,CAACL,OAAO,CAACC,SAAS,CAACC,KAAK,CAAC,CAAC,CACpCI,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,IAAI,EAAE,CAAC,CACnBF,IAAI,CAACG,IAAI,IAAI;MACb,IAAIC,IAAI,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;MACxCF,IAAI,CAA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","sources":["webpack://@trullock/page-manager/./tests/page1.htm","webpack://@trullock/page-manager/./tests/page2.htm","webpack://@trullock/page-manager/./tests/page3.htm","webpack://@trullock/page-manager/./tests/page4.htm","webpack://@trullock/page-manager/./tests/page404.htm","webpack://@trullock/page-manager/./node_modules/@trullock/router/src/index.js","webpack://@trullock/page-manager/./node_modules/@trullock/router/src/pattern-lexer.js","webpack://@trullock/page-manager/./src/index.js","webpack://@trullock/page-manager/./tests/page-loading.js","webpack://@trullock/page-manager/./tests/page-page1.js","webpack://@trullock/page-manager/./tests/page-page2.js","webpack://@trullock/page-manager/./tests/page-page3.js","webpack://@trullock/page-manager/./tests/page-page4.js","webpack://@trullock/page-manager/./tests/page-page404.js","webpack://@trullock/page-manager/./tests/page.js","webpack://@trullock/page-manager/webpack/bootstrap","webpack://@trullock/page-manager/webpack/runtime/define property getters","webpack://@trullock/page-manager/webpack/runtime/hasOwnProperty shorthand","webpack://@trullock/page-manager/webpack/runtime/make namespace object","webpack://@trullock/page-manager/webpack/runtime/publicPath","webpack://@trullock/page-manager/./tests/lolpack.js"],"sourcesContent":["export default __webpack_public_path__ + \"page1.htm\";","export default __webpack_public_path__ + \"page2.htm\";","export default __webpack_public_path__ + \"page3.htm\";","export default __webpack_public_path__ + \"page4.htm\";","export default __webpack_public_path__ + \"page404.htm\";","import PatternLexer from './pattern-lexer.js'\r\n\r\nfunction isKind(val, kind) {\r\n\treturn '[object ' + kind + ']' === Object.prototype.toString.call(val);\r\n}\r\nfunction isRegExp(val) {\r\n\treturn isKind(val, 'RegExp');\r\n}\r\n\r\nfunction decodeQueryString(queryStr, shouldTypecast) {\r\n\tvar queryArr = (queryStr || '').replace('?', '').split('&'),\r\n\t\treg = /([^=]+)=(.+)/,\r\n\t\ti = -1,\r\n\t\tobj = {},\r\n\t\tequalIndex, cur, pValue, pName;\r\n\r\n\twhile ((cur = queryArr[++i])) {\r\n\t\tequalIndex = cur.indexOf('=');\r\n\t\tpName = cur.substring(0, equalIndex);\r\n\t\tpValue = decodeURIComponent(cur.substring(equalIndex + 1));\r\n\r\n\t\tif (pName in obj){\r\n\t\t\tif(isArray(obj[pName])){\r\n\t\t\t\tobj[pName].push(pValue);\r\n\t\t\t} else {\r\n\t\t\t\tobj[pName] = [obj[pName], pValue];\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tobj[pName] = pValue;\r\n\t }\r\n\t}\r\n\treturn obj;\r\n}\r\n\r\nfunction Route(name, pattern, pageClass, priority, router) {\r\n\tvar isRegexPattern = isRegExp(pattern);\r\n\tthis._name = name;\r\n\tthis._router = router;\r\n\tthis._pattern = pattern;\r\n\tthis._paramsIds = isRegexPattern ? null : router.patternLexer.getParamIds(pattern);\r\n\tthis._optionalParamsIds = isRegexPattern ? null : router.patternLexer.getOptionalParamsIds(pattern);\r\n\tthis._matchRegexp = isRegexPattern ? pattern : router.patternLexer.compilePattern(pattern, router.ignoreCase);\r\n\tthis._pageClass = pageClass;\r\n\tthis._priority = priority || 0;\r\n}\r\n\r\nRoute.prototype = {\r\n\r\n\tmatch: function (request) {\r\n\t\treturn this._matchRegexp.test(request);\r\n\t},\r\n\r\n\t_isValidParam: function (request, prop, values) {\r\n\t\tvar validationRule = this.rules[prop],\r\n\t\t\tval = values[prop],\r\n\t\t\tisValid = false,\r\n\t\t\tisQuery = (prop.indexOf('?') === 0);\r\n\r\n\t\tif (val == null && this._optionalParamsIds && arrayIndexOf(this._optionalParamsIds, prop) !== -1) {\r\n\t\t\tisValid = true;\r\n\t\t}\r\n\t\telse if (isRegExp(validationRule)) {\r\n\t\t\tif (isQuery)\r\n\t\t\t\tval = values[prop + '_']; //use raw string\r\n\r\n\t\t\tisValid = validationRule.test(val);\r\n\t\t}\r\n\t\telse if (isArray(validationRule)) {\r\n\t\t\tif (isQuery)\r\n\t\t\t\tval = values[prop + '_']; //use raw string\r\n\r\n\t\t\tisValid = this._isValidArrayRule(validationRule, val);\r\n\t\t}\r\n\t\telse if (isFunction(validationRule)) {\r\n\t\t\tisValid = validationRule(val, request, values);\r\n\t\t}\r\n\r\n\t\treturn isValid; //fail silently if validationRule is from an unsupported type\r\n\t},\r\n\r\n\t_isValidArrayRule: function (arr, val) {\r\n\t\tif (!this._router.ignoreCase) {\r\n\t\t\treturn arrayIndexOf(arr, val) !== -1;\r\n\t\t}\r\n\r\n\t\tif (typeof val === 'string') {\r\n\t\t\tval = val.toLowerCase();\r\n\t\t}\r\n\r\n\t\tvar n = arr.length,\r\n\t\t\titem,\r\n\t\t\tcompareVal;\r\n\r\n\t\twhile (n--) {\r\n\t\t\titem = arr[n];\r\n\t\t\tcompareVal = (typeof item === 'string') ? item.toLowerCase() : item;\r\n\t\t\tif (compareVal === val) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t_getParamsObject: function (request) {\r\n\t\tvar shouldTypecast = this._router.shouldTypecast,\r\n\t\t\tvalues = this._router.patternLexer.getParamValues(request, this._matchRegexp, shouldTypecast),\r\n\t\t\to = {},\r\n\t\t\tn = values.length,\r\n\t\t\tparam, val;\r\n\t\twhile (n--) {\r\n\t\t\tval = values[n];\r\n\t\t\tif (this._paramsIds) {\r\n\t\t\t\tparam = this._paramsIds[n];\r\n\t\t\t\tif (param.indexOf('?') === 0 && val) {\r\n\t\t\t\t\tval = decodeQueryString(val, shouldTypecast);\r\n\t\t\t\t\t\r\n\t\t\t\t\tfor(var key in val){\r\n\t\t\t\t\t\tif(!o[key])\r\n\t\t\t\t\t\t\to[key] = val[key];\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\to['?' + key] = val[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t\to[n] = val;\r\n\t\t\t\t} \r\n\t\t\t\telse \r\n\t\t\t\t\to[param] = val;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn o;\r\n\t},\r\n\r\n\tinterpolate: function (replacements) {\r\n\t\ttry {\r\n\t\t\tvar str = this._router.patternLexer.interpolate(this._pattern, replacements);\r\n\t\t\treturn str;\r\n\t\t}\r\n\t\tcatch(e) {\r\n\t\t\tthrow new Error(`Error interpolating route ${this._pattern} with values ${JSON.stringify(replacements)}\\n` + e);\r\n\t\t}\r\n\t},\r\n\r\n\ttoString: function () {\r\n\t\treturn '[Route pattern:\"' + this._pattern + '\", numListeners:' + this.matched.getNumListeners() + ']';\r\n\t}\r\n\r\n};\r\n\r\n\r\nexport default new class {\r\n\tconstructor() {\r\n\t\tthis.routes = [];\r\n\t\tthis.routesByName = {};\r\n\t\tthis.patternLexer = PatternLexer();\r\n\t}\r\n\r\n\taddRoute (name, pattern, pageClass, priority) {\r\n\t\tpattern += pattern.endsWith('/') ? ':?query:' : '/:?query:';\r\n\t\tvar route = new Route(name, pattern, pageClass, priority, this);\r\n\r\n\t\tvar n = this.routes.length;\r\n\t\tdo\r\n\t\t{ \r\n\t\t\t--n; \r\n\t\t} while (this.routes[n] && route._priority <= this.routes[n]._priority);\r\n\t\tthis.routes.splice(n + 1, 0, route);\r\n\r\n\t\tthis.routesByName[name] = route;\r\n\t\tObject.defineProperty(this, name, { get: () => pattern });\r\n\r\n\t\treturn route;\r\n\t}\r\n\r\n\tinterpolate(name, data){\r\n\t\tif(!this.routesByName[name])\r\n\t\t\tthrow new Error(`Cannot find route by name ${name}`);\r\n\t\t\t\r\n\t\treturn this.routesByName[name].interpolate(data);\r\n\t}\r\n\r\n\tparse (request) {\r\n\t\tvar n = this.routes.length;\r\n\t\tvar route, hash, path;\r\n\r\n\t\tvar index = request.indexOf('#');\r\n\t\tif(index > -1)\r\n\t\t{\r\n\t\t\thash = request.substr(index + 1);\r\n\t\t\trequest = request.substr(0, index);\r\n\t\t}\r\n\r\n\t\tindex = request.indexOf('?');\r\n\t\tif(index > -1)\r\n\t\t\tpath = request.substr(0, index)\r\n\t\telse\r\n\t\t\tpath = request;\t\r\n\t\t\r\n\r\n\t\twhile (route = this.routes[--n]) {\r\n\t\t\tif (route.match(request)) {\r\n\t\t\t\tvar params = route._getParamsObject(request);\r\n\t\t\t\tparams.hash = hash;\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\tpath: path.toLowerCase(),\r\n\t\t\t\t\trouteName: route._name,\r\n\t\t\t\t\tpattern: route._pattern,\r\n\t\t\t\t\tpageClass: route._pageClass,\r\n\t\t\t\t\tparams: params\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\ttoString () {\r\n\t\treturn '[Router numRoutes:' + this.getNumRoutes() + ']';\r\n\t}\r\n}();","export default function () {\r\n\r\n\tvar\r\n\t\t//match chars that should be escaped on string regexp\r\n\t\tESCAPE_CHARS_REGEXP = /[\\\\.+*?\\^$\\[\\](){}\\/'#]/g,\r\n\r\n\t\t//trailing slashes (begin/end of string)\r\n\t\tLOOSE_SLASHES_REGEXP = /^\\/|\\/$/g,\r\n\t\tLEGACY_SLASHES_REGEXP = /\\/$/g,\r\n\r\n\t\t//params - everything between `{ }` or `: :`\r\n\t\tPARAMS_REGEXP = /(?:\\{|:)([^}:]+)(?:\\}|:)/g,\r\n\r\n\t\t//used to save params during compile (avoid escaping things that\r\n\t\t//shouldn't be escaped).\r\n\t\tTOKENS = {\r\n\t\t\t'OS': {\r\n\t\t\t\t//optional slashes\r\n\t\t\t\t//slash between `::` or `}:` or `\\w:` or `:{?` or `}{?` or `\\w{?`\r\n\t\t\t\trgx: /([:}]|\\w(?=\\/))\\/?(:|(?:\\{\\?))/g,\r\n\t\t\t\tsave: '$1{{id}}$2',\r\n\t\t\t\tres: '\\\\/?'\r\n\t\t\t},\r\n\t\t\t'RS': {\r\n\t\t\t\t//required slashes\r\n\t\t\t\t//used to insert slash between `:{` and `}{`\r\n\t\t\t\trgx: /([:}])\\/?(\\{)/g,\r\n\t\t\t\tsave: '$1{{id}}$2',\r\n\t\t\t\tres: '\\\\/'\r\n\t\t\t},\r\n\t\t\t'RQ': {\r\n\t\t\t\t//required query string - everything in between `{? }`\r\n\t\t\t\trgx: /\\{\\?([^}]+)\\}/g,\r\n\t\t\t\t//everything from `?` till `#` or end of string\r\n\t\t\t\tres: '\\\\?([^#]+)'\r\n\t\t\t},\r\n\t\t\t'OQ': {\r\n\t\t\t\t//optional query string - everything in between `:? :`\r\n\t\t\t\trgx: /:\\?([^:]+):/g,\r\n\t\t\t\t//everything from `?` till `#` or end of string\r\n\t\t\t\tres: '(?:\\\\?([^#]*))?'\r\n\t\t\t},\r\n\t\t\t'OR': {\r\n\t\t\t\t//optional rest - everything in between `: *:`\r\n\t\t\t\trgx: /:([^:]+)\\*:/g,\r\n\t\t\t\tres: '(.*)?' // optional group to avoid passing empty string as captured\r\n\t\t\t},\r\n\t\t\t'RR': {\r\n\t\t\t\t//rest param - everything in between `{ *}`\r\n\t\t\t\trgx: /\\{([^}]+)\\*\\}/g,\r\n\t\t\t\tres: '(.+)'\r\n\t\t\t},\r\n\t\t\t// required/optional params should come after rest segments\r\n\t\t\t'RP': {\r\n\t\t\t\t//required params - everything between `{ }`\r\n\t\t\t\trgx: /\\{([^}]+)\\}/g,\r\n\t\t\t\tres: '([^\\\\/?]+)'\r\n\t\t\t},\r\n\t\t\t'OP': {\r\n\t\t\t\t//optional params - everything between `: :`\r\n\t\t\t\trgx: /:([^:]+):/g,\r\n\t\t\t\tres: '([^\\\\/?]+)?\\/?'\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tLOOSE_SLASH = 1,\r\n\t\tSTRICT_SLASH = 2,\r\n\t\tLEGACY_SLASH = 3,\r\n\r\n\t\t_slashMode = LOOSE_SLASH;\r\n\r\n\r\n\tfunction precompileTokens() {\r\n\t\tvar key, cur;\r\n\t\tfor (key in TOKENS) {\r\n\t\t\tif (TOKENS.hasOwnProperty(key)) {\r\n\t\t\t\tcur = TOKENS[key];\r\n\t\t\t\tcur.id = '__CR_' + key + '__';\r\n\t\t\t\tcur.save = ('save' in cur) ? cur.save.replace('{{id}}', cur.id) : cur.id;\r\n\t\t\t\tcur.rRestore = new RegExp(cur.id, 'g');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tprecompileTokens();\r\n\r\n\r\n\tfunction captureVals(regex, pattern) {\r\n\t\tvar vals = [], match;\r\n\t\t// very important to reset lastIndex since RegExp can have \"g\" flag\r\n\t\t// and multiple runs might affect the result, specially if matching\r\n\t\t// same string multiple times on IE 7-8\r\n\t\tregex.lastIndex = 0;\r\n\t\twhile (match = regex.exec(pattern)) {\r\n\t\t\tvals.push(match[1]);\r\n\t\t}\r\n\t\treturn vals;\r\n\t}\r\n\r\n\tfunction getParamIds(pattern) {\r\n\t\treturn captureVals(PARAMS_REGEXP, pattern);\r\n\t}\r\n\r\n\tfunction getOptionalParamsIds(pattern) {\r\n\t\treturn captureVals(TOKENS.OP.rgx, pattern);\r\n\t}\r\n\r\n\tfunction compilePattern(pattern, ignoreCase) {\r\n\t\tpattern = pattern || '';\r\n\r\n\t\tif (pattern) {\r\n\t\t\tif (_slashMode === LOOSE_SLASH) {\r\n\t\t\t\tpattern = pattern.replace(LOOSE_SLASHES_REGEXP, '');\r\n\t\t\t}\r\n\t\t\telse if (_slashMode === LEGACY_SLASH) {\r\n\t\t\t\tpattern = pattern.replace(LEGACY_SLASHES_REGEXP, '');\r\n\t\t\t}\r\n\r\n\t\t\t//save tokens\r\n\t\t\tpattern = replaceTokens(pattern, 'rgx', 'save');\r\n\t\t\t//regexp escape\r\n\t\t\tpattern = pattern.replace(ESCAPE_CHARS_REGEXP, '\\\\$&');\r\n\t\t\t//restore tokens\r\n\t\t\tpattern = replaceTokens(pattern, 'rRestore', 'res');\r\n\r\n\t\t\tif (_slashMode === LOOSE_SLASH) {\r\n\t\t\t\tpattern = '\\\\/?' + pattern;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (_slashMode !== STRICT_SLASH) {\r\n\t\t\t//single slash is treated as empty and end slash is optional\r\n\t\t\tpattern += '\\\\/?';\r\n\t\t}\r\n\t\treturn new RegExp('^' + pattern + '$', ignoreCase ? 'i' : '');\r\n\t}\r\n\r\n\tfunction replaceTokens(pattern, regexpName, replaceName) {\r\n\t\tvar cur, key;\r\n\t\tfor (key in TOKENS) {\r\n\t\t\tif (TOKENS.hasOwnProperty(key)) {\r\n\t\t\t\tcur = TOKENS[key];\r\n\t\t\t\tpattern = pattern.replace(cur[regexpName], cur[replaceName]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn pattern;\r\n\t}\r\n\r\n\tfunction getParamValues(request, regexp, shouldTypecast) {\r\n\t\tvar vals = regexp.exec(request);\r\n\t\tif (vals) {\r\n\t\t\tvals.shift();\r\n\t\t\tif (shouldTypecast) {\r\n\t\t\t\tvals = typecastArrayValues(vals);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn vals;\r\n\t}\r\n\r\n\tfunction interpolate(pattern, replacements) {\r\n\t\t// default to an empty object because pattern might have just\r\n\t\t// optional arguments\r\n\t\treplacements = replacements || {};\r\n\t\tif (typeof pattern !== 'string') {\r\n\t\t\tthrow new Error('Route pattern should be a string.');\r\n\t\t}\r\n\t\t\r\n\t\tvar replaceFn = function (match, prop) {\r\n\t\t\tvar val;\r\n\t\t\tprop = (prop.substr(0, 1) === '?') ? prop.substr(1) : prop;\r\n\t\t\tif (replacements[prop] != null) {\r\n\t\t\t\tif (typeof replacements[prop] === 'object') {\r\n\t\t\t\t\tvar queryParts = [], rep;\r\n\t\t\t\t\tfor (var key in replacements[prop]) {\r\n\t\t\t\t\t\trep = replacements[prop][key];\r\n\t\t\t\t\t\tif (isArray(rep)) {\r\n\t\t\t\t\t\t\tfor (var k in rep) {\r\n\t\t\t\t\t\t\t\tif (key.slice(-2) == '[]') {\r\n\t\t\t\t\t\t\t\t\tqueryParts.push(encodeURIComponent(key.slice(0, -2)) + '[]=' + encodeURIComponent(rep[k]));\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tqueryParts.push(encodeURIComponent(key + '=' + rep[k]));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tqueryParts.push(encodeURIComponent(key + '=' + rep));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tval = '?' + queryParts.join('&');\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// make sure value is a string see #gh-54\r\n\t\t\t\t\tval = String(replacements[prop]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (match.indexOf('*') === -1 && val.indexOf('/') !== -1) {\r\n\t\t\t\t\tthrow new Error('Invalid value \"' + val + '\" for segment \"' + match + '\".');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (match.indexOf('{') !== -1) {\r\n\t\t\t\tthrow new Error('The segment ' + match + ' is required.');\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tval = '';\r\n\t\t\t}\r\n\t\t\treturn val;\r\n\t\t};\r\n\r\n\t\tif (!TOKENS.OS.trail) {\r\n\t\t\tTOKENS.OS.trail = new RegExp('(?:' + TOKENS.OS.id + ')+$');\r\n\t\t}\r\n\r\n\t\treturn pattern\r\n\t\t\t.replace(TOKENS.OS.rgx, TOKENS.OS.save)\r\n\t\t\t.replace(PARAMS_REGEXP, replaceFn)\r\n\t\t\t.replace(TOKENS.OS.trail, '') // remove trailing\r\n\t\t\t.replace(TOKENS.OS.rRestore, '/'); // add slash between segments\r\n\t}\r\n\r\n\t//API\r\n\treturn {\r\n\t\tstrict: function () {\r\n\t\t\t_slashMode = STRICT_SLASH;\r\n\t\t},\r\n\t\tloose: function () {\r\n\t\t\t_slashMode = LOOSE_SLASH;\r\n\t\t},\r\n\t\tlegacy: function () {\r\n\t\t\t_slashMode = LEGACY_SLASH;\r\n\t\t},\r\n\t\tgetParamIds: getParamIds,\r\n\t\tgetOptionalParamsIds: getOptionalParamsIds,\r\n\t\tgetParamValues: getParamValues,\r\n\t\tcompilePattern: compilePattern,\r\n\t\tinterpolate: interpolate\r\n\t};\r\n\r\n}","import router from '@trullock/router';\n\nvar pageHash = {},\n\tpageCache = {},\n\tpageTemplateCache = {},\n\tstack = [],\n\tstackPointer = -1;\n\nvar manuallyAdjustingHistory = false;\nvar handlingBeforeHide = false;\nvar lastNavigationDirection = null;\n\nvar goal = null;\nvar backData = {};\nvar options = {\n\tfetchPath: route => '/pages/' + route.routeName + '.html',\n\tfetchPageTemplate: route => {\n\t\treturn fetch(options.fetchPath(route))\n\t\t\t.then(r => r.text())\n\t\t\t.then(html => {\n\t\t\t\tvar $div = document.createElement('div');\n\t\t\t\t$div.innerHTML = html;\n\t\t\t\t// Pages are assumed to have a single wrapping element\n\t\t\t\treturn $div.firstElementChild;\n\t\t\t})\n\t\t\t.then($template => {\n\t\t\t\tpageTemplateCache[route.pattern] = $template;\n\t\t\t\treturn $template;\n\t\t\t});\n\t},\n\tpageInterrupt: route => null,\n\tattachMarkup: $html => document.body.appendChild($html),\n\tprepareMarkup: $html => { },\n\tloadingPageName: 'loading',\n\terror404PageName: 'error-404',\n\tdefaultPageName: 'root',\n\tbeforeHide: null\n}\n\nexport const pages = pageHash;\n\nexport function registerPage(argA, argB, argC) {\n\n\tlet namedRoutes = null, \n\t\tpageClass = null;\n\n\tif(argC == undefined)\n\t{\n\t\tnamedRoutes = argA;\n\t\tpageClass = argB;\n\t} else {\n\t\tnamedRoutes = {\n\t\t\t[argA]: argB\n\t\t};\n\t\tpageClass = argC;\n\t}\n\t\n\n\tfor (const [name, route] of Object.entries(namedRoutes)) {\n\t\trouter.addRoute(name, route, pageClass);\n\n\t\tpageHash[name] = {\n\t\t\turl: route,\n\t\t\tpageClass: pageClass\n\t\t}\n\t}\n\n\treturn pageClass;\n}\n\nexport function getPath(name, values) {\n\tlet url = router.interpolate(name, values);\n\tif (values?.hash)\n\t\turl += '#' + values.hash;\n\treturn url;\n}\n\nexport function refresh() {\n\tlet frame = stack[stackPointer];\n\tshowPage(frame.data.route.url, frame.data, 'replace');\n}\n\n// TODO: 404 and error too?\nfunction initLoading()\n{\n\tvar page = pageHash[options.loadingPageName];\n\tvar route = router.parse(page.url);\n\treturn loadPage(route, {});\n}\n\nfunction showLoading() {\n\tvar page = pageHash[options.loadingPageName];\n\tvar route = router.parse(page.url);\n\tvar data = {\n\t\troute: route,\n\t\tscrollY: window.scrollY,\n\t\tevent: {\n\t\t\taction: 'replace'\n\t\t}\n\t};\n\n\tvar page = pageCache[page.url].page;\n\n\treturn Promise.resolve(page.show(data));\n}\n\nfunction loadPage(route, data) {\n\n\tvar fetchPage = pageTemplateCache[route.pattern] ? Promise.resolve(pageTemplateCache[route.pattern]) : options.fetchPageTemplate(route);\n\n\treturn fetchPage.then($template => {\n\t\tvar $html = $template.cloneNode(true);\n\t\toptions.prepareMarkup($html);\n\t\toptions.attachMarkup($html);\n\t\tpageCache[route.path] = {\n\t\t\t$html,\n\t\t\tpage: new (route.pageClass)($html)\n\t\t}\n\n\t\tvar page = pageCache[route.path].page;\n\t\t\n\t\tlet booted = new Promise(resolve => resolve(page.boot(data)));\n\t\treturn booted.then(() => page);\n\t});\n}\n\nfunction showPage(url, data, event) {\n\tvar route = router.parse(url);\n\tif (route == null) {\n\t\tconsole.error(`Can't find page: '${url}'`);\n\t\tlet page404 = pageHash[options.error404PageName];\n\t\tif(!page404)\n\t\t\treturn Promise.reject(new PageShowError('/', `Can't find page: '${url}'. Also can't find 404 page: '${options.error404PageName}'`, {}, 'replace'));\n\n\t\treturn Promise.reject(new PageShowError(page404.url, `Can't find page: '${url}'`, {}, 'show'));\n\t}\n\n\tdata = data || {};\n\tfor (let key in route.params)\n\t\tdata[key] = route.params[key];\n\n\tdata.route = {\n\t\turl: url,\n\t\tpath: route.path,\n\t\trouteName: route.routeName,\n\t\tparams: route.params\n\t};\n\tdata.event = event;\n\n\tlet interrupt = options.pageInterrupt(route);\n\tif(interrupt)\n\t{\n\t\tgoal = { url, data };\n\t\treturn showPage(interrupt.url, null, event);\n\t}\n\t\n\tvar getPage = showLoading().then(() => {\n\t\tif (pageCache[route.path])\n\t\t\treturn pageCache[route.path].page;\n\n\t\treturn loadPage(route, data)\n\t});\n\n\t// handle initial page\n\tif (event.action == 'load')\n\t{\n\t\treturn getPage\n\t\t\t\t\t.then(page => doShow(page, data))\n\t\t\t\t\t.then(page => {\n\t\t\t\t\t\t// clean initial load\n\t\t\t\t\t\tif(stackPointer == -1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstack.push({ uid: 0, data, page });\n\t\t\t\t\t\t\tstackPointer = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// page refresh\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstack[stackPointer].page = page;\n\t\t\t\t\t\t\tstack[stackPointer].data = data;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn page;\n\t\t\t\t\t});\n\t}\n\n\tlet currentState = stack[stackPointer];\n\n\tif (currentState.data.route.path == route.path) {\n\t\thandleHistoryAction(event, url, data, currentState.page);\n\t\treturn getPage.then(page => doUpdate(page, data));\n\t}\n\n\tcurrentState.data.scrollY = window.scrollY;\n\n\treturn Promise.all([\n\t\t\tcurrentState.page.hide(event),\n\t\t\tgetPage\n\t\t])\n\t\t\t.then(results => results[1])\n\t\t\t.then(page => {\n\t\t\t\thandleHistoryAction(event, url, data, page);\n\t\t\t\treturn doShow(page, data);\n\t\t\t});\n\t\t\t// .catch(e => {\n\t\t\t// \t// TODO: what case is this?\n\t\t\t// \tmanuallyAdjustingHistory = () => manuallyAdjustingHistory = false;\n\t\t\t// \tif (event.action == 'back')\n\t\t\t// \t\thistory.go(1);\n\t\t\t// \telse if (event.action == 'fwd')\n\t\t\t// \t\thistory.go(-1);\n\t\t\t// });\n}\n\nfunction doShow(page, data) {\n\n\twindow.scroll(0, 0);\n\n\treturn Promise.resolve(page.show(data))\n\t\t\t.then(() => document.title = page.title)\n\t\t\t// todo: hide() should be passed an event object\n\t\t\t.then(() => pageCache[pageHash[options.loadingPageName].url].page.hide())\n\t\t\t// return page\n\t\t\t.then(() => page);\n}\n\n\nasync function doUpdate(page, data) {\n\n\tawait Promise.resolve(page.update(data));\n\n\tdocument.title = page.title\n\t// todo: hide() should be passed an event object\n\tawait pageCache[pageHash[options.loadingPageName].url].page.hide()\n\treturn page;\n}\n\nfunction handleHistoryAction(event, url, data, page) {\n\tif (event.action == 'push') {\n\t\tlet newUid = stack[stackPointer].uid + 1;\n\n\t\twindow.history.pushState({ uid: newUid }, null, url);\n\t\t\n\t\t// remove future\n\t\tstack.splice(stackPointer + 1, stack.length - stackPointer);\n\n\t\tstack.push({ uid: newUid, data, page });\n\t\tstackPointer++;\n\t}\n\telse if (event.action == 'replace') {\n\t\t// TODO: this case may be buggy\n\n\t\tlet currentUid = stack[stackPointer].uid;\n\t\twindow.history.replaceState({ uid: currentUid }, null, url);\n\t\t\n\t\tstack.pop();\n\t\tstack.push({ uid: currentUid, data, page });\n\t}\n\telse if(event.action == 'back')\n\t{\n\t\tstackPointer -= event.distance;\n\t}\n\telse if (event.action == 'fwd')\n\t{\n\t\tstackPointer += event.distance;\n\t}\t\n}\n\nfunction doNavigate(url, data) {\n\n\tif (url === 'goal') {\n\t\turl = goal ? goal.url : data?.fallback || getPath(options.defaultPageName);\n\t\tdata = goal?.data || {}\n\t\tgoal = null;\n\t}\n\n\treturn showPage(url, data, { action: 'push', distance: 0 });\n}\n\nfunction storageAvailable() {\n\treturn false;\n try {\n var x = '__storage_test__';\n window.sessionStorage.setItem(x, x);\n window.sessionStorage.removeItem(x);\n return true;\n }\n catch(e) {\n return false;\n }\n}\n\nexport async function init(opts) {\n\n\tObject.assign(options, opts);\n\n\tif(storageAvailable())\n\t{\n\t\tlet storedStack = window.sessionStorage.getItem(\"stack\");\n\t\tif(storedStack)\n\t\t{\n\t\t\tstoredStack = JSON.parse(storedStack);\n\t\t\tstack = storedStack.stack;\n\t\t\tstackPointer = storedStack.stackPointer;\n\t\t\twindow.sessionStorage.removeItem(\"stack\");\n\t\t}\n\t}\n\n\t// handle pages whose markup is already loaded in the page\n\tfor (var key in pageHash) {\n\t\tif (pageHash[key].pageClass.existingDomSelector) {\n\t\t\tlet $html = document.querySelector(pageHash[key].pageClass.existingDomSelector)\n\t\t\tif(!$html)\n\t\t\t{\n\t\t\t\tconsole.error(`Unable to find DOM element '${pageHash[key].pageClass.existingDomSelector}' for page '${key}'`)\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t\n\t\t\t// TODO: this is inefficient for non parameterised routes. There will always be HTML in memory and then copied for the page once loaded\n\t\t\tpageTemplateCache[router.routesByName[key]._pattern] = $html;\n\t\t\t$html.parentElement.removeChild($html);\t\n\t\t}\n\t}\n\n\tawait initLoading();\n\t\n\t// set initial page\n\tshowPage(window.location.pathname + window.location.search + window.location.hash, null, { action: 'load', distance: 0 }).catch(e => {\n\t\tconsole.error(e);\n\t\t\n\t\tif (e instanceof PageShowError)\n\t\t{\n\t\t\treturn showPage(e.url, e.data, { action: stackPointer == -1 ? 'load' : e.action || 'show' }).then(page => {\n\t\t\t\tif(e.action == 'replace')\n\t\t\t\t\thandleHistoryAction({ action: e.action }, e.url, e.data, page);\n\t\t\t\treturn page;\n\t\t\t});\n\t\t\t\n\t\t}\n\t});\n\n\tfunction handlePopstate(context, direction, distance) {\n\n\t\tif (manuallyAdjustingHistory) {\n\t\t\tmanuallyAdjustingHistory(context, { action: direction, distance });\n\t\t\treturn;\n\t\t}\n\n\t\tif (direction == 'back')\n\t\t\tObject.assign(context.data, backData);\n\t\tbackData = {};\n\n\t\tshowPage(context.data.route.url, context.data, { action: direction, distance }).catch(e => {\n\t\t\tconsole.error(e);\n\t\t\tif (e instanceof PageShowError)\n\t\t\t\treturn showPage(e.url, e.data, { action: e.action || 'show' });\n\t\t}).then(page => {\n\t\t\t// set page as it can be missing in the case of refreshes\n\t\t\tcontext.page = page;\n\t\t})\n\t}\n\n\tfunction handleBeforeHidePart1() {\n\t\t// if we're ignoring beforeHide this navigation\n\t\tif (handlingBeforeHide === 'ignore') {\n\t\t\thandlingBeforeHide = false;\n\t\t\treturn false;\n\t\t}\n\n\t\t// if we have a before-unload confirm to show\n\t\tif (stack[stackPointer].page.beforeHide && options.beforeHide && handlingBeforeHide === false) {\n\t\t\tvar interrupt = stack[stackPointer].page.beforeHide();\n\t\t\tif (interrupt) {\n\t\t\t\thandlingBeforeHide = 'step1';\n\n\t\t\t\t// do this in a new thread, you cant call history actions from inside a history-aciton-handler\n\t\t\t\twindow.setTimeout(() => {\n\t\t\t\t\t// undo the navigation so the URL remains correct whilst we show the confirm dialog\n\t\t\t\t\tif (lastNavigationDirection == 'fwd')\n\t\t\t\t\t\thistory.back();\n\t\t\t\t\telse if (lastNavigationDirection == 'back')\n\t\t\t\t\t\thistory.forward();\n\t\t\t\t}, 1);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// we've finished beforeHiding\n\t\tif (handlingBeforeHide === 'step2')\n\t\t\thandlingBeforeHide = false;\n\n\t\treturn false;\n\t}\n\n\tfunction handleBeforeHidePart2() {\n\t\tif (handlingBeforeHide !== 'step1')\n\t\t\treturn false;\n\n\t\t// do the beforeHide action, then...\n\t\toptions.beforeHide(stack[stackPointer].page.beforeHide()).then(result => {\n\n\t\t\t// if the user confirmed, redo the original action\n\t\t\tif (result) {\n\n\t\t\t\thandlingBeforeHide = 'step2';\n\n\t\t\t\tif (lastNavigationDirection == 'fwd')\n\t\t\t\t\thistory.forward();\n\t\t\t\telse if (lastNavigationDirection == 'back')\n\t\t\t\t\thistory.back();\n\t\t\t} else {\n\t\t\t\thandlingBeforeHide = false;\n\t\t\t}\n\t\t});\n\n\t\treturn true;\n\t}\n\n\t// listen for browser navigations\n\twindow.addEventListener(\"popstate\", e => {\n\t\tvar interrupted = handleBeforeHidePart2();\n\t\tif (interrupted)\n\t\t\treturn;\n\n\t\tlet newUid = e.state?.uid || 0;\n\t\tlet previousUid = stack[stackPointer].uid;\n\n\t\tlastNavigationDirection = newUid > previousUid ? 'fwd' : 'back';\n\t\tlet distance = Math.abs(newUid - previousUid);\n\n\t\tvar interrupted = handleBeforeHidePart1();\n\t\tif (interrupted)\n\t\t\treturn;\n\n\t\tvar context = findContext(newUid);\n\t\thandlePopstate(context, lastNavigationDirection, distance);\n\t});\n\n\tif(storageAvailable())\n\t{\n\t\twindow.addEventListener(\"beforeHide\", () => {\n\n\t\t\tlet stackToSerialize = stack.map(s => ({\n\t\t\t\tuid: s.uid,\n\t\t\t\tdata: s.data\n\t\t\t}));\n\t\t\tlet stackToStore = {\n\t\t\t\tstack: stackToSerialize,\n\t\t\t\tstackPointer\n\t\t\t}\n\t\t\twindow.sessionStorage.setItem('stack', JSON.stringify(stackToStore));\n\t\t});\n\t}\n}\n\nfunction findContext(uid){\n\tfor (var i = 0; i < stack.length; i++) {\n\t\tif (stack[i].uid == uid)\n\t\t\treturn stack[i];\n\t}\n\treturn null;\n}\n\nfunction expandOnlyHash(url)\n{\n\tif(url.startsWith('#'))\n\t{\n\t\tlet currentState = stack[stackPointer];\n\t\tlet currentUrl = currentState.data.route.url;\n\t\tlet hashIndex = currentUrl.indexOf('#');\n\t\tif(hashIndex > -1)\n\t\t\treturn currentUrl.substr(0, hashIndex);\n\t\treturn currentUrl + url;\n\t}\n\n\treturn url;\n}\n\nexport function navigate(url, data, checkBeforeHide = true) {\n\n\turl = expandOnlyHash(url);\n\n\tif (checkBeforeHide === true && stack[stackPointer].page.beforeHide && options.beforeHide) {\n\n\t\tvar interrupt = stack[stackPointer].page.beforeHide();\n\t\tif (interrupt !== false) {\n\t\t\toptions.beforeHide(interrupt).then(result => {\n\t\t\t\tif (result)\n\t\t\t\t\tdoNavigate(url, data);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t}\n\n\tdoNavigate(url, data).catch(e => {\n\t\tconsole.error(e);\n\t\tif (e instanceof PageShowError)\n\t\t\treturn showPage(e.url, e.data, { action: e.action || 'show' });\n\t});\n}\n\nexport function replace(url, data) {\n\turl = expandOnlyHash(url);\n\treturn showPage(url, data, { action: 'replace', distance: 0 });\n}\n\nexport function show(url, data) {\n\treturn showPage(url, data, { action: 'show', distance: 0 });\n}\n\nexport function back(data, checkBeforeHide) {\n\tbackData = data || {};\n\thandlingBeforeHide = checkBeforeHide === false ? 'ignore' : false;\n\thistory.go(-1);\n}\n\nexport function printStack() {\n\tconsole.log(\"Stack length: \" + stack.length);\n\tconsole.log(\"Stack pointer: \" + stackPointer);\n\tfor(var i = 0; i < stack.length; i++)\n\t\tconsole.log(stack[i]);\n}\n\nexport function removeHistory(predicate)\n{\n\tlet statesToKeep = [];\n\tfor (var i = 0; i < stack.length; i++)\n\t{\n\t\tif (!predicate(stack[i], i))\n\t\t\tstatesToKeep.push(stack[i]);\n\t}\n\n\t// TODO: ensure we always have at least 1 state to keep - must/can this always be the current page?\n\n\tif (statesToKeep.length == stack.length)\n\t\treturn Promise.resolve();\n\n\n\treturn new Promise((resolve, reject) => {\n\n\n\t\tlet backsToDo = stackPointer - 1;\n\t\tlet currentUid = -1;\n\n\t\t// TODO: handle stack pointer not being at the tail when this process starts\n\n\t\tmanuallyAdjustingHistory = _ => {\n\t\t\t// rewind to the first history position\n\t\t\tif(backsToDo > 0)\n\t\t\t{\n\t\t\t\twindow.setTimeout(() => {\n\t\t\t\t\tbacksToDo--;\n\t\t\t\t\thistory.back();\n\t\t\t\t}, 1);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// reset the stack\n\t\t\tstack = [];\n\n\t\t\tfor (var k = 0; k < statesToKeep.length; k++) {\n\t\t\t\tlet currentState = statesToKeep[k];\n\t\t\t\tcurrentState.uid = ++currentUid;\n\n\t\t\t\tif (k == 0)\n\t\t\t\t\twindow.history.replaceState({ uid: currentState.uid }, null, currentState.data.route.url);\n\t\t\t\telse\n\t\t\t\t\twindow.history.pushState({ uid: currentState.uid }, null, currentState.data.route.url);\n\t\t\t\t\n\t\t\t\t\t// TODO: this doesnt seem to work when k=0\n\t\t\t\tdocument.title = currentState.page.title;\n\n\t\t\t\tstack.push(currentState);\n\t\t\t}\n\n\t\t\tstackPointer = stack.length - 1;\n\n\t\t\tmanuallyAdjustingHistory = false;\n\t\t};\n\n\t\thistory.back();\n\t});\n}\n\nexport function purgeCache() {\n\tfor (const path in pageCache)\n\t{\n\t\tpageCache[path].page.destroy && pageCache[path].page.destroy();\n\t\tif (!pageCache[path].page.constructor.existingDomSelector)\n\t\t{\n\t\t\tpageCache[path].$html.remove();\n\t\t\tdelete pageCache[path];\n\t\t}\n\t}\n}\n\nexport class PageShowError extends Error {\n\tconstructor(url, message, data, action) {\n\t\tsuper(message || 'Error showing requested page')\n\n\t\t// Maintains proper stack trace for where our error was thrown (only available on V8)\n\t\tif (Error.captureStackTrace)\n\t\t\tError.captureStackTrace(this, PageShowError)\n\n\t\tthis.name = 'PageShowError'\n\t\tthis.url = url;\n\t\tthis.data = data;\n\t\tthis.action = action;\n\t}\n}","import Page from './page.js';\r\nimport {registerPage} from '@trullock/page-manager';\r\n\r\nexport default registerPage('loading', '/loading', class extends Page {\r\n\r\n\tstatic existingDomSelector = '#page-loading';\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\t}\r\n});","import './page1.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, refresh} from '@trullock/page-manager';\r\n\r\nexport default registerPage('page1', '/page1', class extends Page {\r\n\r\n\ttitle = \"Page 1\";\r\n\r\n\ttype = 'A';\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\r\n\t\t$page.querySelector('button').addEventListener('click', e => {\r\n\t\t\trefresh();\r\n\t\t})\r\n\t}\r\n\r\n\tupdate(data) {\r\n\t\tthis.$page.querySelector('.js-time').textContent = new Date().getTime();\r\n\t}\r\n});","import './page2.htm'\r\nimport Page from './page.js';\r\nimport {registerPage} from '@trullock/page-manager';\r\n\r\nexport default registerPage('page2', '/page2', class extends Page {\r\n\r\n\ttitle = \"Page 2\";\r\n\r\n\ttype = 'A';\r\n\t\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\t}\r\n});","import './page3.htm'\r\nimport Page from './page.js';\r\nimport * as pageManager from '@trullock/page-manager';\r\n\r\nexport default pageManager.registerPage('page3', '/page3', class extends Page {\r\n\r\n\ttitle = \"Page 3\";\r\n\t\r\n\tbeforeHide = () => 'Are you sure?'\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\r\n\t\t$page.querySelector('.btnRemove').addEventListener('click', e => {\r\n\t\t\tpageManager.removeHistory(state => {\r\n\t\t\t\treturn state.page.type == 'A';\r\n\t\t\t})\r\n\t\t})\r\n\t}\r\n});","import './page4.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\n\r\nexport default registerPage('page4', '/page4', class extends Page {\r\n\r\n\ttitle = \"Page 4\";\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\t}\r\n\r\n\tshow(opts)\r\n\t{\r\n\t\tthrow new PageShowError('/page1', 'Cant show page4, showing page1 instead', {}, 'replace')\r\n\t}\r\n});","import './page404.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\n\r\nexport default registerPage('page404', '/404', class extends Page {\r\n\r\n\ttitle = \"Page 404\";\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\t}\r\n});","export default class Page {\r\n\r\n\tdirty = false;\r\n\r\n\tconstructor($page){\r\n\t\tthis.$page = $page;\r\n\t}\r\n\r\n\tget title() {\r\n\t\treturn this.$page.dataset['title'] || 'PageManager'\r\n\t}\r\n\r\n\tboot(opts){\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\r\n\tshow(opts) {\r\n\t\tthis.$page.style.display = 'block';\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\r\n\tupdate() {\r\n\t\treturn Promise.resolve();\r\n\t }\r\n\r\n\thide() {\r\n\t\tthis.$page.style.display = 'none';\r\n\t\treturn Promise.resolve();\r\n\t}\r\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","import * as pageManager from '../src/index.js'\r\n\r\nimport pageLoading from './page-loading.js'\r\nimport page1 from './page-page1.js'\r\nimport page2 from './page-page2.js'\r\nimport page3 from './page-page3.js'\r\nimport page4 from './page-page4.js'\r\nimport page404 from './page-page404.js'\r\n\r\nwindow.addEventListener('DOMContentLoaded', function () {\r\n\tpageManager.init({\r\n\t\tpageContainer: () => document.body,\r\n\t\tfetchPath: route => '/pages/' + route.routeName + '.htm',\r\n\t\terror404PageName: 'page404',\r\n\t\tbeforeHide: message => new Promise(resolve => {\r\n\t\t\tresolve(confirm(message))\r\n\t\t})\r\n\t});\r\n\r\n\r\n\t// listen for navigations\r\n\tdocument.addEventListener('click', e => {\r\n\t\tif (e.ctrlKey || e.metaKey)\r\n\t\t\treturn;\r\n\r\n\t\tvar $a = e.target.matches('a') ? e.target : e.target.closest('a');\r\n\t\tif (!$a)\r\n\t\t\treturn;\r\n\r\n\t\tvar href = $a.pathname + $a.search + $a.hash;\r\n\t\tpageManager.navigate(href)\r\n\r\n\t\te.preventDefault();\r\n\t}, false);\r\n\r\n\tdocument.querySelector('.btnStack').addEventListener('click', e => {\r\n\t\tpageManager.printStack();\r\n\t})\r\n});"],"names":["router","pageHash","pageCache","pageTemplateCache","stack","stackPointer","manuallyAdjustingHistory","handlingBeforeHide","lastNavigationDirection","goal","backData","options","fetchPath","route","routeName","fetchPageTemplate","fetch","then","r","text","html","$div","document","createElement","innerHTML","firstElementChild","$template","pattern","pageInterrupt","attachMarkup","$html","body","appendChild","prepareMarkup","loadingPageName","error404PageName","defaultPageName","beforeHide","pages","registerPage","argA","argB","argC","namedRoutes","pageClass","undefined","name","Object","entries","addRoute","url","getPath","values","interpolate","hash","refresh","frame","showPage","data","initLoading","page","parse","loadPage","showLoading","scrollY","window","event","action","Promise","resolve","show","fetchPage","cloneNode","path","booted","boot","console","error","page404","reject","PageShowError","key","params","interrupt","getPage","doShow","push","uid","currentState","handleHistoryAction","doUpdate","all","hide","results","scroll","title","update","newUid","history","pushState","splice","length","currentUid","replaceState","pop","distance","doNavigate","fallback","storageAvailable","x","sessionStorage","setItem","removeItem","e","init","opts","assign","storedStack","getItem","JSON","existingDomSelector","querySelector","routesByName","_pattern","parentElement","removeChild","location","pathname","search","catch","handlePopstate","context","direction","handleBeforeHidePart1","setTimeout","back","forward","handleBeforeHidePart2","result","addEventListener","interrupted","state","previousUid","Math","abs","findContext","stackToSerialize","map","s","stackToStore","stringify","i","expandOnlyHash","startsWith","currentUrl","hashIndex","indexOf","substr","navigate","checkBeforeHide","replace","go","printStack","log","removeHistory","predicate","statesToKeep","backsToDo","_","k","purgeCache","destroy","constructor","remove","Error","message","captureStackTrace","Page","_class","$page","_defineProperty","textContent","Date","getTime","pageManager","type","dataset","style","display","pageLoading","page1","page2","page3","page4","pageContainer","confirm","ctrlKey","metaKey","$a","target","matches","closest","href","preventDefault"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"main.js","mappings":";;;;;;;;;;;;;;AAAA,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,gBAAgB;;;;;;;;;;;;;;;ACAT;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,eAAe,cAAc,6BAA6B;AAC1G;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe;AACf;AACA;AACA;AACA,sBAAsB,6DAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,sCAAsC,oBAAoB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,KAAK;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE;;;;;;;;;;;;;;AC3NH,6BAAe,sCAAY;AAC3B;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC,wBAAwB,OAAO,SAAS;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB,SAAS,UAAU;AACnE,cAAc,sBAAsB;AACpC,eAAe,IAAI;AACnB;AACA,IAAI;AACJ;AACA;AACA,sCAAsC,SAAS;AAC/C,cAAc,QAAQ;AACtB,eAAe,IAAI;AACnB;AACA,IAAI;AACJ;AACA,sDAAsD,GAAG;AACzD,YAAY,MAAM,KAAK;AACvB;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,4CAA4C,EAAE;AAC9C,YAAY,IAAI,OAAO;AACvB;AACA,IAAI;AACJ;AACA;AACA,+CAA+C;AAC/C,YAAY,IAAI,KAAK;AACrB;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,IAAI;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3OsC;AAEtC,IAAIC,QAAQ,GAAG,CAAC,CAAC;EAChBC,SAAS,GAAG,CAAC,CAAC;EACdC,iBAAiB,GAAG,CAAC,CAAC;EACtBC,KAAK,GAAG,EAAE;EACVC,YAAY,GAAG,CAAC,CAAC;AAElB,IAAIC,wBAAwB,GAAG,KAAK;AACpC,IAAIC,kBAAkB,GAAG,KAAK;AAC9B,IAAIC,uBAAuB,GAAG,IAAI;AAElC,IAAIC,IAAI,GAAG,IAAI;AACf,IAAIC,QAAQ,GAAG,CAAC,CAAC;AACjB,IAAIC,OAAO,GAAG;EACbC,SAAS,EAAEC,KAAK,IAAI,SAAS,GAAGA,KAAK,CAACC,SAAS,GAAG,OAAO;EACzDC,iBAAiB,EAAEF,KAAK,IAAI;IAC3B,OAAOG,KAAK,CAACL,OAAO,CAACC,SAAS,CAACC,KAAK,CAAC,CAAC,CACpCI,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,IAAI,EAAE,CAAC,CACnBF,IAAI,CAACG,IAAI,IAAI;MACb,IAAIC,IAAI,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;MACxCF,IAAI,CAA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","sources":["webpack://@trullock/page-manager/./tests/page1.htm","webpack://@trullock/page-manager/./tests/page2.htm","webpack://@trullock/page-manager/./tests/page3.htm","webpack://@trullock/page-manager/./tests/page4.htm","webpack://@trullock/page-manager/./tests/page404.htm","webpack://@trullock/page-manager/./node_modules/@trullock/router/src/index.js","webpack://@trullock/page-manager/./node_modules/@trullock/router/src/pattern-lexer.js","webpack://@trullock/page-manager/./src/index.js","webpack://@trullock/page-manager/./tests/page-loading.js","webpack://@trullock/page-manager/./tests/page-page1.js","webpack://@trullock/page-manager/./tests/page-page2.js","webpack://@trullock/page-manager/./tests/page-page3.js","webpack://@trullock/page-manager/./tests/page-page4.js","webpack://@trullock/page-manager/./tests/page-page404.js","webpack://@trullock/page-manager/./tests/page-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__ + \"page1.htm\";","export default __webpack_public_path__ + \"page2.htm\";","export default __webpack_public_path__ + \"page3.htm\";","export default __webpack_public_path__ + \"page4.htm\";","export default __webpack_public_path__ + \"page404.htm\";","import PatternLexer from './pattern-lexer.js'\r\n\r\nfunction isKind(val, kind) {\r\n\treturn '[object ' + kind + ']' === Object.prototype.toString.call(val);\r\n}\r\nfunction isRegExp(val) {\r\n\treturn isKind(val, 'RegExp');\r\n}\r\n\r\nfunction decodeQueryString(queryStr, shouldTypecast) {\r\n\tvar queryArr = (queryStr || '').replace('?', '').split('&'),\r\n\t\treg = /([^=]+)=(.+)/,\r\n\t\ti = -1,\r\n\t\tobj = {},\r\n\t\tequalIndex, cur, pValue, pName;\r\n\r\n\twhile ((cur = queryArr[++i])) {\r\n\t\tequalIndex = cur.indexOf('=');\r\n\t\tpName = cur.substring(0, equalIndex);\r\n\t\tpValue = decodeURIComponent(cur.substring(equalIndex + 1));\r\n\r\n\t\tif (pName in obj){\r\n\t\t\tif(isArray(obj[pName])){\r\n\t\t\t\tobj[pName].push(pValue);\r\n\t\t\t} else {\r\n\t\t\t\tobj[pName] = [obj[pName], pValue];\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tobj[pName] = pValue;\r\n\t }\r\n\t}\r\n\treturn obj;\r\n}\r\n\r\nfunction Route(name, pattern, pageClass, priority, router) {\r\n\tvar isRegexPattern = isRegExp(pattern);\r\n\tthis._name = name;\r\n\tthis._router = router;\r\n\tthis._pattern = pattern;\r\n\tthis._paramsIds = isRegexPattern ? null : router.patternLexer.getParamIds(pattern);\r\n\tthis._optionalParamsIds = isRegexPattern ? null : router.patternLexer.getOptionalParamsIds(pattern);\r\n\tthis._matchRegexp = isRegexPattern ? pattern : router.patternLexer.compilePattern(pattern, router.ignoreCase);\r\n\tthis._pageClass = pageClass;\r\n\tthis._priority = priority || 0;\r\n}\r\n\r\nRoute.prototype = {\r\n\r\n\tmatch: function (request) {\r\n\t\treturn this._matchRegexp.test(request);\r\n\t},\r\n\r\n\t_isValidParam: function (request, prop, values) {\r\n\t\tvar validationRule = this.rules[prop],\r\n\t\t\tval = values[prop],\r\n\t\t\tisValid = false,\r\n\t\t\tisQuery = (prop.indexOf('?') === 0);\r\n\r\n\t\tif (val == null && this._optionalParamsIds && arrayIndexOf(this._optionalParamsIds, prop) !== -1) {\r\n\t\t\tisValid = true;\r\n\t\t}\r\n\t\telse if (isRegExp(validationRule)) {\r\n\t\t\tif (isQuery)\r\n\t\t\t\tval = values[prop + '_']; //use raw string\r\n\r\n\t\t\tisValid = validationRule.test(val);\r\n\t\t}\r\n\t\telse if (isArray(validationRule)) {\r\n\t\t\tif (isQuery)\r\n\t\t\t\tval = values[prop + '_']; //use raw string\r\n\r\n\t\t\tisValid = this._isValidArrayRule(validationRule, val);\r\n\t\t}\r\n\t\telse if (isFunction(validationRule)) {\r\n\t\t\tisValid = validationRule(val, request, values);\r\n\t\t}\r\n\r\n\t\treturn isValid; //fail silently if validationRule is from an unsupported type\r\n\t},\r\n\r\n\t_isValidArrayRule: function (arr, val) {\r\n\t\tif (!this._router.ignoreCase) {\r\n\t\t\treturn arrayIndexOf(arr, val) !== -1;\r\n\t\t}\r\n\r\n\t\tif (typeof val === 'string') {\r\n\t\t\tval = val.toLowerCase();\r\n\t\t}\r\n\r\n\t\tvar n = arr.length,\r\n\t\t\titem,\r\n\t\t\tcompareVal;\r\n\r\n\t\twhile (n--) {\r\n\t\t\titem = arr[n];\r\n\t\t\tcompareVal = (typeof item === 'string') ? item.toLowerCase() : item;\r\n\t\t\tif (compareVal === val) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t_getParamsObject: function (request) {\r\n\t\tvar shouldTypecast = this._router.shouldTypecast,\r\n\t\t\tvalues = this._router.patternLexer.getParamValues(request, this._matchRegexp, shouldTypecast),\r\n\t\t\to = {},\r\n\t\t\tn = values.length,\r\n\t\t\tparam, val;\r\n\t\twhile (n--) {\r\n\t\t\tval = values[n];\r\n\t\t\tif (this._paramsIds) {\r\n\t\t\t\tparam = this._paramsIds[n];\r\n\t\t\t\tif (param.indexOf('?') === 0 && val) {\r\n\t\t\t\t\tval = decodeQueryString(val, shouldTypecast);\r\n\t\t\t\t\t\r\n\t\t\t\t\tfor(var key in val){\r\n\t\t\t\t\t\tif(!o[key])\r\n\t\t\t\t\t\t\to[key] = val[key];\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\to['?' + key] = val[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t\to[n] = val;\r\n\t\t\t\t} \r\n\t\t\t\telse \r\n\t\t\t\t\to[param] = val;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn o;\r\n\t},\r\n\r\n\tinterpolate: function (replacements) {\r\n\t\ttry {\r\n\t\t\tvar str = this._router.patternLexer.interpolate(this._pattern, replacements);\r\n\t\t\treturn str;\r\n\t\t}\r\n\t\tcatch(e) {\r\n\t\t\tthrow new Error(`Error interpolating route ${this._pattern} with values ${JSON.stringify(replacements)}\\n` + e);\r\n\t\t}\r\n\t},\r\n\r\n\ttoString: function () {\r\n\t\treturn '[Route pattern:\"' + this._pattern + '\", numListeners:' + this.matched.getNumListeners() + ']';\r\n\t}\r\n\r\n};\r\n\r\n\r\nexport default new class {\r\n\tconstructor() {\r\n\t\tthis.routes = [];\r\n\t\tthis.routesByName = {};\r\n\t\tthis.patternLexer = PatternLexer();\r\n\t}\r\n\r\n\taddRoute (name, pattern, pageClass, priority) {\r\n\t\tpattern += pattern.endsWith('/') ? ':?query:' : '/:?query:';\r\n\t\tvar route = new Route(name, pattern, pageClass, priority, this);\r\n\r\n\t\tvar n = this.routes.length;\r\n\t\tdo\r\n\t\t{ \r\n\t\t\t--n; \r\n\t\t} while (this.routes[n] && route._priority <= this.routes[n]._priority);\r\n\t\tthis.routes.splice(n + 1, 0, route);\r\n\r\n\t\tthis.routesByName[name] = route;\r\n\t\tObject.defineProperty(this, name, { get: () => pattern });\r\n\r\n\t\treturn route;\r\n\t}\r\n\r\n\tinterpolate(name, data){\r\n\t\tif(!this.routesByName[name])\r\n\t\t\tthrow new Error(`Cannot find route by name ${name}`);\r\n\t\t\t\r\n\t\treturn this.routesByName[name].interpolate(data);\r\n\t}\r\n\r\n\tparse (request) {\r\n\t\tvar n = this.routes.length;\r\n\t\tvar route, hash, path;\r\n\r\n\t\tvar index = request.indexOf('#');\r\n\t\tif(index > -1)\r\n\t\t{\r\n\t\t\thash = request.substr(index + 1);\r\n\t\t\trequest = request.substr(0, index);\r\n\t\t}\r\n\r\n\t\tindex = request.indexOf('?');\r\n\t\tif(index > -1)\r\n\t\t\tpath = request.substr(0, index)\r\n\t\telse\r\n\t\t\tpath = request;\t\r\n\t\t\r\n\r\n\t\twhile (route = this.routes[--n]) {\r\n\t\t\tif (route.match(request)) {\r\n\t\t\t\tvar params = route._getParamsObject(request);\r\n\t\t\t\tparams.hash = hash;\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\tpath: path.toLowerCase(),\r\n\t\t\t\t\trouteName: route._name,\r\n\t\t\t\t\tpattern: route._pattern,\r\n\t\t\t\t\tpageClass: route._pageClass,\r\n\t\t\t\t\tparams: params\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\ttoString () {\r\n\t\treturn '[Router numRoutes:' + this.getNumRoutes() + ']';\r\n\t}\r\n}();","export default function () {\r\n\r\n\tvar\r\n\t\t//match chars that should be escaped on string regexp\r\n\t\tESCAPE_CHARS_REGEXP = /[\\\\.+*?\\^$\\[\\](){}\\/'#]/g,\r\n\r\n\t\t//trailing slashes (begin/end of string)\r\n\t\tLOOSE_SLASHES_REGEXP = /^\\/|\\/$/g,\r\n\t\tLEGACY_SLASHES_REGEXP = /\\/$/g,\r\n\r\n\t\t//params - everything between `{ }` or `: :`\r\n\t\tPARAMS_REGEXP = /(?:\\{|:)([^}:]+)(?:\\}|:)/g,\r\n\r\n\t\t//used to save params during compile (avoid escaping things that\r\n\t\t//shouldn't be escaped).\r\n\t\tTOKENS = {\r\n\t\t\t'OS': {\r\n\t\t\t\t//optional slashes\r\n\t\t\t\t//slash between `::` or `}:` or `\\w:` or `:{?` or `}{?` or `\\w{?`\r\n\t\t\t\trgx: /([:}]|\\w(?=\\/))\\/?(:|(?:\\{\\?))/g,\r\n\t\t\t\tsave: '$1{{id}}$2',\r\n\t\t\t\tres: '\\\\/?'\r\n\t\t\t},\r\n\t\t\t'RS': {\r\n\t\t\t\t//required slashes\r\n\t\t\t\t//used to insert slash between `:{` and `}{`\r\n\t\t\t\trgx: /([:}])\\/?(\\{)/g,\r\n\t\t\t\tsave: '$1{{id}}$2',\r\n\t\t\t\tres: '\\\\/'\r\n\t\t\t},\r\n\t\t\t'RQ': {\r\n\t\t\t\t//required query string - everything in between `{? }`\r\n\t\t\t\trgx: /\\{\\?([^}]+)\\}/g,\r\n\t\t\t\t//everything from `?` till `#` or end of string\r\n\t\t\t\tres: '\\\\?([^#]+)'\r\n\t\t\t},\r\n\t\t\t'OQ': {\r\n\t\t\t\t//optional query string - everything in between `:? :`\r\n\t\t\t\trgx: /:\\?([^:]+):/g,\r\n\t\t\t\t//everything from `?` till `#` or end of string\r\n\t\t\t\tres: '(?:\\\\?([^#]*))?'\r\n\t\t\t},\r\n\t\t\t'OR': {\r\n\t\t\t\t//optional rest - everything in between `: *:`\r\n\t\t\t\trgx: /:([^:]+)\\*:/g,\r\n\t\t\t\tres: '(.*)?' // optional group to avoid passing empty string as captured\r\n\t\t\t},\r\n\t\t\t'RR': {\r\n\t\t\t\t//rest param - everything in between `{ *}`\r\n\t\t\t\trgx: /\\{([^}]+)\\*\\}/g,\r\n\t\t\t\tres: '(.+)'\r\n\t\t\t},\r\n\t\t\t// required/optional params should come after rest segments\r\n\t\t\t'RP': {\r\n\t\t\t\t//required params - everything between `{ }`\r\n\t\t\t\trgx: /\\{([^}]+)\\}/g,\r\n\t\t\t\tres: '([^\\\\/?]+)'\r\n\t\t\t},\r\n\t\t\t'OP': {\r\n\t\t\t\t//optional params - everything between `: :`\r\n\t\t\t\trgx: /:([^:]+):/g,\r\n\t\t\t\tres: '([^\\\\/?]+)?\\/?'\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tLOOSE_SLASH = 1,\r\n\t\tSTRICT_SLASH = 2,\r\n\t\tLEGACY_SLASH = 3,\r\n\r\n\t\t_slashMode = LOOSE_SLASH;\r\n\r\n\r\n\tfunction precompileTokens() {\r\n\t\tvar key, cur;\r\n\t\tfor (key in TOKENS) {\r\n\t\t\tif (TOKENS.hasOwnProperty(key)) {\r\n\t\t\t\tcur = TOKENS[key];\r\n\t\t\t\tcur.id = '__CR_' + key + '__';\r\n\t\t\t\tcur.save = ('save' in cur) ? cur.save.replace('{{id}}', cur.id) : cur.id;\r\n\t\t\t\tcur.rRestore = new RegExp(cur.id, 'g');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tprecompileTokens();\r\n\r\n\r\n\tfunction captureVals(regex, pattern) {\r\n\t\tvar vals = [], match;\r\n\t\t// very important to reset lastIndex since RegExp can have \"g\" flag\r\n\t\t// and multiple runs might affect the result, specially if matching\r\n\t\t// same string multiple times on IE 7-8\r\n\t\tregex.lastIndex = 0;\r\n\t\twhile (match = regex.exec(pattern)) {\r\n\t\t\tvals.push(match[1]);\r\n\t\t}\r\n\t\treturn vals;\r\n\t}\r\n\r\n\tfunction getParamIds(pattern) {\r\n\t\treturn captureVals(PARAMS_REGEXP, pattern);\r\n\t}\r\n\r\n\tfunction getOptionalParamsIds(pattern) {\r\n\t\treturn captureVals(TOKENS.OP.rgx, pattern);\r\n\t}\r\n\r\n\tfunction compilePattern(pattern, ignoreCase) {\r\n\t\tpattern = pattern || '';\r\n\r\n\t\tif (pattern) {\r\n\t\t\tif (_slashMode === LOOSE_SLASH) {\r\n\t\t\t\tpattern = pattern.replace(LOOSE_SLASHES_REGEXP, '');\r\n\t\t\t}\r\n\t\t\telse if (_slashMode === LEGACY_SLASH) {\r\n\t\t\t\tpattern = pattern.replace(LEGACY_SLASHES_REGEXP, '');\r\n\t\t\t}\r\n\r\n\t\t\t//save tokens\r\n\t\t\tpattern = replaceTokens(pattern, 'rgx', 'save');\r\n\t\t\t//regexp escape\r\n\t\t\tpattern = pattern.replace(ESCAPE_CHARS_REGEXP, '\\\\$&');\r\n\t\t\t//restore tokens\r\n\t\t\tpattern = replaceTokens(pattern, 'rRestore', 'res');\r\n\r\n\t\t\tif (_slashMode === LOOSE_SLASH) {\r\n\t\t\t\tpattern = '\\\\/?' + pattern;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (_slashMode !== STRICT_SLASH) {\r\n\t\t\t//single slash is treated as empty and end slash is optional\r\n\t\t\tpattern += '\\\\/?';\r\n\t\t}\r\n\t\treturn new RegExp('^' + pattern + '$', ignoreCase ? 'i' : '');\r\n\t}\r\n\r\n\tfunction replaceTokens(pattern, regexpName, replaceName) {\r\n\t\tvar cur, key;\r\n\t\tfor (key in TOKENS) {\r\n\t\t\tif (TOKENS.hasOwnProperty(key)) {\r\n\t\t\t\tcur = TOKENS[key];\r\n\t\t\t\tpattern = pattern.replace(cur[regexpName], cur[replaceName]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn pattern;\r\n\t}\r\n\r\n\tfunction getParamValues(request, regexp, shouldTypecast) {\r\n\t\tvar vals = regexp.exec(request);\r\n\t\tif (vals) {\r\n\t\t\tvals.shift();\r\n\t\t\tif (shouldTypecast) {\r\n\t\t\t\tvals = typecastArrayValues(vals);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn vals;\r\n\t}\r\n\r\n\tfunction interpolate(pattern, replacements) {\r\n\t\t// default to an empty object because pattern might have just\r\n\t\t// optional arguments\r\n\t\treplacements = replacements || {};\r\n\t\tif (typeof pattern !== 'string') {\r\n\t\t\tthrow new Error('Route pattern should be a string.');\r\n\t\t}\r\n\t\t\r\n\t\tvar replaceFn = function (match, prop) {\r\n\t\t\tvar val;\r\n\t\t\tprop = (prop.substr(0, 1) === '?') ? prop.substr(1) : prop;\r\n\t\t\tif (replacements[prop] != null) {\r\n\t\t\t\tif (typeof replacements[prop] === 'object') {\r\n\t\t\t\t\tvar queryParts = [], rep;\r\n\t\t\t\t\tfor (var key in replacements[prop]) {\r\n\t\t\t\t\t\trep = replacements[prop][key];\r\n\t\t\t\t\t\tif (isArray(rep)) {\r\n\t\t\t\t\t\t\tfor (var k in rep) {\r\n\t\t\t\t\t\t\t\tif (key.slice(-2) == '[]') {\r\n\t\t\t\t\t\t\t\t\tqueryParts.push(encodeURIComponent(key.slice(0, -2)) + '[]=' + encodeURIComponent(rep[k]));\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tqueryParts.push(encodeURIComponent(key + '=' + rep[k]));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tqueryParts.push(encodeURIComponent(key + '=' + rep));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tval = '?' + queryParts.join('&');\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// make sure value is a string see #gh-54\r\n\t\t\t\t\tval = String(replacements[prop]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (match.indexOf('*') === -1 && val.indexOf('/') !== -1) {\r\n\t\t\t\t\tthrow new Error('Invalid value \"' + val + '\" for segment \"' + match + '\".');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (match.indexOf('{') !== -1) {\r\n\t\t\t\tthrow new Error('The segment ' + match + ' is required.');\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tval = '';\r\n\t\t\t}\r\n\t\t\treturn val;\r\n\t\t};\r\n\r\n\t\tif (!TOKENS.OS.trail) {\r\n\t\t\tTOKENS.OS.trail = new RegExp('(?:' + TOKENS.OS.id + ')+$');\r\n\t\t}\r\n\r\n\t\treturn pattern\r\n\t\t\t.replace(TOKENS.OS.rgx, TOKENS.OS.save)\r\n\t\t\t.replace(PARAMS_REGEXP, replaceFn)\r\n\t\t\t.replace(TOKENS.OS.trail, '') // remove trailing\r\n\t\t\t.replace(TOKENS.OS.rRestore, '/'); // add slash between segments\r\n\t}\r\n\r\n\t//API\r\n\treturn {\r\n\t\tstrict: function () {\r\n\t\t\t_slashMode = STRICT_SLASH;\r\n\t\t},\r\n\t\tloose: function () {\r\n\t\t\t_slashMode = LOOSE_SLASH;\r\n\t\t},\r\n\t\tlegacy: function () {\r\n\t\t\t_slashMode = LEGACY_SLASH;\r\n\t\t},\r\n\t\tgetParamIds: getParamIds,\r\n\t\tgetOptionalParamsIds: getOptionalParamsIds,\r\n\t\tgetParamValues: getParamValues,\r\n\t\tcompilePattern: compilePattern,\r\n\t\tinterpolate: interpolate\r\n\t};\r\n\r\n}","import router from '@trullock/router';\n\nvar pageHash = {},\n\tpageCache = {},\n\tpageTemplateCache = {},\n\tstack = [],\n\tstackPointer = -1;\n\nvar manuallyAdjustingHistory = false;\nvar handlingBeforeHide = false;\nvar lastNavigationDirection = null;\n\nvar goal = null;\nvar backData = {};\nvar options = {\n\tfetchPath: route => '/pages/' + route.routeName + '.html',\n\tfetchPageTemplate: route => {\n\t\treturn fetch(options.fetchPath(route))\n\t\t\t.then(r => r.text())\n\t\t\t.then(html => {\n\t\t\t\tvar $div = document.createElement('div');\n\t\t\t\t$div.innerHTML = html;\n\t\t\t\t// Pages are assumed to have a single wrapping element\n\t\t\t\treturn $div.firstElementChild;\n\t\t\t})\n\t\t\t.then($template => {\n\t\t\t\tpageTemplateCache[route.pattern] = $template;\n\t\t\t\treturn $template;\n\t\t\t});\n\t},\n\tpageInterrupt: route => null,\n\tattachMarkup: $html => document.body.appendChild($html),\n\tprepareMarkup: $html => { },\n\tloadingPageName: 'loading',\n\terror404PageName: 'error-404',\n\tdefaultPageName: 'root',\n\tbeforeHide: null\n}\n\nexport const pages = pageHash;\n\nexport function registerPage(argA, argB, argC) {\n\n\tlet namedRoutes = null, \n\t\tpageClass = null;\n\n\tif(argC == undefined)\n\t{\n\t\tnamedRoutes = argA;\n\t\tpageClass = argB;\n\t} else {\n\t\tnamedRoutes = {\n\t\t\t[argA]: argB\n\t\t};\n\t\tpageClass = argC;\n\t}\n\t\n\n\tfor (const [name, route] of Object.entries(namedRoutes)) {\n\t\trouter.addRoute(name, route, pageClass);\n\n\t\tpageHash[name] = {\n\t\t\turl: route,\n\t\t\tpageClass: pageClass\n\t\t}\n\t}\n\n\treturn pageClass;\n}\n\nexport function getPath(name, values) {\n\tlet url = router.interpolate(name, values);\n\tif (values?.hash)\n\t\turl += '#' + values.hash;\n\treturn url;\n}\n\nexport function refresh() {\n\tlet frame = stack[stackPointer];\n\tshowPage(frame.data.route.url, frame.data, 'replace');\n}\n\n// TODO: 404 and error too?\nfunction initLoading()\n{\n\tvar page = pageHash[options.loadingPageName];\n\tvar route = router.parse(page.url);\n\treturn loadPage(route, {});\n}\n\nfunction showLoading() {\n\tvar page = pageHash[options.loadingPageName];\n\tvar route = router.parse(page.url);\n\tvar data = {\n\t\troute: route,\n\t\tscrollY: window.scrollY,\n\t\tevent: {\n\t\t\taction: 'replace'\n\t\t}\n\t};\n\n\tvar page = pageCache[page.url].page;\n\n\treturn Promise.resolve(page.show(data));\n}\n\nfunction loadPage(route, data) {\n\n\tvar fetchPage = pageTemplateCache[route.pattern] ? Promise.resolve(pageTemplateCache[route.pattern]) : options.fetchPageTemplate(route);\n\n\treturn fetchPage.then($template => {\n\t\tvar $html = $template.cloneNode(true);\n\t\toptions.prepareMarkup($html);\n\t\toptions.attachMarkup($html);\n\t\tpageCache[route.path] = {\n\t\t\t$html,\n\t\t\tpage: new (route.pageClass)($html)\n\t\t}\n\n\t\tvar page = pageCache[route.path].page;\n\t\t\n\t\tlet booted = new Promise(resolve => resolve(page.boot(data)));\n\t\treturn booted.then(() => page);\n\t});\n}\n\nfunction showPage(url, data, event) {\n\tvar route = router.parse(url);\n\tif (route == null) {\n\t\tconsole.error(`Can't find page: '${url}'`);\n\t\t\n\t\tlet page404 = pageHash[options.error404PageName];\n\t\troute = router.parse(page404.url)\n\t}\n\n\tdata = data || {};\n\tfor (let key in route.params)\n\t\tdata[key] = route.params[key];\n\n\tdata.route = {\n\t\turl: url,\n\t\tpath: route.path,\n\t\trouteName: route.routeName,\n\t\tparams: route.params\n\t};\n\tdata.event = event;\n\n\tlet interrupt = options.pageInterrupt(route);\n\tif(interrupt)\n\t{\n\t\tgoal = { url, data };\n\t\treturn showPage(interrupt.url, null, event);\n\t}\n\t\n\tvar getPage = showLoading().then(() => {\n\t\tif (pageCache[route.path])\n\t\t\treturn pageCache[route.path].page;\n\n\t\treturn loadPage(route, data)\n\t});\n\n\t// handle initial page\n\tif (event.action == 'load')\n\t{\n\t\treturn getPage\n\t\t\t\t\t.then(page => doShow(page, data))\n\t\t\t\t\t.then(page => {\n\t\t\t\t\t\t// clean initial load\n\t\t\t\t\t\tif(stackPointer == -1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstack.push({ uid: 0, data, page });\n\t\t\t\t\t\t\tstackPointer = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// page refresh\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstack[stackPointer].page = page;\n\t\t\t\t\t\t\tstack[stackPointer].data = data;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn page;\n\t\t\t\t\t});\n\t}\n\n\tlet currentState = stack[stackPointer];\n\n\tif (currentState.data.route.path == route.path) {\n\t\thandleHistoryAction(event, url, data, currentState.page);\n\t\treturn getPage.then(page => doUpdate(page, data));\n\t}\n\n\tcurrentState.data.scrollY = window.scrollY;\n\n\treturn Promise.all([\n\t\t\tcurrentState.page.hide(event),\n\t\t\tgetPage\n\t\t])\n\t\t\t.then(results => results[1])\n\t\t\t.then(page => {\n\t\t\t\thandleHistoryAction(event, url, data, page);\n\t\t\t\treturn doShow(page, data);\n\t\t\t});\n\t\t\t// .catch(e => {\n\t\t\t// \t// TODO: what case is this?\n\t\t\t// \tmanuallyAdjustingHistory = () => manuallyAdjustingHistory = false;\n\t\t\t// \tif (event.action == 'back')\n\t\t\t// \t\thistory.go(1);\n\t\t\t// \telse if (event.action == 'fwd')\n\t\t\t// \t\thistory.go(-1);\n\t\t\t// });\n}\n\nfunction doShow(page, data) {\n\n\twindow.scroll(0, 0);\n\n\treturn Promise.resolve(page.show(data))\n\t\t\t.then(() => document.title = page.title)\n\t\t\t// todo: hide() should be passed an event object\n\t\t\t.then(() => pageCache[pageHash[options.loadingPageName].url].page.hide())\n\t\t\t// return page\n\t\t\t.then(() => page);\n}\n\n\nasync function doUpdate(page, data) {\n\n\tawait Promise.resolve(page.update(data));\n\n\tdocument.title = page.title\n\t// todo: hide() should be passed an event object\n\tawait pageCache[pageHash[options.loadingPageName].url].page.hide()\n\treturn page;\n}\n\nfunction handleHistoryAction(event, url, data, page) {\n\tif (event.action == 'push') {\n\t\tlet newUid = stack[stackPointer].uid + 1;\n\n\t\twindow.history.pushState({ uid: newUid }, null, url);\n\t\t\n\t\t// remove future\n\t\tstack.splice(stackPointer + 1, stack.length - stackPointer);\n\n\t\tstack.push({ uid: newUid, data, page });\n\t\tstackPointer++;\n\t}\n\telse if (event.action == 'replace') {\n\t\t// TODO: this case may be buggy\n\n\t\t// BUG: you can replace the current state with the same url as the previous state, which shouldnt be allowed, \n\t\t// you cant have the same url in the history twice (next to each other).\n\t\t// Update this to check for such a case and handle it\n\n\t\tlet currentUid = stack[stackPointer].uid;\n\t\twindow.history.replaceState({ uid: currentUid }, null, url);\n\t\t\n\t\tstack.pop();\n\t\tstack.push({ uid: currentUid, data, page });\n\t}\n\telse if(event.action == 'back')\n\t{\n\t\tstackPointer -= event.distance;\n\t}\n\telse if (event.action == 'fwd')\n\t{\n\t\tstackPointer += event.distance;\n\t}\t\n}\n\nfunction doNavigate(url, data) {\n\n\tif (url === 'goal') {\n\t\turl = goal ? goal.url : data?.fallback || getPath(options.defaultPageName);\n\t\tdata = goal?.data || {}\n\t\tgoal = null;\n\t}\n\n\treturn showPage(url, data, { action: 'push', distance: 0 });\n}\n\nfunction storageAvailable() {\n\treturn false;\n try {\n var x = '__storage_test__';\n window.sessionStorage.setItem(x, x);\n window.sessionStorage.removeItem(x);\n return true;\n }\n catch(e) {\n return false;\n }\n}\n\nexport async function init(opts) {\n\n\tObject.assign(options, opts);\n\n\tif(storageAvailable())\n\t{\n\t\tlet storedStack = window.sessionStorage.getItem(\"stack\");\n\t\tif(storedStack)\n\t\t{\n\t\t\tstoredStack = JSON.parse(storedStack);\n\t\t\tstack = storedStack.stack;\n\t\t\tstackPointer = storedStack.stackPointer;\n\t\t\twindow.sessionStorage.removeItem(\"stack\");\n\t\t}\n\t}\n\n\t// handle pages whose markup is already loaded in the page\n\tfor (var key in pageHash) {\n\t\tif (pageHash[key].pageClass.existingDomSelector) {\n\t\t\tlet $html = document.querySelector(pageHash[key].pageClass.existingDomSelector)\n\t\t\tif(!$html)\n\t\t\t{\n\t\t\t\tconsole.error(`Unable to find DOM element '${pageHash[key].pageClass.existingDomSelector}' for page '${key}'`)\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t\n\t\t\t// TODO: this is inefficient for non parameterised routes. There will always be HTML in memory and then copied for the page once loaded\n\t\t\tpageTemplateCache[router.routesByName[key]._pattern] = $html;\n\t\t\t$html.parentElement.removeChild($html);\t\n\t\t}\n\t}\n\n\tawait initLoading();\n\t\n\t// set initial page\n\tshowPage(window.location.pathname + window.location.search + window.location.hash, null, { action: 'load', distance: 0 }).catch(e => {\n\t\tconsole.error(e);\n\t\t\n\t\tif (e instanceof PageShowError)\n\t\t{\n\t\t\treturn showPage(e.url, e.data, { action: stackPointer == -1 ? 'load' : e.action || 'show' }).then(page => {\n\t\t\t\tif(e.action == 'replace')\n\t\t\t\t\thandleHistoryAction({ action: e.action }, e.url, e.data, page);\n\t\t\t\treturn page;\n\t\t\t});\n\t\t\t\n\t\t}\n\t});\n\n\tfunction handlePopstate(context, direction, distance) {\n\n\t\tif (manuallyAdjustingHistory) {\n\t\t\tmanuallyAdjustingHistory(context, { action: direction, distance });\n\t\t\treturn;\n\t\t}\n\n\t\tif (direction == 'back')\n\t\t\tObject.assign(context.data, backData);\n\t\tbackData = {};\n\n\t\tshowPage(context.data.route.url, context.data, { action: direction, distance }).catch(e => {\n\t\t\tconsole.error(e);\n\t\t\tif (e instanceof PageShowError)\n\t\t\t\treturn showPage(e.url, e.data, { action: e.action || 'show' });\n\t\t}).then(page => {\n\t\t\t// set page as it can be missing in the case of refreshes\n\t\t\tcontext.page = page;\n\t\t})\n\t}\n\n\tfunction handleBeforeHidePart1() {\n\t\t// if we're ignoring beforeHide this navigation\n\t\tif (handlingBeforeHide === 'ignore') {\n\t\t\thandlingBeforeHide = false;\n\t\t\treturn false;\n\t\t}\n\n\t\t// if we have a before-unload confirm to show\n\t\tif (stack[stackPointer].page.beforeHide && options.beforeHide && handlingBeforeHide === false) {\n\t\t\tvar interrupt = stack[stackPointer].page.beforeHide();\n\t\t\tif (interrupt) {\n\t\t\t\thandlingBeforeHide = 'step1';\n\n\t\t\t\t// do this in a new thread, you cant call history actions from inside a history-aciton-handler\n\t\t\t\twindow.setTimeout(() => {\n\t\t\t\t\t// undo the navigation so the URL remains correct whilst we show the confirm dialog\n\t\t\t\t\tif (lastNavigationDirection == 'fwd')\n\t\t\t\t\t\thistory.back();\n\t\t\t\t\telse if (lastNavigationDirection == 'back')\n\t\t\t\t\t\thistory.forward();\n\t\t\t\t}, 1);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// we've finished beforeHiding\n\t\tif (handlingBeforeHide === 'step2')\n\t\t\thandlingBeforeHide = false;\n\n\t\treturn false;\n\t}\n\n\tfunction handleBeforeHidePart2() {\n\t\tif (handlingBeforeHide !== 'step1')\n\t\t\treturn false;\n\n\t\t// do the beforeHide action, then...\n\t\toptions.beforeHide(stack[stackPointer].page.beforeHide()).then(result => {\n\n\t\t\t// if the user confirmed, redo the original action\n\t\t\tif (result) {\n\n\t\t\t\thandlingBeforeHide = 'step2';\n\n\t\t\t\tif (lastNavigationDirection == 'fwd')\n\t\t\t\t\thistory.forward();\n\t\t\t\telse if (lastNavigationDirection == 'back')\n\t\t\t\t\thistory.back();\n\t\t\t} else {\n\t\t\t\thandlingBeforeHide = false;\n\t\t\t}\n\t\t});\n\n\t\treturn true;\n\t}\n\n\t// listen for browser navigations\n\twindow.addEventListener(\"popstate\", e => {\n\t\tvar interrupted = handleBeforeHidePart2();\n\t\tif (interrupted)\n\t\t\treturn;\n\n\t\tlet newUid = e.state?.uid || 0;\n\t\tlet previousUid = stack[stackPointer].uid;\n\n\t\tlastNavigationDirection = newUid > previousUid ? 'fwd' : 'back';\n\t\tlet distance = Math.abs(newUid - previousUid);\n\n\t\tvar interrupted = handleBeforeHidePart1();\n\t\tif (interrupted)\n\t\t\treturn;\n\n\t\tvar context = findContext(newUid);\n\t\thandlePopstate(context, lastNavigationDirection, distance);\n\t});\n\n\tif(storageAvailable())\n\t{\n\t\twindow.addEventListener(\"beforeHide\", () => {\n\n\t\t\tlet stackToSerialize = stack.map(s => ({\n\t\t\t\tuid: s.uid,\n\t\t\t\tdata: s.data\n\t\t\t}));\n\t\t\tlet stackToStore = {\n\t\t\t\tstack: stackToSerialize,\n\t\t\t\tstackPointer\n\t\t\t}\n\t\t\twindow.sessionStorage.setItem('stack', JSON.stringify(stackToStore));\n\t\t});\n\t}\n}\n\nfunction findContext(uid){\n\tfor (var i = 0; i < stack.length; i++) {\n\t\tif (stack[i].uid == uid)\n\t\t\treturn stack[i];\n\t}\n\treturn null;\n}\n\nfunction expandOnlyHash(url)\n{\n\tif(url.startsWith('#'))\n\t{\n\t\tlet currentState = stack[stackPointer];\n\t\tlet currentUrl = currentState.data.route.url;\n\t\tlet hashIndex = currentUrl.indexOf('#');\n\t\tif(hashIndex > -1)\n\t\t\treturn currentUrl.substr(0, hashIndex);\n\t\treturn currentUrl + url;\n\t}\n\n\treturn url;\n}\n\nexport function navigate(url, data, checkBeforeHide = true) {\n\n\turl = expandOnlyHash(url);\n\n\tif (checkBeforeHide === true && stack[stackPointer].page.beforeHide && options.beforeHide) {\n\n\t\tvar interrupt = stack[stackPointer].page.beforeHide();\n\t\tif (interrupt !== false) {\n\t\t\toptions.beforeHide(interrupt).then(result => {\n\t\t\t\tif (result)\n\t\t\t\t\tdoNavigate(url, data);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t}\n\n\tdoNavigate(url, data).catch(e => {\n\t\tconsole.error(e);\n\t\tif (e instanceof PageShowError)\n\t\t\treturn showPage(e.url, e.data, { action: e.action || 'show' });\n\t});\n}\n\nexport function replace(url, data) {\n\turl = expandOnlyHash(url);\n\treturn showPage(url, data, { action: 'replace', distance: 0 });\n}\n\nexport function show(url, data) {\n\treturn showPage(url, data, { action: 'show', distance: 0 });\n}\n\nexport function back(data, checkBeforeHide) {\n\tbackData = data || {};\n\thandlingBeforeHide = checkBeforeHide === false ? 'ignore' : false;\n\thistory.go(-1);\n}\n\nexport function printStack() {\n\tconsole.log(\"Stack length: \" + stack.length);\n\tconsole.log(\"Stack pointer: \" + stackPointer);\n\tfor(var i = 0; i < stack.length; i++)\n\t\tconsole.log(stack[i]);\n}\n\nexport function removeHistory(predicate)\n{\n\tlet statesToKeep = [];\n\tfor (var i = 0; i < stack.length; i++)\n\t{\n\t\tif (!predicate(stack[i], i))\n\t\t\tstatesToKeep.push(stack[i]);\n\t}\n\n\t// TODO: ensure we always have at least 1 state to keep - must/can this always be the current page?\n\n\tif (statesToKeep.length == stack.length)\n\t\treturn Promise.resolve();\n\n\n\treturn new Promise((resolve, reject) => {\n\n\n\t\tlet backsToDo = stackPointer - 1;\n\t\tlet currentUid = -1;\n\n\t\t// TODO: handle stack pointer not being at the tail when this process starts\n\n\t\tmanuallyAdjustingHistory = _ => {\n\t\t\t// rewind to the first history position\n\t\t\tif(backsToDo > 0)\n\t\t\t{\n\t\t\t\twindow.setTimeout(() => {\n\t\t\t\t\tbacksToDo--;\n\t\t\t\t\thistory.back();\n\t\t\t\t}, 1);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// reset the stack\n\t\t\tstack = [];\n\n\t\t\tfor (var k = 0; k < statesToKeep.length; k++) {\n\t\t\t\tlet currentState = statesToKeep[k];\n\t\t\t\tcurrentState.uid = ++currentUid;\n\n\t\t\t\tif (k == 0)\n\t\t\t\t\twindow.history.replaceState({ uid: currentState.uid }, null, currentState.data.route.url);\n\t\t\t\telse\n\t\t\t\t\twindow.history.pushState({ uid: currentState.uid }, null, currentState.data.route.url);\n\t\t\t\t\n\t\t\t\t\t// TODO: this doesnt seem to work when k=0\n\t\t\t\tdocument.title = currentState.page.title;\n\n\t\t\t\tstack.push(currentState);\n\t\t\t}\n\n\t\t\tstackPointer = stack.length - 1;\n\n\t\t\tmanuallyAdjustingHistory = false;\n\t\t};\n\n\t\thistory.back();\n\t});\n}\n\nexport function purgeCache() {\n\tfor (const path in pageCache)\n\t{\n\t\tpageCache[path].page.destroy && pageCache[path].page.destroy();\n\t\tif (!pageCache[path].page.constructor.existingDomSelector)\n\t\t{\n\t\t\tpageCache[path].$html.remove();\n\t\t\tdelete pageCache[path];\n\t\t}\n\t}\n}\n\nexport class PageShowError extends Error {\n\tconstructor(url, message, data, action) {\n\t\tsuper(message || 'Error showing requested page')\n\n\t\t// Maintains proper stack trace for where our error was thrown (only available on V8)\n\t\tif (Error.captureStackTrace)\n\t\t\tError.captureStackTrace(this, PageShowError)\n\n\t\tthis.name = 'PageShowError'\n\t\tthis.url = url;\n\t\tthis.data = data;\n\t\tthis.action = action;\n\t}\n}","import Page from './page.js';\r\nimport {registerPage} from '@trullock/page-manager';\r\n\r\nexport default registerPage('loading', '/loading', class extends Page {\r\n\r\n\tstatic existingDomSelector = '#page-loading';\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\t}\r\n});","import './page1.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, refresh} from '@trullock/page-manager';\r\n\r\nexport default registerPage('page1', '/page1', class extends Page {\r\n\r\n\ttitle = \"Page 1\";\r\n\r\n\ttype = 'A';\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\r\n\t\t$page.querySelector('button').addEventListener('click', e => {\r\n\t\t\trefresh();\r\n\t\t})\r\n\t}\r\n\r\n\tupdate(data) {\r\n\t\tthis.$page.querySelector('.js-time').textContent = new Date().getTime();\r\n\t}\r\n});","import './page2.htm'\r\nimport Page from './page.js';\r\nimport {registerPage} from '@trullock/page-manager';\r\n\r\nexport default registerPage('page2', '/page2', class extends Page {\r\n\r\n\ttitle = \"Page 2\";\r\n\r\n\ttype = 'A';\r\n\t\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\t}\r\n});","import './page3.htm'\r\nimport Page from './page.js';\r\nimport * as pageManager from '@trullock/page-manager';\r\n\r\nexport default pageManager.registerPage('page3', '/page3', class extends Page {\r\n\r\n\ttitle = \"Page 3\";\r\n\t\r\n\tbeforeHide = () => 'Are you sure?'\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\r\n\t\t$page.querySelector('.btnRemove').addEventListener('click', e => {\r\n\t\t\tpageManager.removeHistory(state => {\r\n\t\t\t\treturn state.page.type == 'A';\r\n\t\t\t})\r\n\t\t})\r\n\t}\r\n});","import './page4.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\n\r\nexport default registerPage('page4', '/page4', class extends Page {\r\n\r\n\ttitle = \"Page 4\";\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\t}\r\n\r\n\tshow(opts)\r\n\t{\r\n\t\tthrow new PageShowError('/page1', 'Cant show page4, showing page1 instead', {}, 'replace')\r\n\t}\r\n});","import './page404.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\n\r\nexport default registerPage('page404', '/404', class extends Page {\r\n\r\n\ttitle = \"Page 404\";\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\t}\r\n});","import './page404.htm' // doesnt matter\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\n\r\nexport default registerPage('pageShowFail', '/show-fail', class extends Page {\r\n\r\n\ttitle = \"Page 4\";\r\n\r\n\tconstructor($page) {\r\n\t\tsuper($page);\r\n\t}\r\n\r\n\tshow(opts)\r\n\t{\r\n\t\tthrow new PageShowError('/page1', 'Cant show pageShowFail, showing page1 instead', {}, 'replace')\r\n\t}\r\n});","export default class Page {\r\n\r\n\tdirty = false;\r\n\r\n\tconstructor($page){\r\n\t\tthis.$page = $page;\r\n\t}\r\n\r\n\tget title() {\r\n\t\treturn this.$page.dataset['title'] || 'PageManager'\r\n\t}\r\n\r\n\tboot(opts){\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\r\n\tshow(opts) {\r\n\t\tthis.$page.style.display = 'block';\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\r\n\tupdate() {\r\n\t\treturn Promise.resolve();\r\n\t }\r\n\r\n\thide() {\r\n\t\tthis.$page.style.display = 'none';\r\n\t\treturn Promise.resolve();\r\n\t}\r\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","import * as pageManager from '../src/index.js'\r\n\r\nimport pageLoading from './page-loading.js'\r\nimport page1 from './page-page1.js'\r\nimport page2 from './page-page2.js'\r\nimport page3 from './page-page3.js'\r\nimport page4 from './page-page4.js'\r\nimport page404 from './page-page404.js'\r\nimport pageShowFail from './page-show-fail.js'\r\n\r\nwindow.addEventListener('DOMContentLoaded', function () {\r\n\tpageManager.init({\r\n\t\tpageContainer: () => document.body,\r\n\t\tfetchPath: route => '/pages/' + route.routeName + '.htm',\r\n\t\terror404PageName: 'page404',\r\n\t\tbeforeHide: message => new Promise(resolve => {\r\n\t\t\tresolve(confirm(message))\r\n\t\t})\r\n\t});\r\n\r\n\r\n\t// listen for navigations\r\n\tdocument.addEventListener('click', e => {\r\n\t\tif (e.ctrlKey || e.metaKey)\r\n\t\t\treturn;\r\n\r\n\t\tvar $a = e.target.matches('a') ? e.target : e.target.closest('a');\r\n\t\tif (!$a)\r\n\t\t\treturn;\r\n\r\n\t\tvar href = $a.pathname + $a.search + $a.hash;\r\n\t\tpageManager.navigate(href)\r\n\r\n\t\te.preventDefault();\r\n\t}, false);\r\n\r\n\tdocument.querySelector('.btnStack').addEventListener('click', e => {\r\n\t\tpageManager.printStack();\r\n\t})\r\n});"],"names":["router","pageHash","pageCache","pageTemplateCache","stack","stackPointer","manuallyAdjustingHistory","handlingBeforeHide","lastNavigationDirection","goal","backData","options","fetchPath","route","routeName","fetchPageTemplate","fetch","then","r","text","html","$div","document","createElement","innerHTML","firstElementChild","$template","pattern","pageInterrupt","attachMarkup","$html","body","appendChild","prepareMarkup","loadingPageName","error404PageName","defaultPageName","beforeHide","pages","registerPage","argA","argB","argC","namedRoutes","pageClass","undefined","name","Object","entries","addRoute","url","getPath","values","interpolate","hash","refresh","frame","showPage","data","initLoading","page","parse","loadPage","showLoading","scrollY","window","event","action","Promise","resolve","show","fetchPage","cloneNode","path","booted","boot","console","error","page404","key","params","interrupt","getPage","doShow","push","uid","currentState","handleHistoryAction","doUpdate","all","hide","results","scroll","title","update","newUid","history","pushState","splice","length","currentUid","replaceState","pop","distance","doNavigate","fallback","storageAvailable","x","sessionStorage","setItem","removeItem","e","init","opts","assign","storedStack","getItem","JSON","existingDomSelector","querySelector","routesByName","_pattern","parentElement","removeChild","location","pathname","search","catch","PageShowError","handlePopstate","context","direction","handleBeforeHidePart1","setTimeout","back","forward","handleBeforeHidePart2","result","addEventListener","interrupted","state","previousUid","Math","abs","findContext","stackToSerialize","map","s","stackToStore","stringify","i","expandOnlyHash","startsWith","currentUrl","hashIndex","indexOf","substr","navigate","checkBeforeHide","replace","go","printStack","log","removeHistory","predicate","statesToKeep","reject","backsToDo","_","k","purgeCache","destroy","constructor","remove","Error","message","captureStackTrace","Page","_class","$page","_defineProperty","textContent","Date","getTime","pageManager","type","dataset","style","display","pageLoading","page1","page2","page3","page4","pageShowFail","pageContainer","confirm","ctrlKey","metaKey","$a","target","matches","closest","href","preventDefault"],"sourceRoot":""}
|
package/tests/index.html
CHANGED
package/tests/lolpack.js
CHANGED
|
@@ -6,6 +6,7 @@ import page2 from './page-page2.js'
|
|
|
6
6
|
import page3 from './page-page3.js'
|
|
7
7
|
import page4 from './page-page4.js'
|
|
8
8
|
import page404 from './page-page404.js'
|
|
9
|
+
import pageShowFail from './page-show-fail.js'
|
|
9
10
|
|
|
10
11
|
window.addEventListener('DOMContentLoaded', function () {
|
|
11
12
|
pageManager.init({
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import './page404.htm' // doesnt matter
|
|
2
|
+
import Page from './page.js';
|
|
3
|
+
import {registerPage, PageShowError} from '@trullock/page-manager';
|
|
4
|
+
|
|
5
|
+
export default registerPage('pageShowFail', '/show-fail', class extends Page {
|
|
6
|
+
|
|
7
|
+
title = "Page 4";
|
|
8
|
+
|
|
9
|
+
constructor($page) {
|
|
10
|
+
super($page);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
show(opts)
|
|
14
|
+
{
|
|
15
|
+
throw new PageShowError('/page1', 'Cant show pageShowFail, showing page1 instead', {}, 'replace')
|
|
16
|
+
}
|
|
17
|
+
});
|