Skip to content

Commit a5a81e3

Browse files
authored
fix: update loopyLoop to handle Spotify DOM restructuring (#3724)
1 parent 145ea33 commit a5a81e3

1 file changed

Lines changed: 20 additions & 23 deletions

File tree

Extensions/loopyLoop.js

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55

66
/// <reference path="../globals.d.ts" />
77

8-
(async function LoopyLoop() {
9-
const bar = document.querySelector(".playback-bar .progress-bar");
10-
if (!(bar && Spicetify.React)) {
8+
(function LoopyLoop() {
9+
const playbackBar = document.querySelector(".playback-bar");
10+
const progressContainer = playbackBar?.querySelector(".playback-progressbar-container");
11+
const rangeInput = progressContainer?.querySelector('input[type="range"]');
12+
const bar = rangeInput?.closest("label")?.nextElementSibling;
13+
if (!(bar && Spicetify.Player)) {
1114
setTimeout(LoopyLoop, 100);
1215
return;
1316
}
14-
await new Promise((res) => Spicetify.Events.webpackLoaded.on(res));
1517

1618
const style = document.createElement("style");
1719
style.innerHTML = `
@@ -76,22 +78,17 @@
7678
Spicetify.Player.addEventListener("songchange", reset);
7779

7880
function createMenuItem(title, callback) {
79-
const wrapper = document.createElement("div");
80-
Spicetify.ReactDOM.render(
81-
Spicetify.React.createElement(
82-
Spicetify.ReactComponent.MenuItem,
83-
{
84-
onClick: () => {
85-
contextMenu.hidden = true;
86-
callback?.();
87-
},
88-
},
89-
title
90-
),
91-
wrapper
92-
);
93-
94-
return wrapper;
81+
const item = document.createElement("li");
82+
item.setAttribute("role", "menuitem");
83+
const button = document.createElement("button");
84+
button.classList.add("main-contextMenu-menuItemButton");
85+
button.textContent = title;
86+
button.onclick = () => {
87+
contextMenu.hidden = true;
88+
callback?.();
89+
};
90+
item.append(button);
91+
return item;
9592
}
9693

9794
const startBtn = createMenuItem("Set start", () => {
@@ -122,9 +119,9 @@
122119
contextMenu.hidden = true;
123120
});
124121

125-
bar.oncontextmenu = (event) => {
126-
const { x, width } = bar.firstElementChild.getBoundingClientRect();
127-
mouseOnBarPercent = (event.clientX - x) / width;
122+
progressContainer.oncontextmenu = (event) => {
123+
const { x, width } = bar.getBoundingClientRect();
124+
mouseOnBarPercent = Math.max(0, Math.min(1, (event.clientX - x) / width));
128125
contextMenu.style.transform = `translate(${event.clientX}px,${event.clientY - contextMenuHeight}px)`;
129126
contextMenu.hidden = false;
130127
event.preventDefault();

0 commit comments

Comments
 (0)