// ==UserScript== // @name Rice's AOTY Add-ons // @namespace https://albumoftheyear.org // @version 0.8.3 // @description A few different AOTY extensions I made compiled together. // @author Rice // @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js // @require https://openuserjs.org/src/libs/sizzle/GM_config.js // @match https://www.albumoftheyear.org/* // @icon https://www.google.com/s2/favicons?sz=64&domain=albumoftheyear.org // @grant GM_getValue // @grant GM.xmlHttpRequest // @grant GM_openInTab // @grant GM_setValue // @grant GM_getValue // @downloadURL none // ==/UserScript== (function () { let settingsButton; function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } GM_config.init({ id: "AOTY-Addons", title: "AOTY Add-ons", fields: { RScoreEnable: { section: [ GM_config.create("Unround Scores"), "Script to show full (unrounded) album/single scores.", ], options: ["On", "Off"], label: "Toggle Score Unrounder", type: "radio", default: "On", }, RScoreRound: { label: "Decimals to show on main album pages.", type: "float", default: 1, }, RScoreFont: { label: "Font size to show on main album pages.", type: "float", default: 39, }, RScoreRound2: { label: "Decimals to show on small album previews.", type: "float", default: 2, }, RScoreFont2: { label: "Font size to show on small album previews.", type: "float", default: 18, }, HScoreEnable: { section: [ GM_config.create("Hide Scores"), "Script to hide album/single ratings", ], options: ["On", "Off"], label: "Toggle Score Hider", type: "radio", default: "Off", }, HScoreDisableIfRated: { options: ["On", "Off"], label: "Show Score If Already Rated", type: "radio", default: "On", }, HScoreHideCriticReviews: { options: ["Hide", "Show"], label: "Hide/Show Critic Reviews", type: "radio", default: "Show", }, HScoreReplacementText: { label: "Score Replacement Text", type: "text", default: "N/A", }, THEnable: { section: [ GM_config.create("Best Tracks Highlighter"), "If tracks are above a certain score with a certain amount of ratings they will be bolded.", ], options: ["On", "Off"], label: "Toggle Score Hider", type: "radio", default: "On", }, THMinScore: { label: "Minimum score a track must have in order to be bolded.", type: "float", default: 90, }, THMinRatings: { label: "Minimum amount of ratings a track must have in order to be bolded.", type: "float", default: 25, }, RAEnable: { section: [ GM_config.create("Rated Album Shuffle"), "Script to pick a random rated album from you (or anyone's) rated albums page. \nFull guide: \nhttps://pastebin.com/raw/PehxkCSw", ], options: ["On", "Off"], label: "Toggle Rated Album Shuffle", type: "radio", default: "On", }, RAKeyBind: { label: "Enter key code for keybind", type: "float", default: 220, }, AARating: { section: [ GM_config.create("Artist Rating Viewer"), "Script that automatically calculates a user or critics average rating of an artist when viewed.", ], options: ["On", "Off"], label: "Toggle Artist Rating Viewer", type: "radio", default: "On", }, TListSorter: { section: [ GM_config.create("Tracklist Sorter"), "Adds a button to sort a tracklist by the highest rated songs.", ], options: ["On", "Off"], label: "Toggle Tracklist Sorter", type: "radio", default: "On", }, avgTracklist: { section: [ GM_config.create("Tracklist Score Average"), "Adds text to see the average rating of songs on a tracklist and also your personal average ratings.", ], options: ["On", "Off"], label: "Toggle Tracklist Score Average", type: "radio", default: "On", }, ATRound: { label: "Amount of decimals to round by.", type: "float", default: 2, }, quickAddTag: { section: [ GM_config.create("Quick Tag Submitter"), "Adds an option to submit tags just by clicking the enter key on your keyboard.", ], options: ["On", "Off"], label: "Toggle Quick Tag Submitter", type: "radio", default: "On", }, quickAddTracks: { section: [ GM_config.create("Quick Track Adder"), 'Adds an option add tracks faster by being able to go to the next section you need to fill out whenever the enter key is pressed instead of manually clicking it. Also adds a feature that adds the rym URL for the album on the "Add Tracks" section of the page.', ], options: ["On", "Off"], label: "Toggle Quick Track Adder", type: "radio", default: "On", }, rymUrl: { options: ["On", "Off"], label: "Toggle Quick RYM URL", type: "radio", default: "Off", }, copyUrl: { options: ["On", "Off"], label: "Toggle Automatically Copy RYM URL", type: "radio", default: "Off", }, betterColors: { section: [ GM_config.create("Better Rating Colors"), 'Adds rating colors that more accurately represent the score. This option adds 10 different colors based on the rating while the normal has only 3.', ], options: ["On", "Off"], label: "Toggle Better Rating Colors", type: "radio", default: "On", }, zeroscolor: { label: "Rating color for score of 1-9", type: "text", default: "#D76666", }, tenscolor: { label: "Rating color for score of 10-19", type: "text", default: "#E07D70", }, twentiescolor: { label: "Rating color for score of 20-29", type: "text", default: "#E2956F", }, thirtiescolor: { label: "Rating color for score of 30-39", type: "text", default: "#E5B56E", }, fourtiescolor: { label: "Rating color for score of 40-49", type: "text", default: "#E2BC85", }, fiftiescolor: { label: "Rating color for score of 50-59", type: "text", default: "#D6DB7D", }, sixtiescolor: { label: "Rating color for score of 60-69", type: "text", default: "#B3DD7C", }, seventiescolor: { label: "Rating color for score of 70-79", type: "text", default: "#9AE27D", }, eightiescolor: { label: "Rating color for score of 80-89", type: "text", default: "#90E27D", }, ninetiescolor: { label: "Rating color for score of 90-100", type: "text", default: "#86E27D", }, }, css: "#AOTY-Addons { height: 200px; width: 500px }", }); let svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svg.setAttribute("width", "20"); svg.setAttribute("height", "20"); svg.innerHTML = ' \ \ \ \ \ \ '; svg.style.postition = "absolute"; svg.style.left = "75%"; svg.style.top = "75%"; svg.style.transform = "translateX(55%) translateY(25%)"; settingsButton = document.createElement("a"); settingsButton.className = "settingsButton"; settingsButton.style.width = "25px"; settingsButton.style.height = "25px"; settingsButton.style.postition = "absolute"; settingsButton.style.left = "50%"; settingsButton.style.transform = "translateX(-50%)"; settingsButton.style.webkittransform = "translateX(-50%)"; settingsButton.appendChild(svg); settingsButton.onclick = () => { GM_config.open(); let settingsarea = document.querySelector("#AOTY-Addons"); settingsarea.style.width = "530px"; settingsarea.style.height = "540px"; }; setInterval(function () { if (document.querySelector("#AOTY-Addons")) { var iframe = document.getElementById("AOTY-Addons"); var innerDoc = iframe.contentDocument || iframe.contentWindow.document; if (innerDoc.getElementById('AOTY-Addons_section_desc_3')) { if (!innerDoc.getElementById('AOTY-Addons_section_desc_3').innerHTML.includes('href="https://pastebin.com/raw/PehxkCSw')) { innerDoc.getElementById('AOTY-Addons_section_desc_3').innerHTML = `Script to pick a random rated album from you (or anyone's) rated albums page.` + `

