Two new attributes: center-align will align the fretboard horizontally to the center (it'll try, atleast); show-chord will show (or hide) the 'play chord' button
This commit is contained in:
		| @@ -1,7 +1,7 @@ | ||||
| import { GuitarDiagramsJSConfig } from "./guitar-diagrams-config.mjs"; | ||||
| import { GuitarDiagramsJSMarker } from "./guitar-diagrams-marker.mjs"; | ||||
| import "./tone.js"; | ||||
| import { SampleLibrary } from "./tonejs-instruments/Tonejs-Instruments.js"; | ||||
| import { SampleLibrary } from "./Tonejs-Instruments.js"; | ||||
|  | ||||
| class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|   // ========== BEGIN private members | ||||
| @@ -97,6 +97,26 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|   } | ||||
|  | ||||
|   connectedCallback() { | ||||
|     if (this.getAttribute("center-align") == "true") { | ||||
|       let canvas = this.#docRoot.getElementById(this.#config.canvasID); | ||||
|       // canvas.style["position"] = "absolute"; | ||||
|       // canvas.style["left"] = "50vw"; | ||||
|       // canvas.style["transform"] = "translate(-50%, -50%)"; | ||||
|       // | ||||
|       //          canvas.style["padding-left"] = 0; | ||||
|       //          canvas.style["padding-right"] = 0; | ||||
|       //          canvas.style["margin-left"] = "auto"; | ||||
|       //          canvas.style["margin-right"] = "auto"; | ||||
|       //          canvas.style["display"] = "block"; | ||||
|       //          canvas.style["width"] = "1000px"; | ||||
|       //   canvas.style.width = "50vw"; | ||||
|       canvas.style.display = "block"; | ||||
|       canvas.style.margin = "0 auto"; | ||||
|       canvas.style.position = "relative"; | ||||
|       canvas.style.left = "50%"; | ||||
|       canvas.style["padding-bottom"] = "1em"; | ||||
|       canvas.style.transform = "translateX(-50%)"; | ||||
|     } | ||||
|     this.drawNeck(); | ||||
|  | ||||
|     let markerList = Array.from(this.getElementsByTagName("marker")); | ||||
| @@ -111,21 +131,29 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|       ); | ||||
|     }); | ||||
|  | ||||
|     let chordsButton = document.createElement("button"); | ||||
|     const canvas = this.shadowRoot.getElementById(this.#config.canvasID); | ||||
|     chordsButton.setAttribute( | ||||
|       "onclick", | ||||
|       "this.getRootNode().host.playAllMarkers()", | ||||
|     ); | ||||
|     chordsButton.innerHTML = "Play chord"; | ||||
|     if (markerList.length > 0 && this.getAttribute("show-chord") == "true") { | ||||
|       let chordsButton = document.createElement("button"); | ||||
|       const canvas = this.shadowRoot.getElementById(this.#config.canvasID); | ||||
|       chordsButton.setAttribute( | ||||
|         "onclick", | ||||
|         "this.getRootNode().host.playAllMarkers()", | ||||
|       ); | ||||
|       chordsButton.innerHTML = "Play chord"; | ||||
|  | ||||
|     this.#docRoot.appendChild(chordsButton); | ||||
|       this.#docRoot.appendChild(chordsButton); | ||||
|     } | ||||
|  | ||||
|     this.drawAllMarkers(); | ||||
|   } | ||||
|  | ||||
|   static get observedAttributes() { | ||||
|     return ["canvas-id", "orient-horizontally", "fret-count", "scale-factor"]; | ||||
|     return [ | ||||
|       "canvas-id", | ||||
|       "orient-horizontally", | ||||
|       "fret-count", | ||||
|       "scale-factor", | ||||
|       "center-align", | ||||
|     ]; | ||||
|   } | ||||
|  | ||||
|   attributeChangedCallback(name, oldValue, newValue) { | ||||
| @@ -142,6 +170,26 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|       case "scale-factor": | ||||
|         this.#config.scaleFactor = parseFloat(newValue); | ||||
|         break; | ||||
|       case "center-align": | ||||
|         if (newValue == "true") { | ||||
|           let canvas = this.#docRoot.getElementById(this.#config.canvasID); | ||||
|           // canvas.style["position"] = "absolute"; | ||||
|           // canvas.style["left"] = "50vw"; | ||||
|           // canvas.style["transform"] = "translate(-50%, -50%)"; | ||||
|           // | ||||
|           //          canvas.style["padding-left"] = 0; | ||||
|           //          canvas.style["padding-right"] = 0; | ||||
|           //          canvas.style["margin-left"] = "auto"; | ||||
|           //          canvas.style["margin-right"] = "auto"; | ||||
|           //          canvas.style["display"] = "block"; | ||||
|           //          canvas.style["width"] = "1000px"; | ||||
|           //          canvas.style.width = "50vw"; | ||||
|           canvas.style.display = "block"; | ||||
|           canvas.style.margin = "0 auto"; | ||||
|           canvas.style.position = "relative"; | ||||
|           canvas.style.left = "50%"; | ||||
|           canvas.style.transform = "translateX(-50%)"; | ||||
|         } | ||||
|     } | ||||
|     this.drawNeck(); | ||||
|     this.drawAllMarkers(); | ||||
| @@ -173,7 +221,14 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|       [canvasHeight, canvasWidth] = [canvasWidth, canvasHeight]; | ||||
|     } | ||||
|  | ||||
|     //    if (this.#docRoot.getElementById(this.#config.canvasID).style.width) { | ||||
|     //      canvasWidth = this.#docRoot.getElementById(this.#config.canvasID).style | ||||
|     //        .width; | ||||
|     //    } | ||||
|     canvas.setAttribute("width", canvasWidth); | ||||
|     if (this.getAttribute("center-align") == "true") { | ||||
|       canvas.style["width"] = canvasWidth + "px"; | ||||
|     } | ||||
|     canvas.setAttribute("height", canvasHeight); | ||||
|  | ||||
|     let colorDiagramBackground = this.#config.colorDiagramBackground; | ||||
| @@ -323,6 +378,7 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|  | ||||
|         this.#drawFretMarker(2); | ||||
|         this.#drawFretMarker(4); | ||||
|         this.#drawFretMarker(6); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user