|
1 | 1 | export default async function ({ feature, console }) {
|
| 2 | + let observerEnabled = false; |
| 3 | + |
2 | 4 | const miniplayerElement = document.createElement('div');
|
3 | 5 | miniplayerElement.className = 'ste-project-miniplayer';
|
4 | 6 | document.body.appendChild(miniplayerElement);
|
5 |
| - await ScratchTools.waitForElement("div.guiPlayer") |
6 |
| - const guiPlayer = document.getElementsByClassName("guiPlayer")[0] |
7 |
| - const projectHeader = document.querySelector('.description-block'); |
8 |
| - const title = projectHeader.closest('.flex-row.project-notes'); |
| 7 | + |
| 8 | + await ScratchTools.waitForElements("div.guiPlayer", function(element) { |
| 9 | + if (observerEnabled === false) createObserver(element) |
| 10 | + }); |
| 11 | + function createObserver(guiPlayer) { |
| 12 | + const projectHeader = document.querySelector('.description-block'); |
| 13 | + const title = projectHeader.closest('.flex-row.project-notes'); |
| 14 | + |
| 15 | + const callback = (entries, observer) => { |
| 16 | + const editorPlayer = document.querySelector(".gui_stage-and-target-wrapper_Qg4hA .stage-wrapper_stage-wrapper_odn2t"); |
| 17 | + entries.forEach(entry => { |
| 18 | + if (entry.isIntersecting) { |
| 19 | + miniplayerElement.style.display = 'none'; |
| 20 | + title.insertAdjacentElement('beforebegin', guiPlayer); |
| 21 | + } else if (editorPlayer) { |
| 22 | + miniplayerElement.style.display = 'none'; |
| 23 | + observerObject.disconnect() |
| 24 | + observerEnabled = false; |
| 25 | + } else { |
| 26 | + miniplayerElement.style.display = 'block'; |
| 27 | + miniplayerElement.appendChild(guiPlayer); |
| 28 | + } |
| 29 | + }); |
| 30 | + }; |
| 31 | + const observerObject = new IntersectionObserver(callback); |
| 32 | + const targetArea = document.querySelector("div.preview .inner .project-notes") |
| 33 | + observerObject.observe(targetArea); |
| 34 | + observerEnabled = true; |
| 35 | + } |
9 | 36 |
|
10 | 37 | function updateSetting (key, value) {
|
11 | 38 | switch (key) {
|
@@ -49,24 +76,6 @@ export default async function ({ feature, console }) {
|
49 | 76 | updateSetting('position-bottom', await feature.settings.get("position-bottom"));
|
50 | 77 | updateSetting('opacity', await feature.settings.get("opacity"));
|
51 | 78 |
|
52 |
| - const observerOptions = { |
53 |
| - root: document |
54 |
| - }; |
55 |
| - const callback = (entries, observer) => { |
56 |
| - entries.forEach(entry => { |
57 |
| - if (entry.isIntersecting) { |
58 |
| - miniplayerElement.style.display = 'none'; |
59 |
| - title.insertAdjacentElement('beforebegin', guiPlayer); |
60 |
| - } else { |
61 |
| - miniplayerElement.style.display = 'block'; |
62 |
| - miniplayerElement.appendChild(guiPlayer); |
63 |
| - } |
64 |
| - }); |
65 |
| - }; |
66 |
| - const observerObject = new IntersectionObserver(callback, observerOptions); |
67 |
| - const targetArea = document.querySelector("div.preview .inner .project-notes") |
68 |
| - observerObject.observe(targetArea); |
69 |
| - |
70 | 79 | feature.settings.addEventListener("changed", function({ key, value }) {
|
71 | 80 | updateSetting(key, value)
|
72 | 81 | })
|
|
0 commit comments