Skip to content

Commit d88b8a1

Browse files
committed
Offline-pwa update
1 parent fbc3294 commit d88b8a1

File tree

5 files changed

+29
-10
lines changed

5 files changed

+29
-10
lines changed

client/model.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ type User struct {
4242
DefaultHomePage string `json:"default_home_page"`
4343
CategoriesSortingOrder string `json:"categories_sorting_order"`
4444
MarkReadOnView bool `json:"mark_read_on_view"`
45-
CacheForOffline bool `json:"cache_for_offline"`
4645
MediaPlaybackRate float64 `json:"media_playback_rate"`
4746
BlockFilterEntryRules string `json:"block_filter_entry_rules"`
4847
KeepFilterEntryRules string `json:"keep_filter_entry_rules"`
4948
ExternalFontHosts string `json:"external_font_hosts"`
49+
CacheForOffline bool `json:"cache_for_offline"`
5050
}
5151

5252
func (u User) String() string {

internal/http/response/builder.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ func (b *Builder) Write() {
100100
func (b *Builder) writeHeaders() {
101101
b.headers["X-Content-Type-Options"] = "nosniff"
102102
b.headers["X-Frame-Options"] = "DENY"
103-
b.headers["Referrer-Policy"] = "no-referrer"
103+
b.headers["Referrer-Policy"] = "strict-origin"
104104

105105
for key, value := range b.headers {
106106
b.w.Header().Set(key, value)

internal/reader/sanitizer/sanitizer.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ func sanitizeAttributes(baseURL, tagName string, attributes []html.Attribute) ([
241241
func getExtraAttributes(tagName string) ([]string, []string) {
242242
switch tagName {
243243
case "a":
244-
return []string{"rel", "target", "referrerpolicy"}, []string{`rel="noopener noreferrer"`, `target="_blank"`, `referrerpolicy="no-referrer"`}
244+
return []string{"rel", "target", "referrerpolicy"}, []string{`rel="noopener noreferrer"`, `target="_blank"`, `referrerpolicy="strict-origin"`}
245245
case "video", "audio":
246246
return []string{"controls"}, []string{"controls"}
247247
case "iframe":

internal/template/templates/views/entry.html

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<section class="entry" data-id="{{ .entry.ID }}" aria-labelledby="page-header-title">
55
<header class="entry-header">
66
<h1 id="page-header-title" dir="auto">
7-
<a href="{{ .entry.URL | safeURL }}" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer">{{ .entry.Title }}</a>
7+
<a href="{{ .entry.URL | safeURL }}" target="_blank" rel="noopener noreferrer" referrerpolicy="strict-origin">{{ .entry.Title }}</a>
88
</h1>
99
{{ if .user }}
1010
<div class="entry-actions">
@@ -79,7 +79,7 @@ <h1 id="page-header-title" dir="auto">
7979
class="page-link"
8080
target="_blank"
8181
rel="noopener noreferrer"
82-
referrerpolicy="no-referrer"
82+
referrerpolicy="strict-origin"
8383
data-original-link="{{ .user.MarkReadOnView }}">{{ icon "external-link" }}<span class="icon-label">{{ t "entry.external_link.label" }}</span></a>
8484
</li>
8585
<li>
@@ -98,7 +98,7 @@ <h1 id="page-header-title" dir="auto">
9898
title="{{ t "entry.comments.title" }}"
9999
target="_blank"
100100
rel="noopener noreferrer"
101-
referrerpolicy="no-referrer"
101+
referrerpolicy="strict-origin"
102102
data-comments-link="true"
103103
>{{ icon "comment" }}<span class="icon-label">{{ t "entry.comments.label" }}</span></a>
104104
</li>
@@ -232,7 +232,7 @@ <h1 id="page-header-title" dir="auto">
232232
{{ end }}
233233

234234
<div class="entry-enclosure-download">
235-
<a href="{{ .URL | safeURL }}" title="{{ t "action.download" }}{{ if gt .Size 0 }} - {{ formatFileSize .Size }}{{ end }}" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer">{{ .URL | safeURL }}</a>
235+
<a href="{{ .URL | safeURL }}" title="{{ t "action.download" }}{{ if gt .Size 0 }} - {{ formatFileSize .Size }}{{ end }}" target="_blank" rel="noopener noreferrer" referrerpolicy="strict-origin">{{ .URL | safeURL }}</a>
236236
<small>{{ if gt .Size 0 }} - <strong>{{ formatFileSize .Size }}</strong>{{ end }}</small>
237237
</div>
238238
</div>

internal/ui/static/js/service_worker.js

+22-3
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,24 @@
33
const OFFLINE_VERSION = 2;
44
const CACHE_NAME = "offline";
55

6+
const cachedPages = [
7+
"/unread",
8+
"/starred",
9+
"/stylesheets",
10+
"/app",
11+
"/service-worker",
12+
"/manifest.json",
13+
"/feed/icon",
14+
"/icon",
15+
];
16+
617
self.addEventListener("install", (event) => {
718
event.waitUntil(
819
(async () => {
920
const cache = await caches.open(CACHE_NAME);
1021

1122
if (USE_CACHE) {
12-
await cache.addAll(["/", "/unread", OFFLINE_URL]);
23+
await cache.addAll(["/", "/unread", "/starred", OFFLINE_URL]);
1324
} else {
1425
// Setting {cache: 'reload'} in the new request will ensure that the
1526
// response isn't fulfilled from the HTTP cache; i.e., it will be from
@@ -49,12 +60,20 @@ async function cacheFirstWithRefresh(request) {
4960
return networkResponse;
5061
});
5162

52-
return (await cache.match(request)) || (await fetchResponsePromise);
63+
try {
64+
return (await cache.match(request)) || (await fetchResponsePromise);
65+
} catch (error) {
66+
const cache = await caches.open(CACHE_NAME);
67+
return await cache.match(OFFLINE_URL);
68+
}
5369
}
5470

5571
self.addEventListener("fetch", (event) => {
5672
if (USE_CACHE) {
57-
return event.respondWith(cacheFirstWithRefresh(event.request));
73+
const url = new URL(event.request.url);
74+
if (cachedPages.some((page) => url.pathname.startsWith(page))) {
75+
return event.respondWith(cacheFirstWithRefresh(event.request));
76+
}
5877
}
5978

6079
// We proxify requests through fetch() only if we are offline because it's slower.

0 commit comments

Comments
 (0)