Integrate KeyboardFire's phondue into IPAField
Rewrote MIT-Licensed scripts to work as Inferno components. Use keyboard shortcuts, smart replacement, or a table selection to choose IPA characters!
This commit is contained in:
parent
b3be22c26a
commit
7cd8ac75a3
|
@ -28,7 +28,9 @@
|
|||
"css-loader": "^0.28.0",
|
||||
"express": "^4.15.2",
|
||||
"file-loader": "^0.11.1",
|
||||
"html-loader": "^0.4.5",
|
||||
"node-sass": "^4.5.2",
|
||||
"raw-loader": "^0.5.1",
|
||||
"sass-loader": "^6.0.3",
|
||||
"style-loader": "^0.16.1",
|
||||
"url-loader": "^0.5.8",
|
||||
|
|
|
@ -1,97 +1,119 @@
|
|||
import Inferno from 'inferno';
|
||||
import Component from 'inferno-component';
|
||||
|
||||
const phondueUsage = require('../../../vendor/KeyboardFire/phondue/usage.html');
|
||||
const digraphsHexes = require('../../../vendor/KeyboardFire/phondue/digraphs.txt');
|
||||
|
||||
import Helper from '../../Helper';
|
||||
|
||||
import {IPATable} from './IPATable';
|
||||
|
||||
export class IPAField extends Component {
|
||||
/*
|
||||
Modified from KeyboardFire's Phondue project (https://github.com/KeyboardFire/phondue)
|
||||
to fit React/Inferno and Lexiconga
|
||||
*/
|
||||
constructor (props) {
|
||||
super(props);
|
||||
|
||||
this.field = null;
|
||||
|
||||
this.letterPossibilities = {
|
||||
'a': ['\u00E6', '\u0276', '\u0250', '\u0251', '\u0252']
|
||||
, 'e': ['\u025B', '\u0258', '\u0259', '\u025C', '\u0153']
|
||||
, 'i': ['\u026A', '\u0268']
|
||||
, 'o': ['\u0153', '\u00F8', '\u0275', '\u0254']
|
||||
, 'u': ['\u0289', '\u028C', '\u028A', '\u026F']
|
||||
, 'y': ['\u028F', '\u006A', '\u028E', '\u026F']
|
||||
}
|
||||
|
||||
this.state = {
|
||||
value: ''
|
||||
, isFocused: false
|
||||
, shouldDisplay: false
|
||||
value: props.value || ''
|
||||
, doShowHelp: false
|
||||
, doShowTable: false
|
||||
}
|
||||
|
||||
this.field = null;
|
||||
this.digraphs = {};
|
||||
}
|
||||
|
||||
get valueAtCursor () {
|
||||
const startPosition = this.field.selectionStart
|
||||
, endPosition = this.field.selectionEnd;
|
||||
|
||||
// Get the character left of the farthest forward selection position.
|
||||
let index = (startPosition === endPosition ? startPosition - 1 : (endPosition < startPosition ? startPosition : endPosition) - 1)
|
||||
if (!index && index !== 0) {
|
||||
index = -1;
|
||||
}
|
||||
const character = this.state.value.charAt(index) || '';
|
||||
|
||||
return {
|
||||
character: character
|
||||
, position: index
|
||||
};
|
||||
}
|
||||
|
||||
get valueAtCursorIsUpperCase () {
|
||||
return Helper.characterIsUppercase(this.valueAtCursor.character);
|
||||
}
|
||||
|
||||
get valueAtCursorHasSuggestions () {
|
||||
return this.letterPossibilities.hasOwnProperty(this.valueAtCursor.character.toLowerCase());
|
||||
}
|
||||
|
||||
get valueAtCursorPossibilities () {
|
||||
return this.valueAtCursorHasSuggestions
|
||||
? this.letterPossibilities[this.valueAtCursor.character.toLowerCase()]
|
||||
: [];
|
||||
}
|
||||
|
||||
checkDisplay () {
|
||||
console.log(this.valueAtCursor);
|
||||
this.setState({
|
||||
valueAtCursorHasSuggestions: this.valueAtCursorHasSuggestions
|
||||
componentDidMount () {
|
||||
// Decode digraph hexes.
|
||||
digraphsHexes.split('\n').forEach(digraph => {
|
||||
let chunks = digraph.match(/\S{8}/g);
|
||||
if (!chunks || chunks.length != 3) return; // failsafe
|
||||
chunks = chunks.map(hex => {
|
||||
return String.fromCharCode(parseInt(hex, 16));
|
||||
});
|
||||
this.digraphs[chunks[0] + chunks[1]] = chunks[2];
|
||||
});
|
||||
}
|
||||
|
||||
listSuggestions () {
|
||||
if (this.state.isFocused && this.state.valueAtCursorHasSuggestions) {
|
||||
showHelp () {
|
||||
if (this.state.doShowHelp) {
|
||||
return (
|
||||
<div className='ipa-suggest'
|
||||
onClick={() => this.setState({ isFocused: true }, this.checkDisplay)}>
|
||||
{this.valueAtCursorHasSuggestions
|
||||
? this.valueAtCursorPossibilities.map(letter => {
|
||||
return (
|
||||
<a className='button is-small is-link'
|
||||
onClick={() => this.replaceValueAtCursor(letter)}>
|
||||
{this.valueAtCursorIsUpperCase ? letter.toUpperCase() : letter}
|
||||
</a>
|
||||
);
|
||||
})
|
||||
: ''}
|
||||
<div className='modal is-active'>
|
||||
<div className='modal-background'
|
||||
onClick={() => this.setState({ doShowHelp: false })} />
|
||||
<div className='modal-card'>
|
||||
<div className='modal-card-body'>
|
||||
|
||||
<div className='content'
|
||||
dangerouslySetInnerHTML={{__html: phondueUsage}} />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
replaceValueAtCursor (character) {
|
||||
const valueAtCursor = this.valueAtCursor;
|
||||
let updatedValue = this.state.value;
|
||||
updatedValue = updatedValue.replaceAt(valueAtCursor.position, (this.valueAtCursorIsUpperCase) ? character.toUpperCase() : character);
|
||||
showTable () {
|
||||
if (this.state.doShowTable) {
|
||||
return (
|
||||
<div className='modal is-active'>
|
||||
<div className='modal-background'
|
||||
onClick={() => this.setState({ doShowTable: false })} />
|
||||
<div className='modal-card'><div className='modal-card-body'>
|
||||
<IPATable
|
||||
value={this.state.value}
|
||||
update={newValue => this.setState({ value: newValue }, this.field.focus())} />
|
||||
</div></div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
this.setState({ value: updatedValue }, () => {
|
||||
this.field.focus();
|
||||
this.field.startPosition = valueAtCursor.index + 1;
|
||||
});
|
||||
showButtons () {
|
||||
if (!this.props.isDisplayOnly) {
|
||||
return (
|
||||
<div>
|
||||
<div className='help'>
|
||||
<a className='button is-small'
|
||||
onClick={() => this.setState({ doShowHelp: true })}>
|
||||
Field Help
|
||||
</a>
|
||||
|
||||
<a className='button is-small'
|
||||
onClick={() => this.setState({ doShowTable: true })}>
|
||||
Show IPA Table
|
||||
</a>
|
||||
</div>
|
||||
{this.showHelp()} {this.showTable()}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
onInput (event) {
|
||||
let val = event.target.value
|
||||
, pos = this.field.selectionStart || val.length;
|
||||
|
||||
if (event.key) {
|
||||
const key = event.key
|
||||
, digraph = this.digraphs[val.substr(pos - 1, 1) + key];
|
||||
|
||||
if (digraph) {
|
||||
event.preventDefault();
|
||||
val = val.slice(0, pos - 1) + digraph + val.slice(pos);
|
||||
}
|
||||
}
|
||||
|
||||
if (val !== this.state.value) {
|
||||
this.setState({ value: val }, () => {
|
||||
this.field.focus();
|
||||
this.field.setSelectionRange(pos, pos);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
render () {
|
||||
|
@ -99,26 +121,14 @@ export class IPAField extends Component {
|
|||
<div className='field'>
|
||||
<label className='label'>Pronunciation</label>
|
||||
<p className='control'>
|
||||
<input className='input' type='text' placeholder='[prə.ˌnʌn.si.ˈeɪ.ʃən]'
|
||||
<input className='input' type='text' disabled={!!this.props.isDisplayOnly} placeholder='[prə.ˌnʌn.si.ˈeɪ.ʃən]'
|
||||
ref={input => this.field = input}
|
||||
value={this.state.value}
|
||||
onFocus={() => {
|
||||
setTimeout(() => {
|
||||
this.setState({ isFocused: true }, this.checkDisplay)
|
||||
}, 250);
|
||||
}}
|
||||
onBlur={() => {
|
||||
setTimeout(() => {
|
||||
this.setState({ isFocused: false }, this.checkDisplay)
|
||||
}, 250);
|
||||
}}
|
||||
onInput={event => {
|
||||
this.setState({ value: event.target.value }, this.checkDisplay);
|
||||
}}
|
||||
onInput={event => this.onInput(event)}
|
||||
onKeyDown={event => this.onInput(event)}
|
||||
onChange={() => this.props.onChange(this.state.value)} />
|
||||
|
||||
{this.listSuggestions()}
|
||||
</p>
|
||||
{this.showButtons()}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,379 @@
|
|||
000000210000002a 000001c3
|
||||
000000210000002f 000000a1
|
||||
000000220000005e 0000030b
|
||||
000000220000005f 0000030f
|
||||
000000230000005f 0000033b
|
||||
0000002700000027 000002c8
|
||||
0000002700000029 000002bc
|
||||
000000270000002d 000002d4
|
||||
000000270000005e 00000341
|
||||
000000270000005f 00000340
|
||||
0000002800000028 00000361
|
||||
000000280000005f 0000031c
|
||||
0000002900000029 0000035c
|
||||
000000290000005f 00000339
|
||||
0000002b0000005f 0000031f
|
||||
0000002b0000007c 0000a71b
|
||||
0000002c0000002c 000002cc
|
||||
0000002c0000002d 000002d5
|
||||
0000002d00000027 000002d4
|
||||
0000002d0000002c 000002d5
|
||||
0000002d0000003f 000002a1
|
||||
0000002d00000045 00000258
|
||||
0000002d00000048 00000127
|
||||
0000002d00000049 00000268
|
||||
0000002d0000004a 0000025f
|
||||
0000002d0000004c 0000026c
|
||||
0000002d0000004f 00000275
|
||||
0000002d00000055 00000289
|
||||
0000002d0000005e 00000304
|
||||
0000002d00000065 00000258
|
||||
0000002d00000068 00000127
|
||||
0000002d00000069 00000268
|
||||
0000002d0000006a 0000025f
|
||||
0000002d0000006c 0000026c
|
||||
0000002d0000006f 00000275
|
||||
0000002d00000075 00000289
|
||||
0000002d0000007c 0000a71c
|
||||
0000002d00000294 000002a1
|
||||
0000002d00000295 000002a2
|
||||
0000002d000002a1 00000294
|
||||
0000002d000002a2 00000295
|
||||
0000002d000002d0 000002d1
|
||||
0000002d000002d1 000002d0
|
||||
0000002f0000003e 00002197
|
||||
0000002f0000005c 0000028c
|
||||
0000002f0000005e 00002197
|
||||
000000310000007c 000002e9
|
||||
000000320000007c 000002e8
|
||||
000000330000007c 000002e7
|
||||
000000340000007c 000002e6
|
||||
000000350000007c 000002e5
|
||||
0000003a0000003a 000002d0
|
||||
0000003a0000005e 00000308
|
||||
0000003a0000005f 00000324
|
||||
0000003c0000007c 000022a3
|
||||
0000003d0000002a 000001c1
|
||||
0000003e0000002f 00002197
|
||||
0000003e00000052 000002de
|
||||
0000003e0000005c 00002198
|
||||
0000003e0000005e 0000031a
|
||||
0000003e00000072 000002de
|
||||
0000003e0000007c 000022a2
|
||||
0000003f0000002d 000002a1
|
||||
0000003f0000002f 00000295
|
||||
0000003f0000003f 00000294
|
||||
000000410000002f 00000250
|
||||
0000004100000041 00000251
|
||||
0000004100000045 000000e6
|
||||
000000410000007c 00000251
|
||||
0000004200000028 00000253
|
||||
0000004200000042 00000299
|
||||
0000004200000048 000003b2
|
||||
000000430000002c 000000e7
|
||||
000000430000002f 00000254
|
||||
0000004300000045 00000276
|
||||
0000004400000028 00000257
|
||||
0000004400000029 00000256
|
||||
0000004400000048 000000f0
|
||||
000000450000002d 00000258
|
||||
000000450000002f 00000259
|
||||
0000004500000042 0000025e
|
||||
0000004500000045 0000025b
|
||||
0000004700000028 00000260
|
||||
0000004700000047 00000262
|
||||
000000480000002c 00000266
|
||||
000000480000002d 00000127
|
||||
000000480000002f 00000265
|
||||
0000004800000048 0000029c
|
||||
000000480000005e 000002b0
|
||||
000000490000002d 00000268
|
||||
0000004900000049 0000026a
|
||||
0000004a00000028 00000284
|
||||
0000004a0000002c 0000029d
|
||||
0000004a0000002d 0000025f
|
||||
0000004a0000005e 000002b2
|
||||
0000004b0000002f 0000029e
|
||||
0000004c00000029 0000026d
|
||||
0000004c0000002d 0000026c
|
||||
0000004c0000004c 0000029f
|
||||
0000004c00000052 0000027a
|
||||
0000004c0000005a 0000026e
|
||||
0000004c0000005e 000002e1
|
||||
0000004c0000027e 0000027a
|
||||
0000004d0000002c 00000271
|
||||
0000004d0000002f 0000026f
|
||||
0000004d0000005e 00001d50
|
||||
0000004e00000029 00000273
|
||||
0000004e0000002c 0000014b
|
||||
0000004e0000004e 00000274
|
||||
0000004e0000005e 0000207f
|
||||
0000004f0000002a 00000298
|
||||
0000004f0000002d 00000275
|
||||
0000004f0000002e 00000298
|
||||
0000004f0000002f 000000f8
|
||||
0000004f00000045 00000153
|
||||
0000004f0000004f 0000025e
|
||||
0000004f00000058 00000264
|
||||
0000004f0000005e 0000030a
|
||||
0000004f0000005f 00000325
|
||||
0000004f0000007c 00000251
|
||||
0000005000000048 00000278
|
||||
0000005200000029 0000027d
|
||||
000000520000002f 00000279
|
||||
0000005200000030 0000027e
|
||||
000000520000003e 000002de
|
||||
000000520000004c 0000027a
|
||||
000000520000004f 0000027e
|
||||
0000005200000052 00000280
|
||||
0000005300000029 00000282
|
||||
0000005300000048 00000283
|
||||
000000530000004a 00000255
|
||||
0000005400000029 00000288
|
||||
0000005400000048 000003b8
|
||||
000000550000002d 00000289
|
||||
0000005500000055 0000028a
|
||||
000000550000005e 00000306
|
||||
000000550000005f 0000032e
|
||||
000000560000002c 00002c71
|
||||
000000560000002f 0000028c
|
||||
0000005600000030 0000028b
|
||||
000000560000004f 0000028b
|
||||
000000560000005e 0000030c
|
||||
000000560000005e 0000030c
|
||||
000000560000005f 0000032c
|
||||
000000570000002c 00000270
|
||||
000000570000002f 0000028d
|
||||
000000570000005e 000002b7
|
||||
000000570000007c 00000270
|
||||
000000580000002c 00000263
|
||||
000000580000004f 00000264
|
||||
0000005800000058 000003c7
|
||||
000000580000005e 0000033d
|
||||
0000005800000283 00000267
|
||||
000000590000002f 0000028e
|
||||
0000005900000059 0000028f
|
||||
0000005a00000029 00000290
|
||||
0000005a00000048 00000292
|
||||
0000005a0000004a 00000291
|
||||
0000005b0000005d 0000033b
|
||||
0000005b0000005f 0000032a
|
||||
0000005c0000003e 00002198
|
||||
0000005c00000056 00002198
|
||||
0000005c00000076 00002198
|
||||
0000005d0000005f 0000033a
|
||||
0000005e00000022 0000030b
|
||||
0000005e00000027 00000341
|
||||
0000005e0000002d 00000304
|
||||
0000005e0000002f 00002197
|
||||
0000005e0000003a 00000308
|
||||
0000005e0000003e 0000031a
|
||||
0000005e00000048 000002b0
|
||||
0000005e0000004a 000002b2
|
||||
0000005e0000004c 000002e1
|
||||
0000005e0000004d 00001d50
|
||||
0000005e0000004e 0000207f
|
||||
0000005e0000004f 0000030a
|
||||
0000005e00000055 00000306
|
||||
0000005e00000056 0000030c
|
||||
0000005e00000056 0000030c
|
||||
0000005e00000057 000002b7
|
||||
0000005e00000058 0000033d
|
||||
0000005e0000005e 00000302
|
||||
0000005e0000005e 00000302
|
||||
0000005e0000005f 0000032f
|
||||
0000005e00000068 000002b0
|
||||
0000005e0000006a 000002b2
|
||||
0000005e0000006c 000002e1
|
||||
0000005e0000006d 00001d50
|
||||
0000005e0000006e 0000207f
|
||||
0000005e0000006f 0000030a
|
||||
0000005e00000075 00000306
|
||||
0000005e00000076 0000030c
|
||||
0000005e00000076 0000030c
|
||||
0000005e00000077 000002b7
|
||||
0000005e00000078 0000033d
|
||||
0000005e0000007c 0000030d
|
||||
0000005e0000007e 00000303
|
||||
0000005e0000014b 00001d51
|
||||
0000005e00000263 000002e0
|
||||
0000005e00000265 00001da3
|
||||
0000005e0000028b 00001db9
|
||||
0000005e00000295 000002e4
|
||||
0000005f00000022 0000030f
|
||||
0000005f00000023 0000033b
|
||||
0000005f00000027 00000340
|
||||
0000005f00000028 0000031c
|
||||
0000005f00000029 00000339
|
||||
0000005f0000002b 0000031f
|
||||
0000005f0000003a 00000324
|
||||
0000005f0000004f 00000325
|
||||
0000005f00000055 0000032e
|
||||
0000005f00000056 0000032c
|
||||
0000005f0000005b 0000032a
|
||||
0000005f0000005d 0000033a
|
||||
0000005f0000005e 0000032f
|
||||
0000005f0000005f 00000320
|
||||
0000005f0000005f 00000320
|
||||
0000005f0000006f 00000325
|
||||
0000005f00000075 0000032e
|
||||
0000005f00000076 0000032c
|
||||
0000005f0000007b 0000033c
|
||||
0000005f0000007c 00000329
|
||||
0000005f0000007e 00000330
|
||||
0000005f000002d4 0000031d
|
||||
0000005f000002d5 0000031e
|
||||
0000005f000022a2 00000319
|
||||
0000005f000022a3 00000318
|
||||
000000610000002f 00000250
|
||||
000000610000007c 00000251
|
||||
0000006200000028 00000253
|
||||
000000630000002c 000000e7
|
||||
000000630000002f 00000254
|
||||
0000006400000028 00000257
|
||||
0000006400000029 00000256
|
||||
000000650000002d 00000258
|
||||
000000650000002f 00000259
|
||||
0000006700000028 00000260
|
||||
000000680000002c 00000266
|
||||
000000680000002d 00000127
|
||||
000000680000002f 00000265
|
||||
000000680000005e 000002b0
|
||||
000000690000002d 00000268
|
||||
0000006a00000028 00000284
|
||||
0000006a0000002c 0000029d
|
||||
0000006a0000002d 0000025f
|
||||
0000006a0000005e 000002b2
|
||||
0000006b0000002f 0000029e
|
||||
0000006c00000029 0000026d
|
||||
0000006c0000002d 0000026c
|
||||
0000006c0000005e 000002e1
|
||||
0000006c0000027e 0000027a
|
||||
0000006d0000002c 00000271
|
||||
0000006d0000002f 0000026f
|
||||
0000006d0000005e 00001d50
|
||||
0000006e00000029 00000273
|
||||
0000006e0000002c 0000014b
|
||||
0000006e0000005e 0000207f
|
||||
0000006f0000002a 00000298
|
||||
0000006f0000002d 00000275
|
||||
0000006f0000002e 00000298
|
||||
0000006f0000002f 000000f8
|
||||
0000006f0000005e 0000030a
|
||||
0000006f0000005f 00000325
|
||||
0000006f0000007c 00000251
|
||||
0000007200000029 0000027d
|
||||
000000720000002f 00000279
|
||||
0000007200000030 0000027e
|
||||
000000720000003e 000002de
|
||||
000000720000004f 0000027e
|
||||
0000007300000029 00000282
|
||||
0000007400000029 00000288
|
||||
000000750000002d 00000289
|
||||
000000750000005e 00000306
|
||||
000000750000005f 0000032e
|
||||
000000760000002c 00002c71
|
||||
000000760000002f 0000028c
|
||||
0000007600000030 0000028b
|
||||
000000760000004f 0000028b
|
||||
000000760000005e 0000030c
|
||||
000000760000005e 0000030c
|
||||
000000760000005f 0000032c
|
||||
000000770000002c 00000270
|
||||
000000770000002f 0000028d
|
||||
000000770000005e 000002b7
|
||||
000000770000007c 00000270
|
||||
000000780000002c 00000263
|
||||
000000780000005e 0000033d
|
||||
0000007800000283 00000267
|
||||
000000790000002f 0000028e
|
||||
0000007a00000029 00000290
|
||||
0000007b0000005f 0000033c
|
||||
0000007c0000002a 000001c0
|
||||
0000007c0000002d 0000a71c
|
||||
0000007c0000003c 000022a3
|
||||
0000007c0000003d 000001c2
|
||||
0000007c0000003e 000022a2
|
||||
0000007c00000041 00000252
|
||||
0000007c0000004f 00000252
|
||||
0000007c0000005e 0000030d
|
||||
0000007c0000005f 00000329
|
||||
0000007c00000061 00000252
|
||||
0000007c0000006f 00000252
|
||||
0000007c0000007c 00002016
|
||||
0000007e0000005e 00000303
|
||||
0000007e0000005f 00000330
|
||||
0000007e0000007e 00000334
|
||||
0000014b0000002c 00000272
|
||||
0000014b0000005e 00001d51
|
||||
0000014b00001d51 0000005e
|
||||
000002510000002f 00000252
|
||||
000002520000002f 00000251
|
||||
0000025600000028 00001d91
|
||||
0000025700000029 00001d91
|
||||
0000025b0000002f 0000025c
|
||||
0000025c00000028 0000025e
|
||||
0000025c0000002f 0000025b
|
||||
0000025e00000028 0000025c
|
||||
0000025f00000028 00000284
|
||||
0000026200000028 0000029b
|
||||
000002630000002c 000003c7
|
||||
000002630000005e 000002e0
|
||||
00000263000002e0 0000005e
|
||||
000002650000005e 00001da3
|
||||
0000026500001da3 0000005e
|
||||
0000026700000058 00000283
|
||||
0000026700000078 00000283
|
||||
0000026700000283 00000058
|
||||
0000026700000283 00000078
|
||||
000002720000002c 0000014b
|
||||
0000027900000029 0000027b
|
||||
0000027a0000004c 0000027e
|
||||
0000027a0000006c 0000027e
|
||||
0000027a0000027e 0000004c
|
||||
0000027a0000027e 0000006c
|
||||
0000027b00000029 00000279
|
||||
0000027d00000029 0000027e
|
||||
0000027e00000029 0000027d
|
||||
0000027e0000004c 0000027a
|
||||
0000027e0000006c 0000027a
|
||||
000002800000002f 00000281
|
||||
000002810000002f 00000280
|
||||
0000028300000058 00000267
|
||||
0000028300000078 00000267
|
||||
0000028400000028 0000025f
|
||||
0000028b0000005e 00001db9
|
||||
0000028b00001db9 0000005e
|
||||
000002940000002d 000002a1
|
||||
000002940000002f 00000295
|
||||
000002950000002d 000002a2
|
||||
000002950000002f 00000294
|
||||
000002950000005e 000002e4
|
||||
00000295000002e4 0000005e
|
||||
0000029b00000028 00000262
|
||||
000002a10000002d 00000294
|
||||
000002a20000002d 00000295
|
||||
000002d00000002d 000002d1
|
||||
000002d10000002d 000002d0
|
||||
000002d40000005f 0000031d
|
||||
000002d40000031d 0000005f
|
||||
000002d50000005f 0000031e
|
||||
000002d50000031e 0000005f
|
||||
000002e000000263 0000005e
|
||||
000002e400000295 0000005e
|
||||
00000318000022a3 0000005f
|
||||
00000319000022a2 0000005f
|
||||
0000031d000002d4 0000005f
|
||||
0000031e000002d5 0000005f
|
||||
0000035c00000029 0000203f
|
||||
000003c70000002c 00000263
|
||||
00001d510000014b 0000005e
|
||||
00001d9100000028 00000256
|
||||
00001d9100000029 00000257
|
||||
00001da300000265 0000005e
|
||||
00001db90000028b 0000005e
|
||||
0000203f00000029 0000035c
|
||||
000022a20000005f 00000319
|
||||
000022a200000319 0000005f
|
||||
000022a30000005f 00000318
|
||||
000022a300000318 0000005f
|
|
@ -0,0 +1,143 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang='en'>
|
||||
<head>
|
||||
<meta charset='utf-8'>
|
||||
<meta name='viewport' content='width=device-width'>
|
||||
<title>Phondue</title>
|
||||
<script type='text/javascript' src='phondue.js'></script>
|
||||
<link rel='stylesheet' type='text/css' href='phondue.css'></link>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Phondue</h1>
|
||||
<p id='subtitle'>An IPA entry tool so good, it's delicious</p>
|
||||
<p><strong><a href='https://github.com/KeyboardFire/phondue'>Desktop version</a></strong> | <strong>Hover over any symbol to view its digraphs</strong> (ex. <code>TH</code> → <code>θ</code>)</p>
|
||||
<div id='phondue'></div>
|
||||
<!--STARTUSAGE-->
|
||||
<h2>Usage</h2>
|
||||
<p>As seen in the above table, certain symbols of the IPA can be entered by
|
||||
clicking on them. However, it is far more efficient to use the many keyboard
|
||||
shortcuts that Phondue provides. These are called <strong>digraphs</strong>, since they are
|
||||
made up of two letters, and they allow you to type any IPA symbol with only a
|
||||
standard keyboard.</p>
|
||||
<p>These symbols were decided to be intuitive as possible:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Many symbols that look similar to letters of the English alphabet (such as
|
||||
small caps) can be produced by doubling the capital letter:</p>
|
||||
<pre><code> GG -> ɢ ?? -> ʔ NN -> ɴ BB -> ʙ RR -> ʀ XX -> χ
|
||||
LL -> ʟ II -> ɪ YY -> ʏ UU -> ʊ EE -> ɛ OO -> ɞ
|
||||
AA -> ɑ '' -> ˈ ,, -> ˌ :: -> ː
|
||||
</code></pre>
|
||||
</li>
|
||||
<li>
|
||||
<p>The slash is used to "reflect," "rotate," or otherwise flip around a given
|
||||
symbol:</p>
|
||||
<pre><code> ʀ/ -> ʁ ʔ/ -> ʕ ?/ -> ʕ r/ -> ɹ y/ -> ʎ m/ -> ɯ
|
||||
o/ -> ø e/ -> ə ɛ/ -> ɜ c/ -> ɔ a/ -> ɐ ɑ/ -> ɒ
|
||||
w/ -> ʍ h/ -> ɥ k/ -> ʞ !/ -> ¡ v/ -> ʌ
|
||||
</code></pre>
|
||||
<p>Also note that for any digraph, if either of the two characters that
|
||||
compose it are not "standard" letters you can find on your keyboard, the
|
||||
digraph can be done in reverse order—so since ʀ/ produces ʁ, you can press
|
||||
/ again to go back to ʀ in case of accidental flippage (it's also weirdly
|
||||
amusing to press RR///////).</p>
|
||||
<p>This sometimes makes it easier to enter certain pairs; you may prefer to
|
||||
use <code>AA</code> for <code>ɑ</code> and <code>AA/</code> for <code>ɒ</code> instead of the visual <code>o|</code> and <code>|o</code>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Digraphs have also been designed for when a symbol looks like two overlayed
|
||||
characters, or two characters next to each other. This includes "hooked"
|
||||
letters (such as ŋ), produced with the original letter and a comma, and
|
||||
"stroked" letters (such as ɟ), produced with the original letter and a dash:</p>
|
||||
<pre><code> m, -> ɱ n, -> ŋ ŋ, -> ɲ v, -> ⱱ c, -> ç j, -> ʝ
|
||||
x, -> ɣ ɣ, -> χ h, -> ɦ w, -> ɰ
|
||||
|
||||
j- -> ɟ h- -> ħ l- -> ɬ i- -> ɨ u- -> ʉ e- -> ɘ
|
||||
o- -> ɵ ʕ- -> ʢ ?- -> ʡ ʔ- -> ʡ
|
||||
|
||||
LZ -> ɮ OX -> ɤ XO -> ɤ OE -> œ EB -> ɞ AE -> æ
|
||||
CE -> ɶ RL -> ɺ LR -> ɺ ɾl -> ɺ lɾ -> ɺ
|
||||
|
||||
w| -> ɰ o/ -> ø ɜ( -> ɞ /\ -> ʌ o| -> ɑ a| -> ɑ
|
||||
|o -> ɒ |a -> ɒ
|
||||
|
||||
o. -> ʘ |= -> ǂ || -> ‖ /^ -> ↗ /> -> ↗ \v -> ↘
|
||||
\> -> ↘
|
||||
</code></pre>
|
||||
</li>
|
||||
<li>
|
||||
<p>Others are based on pronunciation:</p>
|
||||
<pre><code> PH -> ɸ BH -> β TH -> θ DH -> ð SH -> ʃ ZH -> ʒ
|
||||
SJ -> ɕ ZJ -> ʑ ʃx -> ɧ xʃ -> ɧ
|
||||
</code></pre>
|
||||
<p>It may be worth noting at this point that digraphs of two lowercase letters
|
||||
were intentionally avoided to prevent interference with regular typing. If
|
||||
you need to type a sequence without it turning into a digraph (maybe you
|
||||
want to type an actual <code>ʃx</code>), place a backslash between the two characters
|
||||
(so, type <code>ʃ\x</code>).</p>
|
||||
<p>In fact, [backslash][anything] is treated as a digraph that simply resolves
|
||||
to the second character.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>A few digraphs are based on shape:</p>
|
||||
<pre><code> rO -> ɾ r0 -> ɾ vO -> ʋ v0 -> ʋ
|
||||
</code></pre>
|
||||
<p>Another related point: digraphs that contain a lowercase letter can also be
|
||||
typed with that letter as uppercase. So, if <code>RO</code> is easier to type than
|
||||
<code>rO</code>, that works as well.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Retroflex and nonpulmonic symbols have their own categories:</p>
|
||||
<pre><code> retroflex: ) looks like the shape of the tongue
|
||||
t) -> ʈ d) -> ɖ n) -> ɳ r) -> ɽ ɾ) -> ɽ s) -> ʂ
|
||||
z) -> ʐ ɹ) -> ɻ l) -> ɭ ɗ) -> ᶑ
|
||||
|
||||
clicks: clicking noise reminiscent of a *
|
||||
o* -> ʘ |* -> ǀ !* -> ǃ =* -> ǁ
|
||||
|
||||
implosives and ejective marker: direction of airflow
|
||||
b( -> ɓ d( -> ɗ j( -> ʄ ɟ( -> ʄ g( -> ɠ ɢ( -> ʛ
|
||||
ɖ( -> ᶑ ') -> ʼ
|
||||
</code></pre>
|
||||
</li>
|
||||
<li>
|
||||
<p>Superscripts and diacritics that go above the letter use <code>^</code>, diacritics that
|
||||
go below use <code>_</code>, and miscellaneous "moved" symbols use <code><</code> or <code>></code>:</p>
|
||||
<pre><code> ^h -> ʰ ^n -> ⁿ ^m -> ᵐ ^ŋ -> ᵑ ^l -> ˡ ^w -> ʷ
|
||||
^j -> ʲ ^ɥ -> ᶣ ^ʋ -> ᶹ ^ɣ -> ˠ ^ʕ -> ˤ
|
||||
|
||||
_| -> ◌̩ ^| -> ◌̍ _o -> ◌̥ ^o -> ◌̊ _v -> ◌̬ ^v -> ◌̌
|
||||
|
||||
_^ -> ◌̯ _: -> ◌̤ _~ -> ◌̰ _[ -> ◌̪ _] -> ◌̺ _{ -> ◌̼
|
||||
_+ -> ◌̟ __ -> ◌̠ _) -> ◌̹ _( -> ◌̜ _# -> ◌̻ [] -> ◌̻
|
||||
|
||||
^> -> ◌̚ ^: -> ◌̈ ^x -> ◌̽ ^~ -> ◌̃
|
||||
|
||||
-' -> ˔ _˔ -> ◌̝ -, -> ˕ _˕ -> ◌̞ <| -> ⊣ _⊣ -> ◌̘
|
||||
>| -> ⊢ _⊢ -> ◌̙
|
||||
|
||||
~~ -> ◌̴ >r -> ˞
|
||||
</code></pre>
|
||||
<p>Note that all of these sequences can be flipped in order—that is, <code>^h</code>
|
||||
produces the same thing as <code>h^</code>. This allows usage such as <code>|<_</code> to produce
|
||||
<code>⊣_</code> which becomes ◌̘.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Tonal countours use numbers plus <code>|</code>:</p>
|
||||
<pre><code> 5| -> ˥ 4| -> ˦ 3| -> ˧ 2| -> ˨ 1| -> ˩
|
||||
+| -> ꜛ -| -> ꜜ
|
||||
</code></pre>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, some digraphs simply have unique mnemonics:</p>
|
||||
<pre><code> ː- -> ˑ "chop off" the bottom triangle
|
||||
(( -> ◌͡◌ two parens for a tie that connects 2 chars
|
||||
)) -> ◌͜◌
|
||||
◌͜◌) -> ‿ one more paren to make it a little bit longer
|
||||
</code></pre>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!--ENDUSAGE-->
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,48 @@
|
|||
body {
|
||||
font-family: sans-serif;
|
||||
max-width: 1000px;
|
||||
margin: 0px auto;
|
||||
padding: 20px 10px;
|
||||
color: #333;
|
||||
background-color: #f7f7f7;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
#subtitle {
|
||||
font-style: italic;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
}
|
||||
td.grey {
|
||||
background-color: #ddd;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 5px 10px;
|
||||
border: none;
|
||||
background: none;
|
||||
}
|
||||
button:hover {
|
||||
background-color: #eee;
|
||||
box-shadow: 0px 0px 10px rgba(0,0,0,0.2) inset;
|
||||
}
|
||||
button:active {
|
||||
background-color: #ccc;
|
||||
}
|
||||
|
||||
#inputBox {
|
||||
width: 98%;
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
(function() {
|
||||
var inputBox;
|
||||
var keypress = function(e) {
|
||||
var val = inputBox.value,
|
||||
key = String.fromCharCode(e.which || e.keyCode),
|
||||
pos = inputBox.selectionStart || val.length,
|
||||
digraph = digraphs[val.substr(pos - 1, 1) + key];
|
||||
if (digraph) {
|
||||
e.preventDefault();
|
||||
val = val.slice(0, pos - 1) + digraph + val.slice(pos);
|
||||
inputBox.value = val;
|
||||
}
|
||||
};
|
||||
|
||||
var digraphs = {};
|
||||
|
||||
window.addEventListener('load', function() {
|
||||
var phondue = document.getElementById('phondue');
|
||||
|
||||
var builderReq = new XMLHttpRequest();
|
||||
builderReq.addEventListener('load', function() {
|
||||
phondue.innerHTML = this.responseText;
|
||||
[].slice.call(document.getElementsByTagName('button'))
|
||||
.forEach(function(btn) {
|
||||
btn.addEventListener('click', function() {
|
||||
inputBox.value += btn.innerText;
|
||||
inputBox.focus();
|
||||
});
|
||||
});
|
||||
|
||||
inputBox = document.createElement('input');
|
||||
inputBox.id = 'inputBox';
|
||||
inputBox.spellcheck = false;
|
||||
inputBox.addEventListener('keypress', keypress);
|
||||
phondue.appendChild(inputBox);
|
||||
});
|
||||
builderReq.open('GET', 'builder.html');
|
||||
builderReq.send();
|
||||
|
||||
var digraphsReq = new XMLHttpRequest();
|
||||
digraphsReq.addEventListener('load', function() {
|
||||
this.responseText.split('\n').forEach(function(digraph) {
|
||||
var chunks = digraph.match(/\S{8}/g);
|
||||
if (!chunks || chunks.length != 3) return; // failsafe
|
||||
chunks = chunks.map(function(hex) {
|
||||
return String.fromCharCode(parseInt(hex, 16));
|
||||
});
|
||||
digraphs[chunks[0] + chunks[1]] = chunks[2];
|
||||
});
|
||||
});
|
||||
digraphsReq.open('GET', 'digraphs.txt');
|
||||
digraphsReq.send();
|
||||
});
|
||||
})();
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,124 @@
|
|||
<h2>Usage</h2>
|
||||
<p>As seen in the above table, certain symbols of the IPA can be entered by
|
||||
clicking on them. However, it is far more efficient to use the many keyboard
|
||||
shortcuts that Phondue provides. These are called <strong>digraphs</strong>, since they are
|
||||
made up of two letters, and they allow you to type any IPA symbol with only a
|
||||
standard keyboard.</p>
|
||||
<p>These symbols were decided to be intuitive as possible:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Many symbols that look similar to letters of the English alphabet (such as
|
||||
small caps) can be produced by doubling the capital letter:</p>
|
||||
<pre><code> GG -> ɢ ?? -> ʔ NN -> ɴ BB -> ʙ RR -> ʀ XX -> χ
|
||||
LL -> ʟ II -> ɪ YY -> ʏ UU -> ʊ EE -> ɛ OO -> ɞ
|
||||
AA -> ɑ '' -> ˈ ,, -> ˌ :: -> ː
|
||||
</code></pre>
|
||||
</li>
|
||||
<li>
|
||||
<p>The slash is used to "reflect," "rotate," or otherwise flip around a given
|
||||
symbol:</p>
|
||||
<pre><code> ʀ/ -> ʁ ʔ/ -> ʕ ?/ -> ʕ r/ -> ɹ y/ -> ʎ m/ -> ɯ
|
||||
o/ -> ø e/ -> ə ɛ/ -> ɜ c/ -> ɔ a/ -> ɐ ɑ/ -> ɒ
|
||||
w/ -> ʍ h/ -> ɥ k/ -> ʞ !/ -> ¡ v/ -> ʌ
|
||||
</code></pre>
|
||||
<p>Also note that for any digraph, if either of the two characters that
|
||||
compose it are not "standard" letters you can find on your keyboard, the
|
||||
digraph can be done in reverse order—so since ʀ/ produces ʁ, you can press
|
||||
/ again to go back to ʀ in case of accidental flippage (it's also weirdly
|
||||
amusing to press RR///////).</p>
|
||||
<p>This sometimes makes it easier to enter certain pairs; you may prefer to
|
||||
use <code>AA</code> for <code>ɑ</code> and <code>AA/</code> for <code>ɒ</code> instead of the visual <code>o|</code> and <code>|o</code>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Digraphs have also been designed for when a symbol looks like two overlayed
|
||||
characters, or two characters next to each other. This includes "hooked"
|
||||
letters (such as ŋ), produced with the original letter and a comma, and
|
||||
"stroked" letters (such as ɟ), produced with the original letter and a dash:</p>
|
||||
<pre><code> m, -> ɱ n, -> ŋ ŋ, -> ɲ v, -> ⱱ c, -> ç j, -> ʝ
|
||||
x, -> ɣ ɣ, -> χ h, -> ɦ w, -> ɰ
|
||||
|
||||
j- -> ɟ h- -> ħ l- -> ɬ i- -> ɨ u- -> ʉ e- -> ɘ
|
||||
o- -> ɵ ʕ- -> ʢ ?- -> ʡ ʔ- -> ʡ
|
||||
|
||||
LZ -> ɮ OX -> ɤ XO -> ɤ OE -> œ EB -> ɞ AE -> æ
|
||||
CE -> ɶ RL -> ɺ LR -> ɺ ɾl -> ɺ lɾ -> ɺ
|
||||
|
||||
w| -> ɰ o/ -> ø ɜ( -> ɞ /\ -> ʌ o| -> ɑ a| -> ɑ
|
||||
|o -> ɒ |a -> ɒ
|
||||
|
||||
o. -> ʘ |= -> ǂ || -> ‖ /^ -> ↗ /> -> ↗ \v -> ↘
|
||||
\> -> ↘
|
||||
</code></pre>
|
||||
</li>
|
||||
<li>
|
||||
<p>Others are based on pronunciation:</p>
|
||||
<pre><code> PH -> ɸ BH -> β TH -> θ DH -> ð SH -> ʃ ZH -> ʒ
|
||||
SJ -> ɕ ZJ -> ʑ ʃx -> ɧ xʃ -> ɧ
|
||||
</code></pre>
|
||||
<p>It may be worth noting at this point that digraphs of two lowercase letters
|
||||
were intentionally avoided to prevent interference with regular typing. If
|
||||
you need to type a sequence without it turning into a digraph (maybe you
|
||||
want to type an actual <code>ʃx</code>), place a backslash between the two characters
|
||||
(so, type <code>ʃ\x</code>).</p>
|
||||
<p>In fact, [backslash][anything] is treated as a digraph that simply resolves
|
||||
to the second character.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>A few digraphs are based on shape:</p>
|
||||
<pre><code> rO -> ɾ r0 -> ɾ vO -> ʋ v0 -> ʋ
|
||||
</code></pre>
|
||||
<p>Another related point: digraphs that contain a lowercase letter can also be
|
||||
typed with that letter as uppercase. So, if <code>RO</code> is easier to type than
|
||||
<code>rO</code>, that works as well.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Retroflex and nonpulmonic symbols have their own categories:</p>
|
||||
<pre><code> retroflex: ) looks like the shape of the tongue
|
||||
t) -> ʈ d) -> ɖ n) -> ɳ r) -> ɽ ɾ) -> ɽ s) -> ʂ
|
||||
z) -> ʐ ɹ) -> ɻ l) -> ɭ ɗ) -> ᶑ
|
||||
|
||||
clicks: clicking noise reminiscent of a *
|
||||
o* -> ʘ |* -> ǀ !* -> ǃ =* -> ǁ
|
||||
|
||||
implosives and ejective marker: direction of airflow
|
||||
b( -> ɓ d( -> ɗ j( -> ʄ ɟ( -> ʄ g( -> ɠ ɢ( -> ʛ
|
||||
ɖ( -> ᶑ ') -> ʼ
|
||||
</code></pre>
|
||||
</li>
|
||||
<li>
|
||||
<p>Superscripts and diacritics that go above the letter use <code>^</code>, diacritics that
|
||||
go below use <code>_</code>, and miscellaneous "moved" symbols use <code><</code> or <code>></code>:</p>
|
||||
<pre><code> ^h -> ʰ ^n -> ⁿ ^m -> ᵐ ^ŋ -> ᵑ ^l -> ˡ ^w -> ʷ
|
||||
^j -> ʲ ^ɥ -> ᶣ ^ʋ -> ᶹ ^ɣ -> ˠ ^ʕ -> ˤ
|
||||
|
||||
_| -> ◌̩ ^| -> ◌̍ _o -> ◌̥ ^o -> ◌̊ _v -> ◌̬ ^v -> ◌̌
|
||||
|
||||
_^ -> ◌̯ _: -> ◌̤ _~ -> ◌̰ _[ -> ◌̪ _] -> ◌̺ _{ -> ◌̼
|
||||
_+ -> ◌̟ __ -> ◌̠ _) -> ◌̹ _( -> ◌̜ _# -> ◌̻ [] -> ◌̻
|
||||
|
||||
^> -> ◌̚ ^: -> ◌̈ ^x -> ◌̽ ^~ -> ◌̃
|
||||
|
||||
-' -> ˔ _˔ -> ◌̝ -, -> ˕ _˕ -> ◌̞ <| -> ⊣ _⊣ -> ◌̘
|
||||
>| -> ⊢ _⊢ -> ◌̙
|
||||
|
||||
~~ -> ◌̴ >r -> ˞
|
||||
</code></pre>
|
||||
<p>Note that all of these sequences can be flipped in order—that is, <code>^h</code>
|
||||
produces the same thing as <code>h^</code>. This allows usage such as <code>|<_</code> to produce
|
||||
<code>⊣_</code> which becomes ◌̘.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Tonal countours use numbers plus <code>|</code>:</p>
|
||||
<pre><code> 5| -> ˥ 4| -> ˦ 3| -> ˧ 2| -> ˨ 1| -> ˩
|
||||
+| -> ꜛ -| -> ꜜ
|
||||
</code></pre>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, some digraphs simply have unique mnemonics:</p>
|
||||
<pre><code> ː- -> ˑ "chop off" the bottom triangle
|
||||
(( -> ◌͡◌ two parens for a tie that connects 2 chars
|
||||
)) -> ◌͜◌
|
||||
◌͜◌) -> ‿ one more paren to make it a little bit longer
|
||||
</code></pre>
|
||||
</li>
|
||||
</ul>
|
|
@ -36,6 +36,20 @@ const webpackConfig = {
|
|||
}
|
||||
]
|
||||
}
|
||||
, {
|
||||
test: (/\.html$/)
|
||||
, exclude: (/node_modules/)
|
||||
, use: [
|
||||
'html-loader'
|
||||
]
|
||||
}
|
||||
, {
|
||||
test: (/\.txt$/)
|
||||
, exclude: (/node_modules/)
|
||||
, use: [
|
||||
'raw-loader'
|
||||
]
|
||||
}
|
||||
, {
|
||||
test: (/\.jsx?$/)
|
||||
, exclude: (/node_modules/)
|
||||
|
|
122
yarn.lock
122
yarn.lock
|
@ -134,6 +134,10 @@ assert@^1.1.1:
|
|||
dependencies:
|
||||
util "0.10.3"
|
||||
|
||||
ast-types@0.9.6:
|
||||
version "0.9.6"
|
||||
resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9"
|
||||
|
||||
async-each@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
|
||||
|
@ -490,6 +494,13 @@ bulma@^0.4.0:
|
|||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/bulma/-/bulma-0.4.1.tgz#620b7986bc552311358aa9393c10905c55648864"
|
||||
|
||||
camel-case@3.0.x:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
|
||||
dependencies:
|
||||
no-case "^2.2.0"
|
||||
upper-case "^1.1.1"
|
||||
|
||||
camelcase-keys@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
|
||||
|
@ -570,6 +581,12 @@ clap@^1.0.9:
|
|||
dependencies:
|
||||
chalk "^1.1.3"
|
||||
|
||||
clean-css@4.0.x:
|
||||
version "4.0.12"
|
||||
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.0.12.tgz#a02e61707f1840bd3338f54dbc9acbda4e772fa3"
|
||||
dependencies:
|
||||
source-map "0.5.x"
|
||||
|
||||
cliui@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
|
||||
|
@ -656,6 +673,12 @@ combined-stream@^1.0.5, combined-stream@~1.0.5:
|
|||
dependencies:
|
||||
delayed-stream "~1.0.0"
|
||||
|
||||
commander@2.9.x:
|
||||
version "2.9.0"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
|
||||
dependencies:
|
||||
graceful-readlink ">= 1.0.0"
|
||||
|
||||
commondir@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
|
||||
|
@ -982,6 +1005,13 @@ error-ex@^1.2.0:
|
|||
dependencies:
|
||||
is-arrayish "^0.2.1"
|
||||
|
||||
es6-templates@^0.2.2:
|
||||
version "0.2.3"
|
||||
resolved "https://registry.yarnpkg.com/es6-templates/-/es6-templates-0.2.3.tgz#5cb9ac9fb1ded6eb1239342b81d792bbb4078ee4"
|
||||
dependencies:
|
||||
recast "~0.11.12"
|
||||
through "~2.3.6"
|
||||
|
||||
escape-html@~1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
|
||||
|
@ -994,6 +1024,10 @@ esprima@^2.6.0:
|
|||
version "2.7.3"
|
||||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
|
||||
|
||||
esprima@~3.1.0:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
|
||||
|
||||
esutils@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
|
||||
|
@ -1265,6 +1299,10 @@ graceful-fs@^4.1.2:
|
|||
version "4.1.11"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
|
||||
|
||||
"graceful-readlink@>= 1.0.0":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
|
||||
|
||||
har-schema@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
|
||||
|
@ -1311,6 +1349,10 @@ hawk@~3.1.3:
|
|||
hoek "2.x.x"
|
||||
sntp "1.x.x"
|
||||
|
||||
he@1.1.x:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
|
||||
|
||||
hmac-drbg@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
|
||||
|
@ -1338,6 +1380,29 @@ html-comment-regex@^1.1.0:
|
|||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
|
||||
|
||||
html-loader@^0.4.5:
|
||||
version "0.4.5"
|
||||
resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-0.4.5.tgz#5fbcd87cd63a5c49a7fce2fe56f425e05729c68c"
|
||||
dependencies:
|
||||
es6-templates "^0.2.2"
|
||||
fastparse "^1.1.1"
|
||||
html-minifier "^3.0.1"
|
||||
loader-utils "^1.0.2"
|
||||
object-assign "^4.1.0"
|
||||
|
||||
html-minifier@^3.0.1:
|
||||
version "3.4.3"
|
||||
resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.4.3.tgz#eb3a7297c804611f470454eeebe0aacc427e424a"
|
||||
dependencies:
|
||||
camel-case "3.0.x"
|
||||
clean-css "4.0.x"
|
||||
commander "2.9.x"
|
||||
he "1.1.x"
|
||||
ncname "1.0.x"
|
||||
param-case "2.1.x"
|
||||
relateurl "0.2.x"
|
||||
uglify-js "~2.8.22"
|
||||
|
||||
http-errors@~1.6.1:
|
||||
version "1.6.1"
|
||||
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257"
|
||||
|
@ -1752,6 +1817,10 @@ loud-rejection@^1.0.0:
|
|||
currently-unhandled "^0.4.1"
|
||||
signal-exit "^3.0.0"
|
||||
|
||||
lower-case@^1.1.1:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
|
||||
|
||||
lru-cache@^4.0.1:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e"
|
||||
|
@ -1895,10 +1964,22 @@ nan@^2.3.0, nan@^2.3.2:
|
|||
version "2.6.2"
|
||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45"
|
||||
|
||||
ncname@1.0.x:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c"
|
||||
dependencies:
|
||||
xml-char-classes "^1.0.0"
|
||||
|
||||
negotiator@0.6.1:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
|
||||
|
||||
no-case@^2.2.0:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.1.tgz#7aeba1c73a52184265554b7dc03baf720df80081"
|
||||
dependencies:
|
||||
lower-case "^1.1.1"
|
||||
|
||||
node-gyp@^3.3.1:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.0.tgz#7474f63a3a0501161dda0b6341f022f14c423fa6"
|
||||
|
@ -2100,6 +2181,12 @@ papaparse@^4.2.0:
|
|||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-4.2.0.tgz#ac5bed7de39445dabb6616a507024b8b88eee7c3"
|
||||
|
||||
param-case@2.1.x:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
|
||||
dependencies:
|
||||
no-case "^2.2.0"
|
||||
|
||||
parse-asn1@^5.0.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712"
|
||||
|
@ -2431,7 +2518,7 @@ preserve@^0.2.0:
|
|||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
|
||||
|
||||
private@^0.1.6:
|
||||
private@^0.1.6, private@~0.1.5:
|
||||
version "0.1.7"
|
||||
resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1"
|
||||
|
||||
|
@ -2514,6 +2601,10 @@ range-parser@~1.2.0:
|
|||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
|
||||
|
||||
raw-loader@^0.5.1:
|
||||
version "0.5.1"
|
||||
resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa"
|
||||
|
||||
rc@^1.1.7:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95"
|
||||
|
@ -2559,6 +2650,15 @@ readdirp@^2.0.0:
|
|||
readable-stream "^2.0.2"
|
||||
set-immediate-shim "^1.0.1"
|
||||
|
||||
recast@~0.11.12:
|
||||
version "0.11.23"
|
||||
resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3"
|
||||
dependencies:
|
||||
ast-types "0.9.6"
|
||||
esprima "~3.1.0"
|
||||
private "~0.1.5"
|
||||
source-map "~0.5.0"
|
||||
|
||||
redent@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
|
||||
|
@ -2613,6 +2713,10 @@ regjsparser@^0.1.4:
|
|||
dependencies:
|
||||
jsesc "~0.5.0"
|
||||
|
||||
relateurl@0.2.x:
|
||||
version "0.2.7"
|
||||
resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
|
||||
|
||||
remove-trailing-separator@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4"
|
||||
|
@ -2804,7 +2908,7 @@ source-map-support@^0.4.2:
|
|||
dependencies:
|
||||
source-map "^0.5.6"
|
||||
|
||||
source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3:
|
||||
source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.3:
|
||||
version "0.5.6"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
|
||||
|
||||
|
@ -2973,6 +3077,10 @@ tar@^2.0.0, tar@^2.2.1:
|
|||
fstream "^1.0.2"
|
||||
inherits "2"
|
||||
|
||||
through@~2.3.6:
|
||||
version "2.3.8"
|
||||
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||
|
||||
timers-browserify@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86"
|
||||
|
@ -3022,7 +3130,7 @@ type-is@~1.6.14:
|
|||
media-typer "0.3.0"
|
||||
mime-types "~2.1.15"
|
||||
|
||||
uglify-js@^2.8.5:
|
||||
uglify-js@^2.8.5, uglify-js@~2.8.22:
|
||||
version "2.8.22"
|
||||
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.22.tgz#d54934778a8da14903fa29a326fb24c0ab51a1a0"
|
||||
dependencies:
|
||||
|
@ -3057,6 +3165,10 @@ unpipe@~1.0.0:
|
|||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
|
||||
|
||||
upper-case@^1.1.1:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
|
||||
|
||||
url-loader@^0.5.8:
|
||||
version "0.5.8"
|
||||
resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.8.tgz#b9183b1801e0f847718673673040bc9dc1c715c5"
|
||||
|
@ -3200,6 +3312,10 @@ wrappy@1:
|
|||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||
|
||||
xml-char-classes@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d"
|
||||
|
||||
xtend@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
|
||||
|
|
Loading…
Reference in New Issue