Skip to content
This repository
Browse code

Highlight tones that are off key.

Enclose them in <span class="offKey"> tags.
Of courrse, the actual highlighting has to be in the CSS.
  • Loading branch information...
commit f4dcc0f2f5b67b6706a1bcd5bea09b07db788617 1 parent 440a71f
authored

Showing 1 changed file with 46 additions and 1 deletion. Show diff stats Hide diff stats

  1. 47  Transposer.js
47  Transposer.js
@@ -16,6 +16,38 @@
16 16
             majorTonics = ['C', 'D\u266d', 'D', 'E\u266d', 'E', 'F', 'F\u266f', 'G', 'A\u266d', 'A', 'B\u266d', 'B'],
17 17
             minorTonics = ['C', 'C\u266f', 'D', 'D\u266f', 'E', 'F', 'F\u266f', 'G', 'G\u266f', 'A', 'B\u266d', 'B'],
18 18
             tonesInKey = { // Note: only need cannonical key names.
  19
+                'C':   ['C',  'x',  'D',  'x',  'E',  'F',  'x',  'G',  'x',  'A',  'x',  'B'],
  20
+                'Am':  ['C',  'x',  'D',  'x',  'E',  'F',  'x',  'G',  'x',  'A',  'x',  'B'],
  21
+                'G':   ['C',  'x',  'D',  'x',  'E',  'x',  'F♯', 'G',  'x',  'A',  'x',  'B'],
  22
+                'Em':  ['C',  'x',  'D',  'x',  'E',  'x',  'F♯', 'G',  'x',  'A',  'x',  'B'],
  23
+                'D':   ['x',  'C♯', 'D',  'x',  'E',  'x',  'F♯', 'G',  'x',  'A',  'x',  'B'],
  24
+                'Bm':  ['x',  'C♯', 'D',  'x',  'E',  'x',  'F♯', 'G',  'x',  'A',  'x',  'B'],
  25
+                'A':   ['x',  'C♯', 'D',  'x',  'E',  'x',  'F♯', 'x',  'G♯', 'A',  'x',  'B'],
  26
+                'F♯m': ['x',  'C♯', 'D',  'x',  'E',  'x',  'F♯', 'x',  'G♯', 'A',  'x',  'B'],
  27
+                'E':   ['x',  'C♯', 'x',  'D♯', 'E',  'x',  'F♯', 'x',  'G♯', 'A',  'x',  'B'],
  28
+                'C♯m': ['x',  'C♯', 'x',  'D♯', 'E',  'x',  'F♯', 'x',  'G♯', 'A',  'x',  'B'],
  29
+                'B':   ['x',  'C♯', 'x',  'D♯', 'E',  'x',  'F♯', 'x',  'G♯', 'x',  'A♯', 'B'],
  30
+                'G♯m': ['x',  'C♯', 'x',  'D♯', 'E',  'x',  'F♯', 'x',  'G♯', 'x',  'A♯', 'B'],
  31
+                'F♯':  ['x',  'C♯', 'x',  'D♯', 'x',  'E♯', 'F♯', 'x',  'G♯', 'x',  'A♯', 'B'],
  32
+                'D♯m': ['x',  'C♯', 'x',  'D♯', 'x',  'E♯', 'F♯', 'x',  'G♯', 'x',  'A♯', 'B'],
  33
+                'C♯':  ['B♯', 'C♯', 'x',  'D♯', 'x',  'E♯', 'F♯', 'x',  'G♯', 'x',  'A♯', 'x'],
  34
+                'A♯m': ['B♯', 'C♯', 'x',  'D♯', 'x',  'E♯', 'F♯', 'x',  'G♯', 'x',  'A♯', 'x'],
  35
+                'C♭':  ['x',  'D♭', 'x',  'E♭', 'F♭', 'x',  'G♭', 'x',  'A♭', 'x',  'B♭', 'C♭'],
  36
+                'A♭m': ['x',  'D♭', 'x',  'E♭', 'F♭', 'x',  'G♭', 'x',  'A♭', 'x',  'B♭', 'C♭'],
  37
+                'G♭':  ['x',  'D♭', 'x',  'E♭', 'x',  'F',  'G♭', 'x',  'A♭', 'x',  'B♭', 'C♭'],
  38
+                'E♭m': ['x',  'D♭', 'x',  'E♭', 'x',  'F',  'G♭', 'x',  'A♭', 'x',  'B♭', 'C♭'],
  39
+                'D♭':  ['C',  'D♭', 'x',  'E♭', 'x',  'F',  'G♭', 'x',  'A♭', 'x',  'B♭', 'x'],
  40
+                'B♭m': ['C',  'D♭', 'x',  'E♭', 'x',  'F',  'G♭', 'x',  'A♭', 'x',  'B♭', 'x'],
  41
+                'A♭':  ['C',  'D♭', 'x',  'E♭', 'x',  'F',  'x',  'G',  'A♭', 'x',  'B♭', 'x'],
  42
+                'Fm':  ['C',  'D♭', 'x',  'E♭', 'x',  'F',  'x',  'G',  'A♭', 'x',  'B♭', 'x'],
  43
+                'E♭':  ['C',  'x',  'D',  'E♭', 'x',  'F',  'x',  'G',  'A♭', 'x',  'B♭', 'x'],
  44
+                'Cm':  ['C',  'x',  'D',  'E♭', 'x',  'F',  'x',  'G',  'A♭', 'x',  'B♭', 'x'],
  45
+                'B♭':  ['C',  'x',  'D',  'E♭', 'x',  'F',  'x',  'G',  'x',  'A',  'B♭', 'x'],
  46
+                'Gm':  ['C',  'x',  'D',  'E♭', 'x',  'F',  'x',  'G',  'x',  'A',  'B♭', 'x'],
  47
+                'F':   ['C',  'x',  'D',  'x',  'E',  'F',  'x',  'G',  'x',  'A',  'B♭', 'x'],
  48
+                'Dm':  ['C',  'x',  'D',  'x',  'E',  'F',  'x',  'G',  'x',  'A',  'B♭', 'x'],
  49
+            },
  50
