Instantly share code, notes, and snippets.
Created
February 21, 2020 02:44
-
Star
(0)
0
You must be signed in to star a gist -
Fork
(0)
0
You must be signed in to fork a gist
-
Save Kefta/b4aa33de8ca90532254de51ef68e26c2 to your computer and use it in GitHub Desktop.
RateYourMusic Collection Buttons
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name RateYourMusic Collection Buttons | |
// @include *://rateyourmusic.com/collection/* | |
// @grant metadata | |
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js | |
// ==/UserScript== | |
const tReleaseTypes = [["typs", "albums"], | |
["type", "eps"], | |
["typi", "singles"], | |
["typm", "mixtapes"], | |
["typj", "dj mixes"], | |
["typc", "compilations"], | |
["typd", "videos"], | |
["typb", "bootlegs"], | |
["", "everything"]]; | |
if (tReleaseTypes.length == 0 || document.getElementById('breadcrumb') === null) return; | |
const sURL = window.location.toString(); // This will probably be changed later, but is temporary storage for the whole URL | |
var tURL = sURL.split('/'); | |
var sPrefix, sSuffix; | |
// "collection" must be at least the second-to-last element with the last being the username | |
// Our target is the element afterwards, the collection modifiers, which might or might not exist | |
var u = tURL.length - 1; | |
// If there are no current collection modifiers | |
if (tURL[u] === "collection") | |
{ | |
// Prefix is already set, but make sure the last character is a slash | |
if (sPrefix[sPrefix.length] === '/') | |
{ | |
sPrefix = sURL.trimEnd(); | |
} | |
else | |
{ | |
sPrefix = sURL.trimEnd() + '/'; | |
} | |
sSuffix = ""; | |
} | |
// if "collection" appears before the second-to-last element | |
else | |
{ | |
// FIXME: Clear multiple type modifiers in the URL | |
while (--u !== 0) | |
{ | |
if (tURL[u] !== "collection") continue; | |
const sModifiers = tURL[u + 2]; | |
// If the modifiers are the last element, don't add an extra slash | |
sSuffix = (u + 2 === tURL.length) ? "" : ('/' + tURL.slice(u + 3).join('/')); | |
// Append everything before the modifiers | |
tURL.length = u + 2; | |
sPrefix = tURL.join('/') + '/'; | |
// If it's an empty string, the prefix and suffix can just be appended to the type modifier | |
if (sModifiers !== "") | |
{ | |
// Test if the only modifier is a type | |
if (sModifiers.length === 4) | |
{ | |
// If there is no type modifier, append to the end of the current properties | |
if (sModifiers.match(/typ\w/) === null) | |
{ | |
sPrefix += sModifiers + ','; | |
} | |
// If there is a type modifier, it can be simply left off and the new one will be appended | |
} | |
else | |
{ | |
const tMatch = sModifiers.match(/(^|,)typ\w($|,)/); | |
// If there is no type modifier, add it to the end of the current modifiers | |
if (tMatch === null) | |
{ | |
sPrefix += sModifiers + ','; | |
} | |
// If the type modifier is at the beginning, add the rest of the modifiers to the suffix | |
else if (tMatch.index === 0) | |
{ | |
sSuffix = sModifiers.substring(4) + sSuffix; | |
} | |
// If the type modifier is at the end, add the rest of the modifiers to the prefix | |
else if (tMatch.index === tURL.length - 5) | |
{ | |
// Include the comma | |
sPrefix += sModifiers.substring(0, tURL.length - 4); | |
} | |
// Add everything surrounding the type modifier to the prefix and suffix | |
else | |
{ | |
// Include the comma on both ends | |
sPrefix += sModifiers.substring(0, tMatch.index + 1); | |
sSuffix = sModifiers.substring(tMatch.index + 5) + sSuffix; | |
} | |
} | |
} | |
break; | |
} | |
// Not on a collection page? | |
if (u === 0) return; | |
} | |
// Iterate in reverse as buttons are appended from the head | |
u = tReleaseTypes.length; | |
do | |
{ | |
const tReleaseType = tReleaseTypes[--u]; | |
$('#breadcrumb').after("<a id=\"" | |
+ tReleaseType[1] + "CollectionBtn\" href=\"javascript:void(0);\" class=\"printbutton\" title=\"limit to " | |
+ tReleaseType[1] + " only\">" + tReleaseType[1] + "</a>"); | |
$("#" + tReleaseType[1] + "CollectionBtn").attr("href", | |
// Edge-case: if we're appending nothing and our suffix is only a slash | |
// don't add it to prevent double slashes | |
tReleaseType[0] === "" && sSuffix.trimEnd() == '/' ? sPrefix | |
: (sPrefix + tReleaseType[0] + sSuffix)); | |
} while (u !== 0); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment