aboutsummaryrefslogtreecommitdiff
path: root/public/main.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/main.js')
-rw-r--r--public/main.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/public/main.js b/public/main.js
new file mode 100644
index 0000000..a5ede52
--- /dev/null
+++ b/public/main.js
@@ -0,0 +1,65 @@
+// Helpers
+
+function appendElement(parentElement, tag) {
+ element = document.createElement(tag)
+ parentElement.appendChild(element)
+ return element
+}
+
+function appendText(parentElement, text) {
+ element = document.createTextNode(text)
+ parentElement.appendChild(element)
+ return element
+}
+
+// Only suggest sharps for the moment
+tonalities = ['C', 'C♯', 'D', 'D♯', 'E', 'F', 'F♯', 'G', 'G♯', 'A', 'A♯', 'B']
+
+function getRoot(c) {
+ if (c.indexOf('♯') > -1 || c.indexOf('♭') > -1) {
+ return c.substring(0, 2)
+ } else {
+ return c[0]
+ }
+}
+
+function getShift(t1, t2) {
+ return tonalities.indexOf(getRoot(t2)) - tonalities.indexOf(getRoot(t1))
+}
+
+function applyShift(t1, s) {
+ let root = getRoot(t1)
+ let mode = t1.substring(root.length)
+ root = tonalities[(tonalities.indexOf(root) + s + tonalities.length) % tonalities.length]
+ return `${root}${mode}`
+}
+
+
+const node = document.querySelector('[data-tonality]')
+let tonality = node.dataset.tonality
+mode = tonality[tonality.length - 1] == 'm' ? 'm' : ''
+
+label = appendElement(node, 'label')
+label['className'] = 'g-Chords__Tonality'
+label.onchange = (e) => {
+ const shift = getShift(tonality, e.target.value)
+ tonality = e.target.value
+ document.querySelectorAll('.g-Chords__Chord').forEach(chord => {
+ if (chord.innerText !== '%') {
+ chord.innerText = applyShift(chord.innerText, shift)
+ }
+ })
+}
+
+appendText(label, 'Tonalité :')
+
+select = appendElement(label, 'select')
+select['name'] = 'tonality'
+tonalities.forEach(t => {
+ option = appendElement(select, 'option')
+ option['value'] = t
+ if (tonality == `${t}${mode}`) {
+ option['selected'] = true
+ }
+ appendText(option, `${t}${mode}`)
+})