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", |       "env", | ||||||
|       { |       { | ||||||
|  |         "debug": true, | ||||||
|  |         "exclude": ["transform-async-to-generator", "transform-regenerator"], | ||||||
|         "loose": true, |         "loose": true, | ||||||
|         "modules": false, |         "modules": false, | ||||||
|         "targets": { |         "targets": { | ||||||
|  |  | ||||||
|  | @ -17,7 +17,11 @@ module Localized | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def default_locale |   def default_locale | ||||||
|     request_locale || I18n.default_locale |     if ENV['DEFAULT_LOCALE'].present? | ||||||
|  |       I18n.default_locale | ||||||
|  |     else | ||||||
|  |       request_locale || I18n.default_locale | ||||||
|  |     end | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def request_locale |   def request_locale | ||||||
|  |  | ||||||
|  | @ -1,5 +1,9 @@ | ||||||
| import './web_push_notifications'; | import './web_push_notifications'; | ||||||
| 
 | 
 | ||||||
|  | function openCache() { | ||||||
|  |   return caches.open('mastodon-web'); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| function fetchRoot() { | function fetchRoot() { | ||||||
|   return fetch('/', { credentials: 'include' }); |   return fetch('/', { credentials: 'include' }); | ||||||
| } | } | ||||||
|  | @ -7,10 +11,7 @@ function fetchRoot() { | ||||||
| // Cause a new version of a registered Service Worker to replace an existing one
 | // 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.
 | // that is already installed, and replace the currently active worker on open pages.
 | ||||||
| self.addEventListener('install', function(event) { | self.addEventListener('install', function(event) { | ||||||
|   const promises = Promise.all([caches.open('mastodon-web'), fetchRoot()]); |   event.waitUntil(Promise.all([openCache(), fetchRoot()]).then(([cache, root]) => cache.put('/', root))); | ||||||
|   const asyncAdd = promises.then(([cache, root]) => cache.put('/', root)); |  | ||||||
| 
 |  | ||||||
|   event.waitUntil(asyncAdd); |  | ||||||
| }); | }); | ||||||
| self.addEventListener('activate', function(event) { | self.addEventListener('activate', function(event) { | ||||||
|   event.waitUntil(self.clients.claim()); |   event.waitUntil(self.clients.claim()); | ||||||
|  | @ -19,12 +20,29 @@ self.addEventListener('fetch', function(event) { | ||||||
|   const url = new URL(event.request.url); |   const url = new URL(event.request.url); | ||||||
| 
 | 
 | ||||||
|   if (url.pathname.startsWith('/web/')) { |   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) { |       if (response.ok) { | ||||||
|         return response; |         const cache = await asyncCache; | ||||||
|  |         await cache.put('/', response); | ||||||
|  |         return response.clone(); | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       throw null; |       throw null; | ||||||
|     }).catch(() => caches.match('/'))); |     }).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