+            tonesOffKey = { // Note: only need tones with 'x' above.
19 51
                 'C':   ['C',  'C♯', 'D',  'D♯', 'E',  'F',  'F♯', 'G',  'G♯', 'A',  'A♯', 'B'],
20 52
                 'Am':  ['C',  'C♯', 'D',  'D♯', 'E',  'F',  'F♯', 'G',  'G♯', 'A',  'A♯', 'B'],
21 53
                 'G':   ['C',  'C♯', 'D',  'D♯', 'E',  'F',  'F♯', 'G',  'G♯', 'A',  'A♯', 'B'],
@@ -47,6 +79,7 @@
47 79
                 'F':   ['C',  'D♭', 'D',  'E♭', 'E',  'F',  'G♭', 'G',  'A♭', 'A',  'B♭', 'C♭'],
48 80
                 'Dm':  ['C',  'D♭', 'D',  'E♭', 'E',  'F',  'G♭', 'G',  'A♭', 'A',  'B♭', 'C♭'],
49 81
             },
  82
+            tone,
50 83
             tones = majorTonics,
51 84
             aNote = /[A-G][#b\u266d\u266f]?/g,
52 85
             key,
@@ -74,6 +107,12 @@
74 107
                 return rawName;
75 108
             };
76 109
 
  110
+        for (key in tonesOffKey) {
  111
+            for (tone in tonesOffKey[key]) {
  112
+                tonesOffKey[key][tone] = '<span class="offKey">' + tonesOffKey[key][tone] + '</span>';
  113
+            };
  114
+        };
  115
+
77 116
         return this.each(function (theIndex, theElement) {
78 117
             var h = this.innerHTML,
79 118
                 i, m, x;
@@ -112,7 +151,13 @@
112 151
                             }
113 152
                         }
114 153
                         else { // a proper key has been set.
115  
-                            h = h.replace(m[i], tones[x]);
  154
+                            if ('x' === tones[x]) {
  155
+                                h = h.replace(/<.?span[^>]*>/g, ''); // try not to accrete span tags.
  156
+                                h = h.replace(m[i], tonesOffKey[key][x]);
  157
+                            }
  158
+                            else {
  159
+                                h = h.replace(m[i], tones[x]);
  160
+                            }
116 161
                         }
117 162
                     }
118 163
                 }

0 notes on commit f4dcc0f

Please sign in to comment.
Something went wrong with that request. Please try again.