[devdocsgjs/main: 642/1867] Add preference to bypass service worker cache
- From: Andy Holmes <andyholmes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [devdocsgjs/main: 642/1867] Add preference to bypass service worker cache
- Date: Fri, 19 Nov 2021 23:47:21 +0000 (UTC)
commit 0e9aa8847b3a205dfed240c4f82292508e44cf6b
Author: Jasper van Merle <jaspervmerle gmail com>
Date: Sun Jul 7 14:11:39 2019 +0200
Add preference to bypass service worker cache
assets/javascripts/app/settings.coffee | 6 ++++++
assets/javascripts/templates/pages/settings_tmpl.coffee | 4 ++++
assets/javascripts/views/content/settings_page.coffee | 7 +++++++
docs/adding-docs.md | 2 ++
lib/app.rb | 4 ++++
views/service-worker.js.erb | 6 +++++-
6 files changed, 28 insertions(+), 1 deletion(-)
---
diff --git a/assets/javascripts/app/settings.coffee b/assets/javascripts/app/settings.coffee
index daf3379a..7b731e0b 100644
--- a/assets/javascripts/app/settings.coffee
+++ b/assets/javascripts/app/settings.coffee
@@ -5,6 +5,7 @@ class app.Settings
'manualUpdate'
'fastScroll'
'arrowScroll'
+ 'bypassCache'
'docs'
'dark'
'layout'
@@ -91,6 +92,11 @@ class app.Settings
@set 'size', value
return
+ setBypassCache: (value) ->
+ @set 'bypassCache', value
+ app.serviceWorker?.updateInBackground()
+ return
+
dump: ->
@store.dump()
diff --git a/assets/javascripts/templates/pages/settings_tmpl.coffee
b/assets/javascripts/templates/pages/settings_tmpl.coffee
index 1d439edb..4a2066f1 100644
--- a/assets/javascripts/templates/pages/settings_tmpl.coffee
+++ b/assets/javascripts/templates/pages/settings_tmpl.coffee
@@ -15,6 +15,10 @@ app.templates.settingsPage = (settings) -> """
<input type="checkbox" form="settings" name="layout" value="_sidebar-hidden"#{if
settings['_sidebar-hidden'] then ' checked' else ''}>Automatically hide and show the sidebar
<small>Tip: drag the edge of the sidebar to resize it.</small>
</label>
+ <label class="_settings-label">
+ <input type="checkbox" form="settings" name="bypassCache" value="1"#{if settings.bypassCache then '
checked' else ''}>Bypass Service Worker cache
+ <small>When this is checked, the Service Worker will always fetch the latest version of requested
files. Useful when making changes to the DevDocs source code.</small>
+ </label>
</div>
</div>
diff --git a/assets/javascripts/views/content/settings_page.coffee
b/assets/javascripts/views/content/settings_page.coffee
index af2e9a9d..96904a13 100644
--- a/assets/javascripts/views/content/settings_page.coffee
+++ b/assets/javascripts/views/content/settings_page.coffee
@@ -14,6 +14,7 @@ class app.views.SettingsPage extends app.View
settings.dark = app.settings.get('dark')
settings.smoothScroll = !app.settings.get('fastScroll')
settings.arrowScroll = app.settings.get('arrowScroll')
+ settings.bypassCache = app.settings.get('bypassCache')
settings[layout] = app.settings.hasLayout(layout) for layout in app.settings.LAYOUTS
settings
@@ -32,6 +33,10 @@ class app.views.SettingsPage extends app.View
app.settings.set('fastScroll', !enable)
return
+ toggleBypassCache: (enable) ->
+ app.settings.setBypassCache(!!enable)
+ return
+
toggle: (name, enable) ->
app.settings.set(name, enable)
return
@@ -75,6 +80,8 @@ class app.views.SettingsPage extends app.View
@toggleSmoothScroll input.checked
when 'import'
@import input.files[0], input
+ when 'bypassCache'
+ @toggleBypassCache input.checked
else
@toggle input.name, input.checked
return
diff --git a/docs/adding-docs.md b/docs/adding-docs.md
index dfc96cb1..4b34b045 100644
--- a/docs/adding-docs.md
+++ b/docs/adding-docs.md
@@ -2,6 +2,8 @@ Adding a documentation may look like a daunting task but once you get the hang o
**Note:** please read the [contributing guidelines](../.github/CONTRIBUTING.md) before submitting a new
documentation.
+**Note:** when editing any of the files in the `assets` directory or the `public` directory, you'll have to
bypass the service worker cache. To do this, go to the Preferences page on your local instance of DevDocs,
check "Bypass Service Worker cache" and refresh the page.
+
1. Create a subclass of `Docs::UrlScraper` or `Docs::FileScraper` in the `lib/docs/scrapers/` directory. Its
name should be the [PascalCase](http://api.rubyonrails.org/classes/String.html#method-i-camelize) equivalent
of the filename (e.g. `my_doc` → `MyDoc`)
2. Add the appropriate class attributes and filter options (see the [Scraper
Reference](./scraper-reference.md) page).
3. Check that the scraper is listed in `thor docs:list`.
diff --git a/lib/app.rb b/lib/app.rb
index 18dbe901..d6d30326 100644
--- a/lib/app.rb
+++ b/lib/app.rb
@@ -220,6 +220,10 @@ class App < Sinatra::Application
app_theme == 'dark'
end
+ def bypass_cache?
+ !memoized_cookies['bypassCache'].nil?
+ end
+
def redirect_via_js(path)
response.set_cookie :initial_path, value: path, expires: Time.now + 15, path: '/'
redirect '/', 302
diff --git a/views/service-worker.js.erb b/views/service-worker.js.erb
index 498ef716..e9028f4d 100644
--- a/views/service-worker.js.erb
+++ b/views/service-worker.js.erb
@@ -31,13 +31,16 @@ self.addEventListener('activate', event => {
event.waitUntil((async () => {
const keys = await caches.keys();
const jobs = keys.map(key => key !== cacheName ? caches.delete(key) : Promise.resolve());
- return await Promise.all(jobs);
+ return Promise.all(jobs);
})());
});
<%# Handle HTTP requests %>
self.addEventListener('fetch', event => {
event.respondWith((async () => {
+ <% if bypass_cache? %>
+ return fetch(event.request);
+ <% else %>
const cachedResponse = await caches.match(event.request);
if (cachedResponse) return cachedResponse;
@@ -56,5 +59,6 @@ self.addEventListener('fetch', event => {
throw err;
}
+ <% end %>
})());
});
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]