Skip to content

Commit e6d840f

Browse files
committed
saving backup of add-post (to idb) for offline or posting failure
1 parent 46aeead commit e6d840f

File tree

4 files changed

+44
-4
lines changed

4 files changed

+44
-4
lines changed

web/add-post.html

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ <h1>Add Post</h1>
3232
</p>
3333
</main>
3434

35+
<script src="/js/external/idb-keyval-iife.min.js"></script>
3536
<script src="/js/blog.js"></script>
3637
<script src="/js/add-post.js"></script>
3738
</body>

web/js/add-post.js

+24-1
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,42 @@
1010

1111
// **********************************
1212

13-
function ready() {
13+
async function ready() {
1414
titleInput = document.getElementById("new-title");
1515
postInput = document.getElementById("new-post");
1616
addPostBtn = document.getElementById("btn-add-post");
1717

1818
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+
});
1936
}
2037

2138
async function addPost() {
2239
if (
2340
titleInput.value.length > 0 &&
2441
postInput.value.length > 0
2542
) {
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+
2649
try {
2750
let res = await fetch("/api/add-post",{
2851
method: "POST",

web/js/blog.js

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
(function Blog(){
1+
(function Blog(global){
22
"use strict";
33

44
var offlineIcon;
@@ -12,6 +12,8 @@
1212
initServiceWorker().catch(console.error);
1313
}
1414

15+
global.isBlogOnline = isBlogOnline;
16+
1517
document.addEventListener("DOMContentLoaded",ready,false);
1618

1719

@@ -36,6 +38,10 @@
3638
},false);
3739
}
3840

41+
function isBlogOnline() {
42+
return isOnline;
43+
}
44+
3945
async function initServiceWorker() {
4046
swRegistration = await navigator.serviceWorker.register("/sw.js",{
4147
updateViaCache: "none",
@@ -82,4 +88,4 @@
8288
}
8389
}
8490

85-
})();
91+
})(window);

web/js/sw.js

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
"use strict";
22

3-
var version = 7;
3+
importScripts("/js/external/idb-keyval-iife.min.js");
4+
5+
var version = 8;
46
var isOnline = true;
57
var isLoggedIn = false;
68
var cacheName = `ramblings-${version}`;
@@ -19,6 +21,7 @@ var urlsToCache = {
1921
"/js/home.js",
2022
"/js/login.js",
2123
"/js/add-post.js",
24+
"/js/external/idb-keyval-iife.min.js",
2225
"/images/logo.gif",
2326
"/images/offline.png"
2427
]
@@ -242,6 +245,10 @@ async function router(req) {
242245
if (req.method == "GET") {
243246
await cache.put(reqURL,res.clone());
244247
}
248+
// clear offline-backup of successful post?
249+
else if (reqURL == "/api/add-post") {
250+
await idbKeyval.del("add-post-backup");
251+
}
245252
return res;
246253
}
247254

@@ -370,6 +377,9 @@ async function router(req) {
370377
if (!res.headers.get("X-Not-Found")) {
371378
await cache.put(reqURL,res.clone());
372379
}
380+
else {
381+
await cache.delete(reqURL);
382+
}
373383
return res;
374384
}
375385

0 commit comments

Comments
 (0)