@trullock/page-manager 0.14.2 → 0.14.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/index.js +39 -46
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -14,19 +14,18 @@ var goal = null;
|
|
|
14
14
|
var backData = {};
|
|
15
15
|
var options = {
|
|
16
16
|
fetchPath: route => '/pages/' + route.routeName + '.html',
|
|
17
|
-
fetchPageTemplate: route => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
});
|
|
17
|
+
fetchPageTemplate: async route => {
|
|
18
|
+
const response = await fetch(options.fetchPath(route));
|
|
19
|
+
const html = await response.text();
|
|
20
|
+
|
|
21
|
+
var $div = document.createElement('div');
|
|
22
|
+
$div.innerHTML = html;
|
|
23
|
+
const $template = $div.firstElementChild;
|
|
24
|
+
|
|
25
|
+
// TODO: why is this in here and not in the caller?
|
|
26
|
+
pageTemplateCache[route.pattern] = $template;
|
|
27
|
+
|
|
28
|
+
return $template;
|
|
30
29
|
},
|
|
31
30
|
pageInterrupt: route => null,
|
|
32
31
|
attachMarkup: $html => document.body.appendChild($html),
|
|
@@ -143,7 +142,7 @@ async function loadPage(route, data) {
|
|
|
143
142
|
return page;
|
|
144
143
|
}
|
|
145
144
|
|
|
146
|
-
function showPage(url, data, event) {
|
|
145
|
+
async function showPage(url, data, event) {
|
|
147
146
|
var route = router.parse(url);
|
|
148
147
|
if (route == null) {
|
|
149
148
|
console.error(`Can't find page: '${url}'`);
|
|
@@ -164,7 +163,7 @@ function showPage(url, data, event) {
|
|
|
164
163
|
};
|
|
165
164
|
data.event = event;
|
|
166
165
|
|
|
167
|
-
let interrupt = options.pageInterrupt(route);
|
|
166
|
+
let interrupt = await Promise.resolve(options.pageInterrupt(route));
|
|
168
167
|
if(interrupt)
|
|
169
168
|
{
|
|
170
169
|
goal = { url, data };
|
|
@@ -184,43 +183,40 @@ function showPage(url, data, event) {
|
|
|
184
183
|
// handle initial page
|
|
185
184
|
if (event.action == 'load')
|
|
186
185
|
{
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
}
|
|
202
|
-
return page;
|
|
203
|
-
});
|
|
186
|
+
const page = await getPage;
|
|
187
|
+
await doShow(page, data);
|
|
188
|
+
// clean initial load
|
|
189
|
+
if (stackPointer == -1) {
|
|
190
|
+
stack.push({ uid: 0, data, page });
|
|
191
|
+
stackPointer = 0;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// page refresh
|
|
195
|
+
else {
|
|
196
|
+
stack[stackPointer].page = page;
|
|
197
|
+
stack[stackPointer].data = data;
|
|
198
|
+
}
|
|
199
|
+
return page;
|
|
204
200
|
}
|
|
205
201
|
|
|
206
202
|
let currentState = stack[stackPointer];
|
|
207
203
|
|
|
208
204
|
if (currentState.data.route.path == route.path) {
|
|
209
205
|
handleHistoryAction(event, url, data, currentState.page);
|
|
210
|
-
|
|
206
|
+
const page = await getPage;
|
|
207
|
+
await doUpdate(page, data);
|
|
208
|
+
return page;
|
|
211
209
|
}
|
|
212
210
|
|
|
213
211
|
currentState.data.scrollY = window.scrollY;
|
|
214
212
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
return doShow(page, data);
|
|
223
|
-
});
|
|
213
|
+
const results = await Promise.all([
|
|
214
|
+
currentState.page.hide(event),
|
|
215
|
+
getPage
|
|
216
|
+
]);
|
|
217
|
+
const page = results[1];
|
|
218
|
+
handleHistoryAction(event, url, data, page);
|
|
219
|
+
await doShow(page, data);
|
|
224
220
|
// .catch(e => {
|
|
225
221
|
// // TODO: what case is this?
|
|
226
222
|
// manuallyAdjustingHistory = () => manuallyAdjustingHistory = false;
|
|
@@ -229,6 +225,7 @@ function showPage(url, data, event) {
|
|
|
229
225
|
// else if (event.action == 'fwd')
|
|
230
226
|
// history.go(-1);
|
|
231
227
|
// });
|
|
228
|
+
return page
|
|
232
229
|
}
|
|
233
230
|
|
|
234
231
|
async function doShow(page, data) {
|
|
@@ -238,17 +235,13 @@ async function doShow(page, data) {
|
|
|
238
235
|
await Promise.resolve(page.show(data));
|
|
239
236
|
document.title = page.title;
|
|
240
237
|
await hideLoading();
|
|
241
|
-
return page;
|
|
242
238
|
}
|
|
243
239
|
|
|
244
|
-
|
|
245
240
|
async function doUpdate(page, data) {
|
|
246
241
|
|
|
247
242
|
await Promise.resolve(page.update(data));
|
|
248
243
|
document.title = page.title
|
|
249
|
-
// todo: hide() should be passed an event object
|
|
250
244
|
await hideLoading();
|
|
251
|
-
return page;
|
|
252
245
|
}
|
|
253
246
|
|
|
254
247
|
function handleHistoryAction(event, url, data, page) {
|