// ==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);
}