Improve 8bcDump

Improve 2xAA's 8bcdump site (non-ID3 mode), adding a last played list and emboldening the currently playing song.

当前为 2017-03-29 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        Improve 8bcDump
// @namespace   Improve8bcDump
// @description Improve 2xAA's 8bcdump site (non-ID3 mode), adding a last played list and emboldening the currently playing song.
// @include     http://brkbrkbrk.com/8bcdump/
// @version     0.1
// @grant       none
// ==/UserScript==

(function() {
  // The currently playing song should appear bold in list views.
  // .playing is a single <li> in the list of all songs.
  // .lastPlayed is an <ol> containing the last played songs.
  
  var styleEl = document.createElement('style');
  styleEl.innerHTML  = '.playing, .lastPlayed li:first-child { font-weight: bold; }';
  styleEl.innerHTML += '.playing:after, .lastPlayed li:first-child:after { content: " (playing)" }';
  document.body.appendChild(styleEl);
  
  // Create a queue for the last played songs.
  // The queue is realized in an <ol>, contained in parentElement.
  
  function LastPlayedList(maxLength, parentElement) {
    // Create a heading for the last played list
    var heading = document.createElement('h2');
    heading.textContent = 'Last played';
    parentElement.appendChild(heading);
    
    // Create the list itself
    var list = document.createElement('ol');
    list.className = 'lastPlayed';
    parentElement.appendChild(list);
    
    // Push songs through the stack
    this.push = function(song) {
      var nodes = list.childNodes;
      
      if (nodes.length == maxLength) {
        list.removeChild(nodes[nodes.length - 1]);
      }
      
      var newItem = document.createElement('li');
      newItem.textContent = song;
      
      list.insertBefore(newItem, nodes[0]);
    }
  }
  
  // Create a list at the bottom of the page to hold the last 10 songs
  var lastPlayedDiv = document.createElement('div');
  document.body.appendChild(lastPlayedDiv);
  
  var lastPlayedList = new LastPlayedList(10, lastPlayedDiv);
  
  // The player at the bottom of the page
  // should also show the filename when playing songs.
  
  var updateID3_super = window.updateID3;
  
  // Override the existing updateID3 method
  
  window.updateID3 = function(id3) {
    updateID3_super(id3);
    
    var url = document.querySelector('li.playing a').href;
    var urlParts = decodeURIComponent(url).split('/');
    var filename = urlParts.pop();
    
    var liID3 = document.querySelector('li.id3 ');
    liID3.textContent += ', Filename: ' + filename;
    
    // Add the current song to the last played list
    lastPlayedList.push(liID3.textContent);
  }
  
}());