@trullock/page-manager 0.14.2 → 0.14.4
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 +51 -56
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,63 +163,63 @@ 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 };
|
|
171
170
|
return showPage(interrupt.url, null, event);
|
|
172
171
|
}
|
|
173
172
|
|
|
174
|
-
|
|
175
|
-
if (pageCache[route.path])
|
|
176
|
-
return pageCache[route.path].page;
|
|
173
|
+
await showLoading();
|
|
177
174
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
175
|
+
var getPage = null
|
|
176
|
+
if (pageCache[route.path])
|
|
177
|
+
getPage = pageCache[route.path].page;
|
|
178
|
+
else if (pageCache[route.pattern])
|
|
179
|
+
getPage = pageCache[route.pattern].page;
|
|
180
|
+
else
|
|
181
|
+
getPage = loadPage(route, data)
|
|
183
182
|
|
|
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
|
-
|
|
203
|
-
});
|
|
186
|
+
const page = await getPage;
|
|
187
|
+
await doShow(page, data);
|
|
188
|
+
await hideLoading();
|
|
189
|
+
|
|
190
|
+
// clean initial load
|
|
191
|
+
if (stackPointer == -1) {
|
|
192
|
+
stack.push({ uid: 0, data, page });
|
|
193
|
+
stackPointer = 0;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// page refresh
|
|
197
|
+
else {
|
|
198
|
+
stack[stackPointer].page = page;
|
|
199
|
+
stack[stackPointer].data = data;
|
|
200
|
+
}
|
|
201
|
+
return page;
|
|
204
202
|
}
|
|
205
203
|
|
|
206
204
|
let currentState = stack[stackPointer];
|
|
207
205
|
|
|
208
206
|
if (currentState.data.route.path == route.path) {
|
|
209
207
|
handleHistoryAction(event, url, data, currentState.page);
|
|
210
|
-
|
|
208
|
+
const page = await getPage;
|
|
209
|
+
await doUpdate(page, data);
|
|
210
|
+
await hideLoading();
|
|
211
|
+
return page;
|
|
211
212
|
}
|
|
212
213
|
|
|
213
214
|
currentState.data.scrollY = window.scrollY;
|
|
214
215
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
return doShow(page, data);
|
|
223
|
-
});
|
|
216
|
+
const results = await Promise.all([
|
|
217
|
+
currentState.page.hide(event),
|
|
218
|
+
getPage
|
|
219
|
+
]);
|
|
220
|
+
const page = results[1];
|
|
221
|
+
handleHistoryAction(event, url, data, page);
|
|
222
|
+
await doShow(page, data);
|
|
224
223
|
// .catch(e => {
|
|
225
224
|
// // TODO: what case is this?
|
|
226
225
|
// manuallyAdjustingHistory = () => manuallyAdjustingHistory = false;
|
|
@@ -229,6 +228,8 @@ function showPage(url, data, event) {
|
|
|
229
228
|
// else if (event.action == 'fwd')
|
|
230
229
|
// history.go(-1);
|
|
231
230
|
// });
|
|
231
|
+
await hideLoading();
|
|
232
|
+
return page
|
|
232
233
|
}
|
|
233
234
|
|
|
234
235
|
async function doShow(page, data) {
|
|
@@ -237,18 +238,12 @@ async function doShow(page, data) {
|
|
|
237
238
|
|
|
238
239
|
await Promise.resolve(page.show(data));
|
|
239
240
|
document.title = page.title;
|
|
240
|
-
await hideLoading();
|
|
241
|
-
return page;
|
|
242
241
|
}
|
|
243
242
|
|
|
244
|
-
|
|
245
243
|
async function doUpdate(page, data) {
|
|
246
244
|
|
|
247
245
|
await Promise.resolve(page.update(data));
|
|
248
246
|
document.title = page.title
|
|
249
|
-
// todo: hide() should be passed an event object
|
|
250
|
-
await hideLoading();
|
|
251
|
-
return page;
|
|
252
247
|
}
|
|
253
248
|
|
|
254
249
|
function handleHistoryAction(event, url, data, page) {
|