// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt /** * @brief page.js tries to improve pageload speeds * by processing client-side. * @author Zach DeCook (zjd7calvin) * @date 12, February 2017 * requires jQuery */ /** * @brief zj_transpose2 transposes a line */ function zj_transpose2( line, transp ) { var newchords = zj_transparray( transp ); var newline = ''; var space = 0; ///@< Spaces that need to be added or removed. for(var i = 0; i < line.length; i++) { var chari = line[i]; var nchar = line[i+1]; var upchar = line[i].toUpperCase(); var cval = upchar.charCodeAt(0); // A-G if( cval <= 71 && cval >=65 ) { // Exception for Cmaj7 if( upchar == 'A' && nchar == 'j' ) { newline += chari; } else if( nchar == 'b' || nchar =='#') { i++; //We have read an extra character now. var newchord = newchords[upchar + nchar]; if( newchord.length == 1 ) { // Need to insert an extra space. space += 1; } newline += newchord; } else { var newchord = newchords[upchar]; if( newchord.length == 2 ) { // Need to remove an extra space. space -= 1; } newline += newchord; } } else if ( chari == ' ' ) { if( space >= 0) { for (var j = 0; j <= space; j++) { newline += ' '; } space = 0; } else { // Only balance negative spaces if one will be left remaining if( nchar == ' ' ) { i++; space += 1; } newline += ' '; } } else { newline += chari; } } return newline; } function zj_transparray( transp ) { var chords = ["C","C#","D","D#","E","F","F#","G","G#","A","Bb","B" ]; var newchords = []; // Create array to map old chords to new ones for (var i=0; i < 12; i++) { newchords[chords[i]] = chords[(i+transp+12)%12]; } newchords["Db"] = newchords["C#"]; newchords["Eb"] = newchords["D#"]; newchords["Gb"] = newchords["F#"]; newchords["Ab"] = newchords["G#"]; newchords["A#"] = newchords["Bb"]; return newchords; } function transpadd( fromkey, integer ) { var chords = {C:0, Db:1, D:2, Eb:3, E:4, F:5, Gb:6, G:7, Ab:8, A:9, Bb:10, B:11}; chords["C#"] = chords["Db"]; chords["D#"] = chords["Eb"]; chords["F#"] = chords["Gb"]; chords["G#"] = chords["Ab"]; chords["A#"] = chords["Bb"]; var ochords = [ "C","Db","D","Eb","E","F","Gb","G","Ab","A","Bb","B" ]; var val = ochords[(parseInt(chords[fromkey]) + integer + 24)%12]; return val; } // @license-end