Skip to content

Commit 88bbfdc

Browse files
committed
improve offline exprience
1 parent bcabf84 commit 88bbfdc

File tree

6 files changed

+26
-9
lines changed

6 files changed

+26
-9
lines changed

build/build.serviceWorker.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ const generateSwConfigFile = () => {
4848
return new Promise((resolve, reject) => {
4949
var swConfigFilename = 'sw_config_' + self.assetCacheHash + '.js';
5050
fs.outputFile( (dirPath + "/" + swConfigFilename), 'var config = ' + JSON.stringify({
51-
assets: self.assetFiles.concat('/'),
51+
assets: self.assetFiles.concat('/offline-redirect/'),
5252
paths:{api:config.wpDomain + 'wp-json', remote:config.wpDomain, client: config.client},
5353
cacheNames:{assetCache:`vwpCacheAsset-${self.assetCacheHash}`, remoteCache:`vwpCacheRemote-${self.assetCacheHash}`}
5454
}), () => {

src/assets/sw-config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ var config = {
1010
"/assets/styles.css",
1111
"/assets/js/app.js",
1212
"/assets/js/vendor.js",
13-
"/"
13+
"/offline-redirect/"
1414
],
1515
"paths": {
1616
"api": "https://fullstackweekly.azureedge.net/wp-json",

src/router/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import ThemePagePage from '../theme/Page.vue'
55
import ThemePageCategoryNewsletter from '../theme/Category-Newsletter.vue'
66
import ThemePageCategoryLearningPaths from '../theme/Category-LearningPaths.vue'
77
import ThemePageSingleLearningPaths from '../theme/Single-LearningPaths.vue'
8+
import OfflineRedirect from '../theme/OfflineRedirect.vue'
89
import VueRouter from 'vue-router'
910

1011
Vue.use(VueRouter)
@@ -22,6 +23,7 @@ const router = new VueRouter({
2223
{ path: '/category/:id/page/:page', component: ThemePageCategory },
2324
{ path: '/category/:categorySlug/:id', component: ThemePageSingle },
2425
{ path: '/category/:id', component: ThemePageCategory, params: { page: 1 } },
26+
{ path: '/offline-redirect', component: OfflineRedirect },
2527
{ path: '/:id', component: ThemePageSingle },
2628
{ path: '/', name: 'Home', redirect: '/category/blog/' }
2729
]

src/service-worker.js

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,14 @@ self.addEventListener('fetch', function (event) {
3030
var requestUrl = new URL(event.request.url)
3131
var requestPath = requestUrl.pathname
3232

33-
if (stringContains(requestUrl.href, config.paths.api)) {
33+
if (stringContains(event.request.url, config.paths.api)) {
3434
// console.log("network only");
3535
event.respondWith(fetch(event.request))
3636
} else if (config.assets.indexOf(requestPath) > -1) {
3737
// console.log("cache first:", requestUrl.href);
3838
event.respondWith(cacheFirstStrategy(event.request))
39-
} else if (stringContains(requestUrl.href, config.paths.remote) ||
40-
stringContains(requestUrl.href, config.paths.client)) {
39+
} else if (stringContains(event.request.url, config.paths.remote) ||
40+
stringContains(event.request.url, config.paths.client)) {
4141
// console.log("network first:", requestUrl.href, " current",currentDomain, "requestPath:", requestPath);
4242
event.respondWith(networkFirstStrategy(event.request))
4343
} else {
@@ -54,8 +54,15 @@ function cacheFirstStrategy (request) {
5454
function networkFirstStrategy (request) {
5555
return fetchRequestAndCache(request).catch(function (response) {
5656
return caches.match(request).then(function (cacheResponse) {
57-
console.log('not found in cache or network')
58-
return cacheResponse || caches.match('/')
57+
if (!cacheResponse) {
58+
var requestUrl = new URL(request.url)
59+
var requestPath = requestUrl.pathname
60+
61+
if (stringContains(request.url, config.paths.client)) {
62+
return caches.match('/offline-redirect/#' + requestPath)
63+
}
64+
}
65+
return cacheResponse
5966
})
6067
})
6168
}

src/theme/OfflineRedirect.vue

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<template></template>
2+
<script>
3+
export default {
4+
beforeMount () {
5+
this.$router.push(this.$route.hash.replace('#', ''))
6+
}
7+
}
8+
</script>

src/theme/Page.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<div id="vwp-single">
2+
<div class="vwp-single">
33
<div v-if="!single || (single && !single.content)">
44
<h1>Loading Page...</h1>
55
<div class="single-content card fake-single-content"></div>
@@ -44,7 +44,7 @@ export default {
4444
</script>
4545

4646
<style lang="scss">
47-
#vwp-single .single-content{
47+
.vwp-single .single-content{
4848
background-color: #ffffff;
4949
padding:20px;
5050
display:inline-block;

0 commit comments

Comments
 (0)