VGMdb Tracklist Copier

Copies tracklist information from a VGMdb album page.(Dont work tempermonkey)

当前为 2024-08-02 提交的版本,查看 最新版本

// ==UserScript==
// @name         VGMdb Tracklist Copier
// @version      0.3
// @description  Copies tracklist information from a VGMdb album page.(Dont work tempermonkey)
// @author       LunaSama154
// @match        https://vgmdb.net/album/*
// @grant        LunaSama154
// @license      MIT
// @namespace LunaSama154
// ==/UserScript==

(function() {
  'use strict';

  function copyTracklistToClipboard() {
    // Find all tracklist containers (one per disc)
    const tracklistContainers = document.querySelectorAll('#tracklist > span.tl');

    if (tracklistContainers.length === 0) {
      alert('Tracklist not found on this page.');
      return;
    }

    let tracklistText = '';

    tracklistContainers.forEach((tracklistContainer, index) => {
      // Add disc number header
      const discNumber = index + 1;
      tracklistText += `Disc ${discNumber}\n`;

      // Extract track information
      const trackRows = tracklistContainer.querySelectorAll('table.role tr.rolebit');
      trackRows.forEach(row => {
        const columns = row.querySelectorAll('td');
        if (columns.length >= 3) {
          const trackNumber = columns[0].textContent.trim();
          const trackTitle = columns[1].textContent.trim();
          const trackDuration = columns[2].textContent.trim();
          tracklistText += `${trackNumber}. ${trackTitle} ${trackDuration}\n`;
        }
      });

      // Add disc length
      const discLengthElement = tracklistContainer.querySelector('span.time:last-of-type');
      if (discLengthElement) {
        const discLength = discLengthElement.textContent.trim();
        tracklistText += `Disc length ${discLength}\n`;
      }

      // Add a newline between discs
      if (index < tracklistContainers.length - 1) {
        tracklistText += '\n';
      }
    });

    navigator.clipboard.writeText(tracklistText)
      .then(() => {
        alert('Tracklist copied to clipboard!');
      })
      .catch(err => {
        console.error('Failed to copy tracklist: ', err);
        alert('Failed to copy tracklist. See console for details.');
      });
  }

  const copyButton = document.createElement('button');
  copyButton.textContent = 'Copy Tracklist';
  copyButton.style.marginTop = '10px';
  copyButton.addEventListener('click', copyTracklistToClipboard);

  const tracklistContainer = document.querySelector('#tracklist');
  tracklistContainer.parentNode.insertBefore(copyButton, tracklistContainer.nextSibling);

})();