// ==UserScript== // @name Beatport Open Key Display Addon // @namespace local // @description Appends the corresponding OpenKey Easymix code to the music key text in Beatport's now playing waveform display // @author Mickstah // @include https://www.beatport.com/* // @version 0.0.1.20200816042842 // @downloadURL none // ==/UserScript== // Rewrite a Beatport Top 100 page -- add key/bpm column -- works in Chrome / Firefox // prettier-ignore beatportKeyToCamelotKey = { 'G♯ min': '6m', 'A♭ min': '6m', 'B maj': '6d', 'D♯ min': '7m', 'E♭ min': '7m', 'F♯ maj': '7d', 'G♭ maj': '7d', 'A♯ min': '8m', 'B♭ min': '8m', 'C♯ maj': '8d', 'D♭ maj': '8d', 'F min': '9m', 'G♯ maj': '9d', 'A♭ maj': '9d', 'C min': '10m', 'D♯ maj': '10d', 'E♭ maj': '10d', 'G min': '11m', 'A♯ maj': '11d', 'B♭ maj': '11d', 'D min': '12m', 'F maj': '12d', 'A min': '1m', 'C maj': '1d', 'E min': '2m', 'G maj': '2d', 'B min': '3m', 'D maj': '3d', 'F♯ min': '4m', 'G♭ min': '4m', 'A maj': '4d', 'C♯ min': '5m', 'D♭ min': '5m', 'E maj': '5d' }; // prettier-ignore document.head.insertAdjacentHTML('beforeend', [ '' ].join('\n')); if ((labelColumnHeader = document.querySelector('.bucket-track-header-col.buk-track-labels'))) { labelColumnHeader.innerHTML = '
BPM
KEY
'; Array.from(document.querySelectorAll('li .buk-track-labels')).forEach((label, i) => { if ((info = window.Playables && window.Playables.tracks && window.Playables.tracks[i])) { label.innerHTML = `
${info.bpm}
${beatportKeyToCamelotKey[info.key]}
`; } }); Array.from(document.querySelectorAll('.buk-track-key')).forEach((label, i) => { if ((info = window.Playables && window.Playables.tracks && window.Playables.tracks[i])) { label.innerHTML = `
${info.bpm}
${beatportKeyToCamelotKey[info.key]}
`; } }); } var nowPlaying = document.getElementById("player2"); nowPlaying.addEventListener('load', function (){ var newtext = ""; var bs=document.querySelectorAll('.track-key'); var textcase = trim(bs[0].innerHTML); switch (textcase){ case "G\u266f min": newtext = "6m"; break; case "B maj": newtext = "6d"; break; case "D\u266f min": newtext = "7m"; break; case "F\u266f maj": newtext = "7d"; break; case "A\u266f min": newtext = "8m"; break; case "C\u266f maj": newtext = "8d"; break; case "F min": newtext = "9m"; break; case "G\u266f maj": newtext = "9d"; break; case "C min": newtext = "10m"; break; case "D\u266f maj": newtext = "10d"; break; case "G min": newtext = "11m"; break; case "A\u266f maj": newtext = "11d"; break; case "D min": newtext = "12m"; break; case "F maj": newtext = "12d"; break; case "A min": newtext = "1m"; break; case "C maj": newtext = "1d"; break; case "E min": newtext = "2m"; break; case "G maj": newtext = "2d"; break; case "B min": newtext = "3m"; break; case "D maj": newtext = "3d"; break; case "F\u266f min": newtext = "4m"; break; case "A maj": newtext = "4d"; break; case "C\u266f min": newtext = "5m"; break; case "E maj": newtext = "5d"; break; default: newtext = "*"; } if (textcase.indexOf(" - ") < 1) { bs[0].innerHTML = textcase + " - " + newtext; } // debug -----> alert("mdata2: " + bs[0].innerHTML); }, true); function trim(s) { var l=0; var r=s.length -1; while(l < s.length && s[l] == ' ') {l++; } while(r > l && s[r] == ' ') {r-=1;} return s.substring(l, r+1); }