summaryrefslogtreecommitdiffstats
path: root/amino-acid.mjs
blob: cce1e0ef618642c1765d607ef4277ba6019d6b0f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
class AminoAcid {
    // Create a protein from three nucleotides.
    constructor(n1, n2, n3) {
        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 = {
    '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',
    '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