diff options
Diffstat (limited to 'codon.mjs')
-rw-r--r-- | codon.mjs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/codon.mjs b/codon.mjs new file mode 100644 index 0000000..7cc5ea1 --- /dev/null +++ b/codon.mjs @@ -0,0 +1,47 @@ +import AminoAcid from './amino-acid.mjs' +import Nucleotide from './nucleotide.mjs' + +class Codon { + constructor(n1, n2, n3) { + this.bases = [n1, n2, n3] + this.aminoAcid = new AminoAcid(n1, n2, n3) + + const nucleotideList = document.createElement('ol') + this.bases = [n1, n2, n3].map(base => { + const n = new Nucleotide(base) + n.onClick = this._boundNucleotideClickedHandler + nucleotideList.appendChild(n.elt) + return n + }) + this.elt.appendChild(nucleotideList) + this.elt.appendChild(this.aminoAcid.elt) + } + + get elt() { + if (this._elt === undefined) { + this._elt = document.createElement('li') + this._elt.classList.add('codon') + } + return this._elt + } + + get aaElt() { + if (this._aaElt === undefined) { + this._aaElt = document.createElement('div') + this._aaElt.classList.add('amino-acid') + } + return this._aaElt + } + + lock() { + this.bases.forEach(n => n.lock()) + this.aminoAcid.lock() + } + + unlock() { + this.bases.forEach(n => n.unlock()) + this.aminoAcid.unlock() + } +} + +export default Codon |