diff --git a/src/pages/category-page.jsx b/src/pages/category-page.jsx index eb62349..e74f33c 100644 --- a/src/pages/category-page.jsx +++ b/src/pages/category-page.jsx @@ -40,7 +40,7 @@ class CategoryPageSync extends PureComponent { let categoryLabel = _.get(category, 'name', ''); for (let parentCategory of parentCategories) { let label = _.get(parentCategory, 'name', ''); - let url = route.getObjectURL(parentCategory); + let url = route.prefetchObjectURL(parentCategory); trail.push({ label, url }); } trail.push({ label: categoryLabel }); diff --git a/src/pages/page-page.jsx b/src/pages/page-page.jsx index 6e39b89..1a0ae56 100644 --- a/src/pages/page-page.jsx +++ b/src/pages/page-page.jsx @@ -41,7 +41,7 @@ class PagePageSync extends PureComponent { let trail = []; for (let parentPage of parentPages) { let title = _.get(parentPage, 'title.rendered', ''); - let url = route.getObjectURL(parentPage); + let url = route.prefetchObjectURL(parentPage); trail.push({ label:
, url }) } return ( diff --git a/src/pages/post-page.jsx b/src/pages/post-page.jsx index 5337439..aa46d09 100644 --- a/src/pages/post-page.jsx +++ b/src/pages/post-page.jsx @@ -96,9 +96,9 @@ class PostPageSync extends PureComponent { render() { let { route, categories, post, author, tags, comments } = this.props; let trail = [ { label: 'Categories' } ]; - for (let c of categories) { + for (let category of categories) { let label = _.get(c, 'name', ''); - let url = route.getObjectURL(c); + let url = route.prefetchObjectURL(category); trail.push({ label, url }); } return ( diff --git a/src/routing.js b/src/routing.js index 80e6bbe..d25e22b 100644 --- a/src/routing.js +++ b/src/routing.js @@ -36,8 +36,12 @@ class Route { throw new Error(`Object URL does not match site URL`); } let path = link.substr(siteURL.length); - let url = this.composeURL({ path }); - this.preloadPage(url); + return this.composeURL({ path }); + } + + prefetchObjectURL(object) { + let url = this.getObjectURL(object); + this.loadPageData(url); return url; } @@ -146,7 +150,7 @@ class Route { } } - async preloadPage(url) { + async loadPageData(url) { try { let urlParts = this.routeManager.parse(url); let params = await this.getParameters(urlParts.path, urlParts.query); @@ -154,6 +158,8 @@ class Route { let wp = new Wordpress(this.dataSource); if (params.postSlug) { await wp.fetchOne('/wp/v2/posts/', params.postSlug); + } else if (params.pageSlug) { + await wp.fetchOne('/wp/v2/pages/', params.pageSlug); } else if (params.tagSlug) { let tag = await wp.fetchOne('/wp/v2/tags/', params.tagSlug); await wp.fetchList(`/wp/v2/posts/?tags=${tag.id}`); @@ -187,7 +193,7 @@ class Route { if (_.startsWith(node.attribs.href, '/')) { // strip off page number node.attribs.href = node.attribs.href.replace(/\/\d+\/?$/, ''); - this.preloadPage(node.attribs.href); + this.loadPageData(node.attribs.href); } } } else if (node.name === 'img') { diff --git a/src/widgets/page-list-view.jsx b/src/widgets/page-list-view.jsx index 2efe169..a23ad03 100644 --- a/src/widgets/page-list-view.jsx +++ b/src/widgets/page-list-view.jsx @@ -10,7 +10,7 @@ class PageListView extends PureComponent { render() { let { route, page } = this.props; let title = _.get(page, 'title.rendered', ''); - let url = route.getObjectURL(page); + let url = route.prefetchObjectURL(page); return (