File tree 4 files changed +44
-4
lines changed
4 files changed +44
-4
lines changed Original file line number Diff line number Diff line change @@ -32,6 +32,7 @@ <h1>Add Post</h1>
32
32
</ p >
33
33
</ main >
34
34
35
+ < script src ="/js/external/idb-keyval-iife.min.js "> </ script >
35
36
< script src ="/js/blog.js "> </ script >
36
37
< script src ="/js/add-post.js "> </ script >
37
38
</ body >
Original file line number Diff line number Diff line change 10
10
11
11
// **********************************
12
12
13
- function ready ( ) {
13
+ async function ready ( ) {
14
14
titleInput = document . getElementById ( "new-title" ) ;
15
15
postInput = document . getElementById ( "new-post" ) ;
16
16
addPostBtn = document . getElementById ( "btn-add-post" ) ;
17
17
18
18
addPostBtn . addEventListener ( "click" , addPost , false ) ;
19
+ titleInput . addEventListener ( "change" , backupPost , false ) ;
20
+ postInput . addEventListener ( "change" , backupPost , false ) ;
21
+
22
+ // restore a backup?
23
+ var addPostBackup = await idbKeyval . get ( "add-post-backup" ) ;
24
+ if ( addPostBackup ) {
25
+ titleInput . value = addPostBackup . title || "" ;
26
+ postInput . value = addPostBackup . post || "" ;
27
+ }
28
+ }
29
+
30
+ // save backup of post (in case posting fails or offline)
31
+ async function backupPost ( ) {
32
+ await idbKeyval . set ( "add-post-backup" , {
33
+ title : titleInput . value ,
34
+ post : postInput . value
35
+ } ) ;
19
36
}
20
37
21
38
async function addPost ( ) {
22
39
if (
23
40
titleInput . value . length > 0 &&
24
41
postInput . value . length > 0
25
42
) {
43
+ // don't try posting while offline
44
+ if ( ! isBlogOnline ( ) ) {
45
+ alert ( "You seem to be offline currently. Please try posting once you come back online." ) ;
46
+ return ;
47
+ }
48
+
26
49
try {
27
50
let res = await fetch ( "/api/add-post" , {
28
51
method : "POST" ,
Original file line number Diff line number Diff line change 1
- ( function Blog ( ) {
1
+ ( function Blog ( global ) {
2
2
"use strict" ;
3
3
4
4
var offlineIcon ;
12
12
initServiceWorker ( ) . catch ( console . error ) ;
13
13
}
14
14
15
+ global . isBlogOnline = isBlogOnline ;
16
+
15
17
document . addEventListener ( "DOMContentLoaded" , ready , false ) ;
16
18
17
19
36
38
} , false ) ;
37
39
}
38
40
41
+ function isBlogOnline ( ) {
42
+ return isOnline ;
43
+ }
44
+
39
45
async function initServiceWorker ( ) {
40
46
swRegistration = await navigator . serviceWorker . register ( "/sw.js" , {
41
47
updateViaCache : "none" ,
82
88
}
83
89
}
84
90
85
- } ) ( ) ;
91
+ } ) ( window ) ;
Original file line number Diff line number Diff line change 1
1
"use strict" ;
2
2
3
- var version = 7 ;
3
+ importScripts ( "/js/external/idb-keyval-iife.min.js" ) ;
4
+
5
+ var version = 8 ;
4
6
var isOnline = true ;
5
7
var isLoggedIn = false ;
6
8
var cacheName = `ramblings-${ version } ` ;
@@ -19,6 +21,7 @@ var urlsToCache = {
19
21
"/js/home.js" ,
20
22
"/js/login.js" ,
21
23
"/js/add-post.js" ,
24
+ "/js/external/idb-keyval-iife.min.js" ,
22
25
"/images/logo.gif" ,
23
26
"/images/offline.png"
24
27
]
@@ -242,6 +245,10 @@ async function router(req) {
242
245
if ( req . method == "GET" ) {
243
246
await cache . put ( reqURL , res . clone ( ) ) ;
244
247
}
248
+ // clear offline-backup of successful post?
249
+ else if ( reqURL == "/api/add-post" ) {
250
+ await idbKeyval . del ( "add-post-backup" ) ;
251
+ }
245
252
return res ;
246
253
}
247
254
@@ -370,6 +377,9 @@ async function router(req) {
370
377
if ( ! res . headers . get ( "X-Not-Found" ) ) {
371
378
await cache . put ( reqURL , res . clone ( ) ) ;
372
379
}
380
+ else {
381
+ await cache . delete ( reqURL ) ;
382
+ }
373
383
return res ;
374
384
}
375
385
You can’t perform that action at this time.
0 commit comments