diff --git a/content/install-hook-userstylesworld.js b/content/install-hook-userstylesworld.js new file mode 100644 index 00000000..a8dbd67d --- /dev/null +++ b/content/install-hook-userstylesworld.js @@ -0,0 +1,41 @@ +/* global API */// msg.js +'use strict'; + +(() => { + function watchForStylusButton() { + // Use 1 function so we won't have duplicate code around. + const stylusQuery = () => document.querySelector("a#stylus"); + + if (!stylusQuery()) { + const stylusButtonObserver = new MutationObserver(() => { + if (stylusQuery()) { + stylusButtonObserver.disconnect(); + stylusQuery().remove(); + } + }); + stylusButtonObserver.observe(document.body, {childList: true, subtree: true}); + } else { + stylusQuery().remove(); + } + } + + // Some trickery to make sure that the DOM is ready(document.body/document.head). + // And can possibly observe it for a stylus button. + + function isDOMReady() { + return document.readyState === 'complete' || document.readyState === 'interactive'; + } + + if (!isDOMReady()) { + const onReadyStateChange = () => { + if (isDOMReady()) { + document.removeEventListener('readystatechange', onReadyStateChange); + watchForStylusButton(); + } + }; + document.addEventListener('readystatechange', onReadyStateChange); + } else { + watchForStylusButton(); + } + +})() diff --git a/manifest.json b/manifest.json index aafb0dcc..b8bdce67 100644 --- a/manifest.json +++ b/manifest.json @@ -89,6 +89,12 @@ "run_at": "document_start", "all_frames": false, "js": ["content/install-hook-openusercss.js"] + }, + { + "matches": ["https://userstyles.world/style/*"], + "run_at": "document_start", + "all_frames": false, + "js": ["content/install-hook-userstylesworld.js"] } ], "browser_action": {