Skip to content

Commit cb6929d

Browse files
committed
update script.js
1 parent 1c99f21 commit cb6929d

File tree

1 file changed

+31
-22
lines changed

1 file changed

+31
-22
lines changed

features/project-miniplayer/script.js

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,38 @@
11
export default async function ({ feature, console }) {
2+
let observerEnabled = false;
3+
24
const miniplayerElement = document.createElement('div');
35
miniplayerElement.className = 'ste-project-miniplayer';
46
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+
}
936

1037
function updateSetting (key, value) {
1138
switch (key) {
@@ -49,24 +76,6 @@ export default async function ({ feature, console }) {
4976
updateSetting('position-bottom', await feature.settings.get("position-bottom"));
5077
updateSetting('opacity', await feature.settings.get("opacity"));
5178

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-
7079
feature.settings.addEventListener("changed", function({ key, value }) {
7180
updateSetting(key, value)
7281
})

0 commit comments

Comments
 (0)