Sorts Spotify Web Player playlists by track name.
// ==UserScript==
// @name Spotify Playlist Sorter
// @namespace https://gist.github.com/GamrCorps/
// @version 1.6.1
// @description Sorts Spotify Web Player playlists by track name.
// @author ZekNikZ
// @match https://open.spotify.com/*
// @grant none
// ==/UserScript==
var zkz_swp_d = false;
function zkz_srt() {
if (!zkz_swp_d) {
var btn1 = document.createElement('BUTTON');
btn1.appendChild(document.createTextNode('N'));
btn1.setAttribute("style", "margin-left: .5em;");
btn1.onclick = zkz_srt;
document.getElementsByClassName('now-playing-bar__right')[0].appendChild(btn1);
var btn3 = document.createElement('BUTTON');
btn3.appendChild(document.createTextNode('A'));
btn3.setAttribute("style", "margin-left: .5em;");
btn3.onclick = zkz_srt_art;
document.getElementsByClassName('now-playing-bar__right')[0].appendChild(btn3);
var btn2 = document.createElement('BUTTON');
btn2.appendChild(document.createTextNode('#'));
btn2.setAttribute("style", "margin-left: .5em;");
btn2.onclick = zkz_srt_num;
document.getElementsByClassName('now-playing-bar__right')[0].appendChild(btn2);
zkz_swp_d = true;
}
console.log('SORTING PLAYLIST BY NAME...');
var list = document.getElementsByClassName('tracklist');
var items = list[0].childNodes;
var itemsArr = [];
for (var i in items) {
if (items[i].nodeType == 1) { // get rid of the whitespace text nodes
itemsArr.push(items[i]);
}
}
itemsArr.sort(function(a, b) {
var _a = a.getElementsByClassName('track-name')[0].innerHTML;
var _b = b.getElementsByClassName('track-name')[0].innerHTML;
return _a == _b ? 0 : (_a > _b ? 1 : -1);
});
for (i = 0; i < itemsArr.length; ++i) {
list[0].appendChild(itemsArr[i]);
}
}
function zkz_srt_num() {
console.log('SORTING PLAYLIST BY NUMBER...');
var list = document.getElementsByClassName('tracklist');
var items = list[0].childNodes;
var itemsArr = [];
for (var i in items) {
if (items[i].nodeType == 1) { // get rid of the whitespace text nodes
itemsArr.push(items[i]);
}
}
itemsArr.sort(function(a, b) {
var _a = parseFloat(a.getElementsByClassName('position top-align')[0].innerHTML);
var _b = parseFloat(b.getElementsByClassName('position top-align')[0].innerHTML);
return _a == _b ? 0 : (_a > _b ? 1 : -1);
});
for (i = 0; i < itemsArr.length; ++i) {
list[0].appendChild(itemsArr[i]);
}
}
function zkz_srt_art() {
console.log('SORTING PLAYLIST BY ARTIST...');
var list = document.getElementsByClassName('tracklist');
var items = list[0].childNodes;
var itemsArr = [];
for (var i in items) {
if (items[i].nodeType == 1) { // get rid of the whitespace text nodes
itemsArr.push(items[i]);
}
}
itemsArr.sort(function(a, b) {
var _a = a.getElementsByClassName('artists-album')[0].textContent;
var _b = b.getElementsByClassName('artists-album')[0].textContent;
return _a == _b ? 0 : (_a > _b ? 1 : -1);
});
for (i = 0; i < itemsArr.length; ++i) {
list[0].appendChild(itemsArr[i]);
}
}
(function() {
'use strict';
window.onload = zkz_srt;
})();