summaryrefslogtreecommitdiffstats
path: root/rules.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'rules.mjs')
-rw-r--r--rules.mjs252
1 files changed, 126 insertions, 126 deletions
diff --git a/rules.mjs b/rules.mjs
index 48f51dd..d397bf0 100644
--- a/rules.mjs
+++ b/rules.mjs
@@ -8,263 +8,263 @@ import Error from './error.mjs'
class CloneNucleotide {
constructor(rules) {
- this.rules = rules
+ this.rules = rules
this.id = 'clone-nucleotide'
- this._boundClickHandler = this.clickHandler.bind(this)
+ this._boundClickHandler = this.clickHandler.bind(this)
}
enter() {
- this.rules.cloneButton.addEventListener('click',
- this._boundClickHandler)
- this.rules.cloneButton.disabled = false
+ this.rules.cloneButton.addEventListener('click',
+ this._boundClickHandler)
+ this.rules.cloneButton.disabled = false
}
exit() {
- this.rules.cloneButton.removeEventListener('click',
- this._boundClickHandler)
- this.rules.cloneButton.disabled = true
+ this.rules.cloneButton.removeEventListener('click',
+ this._boundClickHandler)
+ this.rules.cloneButton.disabled = true
}
clickHandler(evt) {
- const genome = this.rules.currentGenome.clone()
- this.rules.genomeList.push(genome)
- this.rules.next(new RollForNucleotide(this.rules))
+ const genome = this.rules.currentGenome.clone()
+ this.rules.genomeList.push(genome)
+ this.rules.next(new RollForNucleotide(this.rules))
}
}
class RollForNucleotide {
constructor(rules) {
- this.rules = rules
+ this.rules = rules
this.id = 'roll-for-nucleotide'
}
enter() {
- this.rules.die.value = '--'
- this.rules.die.onChanged = this.handleDieRoll.bind(this)
- this.rules.die.enable()
+ this.rules.die.value = '--'
+ this.rules.die.onChanged = this.handleDieRoll.bind(this)
+ this.rules.die.enable()
}
exit() {
- this.rules.die.disable()
- this.rules.die.onChanged = undefined
+ this.rules.die.disable()
+ this.rules.die.onChanged = undefined
}
handleDieRoll() {
- if (this.rules.die.value > Genome.size) {
- this.rules.iterations--
- if (this.rules.isLastIteration) {
- this.rules.next(new DoNothing(this.rules))
- } else {
- this.rules.next(new CloneNucleotide(this.rules))
- }
- } else {
- this.rules.next(new NucleotideSelect(this.rules))
- }
+ if (this.rules.die.value > Genome.size) {
+ this.rules.iterations--
+ if (this.rules.isLastIteration) {
+ this.rules.next(new DoNothing(this.rules))
+ } else {
+ this.rules.next(new CloneNucleotide(this.rules))
+ }
+ } else {
+ this.rules.next(new NucleotideSelect(this.rules))
+ }
}
}
class NucleotideSelect {
constructor(rules) {
- this.rules = rules
+ this.rules = rules
this.id = 'nucleotide-select'
}
enter() {
- this.want = this.rules.die.value
- this.rules.instructions.querySelector('#select-number').innerHTML =
- `${this.want}<sup>${ordinalSuffix(this.want)}</sup>`
+ this.want = this.rules.die.value
+ this.rules.instructions.querySelector('#select-number').innerHTML =
+ `${this.want}<sup>${ordinalSuffix(this.want)}</sup>`
- this.rules.currentGenome.onSelectionChanged =
- this.handleSelectionChanged.bind(this)
- this.rules.currentGenome.unlock()
+ this.rules.currentGenome.onSelectionChanged =
+ this.handleSelectionChanged.bind(this)
+ this.rules.currentGenome.unlock()
}
exit() {
- this.rules.currentGenome.lock()
- this.rules.currentGenome.onSelectionChanged = undefined;
+ this.rules.currentGenome.lock()
+ this.rules.currentGenome.onSelectionChanged = undefined;
}
handleSelectionChanged(nucleotide, i) {
- i++;
- if (i != this.rules.die.value) {
- this.rules.error.innerHTML =
- `You selected the ${i}<sup>${ordinalSuffix(i)}</sup> nucleotide. Please select the ${this.want}<sup>${ordinalSuffix(this.want)}</sup> one.`
- this.rules.next(new ShowError(this.rules, this))
- return
- }
- this.rules.next(new RollForMutation(this.rules))
+ i++;
+ if (i != this.rules.die.value) {
+ this.rules.error.innerHTML =
+ `You selected the ${i}<sup>${ordinalSuffix(i)}</sup> nucleotide. Please select the ${this.want}<sup>${ordinalSuffix(this.want)}</sup> one.`
+ this.rules.next(new ShowError(this.rules, this))
+ return
+ }
+ this.rules.next(new RollForMutation(this.rules))
}
}
class RollForMutation {
constructor(rules) {
- this.rules = rules
+ this.rules = rules
this.id = 'roll-for-mutation'
}
enter() {
- this.rules.die.value = '--'
- this.rules.die.onChanged = this.handleDieRoll.bind(this)
- this.rules.die.enable()
+ this.rules.die.value = '--'
+ this.rules.die.onChanged = this.handleDieRoll.bind(this)
+ this.rules.die.enable()
}
exit() {
- this.rules.die.disable()
- this.rules.die.onChanged = undefined
+ this.rules.die.disable()
+ this.rules.die.onChanged = undefined
}
handleDieRoll() {
- this.rules.next(new PerformMutation(this.rules))
+ this.rules.next(new PerformMutation(this.rules))
}
}
class PerformMutation {
constructor(rules) {
- this.rules = rules
+ this.rules = rules
this.id = 'perform-mutation'
}
enter() {
- const selector = this.rules.nucleotideSelector
- selector.onItemSelected = this.handleItemSelected.bind(this)
- selector.attach(this.selectedNucleotide)
+ const selector = this.rules.nucleotideSelector
+ selector.onItemSelected = this.handleItemSelected.bind(this)
+ selector.attach(this.selectedNucleotide)
}
exit() {
- this.rules.nucleotideSelector.detach()
+ this.rules.nucleotideSelector.detach()
}
validMutation(from, to) {
- return to == this.expectedMutation[from]
+ return to == this.expectedMutation[from]
}
get expectedMutation() {
- if (this.rules.die.value <= 14) {
- return Nucleotide.transition
- } else if (this.rules.die.value <= 17) {
- return Nucleotide.complementingTransversion
- } else {
- return Nucleotide.defaultTransversion
- }
+ if (this.rules.die.value <= 14) {
+ return Nucleotide.transition
+ } else if (this.rules.die.value <= 17) {
+ return Nucleotide.complementingTransversion
+ } else {
+ return Nucleotide.defaultTransversion
+ }
}
get selectedNucleotide() {
- return this.rules.currentGenome.selectedNucleotide
+ return this.rules.currentGenome.selectedNucleotide
}
get errorTransitionHTML() {
- return `Select the base that corresponds to a <em>transition</em> of ${this.selectedNucleotide.value}.`
+ return `Select the base that corresponds to a <em>transition</em> of ${this.selectedNucleotide.value}.`
}
get errorComplementingTransversionHTML() {
- return `Select the base that corresponds to a <em>complementing transversion</em> of ${this.selectedNucleotide.value}.`
+ return `Select the base that corresponds to a <em>complementing transversion</em> of ${this.selectedNucleotide.value}.`
}
get errorDefaultTransversionHTML() {
- return `Select the base that corresponds to the <em>other transversion</em> of ${this.selectedNucleotide.value}.`
+ return `Select the base that corresponds to the <em>other transversion</em> of ${this.selectedNucleotide.value}.`
}
get errorHTML() {
- if (this.expectedMutation == Nucleotide.transition) {
- return this.errorTransitionHTML
- } else if (this.expectedMutation == Nucleotide.complementingTransversion) {
- return this.errorComplementingTransversionHTML
- } else {
- return this.errorDefaultTransversionHTML
- }
+ if (this.expectedMutation == Nucleotide.transition) {
+ return this.errorTransitionHTML
+ } else if (this.expectedMutation == Nucleotide.complementingTransversion) {
+ return this.errorComplementingTransversionHTML
+ } else {
+ return this.errorDefaultTransversionHTML
+ }
}
handleItemSelected(base) {
- if (!this.validMutation(this.selectedNucleotide.value, base)) {
- this.rules.error.innerHTML = this.errorHTML
- this.rules.next(new ShowError(this.rules, this))
- return
- }
-
- this.selectedNucleotide.value = base
- this.rules.iterations--
- if (this.rules.isLastIteration) {
- this.rules.next(new DoNothing(this.rules))
- } else {
- this.rules.next(new CloneNucleotide(this.rules))
- }
+ if (!this.validMutation(this.selectedNucleotide.value, base)) {
+ this.rules.error.innerHTML = this.errorHTML
+ this.rules.next(new ShowError(this.rules, this))
+ return
+ }
+
+ this.selectedNucleotide.value = base
+ this.rules.iterations--
+ if (this.rules.isLastIteration) {
+ this.rules.next(new DoNothing(this.rules))
+ } else {
+ this.rules.next(new CloneNucleotide(this.rules))
+ }
}
}
class DoNothing {
constructor(rules) {
- this.rules = rules
+ this.rules = rules
this.id = 'print-results'
- this._boundClickHandler = this.clickHandler.bind(this)
+ this._boundClickHandler = this.clickHandler.bind(this)
}
enter() {
- this.rules.printButton.addEventListener('click', this._boundClickHandler)
- this.rules.printButton.disabled = false
+ this.rules.printButton.addEventListener('click', this._boundClickHandler)
+ this.rules.printButton.disabled = false
}
exit() {
- this.rules.printButton.disabled = true
- this.rules.printButton.removeEventListener('click', this._boundClickHandler)
+ this.rules.printButton.disabled = true
+ this.rules.printButton.removeEventListener('click', this._boundClickHandler)
}
clickHandler() {
- window.print()
+ window.print()
}
}
class ShowError {
constructor(rules, nextState) {
- this.rules = rules
- this.nextState = nextState
+ this.rules = rules
+ this.nextState = nextState
- this._boundClickHandler = this.clickHandler.bind(this)
+ this._boundClickHandler = this.clickHandler.bind(this)
}
enter() {
- this.rules.error.onClick = this._boundClickHandler
- this.rules.error.show()
+ this.rules.error.onClick = this._boundClickHandler
+ this.rules.error.show()
}
exit() {
- this.rules.error.hide()
- this.rules.error.onClick = undefined
+ this.rules.error.hide()
+ this.rules.error.onClick = undefined
}
clickHandler() {
- this.rules.next(this.nextState)
+ this.rules.next(this.nextState)
}
}
class Rules {
constructor(die, instructions, genomeList, nucleotideSelector, cloneButton, remainingIterations, printButton, errors) {
- this.die = new Die(die)
- this.instructions = instructions
- this.genomeList = new GenomeList(genomeList)
- this.nucleotideSelector = new NucleotideSelector(nucleotideSelector)
- this.cloneButton = cloneButton
- this.remainingIterations = remainingIterations
- this.printButton = printButton
- this.error = new Error(errors)
-
- this.iterations = Rules.maxIterations
- this.cloneButton.disabled = true
- this.genomeList.push(new Genome(Rules.initialGenomeBases))
-
- if (false) {
- this._debugStartAtRollForMutation()
- } else if (false) {
- this._debugStartAtPerformMutation(4)
- } else if (false) {
- this._debugStartWithError()
- } else {
- this.currentState = new CloneNucleotide(this)
- }
- this.enterState()
+ this.die = new Die(die)
+ this.instructions = instructions
+ this.genomeList = new GenomeList(genomeList)
+ this.nucleotideSelector = new NucleotideSelector(nucleotideSelector)
+ this.cloneButton = cloneButton
+ this.remainingIterations = remainingIterations
+ this.printButton = printButton
+ this.error = new Error(errors)
+
+ this.iterations = Rules.maxIterations
+ this.cloneButton.disabled = true
+ this.genomeList.push(new Genome(Rules.initialGenomeBases))
+
+ if (false) {
+ this._debugStartAtRollForMutation()
+ } else if (false) {
+ this._debugStartAtPerformMutation(4)
+ } else if (false) {
+ this._debugStartWithError()
+ } else {
+ this.currentState = new CloneNucleotide(this)
+ }
+ this.enterState()
}
get iterations() {