20ff28b2fb45217fcf2b30d41f2e2101c82ee15b

Author
TheEdgeOfRage <git@theedgeofrage.com>
Committer
TheEdgeOfRage <git@theedgeofrage.com>
Date

Message

Add PWA support

Diff

This diff is truncated to protect this page.

  1diff --git a/assets/index.js b/assets/index.js
  2index a81869b6ee8d3aa66e8cf48e8432e578eebf5ad9..c62e9896555855b717a39aa1fe7ee2f1f0de6099 100644
  3--- a/assets/index.js
  4+++ b/assets/index.js
  5@@ -65,3 +65,11 @@ function subscribeHandler(event) {
  6 		field.reportValidity();
  7 	}
  8 }
  9+
 10+if ("serviceWorker" in navigator) {
 11+	navigator.serviceWorker.register("/assets/sw.js").then((registration) => {
 12+		console.log("Service Worker registered with scope:", registration.scope);
 13+	}).catch((error) => {
 14+		console.log("Service Worker registration failed:", error);
 15+	});
 16+}
 17diff --git a/assets/manifest.json b/assets/manifest.json
 18new file mode 100644
 19index 0000000000000000000000000000000000000000..632b15acccf4cd6b80950415765afaedb4ec8271
 20--- /dev/null
 21+++ b/assets/manifest.json
 22@@ -0,0 +1,18 @@
 23+{
 24+	"name": "Ytrssil",
 25+	"short_name": "Ytrssil",
 26+	"description": "YouTube RSS subscription feed app",
 27+	"start_url": "/",
 28+	"display": "standalone",
 29+	"background_color": "#212529",
 30+	"theme_color": "#212529",
 31+	"orientation": "portrait-primary",
 32+	"icons": [
 33+		{
 34+			"src": "/assets/ytrssil-512.png",
 35+			"sizes": "512x512",
 36+			"type": "image/png",
 37+			"purpose": "any maskable"
 38+		}
 39+	]
 40+}
 41diff --git a/assets/sw.js b/assets/sw.js
 42new file mode 100644
 43index 0000000000000000000000000000000000000000..4b146105d75ecef93dc068b6a5f9816adf1a4ff4
 44--- /dev/null
 45+++ b/assets/sw.js
 46@@ -0,0 +1,44 @@
 47+const CACHE_NAME = 'ytrssil-v1';
 48+const ASSETS_TO_CACHE = [
 49+	'/',
 50+	'/assets/vendor/bootstrap.min.css',
 51+	'/assets/vendor/bootstrap-icons.min.css',
 52+	'/assets/vendor/bootstrap.bundle.min.js',
 53+	'/assets/vendor/htmx.min.js',
 54+	'/assets/vendor/fuse.js',
 55+	'/assets/index.js',
 56+	'/assets/ytrssil.png',
 57+	'/assets/manifest.json'
 58+];
 59+
 60+self.addEventListener('install', (event) => {
 61+	event.waitUntil(
 62+		caches.open(CACHE_NAME).then((cache) => {
 63+			return cache.addAll(ASSETS_TO_CACHE);
 64+		})
 65+	);
 66+	self.skipWaiting();
 67+});
 68+
 69+self.addEventListener('activate', (event) => {
 70+	event.waitUntil(
 71+		caches.keys().then((cacheNames) => {
 72+			return Promise.all(
 73+				cacheNames.map((cacheName) => {
 74+					if (cacheName !== CACHE_NAME) {
 75+						return caches.delete(cacheName);
 76+					}
 77+				})
 78+			);
 79+		})
 80+	);
 81+	self.clients.claim();
 82+});
 83+
 84+self.addEventListener('fetch', (event) => {
 85+	event.respondWith(
 86+		caches.match(event.request).then((response) => {
 87+			return response || fetch(event.request);
 88+		})
 89+	);
 90+});
 91diff --git a/assets/ytrssil.png b/assets/ytrssil.png
 92index 335bf88afd70537e1c5d29ce1fe58f0022fde862..ad5ab3238555a4395cbf2fbe8e25ea2da2e15936 100644
 93Binary files a/assets/ytrssil.png and b/assets/ytrssil.png differ
 94diff --git a/pages/main.templ b/pages/main.templ
 95index 0a8cbf681b52a466dbffaec2038ecb4255e9a041..5e6066c1607c3cf9ebc17842664cad3bf5734fff 100644
 96--- a/pages/main.templ
 97+++ b/pages/main.templ
 98@@ -7,7 +7,11 @@ templ BaseLayout(title string) {
 99 			<title>{ title }</title>
100 			<meta charset="utf-8"/>
101 			<meta name="viewport" content="width=device-width, initial-scale=1"/>
102+			<meta name="description" content="YouTube RSS subscription feed app"/>
103+			<meta name="theme-color" content="#212529"/>
104 			<link rel="icon" type="image/png" href="/assets/ytrssil.png"/>
105+			<link rel="apple-touch-icon" href="/assets/ytrssil.png"/>
106+			<link rel="manifest" href="/assets/manifest.json"/>
107 			<link rel="stylesheet" href="/assets/vendor/bootstrap.min.css"/>
108 			<link rel="stylesheet" href="/assets/vendor/bootstrap-icons.min.css"/>
109 			<style>
110diff --git a/pages/main_templ.go b/pages/main_templ.go
111index 2afb136a3f297e06a262f6425d6cd796c3186e6f..8b39fb0635b20110ef1d3891e48979d272f6f8c7 100644
112--- a/pages/main_templ.go
113+++ b/pages/main_templ.go
114@@ -42,7 +42,7 @@ func BaseLayout(title string) templ.Component {
115 		if templ_7745c5c3_Err != nil {
116 			return templ_7745c5c3_Err
117 		}