Skip to content

Commit 0e9aa88

Browse files
committed
Add preference to bypass service worker cache
1 parent ec8616e commit 0e9aa88

6 files changed

Lines changed: 28 additions & 1 deletion

File tree

assets/javascripts/app/settings.coffee

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ class app.Settings
55
'manualUpdate'
66
'fastScroll'
77
'arrowScroll'
8+
'bypassCache'
89
'docs'
910
'dark'
1011
'layout'
@@ -91,6 +92,11 @@ class app.Settings
9192
@set 'size', value
9293
return
9394

95+
setBypassCache: (value) ->
96+
@set 'bypassCache', value
97+
app.serviceWorker?.updateInBackground()
98+
return
99+
94100
dump: ->
95101
@store.dump()
96102

assets/javascripts/templates/pages/settings_tmpl.coffee

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ app.templates.settingsPage = (settings) -> """
1515
<input type="checkbox" form="settings" name="layout" value="_sidebar-hidden"#{if settings['_sidebar-hidden'] then ' checked' else ''}>Automatically hide and show the sidebar
1616
<small>Tip: drag the edge of the sidebar to resize it.</small>
1717
</label>
18+
<label class="_settings-label">
19+
<input type="checkbox" form="settings" name="bypassCache" value="1"#{if settings.bypassCache then ' checked' else ''}>Bypass Service Worker cache
20+
<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>
21+
</label>
1822
</div>
1923
</div>
2024

assets/javascripts/views/content/settings_page.coffee

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class app.views.SettingsPage extends app.View
1414
settings.dark = app.settings.get('dark')
1515
settings.smoothScroll = !app.settings.get('fastScroll')
1616
settings.arrowScroll = app.settings.get('arrowScroll')
17+
settings.bypassCache = app.settings.get('bypassCache')
1718
settings[layout] = app.settings.hasLayout(layout) for layout in app.settings.LAYOUTS
1819
settings
1920

@@ -32,6 +33,10 @@ class app.views.SettingsPage extends app.View
3233
app.settings.set('fastScroll', !enable)
3334
return
3435

36+
toggleBypassCache: (enable) ->
37+
app.settings.setBypassCache(!!enable)
38+
return
39+
3540
toggle: (name, enable) ->
3641
app.settings.set(name, enable)
3742
return
@@ -75,6 +80,8 @@ class app.views.SettingsPage extends app.View
7580
@toggleSmoothScroll input.checked
7681
when 'import'
7782
@import input.files[0], input
83+
when 'bypassCache'
84+
@toggleBypassCache input.checked
7885
else
7986
@toggle input.name, input.checked
8087
return

docs/adding-docs.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ Adding a documentation may look like a daunting task but once you get the hang o
22

33
**Note:** please read the [contributing guidelines](../.github/CONTRIBUTING.md) before submitting a new documentation.
44

5+
**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.
6+
57
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`)
68
2. Add the appropriate class attributes and filter options (see the [Scraper Reference](./scraper-reference.md) page).
79
3. Check that the scraper is listed in `thor docs:list`.

lib/app.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,10 @@ def dark_theme?
220220
app_theme == 'dark'
221221
end
222222

223+
def bypass_cache?
224+
!memoized_cookies['bypassCache'].nil?
225+
end
226+
223227
def redirect_via_js(path)
224228
response.set_cookie :initial_path, value: path, expires: Time.now + 15, path: '/'
225229
redirect '/', 302

views/service-worker.js.erb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,16 @@ self.addEventListener('activate', event => {
3131
event.waitUntil((async () => {
3232
const keys = await caches.keys();
3333
const jobs = keys.map(key => key !== cacheName ? caches.delete(key) : Promise.resolve());
34-
return await Promise.all(jobs);
34+
return Promise.all(jobs);
3535
})());
3636
});
3737

3838
<%# Handle HTTP requests %>
3939
self.addEventListener('fetch', event => {
4040
event.respondWith((async () => {
41+
<% if bypass_cache? %>
42+
return fetch(event.request);
43+
<% else %>
4144
const cachedResponse = await caches.match(event.request);
4245
if (cachedResponse) return cachedResponse;
4346

@@ -56,5 +59,6 @@ self.addEventListener('fetch', event => {
5659

5760
throw err;
5861
}
62+
<% end %>
5963
})());
6064
});

0 commit comments

Comments
 (0)