[Chrome] restore the install/update button functionality on USO
resolves #354 in Chrome only since the USO site is broken in FF (the site checks for chrome-extension:// URL which should be moz-extension://)
This commit is contained in:
		
							parent
							
								
									d1f35a15e3
								
							
						
					
					
						commit
						d4b4b07ab3
					
				|  | @ -15,17 +15,32 @@ | |||
| 
 | ||||
|   chrome.runtime.onMessage.addListener(onMessage); | ||||
| 
 | ||||
|   let gotBody = false; | ||||
|   new MutationObserver((mutations, observer) => { | ||||
|     if (document.body) { | ||||
|       observer.disconnect(); | ||||
|     if (!gotBody) { | ||||
|       if (!document.body) return; | ||||
|       gotBody = true; | ||||
|       // TODO: remove the following statement when USO pagination title is fixed
 | ||||
|       document.title = document.title.replace(/^(\d+)&\w+=/, '#$1: '); | ||||
|       chrome.runtime.sendMessage({ | ||||
|         method: 'getStyles', | ||||
|         md5Url: getMeta('stylish-md5-url') || location.href | ||||
|       }, checkUpdatability); | ||||
|       return; | ||||
|     } | ||||
|   }).observe(document.documentElement, {childList: true}); | ||||
|     if (document.getElementById('install_button')) { | ||||
|       observer.disconnect(); | ||||
|       onDOMready().then(() => { | ||||
|         requestAnimationFrame(() => { | ||||
|           sendEvent(sendEvent.lastEvent); | ||||
|         }); | ||||
|       }); | ||||
|       return; | ||||
|     } | ||||
|   }).observe(document.documentElement, { | ||||
|     childList: true, | ||||
|     subtree: true, | ||||
|   }); | ||||
| 
 | ||||
|   function onMessage(msg, sender, sendResponse) { | ||||
|     switch (msg.method) { | ||||
|  | @ -58,7 +73,7 @@ | |||
|       detail: installedStyle && installedStyle.updateUrl, | ||||
|     })); | ||||
|     if (!installedStyle) { | ||||
|       sendEvent('styleCanBeInstalledChrome'); | ||||
|       sendEvent({type: 'styleCanBeInstalledChrome'}); | ||||
|       return; | ||||
|     } | ||||
|     const md5Url = getMeta('stylish-md5-url'); | ||||
|  | @ -74,29 +89,32 @@ | |||
|     } | ||||
| 
 | ||||
|     function reportUpdatable(isUpdatable) { | ||||
|       sendEvent( | ||||
|         isUpdatable | ||||
|       sendEvent({ | ||||
|         type: isUpdatable | ||||
|           ? 'styleCanBeUpdatedChrome' | ||||
|           : 'styleAlreadyInstalledChrome', | ||||
|         { | ||||
|         detail: { | ||||
|           updateUrl: installedStyle.updateUrl | ||||
|         } | ||||
|       ); | ||||
|         }, | ||||
|       }); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
|   function sendEvent(type, detail = null) { | ||||
|   function sendEvent(event) { | ||||
|     sendEvent.lastEvent = event; | ||||
|     let {type, detail = null} = event; | ||||
|     if (FIREFOX) { | ||||
|       type = type.replace('Chrome', ''); | ||||
|     } else if (OPERA || VIVALDI) { | ||||
|       type = type.replace('Chrome', 'Opera'); | ||||
|     } | ||||
|     detail = {detail}; | ||||
|     if (typeof cloneInto !== 'undefined') { | ||||
|       // Firefox requires explicit cloning, however USO can't process our messages anyway
 | ||||
|       // because USO tries to use a global "event" variable deprecated in Firefox
 | ||||
|       detail = cloneInto(detail, document); | ||||
|       detail = cloneInto({detail}, document); | ||||
|     } else { | ||||
|       detail = {detail}; | ||||
|     } | ||||
|     onDOMready().then(() => { | ||||
|       document.dispatchEvent(new CustomEvent(type, detail)); | ||||
|  | @ -164,7 +182,7 @@ | |||
|             if (!isNew && style.updateUrl.includes('?')) { | ||||
|               enableUpdateButton(true); | ||||
|             } else { | ||||
|               sendEvent('styleInstalledChrome'); | ||||
|               sendEvent({type: 'styleInstalledChrome'}); | ||||
|             } | ||||
|           } | ||||
|         ); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user