Sort the bookshelves on users' profiles alphabetically.
// ==UserScript==
// @name Goodreads - Sort bookshelves on profiles alphabetically
// @version 1.1
// @author petracoding
// @namespace petracoding
// @grant none
// @license MIT
// @include https://www.goodreads.com/*
// @include http://www.goodreads.com/*
// @include https://goodreads.com/*
// @include http://goodreads.com/*
// @description Sort the bookshelves on users' profiles alphabetically.
// ==/UserScript==
const isProfile = document.querySelector("#profileNameTopHeading");
const wrapper = document.querySelector("#shelves");
if (wrapper && isProfile) {
start();
}
function start() {
const linkEls = [...wrapper.querySelectorAll(".actionLinkLite")];
let output = "";
let itemsPerColumn = Math.ceil((linkEls.length + 1) / 4);
console.log(itemsPerColumn);
if (itemsPerColumn < 5) itemsPerColumn = 5;
const linkElsSorted = linkEls.sort(compare);
for (let i = 0; i < linkElsSorted.length; i++) {
if (i == 0 || i % itemsPerColumn == 0) {
if (i !== 0) {
output += `</div>`;
}
output += `<div class="shelfContainer">`;
}
output += linkElsSorted[i].outerHTML + `<br>`;
if (i == linkElsSorted.length - 1) {
output += `</div>`;
}
}
wrapper.innerHTML = output;
}
function compare( a, b ) {
if ( a.getAttribute("href") < b.getAttribute("href") ){
return -1;
}
if ( a.getAttribute("href") > b.getAttribute("href") ){
return 1;
}
return 0;
}