From d1c8f67d699fcd5e4ce262688b89503d3ddc0f88 Mon Sep 17 00:00:00 2001 From: Brian Cully Date: Mon, 12 May 2025 13:21:12 -0400 Subject: append history when ‘+’ button clicked MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fretboard.mjs | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'fretboard.mjs') diff --git a/fretboard.mjs b/fretboard.mjs index d862952..ef9e0b5 100644 --- a/fretboard.mjs +++ b/fretboard.mjs @@ -103,28 +103,38 @@ export default class extends HTMLElement { // TODO: don't trawl the dom, custom element means we know // what's inside. - const form = this.querySelector('form'); - form.onchange = handleFormChanged; - form.querySelectorAll('.open').forEach(elt => { + this.form = this.querySelector('form'); + this.form.onchange = handleFormChanged; + this.form.querySelectorAll('.open').forEach(elt => { elt.onclick = openClick; }); - form.querySelectorAll('input[type="radio"]').forEach(elt => { + this.form.querySelectorAll('input[type="radio"]').forEach(elt => { elt.onmousedown = fretMousedown; elt.onclick = fretClick; }); - form.querySelectorAll('.save').forEach(elt => { + this.form.querySelectorAll('.save').forEach(elt => { elt.onclick = (e) => { console.log('Fretboard#onSave'); e.preventDefault(); const event = new CustomEvent(this.saveEvent, { bubbles: true, cancelable: true, - detail: new FormData(form) + detail: this }); this.dispatchEvent(event); }; }) - formChanged(form); + formChanged(this.form); + } + + get notes() { + console.debug('Fretboard#notes', this); + const formData = new FormData(this.form); + return Array.from(this.form.querySelectorAll('tbody .selected')).map(elt => { + const string = Array.from(elt.parentNode.classList).filter(x => x.startsWith('string'))[0]; + const val = formData.get(string); + return fretToNote(this.form, string, val); + }) } } -- cgit v1.3