From 098f16d944a09393d7de152b172dd4ccbb64547f Mon Sep 17 00:00:00 2001 From: Antti Pilto Date: Sun, 23 Sep 2018 22:50:35 +0300 Subject: [PATCH] Refactor to support adding lookalike group --- .editorconfig | 10 ++ .../ChooseCharacters/ChooseCharacters.jsx | 120 +++++++++--------- 2 files changed, 67 insertions(+), 63 deletions(-) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..d412ba8 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,10 @@ +root = true + +[src/**] +end_of_line = lf +insert_final_newline = true +charset = utf-8 +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + diff --git a/src/components/ChooseCharacters/ChooseCharacters.jsx b/src/components/ChooseCharacters/ChooseCharacters.jsx index c06c40c..047e4fc 100644 --- a/src/components/ChooseCharacters/ChooseCharacters.jsx +++ b/src/components/ChooseCharacters/ChooseCharacters.jsx @@ -12,11 +12,8 @@ class ChooseCharacters extends Component { selectedGroups: this.props.selectedGroups, showAlternatives: [] } - this.startGame = this.startGame.bind(this); - this.showGroupRows = this.showGroupRows.bind(this); this.toggleSelect = this.toggleSelect.bind(this); - this.selectAll = this.selectAll.bind(this); - this.selectNone = this.selectNone.bind(this); + this.startGame = this.startGame.bind(this); } getIndex(groupName) { @@ -28,7 +25,8 @@ class ChooseCharacters extends Component { } removeSelect(groupName) { - if(this.getIndex(groupName)<0) return; + if(this.getIndex(groupName)<0) + return; let newSelectedGroups = this.state.selectedGroups.slice(); newSelectedGroups.splice(this.getIndex(groupName), 1); this.setState({selectedGroups: newSelectedGroups}); @@ -39,55 +37,41 @@ class ChooseCharacters extends Component { } toggleSelect(groupName) { - if(this.getIndex(groupName) > -1) this.removeSelect(groupName); - else this.addSelect(groupName); + if(this.getIndex(groupName) > -1) + this.removeSelect(groupName); + else + this.addSelect(groupName); } - selectAll(whichKana) { - let thisKana = kanaDictionary[whichKana]; + selectAll(whichKana, altOnly=false, similarOnly=false) { + const thisKana = kanaDictionary[whichKana]; let newSelectedGroups = this.state.selectedGroups.slice(); - Object.keys(thisKana).map(function(groupName) { - if(!this.isSelected(groupName)) + Object.keys(thisKana).forEach(groupName => { + if(!this.isSelected(groupName) && ( + (altOnly && groupName.endsWith('_a')) || + (similarOnly && groupName.endsWith('_s')) || + (!altOnly && !similarOnly) + )) newSelectedGroups.push(groupName); - }, this); + }); this.setState({errMsg: '', selectedGroups: newSelectedGroups}); } - selectAllAlternative(whichKana) { - let thisKana = kanaDictionary[whichKana]; - let newSelectedGroups = this.state.selectedGroups.slice(); - Object.keys(thisKana).map(function(groupName) { - if(groupName.endsWith("_a")) - newSelectedGroups.push(groupName); - }, this); - this.setState({errMsg: '', selectedGroups: newSelectedGroups}); - } - - selectNone(whichKana) { + selectNone(whichKana, altOnly=false, similarOnly=false) { let newSelectedGroups = []; - this.state.selectedGroups.map(function(groupName) { + this.state.selectedGroups.forEach(groupName => { let mustBeRemoved = false; - Object.keys(kanaDictionary[whichKana]).map(function(removableGroupName) { - if(removableGroupName===groupName) + Object.keys(kanaDictionary[whichKana]).forEach(removableGroupName => { + if(removableGroupName === groupName && ( + (altOnly && groupName.endsWith('_a')) || + (similarOnly && groupName.endsWith('_s')) || + (!altOnly && !similarOnly) + )) mustBeRemoved = true; - }, this); + }); if(!mustBeRemoved) newSelectedGroups.push(groupName); - }, this); - this.setState({selectedGroups: newSelectedGroups}); - } - - selectNoneAlternative(whichKana) { - let newSelectedGroups = []; - this.state.selectedGroups.map(function(groupName) { - let mustBeRemoved = false; - Object.keys(kanaDictionary[whichKana]).map(function(removableGroupName) { - if(removableGroupName===groupName && groupName.endsWith("_a")) - mustBeRemoved = true; - }, this); - if(!mustBeRemoved) - newSelectedGroups.push(groupName); - }, this); + }); this.setState({selectedGroups: newSelectedGroups}); } @@ -125,27 +109,25 @@ class ChooseCharacters extends Component { status = 'unchecked' checkBtn += status - return
this.toggleAlternative(whichKana)} className="choose-row" > - { if(status == 'check') - this.selectNoneAlternative(whichKana); - else if(status == 'check half') - this.selectAllAlternative(whichKana); - else if(status == 'unchecked') - this.selectAllAlternative(whichKana); + this.selectNone(whichKana, true); + else if(status == 'check half' || status == 'unchecked') + this.selectAll(whichKana, true); e.stopPropagation(); }} > { - showAlternatives ? + showAlternatives ? : - } + } Alternative characters (ga · ba · kya..)
} @@ -153,7 +135,7 @@ class ChooseCharacters extends Component { showGroupRows(whichKana, showAlternatives) { const thisKana = kanaDictionary[whichKana]; let rows = []; - Object.keys(thisKana).forEach(function(groupName, idx) { + Object.keys(thisKana).forEach((groupName, idx) => { if(groupName.endsWith("group11_a")) rows.push(this.alternativeToggleRow(whichKana, showAlternatives)); @@ -166,7 +148,7 @@ class ChooseCharacters extends Component { handleToggleSelect={this.toggleSelect} />); } - }, this); + }); return rows; } @@ -200,9 +182,10 @@ class ChooseCharacters extends Component { {this.showGroupRows('hiragana', this.state.showAlternatives.indexOf('hiragana') >= 0)}
- this.selectAll('hiragana')}>All  ·  this.selectNone('hiragana')}>None -  ·  this.selectAllAlternative('hiragana')}>All alternative -  ·  this.selectNoneAlternative('hiragana')}>No alternative + this.selectAll('hiragana')}>All  ·  this.selectNone('hiragana')}>None +  ·  this.selectAll('hiragana', true)}>All alternative +  ·  this.selectNone('hiragana', true)}>No alternative
@@ -213,19 +196,30 @@ class ChooseCharacters extends Component { {this.showGroupRows('katakana', this.state.showAlternatives.indexOf('katakana') >= 0)}
- this.selectAll('katakana')}>All  ·  this.selectNone('katakana')}>None -  ·  this.selectAllAlternative('katakana')}>All alternative -  ·  this.selectNoneAlternative('katakana')}>No alternative + this.selectAll('katakana')}>All  ·  this.selectNone('katakana')}>None + +  ·  this.selectAll('katakana', true)}>All alternative +  ·  this.selectNone('katakana', true)}>No alternative
Lock to stage   - {this.props.isLocked?this.props.lockStage(e.target.value, true)} value={this.props.stage} />:''} + { + this.props.isLocked && + this.props.lockStage(e.target.value, true)} + value={this.props.stage} + /> + } this.props.lockStage(1)} on={this.props.isLocked} />
- {this.state.errMsg!=''?(
{this.state.errMsg}
):''} + { + this.state.errMsg != '' && +
{this.state.errMsg}
+ }
@@ -234,4 +228,4 @@ class ChooseCharacters extends Component { } } -export default ChooseCharacters; \ No newline at end of file +export default ChooseCharacters;