summaryrefslogtreecommitdiffstats
path: root/amino-acid.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'amino-acid.mjs')
-rw-r--r--amino-acid.mjs132
1 files changed, 67 insertions, 65 deletions
diff --git a/amino-acid.mjs b/amino-acid.mjs
index 7df50d4..cce1e0e 100644
--- a/amino-acid.mjs
+++ b/amino-acid.mjs
@@ -1,76 +1,78 @@
class AminoAcid {
// Create a protein from three nucleotides.
constructor(n1, n2, n3) {
- this.codon = n1+n2+n3
- this.value = AminoAcid.codonMap[this.codon]
+ this.value = AminoAcid.codonMap[n1+n2+n3]
+ this._boundClickHandler = this.clickHandler.bind(this)
+ }
+
+ get elt() {
+ if (this._elt === undefined) {
+ this._elt = document.createElement('div')
+ this._elt.classList.add('amino-acid')
+ }
+ return this._elt
+ }
+
+ get value() {
+ return this.elt.innerText
+ }
+
+ set value(val) {
+ this.elt.innerText = val
+ }
+
+ lock() {
+ this.elt.removeEventListener('click', this._boundClickHandler)
+ }
+
+ unlock() {
+ this.elt.addEventListener('click', this._boundClickHandler)
+ }
+
+ get onClick() {
+ if (this._onClick !== undefined) {
+ return this._onClick
+ }
+ return () => {}
+ }
+
+ set onClick(fn) {
+ this._onClick = fn
+ }
+
+ clickHandler(evt) {
+ this.onClick(this)
}
}
+AminoAcid.list = [
+ 'Ala', 'Arg', 'Asn', 'Asp', 'Cys', 'Gln', 'Glu', 'Gly', 'His', 'Ile',
+ 'Leu', 'Lys', 'Met', 'Phe', 'Pro', 'Ser', 'Thr', 'Trp', 'Tyr', 'Val',
+ 'STOP'
+]
+
AminoAcid.codonMap = {
- 'TAA': 'STOP',
- 'TGA': 'STOP',
- 'TAG': 'STOP',
- 'GTT': 'Val',
- 'GTC': 'Val',
- 'GTA': 'Val',
- 'GTG': 'Val',
- 'TAT': 'Tyr',
- 'TAC': 'Tyr',
- 'TGG': 'Trp',
- 'ACT': 'Thr',
- 'ACC': 'Thr',
- 'ACA': 'Thr',
- 'ACG': 'Thr',
- 'TCT': 'Ser',
- 'TCC': 'Ser',
- 'TCA': 'Ser',
- 'TCG': 'Ser',
- 'AGT': 'Ser',
- 'AGC': 'Ser',
- 'CCT': 'Pro',
- 'CCC': 'Pro',
- 'CCA': 'Pro',
- 'CCG': 'Pro',
- 'TTT': 'Phe',
- 'TTC': 'Phe',
+ 'GCT': 'Ala', 'GCC': 'Ala', 'GCA': 'Ala', 'GCG': 'Ala',
+ 'CGT': 'Arg', 'CGC': 'Arg', 'CGA': 'Arg', 'CGG': 'Arg', 'AGA': 'Arg', 'AGG': 'Arg',
+ 'AAT': 'Asn', 'AAC': 'Asn',
+ 'GAT': 'Asp', 'GAC': 'Asp',
+ 'TGT': 'Cys', 'TGC': 'Cys',
+ 'CAA': 'Gln', 'CAG': 'Gln',
+ 'GAA': 'Glu', 'GAG': 'Glu',
+ 'GGT': 'Gly', 'GGC': 'Gly', 'GGA': 'Gly', 'GGG': 'Gly',
+ 'CAT': 'His', 'CAC': 'His',
+ 'ATT': 'Ile', 'ATC': 'Ile', 'ATA': 'Ile',
+ 'CTT': 'Leu', 'CTC': 'Leu', 'CTA': 'Leu', 'CTG': 'Leu', 'TTA': 'Leu', 'TTG': 'Leu',
+ 'AAA': 'Lys', 'AAG': 'Lys',
'ATG': 'Met',
- 'AAA': 'Lys',
- 'AAG': 'Lys',
- 'CTT': 'Leu',
- 'CTC': 'Leu',
- 'CTA': 'Leu',
- 'CTG': 'Leu',
- 'TTA': 'Leu',
- 'TTG': 'Leu',
- 'ATT': 'Ile',
- 'ATC': 'Ile',
- 'ATA': 'Ile',
- 'CAT': 'His',
- 'CAC': 'His',
- 'GGT': 'Gly',
- 'GGC': 'Gly',
- 'GGA': 'Gly',
- 'GGG': 'Gly',
- 'GAA': 'Glu',
- 'GAG': 'Glu',
- 'CAA': 'Gln',
- 'CAG': 'Gln',
- 'TGT': 'Cys',
- 'TGC': 'Cys',
- 'GAT': 'Asp',
- 'GAC': 'Asp',
- 'AAT': 'Asn',
- 'AAC': 'Asn',
- 'CGT': 'Arg',
- 'CGC': 'Arg',
- 'CGA': 'Arg',
- 'CGG': 'Arg',
- 'AGA': 'Arg',
- 'AGG': 'Arg',
- 'GCT': 'Ala',
- 'GCC': 'Ala',
- 'GCA': 'Ala',
- 'GCG': 'Ala',
+ 'TTT': 'Phe', 'TTC': 'Phe',
+ 'CCT': 'Pro', 'CCC': 'Pro', 'CCA': 'Pro', 'CCG': 'Pro',
+ 'TCT': 'Ser', 'TCC': 'Ser', 'TCA': 'Ser', 'TCG': 'Ser', 'AGT': 'Ser', 'AGC': 'Ser',
+ 'ACT': 'Thr', 'ACC': 'Thr', 'ACA': 'Thr', 'ACG': 'Thr',
+ 'TGG': 'Trp',
+ 'TAT': 'Tyr', 'TAC': 'Tyr',
+ 'GTT': 'Val', 'GTC': 'Val', 'GTA': 'Val', 'GTG': 'Val',
+ 'TAA': 'STOP', 'TGA': 'STOP', 'TAG': 'STOP',
}
export default AminoAcid