Add preference to bypass service worker cache

pull/1022/head
Jasper van Merle 6 years ago
parent ec8616e289
commit 0e9aa8847b

@ -5,6 +5,7 @@ class app.Settings
'manualUpdate' 'manualUpdate'
'fastScroll' 'fastScroll'
'arrowScroll' 'arrowScroll'
'bypassCache'
'docs' 'docs'
'dark' 'dark'
'layout' 'layout'
@ -91,6 +92,11 @@ class app.Settings
@set 'size', value @set 'size', value
return return
setBypassCache: (value) ->
@set 'bypassCache', value
app.serviceWorker?.updateInBackground()
return
dump: -> dump: ->
@store.dump() @store.dump()

@ -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 <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> <small>Tip: drag the edge of the sidebar to resize it.</small>
</label> </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>
</div> </div>

@ -14,6 +14,7 @@ class app.views.SettingsPage extends app.View
settings.dark = app.settings.get('dark') settings.dark = app.settings.get('dark')
settings.smoothScroll = !app.settings.get('fastScroll') settings.smoothScroll = !app.settings.get('fastScroll')
settings.arrowScroll = app.settings.get('arrowScroll') 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[layout] = app.settings.hasLayout(layout) for layout in app.settings.LAYOUTS
settings settings
@ -32,6 +33,10 @@ class app.views.SettingsPage extends app.View
app.settings.set('fastScroll', !enable) app.settings.set('fastScroll', !enable)
return return
toggleBypassCache: (enable) ->
app.settings.setBypassCache(!!enable)
return
toggle: (name, enable) -> toggle: (name, enable) ->
app.settings.set(name, enable) app.settings.set(name, enable)
return return
@ -75,6 +80,8 @@ class app.views.SettingsPage extends app.View
@toggleSmoothScroll input.checked @toggleSmoothScroll input.checked
when 'import' when 'import'
@import input.files[0], input @import input.files[0], input
when 'bypassCache'
@toggleBypassCache input.checked
else else
@toggle input.name, input.checked @toggle input.name, input.checked
return return

@ -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:** 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`) 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). 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`. 3. Check that the scraper is listed in `thor docs:list`.

@ -220,6 +220,10 @@ class App < Sinatra::Application
app_theme == 'dark' app_theme == 'dark'
end end
def bypass_cache?
!memoized_cookies['bypassCache'].nil?
end
def redirect_via_js(path) def redirect_via_js(path)
response.set_cookie :initial_path, value: path, expires: Time.now + 15, path: '/' response.set_cookie :initial_path, value: path, expires: Time.now + 15, path: '/'
redirect '/', 302 redirect '/', 302

@ -31,13 +31,16 @@ self.addEventListener('activate', event => {
event.waitUntil((async () => { event.waitUntil((async () => {
const keys = await caches.keys(); const keys = await caches.keys();
const jobs = keys.map(key => key !== cacheName ? caches.delete(key) : Promise.resolve()); const jobs = keys.map(key => key !== cacheName ? caches.delete(key) : Promise.resolve());
return await Promise.all(jobs); return Promise.all(jobs);
})()); })());
}); });
<%# Handle HTTP requests %> <%# Handle HTTP requests %>
self.addEventListener('fetch', event => { self.addEventListener('fetch', event => {
event.respondWith((async () => { event.respondWith((async () => {
<% if bypass_cache? %>
return fetch(event.request);
<% else %>
const cachedResponse = await caches.match(event.request); const cachedResponse = await caches.match(event.request);
if (cachedResponse) return cachedResponse; if (cachedResponse) return cachedResponse;
@ -56,5 +59,6 @@ self.addEventListener('fetch', event => {
throw err; throw err;
} }
<% end %>
})()); })());
}); });

Loading…
Cancel
Save