|
5 | 5 |
|
6 | 6 | /// <reference path="../globals.d.ts" /> |
7 | 7 |
|
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)) { |
11 | 14 | setTimeout(LoopyLoop, 100); |
12 | 15 | return; |
13 | 16 | } |
14 | | - await new Promise((res) => Spicetify.Events.webpackLoaded.on(res)); |
15 | 17 |
|
16 | 18 | const style = document.createElement("style"); |
17 | 19 | style.innerHTML = ` |
|
76 | 78 | Spicetify.Player.addEventListener("songchange", reset); |
77 | 79 |
|
78 | 80 | 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; |
95 | 92 | } |
96 | 93 |
|
97 | 94 | const startBtn = createMenuItem("Set start", () => { |
|
122 | 119 | contextMenu.hidden = true; |
123 | 120 | }); |
124 | 121 |
|
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)); |
128 | 125 | contextMenu.style.transform = `translate(${event.clientX}px,${event.clientY - contextMenuHeight}px)`; |
129 | 126 | contextMenu.hidden = false; |
130 | 127 | event.preventDefault(); |
|
0 commit comments