summaryrefslogtreecommitdiffstats
path: root/key-picker.mjs
diff options
context:
space:
mode:
authorBrian Cully <bjc@spork.org>2025-03-09 14:37:52 -0400
committerBrian Cully <bjc@spork.org>2025-03-09 14:52:08 -0400
commitb79204793259e09ed107379baca9f84a7d0fbaf7 (patch)
tree3a5c4d6e24274a4860b34ee61bbc334a7032d308 /key-picker.mjs
parentd69720d09760d153bb2059e57da3a4ed6c59e142 (diff)
downloadchords-b79204793259e09ed107379baca9f84a7d0fbaf7.tar.gz
chords-b79204793259e09ed107379baca9f84a7d0fbaf7.zip
modify note list when changing keys
Diffstat (limited to 'key-picker.mjs')
-rw-r--r--key-picker.mjs30
1 files changed, 30 insertions, 0 deletions
diff --git a/key-picker.mjs b/key-picker.mjs
new file mode 100644
index 0000000..bd6482a
--- /dev/null
+++ b/key-picker.mjs
@@ -0,0 +1,30 @@
+import { MajorScale, MinorScale, chromaticScale } from "./scale.mjs";
+
+function scaleFrom(tonic, diatonic) {
+ switch (diatonic) {
+ case 'major':
+ return MajorScale(tonic);
+ case 'minor':
+ return MinorScale(tonic);
+ default:
+ throw new Error('how this happen')
+ }
+}
+
+function formChanged(form) {
+ const formData = new FormData(form);
+ const scale = scaleFrom(formData.get('tonic'), formData.get('diatonic'));
+ ['first', 'second', 'third', 'fourth', 'fifth', 'sixth', 'seventh'].forEach((c, i) => {
+ Array.from(form.getElementsByClassName(c)).forEach(elt => elt.innerText = scale[i]);
+ });
+}
+
+function handleFormChanged(e) {
+ formChanged(e.target.form);
+}
+
+export default function KeyPicker(form) {
+ console.debug('KeyPicker()', form);
+ form.onchange = handleFormChanged;
+ formChanged(form);
+}