Merge remote-tracking branch 'tootsuite/master' into glitchsoc/master
This commit is contained in:
		
						commit
						f2a9a13b32
					
				
					 3 changed files with 31 additions and 7 deletions
				
			
		
							
								
								
									
										2
									
								
								.babelrc
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								.babelrc
									
									
									
									
									
								
							|  | @ -4,6 +4,8 @@ | |||
|     [ | ||||
|       "env", | ||||
|       { | ||||
|         "debug": true, | ||||
|         "exclude": ["transform-async-to-generator", "transform-regenerator"], | ||||
|         "loose": true, | ||||
|         "modules": false, | ||||
|         "targets": { | ||||
|  |  | |||
|  | @ -17,8 +17,12 @@ module Localized | |||
|   end | ||||
| 
 | ||||
|   def default_locale | ||||
|     if ENV['DEFAULT_LOCALE'].present? | ||||
|       I18n.default_locale | ||||
|     else | ||||
|       request_locale || I18n.default_locale | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def request_locale | ||||
|     preferred_locale || compatible_locale | ||||
|  |  | |||
|  | @ -1,5 +1,9 @@ | |||
| import './web_push_notifications'; | ||||
| 
 | ||||
| function openCache() { | ||||
|   return caches.open('mastodon-web'); | ||||
| } | ||||
| 
 | ||||
| function fetchRoot() { | ||||
|   return fetch('/', { credentials: 'include' }); | ||||
| } | ||||
|  | @ -7,10 +11,7 @@ function fetchRoot() { | |||
| // Cause a new version of a registered Service Worker to replace an existing one
 | ||||
| // that is already installed, and replace the currently active worker on open pages.
 | ||||
| self.addEventListener('install', function(event) { | ||||
|   const promises = Promise.all([caches.open('mastodon-web'), fetchRoot()]); | ||||
|   const asyncAdd = promises.then(([cache, root]) => cache.put('/', root)); | ||||
| 
 | ||||
|   event.waitUntil(asyncAdd); | ||||
|   event.waitUntil(Promise.all([openCache(), fetchRoot()]).then(([cache, root]) => cache.put('/', root))); | ||||
| }); | ||||
| self.addEventListener('activate', function(event) { | ||||
|   event.waitUntil(self.clients.claim()); | ||||
|  | @ -19,12 +20,29 @@ self.addEventListener('fetch', function(event) { | |||
|   const url = new URL(event.request.url); | ||||
| 
 | ||||
|   if (url.pathname.startsWith('/web/')) { | ||||
|     event.respondWith(fetchRoot().then(response => { | ||||
|     const asyncResponse = fetchRoot(); | ||||
|     const asyncCache = openCache(); | ||||
| 
 | ||||
|     event.respondWith(asyncResponse.then(async response => { | ||||
|       if (response.ok) { | ||||
|         return response; | ||||
|         const cache = await asyncCache; | ||||
|         await cache.put('/', response); | ||||
|         return response.clone(); | ||||
|       } | ||||
| 
 | ||||
|       throw null; | ||||
|     }).catch(() => caches.match('/'))); | ||||
|   } else if (url.pathname === '/auth/sign_out') { | ||||
|     const asyncResponse = fetch(event.request); | ||||
|     const asyncCache = openCache(); | ||||
| 
 | ||||
|     event.respondWith(asyncResponse.then(async response => { | ||||
|       if (response.ok || response.type === 'opaqueredirect') { | ||||
|         const cache = await asyncCache; | ||||
|         await cache.delete('/'); | ||||
|       } | ||||
| 
 | ||||
|       return response; | ||||
|     })); | ||||
|   } | ||||
| }); | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue