Explorar el Código

fix: queue buttons no longer disappear on row drag

Sv443 hace 10 meses
padre
commit
e0f9f62827
Se han modificado 1 ficheros con 31 adiciones y 24 borrados
  1. 31 24
      src/features/songLists.ts

+ 31 - 24
src/features/songLists.ts

@@ -41,40 +41,47 @@ export async function initQueueButtons() {
 
   // generic lists
   const addGenericListQueueBtns = (listElem: HTMLElement) => {
-    if(listElem.classList.contains("bytm-list-has-queue-btns"))
-      return;
-
     const queueItems = listElem.querySelectorAll<HTMLElement>("ytmusic-responsive-list-item-renderer");
     if(queueItems.length === 0)
       return;
 
-    listElem.classList.add("bytm-list-has-queue-btns");
-    queueItems.forEach(itm => addQueueButtons(itm, ".flex-columns", "genericList", ["bytm-generic-list-queue-btn-container"], "afterParent"));
+    queueItems.forEach(itm => {
+      if(itm.classList.contains("bytm-has-btns"))
+        return;
+      itm.classList.add("bytm-has-btns");
+      addQueueButtons(itm, ".flex-columns", "genericList", ["bytm-generic-list-queue-btn-container"], "afterParent");
+    });
 
     log(`Added buttons to ${queueItems.length} new "generic song list" ${autoPlural("item", queueItems)}`);
   };
 
-  const listSelectors = [
-    "ytmusic-playlist-shelf-renderer #contents",
-    "ytmusic-section-list-renderer[main-page-type=\"MUSIC_PAGE_TYPE_ALBUM\"] ytmusic-shelf-renderer #contents",
-    "ytmusic-section-list-renderer[main-page-type=\"MUSIC_PAGE_TYPE_ARTIST\"] ytmusic-shelf-renderer #contents",
-    "ytmusic-section-list-renderer[main-page-type=\"MUSIC_PAGE_TYPE_PLAYLIST\"] ytmusic-shelf-renderer #contents",
-  ];
+  const listSelector = `\
+ytmusic-playlist-shelf-renderer #contents,
+ytmusic-section-list-renderer[main-page-type="MUSIC_PAGE_TYPE_ALBUM"] ytmusic-shelf-renderer #contents,
+ytmusic-section-list-renderer[main-page-type="MUSIC_PAGE_TYPE_ARTIST"] ytmusic-shelf-renderer #contents,
+ytmusic-section-list-renderer[main-page-type="MUSIC_PAGE_TYPE_PLAYLIST"] ytmusic-shelf-renderer #contents\
+`;
 
   if(getFeature("listButtonsPlacement") === "everywhere") {
-    for(const selector of listSelectors) {
-      addSelectorListener("body", selector, {
-        all: true,
-        continuous: true,
-        debounce: 50,
-        // TODO: switch to longer `debounce` and edge type "risingIdle" after UserUtils update
-        debounceEdge: "falling",
-        listener: (songLists) => {
-          for(const list of songLists)
-            addGenericListQueueBtns(list);
-        },
-      });
-    }
+    const checkAddGenericBtns = (songLists: NodeListOf<HTMLElement>) => {
+      for(const list of songLists)
+        addGenericListQueueBtns(list);
+    };
+
+    addSelectorListener("body", listSelector, {
+      all: true,
+      continuous: true,
+      debounce: 100,
+      // TODO: switch to longer debounce time and edge type "risingIdle" after UserUtils update
+      debounceEdge: "falling",
+      listener: checkAddGenericBtns,
+    });
+
+    siteEvents.on("pathChanged", () => {
+      const songLists = document.querySelectorAll<HTMLElement>(listSelector);
+      if(songLists.length > 0)
+        checkAddGenericBtns(songLists);
+    });
   }
 }