@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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/index.js +51 -56
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trullock/page-manager",
3
- "version": "0.14.2",
3
+ "version": "0.14.4",
4
4
  "description": "Single page app manager",
5
5
  "exports": {
6
6
  ".": "./src/index.js"
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
- return fetch(options.fetchPath(route))
19
- .then(r => r.text())
20
- .then(html => {
21
- var $div = document.createElement('div');
22
- $div.innerHTML = html;
23
- // Pages are assumed to have a single wrapping element
24
- return $div.firstElementChild;
25
- })
26
- .then($template => {
27
- pageTemplateCache[route.pattern] = $template;
28
- return $template;
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
- var getPage = showLoading().then(() => {
175
- if (pageCache[route.path])
176
- return pageCache[route.path].page;
173
+ await showLoading();
177
174
 
178
- if (pageCache[route.pattern])
179
- return pageCache[route.pattern].page;
180
-
181
- return loadPage(route, data)
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
- return getPage
188
- .then(page => doShow(page, data))
189
- .then(page => {
190
- // clean initial load
191
- if(stackPointer == -1)
192
- {
193
- stack.push({ uid: 0, data, page });
194
- stackPointer = 0;
195
- }
196
- // page refresh
197
- else
198
- {
199
- stack[stackPointer].page = page;
200
- stack[stackPointer].data = data;
201
- }
202
- return page;
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
- return getPage.then(page => doUpdate(page, data));
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
- return Promise.all([
216
- currentState.page.hide(event),
217
- getPage
218
- ])
219
- .then(results => results[1])
220
- .then(page => {
221
- handleHistoryAction(event, url, data, page);
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) {