Full guide: ` + `https://pastebin.com/raw/PehxkCSw` } } if (innerDoc.getElementsByClassName("saveclose_buttons")[0]) { innerDoc.getElementById("AOTY-Addons_saveBtn").addEventListener( "click", function () { location.reload(); }, false ); } } }, 200); let topbar = document.querySelectorAll("#content")[1]; topbar.appendChild(settingsButton); let onuserpage = "False"; let onalbum = "False"; let oncharts = "False"; let onartist = "False"; let url = document.URL; if (url.startsWith("https://www.albumoftheyear.org/user/")) { onuserpage = "True"; } if (url.startsWith("https://www.albumoftheyear.org/album/")) { onalbum = "True"; } if (url.startsWith("https://www.albumoftheyear.org/artist/")) { onartist = "True"; } if (url.startsWith("https://www.albumoftheyear.org/ratings/")) { oncharts = "True"; } var styleElem = document.head.appendChild(document.createElement("style")); let ratingcolorsred = document.getElementsByClassName("red"); let ratingcolorsyellow = document.getElementsByClassName("yellow"); let ratingcolorsgreen = document.getElementsByClassName("green"); let ratings = ""; let HSreplacetext = GM_config.get("HScoreReplacementText"); let HSenabled = GM_config.get("HScoreEnable"); let RSenabled = GM_config.get("RScoreEnable"); let RSFontSize1 = GM_config.get("RScoreFont") let RSFontSize2 = GM_config.get("RScoreFont2") let RSRound1 = GM_config.get("RScoreRound") let RSRound2 = GM_config.get("RScoreRound2") let ifrated = GM_config.get("HScoreDisableIfRated"); let criticreviews = GM_config.get("HScoreHideCriticReviews"); let TBEnabled = GM_config.get("THEnable") let TBMinScore = GM_config.get("THMinScore") let TBMinRatings = GM_config.get("THMinRatings") let RAEnabled = GM_config.get("RAEnable") let AARating = GM_config.get("AARating") let RAKeyBind = GM_config.get("RAKeyBind") let TListSorter = GM_config.get("TListSorter") let avgTracklist = GM_config.get('avgTracklist') let ATRound = GM_config.get('ATRound') let quickAddTag = GM_config.get('quickAddTag') let quickAddTracks = GM_config.get('quickAddTracks') let rymUrl = GM_config.get('rymUrl') let copyUrl = GM_config.get('copyUrl') let zero = GM_config.get('zeroscolor') let tens = GM_config.get('tenscolor') let twenties = GM_config.get('twentiescolor') let thirties = GM_config.get('thirtiescolor') let fourties = GM_config.get('fourtiescolor') let fifties = GM_config.get('fiftiescolor') let sixties = GM_config.get('sixtiescolor') let seventies = GM_config.get('seventiescolor') let eighties = GM_config.get('eightiescolor') let nineties = GM_config.get('ninetiescolor') let betterColors = GM_config.get('betterColors') if (TBEnabled == "On") { if (url.startsWith("https://www.albumoftheyear.org/album/")) { if (document.getElementsByClassName("trackRating").length > 0) { let tracklist = document.getElementsByClassName("trackRating"); for (let i = 0; tracklist.length > i; i++) { let ratingcount; let rating; if (tracklist[i].children[0]) { rating = tracklist[i].children[0].textContent; ratingcount = tracklist[i].children[0].getAttribute("title").split("Ratings")[0]; } if (rating >= TBMinScore && ratingcount >= TBMinRatings) { let track = document.getElementsByClassName("trackTitle")[i].children[0]; track.style.fontWeight = "bold"; } } } } } if ( document.getElementsByClassName("ratingBlock yourOwn")[0] && ifrated == "On" ) { onuserpage = "True"; } if (onuserpage == "False" && HSenabled == "On") { if (oncharts == "True") { styleElem.innerHTML = ".albumListCover.mustHear::before {border-right: 0px solid rgba(98,188,250,.85);}"; ratings = document.getElementsByClassName("scoreValue"); } if (oncharts == "False") { styleElem.innerHTML = ".image.mustHear::before {border-right: 0px solid rgba(98,188,250,.85);}"; ratings = document.getElementsByClassName("rating"); } let musthear2 = document.getElementsByClassName("fas fa-star"); for (let i = 0; i < 200; i++) { if ( ratingcolorsred[1 + i] && ratingcolorsred[1 + i].parentElement.parentElement.classList.length !== 2 ) { ratingcolorsred[1 + i].classList.replace("red", "white"); } if ( ratingcolorsyellow[1 + i] && ratingcolorsyellow[1 + i].parentElement.parentElement.classList .length !== 2 ) { ratingcolorsyellow[1 + i].classList.replace("yellow", "white"); } if ( ratingcolorsgreen[1 + i] && ratingcolorsgreen[1 + i].parentElement.parentElement.classList .length !== 2 ) { ratingcolorsgreen[1 + i].classList.replace("green", "white"); } if (ratings[i]) { if (ratings[i].parentElement.classList.length !== 2) { ratings[i].textContent = HSreplacetext; } } for (let i = 0; i < musthear2.length; i++) { if (musthear2[i]) { musthear2[i].remove(); } } if (onartist == "True") { let artistcriticscore = document.getElementsByClassName("artistCriticScore"); if (artistcriticscore.length >= 1) { artistcriticscore[0].children[0].textContent = HSreplacetext; } let artistuserscore = document.getElementsByClassName("artistUserScore"); if (artistuserscore.length >= 1) { artistuserscore[0].textContent = HSreplacetext; } let bestsongsratings = document.getElementsByClassName( "trackRating noPadding" ); if (bestsongsratings) { for (let i = 0; i < bestsongsratings.length; i++) { bestsongsratings[i].textContent = HSreplacetext; } } } if (onalbum == "True") { let musthearbutton = document.getElementsByClassName("mustHearButton"); if (musthearbutton) { for (let i = 0; i < musthearbutton.length; i++) { musthearbutton[i].remove(); } } if (criticreviews == "Hide") { let criticreviewcontainer = document.getElementById("critics"); if (criticreviewcontainer) { criticreviewcontainer.remove(); } } if (criticreviews == "Show") { let criticboxratings = document.getElementsByClassName("albumReviewRow"); for (let i = 0; i < criticboxratings.length; i++) { criticboxratings[ i ].children[1].children[0].children[0].textContent = HSreplacetext; } } let criticratings = document.getElementsByClassName("albumCriticScore"); criticratings[0].children[0].textContent = HSreplacetext; let userratings = document.getElementsByClassName("albumUserScore"); userratings[0].children[0].textContent = HSreplacetext; let likecount = document.getElementsByClassName("text"); if (likecount) { if (likecount.length == 3) { likecount[2].remove(); } } let albumrankings = document.getElementsByClassName("text gray"); if (albumrankings) { for (let i = 0; i < albumrankings.length; i++) { albumrankings[i].remove(); } } let trackratings = document.getElementsByClassName("trackRating"); if (trackratings) { for (let i = 0; i < trackratings.length; i++) { trackratings[i].remove(); } } } } } function round(value, decimals) { return Number(Math.round(value + "e" + decimals) + "e-" + decimals); } if (RSenabled == "On") { if (url.startsWith("https://www.albumoftheyear.org/album/")) { if (document.getElementsByClassName("albumCriticScore")[0]) { if ( document.getElementsByClassName("albumCriticScore")[0].children[0] .textContent !== "NR" ) { let criticscore = document.getElementsByClassName("albumCriticScore")[0].children[0]; let unrounded = criticscore.textContent; if (round(unrounded, RSRound1) > 100) { criticscore.textContent = 100; } else { criticscore.textContent = round(unrounded, RSRound1); document.getElementsByClassName("albumCriticScore")[0].style.fontSize = `${RSFontSize1}px`; } } } if (document.getElementsByClassName("albumUserScore")[0]) { if ( document.getElementsByClassName("albumUserScore")[0] .textContent !== "NR" ) { let userscore = document.getElementsByClassName("albumUserScore")[0].children[0]; let unrounded2 = userscore.getAttribute("title"); userscore.textContent = round(unrounded2, RSRound1); document.getElementsByClassName("albumUserScore")[0].style.fontSize = `${RSFontSize1}px`; } } } if (url.startsWith("https://www.albumoftheyear.org/artist/") && url.endsWith('/best-songs/')) { let truescore = document.getElementsByClassName("trackListTable large")[0] .children[0]; for (let i = 0; i < truescore.children.length; i++) { let score = truescore.children[i].children[3].children[0]; score.textContent = round(score.getAttribute("title"), RSRound2); } } if (url.startsWith("https://www.albumoftheyear.org/ratings/")) { let roundedscore = document.getElementsByClassName("scoreValue"); let truescore = document.getElementsByClassName("scoreValueContainer"); let check = document.getElementsByClassName("scoreHeader"); for (let i = 0; i < truescore.length; i++) { if ( check[i].textContent !== "Critic Score" && check[i].textContent !== "Score" ) { roundedscore[i].textContent = round( truescore[i].getAttribute("title"), RSRound2 ); roundedscore[i].style.fontSize = `${RSFontSize2}px`; } } } } if (RAEnabled == "On") { if (url.includes('https://www.albumoftheyear.org/user/') && url.includes('/ratings')) { function doc_keyUp(e) { switch (e.keyCode) { case RAKeyBind: let url = window.location.href; GM_setValue("first", false); if (url.endsWith("/ratings/1/") || url.endsWith("/ratings/")) { GM_setValue("first", true); } if (GM_getValue("first") == true) { let pagenumbers = document.getElementsByClassName("pageSelectSmall")[ document.getElementsByClassName("pageSelectSmall").length - 1 ].textContent; let randompage = Math.floor(Math.random() * pagenumbers) + 1; if (randompage == 1) { randompage++; } window.location.href = url.split(/ratings/)[0] + `ratings/${randompage}/`; } if (GM_getValue("first") == false) { let randomalbumnumber = Math.floor( Math.random() * document.getElementsByClassName("artistTitle").length + 1 ); window.location.href = "https://www.albumoftheyear.org" + document .getElementsByClassName("artistTitle")[ randomalbumnumber ].parentNode.parentNode.children[2].getAttribute("href"); } } } document.addEventListener("keyup", doc_keyUp, false); } } if (AARating == "On") { let ok = false let total = 0 let thingtest; let albsrated = 0 const Observe = (sel, opt, cb) => { const Obs = new MutationObserver((m) => [...m].forEach(cb)); document.querySelectorAll(sel).forEach(el => Obs.observe(el, opt)); }; if (document.querySelector("#graybg > span > div.footer > div.overlay")) { thingtest = "#graybg > span > div.footer > div.overlay" } if (document.querySelector("#graybg > div.footer > div.overlay")) { thingtest = "#graybg > div.footer > div.overlay" } Observe(thingtest, { attributesList: ["style"], attributeOldValue: true, }, (m) => { if (m.target.getAttribute(m.attributeName) == "display: block;") { ok = true } }); setInterval(() => { if (ok == true && document.getElementsByClassName("albumInfo").length > 0) { for (let i = 0; document.getElementsByClassName("albumInfo").length * 2 > i; i++) { if (document.getElementsByClassName("tableRating")[i] && document.getElementsByClassName("tableRating")[i].children[0]) { if (document.getElementsByClassName("tableRating")[i].children[0].className == "green-font" || document.getElementsByClassName("tableRating")[i].children[0].className == "yellow-font" || document.getElementsByClassName("tableRating")[i].children[0].className == "red-font") { total += Number(document.getElementsByClassName("tableRating")[i].children[0].textContent) albsrated++ } } } let artistratings = document.getElementsByClassName("subHeadline artistRatings")[0] let avgscore = round((total / albsrated), ATRound) let color; if (avgscore >= 69.5) { color = "#85ce73" } if (avgscore < 69.5 && avgscore >= 49.5) { color = "#f0e68c" } if (avgscore < 49.5) { color = "#d76666" } artistratings.innerHTML += `
Average Artist Rating: ${round((total / albsrated), ATRound)}
` total = 0 albsrated = 0 ok = false } }, 100); } if (TListSorter == "On" && onalbum == "True") { function unselectable(classname) { if (document.getElementById('tracklist').children[0].children[0].innerHTML) { document.getElementsByClassName(classname)[0].style.MozUserSelect = "-moz-none" document.getElementsByClassName(classname)[0].style.webkitUserSelect = "none" document.getElementsByClassName(classname)[0].style.UserSelect = "none" } } if (document.getElementsByClassName('trackRating').length > 0) { let initialinhtml = document.getElementById('tracklist').children[0].children[0].innerHTML let ogtracklist = document.getElementsByClassName('trackList')[0].innerHTML let disclength = document.getElementsByClassName('discNumber').length document.getElementById('tracklist').children[0].children[0].innerHTML += `
[Sort by highest rated]
` unselectable("sorttracklist") setInterval(() => { let sorttracklist = document.getElementsByClassName('sorttracklist')[0] if (sorttracklist) { sorttracklist.onclick = () => { let arr1 = [] let arr2 = [] let rateabletrackcount = 0 for (let i = 0; i < document.getElementsByClassName('trackRating').length; i++) { if (document.getElementsByClassName('trackRating')[i].children[0]) { let clsnme = document.getElementsByClassName('trackRating')[i].children[0].getAttribute('class') if (clsnme == "green-font" || clsnme == "red-font" || clsnme == "yellow-font") { rateabletrackcount++ } } } if (rateabletrackcount == document.getElementsByClassName('trackRating').length) { for (let i = 0; i < document.getElementsByClassName('trackRating').length; i++) { if (document.getElementsByClassName('trackRating')[i]) { arr1.push(document.getElementsByClassName('trackRating')[i].children[0].textContent) } } const deepCopy = [...arr1].map((e, i) => [e, i]).sort(function (a, b) { return b[0] - a[0] }); for (let [e, i] of deepCopy) { arr2.push(i); }; let arr = arr2; if (disclength > 0) { for (let i = 0; i < disclength; i++) { document.getElementsByClassName('discNumber')[0].remove() } } let tracklistslength = document.getElementsByClassName('trackListTable').length if (tracklistslength > 1) { for (let i = 1; i < tracklistslength + 1; i++) { if (document.getElementsByClassName('trackListTable')[1]) { document.getElementsByClassName('trackListTable')[0].children[0].innerHTML += document.getElementsByClassName('trackListTable')[1].innerHTML document.getElementsByClassName('trackListTable')[1].remove() } } } let wrapper = document.getElementsByClassName("trackListTable"); let items = wrapper[0].children[0].children; let items3 = wrapper[0].children let elements = document.createDocumentFragment(); arr.forEach(function (idx) { if (items[0].getAttribute('class') !== 'trackNumber') { elements.appendChild(items[idx].cloneNode(true)); } if (items[0].getAttribute('class') == 'trackNumber') { elements.appendChild(items3[idx].cloneNode(true)); } }); wrapper[0].innerHTML = null; wrapper[0].appendChild(elements); } document.getElementById('tracklist').children[0].children[0].innerHTML = initialinhtml + `
[Sort by track number]
` unselectable("sorttracklist2") } } }, 100); setInterval(() => { let unsorttracklist = document.getElementsByClassName('sorttracklist2')[0] if (unsorttracklist) { unsorttracklist.onclick = () => { let arr3 = [] let arr4 = [] for (let i = 0; i < document.getElementsByClassName("trackListTable")[0].children.length; i++) { arr3.push(document.getElementsByClassName("trackListTable")[0].children[i].children[0].textContent) } let elements2 = document.createDocumentFragment(); const deepCopy2 = [...arr3].map((e, i) => [e, i]).sort(function (a, b) { return b[0] - a[0] }); for (let [e, i] of deepCopy2) { arr4.push(i); }; let wrapper2 = document.getElementsByClassName("trackListTable"); let items2 = wrapper2[0].children; arr4.reverse().forEach(function (idx) { elements2.appendChild(items2[idx].cloneNode(true)); }); if (disclength == 0) { wrapper2[0].innerHTML = null; wrapper2[0].appendChild(elements2); } if (disclength > 0) { document.getElementsByClassName('trackList')[0].innerHTML = ogtracklist } document.getElementById('tracklist').children[0].children[0].innerHTML = initialinhtml + `
[Sort by highest rated]
` unselectable("sorttracklist") } } }, 100); } } if (avgTracklist == "On" && !url.includes('corrections.php')) { if (url.includes('https://www.albumoftheyear.org/song/') || url.includes('https://www.albumoftheyear.org/album/')) { if (!url.includes('/user-reviews/')) { let allscores = 0 let ratedtrackcount = 0 let yourratedtrackcount = 0 let youravgrating = 0 let color2; let color3; if (document.getElementsByClassName('trackTitle') && url.startsWith("https://www.albumoftheyear.org/song/")) { if (document.getElementsByClassName('trackTitle')) { for (let i = 0; i < document.getElementsByClassName('trackTitle').length; i++) { let checkifrating = document.getElementsByClassName('trackTitle')[i].parentNode.children[2].children[0].className let checkifrating2 = document.getElementsByClassName('trackTitle')[i].parentNode.children[3].children[0].className if (checkifrating == "green-font" || checkifrating == "red-font" || checkifrating == "yellow-font") { allscores += Number(document.getElementsByClassName('trackTitle')[i].parentNode.children[2].children[0].textContent) ratedtrackcount++ } if (checkifrating2 == "green-font" || checkifrating2 == "red-font" || checkifrating2 == "yellow-font") { youravgrating += Number(document.getElementsByClassName('trackTitle')[i].parentNode.children[3].children[0].textContent) yourratedtrackcount++ } } let addedelm; if (!document.getElementsByClassName('totalLength')[0]) { if (document.getElementsByClassName('trackList')) { let totalLengthChild = document.createElement('div') totalLengthChild.innerHTML = `
` document.getElementsByClassName('trackList')[0].appendChild(totalLengthChild) addedelm = true; } } let tracklength = document.createElement('span') tracklength.className = 'testing' let averagerating = round(allscores / ratedtrackcount, ATRound) let youraveragerating = round(youravgrating / yourratedtrackcount, ATRound) if (youraveragerating >= 69.5) { color3 = "#85ce73" } if (youraveragerating < 69.5 && youraveragerating >= 49.5) { color3 = "#f0e68c" } if (youraveragerating < 49.5) { color3 = "#d76666" } if (averagerating >= 69.5) { color2 = "#85ce73" } if (averagerating < 69.5 && averagerating >= 49.5) { color2 = "#f0e68c" } if (averagerating < 49.5) { color2 = "#d76666" } let tracklengthtxt; if (ratedtrackcount !== 0 && yourratedtrackcount !== 0) { if (addedelm !== true) { tracklengthtxt = document.getElementsByClassName('totalLength')[0].textContent tracklength.innerHTML = `Your Average Rating: ${youraveragerating}
Average Rating: ${averagerating}
${tracklengthtxt}` } if (addedelm == true) { tracklength.innerHTML = `Your Average Rating: ${youraveragerating}
Average Rating: ${averagerating}
` } } if (ratedtrackcount !== 0 && yourratedtrackcount == 0) { if (addedelm !== true) { tracklengthtxt = document.getElementsByClassName('totalLength')[0].textContent tracklength.innerHTML = `Your Average Rating: N/A
Average Rating: ${averagerating}
${tracklengthtxt}` } if (addedelm == true) { tracklength.innerHTML = `Your Average Rating: N/A
Average Rating: ${averagerating}
` } } if (ratedtrackcount == 0) { if (addedelm !== true) { tracklengthtxt = document.getElementsByClassName('totalLength')[0].textContent tracklength.innerHTML = `Your Average Rating: N/A
Average Rating: N/A
${tracklengthtxt}` } if (addedelm == true) { tracklength.innerHTML = `Your Average Rating: N/A
Average Rating: N/A
` } } document.getElementsByClassName('totalLength')[0].innerHTML = '' document.getElementsByClassName('totalLength')[0].append(tracklength) } } if (document.getElementsByClassName('trackTitle') && onalbum == "True") { for (let i = 0; i < document.getElementsByClassName('trackTitle').length; i++) { if (document.getElementsByClassName('trackRating')[i].children[0]) { ratedtrackcount++ allscores += Number(document.getElementsByClassName('trackRating')[i].children[0].textContent) } } let addedelm; if (!document.getElementsByClassName('totalLength')[0]) { if (document.getElementsByClassName('trackList')) { let totalLengthChild = document.createElement('div') totalLengthChild.innerHTML = `
` document.getElementsByClassName('trackList')[0].appendChild(totalLengthChild) addedelm = true } } let tracklength = document.createElement('span') tracklength.className = 'testing' let averagerating = round(allscores / ratedtrackcount, ATRound) if (averagerating >= 69.5) { color2 = "#85ce73" } if (averagerating < 69.5 && averagerating >= 49.5) { color2 = "#f0e68c" } if (averagerating < 49.5) { color2 = "#d76666" } let tracklengthtxt; if (ratedtrackcount !== 0) { tracklengthtxt = document.getElementsByClassName('totalLength')[0].textContent tracklength.innerHTML = `Average Rating: ${averagerating}
${tracklengthtxt}
` document.getElementsByClassName('totalLength')[0].innerHTML = '' document.getElementsByClassName('totalLength')[0].append(tracklength) } if (addedelm == true) { document.getElementsByClassName('totalLength')[0].innerHTML = document.getElementsByClassName('totalLength')[0].innerHTML.replaceAll('
', '').replaceAll('
', '') } } } } } if (quickAddTag == "On") { if (url.startsWith('https://www.albumoftheyear.org/album') || url.startsWith('https://www.albumoftheyear.org/artist/')) { if (!url.includes('corrections.php')) { function enterTag(e) { switch (e.keyCode) { case 13: if (document.getElementsByClassName("tagTextBox ui-autocomplete-input")) { document.getElementById('add').click() } } } document.addEventListener('keyup', enterTag, false); } } } if (quickAddTracks == "On" && url.includes('https://www.albumoftheyear.org/album/corrections.php?')) { function enterTag(e) { let currenttrack; switch (e.keyCode) { case 13: for (let i = 1; document.getElementById(`trackName_${i}`); i++) { currenttrack = i } if (document.activeElement.className !== "textBox") { if (document.getElementById(`trackName_${currenttrack}`)) { if (!document.getElementById(`trackName_${currenttrack}`).value && !document.getElementById(`minutes_${currenttrack}`).value && !document.getElementById(`seconds_${currenttrack}`).value) { document.getElementById(`trackName_${currenttrack}`).select() } if (document.getElementById(`trackName_${currenttrack}`).value && !document.getElementById(`minutes_${currenttrack}`).value && !document.getElementById(`seconds_${currenttrack}`).value) { document.getElementById(`minutes_${currenttrack}`).select() } if (document.getElementById(`trackName_${currenttrack}`).value && document.getElementById(`minutes_${currenttrack}`).value && !document.getElementById(`seconds_${currenttrack}`).value) { document.getElementById(`seconds_${currenttrack}`).select() } if (document.getElementById(`trackName_${currenttrack}`).value && document.getElementById(`minutes_${currenttrack}`).value && document.getElementById(`seconds_${currenttrack}`).value) { document.getElementById(`row_${currenttrack}`).children[4].children[0].children[0].click() document.getElementById(`row_${currenttrack}`).children[4].children[0].children[0].remove() } } } } } document.addEventListener('keyup', enterTag, false); } if (rymUrl == "On" && url.includes('https://www.albumoftheyear.org/album/corrections.php?')) { const removeAccents = str => str.normalize('NFD').replace(/[\u0300-\u036f]/g, ''); String.prototype.htmlProtect = function () { var replace_map; replace_map = { ' ': '-', ' ': '-', "'": '', '?': '', '/': '-', ':': '', '&': '', '--': '-', '.': '', '!': '', '+': '', ',': '', ':': '', '(': '', ')': '' }; return this.replace(/[ '?/:&--.!+,:()]/g, function (match) { return replace_map[match]; }); }; if (document.getElementsByClassName('headline')[3] && document.getElementsByClassName('headline')[3].textContent == "Add Tracks") { let albandart = document.getElementsByClassName('headline')[0].textContent.split(" - ") let artist = albandart[0].toLowerCase().replaceAll('&', "and") let album = albandart[1].toLowerCase() let link = `https://rateyourmusic.com/release/album/${encodeURIComponent((removeAccents(artist.htmlProtect())))}/${encodeURIComponent(removeAccents(album.htmlProtect()))}/` let rymlink = document.createElement("a"); rymlink.innerHTML = `Add Tracks` document.getElementsByClassName('headline')[3].textContent = '' document.getElementsByClassName('headline')[3].appendChild(rymlink) if (copyUrl == "On") { navigator.clipboard.writeText(link) } } } function color(score) { if (score >= 0 && score < 10) { return zero } if (score >= 10 && score < 20) { return tens } if (score >= 20 && score < 30) { return twenties } if (score >= 30 && score < 40) { return thirties } if (score >= 40 && score < 50) { return fourties } if (score >= 50 && score < 60) { return fifties } if (score >= 60 && score < 70) { return sixties } if (score >= 70 && score < 80) { return seventies } if (score >= 80 && score < 90) { return eighties } if (score >= 90 && score <= 100) { return nineties } } if (betterColors == "On") { if (document.getElementsByClassName('ratingBar').length > 0) { for (let i = 0; i < document.getElementsByClassName('ratingBar').length; i++) { let score = document.getElementsByClassName('ratingBar')[i].children[0].getAttribute('style').replaceAll('width:', '').replaceAll('%;', '') document.getElementsByClassName('ratingBar')[i].children[0].style.backgroundColor = color(score) } } if (document.getElementsByClassName('albumReviewRatingBar').length > 0) { for (let i = 0; i < document.getElementsByClassName('albumReviewRatingBar').length; i++) { let score = document.getElementsByClassName('albumReviewRatingBar')[i].children[0].getAttribute('style').replaceAll('width:', '').replaceAll('%;', '') document.getElementsByClassName('albumReviewRatingBar')[i].children[0].style.backgroundColor = color(score) } } } })();