From 70413fe92be06fa67e3424fc6bcdbd4d8a348d6b Mon Sep 17 00:00:00 2001 From: Argn0 Date: Mon, 18 Dec 2017 23:44:30 +0100 Subject: [PATCH 0001/1495] allow multiple selects/wheres on explorer UI --- src/components/Explorer/ExplorerFormField.jsx | 42 +++++-------- src/components/Explorer/queryTemplate.js | 61 +++++++++++++------ 2 files changed, 56 insertions(+), 47 deletions(-) diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index 51c6baa9da..e04e4e1b81 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -2,7 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import AutoComplete from 'material-ui/AutoComplete'; import DatePicker from 'material-ui/DatePicker'; -// import FormField from 'components/Form/FormField'; +import FormField from 'components/Form/FormField'; class ExplorerFormField extends React.Component { constructor() { @@ -77,33 +77,19 @@ class ExplorerFormField extends React.Component { } return ( - {/* - - */} - { this.autocomplete = ref; return null; }} - openOnFocus - listStyle={{ maxHeight: 400, overflow: 'auto' }} - fullWidth - filter={AutoComplete.caseInsensitiveFilter} - floatingLabelText={label} - dataSource={dataSource} - maxSearchResults={100} - onClick={this.resetField} - onNewRequest={(value, index) => { - handleFieldUpdate(builderField, index > -1 ? value.key : ''); - }} - /> + { + + } ); } } diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 7996d83b15..db9996c7b3 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -1,3 +1,25 @@ +function templ(strings, value) { + if (value.length === 0) { + return ''; + } + let r = 'AND ('; + const str0 = strings[0]; + const str1 = strings[1]; + + if (value instanceof Array) { + value.forEach((s, index) => { + r += str0 + s + str1; + + if (index !== value.length - 1) { + r += ' OR '; + } + }); + } else { + return `${str0 + value + str1})`; + } + return `${r})`; +} + const queryTemplate = (props) => { const { select, @@ -110,29 +132,29 @@ ${organization || (group && group.key === 'organization') ? 'JOIN team_match ON ${(select && select.join) ? select.join : ''} ${(select && select.joinFn) ? select.joinFn(props) : ''} WHERE TRUE -${select ? `AND ${select.value} IS NOT NULL` : ''} -${minPatch ? `AND match_patch.patch >= '${minPatch.value}'` : ''} -${maxPatch ? `AND match_patch.patch <= '${maxPatch.value}'` : ''} -${hero ? `AND player_matches.hero_id = ${hero.value}` : ''} -${player ? `AND player_matches.account_id = ${player.value}` : ''} -${league ? `AND matches.leagueid = ${league.value}` : ''} -${playerPurchased ? `AND (player_matches.purchase->>'${playerPurchased.value}')::int > 0` : ''} -${minDuration ? `AND matches.duration >= ${minDuration.value}` : ''} -${maxDuration ? `AND matches.duration <= ${maxDuration.value}` : ''} -${side ? `AND (player_matches.player_slot < 128) = ${side.value}` : ''} -${result ? `AND ((player_matches.player_slot < 128) = matches.radiant_win) = ${result.value}` : ''} -${team ? `AND notable_players.team_id = ${team.value}` : ''} -${organization ? `AND team_match.team_id = ${organization.value} AND (player_matches.player_slot < 128) = team_match.radiant` : ''} -${laneRole ? `AND player_matches.lane_role = ${laneRole.value}` : ''} -${region ? `AND matches.cluster IN (${region.value.join(',')})` : ''} -${minDate ? `AND matches.start_time >= extract(epoch from timestamp '${new Date(minDate.value).toISOString()}')` : ''} -${maxDate ? `AND matches.start_time <= extract(epoch from timestamp '${new Date(maxDate.value).toISOString()}')` : ''} -${tier ? `AND leagues.tier = '${tier.value}'` : ''} +${select ? select.value.map(x => `AND ${x} IS NOT NULL `).join('') : ''} +${minPatch ? templ`match_patch.patch >= '${maxPatch.value}'` : ''} +${maxPatch ? templ`match_patch.patch <= '${maxPatch.value}'` : ''} +${hero ? templ`player_matches.hero_id = ${hero.value}` : ''} +${player ? templ`player_matches.account_id = ${player.value}` : ''} +${league ? templ`matches.leagueid = ${league.value}` : ''} +${playerPurchased ? templ`(player_matches.purchase->>'${playerPurchased.value}')::int > 0` : ''} +${minDuration ? templ`matches.duration >= ${minDuration.value}` : ''} +${maxDuration ? templ`matches.duration <= ${maxDuration.value}` : ''} +${side ? templ`(player_matches.player_slot < 128) = ${side.value}` : ''} +${result ? templ`((player_matches.player_slot < 128) = matches.radiant_win) = ${result.value}` : ''} +${team ? templ`notable_players.team_id = ${team.value}` : ''} +${organization ? templ`team_match.team_id = ${organization.value} AND (player_matches.player_slot < 128) = team_match.radiant` : ''} +${laneRole ? templ`player_matches.lane_role = ${laneRole.value}` : ''} +${region ? templ`AND matches.cluster IN (${region.value.join(',')}` : ''} +${minDate ? templ`matches.start_time >= extract(epoch from timestamp '${new Date(minDate.value).toISOString()}')` : ''} +${maxDate ? templ`matches.start_time <= extract(epoch from timestamp '${new Date(maxDate.value).toISOString()}')` : ''} +${tier ? templ`leagues.tier = '${tier.value}'` : ''} ${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} ${group ? `GROUP BY ${groupVal}` : ''} ${group ? `HAVING count(distinct matches.match_id) >= ${having ? having.value : '1'}` : ''} ORDER BY ${ - [`${group ? 'avg' : (select && select.value) || 'matches.match_id'} ${(order && order.value) || (select && select.order) || 'DESC'}`, + [`${group ? 'avg' : (select && select.value[select.value.length - 1]) || 'matches.match_id'} ${(order && order.value) || (select && select.order) || 'DESC'}`, group ? 'count DESC' : '', ].filter(Boolean).join(',')} NULLS LAST LIMIT ${limit ? limit.value : 200}`; @@ -142,4 +164,5 @@ LIMIT ${limit ? limit.value : 200}`; .replace(/\n{2,}/g, '\n'); }; + export default queryTemplate; From 65a577d6a316e26e2da7815afb3b6d94dc629fd3 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 19 Dec 2017 10:04:29 +0100 Subject: [PATCH 0002/1495] reword --- src/components/Explorer/index.jsx | 1 + src/components/Explorer/queryTemplate.js | 18 +++++++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 9a4e9428c1..006486c42f 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -164,6 +164,7 @@ class Explorer extends React.Component { // This is ok if we only need the value prop (e.g. an id to build the query with) const expandedBuilder = expandBuilderState(this.state.builder, fields()); // TODO handle arrays + console.log(expandedBuilder) this.editor.setValue(queryTemplate(expandedBuilder)); } render() { diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index db9996c7b3..79be0fb23e 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -1,23 +1,22 @@ function templ(strings, value) { + var r = [] if (value.length === 0) { return ''; } - let r = 'AND ('; const str0 = strings[0]; const str1 = strings[1]; - if (value instanceof Array) { - value.forEach((s, index) => { - r += str0 + s + str1; - + r = value.map((s, index) => { + const p = `${str0}${s}${str1}`; if (index !== value.length - 1) { - r += ' OR '; + return `${p} OR `; } + return `${p}`; }); } else { - return `${str0 + value + str1})`; + return `${str0}${value}${str1}`; } - return `${r})`; + return `AND (${r.join('')})`; } const queryTemplate = (props) => { @@ -54,6 +53,7 @@ const queryTemplate = (props) => { // team // organization let query; + console.log(props) if (select && select.template === 'picks_bans') { query = `SELECT hero_id, @@ -146,7 +146,7 @@ ${result ? templ`((player_matches.player_slot < 128) = matches.radiant_win) = ${ ${team ? templ`notable_players.team_id = ${team.value}` : ''} ${organization ? templ`team_match.team_id = ${organization.value} AND (player_matches.player_slot < 128) = team_match.radiant` : ''} ${laneRole ? templ`player_matches.lane_role = ${laneRole.value}` : ''} -${region ? templ`AND matches.cluster IN (${region.value.join(',')}` : ''} +${region ? templ`AND matches.cluster IN (${region.value.join(',')})` : ''} ${minDate ? templ`matches.start_time >= extract(epoch from timestamp '${new Date(minDate.value).toISOString()}')` : ''} ${maxDate ? templ`matches.start_time <= extract(epoch from timestamp '${new Date(maxDate.value).toISOString()}')` : ''} ${tier ? templ`leagues.tier = '${tier.value}'` : ''} From 58f1c6c4f8477d4714b3d669fb5f71e83670d14f Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 19 Dec 2017 12:34:18 +0100 Subject: [PATCH 0003/1495] allow multiple selects/wheres on explorer UI --- src/components/Explorer/index.jsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 006486c42f..7644c3d104 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -39,12 +39,18 @@ function jsonResponse(response) { } function expandBuilderState(builder, _fields) { + //console.log(_fields) + console.log(builder) const expandedBuilder = {}; Object.keys(builder).forEach((key) => { - if (builder[key]) { + if (builder[key] instanceof Array) { + expandedBuilder[key] = builder[key].map(x => (_fields[key] || []).find(element => element.key === x) || { value: x }) + } + else if (builder[key]) { expandedBuilder[key] = (_fields[key] || []).find(element => element.key === builder[key]) || { value: builder[key] }; } }); + console.log(expandedBuilder) return expandedBuilder; } @@ -65,7 +71,7 @@ class Explorer extends React.Component { showEditor: Boolean(sqlState), loading: false, result: {}, - builder: urlState, + builder: '', }; this.instantiateEditor = this.instantiateEditor.bind(this); this.toggleEditor = this.toggleEditor.bind(this); From 06ec932cb96bc08f340cbd11756351f660349b42 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 19 Dec 2017 14:06:29 +0100 Subject: [PATCH 0004/1495] allow multiple selects/wheres on explorer UI --- src/components/Explorer/index.jsx | 5 +-- src/components/Explorer/queryTemplate.js | 56 +++++++++++++----------- 2 files changed, 32 insertions(+), 29 deletions(-) diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 7644c3d104..d9af124923 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -43,12 +43,9 @@ function expandBuilderState(builder, _fields) { console.log(builder) const expandedBuilder = {}; Object.keys(builder).forEach((key) => { - if (builder[key] instanceof Array) { + if (builder[key]) { expandedBuilder[key] = builder[key].map(x => (_fields[key] || []).find(element => element.key === x) || { value: x }) } - else if (builder[key]) { - expandedBuilder[key] = (_fields[key] || []).find(element => element.key === builder[key]) || { value: builder[key] }; - } }); console.log(expandedBuilder) return expandedBuilder; diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 79be0fb23e..042be53936 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -1,20 +1,22 @@ function templ(strings, value) { + console.log(value) + const o = value.map(x => x.value) var r = [] - if (value.length === 0) { + if (!value.length) { return ''; } const str0 = strings[0]; const str1 = strings[1]; if (value instanceof Array) { - r = value.map((s, index) => { + r = o.map((s, index) => { const p = `${str0}${s}${str1}`; - if (index !== value.length - 1) { + if (index !== o.length - 1) { return `${p} OR `; } return `${p}`; }); } else { - return `${str0}${value}${str1}`; + return `${str0}${o}${str1}`; } return `AND (${r.join('')})`; } @@ -129,32 +131,34 @@ JOIN heroes on heroes.id = player_matches.hero_id LEFT JOIN notable_players ON notable_players.account_id = player_matches.account_id AND notable_players.locked_until = (SELECT MAX(locked_until) FROM notable_players) LEFT JOIN teams using(team_id) ${organization || (group && group.key === 'organization') ? 'JOIN team_match ON matches.match_id = team_match.match_id AND (player_matches.player_slot < 128) = team_match.radiant JOIN teams teams2 ON team_match.team_id = teams2.team_id' : ''} -${(select && select.join) ? select.join : ''} -${(select && select.joinFn) ? select.joinFn(props) : ''} + +${select && select.map( x => x.join ? x.join : '' ).join('')} +${select && select.map( x => x.joinFn ? x.joinFn(props) : '' ).join('')} + WHERE TRUE -${select ? select.value.map(x => `AND ${x} IS NOT NULL `).join('') : ''} -${minPatch ? templ`match_patch.patch >= '${maxPatch.value}'` : ''} -${maxPatch ? templ`match_patch.patch <= '${maxPatch.value}'` : ''} -${hero ? templ`player_matches.hero_id = ${hero.value}` : ''} -${player ? templ`player_matches.account_id = ${player.value}` : ''} -${league ? templ`matches.leagueid = ${league.value}` : ''} -${playerPurchased ? templ`(player_matches.purchase->>'${playerPurchased.value}')::int > 0` : ''} -${minDuration ? templ`matches.duration >= ${minDuration.value}` : ''} -${maxDuration ? templ`matches.duration <= ${maxDuration.value}` : ''} -${side ? templ`(player_matches.player_slot < 128) = ${side.value}` : ''} -${result ? templ`((player_matches.player_slot < 128) = matches.radiant_win) = ${result.value}` : ''} -${team ? templ`notable_players.team_id = ${team.value}` : ''} -${organization ? templ`team_match.team_id = ${organization.value} AND (player_matches.player_slot < 128) = team_match.radiant` : ''} -${laneRole ? templ`player_matches.lane_role = ${laneRole.value}` : ''} -${region ? templ`AND matches.cluster IN (${region.value.join(',')})` : ''} -${minDate ? templ`matches.start_time >= extract(epoch from timestamp '${new Date(minDate.value).toISOString()}')` : ''} -${maxDate ? templ`matches.start_time <= extract(epoch from timestamp '${new Date(maxDate.value).toISOString()}')` : ''} -${tier ? templ`leagues.tier = '${tier.value}'` : ''} +${select && select.length > 0 ? select.map(x => `AND ${x.value} IS NOT NULL `).join('') : ''} +${minPatch ? templ`match_patch.patch >= '${maxPatch}'` : ''} +${maxPatch ? templ`match_patch.patch <= '${maxPatch}'` : ''} +${hero ? templ`player_matches.hero_id = ${hero}` : ''} +${player ? templ`player_matches.account_id = ${player}` : ''} +${league ? templ`matches.leagueid = ${league}` : ''} +${playerPurchased ? templ`(player_matches.purchase->>'${playerPurchased}')::int > 0` : ''} +${minDuration ? templ`matches.duration >= ${minDuration}` : ''} +${maxDuration ? templ`matches.duration <= ${maxDuration}` : ''} +${side ? templ`(player_matches.player_slot < 128) = ${side}` : ''} +${result ? templ`((player_matches.player_slot < 128) = matches.radiant_win) = ${result}` : ''} +${team ? templ`notable_players.team_id = ${team}` : ''} +${organization ? templ`team_match.team_id = ${organization} AND (player_matches.player_slot < 128) = team_match.radiant` : ''} +${laneRole ? templ`player_matches.lane_role = ${laneRole}` : ''} +${region ? templ`matches.cluster IN (${region})` : ''} +${minDate ? templ`matches.start_time >= extract(epoch from timestamp '${new Date(minDate).toISOString()}')` : ''} +${maxDate ? templ`matches.start_time <= extract(epoch from timestamp '${new Date(maxDate).toISOString()}')` : ''} +${tier ? templ`leagues.tier = '${tier}'` : ''} ${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} ${group ? `GROUP BY ${groupVal}` : ''} ${group ? `HAVING count(distinct matches.match_id) >= ${having ? having.value : '1'}` : ''} ORDER BY ${ - [`${group ? 'avg' : (select && select.value[select.value.length - 1]) || 'matches.match_id'} ${(order && order.value) || (select && select.order) || 'DESC'}`, + [`${group ? 'avg' : (select && select[select.length - 1].value) || 'matches.match_id'} ${(order && order.value) || (select && select.order) || 'DESC'}`, group ? 'count DESC' : '', ].filter(Boolean).join(',')} NULLS LAST LIMIT ${limit ? limit.value : 200}`; @@ -166,3 +170,5 @@ LIMIT ${limit ? limit.value : 200}`; export default queryTemplate; +//${(select && select.join) ? select.join : ''} +//${(select && select.joinFn) ? select.joinFn(props) : ''} \ No newline at end of file From a046e2d15fc8a42dc9f843984e13d1f18add4f04 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 19 Dec 2017 14:11:32 +0100 Subject: [PATCH 0005/1495] allow multiple selects/wheres on explorer UI --- src/components/Explorer/index.jsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index d9af124923..7644c3d104 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -43,9 +43,12 @@ function expandBuilderState(builder, _fields) { console.log(builder) const expandedBuilder = {}; Object.keys(builder).forEach((key) => { - if (builder[key]) { + if (builder[key] instanceof Array) { expandedBuilder[key] = builder[key].map(x => (_fields[key] || []).find(element => element.key === x) || { value: x }) } + else if (builder[key]) { + expandedBuilder[key] = (_fields[key] || []).find(element => element.key === builder[key]) || { value: builder[key] }; + } }); console.log(expandedBuilder) return expandedBuilder; From 3b1c0a3d2873d06386ff473702b16354604da402 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 19 Dec 2017 15:21:37 +0100 Subject: [PATCH 0006/1495] allow multiple selects/wheres on explorer UI --- src/components/Explorer/queryTemplate.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 042be53936..0dd425e996 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -115,7 +115,7 @@ ${(group) ? `stddev(${selectVal}::numeric) stddev`, ].filter(Boolean).join(',\n') : - [select ? `${select.value} ${select.alias || ''}` : '', + [select ? select.map(x => `${x.value} AS ${x.alias || ''}` ): '', 'matches.match_id', 'matches.start_time', '((player_matches.player_slot < 128) = matches.radiant_win) win', @@ -136,7 +136,7 @@ ${select && select.map( x => x.join ? x.join : '' ).join('')} ${select && select.map( x => x.joinFn ? x.joinFn(props) : '' ).join('')} WHERE TRUE -${select && select.length > 0 ? select.map(x => `AND ${x.value} IS NOT NULL `).join('') : ''} +${select ? select.map(x => `AND ${x.value} IS NOT NULL `).join('') : ''} ${minPatch ? templ`match_patch.patch >= '${maxPatch}'` : ''} ${maxPatch ? templ`match_patch.patch <= '${maxPatch}'` : ''} ${hero ? templ`player_matches.hero_id = ${hero}` : ''} From e1c7e3c823dcc70ae7790202581a6a97ea0f0bd4 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 19 Dec 2017 16:02:01 +0100 Subject: [PATCH 0007/1495] allow multiple selects/wheres on explorer UI --- src/components/Explorer/queryTemplate.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 0dd425e996..fb81c15369 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -95,12 +95,18 @@ ${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 18383 GROUP BY hero_id ORDER BY total ${(order && order.value) || 'DESC'}`; } else { + + + const groupVal = {} const selectVal = (select && select.groupValue) || (select && select.value) || 1; - const groupVal = group ? `${group.value}${group.bucket ? ` / ${group.bucket} * ${group.bucket}` : ''}` : null; + group && group.forEach( x=> groupVal[x.key] = `${x.value}${x.bucket ? ` / ${x.bucket} * ${x.bucket}` : ''}`) || ''; query = `SELECT -${select && select.distinct && !group ? `DISTINCT ON (${select.value})` : ''} + ${select && select.map(x=> x.distinct && !group ? `DISTINCT ON (${x.value})` : '').join('')} + + ${(group) ? - [`${group.groupKeySelect || groupVal} ${group.alias || ''}`, + group.map( x=> + [`${x.groupKeySelect || groupVal[x.key]} ${x.alias || ''}`, (select && select.countValue) || '', (select && select.avgPerMatch) ? `sum(${selectVal})::numeric/count(distinct matches.match_id) avg` : `${select && select.avg ? select.avg : `avg(${selectVal})`} avg`, 'count(distinct matches.match_id) count', @@ -113,8 +119,11 @@ ${(group) ? `min(${selectVal}) min`, `max(${selectVal}) max`, `stddev(${selectVal}::numeric) stddev`, - ].filter(Boolean).join(',\n') + ].filter(Boolean).join(',\n')).join('') + + : + [select ? select.map(x => `${x.value} AS ${x.alias || ''}` ): '', 'matches.match_id', 'matches.start_time', @@ -123,6 +132,9 @@ ${(group) ? 'player_matches.account_id', 'leagues.name leaguename', ].filter(Boolean).join(',\n')} + + + FROM matches JOIN match_patch using(match_id) JOIN leagues using(leagueid) From e811d02125c3cea2f57b9a3ddf2774a8c9acff69 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 19 Dec 2017 17:06:37 +0100 Subject: [PATCH 0008/1495] allow multiple selects/wheres on explorer UI --- src/components/Explorer/queryTemplate.js | 35 +++++++++++++----------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index fb81c15369..3efa5889fb 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -96,30 +96,33 @@ GROUP BY hero_id ORDER BY total ${(order && order.value) || 'DESC'}`; } else { - + const selectVal = {} const groupVal = {} - const selectVal = (select && select.groupValue) || (select && select.value) || 1; - group && group.forEach( x=> groupVal[x.key] = `${x.value}${x.bucket ? ` / ${x.bucket} * ${x.bucket}` : ''}`) || ''; + //const selectVal = (select && select.groupValue) || (select && select.value) || 1; + group && group.forEach( x=> groupVal[x.key] = `${x.value}${x.bucket ? ` / ${x.bucket} * ${x.bucket}` : ''}`); + select && select.forEach(x=> selectVal[x.key] = x.groupValue || (x && x.value) || 1 ); + console.log(groupVal) query = `SELECT - ${select && select.map(x=> x.distinct && !group ? `DISTINCT ON (${x.value})` : '').join('')} + ${select && select.map(x=> x.distinct && !group ? `DISTINCT ON (${x.value})` : '').join('') || ''} ${(group) ? - group.map( x=> - [`${x.groupKeySelect || groupVal[x.key]} ${x.alias || ''}`, - (select && select.countValue) || '', - (select && select.avgPerMatch) ? `sum(${selectVal})::numeric/count(distinct matches.match_id) avg` : `${select && select.avg ? select.avg : `avg(${selectVal})`} avg`, + group.map( (x, i)=> + [`${!i ? '' : ',\n'}${x.groupKeySelect || groupVal[x.key]} ${x.alias || ''}`, + select.forEach( x => + (x && x.countValue) || '', + (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) avg` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} avg`, 'count(distinct matches.match_id) count', 'sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1) winrate', `((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) + 1.96 * 1.96 / (2 * count(1)) - 1.96 * sqrt((((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) * (1 - (sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1))) + 1.96 * 1.96 / (4 * count(1))) / count(1)))) / (1 + 1.96 * 1.96 / count(1)) winrate_wilson`, - `sum(${selectVal}) sum`, - `min(${selectVal}) min`, - `max(${selectVal}) max`, - `stddev(${selectVal}::numeric) stddev`, - ].filter(Boolean).join(',\n')).join('') + `sum(${selectVal[x.key]}) sum`, + `min(${selectVal[x.key]}) min`, + `max(${selectVal[x.key]}) max`, + `stddev(${selectVal[x.key]}::numeric) stddev`, + )].filter(Boolean).join(',\n')).join('') : @@ -144,8 +147,8 @@ LEFT JOIN notable_players ON notable_players.account_id = player_matches.account LEFT JOIN teams using(team_id) ${organization || (group && group.key === 'organization') ? 'JOIN team_match ON matches.match_id = team_match.match_id AND (player_matches.player_slot < 128) = team_match.radiant JOIN teams teams2 ON team_match.team_id = teams2.team_id' : ''} -${select && select.map( x => x.join ? x.join : '' ).join('')} -${select && select.map( x => x.joinFn ? x.joinFn(props) : '' ).join('')} +${select && select.map( x => x.join ? x.join : '' ).join('') || ''} +${select && select.map( x => x.joinFn ? x.joinFn(props) : '' ).join('') || ''} WHERE TRUE ${select ? select.map(x => `AND ${x.value} IS NOT NULL `).join('') : ''} @@ -167,7 +170,7 @@ ${minDate ? templ`matches.start_time >= extract(epoch from timestamp '${new Date ${maxDate ? templ`matches.start_time <= extract(epoch from timestamp '${new Date(maxDate).toISOString()}')` : ''} ${tier ? templ`leagues.tier = '${tier}'` : ''} ${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} -${group ? `GROUP BY ${groupVal}` : ''} +${group ? 'GROUP BY' : ''}${group && group.map(x => ` ${groupVal[x.key]}`) || ''} ${group ? `HAVING count(distinct matches.match_id) >= ${having ? having.value : '1'}` : ''} ORDER BY ${ [`${group ? 'avg' : (select && select[select.length - 1].value) || 'matches.match_id'} ${(order && order.value) || (select && select.order) || 'DESC'}`, From 73578f457fd7a2981d1e069d840244824bba0a2b Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 19 Dec 2017 18:05:33 +0100 Subject: [PATCH 0009/1495] allow multiple selects/wheres on explorer UI --- src/components/Explorer/queryTemplate.js | 52 ++++++++++++++---------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 3efa5889fb..08d86ed82c 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -100,33 +100,41 @@ ORDER BY total ${(order && order.value) || 'DESC'}`; const groupVal = {} //const selectVal = (select && select.groupValue) || (select && select.value) || 1; group && group.forEach( x=> groupVal[x.key] = `${x.value}${x.bucket ? ` / ${x.bucket} * ${x.bucket}` : ''}`); - select && select.forEach(x=> selectVal[x.key] = x.groupValue || (x && x.value) || 1 ); - console.log(groupVal) + select && select.forEach(x=> selectVal[x.key] = x.groupValue || (x && x.value) || 1 ) + //console.log(selectVal) + console.log(select) query = `SELECT ${select && select.map(x=> x.distinct && !group ? `DISTINCT ON (${x.value})` : '').join('') || ''} + + ${(group) ? group.map( (x, i)=> - [`${!i ? '' : ',\n'}${x.groupKeySelect || groupVal[x.key]} ${x.alias || ''}`, - select.forEach( x => - (x && x.countValue) || '', - (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) avg` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} avg`, - 'count(distinct matches.match_id) count', - 'sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1) winrate', - `((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) - + 1.96 * 1.96 / (2 * count(1)) - - 1.96 * sqrt((((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) * (1 - (sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1))) + 1.96 * 1.96 / (4 * count(1))) / count(1)))) - / (1 + 1.96 * 1.96 / count(1)) winrate_wilson`, - `sum(${selectVal[x.key]}) sum`, - `min(${selectVal[x.key]}) min`, - `max(${selectVal[x.key]}) max`, - `stddev(${selectVal[x.key]}::numeric) stddev`, - )].filter(Boolean).join(',\n')).join('') - - - : + [`${!i ? '' : ',\n'}${x.groupKeySelect || groupVal[x.key]} ${x.alias || ''}`].filter(Boolean).join(',\n')).join('') + + : ''} + +${(group) ? + select ? select.map((x, i)=> + [ + (x && x.countValue) || '', + (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) avg` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} avg`, + 'count(distinct matches.match_id) count', + 'sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1) winrate', + `((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) ++ 1.96 * 1.96 / (2 * count(1)) +- 1.96 * sqrt((((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) * (1 - (sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1))) + 1.96 * 1.96 / (4 * count(1))) / count(1)))) +/ (1 + 1.96 * 1.96 / count(1)) winrate_wilson`, + `sum(${selectVal[x.key]}) sum`, + `min(${selectVal[x.key]}) min`, + `max(${selectVal[x.key]}) max`, + `stddev(${selectVal[x.key]}::numeric) stddev, + ` +].filter(Boolean).join(',\n')): ''.join('') : ''} + +${(!group && select) ? [select ? select.map(x => `${x.value} AS ${x.alias || ''}` ): '', 'matches.match_id', 'matches.start_time', @@ -134,7 +142,9 @@ ${(group) ? 'player_matches.hero_id', 'player_matches.account_id', 'leagues.name leaguename', - ].filter(Boolean).join(',\n')} + ].filter(Boolean).join(',\n') : ''} + + From f54a0cce4f2fe753d5c7b2f9fa8457173d22cdf2 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 19 Dec 2017 18:57:47 +0100 Subject: [PATCH 0010/1495] allow multiple selects/wheres on explorer UI --- src/components/Explorer/index.jsx | 2 +- src/components/Explorer/queryTemplate.js | 26 +++++++++++++++--------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 7644c3d104..3bf6840f10 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -170,7 +170,7 @@ class Explorer extends React.Component { // This is ok if we only need the value prop (e.g. an id to build the query with) const expandedBuilder = expandBuilderState(this.state.builder, fields()); // TODO handle arrays - console.log(expandedBuilder) + //console.log(expandedBuilder) this.editor.setValue(queryTemplate(expandedBuilder)); } render() { diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 08d86ed82c..4957c8d9b6 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -1,5 +1,5 @@ function templ(strings, value) { - console.log(value) + //console.log(value) const o = value.map(x => x.value) var r = [] if (!value.length) { @@ -102,16 +102,17 @@ ORDER BY total ${(order && order.value) || 'DESC'}`; group && group.forEach( x=> groupVal[x.key] = `${x.value}${x.bucket ? ` / ${x.bucket} * ${x.bucket}` : ''}`); select && select.forEach(x=> selectVal[x.key] = x.groupValue || (x && x.value) || 1 ) //console.log(selectVal) - console.log(select) + console.log(group) + console.log(props) query = `SELECT - ${select && select.map(x=> x.distinct && !group ? `DISTINCT ON (${x.value})` : '').join('') || ''} + ${select ? select.map(x=> x.distinct && !group ? `DISTINCT ON (${x.value})` : '').join('') : ''} ${(group) ? group.map( (x, i)=> - [`${!i ? '' : ',\n'}${x.groupKeySelect || groupVal[x.key]} ${x.alias || ''}`].filter(Boolean).join(',\n')).join('') + [`${x.groupKeySelect || groupVal[x.key]} ${x.alias || ''},`].filter(Boolean).join(',\n')).join('') : ''} @@ -129,7 +130,7 @@ ${(group) ? `sum(${selectVal[x.key]}) sum`, `min(${selectVal[x.key]}) min`, `max(${selectVal[x.key]}) max`, - `stddev(${selectVal[x.key]}::numeric) stddev, + `stddev(${selectVal[x.key]}::numeric) stddev ` ].filter(Boolean).join(',\n')): ''.join('') : ''} @@ -155,10 +156,12 @@ JOIN player_matches using(match_id) JOIN heroes on heroes.id = player_matches.hero_id LEFT JOIN notable_players ON notable_players.account_id = player_matches.account_id AND notable_players.locked_until = (SELECT MAX(locked_until) FROM notable_players) LEFT JOIN teams using(team_id) -${organization || (group && group.key === 'organization') ? 'JOIN team_match ON matches.match_id = team_match.match_id AND (player_matches.player_slot < 128) = team_match.radiant JOIN teams teams2 ON team_match.team_id = teams2.team_id' : ''} -${select && select.map( x => x.join ? x.join : '' ).join('') || ''} -${select && select.map( x => x.joinFn ? x.joinFn(props) : '' ).join('') || ''} +${organization || (group && group.some( x=> x.key === 'organization')) ? +'JOIN team_match ON matches.match_id = team_match.match_id AND (player_matches.player_slot < 128) = team_match.radiant JOIN teams teams2 ON team_match.team_id = teams2.team_id' : ''} + +${select ? select.map( x => x.join ? x.join : '' ).join('') : ''} +${select ? select.map( x => x.joinFn ? x.joinFn(props) : '' ).join('') : ''} WHERE TRUE ${select ? select.map(x => `AND ${x.value} IS NOT NULL `).join('') : ''} @@ -182,11 +185,14 @@ ${tier ? templ`leagues.tier = '${tier}'` : ''} ${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} ${group ? 'GROUP BY' : ''}${group && group.map(x => ` ${groupVal[x.key]}`) || ''} ${group ? `HAVING count(distinct matches.match_id) >= ${having ? having.value : '1'}` : ''} + + + ORDER BY ${ - [`${group ? 'avg' : (select && select[select.length - 1].value) || 'matches.match_id'} ${(order && order.value) || (select && select.order) || 'DESC'}`, + [`${group ? 'avg' : (select && select.map(x => x[x.length - 1].value).join('')) || 'matches.match_id'} ${(order && order.map(x=> x.value).join('') ) || (select && select.map(x=> x.order).join('')) || 'DESC'}`, group ? 'count DESC' : '', ].filter(Boolean).join(',')} NULLS LAST -LIMIT ${limit ? limit.value : 200}`; +LIMIT ${limit ? limit.map(x=> x.value).join('') : 200}`; } return query // Remove extra newlines From 3e09a48bd6a4e062ef6ce0833e545f5f6d345a1f Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 19 Dec 2017 19:14:49 +0100 Subject: [PATCH 0011/1495] allow multiple selects/wheres on explorer UI --- src/components/Explorer/queryTemplate.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 4957c8d9b6..f7ee430444 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -104,6 +104,7 @@ ORDER BY total ${(order && order.value) || 'DESC'}`; //console.log(selectVal) console.log(group) console.log(props) + console.log(select) query = `SELECT ${select ? select.map(x=> x.distinct && !group ? `DISTINCT ON (${x.value})` : '').join('') : ''} @@ -120,7 +121,7 @@ ${(group) ? select ? select.map((x, i)=> [ (x && x.countValue) || '', - (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) avg` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} avg`, + (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) avg` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} AS "avg ${selectVal[x.key]}"`, 'count(distinct matches.match_id) count', 'sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1) winrate', `((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) @@ -183,15 +184,12 @@ ${minDate ? templ`matches.start_time >= extract(epoch from timestamp '${new Date ${maxDate ? templ`matches.start_time <= extract(epoch from timestamp '${new Date(maxDate).toISOString()}')` : ''} ${tier ? templ`leagues.tier = '${tier}'` : ''} ${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} -${group ? 'GROUP BY' : ''}${group && group.map(x => ` ${groupVal[x.key]}`) || ''} +${group && group.length > 0 ? 'GROUP BY' : ''}${group && group.map(x => ` ${groupVal[x.key]}`) || ''} ${group ? `HAVING count(distinct matches.match_id) >= ${having ? having.value : '1'}` : ''} -ORDER BY ${ - [`${group ? 'avg' : (select && select.map(x => x[x.length - 1].value).join('')) || 'matches.match_id'} ${(order && order.map(x=> x.value).join('') ) || (select && select.map(x=> x.order).join('')) || 'DESC'}`, - group ? 'count DESC' : '', - ].filter(Boolean).join(',')} NULLS LAST + LIMIT ${limit ? limit.map(x=> x.value).join('') : 200}`; } return query From 82ff3cf78a23a9f89f9e761a4fdb8564d2d9fac5 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 19 Dec 2017 19:29:08 +0100 Subject: [PATCH 0012/1495] allow multiple selects/wheres on explorer UI --- .eslintignore | 1 + src/components/Explorer/index.jsx | 13 ++-- src/components/Explorer/queryTemplate.js | 81 ++++++++++++------------ 3 files changed, 47 insertions(+), 48 deletions(-) diff --git a/.eslintignore b/.eslintignore index dd87e2d73f..67487b6383 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,3 @@ node_modules build +**/*.js \ No newline at end of file diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 3bf6840f10..790d2c9f72 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -39,18 +39,17 @@ function jsonResponse(response) { } function expandBuilderState(builder, _fields) { - //console.log(_fields) - console.log(builder) + // console.log(_fields) + console.log(builder); const expandedBuilder = {}; Object.keys(builder).forEach((key) => { if (builder[key] instanceof Array) { - expandedBuilder[key] = builder[key].map(x => (_fields[key] || []).find(element => element.key === x) || { value: x }) - } - else if (builder[key]) { + expandedBuilder[key] = builder[key].map(x => (_fields[key] || []).find(element => element.key === x) || { value: x }); + } else if (builder[key]) { expandedBuilder[key] = (_fields[key] || []).find(element => element.key === builder[key]) || { value: builder[key] }; } }); - console.log(expandedBuilder) + console.log(expandedBuilder); return expandedBuilder; } @@ -170,7 +169,7 @@ class Explorer extends React.Component { // This is ok if we only need the value prop (e.g. an id to build the query with) const expandedBuilder = expandBuilderState(this.state.builder, fields()); // TODO handle arrays - //console.log(expandedBuilder) + // console.log(expandedBuilder) this.editor.setValue(queryTemplate(expandedBuilder)); } render() { diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index f7ee430444..b5f01f1c92 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -1,7 +1,7 @@ function templ(strings, value) { - //console.log(value) - const o = value.map(x => x.value) - var r = [] + // console.log(value) + const o = value.map(x => x.value); + let r = []; if (!value.length) { return ''; } @@ -55,7 +55,7 @@ const queryTemplate = (props) => { // team // organization let query; - console.log(props) + console.log(props); if (select && select.template === 'picks_bans') { query = `SELECT hero_id, @@ -95,49 +95,48 @@ ${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 18383 GROUP BY hero_id ORDER BY total ${(order && order.value) || 'DESC'}`; } else { - - const selectVal = {} - const groupVal = {} - //const selectVal = (select && select.groupValue) || (select && select.value) || 1; - group && group.forEach( x=> groupVal[x.key] = `${x.value}${x.bucket ? ` / ${x.bucket} * ${x.bucket}` : ''}`); - select && select.forEach(x=> selectVal[x.key] = x.groupValue || (x && x.value) || 1 ) - //console.log(selectVal) - console.log(group) - console.log(props) - console.log(select) + const selectVal = {}; + const groupVal = {}; + // const selectVal = (select && select.groupValue) || (select && select.value) || 1; + group && group.forEach(x => groupVal[x.key] = `${x.value}${x.bucket ? ` / ${x.bucket} * ${x.bucket}` : ''}`); + select && select.forEach(x => selectVal[x.key] = x.groupValue || (x && x.value) || 1); + // console.log(selectVal) + console.log(group); + console.log(props); + console.log(select); query = `SELECT - ${select ? select.map(x=> x.distinct && !group ? `DISTINCT ON (${x.value})` : '').join('') : ''} + ${select ? select.map(x => (x.distinct && !group ? `DISTINCT ON (${x.value})` : '')).join('') : ''} ${(group) ? - group.map( (x, i)=> - [`${x.groupKeySelect || groupVal[x.key]} ${x.alias || ''},`].filter(Boolean).join(',\n')).join('') - + group.map((x) => + [`${x.groupKeySelect || groupVal[x.key]} ${x.alias || ''},`].filter(Boolean).join(',\n')).join('') + : ''} -${(group) ? - select ? select.map((x, i)=> - [ - (x && x.countValue) || '', - (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) avg` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} AS "avg ${selectVal[x.key]}"`, - 'count(distinct matches.match_id) count', - 'sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1) winrate', - `((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) +${(group) ? + select ? select.map((x, i) => + [ + (x && x.countValue) || '', + (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) avg` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} AS "avg ${selectVal[x.key]}"`, + 'count(distinct matches.match_id) count', + 'sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1) winrate', + `((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) + 1.96 * 1.96 / (2 * count(1)) - 1.96 * sqrt((((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) * (1 - (sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1))) + 1.96 * 1.96 / (4 * count(1))) / count(1)))) / (1 + 1.96 * 1.96 / count(1)) winrate_wilson`, - `sum(${selectVal[x.key]}) sum`, - `min(${selectVal[x.key]}) min`, - `max(${selectVal[x.key]}) max`, - `stddev(${selectVal[x.key]}::numeric) stddev - ` -].filter(Boolean).join(',\n')): ''.join('') : ''} + `sum(${selectVal[x.key]}) sum`, + `min(${selectVal[x.key]}) min`, + `max(${selectVal[x.key]}) max`, + `stddev(${selectVal[x.key]}::numeric) stddev + `, + ].filter(Boolean).join(',\n')) : ''.join('') : ''} ${(!group && select) ? - [select ? select.map(x => `${x.value} AS ${x.alias || ''}` ): '', + [select ? select.map(x => `${x.value} AS ${x.alias || ''}`) : '', 'matches.match_id', 'matches.start_time', '((player_matches.player_slot < 128) = matches.radiant_win) win', @@ -158,11 +157,11 @@ JOIN heroes on heroes.id = player_matches.hero_id LEFT JOIN notable_players ON notable_players.account_id = player_matches.account_id AND notable_players.locked_until = (SELECT MAX(locked_until) FROM notable_players) LEFT JOIN teams using(team_id) -${organization || (group && group.some( x=> x.key === 'organization')) ? -'JOIN team_match ON matches.match_id = team_match.match_id AND (player_matches.player_slot < 128) = team_match.radiant JOIN teams teams2 ON team_match.team_id = teams2.team_id' : ''} +${organization || (group && group.some(x => x.key === 'organization')) ? + 'JOIN team_match ON matches.match_id = team_match.match_id AND (player_matches.player_slot < 128) = team_match.radiant JOIN teams teams2 ON team_match.team_id = teams2.team_id' : ''} -${select ? select.map( x => x.join ? x.join : '' ).join('') : ''} -${select ? select.map( x => x.joinFn ? x.joinFn(props) : '' ).join('') : ''} +${select ? select.map(x => (x.join ? x.join : '')).join('') : ''} +${select ? select.map(x => (x.joinFn ? x.joinFn(props) : '')).join('') : ''} WHERE TRUE ${select ? select.map(x => `AND ${x.value} IS NOT NULL `).join('') : ''} @@ -184,13 +183,13 @@ ${minDate ? templ`matches.start_time >= extract(epoch from timestamp '${new Date ${maxDate ? templ`matches.start_time <= extract(epoch from timestamp '${new Date(maxDate).toISOString()}')` : ''} ${tier ? templ`leagues.tier = '${tier}'` : ''} ${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} -${group && group.length > 0 ? 'GROUP BY' : ''}${group && group.map(x => ` ${groupVal[x.key]}`) || ''} +${group && group.length > 0 ? 'GROUP BY' : ''}${group && group.map(x => ` ${groupVal[x.key]}`) || ''} ${group ? `HAVING count(distinct matches.match_id) >= ${having ? having.value : '1'}` : ''} -LIMIT ${limit ? limit.map(x=> x.value).join('') : 200}`; +LIMIT ${limit ? limit.map(x => x.value).join('') : 200}`; } return query // Remove extra newlines @@ -199,5 +198,5 @@ LIMIT ${limit ? limit.map(x=> x.value).join('') : 200}`; export default queryTemplate; -//${(select && select.join) ? select.join : ''} -//${(select && select.joinFn) ? select.joinFn(props) : ''} \ No newline at end of file +// ${(select && select.join) ? select.join : ''} +// ${(select && select.joinFn) ? select.joinFn(props) : ''} From 0940ba51418ea39f2201700c0df837cd4c187c6e Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 19 Dec 2017 21:20:56 +0100 Subject: [PATCH 0013/1495] allow multiple selects/wheres on explorer UI --- .eslintignore | 1 - src/components/Explorer/index.jsx | 2 - src/components/Explorer/queryTemplate.js | 80 +++++++++--------------- 3 files changed, 30 insertions(+), 53 deletions(-) diff --git a/.eslintignore b/.eslintignore index 67487b6383..dd87e2d73f 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,2 @@ node_modules build -**/*.js \ No newline at end of file diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 790d2c9f72..4501deaad5 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -39,8 +39,6 @@ function jsonResponse(response) { } function expandBuilderState(builder, _fields) { - // console.log(_fields) - console.log(builder); const expandedBuilder = {}; Object.keys(builder).forEach((key) => { if (builder[key] instanceof Array) { diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index b5f01f1c92..db8fbc123c 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -55,7 +55,6 @@ const queryTemplate = (props) => { // team // organization let query; - console.log(props); if (select && select.template === 'picks_bans') { query = `SELECT hero_id, @@ -97,44 +96,34 @@ ORDER BY total ${(order && order.value) || 'DESC'}`; } else { const selectVal = {}; const groupVal = {}; - // const selectVal = (select && select.groupValue) || (select && select.value) || 1; - group && group.forEach(x => groupVal[x.key] = `${x.value}${x.bucket ? ` / ${x.bucket} * ${x.bucket}` : ''}`); - select && select.forEach(x => selectVal[x.key] = x.groupValue || (x && x.value) || 1); - // console.log(selectVal) - console.log(group); - console.log(props); - console.log(select); + if (group) { + group.forEach((x) => { groupVal[x.key] = `${x.value}${x.bucket ? ` / ${x.bucket} * ${x.bucket}` : ''}`; }); + } + if (select) { + select.forEach((x) => { selectVal[x.key] = x.groupValue || (x && x.value) || 1; }); + } query = `SELECT ${select ? select.map(x => (x.distinct && !group ? `DISTINCT ON (${x.value})` : '')).join('') : ''} - - - - -${(group) ? - group.map((x) => - [`${x.groupKeySelect || groupVal[x.key]} ${x.alias || ''},`].filter(Boolean).join(',\n')).join('') - - : ''} - -${(group) ? - select ? select.map((x, i) => - [ - (x && x.countValue) || '', - (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) avg` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} AS "avg ${selectVal[x.key]}"`, - 'count(distinct matches.match_id) count', - 'sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1) winrate', - `((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) + ${(group) ? + group.map(x => + [`${x.groupKeySelect || groupVal[x.key]} ${x.alias || ''},`].filter(Boolean).join(',\n')).join('') : ''} +${(group) ? // eslint-disable-line no-nested-ternary + select ? select.map(x => + [ + (x && x.countValue) || '', + (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) avg` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} AS "AVG ${x.alias}"`, + 'count(distinct matches.match_id) count', + 'sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1) winrate', + `((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) + 1.96 * 1.96 / (2 * count(1)) - 1.96 * sqrt((((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) * (1 - (sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1))) + 1.96 * 1.96 / (4 * count(1))) / count(1)))) / (1 + 1.96 * 1.96 / count(1)) winrate_wilson`, - `sum(${selectVal[x.key]}) sum`, - `min(${selectVal[x.key]}) min`, - `max(${selectVal[x.key]}) max`, - `stddev(${selectVal[x.key]}::numeric) stddev + `sum(${selectVal[x.key]}) sum`, + `min(${selectVal[x.key]}) min`, + `max(${selectVal[x.key]}) max`, + `stddev(${selectVal[x.key]}::numeric) stddev `, - ].filter(Boolean).join(',\n')) : ''.join('') : ''} - - + ].filter(Boolean).join(',\n')) : ''.join('') : ''} ${(!group && select) ? [select ? select.map(x => `${x.value} AS ${x.alias || ''}`) : '', 'matches.match_id', @@ -144,11 +133,6 @@ ${(!group && select) ? 'player_matches.account_id', 'leagues.name leaguename', ].filter(Boolean).join(',\n') : ''} - - - - - FROM matches JOIN match_patch using(match_id) JOIN leagues using(leagueid) @@ -156,13 +140,10 @@ JOIN player_matches using(match_id) JOIN heroes on heroes.id = player_matches.hero_id LEFT JOIN notable_players ON notable_players.account_id = player_matches.account_id AND notable_players.locked_until = (SELECT MAX(locked_until) FROM notable_players) LEFT JOIN teams using(team_id) - ${organization || (group && group.some(x => x.key === 'organization')) ? 'JOIN team_match ON matches.match_id = team_match.match_id AND (player_matches.player_slot < 128) = team_match.radiant JOIN teams teams2 ON team_match.team_id = teams2.team_id' : ''} - ${select ? select.map(x => (x.join ? x.join : '')).join('') : ''} ${select ? select.map(x => (x.joinFn ? x.joinFn(props) : '')).join('') : ''} - WHERE TRUE ${select ? select.map(x => `AND ${x.value} IS NOT NULL `).join('') : ''} ${minPatch ? templ`match_patch.patch >= '${maxPatch}'` : ''} @@ -183,20 +164,19 @@ ${minDate ? templ`matches.start_time >= extract(epoch from timestamp '${new Date ${maxDate ? templ`matches.start_time <= extract(epoch from timestamp '${new Date(maxDate).toISOString()}')` : ''} ${tier ? templ`leagues.tier = '${tier}'` : ''} ${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} -${group && group.length > 0 ? 'GROUP BY' : ''}${group && group.map(x => ` ${groupVal[x.key]}`) || ''} +${group ? 'GROUP BY' : ''}${(group && group.map(x => ` ${groupVal[x.key]}`)) || ''} ${group ? `HAVING count(distinct matches.match_id) >= ${having ? having.value : '1'}` : ''} - - - - +ORDER BY ${ + [`${group ? typeof select === 'string' ? `"AVG ${select.alias}"` : `"AVG ${select[0].alias}"` : // eslint-disable-line no-nested-ternary + select ? select.map(x => x.value).join('') + : 'matches.match_id'} ${order ? order.map(x => x.value).join('') // eslint-disable-line no-nested-ternary + : select ? select.map(x => x.order).join('') : 'DESC'}`, + group ? 'count DESC' : '', + ].filter(Boolean).join(',')} NULLS LAST LIMIT ${limit ? limit.map(x => x.value).join('') : 200}`; } return query // Remove extra newlines .replace(/\n{2,}/g, '\n'); }; - - export default queryTemplate; -// ${(select && select.join) ? select.join : ''} -// ${(select && select.joinFn) ? select.joinFn(props) : ''} From 872dede837b758275002369a3ea3de2c3291a5e8 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 19 Dec 2017 21:30:07 +0100 Subject: [PATCH 0014/1495] allow multiple selects/wheres on explorer UI --- src/components/Explorer/queryTemplate.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index db8fbc123c..fc3626fd81 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -111,7 +111,7 @@ ${(group) ? // eslint-disable-line no-nested-ternary select ? select.map(x => [ (x && x.countValue) || '', - (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) avg` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} AS "AVG ${x.alias}"`, + (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) avg` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} AS "AVG ${x.text}"`, 'count(distinct matches.match_id) count', 'sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1) winrate', `((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) @@ -167,7 +167,7 @@ ${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 18383 ${group ? 'GROUP BY' : ''}${(group && group.map(x => ` ${groupVal[x.key]}`)) || ''} ${group ? `HAVING count(distinct matches.match_id) >= ${having ? having.value : '1'}` : ''} ORDER BY ${ - [`${group ? typeof select === 'string' ? `"AVG ${select.alias}"` : `"AVG ${select[0].alias}"` : // eslint-disable-line no-nested-ternary + [`${group ? typeof select === 'string' ? `"AVG ${select.text}"` : `"AVG ${select[0].text}"` : // eslint-disable-line no-nested-ternary select ? select.map(x => x.value).join('') : 'matches.match_id'} ${order ? order.map(x => x.value).join('') // eslint-disable-line no-nested-ternary : select ? select.map(x => x.order).join('') : 'DESC'}`, From 995a21eb1e6878bc9d946d8a650294db3173a0c1 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 19 Dec 2017 21:47:49 +0100 Subject: [PATCH 0015/1495] bug fixes --- src/components/Explorer/queryTemplate.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index fc3626fd81..4881dcaa4b 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -1,5 +1,4 @@ function templ(strings, value) { - // console.log(value) const o = value.map(x => x.value); let r = []; if (!value.length) { @@ -96,6 +95,7 @@ ORDER BY total ${(order && order.value) || 'DESC'}`; } else { const selectVal = {}; const groupVal = {}; + console.log(group); if (group) { group.forEach((x) => { groupVal[x.key] = `${x.value}${x.bucket ? ` / ${x.bucket} * ${x.bucket}` : ''}`; }); } @@ -168,7 +168,7 @@ ${group ? 'GROUP BY' : ''}${(group && group.map(x => ` ${groupVal[x.key]}`)) || ${group ? `HAVING count(distinct matches.match_id) >= ${having ? having.value : '1'}` : ''} ORDER BY ${ [`${group ? typeof select === 'string' ? `"AVG ${select.text}"` : `"AVG ${select[0].text}"` : // eslint-disable-line no-nested-ternary - select ? select.map(x => x.value).join('') + select ? select.map(x => x.value).join(',') : 'matches.match_id'} ${order ? order.map(x => x.value).join('') // eslint-disable-line no-nested-ternary : select ? select.map(x => x.order).join('') : 'DESC'}`, group ? 'count DESC' : '', From 20079887fc9c301a31e7524689bb633c715078cf Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 19 Dec 2017 22:19:23 +0100 Subject: [PATCH 0016/1495] bug fixes --- src/components/Explorer/queryTemplate.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 4881dcaa4b..6dbc03a1ed 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -95,7 +95,6 @@ ORDER BY total ${(order && order.value) || 'DESC'}`; } else { const selectVal = {}; const groupVal = {}; - console.log(group); if (group) { group.forEach((x) => { groupVal[x.key] = `${x.value}${x.bucket ? ` / ${x.bucket} * ${x.bucket}` : ''}`; }); } @@ -168,9 +167,9 @@ ${group ? 'GROUP BY' : ''}${(group && group.map(x => ` ${groupVal[x.key]}`)) || ${group ? `HAVING count(distinct matches.match_id) >= ${having ? having.value : '1'}` : ''} ORDER BY ${ [`${group ? typeof select === 'string' ? `"AVG ${select.text}"` : `"AVG ${select[0].text}"` : // eslint-disable-line no-nested-ternary - select ? select.map(x => x.value).join(',') + select ? select.map(x => `${x.value} DESC`).join(',') : 'matches.match_id'} ${order ? order.map(x => x.value).join('') // eslint-disable-line no-nested-ternary - : select ? select.map(x => x.order).join('') : 'DESC'}`, + : select ? `` : 'DESC'}`, group ? 'count DESC' : '', ].filter(Boolean).join(',')} NULLS LAST LIMIT ${limit ? limit.map(x => x.value).join('') : 200}`; From a6deb47dec5297261c517147d6212fa57865abb2 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 19 Dec 2017 22:22:24 +0100 Subject: [PATCH 0017/1495] lint --- src/components/Explorer/index.jsx | 2 +- src/components/Explorer/queryTemplate.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 4501deaad5..3ec3e245d7 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -68,7 +68,7 @@ class Explorer extends React.Component { showEditor: Boolean(sqlState), loading: false, result: {}, - builder: '', + builder: urlState, }; this.instantiateEditor = this.instantiateEditor.bind(this); this.toggleEditor = this.toggleEditor.bind(this); diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 6dbc03a1ed..69276eab9a 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -169,7 +169,7 @@ ORDER BY ${ [`${group ? typeof select === 'string' ? `"AVG ${select.text}"` : `"AVG ${select[0].text}"` : // eslint-disable-line no-nested-ternary select ? select.map(x => `${x.value} DESC`).join(',') : 'matches.match_id'} ${order ? order.map(x => x.value).join('') // eslint-disable-line no-nested-ternary - : select ? `` : 'DESC'}`, + : select ? '' : 'DESC'}`, group ? 'count DESC' : '', ].filter(Boolean).join(',')} NULLS LAST LIMIT ${limit ? limit.map(x => x.value).join('') : 200}`; From 6124ef5cf3d3db57fca22848eba010dc8e50ad66 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 19 Dec 2017 23:47:11 +0100 Subject: [PATCH 0018/1495] bug fixes --- src/components/Explorer/index.jsx | 1 - src/components/Explorer/queryTemplate.js | 32 +++++++++++++++--------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 3ec3e245d7..b875c5a880 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -47,7 +47,6 @@ function expandBuilderState(builder, _fields) { expandedBuilder[key] = (_fields[key] || []).find(element => element.key === builder[key]) || { value: builder[key] }; } }); - console.log(expandedBuilder); return expandedBuilder; } diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 69276eab9a..dd93492b39 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -54,6 +54,13 @@ const queryTemplate = (props) => { // team // organization let query; + let grouparray = []; + if (!(group instanceof Array)) { + grouparray.push(group); + } else { + grouparray = group; + } + const groupexists = grouparray !== null && grouparray.length > 0 && grouparray[0] !== null; if (select && select.template === 'picks_bans') { query = `SELECT hero_id, @@ -95,18 +102,19 @@ ORDER BY total ${(order && order.value) || 'DESC'}`; } else { const selectVal = {}; const groupVal = {}; - if (group) { - group.forEach((x) => { groupVal[x.key] = `${x.value}${x.bucket ? ` / ${x.bucket} * ${x.bucket}` : ''}`; }); + console.log(grouparray); + if (groupexists) { + grouparray.forEach((x) => { groupVal[x.key] = `${x.value}${x.bucket ? ` / ${x.bucket} * ${x.bucket}` : ''}`; }); } if (select) { select.forEach((x) => { selectVal[x.key] = x.groupValue || (x && x.value) || 1; }); } query = `SELECT - ${select ? select.map(x => (x.distinct && !group ? `DISTINCT ON (${x.value})` : '')).join('') : ''} - ${(group) ? - group.map(x => + ${select ? select.map(x => (x.distinct && grouparray.length < 1 ? `DISTINCT ON (${x.value})` : '')).join('') : ''} + ${(groupexists) ? + grouparray.map(x => [`${x.groupKeySelect || groupVal[x.key]} ${x.alias || ''},`].filter(Boolean).join(',\n')).join('') : ''} -${(group) ? // eslint-disable-line no-nested-ternary +${(groupexists) ? // eslint-disable-line no-nested-ternary select ? select.map(x => [ (x && x.countValue) || '', @@ -123,7 +131,7 @@ ${(group) ? // eslint-disable-line no-nested-ternary `stddev(${selectVal[x.key]}::numeric) stddev `, ].filter(Boolean).join(',\n')) : ''.join('') : ''} -${(!group && select) ? +${(grouparray === null || grouparray.length < 2) && select ? [select ? select.map(x => `${x.value} AS ${x.alias || ''}`) : '', 'matches.match_id', 'matches.start_time', @@ -139,7 +147,7 @@ JOIN player_matches using(match_id) JOIN heroes on heroes.id = player_matches.hero_id LEFT JOIN notable_players ON notable_players.account_id = player_matches.account_id AND notable_players.locked_until = (SELECT MAX(locked_until) FROM notable_players) LEFT JOIN teams using(team_id) -${organization || (group && group.some(x => x.key === 'organization')) ? +${organization || (grouparray !== null && grouparray.length > 0 && grouparray[0] && grouparray.some(x => x.key === 'organization')) ? 'JOIN team_match ON matches.match_id = team_match.match_id AND (player_matches.player_slot < 128) = team_match.radiant JOIN teams teams2 ON team_match.team_id = teams2.team_id' : ''} ${select ? select.map(x => (x.join ? x.join : '')).join('') : ''} ${select ? select.map(x => (x.joinFn ? x.joinFn(props) : '')).join('') : ''} @@ -163,14 +171,14 @@ ${minDate ? templ`matches.start_time >= extract(epoch from timestamp '${new Date ${maxDate ? templ`matches.start_time <= extract(epoch from timestamp '${new Date(maxDate).toISOString()}')` : ''} ${tier ? templ`leagues.tier = '${tier}'` : ''} ${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} -${group ? 'GROUP BY' : ''}${(group && group.map(x => ` ${groupVal[x.key]}`)) || ''} -${group ? `HAVING count(distinct matches.match_id) >= ${having ? having.value : '1'}` : ''} +${groupexists ? 'GROUP BY' : ''}${(groupexists && grouparray.map(x => ` ${groupVal[x.key]}`)) || ''} +${groupexists ? `HAVING count(distinct matches.match_id) >= ${having ? having.value : '1'}` : ''} ORDER BY ${ - [`${group ? typeof select === 'string' ? `"AVG ${select.text}"` : `"AVG ${select[0].text}"` : // eslint-disable-line no-nested-ternary + [`${groupexists ? typeof select === 'string' ? `"AVG ${select.text}"` : `"AVG ${select[0].text}"` : // eslint-disable-line no-nested-ternary select ? select.map(x => `${x.value} DESC`).join(',') : 'matches.match_id'} ${order ? order.map(x => x.value).join('') // eslint-disable-line no-nested-ternary : select ? '' : 'DESC'}`, - group ? 'count DESC' : '', + groupexists ? 'count DESC' : '', ].filter(Boolean).join(',')} NULLS LAST LIMIT ${limit ? limit.map(x => x.value).join('') : 200}`; } From 3d6b969cfa2c5e0f739705de67b8e0e26305eceb Mon Sep 17 00:00:00 2001 From: Argn0 Date: Wed, 20 Dec 2017 10:19:28 +0100 Subject: [PATCH 0019/1495] fixes --- src/components/Explorer/queryTemplate.js | 68 +++++++++++++----------- 1 file changed, 38 insertions(+), 30 deletions(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index dd93492b39..cdf232c0ee 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -54,14 +54,23 @@ const queryTemplate = (props) => { // team // organization let query; - let grouparray = []; - if (!(group instanceof Array)) { - grouparray.push(group); + let groupArray = []; + let selectArray = []; + if (!(Array.isArray(group))) { + groupArray.push(group); } else { - grouparray = group; + groupArray = group; } - const groupexists = grouparray !== null && grouparray.length > 0 && grouparray[0] !== null; - if (select && select.template === 'picks_bans') { + if (!(Array.isArray(select))) { + selectArray.push(select); + } else { + selectArray = select; + } + console.log(selectArray) + console.log(groupArray) + const selectExists = selectArray !== null && selectArray.length > 0 && selectArray[0] !== null && selectArray[0] !== undefined; + const groupExists = groupArray !== null && groupArray.length > 0 && groupArray[0] !== null && groupArray[0] !== undefined; + if (selectArray && selectArray.template === 'picks_bans') { query = `SELECT hero_id, count(1) total, @@ -83,7 +92,7 @@ JOIN leagues using(leagueid) JOIN team_match using(match_id) JOIN teams using(team_id) WHERE TRUE -${select && select.where ? select.where : ''} +${selectExists && selectArray.where ? selectArray.where : ''} ${organization ? `AND team_id = ${organization.value}` : ''} ${minPatch ? `AND match_patch.patch >= '${minPatch.value}'` : ''} ${maxPatch ? `AND match_patch.patch <= '${maxPatch.value}'` : ''} @@ -102,20 +111,19 @@ ORDER BY total ${(order && order.value) || 'DESC'}`; } else { const selectVal = {}; const groupVal = {}; - console.log(grouparray); - if (groupexists) { - grouparray.forEach((x) => { groupVal[x.key] = `${x.value}${x.bucket ? ` / ${x.bucket} * ${x.bucket}` : ''}`; }); + if (groupExists) { + groupArray.forEach((x) => { groupVal[x.key] = `${x.value}${x.bucket ? ` / ${x.bucket} * ${x.bucket}` : ''}`; }); } - if (select) { - select.forEach((x) => { selectVal[x.key] = x.groupValue || (x && x.value) || 1; }); + if (selectExists) { + selectArray.forEach((x) => { selectVal[x.key] = x.groupValue || (x && x.value) || 1; }); } query = `SELECT - ${select ? select.map(x => (x.distinct && grouparray.length < 1 ? `DISTINCT ON (${x.value})` : '')).join('') : ''} - ${(groupexists) ? - grouparray.map(x => + ${selectExists ? selectArray.map(x => (x.distinct && !groupExists ? `DISTINCT ON (${x.value})` : '')).join('') : ''} + ${(groupExists) ? + groupArray.map(x => [`${x.groupKeySelect || groupVal[x.key]} ${x.alias || ''},`].filter(Boolean).join(',\n')).join('') : ''} -${(groupexists) ? // eslint-disable-line no-nested-ternary - select ? select.map(x => +${(groupExists) ? // eslint-disable-line no-nested-ternary + selectExists ? selectArray.map(x => [ (x && x.countValue) || '', (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) avg` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} AS "AVG ${x.text}"`, @@ -130,9 +138,9 @@ ${(groupexists) ? // eslint-disable-line no-nested-ternary `max(${selectVal[x.key]}) max`, `stddev(${selectVal[x.key]}::numeric) stddev `, - ].filter(Boolean).join(',\n')) : ''.join('') : ''} -${(grouparray === null || grouparray.length < 2) && select ? - [select ? select.map(x => `${x.value} AS ${x.alias || ''}`) : '', + ].filter(Boolean).join(',\n')) : '' : ''} +${!groupExists && selectExists ? + [selectExists ? selectArray.map(x => `${x.value} AS ${x.alias || ''}`) : '', 'matches.match_id', 'matches.start_time', '((player_matches.player_slot < 128) = matches.radiant_win) win', @@ -147,12 +155,12 @@ JOIN player_matches using(match_id) JOIN heroes on heroes.id = player_matches.hero_id LEFT JOIN notable_players ON notable_players.account_id = player_matches.account_id AND notable_players.locked_until = (SELECT MAX(locked_until) FROM notable_players) LEFT JOIN teams using(team_id) -${organization || (grouparray !== null && grouparray.length > 0 && grouparray[0] && grouparray.some(x => x.key === 'organization')) ? +${organization || (groupArray !== null && groupArray.length > 0 && groupArray[0] && groupArray.some(x => x.key === 'organization')) ? 'JOIN team_match ON matches.match_id = team_match.match_id AND (player_matches.player_slot < 128) = team_match.radiant JOIN teams teams2 ON team_match.team_id = teams2.team_id' : ''} -${select ? select.map(x => (x.join ? x.join : '')).join('') : ''} -${select ? select.map(x => (x.joinFn ? x.joinFn(props) : '')).join('') : ''} +${selectExists ? selectArray.map(x => (x.join ? x.join : '')).join('') : ''} +${selectExists ? selectArray.map(x => (x.joinFn ? x.joinFn(props) : '')).join('') : ''} WHERE TRUE -${select ? select.map(x => `AND ${x.value} IS NOT NULL `).join('') : ''} +${selectExists ? selectArray.map(x => `AND ${x.value} IS NOT NULL `).join('') : ''} ${minPatch ? templ`match_patch.patch >= '${maxPatch}'` : ''} ${maxPatch ? templ`match_patch.patch <= '${maxPatch}'` : ''} ${hero ? templ`player_matches.hero_id = ${hero}` : ''} @@ -171,14 +179,14 @@ ${minDate ? templ`matches.start_time >= extract(epoch from timestamp '${new Date ${maxDate ? templ`matches.start_time <= extract(epoch from timestamp '${new Date(maxDate).toISOString()}')` : ''} ${tier ? templ`leagues.tier = '${tier}'` : ''} ${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} -${groupexists ? 'GROUP BY' : ''}${(groupexists && grouparray.map(x => ` ${groupVal[x.key]}`)) || ''} -${groupexists ? `HAVING count(distinct matches.match_id) >= ${having ? having.value : '1'}` : ''} +${groupExists ? 'GROUP BY' : ''}${(groupExists && groupArray.map(x => ` ${groupVal[x.key]}`)) || ''} +${groupExists ? `HAVING count(distinct matches.match_id) >= ${having && having.value !== undefined ? having.value : '1'}` : ''} ORDER BY ${ - [`${groupexists ? typeof select === 'string' ? `"AVG ${select.text}"` : `"AVG ${select[0].text}"` : // eslint-disable-line no-nested-ternary - select ? select.map(x => `${x.value} DESC`).join(',') + [`${groupExists && selectExists ? `"AVG ${selectArray[0].text}"` : // eslint-disable-line no-nested-ternary + selectExists ? selectArray.map(x => `${x.value} DESC`).join(',') : 'matches.match_id'} ${order ? order.map(x => x.value).join('') // eslint-disable-line no-nested-ternary - : select ? '' : 'DESC'}`, - groupexists ? 'count DESC' : '', + : selectExists ? '' : 'DESC'}`, + groupExists ? 'count DESC' : '', ].filter(Boolean).join(',')} NULLS LAST LIMIT ${limit ? limit.map(x => x.value).join('') : 200}`; } From 5f7ec1253dc0bb8998fd9c31e07a56fb28ed2a4e Mon Sep 17 00:00:00 2001 From: Argn0 Date: Wed, 20 Dec 2017 10:41:20 +0100 Subject: [PATCH 0020/1495] fixes2 --- src/components/Explorer/ExplorerFormField.jsx | 2 +- src/components/Explorer/queryTemplate.js | 23 ++++++++----------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index e04e4e1b81..e117265878 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -85,7 +85,7 @@ class ExplorerFormField extends React.Component { formSelectionState={builder} filter={AutoComplete.caseInsensitiveFilter} strict - limit={5} + limit={10} addChip={this.addChip} deleteChip={this.deleteChip} /> diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index cdf232c0ee..efb7568127 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -1,23 +1,19 @@ function templ(strings, value) { const o = value.map(x => x.value); - let r = []; + const r = []; if (!value.length) { return ''; } const str0 = strings[0]; const str1 = strings[1]; if (value instanceof Array) { - r = o.map((s, index) => { - const p = `${str0}${s}${str1}`; - if (index !== o.length - 1) { - return `${p} OR `; - } - return `${p}`; + o.forEach((s) => { + r.push(`${str0}${s}${str1}`); }); } else { return `${str0}${o}${str1}`; } - return `AND (${r.join('')})`; + return `AND (${r.join(' OR ')})`; } const queryTemplate = (props) => { @@ -66,8 +62,9 @@ const queryTemplate = (props) => { } else { selectArray = select; } - console.log(selectArray) - console.log(groupArray) + console.log(selectArray); + console.log(groupArray); + console.log(props); const selectExists = selectArray !== null && selectArray.length > 0 && selectArray[0] !== null && selectArray[0] !== undefined; const groupExists = groupArray !== null && groupArray.length > 0 && groupArray[0] !== null && groupArray[0] !== undefined; if (selectArray && selectArray.template === 'picks_bans') { @@ -182,13 +179,13 @@ ${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 18383 ${groupExists ? 'GROUP BY' : ''}${(groupExists && groupArray.map(x => ` ${groupVal[x.key]}`)) || ''} ${groupExists ? `HAVING count(distinct matches.match_id) >= ${having && having.value !== undefined ? having.value : '1'}` : ''} ORDER BY ${ - [`${groupExists && selectExists ? `"AVG ${selectArray[0].text}"` : // eslint-disable-line no-nested-ternary - selectExists ? selectArray.map(x => `${x.value} DESC`).join(',') + [`${groupExists && selectExists ? selectArray.map(x=> `"AVG ${x.text}" DESC`) : // eslint-disable-line no-nested-ternary + selectExists ? selectArray.map(x => `${x.value} DESC`).join(',') : 'matches.match_id'} ${order ? order.map(x => x.value).join('') // eslint-disable-line no-nested-ternary : selectExists ? '' : 'DESC'}`, groupExists ? 'count DESC' : '', ].filter(Boolean).join(',')} NULLS LAST -LIMIT ${limit ? limit.map(x => x.value).join('') : 200}`; +LIMIT ${limit ? limit[0] : 200}`; } return query // Remove extra newlines From 5e50ae75dd742f0b733ba59720de098c29d7f49d Mon Sep 17 00:00:00 2001 From: Argn0 Date: Wed, 20 Dec 2017 10:50:36 +0100 Subject: [PATCH 0021/1495] fixes --- src/components/Explorer/queryTemplate.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index efb7568127..c68305797f 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -191,4 +191,6 @@ LIMIT ${limit ? limit[0] : 200}`; // Remove extra newlines .replace(/\n{2,}/g, '\n'); }; + + export default queryTemplate; From 217af965fb9b934dc32e88bbf46828b6bc6a98d2 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Wed, 20 Dec 2017 11:55:00 +0100 Subject: [PATCH 0022/1495] removed nexted ternarier --- src/components/Explorer/queryTemplate.js | 56 ++++++++++++------------ 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index c68305797f..5c2216d38a 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -1,19 +1,18 @@ function templ(strings, value) { - const o = value.map(x => x.value); - const r = []; - if (!value.length) { - return ''; - } const str0 = strings[0]; const str1 = strings[1]; - if (value instanceof Array) { + if (Array.isArray(value)) { + const o = value.map(x => x.value); + const r = []; + if (!value.length) { + return ''; + } o.forEach((s) => { r.push(`${str0}${s}${str1}`); }); - } else { - return `${str0}${o}${str1}`; + return `AND (${r.join(' OR ')})`; } - return `AND (${r.join(' OR ')})`; + return `AND ${str0}${value.value}${str1}`; } const queryTemplate = (props) => { @@ -62,9 +61,6 @@ const queryTemplate = (props) => { } else { selectArray = select; } - console.log(selectArray); - console.log(groupArray); - console.log(props); const selectExists = selectArray !== null && selectArray.length > 0 && selectArray[0] !== null && selectArray[0] !== undefined; const groupExists = groupArray !== null && groupArray.length > 0 && groupArray[0] !== null && groupArray[0] !== undefined; if (selectArray && selectArray.template === 'picks_bans') { @@ -119,23 +115,23 @@ ORDER BY total ${(order && order.value) || 'DESC'}`; ${(groupExists) ? groupArray.map(x => [`${x.groupKeySelect || groupVal[x.key]} ${x.alias || ''},`].filter(Boolean).join(',\n')).join('') : ''} -${(groupExists) ? // eslint-disable-line no-nested-ternary - selectExists ? selectArray.map(x => - [ - (x && x.countValue) || '', - (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) avg` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} AS "AVG ${x.text}"`, - 'count(distinct matches.match_id) count', - 'sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1) winrate', - `((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) +${(groupExists) ? + (selectExists && selectArray.map(x => + [ + (x && x.countValue) || '', + (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) avg` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} AS "AVG ${x.text}"`, + 'count(distinct matches.match_id) count', + 'sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1) winrate', + `((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) + 1.96 * 1.96 / (2 * count(1)) - 1.96 * sqrt((((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) * (1 - (sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1))) + 1.96 * 1.96 / (4 * count(1))) / count(1)))) / (1 + 1.96 * 1.96 / count(1)) winrate_wilson`, - `sum(${selectVal[x.key]}) sum`, - `min(${selectVal[x.key]}) min`, - `max(${selectVal[x.key]}) max`, - `stddev(${selectVal[x.key]}::numeric) stddev + `sum(${selectVal[x.key]}) sum`, + `min(${selectVal[x.key]}) min`, + `max(${selectVal[x.key]}) max`, + `stddev(${selectVal[x.key]}::numeric) stddev `, - ].filter(Boolean).join(',\n')) : '' : ''} + ].filter(Boolean).join(',\n'))) || '' : ''} ${!groupExists && selectExists ? [selectExists ? selectArray.map(x => `${x.value} AS ${x.alias || ''}`) : '', 'matches.match_id', @@ -179,10 +175,12 @@ ${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 18383 ${groupExists ? 'GROUP BY' : ''}${(groupExists && groupArray.map(x => ` ${groupVal[x.key]}`)) || ''} ${groupExists ? `HAVING count(distinct matches.match_id) >= ${having && having.value !== undefined ? having.value : '1'}` : ''} ORDER BY ${ - [`${groupExists && selectExists ? selectArray.map(x=> `"AVG ${x.text}" DESC`) : // eslint-disable-line no-nested-ternary - selectExists ? selectArray.map(x => `${x.value} DESC`).join(',') - : 'matches.match_id'} ${order ? order.map(x => x.value).join('') // eslint-disable-line no-nested-ternary - : selectExists ? '' : 'DESC'}`, + [`${(groupExists && selectExists && selectArray.map(x => `"AVG ${x.text}" + ${order ? (Array.isArray(order) && order.length > 0 && order[0].value) || order.value : 'DESC'}`)) || + (selectExists && selectArray.map(x => `${x.value} + ${order ? (Array.isArray(order) && order.length > 0 && order[0].value) || order.value : 'DESC'}`).join(',')) + || 'matches.match_id'} + `, groupExists ? 'count DESC' : '', ].filter(Boolean).join(',')} NULLS LAST LIMIT ${limit ? limit[0] : 200}`; From 819fc2882372400f51ad52b958f611723f6af17a Mon Sep 17 00:00:00 2001 From: Argn0 Date: Wed, 20 Dec 2017 12:21:10 +0100 Subject: [PATCH 0023/1495] fixes --- src/components/Explorer/queryTemplate.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 5c2216d38a..6ea5731a44 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -190,5 +190,4 @@ LIMIT ${limit ? limit[0] : 200}`; .replace(/\n{2,}/g, '\n'); }; - export default queryTemplate; From cc1393f2069677067310a03a010ba8db014e0559 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Wed, 20 Dec 2017 14:53:31 +0100 Subject: [PATCH 0024/1495] fixes --- src/components/Explorer/index.jsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index b875c5a880..3ca5460eec 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -165,8 +165,6 @@ class Explorer extends React.Component { // Note that this will not get expanded data for API-dependent fields (player/league/team) // This is ok if we only need the value prop (e.g. an id to build the query with) const expandedBuilder = expandBuilderState(this.state.builder, fields()); - // TODO handle arrays - // console.log(expandedBuilder) this.editor.setValue(queryTemplate(expandedBuilder)); } render() { From 36a65d1a96e00866967d35fd733f730f3993eb84 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Wed, 20 Dec 2017 17:18:27 +0100 Subject: [PATCH 0025/1495] isArray --- src/components/Explorer/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 3ca5460eec..5651e7112c 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -41,7 +41,7 @@ function jsonResponse(response) { function expandBuilderState(builder, _fields) { const expandedBuilder = {}; Object.keys(builder).forEach((key) => { - if (builder[key] instanceof Array) { + if (Array.isArray(builder[key])) { expandedBuilder[key] = builder[key].map(x => (_fields[key] || []).find(element => element.key === x) || { value: x }); } else if (builder[key]) { expandedBuilder[key] = (_fields[key] || []).find(element => element.key === builder[key]) || { value: builder[key] }; From 7c60917131bf026dfe485ea889479daee499dd36 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Wed, 20 Dec 2017 23:41:23 +0100 Subject: [PATCH 0026/1495] validate func --- src/components/Explorer/queryTemplate.js | 79 +++++++++++++----------- 1 file changed, 42 insertions(+), 37 deletions(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 6ea5731a44..a4c2bc83c3 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -15,6 +15,13 @@ function templ(strings, value) { return `AND ${str0}${value.value}${str1}`; } +function validate(p) { + if (p !== null && p !== undefined && p.length > 0 && p[0] !== null && p[0] !== undefined) { + return true; + } + return false; +} + const queryTemplate = (props) => { const { select, @@ -61,8 +68,6 @@ const queryTemplate = (props) => { } else { selectArray = select; } - const selectExists = selectArray !== null && selectArray.length > 0 && selectArray[0] !== null && selectArray[0] !== undefined; - const groupExists = groupArray !== null && groupArray.length > 0 && groupArray[0] !== null && groupArray[0] !== undefined; if (selectArray && selectArray.template === 'picks_bans') { query = `SELECT hero_id, @@ -85,7 +90,7 @@ JOIN leagues using(leagueid) JOIN team_match using(match_id) JOIN teams using(team_id) WHERE TRUE -${selectExists && selectArray.where ? selectArray.where : ''} +${validate(selectArray) && selectArray.where ? selectArray.where : ''} ${organization ? `AND team_id = ${organization.value}` : ''} ${minPatch ? `AND match_patch.patch >= '${minPatch.value}'` : ''} ${maxPatch ? `AND match_patch.patch <= '${maxPatch.value}'` : ''} @@ -104,19 +109,19 @@ ORDER BY total ${(order && order.value) || 'DESC'}`; } else { const selectVal = {}; const groupVal = {}; - if (groupExists) { + if (validate(groupArray)) { groupArray.forEach((x) => { groupVal[x.key] = `${x.value}${x.bucket ? ` / ${x.bucket} * ${x.bucket}` : ''}`; }); } - if (selectExists) { + if (validate(selectArray)) { selectArray.forEach((x) => { selectVal[x.key] = x.groupValue || (x && x.value) || 1; }); } query = `SELECT - ${selectExists ? selectArray.map(x => (x.distinct && !groupExists ? `DISTINCT ON (${x.value})` : '')).join('') : ''} - ${(groupExists) ? + ${validate(selectArray) ? selectArray.map(x => (x.distinct && !validate(groupArray) ? `DISTINCT ON (${x.value})` : '')).join('') : ''} + ${(validate(groupArray)) ? groupArray.map(x => [`${x.groupKeySelect || groupVal[x.key]} ${x.alias || ''},`].filter(Boolean).join(',\n')).join('') : ''} -${(groupExists) ? - (selectExists && selectArray.map(x => +${(validate(groupArray)) ? + (validate(selectArray) && selectArray.map(x => [ (x && x.countValue) || '', (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) avg` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} AS "AVG ${x.text}"`, @@ -132,8 +137,8 @@ ${(groupExists) ? `stddev(${selectVal[x.key]}::numeric) stddev `, ].filter(Boolean).join(',\n'))) || '' : ''} -${!groupExists && selectExists ? - [selectExists ? selectArray.map(x => `${x.value} AS ${x.alias || ''}`) : '', +${!validate(groupArray) && validate(selectArray) ? + [validate(selectArray) ? selectArray.map(x => `${x.value} AS ${x.alias || ''}`) : '', 'matches.match_id', 'matches.start_time', '((player_matches.player_slot < 128) = matches.radiant_win) win', @@ -150,38 +155,38 @@ LEFT JOIN notable_players ON notable_players.account_id = player_matches.account LEFT JOIN teams using(team_id) ${organization || (groupArray !== null && groupArray.length > 0 && groupArray[0] && groupArray.some(x => x.key === 'organization')) ? 'JOIN team_match ON matches.match_id = team_match.match_id AND (player_matches.player_slot < 128) = team_match.radiant JOIN teams teams2 ON team_match.team_id = teams2.team_id' : ''} -${selectExists ? selectArray.map(x => (x.join ? x.join : '')).join('') : ''} -${selectExists ? selectArray.map(x => (x.joinFn ? x.joinFn(props) : '')).join('') : ''} +${validate(selectArray) ? selectArray.map(x => (x.join ? x.join : '')).join('') : ''} +${validate(selectArray) ? selectArray.map(x => (x.joinFn ? x.joinFn(props) : '')).join('') : ''} WHERE TRUE -${selectExists ? selectArray.map(x => `AND ${x.value} IS NOT NULL `).join('') : ''} -${minPatch ? templ`match_patch.patch >= '${maxPatch}'` : ''} -${maxPatch ? templ`match_patch.patch <= '${maxPatch}'` : ''} -${hero ? templ`player_matches.hero_id = ${hero}` : ''} -${player ? templ`player_matches.account_id = ${player}` : ''} -${league ? templ`matches.leagueid = ${league}` : ''} -${playerPurchased ? templ`(player_matches.purchase->>'${playerPurchased}')::int > 0` : ''} -${minDuration ? templ`matches.duration >= ${minDuration}` : ''} -${maxDuration ? templ`matches.duration <= ${maxDuration}` : ''} -${side ? templ`(player_matches.player_slot < 128) = ${side}` : ''} -${result ? templ`((player_matches.player_slot < 128) = matches.radiant_win) = ${result}` : ''} -${team ? templ`notable_players.team_id = ${team}` : ''} -${organization ? templ`team_match.team_id = ${organization} AND (player_matches.player_slot < 128) = team_match.radiant` : ''} -${laneRole ? templ`player_matches.lane_role = ${laneRole}` : ''} -${region ? templ`matches.cluster IN (${region})` : ''} -${minDate ? templ`matches.start_time >= extract(epoch from timestamp '${new Date(minDate).toISOString()}')` : ''} -${maxDate ? templ`matches.start_time <= extract(epoch from timestamp '${new Date(maxDate).toISOString()}')` : ''} -${tier ? templ`leagues.tier = '${tier}'` : ''} -${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} -${groupExists ? 'GROUP BY' : ''}${(groupExists && groupArray.map(x => ` ${groupVal[x.key]}`)) || ''} -${groupExists ? `HAVING count(distinct matches.match_id) >= ${having && having.value !== undefined ? having.value : '1'}` : ''} +${validate(selectArray) ? selectArray.map(x => `AND ${x.value} IS NOT NULL `).join('') : ''} +${validate(minPatch) ? templ`match_patch.patch >= '${maxPatch}'` : ''} +${validate(maxPatch) ? templ`match_patch.patch <= '${maxPatch}'` : ''} +${validate(hero) ? templ`player_matches.hero_id = ${hero}` : ''} +${validate(player) ? templ`player_matches.account_id = ${player}` : ''} +${validate(league) ? templ`matches.leagueid = ${league}` : ''} +${validate(playerPurchased) ? templ`(player_matches.purchase->>'${playerPurchased}')::int > 0` : ''} +${validate(minDuration) ? templ`matches.duration >= ${minDuration}` : ''} +${validate(maxDuration) ? templ`matches.duration <= ${maxDuration}` : ''} +${validate(side) ? templ`(player_matches.player_slot < 128) = ${side}` : ''} +${validate(result) ? templ`((player_matches.player_slot < 128) = matches.radiant_win) = ${result}` : ''} +${validate(team) ? templ`notable_players.team_id = ${team}` : ''} +${validate(organization) ? templ`team_match.team_id = ${organization} AND (player_matches.player_slot < 128) = team_match.radiant` : ''} +${validate(laneRole) ? templ`player_matches.lane_role = ${laneRole}` : ''} +${validate(region) ? templ`matches.cluster IN (${region})` : ''} +${validate(minDate) ? templ`matches.start_time >= extract(epoch from timestamp '${new Date(minDate).toISOString()}')` : ''} +${validate(maxDate) ? templ`matches.start_time <= extract(epoch from timestamp '${new Date(maxDate).toISOString()}')` : ''} +${validate(tier) ? templ`leagues.tier = '${tier}'` : ''} +${validate(isTi7Team) ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} +${validate(groupArray) ? 'GROUP BY' : ''}${(validate(groupArray) && groupArray.map(x => ` ${groupVal[x.key]}`)) || ''} +${validate(groupArray) ? `HAVING count(distinct matches.match_id) >= ${having && having.value !== undefined ? having.value : '1'}` : ''} ORDER BY ${ - [`${(groupExists && selectExists && selectArray.map(x => `"AVG ${x.text}" + [`${(validate(groupArray) && validate(selectArray) && selectArray.map(x => `"AVG ${x.text}" ${order ? (Array.isArray(order) && order.length > 0 && order[0].value) || order.value : 'DESC'}`)) || - (selectExists && selectArray.map(x => `${x.value} + (validate(selectArray) && selectArray.map(x => `${x.value} ${order ? (Array.isArray(order) && order.length > 0 && order[0].value) || order.value : 'DESC'}`).join(',')) || 'matches.match_id'} `, - groupExists ? 'count DESC' : '', + validate(groupArray) ? 'count DESC' : '', ].filter(Boolean).join(',')} NULLS LAST LIMIT ${limit ? limit[0] : 200}`; } From 57f802da37f0117182a10945efca7ffe0bdfc644 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Thu, 21 Dec 2017 12:20:18 +0100 Subject: [PATCH 0027/1495] bug fixes and chipLimit --- package-lock.json | 793 ------------------ src/components/Explorer/ExplorerFormField.jsx | 9 +- src/components/Explorer/index.jsx | 24 +- src/components/Explorer/queryTemplate.js | 5 +- 4 files changed, 22 insertions(+), 809 deletions(-) diff --git a/package-lock.json b/package-lock.json index a816b9879f..9322bf8936 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2392,7 +2392,6 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", - "fsevents": "1.1.2", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -4611,791 +4610,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "fsevents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", - "optional": true, - "requires": { - "nan": "2.8.0", - "node-pre-gyp": "0.6.36" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "optional": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "optional": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.36", - "bundled": true, - "optional": true, - "requires": { - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "optional": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - } - } - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -7775,12 +6989,6 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, - "nan": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", - "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", - "optional": true - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -10094,7 +9302,6 @@ "extract-text-webpack-plugin": "3.0.2", "file-loader": "1.1.5", "fs-extra": "3.0.1", - "fsevents": "1.1.2", "html-webpack-plugin": "2.29.0", "jest": "20.0.4", "object-assign": "4.1.1", diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index e117265878..25bd7833d9 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -55,7 +55,7 @@ class ExplorerFormField extends React.Component { } render() { const { - fields, label, builderField, handleFieldUpdate, isDateField, builder, + fields, label, builderField, handleFieldUpdate, isDateField, builder, chipLimit, } = this.props; const dataSource = fields && fields[builderField]; const fieldWidth = 280; @@ -85,7 +85,7 @@ class ExplorerFormField extends React.Component { formSelectionState={builder} filter={AutoComplete.caseInsensitiveFilter} strict - limit={10} + limit={chipLimit} addChip={this.addChip} deleteChip={this.deleteChip} /> @@ -101,6 +101,11 @@ ExplorerFormField.propTypes = { handleFieldUpdate: PropTypes.func, isDateField: PropTypes.bool, builder: PropTypes.func, + chipLimit: PropTypes.number, +}; + +ExplorerFormField.defaultProps = { + chipLimit: 10, }; export default ExplorerFormField; diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 5651e7112c..f8b0e32e88 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -201,10 +201,10 @@ class Explorer extends React.Component { - + - + - - - - - - - - - - + + + + + + + + + +
{ let query; let groupArray = []; let selectArray = []; + // console.log(props) if (!(Array.isArray(group))) { groupArray.push(group); } else { @@ -178,7 +179,7 @@ ${validate(maxDate) ? templ`matches.start_time <= extract(epoch from timestamp ' ${validate(tier) ? templ`leagues.tier = '${tier}'` : ''} ${validate(isTi7Team) ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} ${validate(groupArray) ? 'GROUP BY' : ''}${(validate(groupArray) && groupArray.map(x => ` ${groupVal[x.key]}`)) || ''} -${validate(groupArray) ? `HAVING count(distinct matches.match_id) >= ${having && having.value !== undefined ? having.value : '1'}` : ''} +${validate(groupArray) ? `HAVING count(distinct matches.match_id) >= ${(validate(having) && having[0].value) || '1'}` : ''} ORDER BY ${ [`${(validate(groupArray) && validate(selectArray) && selectArray.map(x => `"AVG ${x.text}" ${order ? (Array.isArray(order) && order.length > 0 && order[0].value) || order.value : 'DESC'}`)) || @@ -188,7 +189,7 @@ ORDER BY ${ `, validate(groupArray) ? 'count DESC' : '', ].filter(Boolean).join(',')} NULLS LAST -LIMIT ${limit ? limit[0] : 200}`; +LIMIT ${validate(limit) ? limit[0].value : 200}`; } return query // Remove extra newlines From c85483401146ba538932242acbe1210e0d6e4750 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Thu, 21 Dec 2017 12:23:58 +0100 Subject: [PATCH 0028/1495] Revert "bug fixes and chipLimit" This reverts commit 57f802da37f0117182a10945efca7ffe0bdfc644. --- package-lock.json | 793 ++++++++++++++++++ src/components/Explorer/ExplorerFormField.jsx | 9 +- src/components/Explorer/index.jsx | 24 +- src/components/Explorer/queryTemplate.js | 5 +- 4 files changed, 809 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9322bf8936..a816b9879f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2392,6 +2392,7 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", + "fsevents": "1.1.2", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -4610,6 +4611,791 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "fsevents": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", + "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", + "optional": true, + "requires": { + "nan": "2.8.0", + "node-pre-gyp": "0.6.36" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "optional": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.36", + "bundled": true, + "optional": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "optional": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + } + } + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -6989,6 +7775,12 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, + "nan": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", + "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", + "optional": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -9302,6 +10094,7 @@ "extract-text-webpack-plugin": "3.0.2", "file-loader": "1.1.5", "fs-extra": "3.0.1", + "fsevents": "1.1.2", "html-webpack-plugin": "2.29.0", "jest": "20.0.4", "object-assign": "4.1.1", diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index 25bd7833d9..e117265878 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -55,7 +55,7 @@ class ExplorerFormField extends React.Component { } render() { const { - fields, label, builderField, handleFieldUpdate, isDateField, builder, chipLimit, + fields, label, builderField, handleFieldUpdate, isDateField, builder, } = this.props; const dataSource = fields && fields[builderField]; const fieldWidth = 280; @@ -85,7 +85,7 @@ class ExplorerFormField extends React.Component { formSelectionState={builder} filter={AutoComplete.caseInsensitiveFilter} strict - limit={chipLimit} + limit={10} addChip={this.addChip} deleteChip={this.deleteChip} /> @@ -101,11 +101,6 @@ ExplorerFormField.propTypes = { handleFieldUpdate: PropTypes.func, isDateField: PropTypes.bool, builder: PropTypes.func, - chipLimit: PropTypes.number, -}; - -ExplorerFormField.defaultProps = { - chipLimit: 10, }; export default ExplorerFormField; diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index f8b0e32e88..5651e7112c 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -201,10 +201,10 @@ class Explorer extends React.Component { - + - + - - - - - - - - - - + + + + + + + + + +
{ let query; let groupArray = []; let selectArray = []; - // console.log(props) if (!(Array.isArray(group))) { groupArray.push(group); } else { @@ -179,7 +178,7 @@ ${validate(maxDate) ? templ`matches.start_time <= extract(epoch from timestamp ' ${validate(tier) ? templ`leagues.tier = '${tier}'` : ''} ${validate(isTi7Team) ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} ${validate(groupArray) ? 'GROUP BY' : ''}${(validate(groupArray) && groupArray.map(x => ` ${groupVal[x.key]}`)) || ''} -${validate(groupArray) ? `HAVING count(distinct matches.match_id) >= ${(validate(having) && having[0].value) || '1'}` : ''} +${validate(groupArray) ? `HAVING count(distinct matches.match_id) >= ${having && having.value !== undefined ? having.value : '1'}` : ''} ORDER BY ${ [`${(validate(groupArray) && validate(selectArray) && selectArray.map(x => `"AVG ${x.text}" ${order ? (Array.isArray(order) && order.length > 0 && order[0].value) || order.value : 'DESC'}`)) || @@ -189,7 +188,7 @@ ORDER BY ${ `, validate(groupArray) ? 'count DESC' : '', ].filter(Boolean).join(',')} NULLS LAST -LIMIT ${validate(limit) ? limit[0].value : 200}`; +LIMIT ${limit ? limit[0] : 200}`; } return query // Remove extra newlines From 96d799ecb2860078d26f19eabb1ff01b4d1ffeb1 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Thu, 21 Dec 2017 12:27:51 +0100 Subject: [PATCH 0029/1495] fixes and chipLimit --- src/components/Explorer/ExplorerFormField.jsx | 9 +++++-- src/components/Explorer/index.jsx | 24 +++++++++---------- src/components/Explorer/queryTemplate.js | 5 ++-- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index e117265878..25bd7833d9 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -55,7 +55,7 @@ class ExplorerFormField extends React.Component { } render() { const { - fields, label, builderField, handleFieldUpdate, isDateField, builder, + fields, label, builderField, handleFieldUpdate, isDateField, builder, chipLimit, } = this.props; const dataSource = fields && fields[builderField]; const fieldWidth = 280; @@ -85,7 +85,7 @@ class ExplorerFormField extends React.Component { formSelectionState={builder} filter={AutoComplete.caseInsensitiveFilter} strict - limit={10} + limit={chipLimit} addChip={this.addChip} deleteChip={this.deleteChip} /> @@ -101,6 +101,11 @@ ExplorerFormField.propTypes = { handleFieldUpdate: PropTypes.func, isDateField: PropTypes.bool, builder: PropTypes.func, + chipLimit: PropTypes.number, +}; + +ExplorerFormField.defaultProps = { + chipLimit: 10, }; export default ExplorerFormField; diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 5651e7112c..f8b0e32e88 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -201,10 +201,10 @@ class Explorer extends React.Component { - + - + - - - - - - - - - - + + + + + + + + + +
{ let query; let groupArray = []; let selectArray = []; + // console.log(props) if (!(Array.isArray(group))) { groupArray.push(group); } else { @@ -178,7 +179,7 @@ ${validate(maxDate) ? templ`matches.start_time <= extract(epoch from timestamp ' ${validate(tier) ? templ`leagues.tier = '${tier}'` : ''} ${validate(isTi7Team) ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} ${validate(groupArray) ? 'GROUP BY' : ''}${(validate(groupArray) && groupArray.map(x => ` ${groupVal[x.key]}`)) || ''} -${validate(groupArray) ? `HAVING count(distinct matches.match_id) >= ${having && having.value !== undefined ? having.value : '1'}` : ''} +${validate(groupArray) ? `HAVING count(distinct matches.match_id) >= ${(validate(having) && having[0].value) || '1'}` : ''} ORDER BY ${ [`${(validate(groupArray) && validate(selectArray) && selectArray.map(x => `"AVG ${x.text}" ${order ? (Array.isArray(order) && order.length > 0 && order[0].value) || order.value : 'DESC'}`)) || @@ -188,7 +189,7 @@ ORDER BY ${ `, validate(groupArray) ? 'count DESC' : '', ].filter(Boolean).join(',')} NULLS LAST -LIMIT ${limit ? limit[0] : 200}`; +LIMIT ${validate(limit) ? limit[0].value : 200}`; } return query // Remove extra newlines From 6b5a60f2b4c79339ed56c71015709724f47edfa0 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Thu, 21 Dec 2017 12:35:06 +0100 Subject: [PATCH 0030/1495] eslint-disable in unrelated files --- src/components/Match/PlayerThumb/index.jsx | 2 +- src/components/Visualizations/Graph/MatchGraph.jsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Match/PlayerThumb/index.jsx b/src/components/Match/PlayerThumb/index.jsx index 42b292109b..81d28fe102 100644 --- a/src/components/Match/PlayerThumb/index.jsx +++ b/src/components/Match/PlayerThumb/index.jsx @@ -19,7 +19,7 @@ const StyledImg = styled.img` `; const PlayerThumb = ({ - player_slot, hero_id, name, personaname, hideText, + player_slot, hero_id, name, personaname, hideText, // eslint-disable-line camelcase }) => ( `${minutes}:00`; const generateDiffData = (match) => { - const { radiant_gold_adv, radiant_xp_adv } = match; + const { radiant_gold_adv, radiant_xp_adv } = match; // eslint-disable-line camelcase const data = []; radiant_xp_adv.forEach((rXpAdv, index) => { if (index <= Math.floor(match.duration / 60)) { From 5b844e470ae93d771394b4fe4593b34b6f542ed0 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Thu, 21 Dec 2017 13:54:13 +0100 Subject: [PATCH 0031/1495] fixed min patch --- src/components/Explorer/queryTemplate.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index da139a7379..8b6f22dca7 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -160,7 +160,7 @@ ${validate(selectArray) ? selectArray.map(x => (x.join ? x.join : '')).join('') ${validate(selectArray) ? selectArray.map(x => (x.joinFn ? x.joinFn(props) : '')).join('') : ''} WHERE TRUE ${validate(selectArray) ? selectArray.map(x => `AND ${x.value} IS NOT NULL `).join('') : ''} -${validate(minPatch) ? templ`match_patch.patch >= '${maxPatch}'` : ''} +${validate(minPatch) ? templ`match_patch.patch >= '${minPatch}'` : ''} ${validate(maxPatch) ? templ`match_patch.patch <= '${maxPatch}'` : ''} ${validate(hero) ? templ`player_matches.hero_id = ${hero}` : ''} ${validate(player) ? templ`player_matches.account_id = ${player}` : ''} From 556bfa3e137ed0045cda3290325c392d864e7e73 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Thu, 21 Dec 2017 16:16:55 +0100 Subject: [PATCH 0032/1495] fixes --- src/components/Explorer/queryTemplate.js | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 8b6f22dca7..1bba645f96 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -117,7 +117,7 @@ ORDER BY total ${(order && order.value) || 'DESC'}`; selectArray.forEach((x) => { selectVal[x.key] = x.groupValue || (x && x.value) || 1; }); } query = `SELECT - ${validate(selectArray) ? selectArray.map(x => (x.distinct && !validate(groupArray) ? `DISTINCT ON (${x.value})` : '')).join('') : ''} + ${validate(selectArray) ? selectArray.map(x => (x.distinct && !validate(groupArray) ? `DISTINCT ON (${x.value})` : '')).join('') : ''}\ ${(validate(groupArray)) ? groupArray.map(x => [`${x.groupKeySelect || groupVal[x.key]} ${x.alias || ''},`].filter(Boolean).join(',\n')).join('') : ''} @@ -125,7 +125,7 @@ ${(validate(groupArray)) ? (validate(selectArray) && selectArray.map(x => [ (x && x.countValue) || '', - (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) avg` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} AS "AVG ${x.text}"`, + (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) avg` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} "AVG ${x.text}"`, 'count(distinct matches.match_id) count', 'sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1) winrate', `((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) @@ -139,7 +139,7 @@ ${(validate(groupArray)) ? `, ].filter(Boolean).join(',\n'))) || '' : ''} ${!validate(groupArray) && validate(selectArray) ? - [validate(selectArray) ? selectArray.map(x => `${x.value} AS ${x.alias || ''}`) : '', + [validate(selectArray) ? selectArray.map(x => `${x.value} ${x.alias || ''}`) : '', 'matches.match_id', 'matches.start_time', '((player_matches.player_slot < 128) = matches.radiant_win) win', @@ -181,12 +181,8 @@ ${validate(isTi7Team) ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375 ${validate(groupArray) ? 'GROUP BY' : ''}${(validate(groupArray) && groupArray.map(x => ` ${groupVal[x.key]}`)) || ''} ${validate(groupArray) ? `HAVING count(distinct matches.match_id) >= ${(validate(having) && having[0].value) || '1'}` : ''} ORDER BY ${ - [`${(validate(groupArray) && validate(selectArray) && selectArray.map(x => `"AVG ${x.text}" - ${order ? (Array.isArray(order) && order.length > 0 && order[0].value) || order.value : 'DESC'}`)) || - (validate(selectArray) && selectArray.map(x => `${x.value} - ${order ? (Array.isArray(order) && order.length > 0 && order[0].value) || order.value : 'DESC'}`).join(',')) - || 'matches.match_id'} - `, + [`${(validate(groupArray) && validate(selectArray) && selectArray.map(x => `"AVG ${x.text}" ${validate(order) ? (Array.isArray(order) && order.length > 0 && order[0].value) || order.value : 'DESC'}`)) || + (validate(selectArray) && selectArray.map(x => `${x.value} ${validate(order) ? (Array.isArray(order) && order.length > 0 && order[0].value) || order.value : 'DESC'}`).join(',')) || 'matches.match_id'}`, validate(groupArray) ? 'count DESC' : '', ].filter(Boolean).join(',')} NULLS LAST LIMIT ${validate(limit) ? limit[0].value : 200}`; From 1d649370f0e36eb2170b425cc74b4fcfca63153d Mon Sep 17 00:00:00 2001 From: Argn0 Date: Fri, 22 Dec 2017 14:05:56 +0100 Subject: [PATCH 0033/1495] fixed chip names --- src/components/Explorer/ExplorerFormField.jsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index 25bd7833d9..8e25745566 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import AutoComplete from 'material-ui/AutoComplete'; import DatePicker from 'material-ui/DatePicker'; import FormField from 'components/Form/FormField'; +import explorerFields from 'components/Explorer/fields'; class ExplorerFormField extends React.Component { constructor() { @@ -59,6 +60,16 @@ class ExplorerFormField extends React.Component { } = this.props; const dataSource = fields && fields[builderField]; const fieldWidth = 280; + const translatedBuilder = {} + if (builder && builder) { + Object.keys(builder).forEach( function(field) { + if (Array.isArray(builder[field])) { + translatedBuilder[field] = builder[field].map( function(x) { + let name = explorerFields()[field].find(f => f.key === x) + name = name ? name.text : x + return name + })} + })} if (isDateField) { return ( @@ -82,7 +93,7 @@ class ExplorerFormField extends React.Component { name={builderField} label={label} dataSource={dataSource} - formSelectionState={builder} + formSelectionState={translatedBuilder} filter={AutoComplete.caseInsensitiveFilter} strict limit={chipLimit} From 7d0d60cebb77d4fa8ecfca1dae54194a8ccbba10 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Fri, 22 Dec 2017 14:09:36 +0100 Subject: [PATCH 0034/1495] fixed chip names --- src/components/Explorer/ExplorerFormField.jsx | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index 8e25745566..00a7895f7c 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import AutoComplete from 'material-ui/AutoComplete'; import DatePicker from 'material-ui/DatePicker'; import FormField from 'components/Form/FormField'; -import explorerFields from 'components/Explorer/fields'; +import explorerFields from 'components/Explorer/fields'; class ExplorerFormField extends React.Component { constructor() { @@ -60,16 +60,18 @@ class ExplorerFormField extends React.Component { } = this.props; const dataSource = fields && fields[builderField]; const fieldWidth = 280; - const translatedBuilder = {} - if (builder && builder) { - Object.keys(builder).forEach( function(field) { - if (Array.isArray(builder[field])) { - translatedBuilder[field] = builder[field].map( function(x) { - let name = explorerFields()[field].find(f => f.key === x) - name = name ? name.text : x - return name - })} - })} + const translatedBuilder = {}; + if (builder) { + Object.keys(builder).forEach((field) => { + if (Array.isArray(builder[field])) { + translatedBuilder[field] = builder[field].map((x) => { + let name = explorerFields()[field].find(f => f.key === x); + name = name ? name.text : x; + return name; + }); + } + }); + } if (isDateField) { return ( From 555c83bb7b6a725f60340940d43196887d88dc87 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Mon, 25 Dec 2017 21:45:40 +0100 Subject: [PATCH 0035/1495] allow multipled json_each --- src/components/Explorer/queryTemplate.js | 27 +++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 1bba645f96..6c49426bd9 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -25,7 +25,7 @@ function validate(p) { const queryTemplate = (props) => { const { select, - group = select && select.groupValue ? { value: select.groupKey, groupKeySelect: select.groupKeySelect, alias: select.alias } : null, + group, minPatch, maxPatch, hero, @@ -58,7 +58,7 @@ const queryTemplate = (props) => { let query; let groupArray = []; let selectArray = []; - // console.log(props) + console.log(props) if (!(Array.isArray(group))) { groupArray.push(group); } else { @@ -69,6 +69,25 @@ const queryTemplate = (props) => { } else { selectArray = select; } + selectArray = selectArray.filter(function(x) { return x !== undefined}) + groupArray = groupArray.filter(function(x) { return x !== undefined}) + //select && select.groupValue ? { value: select.groupKey, groupKeySelect: select.groupKeySelect, alias: select.alias } : null, + selectArray.forEach( function(x, index) { + if (x && x.groupValue) { + let a = {value: x.groupKey, groupKeySelect: x.groupKeySelect, alias: x.alias, key: "key" + index.toString()} + if (x.groupKey === "key") { + a.value = "key" + index.toString() + ".key" + x.value = "key" + index.toString() + ".key" + x.join = x.join + " key" + index.toString() + x.groupValue = "key" + index.toString() + "." + x.groupValue + + } + groupArray.push(a) + } + } + ) + console.log(selectArray) + console.log(groupArray) if (selectArray && selectArray.template === 'picks_bans') { query = `SELECT hero_id, @@ -116,6 +135,8 @@ ORDER BY total ${(order && order.value) || 'DESC'}`; if (validate(selectArray)) { selectArray.forEach((x) => { selectVal[x.key] = x.groupValue || (x && x.value) || 1; }); } + console.log(selectVal) + console.log(groupVal) query = `SELECT ${validate(selectArray) ? selectArray.map(x => (x.distinct && !validate(groupArray) ? `DISTINCT ON (${x.value})` : '')).join('') : ''}\ ${(validate(groupArray)) ? @@ -125,7 +146,7 @@ ${(validate(groupArray)) ? (validate(selectArray) && selectArray.map(x => [ (x && x.countValue) || '', - (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) avg` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} "AVG ${x.text}"`, + (x && x.avgPerMatch) ? `sum(${selectVal[x.key]})::numeric/count(distinct matches.match_id) "AVG ${x.text}"` : `${x && x.avg ? x.avg : `avg(${selectVal[x.key]})`} "AVG ${x.text}"`, 'count(distinct matches.match_id) count', 'sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1) winrate', `((sum(case when (player_matches.player_slot < 128) = radiant_win then 1 else 0 end)::float/count(1)) From 9ffa6e2205aa071674308735cc3806c26cd851e7 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Mon, 25 Dec 2017 21:51:28 +0100 Subject: [PATCH 0036/1495] multiple json_each --- src/components/Explorer/queryTemplate.js | 39 ++++++++++++------------ 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 6c49426bd9..9e73fa7e72 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -58,7 +58,7 @@ const queryTemplate = (props) => { let query; let groupArray = []; let selectArray = []; - console.log(props) + console.log(props); if (!(Array.isArray(group))) { groupArray.push(group); } else { @@ -69,25 +69,26 @@ const queryTemplate = (props) => { } else { selectArray = select; } - selectArray = selectArray.filter(function(x) { return x !== undefined}) - groupArray = groupArray.filter(function(x) { return x !== undefined}) - //select && select.groupValue ? { value: select.groupKey, groupKeySelect: select.groupKeySelect, alias: select.alias } : null, - selectArray.forEach( function(x, index) { + selectArray = selectArray.filter(x => x !== undefined); + groupArray = groupArray.filter(x => x !== undefined); + // select && select.groupValue ? { value: select.groupKey, groupKeySelect: select.groupKeySelect, alias: select.alias } : null, + selectArray.forEach((x, index) => { if (x && x.groupValue) { - let a = {value: x.groupKey, groupKeySelect: x.groupKeySelect, alias: x.alias, key: "key" + index.toString()} - if (x.groupKey === "key") { - a.value = "key" + index.toString() + ".key" - x.value = "key" + index.toString() + ".key" - x.join = x.join + " key" + index.toString() - x.groupValue = "key" + index.toString() + "." + x.groupValue - + const a = { + value: x.groupKey, groupKeySelect: x.groupKeySelect, alias: x.alias, key: `key${index.toString()}`, + }; + if (x.groupKey === 'key') { + const p = x; + a.value = `key${index.toString()}.key`; + p.value = `key${index.toString()}.key`; + p.join = `${x.join} key${index.toString()}`; + p.groupValue = `key${index.toString()}.${x.groupValue}`; } - groupArray.push(a) + groupArray.push(a); } - } - ) - console.log(selectArray) - console.log(groupArray) + }); + console.log(selectArray); + console.log(groupArray); if (selectArray && selectArray.template === 'picks_bans') { query = `SELECT hero_id, @@ -135,8 +136,8 @@ ORDER BY total ${(order && order.value) || 'DESC'}`; if (validate(selectArray)) { selectArray.forEach((x) => { selectVal[x.key] = x.groupValue || (x && x.value) || 1; }); } - console.log(selectVal) - console.log(groupVal) + console.log(selectVal); + console.log(groupVal); query = `SELECT ${validate(selectArray) ? selectArray.map(x => (x.distinct && !validate(groupArray) ? `DISTINCT ON (${x.value})` : '')).join('') : ''}\ ${(validate(groupArray)) ? From 5efe40ea4f22fe9992f61bbb7cf6f85cf4919168 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 26 Dec 2017 02:52:54 +0100 Subject: [PATCH 0037/1495] do not allow duplicate chips --- src/components/Explorer/ExplorerFormField.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index 00a7895f7c..36097820c6 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -43,7 +43,7 @@ class ExplorerFormField extends React.Component { } addChip(name, input, limit) { const currentChips = [].concat(this.props.builder[name] || []); - const newChips = [input.key].concat(currentChips).slice(0, limit); + const newChips = currentChips.includes(input.key) ? currentChips : [input.key].concat(currentChips).slice(0, limit); this.props.handleFieldUpdate(name, newChips); } deleteChip(name, index) { From 3b6c3fd4da351126b918ad7e07d9223fc8c233ad Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 26 Dec 2017 16:35:01 +0100 Subject: [PATCH 0038/1495] fix ambiguous columns --- src/components/Explorer/fields.js | 52 +++++++++++++++---------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/components/Explorer/fields.js b/src/components/Explorer/fields.js index dba4774860..f26311687c 100644 --- a/src/components/Explorer/fields.js +++ b/src/components/Explorer/fields.js @@ -53,122 +53,122 @@ AND match_logs.targetname LIKE '${unitKey}'`, const singleFields = [{ text: strings.heading_kills, - value: 'kills', + value: 'player_matches.kills', key: 'kills', }, { text: strings.heading_deaths, - value: 'deaths', + value: 'player_matches.deaths', key: 'deaths', }, { text: strings.heading_assists, - value: 'assists', + value: 'player_matches.assists', key: 'assists', }, { text: strings.heading_gold_per_min, - value: 'gold_per_min', + value: 'player_matches.gold_per_min', bucket: 50, key: 'gold_per_min', }, { text: strings.heading_xp_per_min, - value: 'xp_per_min', + value: 'player_matches.xp_per_min', bucket: 50, key: 'xp_per_min', }, { text: strings.heading_last_hits, - value: 'last_hits', + value: 'player_matches.last_hits', bucket: 10, key: 'last_hits', }, { text: strings.heading_denies, - value: 'denies', + value: 'player_matches.denies', key: 'denies', }, { text: strings.heading_hero_damage, - value: 'hero_damage', + value: 'player_matches.hero_damage', bucket: 1000, key: 'hero_damage', }, { text: strings.heading_tower_damage, - value: 'tower_damage', + value: 'player_matches.tower_damage', bucket: 1000, key: 'tower_damage', }, { text: strings.heading_hero_healing, - value: 'hero_healing', + value: 'player_matches.hero_healing', bucket: 1000, key: 'hero_healing', }, { text: strings.heading_level, - value: 'level', + value: 'player_matches.level', key: 'level', }, { text: strings.heading_stuns, - value: 'stuns', + value: 'player_matches.stuns', bucket: 1, key: 'stuns', }, { text: strings.heading_camps_stacked, - value: 'camps_stacked', + value: 'player_matches.camps_stacked', key: 'camps_stacked', }, { text: strings.heading_lhten, - value: 'lh_t[11]', + value: 'player_matches.lh_t[11]', bucket: 10, key: 'lh10', }, { text: strings.heading_lhtwenty, - value: 'lh_t[21]', + value: 'player_matches.lh_t[21]', bucket: 10, key: 'lh20', }, { text: strings.heading_lhthirty, - value: 'lh_t[31]', + value: 'player_matches.lh_t[31]', bucket: 10, key: 'lh30', }, { text: strings.heading_lhforty, - value: 'lh_t[41]', + value: 'player_matches.lh_t[41]', bucket: 10, key: 'lh40', }, { text: strings.heading_lhfifty, - value: 'lh_t[51]', + value: 'player_matches.lh_t[51]', bucket: 10, key: 'lh50', }, { text: strings.th_buybacks, - value: 'array_length(buyback_log, 1)', + value: 'array_length(player_matches.buyback_log, 1)', key: 'buybacks', }, { text: strings.th_scans_used, - value: '(actions->>\'31\')::int', + value: '(player_matches.actions->>\'31\')::int', key: 'scans_used', }, { text: strings.th_glyphs_used, - value: '(actions->>\'24\')::int', + value: '(player_matches.actions->>\'24\')::int', key: 'glyphs_used', }, { text: strings.th_obs_placed, - value: 'array_length(obs_log, 1)', + value: 'array_length(player_matches.obs_log, 1)', key: 'obs_placed', }, { text: strings.th_sen_placed, - value: 'array_length(sen_log, 1)', + value: 'array_length(player_matches.sen_log, 1)', key: 'sen_placed', }, { text: strings.th_obs_destroyed, - value: '(killed->>\'npc_dota_observer_wards\')::int', + value: '(player_matches.killed->>\'npc_dota_observer_wards\')::int', key: 'obs_destroyed', }, { text: strings.th_sen_destroyed, - value: '(killed->>\'npc_dota_sentry_wards\')::int', + value: '(player_matches.killed->>\'npc_dota_sentry_wards\')::int', key: 'sen_destroyed', }, { @@ -178,7 +178,7 @@ const singleFields = [{ }, { text: strings.th_fantasy_points, - value: 'round((0.3 * kills + (3 - 0.3 * deaths) + 0.003 * (last_hits + denies) + 0.002 * gold_per_min + towers_killed + roshans_killed + 3 * teamfight_participation + 0.5 * observers_placed + 0.5 * camps_stacked + 0.25 * rune_pickups + 4 * firstblood_claimed + 0.05 * stuns)::numeric, 1)', + value: 'round((0.3 * player_matches.kills + (3 - 0.3 * player_matches.deaths) + 0.003 * (player_matches.last_hits + player_matches.denies) + 0.002 * player_matches.gold_per_min + player_matches.towers_killed + player_matches.roshans_killed + 3 * player_matches.teamfight_participation + 0.5 * player_matches.observers_placed + 0.5 * player_matches.camps_stacked + 0.25 * player_matches.rune_pickups + 4 * player_matches.firstblood_claimed + 0.05 * player_matches.stuns)::numeric, 1)', key: 'fantasy_points', bucket: 1, }].map(select => ({ From eee78463c6acd4cefe2f02c758a1e6ea432fb109 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 26 Dec 2017 18:42:21 +0100 Subject: [PATCH 0039/1495] join joinfn order --- src/components/Explorer/queryTemplate.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 9e73fa7e72..0f24aee46c 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -178,8 +178,8 @@ LEFT JOIN notable_players ON notable_players.account_id = player_matches.account LEFT JOIN teams using(team_id) ${organization || (groupArray !== null && groupArray.length > 0 && groupArray[0] && groupArray.some(x => x.key === 'organization')) ? 'JOIN team_match ON matches.match_id = team_match.match_id AND (player_matches.player_slot < 128) = team_match.radiant JOIN teams teams2 ON team_match.team_id = teams2.team_id' : ''} -${validate(selectArray) ? selectArray.map(x => (x.join ? x.join : '')).join('') : ''} ${validate(selectArray) ? selectArray.map(x => (x.joinFn ? x.joinFn(props) : '')).join('') : ''} +${validate(selectArray) ? selectArray.map(x => (x.join ? x.join : '')).join('') : ''} WHERE TRUE ${validate(selectArray) ? selectArray.map(x => `AND ${x.value} IS NOT NULL `).join('') : ''} ${validate(minPatch) ? templ`match_patch.patch >= '${minPatch}'` : ''} From f335c131160329c270d427816d47d3a4385b579e Mon Sep 17 00:00:00 2001 From: Argn0 Date: Wed, 27 Dec 2017 05:03:53 +0100 Subject: [PATCH 0040/1495] removed console logs --- src/components/Explorer/queryTemplate.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 0f24aee46c..ef1f7f171f 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -58,7 +58,6 @@ const queryTemplate = (props) => { let query; let groupArray = []; let selectArray = []; - console.log(props); if (!(Array.isArray(group))) { groupArray.push(group); } else { @@ -71,7 +70,6 @@ const queryTemplate = (props) => { } selectArray = selectArray.filter(x => x !== undefined); groupArray = groupArray.filter(x => x !== undefined); - // select && select.groupValue ? { value: select.groupKey, groupKeySelect: select.groupKeySelect, alias: select.alias } : null, selectArray.forEach((x, index) => { if (x && x.groupValue) { const a = { @@ -87,8 +85,6 @@ const queryTemplate = (props) => { groupArray.push(a); } }); - console.log(selectArray); - console.log(groupArray); if (selectArray && selectArray.template === 'picks_bans') { query = `SELECT hero_id, @@ -136,8 +132,6 @@ ORDER BY total ${(order && order.value) || 'DESC'}`; if (validate(selectArray)) { selectArray.forEach((x) => { selectVal[x.key] = x.groupValue || (x && x.value) || 1; }); } - console.log(selectVal); - console.log(groupVal); query = `SELECT ${validate(selectArray) ? selectArray.map(x => (x.distinct && !validate(groupArray) ? `DISTINCT ON (${x.value})` : '')).join('') : ''}\ ${(validate(groupArray)) ? From f968eae113027e871d7ab298edde0a0084211352 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Sat, 13 Jan 2018 23:37:01 +0100 Subject: [PATCH 0041/1495] moved json_each to group by --- src/components/Explorer/fields.js | 102 ++++++++++++----------- src/components/Explorer/index.jsx | 2 +- src/components/Explorer/queryTemplate.js | 5 ++ 3 files changed, 61 insertions(+), 48 deletions(-) diff --git a/src/components/Explorer/fields.js b/src/components/Explorer/fields.js index f26311687c..ae8c98cb7a 100644 --- a/src/components/Explorer/fields.js +++ b/src/components/Explorer/fields.js @@ -227,53 +227,7 @@ const fields = (players = [], leagues = [], teams = []) => ({ key: 'distinct_heroes', distinct: true, }, - { - ...jsonSelect, - text: strings.heading_item_purchased, - alias: 'item_name', - join: ', json_each(player_matches.purchase)', - key: 'item_purchased', - }, { - ...jsonSelect, - text: strings.heading_ability_used, - alias: 'ability_name', - join: ', json_each(player_matches.ability_uses)', - key: 'ability_used', - }, { - ...jsonSelect, - text: strings.heading_item_used, - alias: 'item_name', - join: ', json_each(player_matches.item_uses)', - key: 'item_used', - }, { - ...jsonSelect, - text: strings.heading_damage_inflictor, - alias: 'inflictor', - join: ', json_each(player_matches.damage_inflictor)', - key: 'damage_inflictor', - }, { - ...jsonSelect, - text: strings.heading_damage_inflictor_received, - alias: 'inflictor', - join: ', json_each(player_matches.damage_inflictor_received)', - key: 'damage_inflictor_received', - }, { - ...jsonSelect, - text: strings.heading_runes, - alias: 'rune_id', - join: ', json_each(player_matches.runes)', - key: 'runes', - }, { - ...jsonSelect, - text: strings.heading_unit_kills, - join: ', json_each(player_matches.killed)', - key: 'unit_kills', - }, { - ...jsonSelect, - text: strings.heading_damage_instances, - join: ', json_each(player_matches.hero_hits)', - key: 'damage_instances', - }, killSelect({ + killSelect({ text: strings.heading_courier, unitKey: 'npc_dota_courier', }), @@ -390,6 +344,60 @@ ${props.player && props.player.value ? '' : 'AND player_matches.account_id < pla text: strings.explorer_match, value: 'matches.match_id', key: 'match', + }, { + ...jsonSelect, + text: strings.heading_item_purchased, + alias: 'item_name', + join: ', json_each(player_matches.purchase)', + key: 'item_purchased', + json_each: true, + }, { + ...jsonSelect, + text: strings.heading_ability_used, + alias: 'ability_name', + join: ', json_each(player_matches.ability_uses)', + key: 'ability_used', + json_each: true, + }, { + ...jsonSelect, + text: strings.heading_item_used, + alias: 'item_name', + join: ', json_each(player_matches.item_uses)', + key: 'item_used', + json_each: true, + }, { + ...jsonSelect, + text: strings.heading_damage_inflictor, + alias: 'inflictor', + join: ', json_each(player_matches.damage_inflictor)', + key: 'damage_inflictor', + json_each: true, + }, { + ...jsonSelect, + text: strings.heading_damage_inflictor_received, + alias: 'inflictor', + join: ', json_each(player_matches.damage_inflictor_received)', + key: 'damage_inflictor_received', + json_each: true, + }, { + ...jsonSelect, + text: strings.heading_runes, + alias: 'rune_id', + join: ', json_each(player_matches.runes)', + key: 'runes', + json_each: true, + }, { + ...jsonSelect, + text: strings.heading_unit_kills, + join: ', json_each(player_matches.killed)', + key: 'unit_kills', + json_each: true, + }, { + ...jsonSelect, + text: strings.heading_damage_instances, + join: ', json_each(player_matches.hero_hits)', + key: 'damage_instances', + json_each: true, }, ].concat(singleFields), minPatch: patches, diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index f8b0e32e88..4824888b6b 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -195,7 +195,7 @@ class Explorer extends React.Component { toggleEditor={this.toggleEditor} > - + diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index ef1f7f171f..1770bbc6e7 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -70,6 +70,11 @@ const queryTemplate = (props) => { } selectArray = selectArray.filter(x => x !== undefined); groupArray = groupArray.filter(x => x !== undefined); + groupArray.forEach((x) => { + if (x.json_each) { + selectArray.push(x); + } + }); selectArray.forEach((x, index) => { if (x && x.groupValue) { const a = { From e32aab36f853a29ec220aa2d340572ce4536555c Mon Sep 17 00:00:00 2001 From: Argn0 Date: Sun, 14 Jan 2018 00:47:33 +0100 Subject: [PATCH 0042/1495] grouparray fix --- src/components/Explorer/queryTemplate.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 1770bbc6e7..508022d5eb 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -75,6 +75,7 @@ const queryTemplate = (props) => { selectArray.push(x); } }); + groupArray = groupArray.filter(x => !x.json_each); selectArray.forEach((x, index) => { if (x && x.groupValue) { const a = { From ec5e1fdd7088a3011168aa9602bd7df2058b0cc0 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Thu, 25 Jan 2018 12:53:38 +0100 Subject: [PATCH 0043/1495] 25012018 --- src/components/Explorer/ExplorerFormField.jsx | 23 ++++++++-- src/components/Explorer/index.jsx | 45 ++++++++++--------- src/components/Explorer/queryTemplate.js | 19 +++++--- src/components/Match/PlayerThumb/index.jsx | 2 +- .../Visualizations/Graph/MatchGraph.jsx | 2 +- 5 files changed, 57 insertions(+), 34 deletions(-) diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index 36097820c6..d52ee6e82f 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -56,7 +56,7 @@ class ExplorerFormField extends React.Component { } render() { const { - fields, label, builderField, handleFieldUpdate, isDateField, builder, chipLimit, + fields, label, builderField, handleFieldUpdate, isDateField, builder, chipLimit, multipleSelect, } = this.props; const dataSource = fields && fields[builderField]; const fieldWidth = 280; @@ -90,7 +90,7 @@ class ExplorerFormField extends React.Component { } return ( - { + { multipleSelect ? - } + : + { this.autocomplete = ref; return null; }} + openOnFocus + listStyle={{ maxHeight: 400, overflow: 'auto' }} + fullWidth + filter={AutoComplete.caseInsensitiveFilter} + floatingLabelText={label} + dataSource={dataSource} + maxSearchResults={100} + onClick={this.resetField} + onNewRequest={(value, index) => { + handleFieldUpdate(builderField, index > -1 ? value.key : ''); + }} + /> + } ); } } @@ -115,10 +130,12 @@ ExplorerFormField.propTypes = { isDateField: PropTypes.bool, builder: PropTypes.func, chipLimit: PropTypes.number, + multipleSelect: PropTypes.bool, }; ExplorerFormField.defaultProps = { chipLimit: 10, + multipleSelect: false, }; export default ExplorerFormField; diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 4824888b6b..25919af6fe 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -194,35 +194,36 @@ class Explorer extends React.Component { showEditor={this.state.showEditor} toggleEditor={this.toggleEditor} > - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + +
0 && p[0] !== null && p[0] !== undefined) { - return true; - } - return false; + return p !== null && p !== undefined && p.length > 0 && p[0] !== null && p[0] !== undefined; } const queryTemplate = (props) => { @@ -58,6 +55,14 @@ const queryTemplate = (props) => { let query; let groupArray = []; let selectArray = []; + let defaultMinDate; + + // set default minDate to 30 days ago + if (!minDate) { + const today = new Date(); + defaultMinDate = new Date().setDate(today.getDate() - 30); + } + if (!(Array.isArray(group))) { groupArray.push(group); } else { @@ -196,8 +201,8 @@ ${validate(team) ? templ`notable_players.team_id = ${team}` : ''} ${validate(organization) ? templ`team_match.team_id = ${organization} AND (player_matches.player_slot < 128) = team_match.radiant` : ''} ${validate(laneRole) ? templ`player_matches.lane_role = ${laneRole}` : ''} ${validate(region) ? templ`matches.cluster IN (${region})` : ''} -${validate(minDate) ? templ`matches.start_time >= extract(epoch from timestamp '${new Date(minDate).toISOString()}')` : ''} -${validate(maxDate) ? templ`matches.start_time <= extract(epoch from timestamp '${new Date(maxDate).toISOString()}')` : ''} +${templ`matches.start_time >= extract(epoch from timestamp '${new Date(defaultMinDate || minDate.value).toISOString()}')`} +${maxDate ? templ`matches.start_time <= extract(epoch from timestamp '${new Date(maxDate.value).toISOString()}')` : ''} ${validate(tier) ? templ`leagues.tier = '${tier}'` : ''} ${validate(isTi7Team) ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} ${validate(groupArray) ? 'GROUP BY' : ''}${(validate(groupArray) && groupArray.map(x => ` ${groupVal[x.key]}`)) || ''} diff --git a/src/components/Match/PlayerThumb/index.jsx b/src/components/Match/PlayerThumb/index.jsx index 81d28fe102..42b292109b 100644 --- a/src/components/Match/PlayerThumb/index.jsx +++ b/src/components/Match/PlayerThumb/index.jsx @@ -19,7 +19,7 @@ const StyledImg = styled.img` `; const PlayerThumb = ({ - player_slot, hero_id, name, personaname, hideText, // eslint-disable-line camelcase + player_slot, hero_id, name, personaname, hideText, }) => ( `${minutes}:00`; const generateDiffData = (match) => { - const { radiant_gold_adv, radiant_xp_adv } = match; // eslint-disable-line camelcase + const { radiant_gold_adv, radiant_xp_adv } = match; const data = []; radiant_xp_adv.forEach((rXpAdv, index) => { if (index <= Math.floor(match.duration / 60)) { From c746e868cafaf46fe4018fc25efb6c2891e50afb Mon Sep 17 00:00:00 2001 From: Argn0 Date: Thu, 25 Jan 2018 14:42:21 +0100 Subject: [PATCH 0044/1495] mindate --- src/components/Explorer/ExplorerFormField.jsx | 7 ++++--- src/components/Explorer/index.jsx | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index d52ee6e82f..4a773ab61b 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -56,7 +56,7 @@ class ExplorerFormField extends React.Component { } render() { const { - fields, label, builderField, handleFieldUpdate, isDateField, builder, chipLimit, multipleSelect, + fields, label, builderField, handleFieldUpdate, isDateField, builder, chipLimit, multipleSelect, minDate, } = this.props; const dataSource = fields && fields[builderField]; const fieldWidth = 280; @@ -80,8 +80,7 @@ class ExplorerFormField extends React.Component { floatingLabelText={label} container="inline" autoOk - defaultDate={builder[builderField] ? new Date(builder[builderField]) : undefined} - onShow={this.resetField} + defaultDate={minDate ? new Date(new Date().setDate(new Date().getDate() - 30)) : undefined} onChange={(event, date) => { handleFieldUpdate(builderField, date.toISOString()); }} @@ -131,11 +130,13 @@ ExplorerFormField.propTypes = { builder: PropTypes.func, chipLimit: PropTypes.number, multipleSelect: PropTypes.bool, + minDate: PropTypes.bool, }; ExplorerFormField.defaultProps = { chipLimit: 10, multipleSelect: false, + minDate: false, }; export default ExplorerFormField; diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 25919af6fe..d261f0e55f 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -218,7 +218,7 @@ class Explorer extends React.Component { - + From 1eaa6ff1091b5f2a79fb92e7471a3973b1c79e67 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Thu, 25 Jan 2018 14:46:03 +0100 Subject: [PATCH 0045/1495] onshow --- src/components/Explorer/ExplorerFormField.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index 4a773ab61b..74e9995298 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -81,6 +81,7 @@ class ExplorerFormField extends React.Component { container="inline" autoOk defaultDate={minDate ? new Date(new Date().setDate(new Date().getDate() - 30)) : undefined} + onShow={minDate ? undefined : this.resetField} onChange={(event, date) => { handleFieldUpdate(builderField, date.toISOString()); }} From b94259b7f96c871f4a240c0f1e990afab025b6e5 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Mon, 29 Jan 2018 11:29:08 +0100 Subject: [PATCH 0046/1495] 1 --- src/components/Explorer/ExplorerFormField.jsx | 4 +++- src/components/Explorer/queryTemplate.js | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index 74e9995298..27666fd33c 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -38,6 +38,8 @@ class ExplorerFormField extends React.Component { } if (this.datepicker) { this.datepicker.setState({ date: undefined }); + handleFieldUpdate(builderField, -1); + return; } handleFieldUpdate(builderField, undefined); } @@ -81,7 +83,7 @@ class ExplorerFormField extends React.Component { container="inline" autoOk defaultDate={minDate ? new Date(new Date().setDate(new Date().getDate() - 30)) : undefined} - onShow={minDate ? undefined : this.resetField} + onShow={this.resetField} onChange={(event, date) => { handleFieldUpdate(builderField, date.toISOString()); }} diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index b793a0bb8f..18e6921eb8 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -80,6 +80,7 @@ const queryTemplate = (props) => { selectArray.push(x); } }); + console.log(minDate) groupArray = groupArray.filter(x => !x.json_each); selectArray.forEach((x, index) => { if (x && x.groupValue) { @@ -165,7 +166,7 @@ ${(validate(groupArray)) ? `stddev(${selectVal[x.key]}::numeric) stddev `, ].filter(Boolean).join(',\n'))) || '' : ''} -${!validate(groupArray) && validate(selectArray) ? +${!validate(groupArray) ? [validate(selectArray) ? selectArray.map(x => `${x.value} ${x.alias || ''}`) : '', 'matches.match_id', 'matches.start_time', @@ -186,6 +187,7 @@ ${organization || (groupArray !== null && groupArray.length > 0 && groupArray[0] ${validate(selectArray) ? selectArray.map(x => (x.joinFn ? x.joinFn(props) : '')).join('') : ''} ${validate(selectArray) ? selectArray.map(x => (x.join ? x.join : '')).join('') : ''} WHERE TRUE +${minDate && minDate.value === -1 ? '' : `ANDd matches.start_time >= extract(epoch from timestamp '${new Date(new Date().setDate(new Date().getDate() - 30)).toISOString()}')`} ${validate(selectArray) ? selectArray.map(x => `AND ${x.value} IS NOT NULL `).join('') : ''} ${validate(minPatch) ? templ`match_patch.patch >= '${minPatch}'` : ''} ${validate(maxPatch) ? templ`match_patch.patch <= '${maxPatch}'` : ''} @@ -201,7 +203,7 @@ ${validate(team) ? templ`notable_players.team_id = ${team}` : ''} ${validate(organization) ? templ`team_match.team_id = ${organization} AND (player_matches.player_slot < 128) = team_match.radiant` : ''} ${validate(laneRole) ? templ`player_matches.lane_role = ${laneRole}` : ''} ${validate(region) ? templ`matches.cluster IN (${region})` : ''} -${templ`matches.start_time >= extract(epoch from timestamp '${new Date(defaultMinDate || minDate.value).toISOString()}')`} +${minDate ? templ`matches.start_time >= extract(epoch from timestamp '${new Date(minDate.value).toISOString()}')`: ''} ${maxDate ? templ`matches.start_time <= extract(epoch from timestamp '${new Date(maxDate.value).toISOString()}')` : ''} ${validate(tier) ? templ`leagues.tier = '${tier}'` : ''} ${validate(isTi7Team) ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} From f1529e606e793be0a270fedc1cd76d115a3a71ac Mon Sep 17 00:00:00 2001 From: Argn0 Date: Mon, 29 Jan 2018 12:42:05 +0100 Subject: [PATCH 0047/1495] 2 --- src/components/Explorer/ExplorerFormField.jsx | 4 ++-- src/components/Explorer/queryTemplate.js | 12 ++---------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index 27666fd33c..0bf97d76b7 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -58,7 +58,7 @@ class ExplorerFormField extends React.Component { } render() { const { - fields, label, builderField, handleFieldUpdate, isDateField, builder, chipLimit, multipleSelect, minDate, + fields, label, builderField, handleFieldUpdate, isDateField, builder, chipLimit, multipleSelect, } = this.props; const dataSource = fields && fields[builderField]; const fieldWidth = 280; @@ -82,7 +82,7 @@ class ExplorerFormField extends React.Component { floatingLabelText={label} container="inline" autoOk - defaultDate={minDate ? new Date(new Date().setDate(new Date().getDate() - 30)) : undefined} + defaultDate={builder[builderField] ? new Date(builder[builderField]) : undefined} onShow={this.resetField} onChange={(event, date) => { handleFieldUpdate(builderField, date.toISOString()); diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 18e6921eb8..2c178a05b9 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -55,13 +55,6 @@ const queryTemplate = (props) => { let query; let groupArray = []; let selectArray = []; - let defaultMinDate; - - // set default minDate to 30 days ago - if (!minDate) { - const today = new Date(); - defaultMinDate = new Date().setDate(today.getDate() - 30); - } if (!(Array.isArray(group))) { groupArray.push(group); @@ -80,7 +73,7 @@ const queryTemplate = (props) => { selectArray.push(x); } }); - console.log(minDate) + console.log(minDate); groupArray = groupArray.filter(x => !x.json_each); selectArray.forEach((x, index) => { if (x && x.groupValue) { @@ -187,7 +180,6 @@ ${organization || (groupArray !== null && groupArray.length > 0 && groupArray[0] ${validate(selectArray) ? selectArray.map(x => (x.joinFn ? x.joinFn(props) : '')).join('') : ''} ${validate(selectArray) ? selectArray.map(x => (x.join ? x.join : '')).join('') : ''} WHERE TRUE -${minDate && minDate.value === -1 ? '' : `ANDd matches.start_time >= extract(epoch from timestamp '${new Date(new Date().setDate(new Date().getDate() - 30)).toISOString()}')`} ${validate(selectArray) ? selectArray.map(x => `AND ${x.value} IS NOT NULL `).join('') : ''} ${validate(minPatch) ? templ`match_patch.patch >= '${minPatch}'` : ''} ${validate(maxPatch) ? templ`match_patch.patch <= '${maxPatch}'` : ''} @@ -203,7 +195,7 @@ ${validate(team) ? templ`notable_players.team_id = ${team}` : ''} ${validate(organization) ? templ`team_match.team_id = ${organization} AND (player_matches.player_slot < 128) = team_match.radiant` : ''} ${validate(laneRole) ? templ`player_matches.lane_role = ${laneRole}` : ''} ${validate(region) ? templ`matches.cluster IN (${region})` : ''} -${minDate ? templ`matches.start_time >= extract(epoch from timestamp '${new Date(minDate.value).toISOString()}')`: ''} +${minDate ? templ`matches.start_time >= extract(epoch from timestamp '${new Date(minDate.value).toISOString()}')` : ''} ${maxDate ? templ`matches.start_time <= extract(epoch from timestamp '${new Date(maxDate.value).toISOString()}')` : ''} ${validate(tier) ? templ`leagues.tier = '${tier}'` : ''} ${validate(isTi7Team) ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} From 90d51c10d00eda1555447a5c6fbd58e4254a07e1 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Mon, 29 Jan 2018 13:00:55 +0100 Subject: [PATCH 0048/1495] 3 --- src/components/Explorer/ExplorerFormField.jsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index 0bf97d76b7..1cf5034417 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -38,8 +38,6 @@ class ExplorerFormField extends React.Component { } if (this.datepicker) { this.datepicker.setState({ date: undefined }); - handleFieldUpdate(builderField, -1); - return; } handleFieldUpdate(builderField, undefined); } From 277731a62ed1b219451a3eb93d9eb53ac4bc402f Mon Sep 17 00:00:00 2001 From: Argn0 Date: Mon, 29 Jan 2018 15:32:29 +0100 Subject: [PATCH 0049/1495] 29012018 --- src/components/Explorer/ExplorerFormField.jsx | 17 +--------- src/components/Explorer/index.jsx | 6 ++++ src/components/Explorer/queryTemplate.js | 34 +++++++++---------- src/components/Form/FormField.jsx | 4 +-- 4 files changed, 25 insertions(+), 36 deletions(-) diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index 1cf5034417..968fce53cb 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -3,7 +3,6 @@ import PropTypes from 'prop-types'; import AutoComplete from 'material-ui/AutoComplete'; import DatePicker from 'material-ui/DatePicker'; import FormField from 'components/Form/FormField'; -import explorerFields from 'components/Explorer/fields'; class ExplorerFormField extends React.Component { constructor() { @@ -60,18 +59,6 @@ class ExplorerFormField extends React.Component { } = this.props; const dataSource = fields && fields[builderField]; const fieldWidth = 280; - const translatedBuilder = {}; - if (builder) { - Object.keys(builder).forEach((field) => { - if (Array.isArray(builder[field])) { - translatedBuilder[field] = builder[field].map((x) => { - let name = explorerFields()[field].find(f => f.key === x); - name = name ? name.text : x; - return name; - }); - } - }); - } if (isDateField) { return ( @@ -95,7 +82,7 @@ class ExplorerFormField extends React.Component { name={builderField} label={label} dataSource={dataSource} - formSelectionState={translatedBuilder} + formSelectionState={builder} filter={AutoComplete.caseInsensitiveFilter} strict limit={chipLimit} @@ -131,13 +118,11 @@ ExplorerFormField.propTypes = { builder: PropTypes.func, chipLimit: PropTypes.number, multipleSelect: PropTypes.bool, - minDate: PropTypes.bool, }; ExplorerFormField.defaultProps = { chipLimit: 10, multipleSelect: false, - minDate: false, }; export default ExplorerFormField; diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index d261f0e55f..99c4be68d3 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -34,6 +34,8 @@ import autocomplete from './autocomplete'; const playerMapping = {}; const teamMapping = {}; +const defaultMinDate = 30; + function jsonResponse(response) { return response.json(); } @@ -78,6 +80,10 @@ class Explorer extends React.Component { this.buildQuery = this.buildQuery.bind(this); this.syncWindowHistory = this.syncWindowHistory.bind(this); this.handleFieldUpdate = this.handleFieldUpdate.bind(this); + + if (!('minDate' in this.state.builder)) { + this.state.builder.minDate = new Date(new Date().setDate(new Date().getDate() - defaultMinDate)).toISOString(); + } } componentDidMount() { this.props.dispatchProPlayers(); diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 2c178a05b9..abe1709e3c 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -55,7 +55,6 @@ const queryTemplate = (props) => { let query; let groupArray = []; let selectArray = []; - if (!(Array.isArray(group))) { groupArray.push(group); } else { @@ -73,7 +72,6 @@ const queryTemplate = (props) => { selectArray.push(x); } }); - console.log(minDate); groupArray = groupArray.filter(x => !x.json_each); selectArray.forEach((x, index) => { if (x && x.groupValue) { @@ -181,24 +179,24 @@ ${validate(selectArray) ? selectArray.map(x => (x.joinFn ? x.joinFn(props) : '') ${validate(selectArray) ? selectArray.map(x => (x.join ? x.join : '')).join('') : ''} WHERE TRUE ${validate(selectArray) ? selectArray.map(x => `AND ${x.value} IS NOT NULL `).join('') : ''} -${validate(minPatch) ? templ`match_patch.patch >= '${minPatch}'` : ''} -${validate(maxPatch) ? templ`match_patch.patch <= '${maxPatch}'` : ''} -${validate(hero) ? templ`player_matches.hero_id = ${hero}` : ''} -${validate(player) ? templ`player_matches.account_id = ${player}` : ''} -${validate(league) ? templ`matches.leagueid = ${league}` : ''} -${validate(playerPurchased) ? templ`(player_matches.purchase->>'${playerPurchased}')::int > 0` : ''} -${validate(minDuration) ? templ`matches.duration >= ${minDuration}` : ''} -${validate(maxDuration) ? templ`matches.duration <= ${maxDuration}` : ''} -${validate(side) ? templ`(player_matches.player_slot < 128) = ${side}` : ''} -${validate(result) ? templ`((player_matches.player_slot < 128) = matches.radiant_win) = ${result}` : ''} -${validate(team) ? templ`notable_players.team_id = ${team}` : ''} -${validate(organization) ? templ`team_match.team_id = ${organization} AND (player_matches.player_slot < 128) = team_match.radiant` : ''} -${validate(laneRole) ? templ`player_matches.lane_role = ${laneRole}` : ''} -${validate(region) ? templ`matches.cluster IN (${region})` : ''} +${minPatch ? templ`match_patch.patch >= '${minPatch}'` : ''} +${maxPatch ? templ`match_patch.patch <= '${maxPatch}'` : ''} +${hero ? templ`player_matches.hero_id = ${hero}` : ''} +${player ? templ`player_matches.account_id = ${player}` : ''} +${league ? templ`matches.leagueid = ${league}` : ''} +${playerPurchased ? templ`(player_matches.purchase->>'${playerPurchased}')::int > 0` : ''} +${minDuration ? templ`matches.duration >= ${minDuration}` : ''} +${maxDuration ? templ`matches.duration <= ${maxDuration}` : ''} +${side ? templ`(player_matches.player_slot < 128) = ${side}` : ''} +${result ? templ`((player_matches.player_slot < 128) = matches.radiant_win) = ${result}` : ''} +${team ? templ`notable_players.team_id = ${team}` : ''} +${organization ? templ`team_match.team_id = ${organization} AND (player_matches.player_slot < 128) = team_match.radiant` : ''} +${laneRole ? templ`player_matches.lane_role = ${laneRole}` : ''} +${region ? templ`matches.cluster IN (${region})` : ''} ${minDate ? templ`matches.start_time >= extract(epoch from timestamp '${new Date(minDate.value).toISOString()}')` : ''} ${maxDate ? templ`matches.start_time <= extract(epoch from timestamp '${new Date(maxDate.value).toISOString()}')` : ''} -${validate(tier) ? templ`leagues.tier = '${tier}'` : ''} -${validate(isTi7Team) ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} +${tier ? templ`leagues.tier = '${tier}'` : ''} +${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} ${validate(groupArray) ? 'GROUP BY' : ''}${(validate(groupArray) && groupArray.map(x => ` ${groupVal[x.key]}`)) || ''} ${validate(groupArray) ? `HAVING count(distinct matches.match_id) >= ${(validate(having) && having[0].value) || '1'}` : ''} ORDER BY ${ diff --git a/src/components/Form/FormField.jsx b/src/components/Form/FormField.jsx index dd8d09e3a7..3e6d69f46a 100644 --- a/src/components/Form/FormField.jsx +++ b/src/components/Form/FormField.jsx @@ -123,10 +123,10 @@ class FormField extends React.Component { const selectedElements = [].concat(formSelectionState[name] || []); // Use dataSource on selectedElements to hydrate the chipList const chipList = selectedElements.map((element) => { - const fromSource = dataSource.find(data => Number(data.value) === Number(element)); + let fromSource = dataSource.find(data => Number(data.value) === Number(element)); + fromSource = fromSource || dataSource.find(data => data.key === element); return fromSource || { text: element, value: element }; }); - return (
Date: Wed, 31 Jan 2018 18:11:24 +0100 Subject: [PATCH 0050/1495] unrelated whitespace change --- src/components/Form/FormField.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/Form/FormField.jsx b/src/components/Form/FormField.jsx index 3e6d69f46a..f75b3182f6 100644 --- a/src/components/Form/FormField.jsx +++ b/src/components/Form/FormField.jsx @@ -127,6 +127,7 @@ class FormField extends React.Component { fromSource = fromSource || dataSource.find(data => data.key === element); return fromSource || { text: element, value: element }; }); + return (
Date: Wed, 31 Jan 2018 18:12:11 +0100 Subject: [PATCH 0051/1495] unrelated whitespace change --- src/components/Form/FormField.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Form/FormField.jsx b/src/components/Form/FormField.jsx index f75b3182f6..ef93a053e4 100644 --- a/src/components/Form/FormField.jsx +++ b/src/components/Form/FormField.jsx @@ -127,7 +127,7 @@ class FormField extends React.Component { fromSource = fromSource || dataSource.find(data => data.key === element); return fromSource || { text: element, value: element }; }); - + return (
Date: Wed, 31 Jan 2018 23:16:06 +0100 Subject: [PATCH 0052/1495] fix having and dont use chips for fields with single selection --- src/components/Explorer/index.jsx | 26 ++++++++++++------------ src/components/Explorer/queryTemplate.js | 3 ++- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 99c4be68d3..6c372eaa84 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -201,16 +201,16 @@ class Explorer extends React.Component { toggleEditor={this.toggleEditor} > - + - + - + - - - - - - - - - - + + + + + + + + + +
{ let query; let groupArray = []; let selectArray = []; + console.log(props); if (!(Array.isArray(group))) { groupArray.push(group); } else { @@ -198,7 +199,7 @@ ${maxDate ? templ`matches.start_time <= extract(epoch from timestamp '${new Date ${tier ? templ`leagues.tier = '${tier}'` : ''} ${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} ${validate(groupArray) ? 'GROUP BY' : ''}${(validate(groupArray) && groupArray.map(x => ` ${groupVal[x.key]}`)) || ''} -${validate(groupArray) ? `HAVING count(distinct matches.match_id) >= ${(validate(having) && having[0].value) || '1'}` : ''} +${validate(groupArray) ? `HAVING count(distinct matches.match_id) >= ${(having && having.value) || '1'}` : ''} ORDER BY ${ [`${(validate(groupArray) && validate(selectArray) && selectArray.map(x => `"AVG ${x.text}" ${validate(order) ? (Array.isArray(order) && order.length > 0 && order[0].value) || order.value : 'DESC'}`)) || (validate(selectArray) && selectArray.map(x => `${x.value} ${validate(order) ? (Array.isArray(order) && order.length > 0 && order[0].value) || order.value : 'DESC'}`).join(',')) || 'matches.match_id'}`, From dae4527a5763516af1d329b9a646f79ba147da69 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Wed, 31 Jan 2018 23:34:50 +0100 Subject: [PATCH 0053/1495] fixed side field --- src/components/Explorer/index.jsx | 2 +- src/components/Explorer/queryTemplate.js | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 6c372eaa84..d234b93caa 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -209,7 +209,7 @@ class Explorer extends React.Component { - + { let query; let groupArray = []; let selectArray = []; - console.log(props); if (!(Array.isArray(group))) { groupArray.push(group); } else { From a103af6662820262eb3c2407aed9778866a6f403 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Wed, 31 Jan 2018 23:55:15 +0100 Subject: [PATCH 0054/1495] fixed Picks/Bans --- src/components/Explorer/queryTemplate.js | 28 ++++++++++++------------ 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index d09ac270e9..543c68d969 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -88,7 +88,7 @@ const queryTemplate = (props) => { groupArray.push(a); } }); - if (selectArray && selectArray.template === 'picks_bans') { + if (validate(selectArray) && selectArray.some(p => p.template === 'picks_bans')) { query = `SELECT hero_id, count(1) total, @@ -110,19 +110,19 @@ JOIN leagues using(leagueid) JOIN team_match using(match_id) JOIN teams using(team_id) WHERE TRUE -${validate(selectArray) && selectArray.where ? selectArray.where : ''} -${organization ? `AND team_id = ${organization.value}` : ''} -${minPatch ? `AND match_patch.patch >= '${minPatch.value}'` : ''} -${maxPatch ? `AND match_patch.patch <= '${maxPatch.value}'` : ''} -${league ? `AND matches.leagueid = ${league.value}` : ''} -${minDuration ? `AND matches.duration >= ${minDuration.value}` : ''} -${maxDuration ? `AND matches.duration <= ${maxDuration.value}` : ''} -${side ? `AND team_match.radiant = ${side.value}` : ''} -${result ? `AND (team_match.radiant = matches.radiant_win) = ${result.value}` : ''} -${region ? `AND matches.cluster IN (${region.value.join(',')})` : ''} -${minDate ? `AND matches.start_time >= extract(epoch from timestamp '${new Date(minDate.value).toISOString()}')` : ''} -${maxDate ? `AND matches.start_time <= extract(epoch from timestamp '${new Date(maxDate.value).toISOString()}')` : ''} -${tier ? `AND leagues.tier = '${tier.value}'` : ''} +${validate(selectArray) && selectArray.find(x => x.where) !== undefined ? selectArray.find(x => x.where).where : ''} +${organization ? templ`team_id = ${organization}` : ''} +${minPatch ? templ`match_patch.patch >= '${minPatch}'` : ''} +${maxPatch ? templ`match_patch.patch <= '${maxPatch}'` : ''} +${league ? templ`matches.leagueid = ${league}` : ''} +${minDuration ? templ`matches.duration >= ${minDuration}` : ''} +${maxDuration ? templ`matches.duration <= ${maxDuration}` : ''} +${side ? templ`team_match.radiant = ${side}` : ''} +${result ? templ`(team_match.radiant = matches.radiant_win) = ${result.value}` : ''} +${region ? templ`matches.cluster IN (${region.value.join(',')})` : ''} +${minDate ? templ`matches.start_time >= extract(epoch from timestamp '${new Date(minDate.value).toISOString()}')` : ''} +${maxDate ? templ`matches.start_time <= extract(epoch from timestamp '${new Date(maxDate.value).toISOString()}')` : ''} +${tier ? templ`leagues.tier = '${tier}'` : ''} ${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 1838315, 1883502, 2108395, 2512249, 2581813, 2586976, 2640025, 2672298, 1333179, 3331948, 1846548)' : ''} GROUP BY hero_id ORDER BY total ${(order && order.value) || 'DESC'}`; From 1a63615568ad100fcf7e839aa655d074e56d9ef4 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Thu, 1 Feb 2018 00:03:24 +0100 Subject: [PATCH 0055/1495] fixed limit field --- src/components/Explorer/queryTemplate.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 543c68d969..82b198c48d 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -204,7 +204,7 @@ ORDER BY ${ (validate(selectArray) && selectArray.map(x => `${x.value} ${validate(order) ? (Array.isArray(order) && order.length > 0 && order[0].value) || order.value : 'DESC'}`).join(',')) || 'matches.match_id'}`, validate(groupArray) ? 'count DESC' : '', ].filter(Boolean).join(',')} NULLS LAST -LIMIT ${validate(limit) ? limit[0].value : 200}`; +LIMIT ${limit ? limit.value : 200}`; } return query // Remove extra newlines From e714565e07c616dd8883600c6247ec119be0fa63 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Thu, 1 Feb 2018 00:08:48 +0100 Subject: [PATCH 0056/1495] fixed order field --- src/components/Explorer/queryTemplate.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Explorer/queryTemplate.js b/src/components/Explorer/queryTemplate.js index 82b198c48d..4d3d8f1a78 100644 --- a/src/components/Explorer/queryTemplate.js +++ b/src/components/Explorer/queryTemplate.js @@ -200,8 +200,8 @@ ${isTi7Team ? 'AND teams.team_id IN (5, 15, 39, 46, 2163, 350190, 1375614, 18383 ${validate(groupArray) ? 'GROUP BY' : ''}${(validate(groupArray) && groupArray.map(x => ` ${groupVal[x.key]}`)) || ''} ${validate(groupArray) ? `HAVING count(distinct matches.match_id) >= ${(having && having.value) || '1'}` : ''} ORDER BY ${ - [`${(validate(groupArray) && validate(selectArray) && selectArray.map(x => `"AVG ${x.text}" ${validate(order) ? (Array.isArray(order) && order.length > 0 && order[0].value) || order.value : 'DESC'}`)) || - (validate(selectArray) && selectArray.map(x => `${x.value} ${validate(order) ? (Array.isArray(order) && order.length > 0 && order[0].value) || order.value : 'DESC'}`).join(',')) || 'matches.match_id'}`, + [`${(validate(groupArray) && validate(selectArray) && selectArray.map(x => `"AVG ${x.text}" ${order ? order.value : 'DESC'}`)) || + (validate(selectArray) && selectArray.map(x => `${x.value} ${order ? order.value : 'DESC'}`).join(',')) || 'matches.match_id'}`, validate(groupArray) ? 'count DESC' : '', ].filter(Boolean).join(',')} NULLS LAST LIMIT ${limit ? limit.value : 200}`; From 1e8c071ce49e3553a2c996494b3f1e0a344aa06a Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 18:40:09 -0700 Subject: [PATCH 0057/1495] New translations en-US.json (Italian) --- src/lang/it-IT.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lang/it-IT.json b/src/lang/it-IT.json index 7657be17f5..ae003a0b6e 100644 --- a/src/lang/it-IT.json +++ b/src/lang/it-IT.json @@ -1,5 +1,5 @@ { - "yes": "yes", + "yes": "si", "no": "no", "abbr_thousand": "k", "abbr_million": "m", @@ -9,7 +9,7 @@ "abbr_not_available": "Non disponibile", "abbr_pick": "P", "abbr_win": "W", - "abbr_number": "No.", + "abbr_number": "N.", "analysis_eff": "Efficienza in lane", "analysis_farm_drought": "GPM più basso in un intervallo di 5min", "analysis_skillshot": "Skillshot a segno", @@ -30,8 +30,8 @@ "app_api_docs": "Documenti API", "app_blog": "Blog", "app_translate": "Traduci", - "app_donate": "Donate", - "app_gravitech": "A Gravitech LLC Site", + "app_donate": "Effettua una donazione", + "app_gravitech": "Sito realizzato da Gravitech LLC", "app_powered_by": "realizzato con", "app_donation_goal": "Traguardo Mensile Donazioni", "app_sponsorship": "Il tuo contributo aiuta a tenere il servizio gratis per tutti.", @@ -53,7 +53,7 @@ "app_results": "risultato(i)", "app_report_bug": "Segnala un bug", "app_pro_players": "Giocatori Pro", - "app_public_players": "Public Players", + "app_public_players": "Giocatori visibili", "app_my_profile": "Il mio profilo", "barracks_value_1": "Dire Bot Melee", "barracks_value_2": "Dire Bot Ranged", From a69362c5484002ade8cb0eb747bcc121f9f66913 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:40:21 -0700 Subject: [PATCH 0058/1495] New translations en-US.json (Russian) --- src/lang/ru-RU.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index aaf0fde560..6621aea8b2 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Облако слов", "tab_mmr": "Рейтинг", "tab_rankings": "Ранги", + "tab_drafts": "Draft", "tab_benchmarks": "Бенчмарки", "tab_performances": "Показатели", "tab_damage": "Урон", From 1e3fc3a095835b5170309403cb0d669a371813a5 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:40:24 -0700 Subject: [PATCH 0059/1495] New translations en-US.json (Korean) --- src/lang/ko-KR.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/ko-KR.json b/src/lang/ko-KR.json index ca74e998eb..3e73e2a9f3 100644 --- a/src/lang/ko-KR.json +++ b/src/lang/ko-KR.json @@ -596,6 +596,7 @@ "tab_wordcloud": "자주 사용한 단어", "tab_mmr": "MMR", "tab_rankings": "순위", + "tab_drafts": "Draft", "tab_benchmarks": "수준점", "tab_performances": "성과", "tab_damage": "피해", From 9ae47befd201a6660b9616cbacabd119b41e5ddc Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:40:27 -0700 Subject: [PATCH 0060/1495] New translations en-US.json (Ukrainian) --- src/lang/uk-UA.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/uk-UA.json b/src/lang/uk-UA.json index 19706c2225..1336f7cf43 100644 --- a/src/lang/uk-UA.json +++ b/src/lang/uk-UA.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Хмара повідомлень", "tab_mmr": "MMR", "tab_rankings": "Рейтинги", + "tab_drafts": "Draft", "tab_benchmarks": "Контрольні показники", "tab_performances": "Результативність", "tab_damage": "Пошкодження", From feb1a873a8a3eaf092cf3858de50b7eead825f23 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:40:30 -0700 Subject: [PATCH 0061/1495] New translations en-US.json (Turkish) --- src/lang/tr-TR.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json index 3fcfb2da7a..a97b198099 100644 --- a/src/lang/tr-TR.json +++ b/src/lang/tr-TR.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Yazı Bulutu", "tab_mmr": "ED", "tab_rankings": "Derecelendirilme", + "tab_drafts": "Draft", "tab_benchmarks": "Kriterler", "tab_performances": "Performanslar", "tab_damage": "Hasar", From 6d623467ff66bc172010c515583a7d9e818b0645 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:40:33 -0700 Subject: [PATCH 0062/1495] New translations en-US.json (Swedish) --- src/lang/sv-SE.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/sv-SE.json b/src/lang/sv-SE.json index e345e080db..f760132a4c 100644 --- a/src/lang/sv-SE.json +++ b/src/lang/sv-SE.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Ordmoln", "tab_mmr": "I alla matcher", "tab_rankings": "Ranking", + "tab_drafts": "Draft", "tab_benchmarks": "Rekord", "tab_performances": "Lagstrid", "tab_damage": "Skada", From ca9ae3f0e9ec57737ce3d530904c6883bc70a744 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:40:35 -0700 Subject: [PATCH 0063/1495] New translations en-US.json (Spanish, United States) --- src/lang/es-US.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/es-US.json b/src/lang/es-US.json index 062f096074..2a104506af 100644 --- a/src/lang/es-US.json +++ b/src/lang/es-US.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Nube de palabras", "tab_mmr": "MMR", "tab_rankings": "Clasificaciones", + "tab_drafts": "Draft", "tab_benchmarks": "Benchmarks", "tab_performances": "Rendimientos", "tab_damage": "Daño", From 9e94b5a88e4b4e17894674f52c27a2204739fdc2 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:40:38 -0700 Subject: [PATCH 0064/1495] New translations en-US.json (Spanish, Peru) --- src/lang/es-PE.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/es-PE.json b/src/lang/es-PE.json index 1670fb6ced..0472f797af 100644 --- a/src/lang/es-PE.json +++ b/src/lang/es-PE.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Nube de palabras", "tab_mmr": "MMR", "tab_rankings": "Clasificaciones", + "tab_drafts": "Draft", "tab_benchmarks": "Puntos de referencia", "tab_performances": "Rendimientos", "tab_damage": "Daño", From 5fde5c2333826a6453de2c7606d8686fa54da710 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:40:41 -0700 Subject: [PATCH 0065/1495] New translations en-US.json (Spanish) --- src/lang/es-ES.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/es-ES.json b/src/lang/es-ES.json index d7b813668c..9436175191 100644 --- a/src/lang/es-ES.json +++ b/src/lang/es-ES.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Nube de palabras", "tab_mmr": "MMR", "tab_rankings": "Clasificaciones", + "tab_drafts": "Draft", "tab_benchmarks": "Comparaciones", "tab_performances": "Rendimientos", "tab_damage": "Daño", From bf89b1365c013a49f2c28408c5b46fd841ea29f4 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:40:43 -0700 Subject: [PATCH 0066/1495] New translations en-US.json (Slovak) --- src/lang/sk-SK.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/sk-SK.json b/src/lang/sk-SK.json index 407c9cb719..c7d945e99c 100644 --- a/src/lang/sk-SK.json +++ b/src/lang/sk-SK.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Wordcloud", "tab_mmr": "MMR", "tab_rankings": "Rankings", + "tab_drafts": "Draft", "tab_benchmarks": "Benchmarks", "tab_performances": "Performances", "tab_damage": "Damage", From 4c8d6625f79c3a97aa8c86406d44be4a0473b0f9 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:40:46 -0700 Subject: [PATCH 0067/1495] New translations en-US.json (Serbian (Cyrillic)) --- src/lang/sr-SP.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/sr-SP.json b/src/lang/sr-SP.json index d319ea0517..99a9dc7a64 100644 --- a/src/lang/sr-SP.json +++ b/src/lang/sr-SP.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Wordcloud", "tab_mmr": "MMR", "tab_rankings": "Rankings", + "tab_drafts": "Draft", "tab_benchmarks": "Benchmarks", "tab_performances": "Performances", "tab_damage": "Damage", From 8a718aa738a727434f0b478b378861791e990573 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:40:49 -0700 Subject: [PATCH 0068/1495] New translations en-US.json (Romanian) --- src/lang/ro-RO.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/ro-RO.json b/src/lang/ro-RO.json index e7e6585a76..b15822f624 100644 --- a/src/lang/ro-RO.json +++ b/src/lang/ro-RO.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Wordcloud", "tab_mmr": "MMR", "tab_rankings": "Rankings", + "tab_drafts": "Draft", "tab_benchmarks": "Benchmarks", "tab_performances": "Performances", "tab_damage": "Damage", From 4daf39150511c5f893c3421b0c66582882bebf9e Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:40:51 -0700 Subject: [PATCH 0069/1495] New translations en-US.json (Portuguese, Brazilian) --- src/lang/pt-BR.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index 64fc83bd9a..61479a20b0 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Nuvem de Palavras", "tab_mmr": "MMR", "tab_rankings": "Classificações", + "tab_drafts": "Draft", "tab_benchmarks": "Referência", "tab_performances": "Desempenhos", "tab_damage": "Dano", From 35ba89f2ed8099e3c1833c77eac575f02f3d93c6 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:40:54 -0700 Subject: [PATCH 0070/1495] New translations en-US.json (Portuguese) --- src/lang/pt-PT.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/pt-PT.json b/src/lang/pt-PT.json index 7e70f18b8b..c423e77e80 100644 --- a/src/lang/pt-PT.json +++ b/src/lang/pt-PT.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Wordcloud", "tab_mmr": "MMR", "tab_rankings": "Rankings", + "tab_drafts": "Draft", "tab_benchmarks": "Benchmarks", "tab_performances": "Performances", "tab_damage": "Damage", From 71d8052e449f7803cbc67a7d92c3e55fd048d127 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:40:56 -0700 Subject: [PATCH 0071/1495] New translations en-US.json (Polish) --- src/lang/pl-PL.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/pl-PL.json b/src/lang/pl-PL.json index 6b883a5561..469687bf54 100644 --- a/src/lang/pl-PL.json +++ b/src/lang/pl-PL.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Chmura słów", "tab_mmr": "MMR", "tab_rankings": "Rankingi", + "tab_drafts": "Draft", "tab_benchmarks": "Benchmark", "tab_performances": "Efektywność", "tab_damage": "Obrażenia", From 7a8a321b32fa3a7243b3f13bc5e037bdba341315 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:40:59 -0700 Subject: [PATCH 0072/1495] New translations en-US.json (Norwegian) --- src/lang/no-NO.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/no-NO.json b/src/lang/no-NO.json index 7692229a61..c280d8ef87 100644 --- a/src/lang/no-NO.json +++ b/src/lang/no-NO.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Wordcloud", "tab_mmr": "MMR", "tab_rankings": "Rankings", + "tab_drafts": "Draft", "tab_benchmarks": "Benchmarks", "tab_performances": "Performances", "tab_damage": "Damage", From 13664a052d2eda7ff4f156ad45dda17f3d974673 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:41:01 -0700 Subject: [PATCH 0073/1495] New translations en-US.json (Japanese) --- src/lang/ja-JP.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/ja-JP.json b/src/lang/ja-JP.json index 4b52b58958..c8bac45733 100644 --- a/src/lang/ja-JP.json +++ b/src/lang/ja-JP.json @@ -596,6 +596,7 @@ "tab_wordcloud": "ワードクラウド", "tab_mmr": "MMR", "tab_rankings": "ランキング", + "tab_drafts": "Draft", "tab_benchmarks": "ベンチマーク", "tab_performances": "パフォーマンス", "tab_damage": "ダメージ", From c81054ec256cb6907177dba22dbb4a09d7ad5b0c Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:41:04 -0700 Subject: [PATCH 0074/1495] New translations en-US.json (Malay) --- src/lang/ms-MY.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/ms-MY.json b/src/lang/ms-MY.json index 2e202e7e45..80ed719b64 100644 --- a/src/lang/ms-MY.json +++ b/src/lang/ms-MY.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Kata-kata", "tab_mmr": "MMR", "tab_rankings": "Kedudukan", + "tab_drafts": "Draft", "tab_benchmarks": "Tanda Aras", "tab_performances": "Prestasi", "tab_damage": "Damage", From d9c972fa815d37d14624eeeab00f9def44030ef0 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:41:06 -0700 Subject: [PATCH 0075/1495] New translations en-US.json (Hungarian) --- src/lang/hu-HU.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/hu-HU.json b/src/lang/hu-HU.json index fcbe6dff48..22e47cb237 100644 --- a/src/lang/hu-HU.json +++ b/src/lang/hu-HU.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Wordcloud", "tab_mmr": "MMR", "tab_rankings": "Rankings", + "tab_drafts": "Draft", "tab_benchmarks": "Benchmarks", "tab_performances": "Performances", "tab_damage": "Damage", From 8beded89e3a45f7613af65ea2aa12bb3292786c0 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:41:09 -0700 Subject: [PATCH 0076/1495] New translations en-US.json (Hebrew) --- src/lang/he-IL.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/he-IL.json b/src/lang/he-IL.json index 09ea59aab0..1e3f3358d9 100644 --- a/src/lang/he-IL.json +++ b/src/lang/he-IL.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Wordcloud", "tab_mmr": "MMR", "tab_rankings": "Rankings", + "tab_drafts": "Draft", "tab_benchmarks": "Benchmarks", "tab_performances": "Performances", "tab_damage": "נזק", From dcc374632a5029fd6fa28f1273750aa9937ca771 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:41:12 -0700 Subject: [PATCH 0077/1495] New translations en-US.json (Greek) --- src/lang/el-GR.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/el-GR.json b/src/lang/el-GR.json index 48f3cfad33..eafe6a915f 100644 --- a/src/lang/el-GR.json +++ b/src/lang/el-GR.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Wordcloud", "tab_mmr": "MMR", "tab_rankings": "Rankings", + "tab_drafts": "Draft", "tab_benchmarks": "Benchmarks", "tab_performances": "Performances", "tab_damage": "Damage", From 7d3789ddaff5ed483e43b53e423c79d8d0c21c07 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:41:14 -0700 Subject: [PATCH 0078/1495] New translations en-US.json (German) --- src/lang/de-DE.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index 77377ba2d3..9c01498f66 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Wordcloud", "tab_mmr": "MMR", "tab_rankings": "Rankings", + "tab_drafts": "Draft", "tab_benchmarks": "Benchmark", "tab_performances": "Leistungen", "tab_damage": "Schaden", From 5ecf6acd0ba3a16d2961c1cfb3e5278d0513651d Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:41:16 -0700 Subject: [PATCH 0079/1495] New translations en-US.json (French) --- src/lang/fr-FR.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/fr-FR.json b/src/lang/fr-FR.json index 78e44c0248..8b2f9d3a3a 100644 --- a/src/lang/fr-FR.json +++ b/src/lang/fr-FR.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Wordcloud", "tab_mmr": "MMR", "tab_rankings": "Classements", + "tab_drafts": "Draft", "tab_benchmarks": "Benchmarks", "tab_performances": "Performances", "tab_damage": "Dégâts", From bed01cdf54958ee838209cfa88fa5a9d68b4093b Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:41:19 -0700 Subject: [PATCH 0080/1495] New translations en-US.json (Finnish) --- src/lang/fi-FI.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/fi-FI.json b/src/lang/fi-FI.json index a96698c68e..0f06fe807d 100644 --- a/src/lang/fi-FI.json +++ b/src/lang/fi-FI.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Wordcloud", "tab_mmr": "MMR", "tab_rankings": "Rankings", + "tab_drafts": "Draft", "tab_benchmarks": "Benchmarks", "tab_performances": "Performances", "tab_damage": "Damage", From 0932234d7e96b075674e5d3ca9b2e20a245f40ae Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:41:21 -0700 Subject: [PATCH 0081/1495] New translations en-US.json (Dutch) --- src/lang/nl-NL.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/nl-NL.json b/src/lang/nl-NL.json index 52fee8acba..406691261e 100644 --- a/src/lang/nl-NL.json +++ b/src/lang/nl-NL.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Wordcloud", "tab_mmr": "MMR", "tab_rankings": "Rankings", + "tab_drafts": "Draft", "tab_benchmarks": "Benchmarks", "tab_performances": "Performances", "tab_damage": "Schade", From c84002aba5de322edf7b4b3460b9ee05f98736e8 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:41:23 -0700 Subject: [PATCH 0082/1495] New translations en-US.json (Danish) --- src/lang/da-DK.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/da-DK.json b/src/lang/da-DK.json index c1300a12df..998e1d6549 100644 --- a/src/lang/da-DK.json +++ b/src/lang/da-DK.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Wordcloud", "tab_mmr": "MMR", "tab_rankings": "Rankings", + "tab_drafts": "Draft", "tab_benchmarks": "Benchmarks", "tab_performances": "Performances", "tab_damage": "Damage", From 8a892796fce15943e4918bbee9141e08d72a3c2e Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:41:27 -0700 Subject: [PATCH 0083/1495] New translations en-US.json (Czech) --- src/lang/cs-CZ.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/cs-CZ.json b/src/lang/cs-CZ.json index ccf94f0938..5f052739dc 100644 --- a/src/lang/cs-CZ.json +++ b/src/lang/cs-CZ.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Wordcloud", "tab_mmr": "MMR", "tab_rankings": "Rankings", + "tab_drafts": "Draft", "tab_benchmarks": "Benchmarks", "tab_performances": "Performances", "tab_damage": "Poškození", From 226f7d288793cdccf5baab5cfc99e881e4a948b9 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:41:29 -0700 Subject: [PATCH 0084/1495] New translations en-US.json (Chinese Traditional) --- src/lang/zh-TW.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/zh-TW.json b/src/lang/zh-TW.json index f378c44b85..a05d737a7a 100644 --- a/src/lang/zh-TW.json +++ b/src/lang/zh-TW.json @@ -596,6 +596,7 @@ "tab_wordcloud": "词云", "tab_mmr": "天梯分数", "tab_rankings": "排名", + "tab_drafts": "Draft", "tab_benchmarks": "评估", "tab_performances": "表现", "tab_damage": "伤害", From 4df397c4991cf86291ffa346f57172e0ebfd432b Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:41:31 -0700 Subject: [PATCH 0085/1495] New translations en-US.json (Chinese Simplified) --- src/lang/zh-CN.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index ffb56ad800..f80c9a6b81 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -596,6 +596,7 @@ "tab_wordcloud": "词云", "tab_mmr": "天梯分数", "tab_rankings": "排名", + "tab_drafts": "Draft", "tab_benchmarks": "评估", "tab_performances": "表现", "tab_damage": "伤害", From 8d2a05a72fb79b3f3bcf0598e47f799ea126b510 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:41:33 -0700 Subject: [PATCH 0086/1495] New translations en-US.json (Bulgarian) --- src/lang/bg-BG.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/bg-BG.json b/src/lang/bg-BG.json index 4169a9056b..43012511a9 100644 --- a/src/lang/bg-BG.json +++ b/src/lang/bg-BG.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Wordcloud", "tab_mmr": "MMR", "tab_rankings": "Rankings", + "tab_drafts": "Draft", "tab_benchmarks": "Benchmarks", "tab_performances": "Performances", "tab_damage": "Щети", From ea1ae8128d568d7fec22b3a18935f69a145ce81f Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:41:36 -0700 Subject: [PATCH 0087/1495] New translations en-US.json (Italian) --- src/lang/it-IT.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/it-IT.json b/src/lang/it-IT.json index ae003a0b6e..d93e46d240 100644 --- a/src/lang/it-IT.json +++ b/src/lang/it-IT.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Wordcloud", "tab_mmr": "MMR", "tab_rankings": "Classifiche", + "tab_drafts": "Draft", "tab_benchmarks": "Benchmarks", "tab_performances": "Prestazioni", "tab_damage": "Danno", From dbfe70144040db7d4fcc6031781f5ea5a24a2171 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 18 Mar 2018 20:41:39 -0700 Subject: [PATCH 0088/1495] New translations en-US.json (Vietnamese) --- src/lang/vi-VN.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/vi-VN.json b/src/lang/vi-VN.json index e5a90c6579..6333ac8c70 100644 --- a/src/lang/vi-VN.json +++ b/src/lang/vi-VN.json @@ -596,6 +596,7 @@ "tab_wordcloud": "Biểu đồ từ ngữ", "tab_mmr": "MMR", "tab_rankings": "Bảng xếp hạng", + "tab_drafts": "Draft", "tab_benchmarks": "So sánh", "tab_performances": "Hiệu suất", "tab_damage": "Sát thương", From 382052099a7d2e8454420dd6912df7c097b600e2 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 19 Mar 2018 08:20:27 -0700 Subject: [PATCH 0089/1495] New translations en-US.json (Turkish) --- src/lang/tr-TR.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json index a97b198099..9826545903 100644 --- a/src/lang/tr-TR.json +++ b/src/lang/tr-TR.json @@ -31,7 +31,7 @@ "app_blog": "Blog", "app_translate": "Çevir", "app_donate": "Donate", - "app_gravitech": "A Gravitech LLC Site", + "app_gravitech": "Bir Gravitech LLC Kuruluşudur", "app_powered_by": "Destekleyen", "app_donation_goal": "Aylık Bağış Hedefi", "app_sponsorship": "Sizin sponsorluğunuz, bu servisi herkez için bedava olarak kalmasını sağlayacak.", @@ -188,7 +188,7 @@ "filter_last_3_months": "Son 3 ay", "filter_last_6_months": "Son 6 ay", "filter_error": "Lütfen listeden bir öğe seçin", - "filter_party_size": "Party Size", + "filter_party_size": "Party Genişliği", "game_mode_0": "Bilinmeyen", "game_mode_1": "Serbest Seçim", "game_mode_2": "Kaptan Modu", @@ -222,7 +222,7 @@ "general_matches": "Maçlar", "general_league": "Lig", "general_randomed": "Rastgele", - "general_repicked": "Repicked", + "general_repicked": "Yeniden Seçim", "general_predicted_victory": "Tahmin edilen zafer", "gold_reasons_0": "Diğer", "gold_reasons_1": "Ölüm", From bae31401ebf60c3dbc0375f4b6cd54c55e5bdb62 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 19 Mar 2018 08:30:20 -0700 Subject: [PATCH 0090/1495] New translations en-US.json (Turkish) --- src/lang/tr-TR.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json index 9826545903..67c8611bfe 100644 --- a/src/lang/tr-TR.json +++ b/src/lang/tr-TR.json @@ -360,8 +360,8 @@ "heading_turn_rate": "Dönme hızı", "heading_legs": "Raund sayısı", "heading_cm_enabled": "CM etkinleşti", - "heading_current_players": "Current Players", - "heading_former_players": "Former Players", + "heading_current_players": "Şu Anki Oyuncular", + "heading_former_players": "Eski oyuncular", "subheading_avg_and_max": "son %d maçta", "subheading_records": "Dereceli maçlarda Kayıtlar aylık olarak sıfırlanır.", "subheading_team_elo_rankings": "k=32, içerde=1000", @@ -458,7 +458,7 @@ "npc_dota_eidolon": "Eidolon", "npc_dota_greater_eidolon": "Greater Eidolon", "npc_dota_dire_eidolon": "Dire Eidolon", - "npc_dota_invoker_forged_spirit": "Forged Spirit", + "npc_dota_invoker_forged_spirit": "Sahte Ruh", "npc_dota_furion_treant_large": "İri Treant", "npc_dota_beastmaster_hawk_#": "Şahin", "npc_dota_lycan_wolf#": "Lycan kurdu", @@ -482,14 +482,14 @@ "npc_dota_shadow_shaman_ward_#": "Serpent Ward", "npc_dota_pugna_nether_ward_#": "Nether Ward", "npc_dota_venomancer_plague_ward_#": "Plague Ward", - "npc_dota_rattletrap_cog": "Power Cog", + "npc_dota_rattletrap_cog": "Güç Çarkı", "npc_dota_templar_assassin_psionic_trap": "Psiyonik Tuzak", "npc_dota_techies_remote_mine": "Mayın", "npc_dota_techies_stasis_trap": "Statis Tuzağı", "npc_dota_phoenix_sun": "Süpernova", "npc_dota_unit_tombstone#": "Mezar Taşı", "npc_dota_treant_eyes": "Ormandaki Göz", - "npc_dota_gyrocopter_homing_missile": "Homing Missile", + "npc_dota_gyrocopter_homing_missile": "Güdümlü Füze", "npc_dota_weaver_swarm": "Arı", "objective_tower1_top": "T1", "objective_tower1_mid": "M1", @@ -543,9 +543,9 @@ "story_list_2": "{1} ve {2}", "story_list_3": "{1},{2}, ve {3}", "story_list_n": "{i}, {rest}", - "story_firstblood": "first blood was drawn when {killer} killed {victim} at {time}", + "story_firstblood": "{killer} {time}'da {victim} öldürerek ilk kanı aldı", "story_chatmessage": "{message}, {player} {said_verb}", - "story_teamfight": "{winning_team} won a teamfight by trading {win_dead} for {lose_dead}, resulting in a net worth increase of {net_change}", + "story_teamfight": "{winning_team} {win_dead} karşın {lose_dead} ile takım savaşını kazandı, net kazanç bu takım savaşında {net_change} arttı", "story_teamfight_none_dead": "{winning_team} won a teamfight by killing {lose_dead} without losing any heroes, resulting in a net worth increase of {net_change}", "story_teamfight_none_dead_loss": "{winning_team} somehow won a teamfight without killing anyone, and losing {win_dead}, resulting in a net worth increase of {net_change}", "story_lane_intro": "Oyunun 10 dakika içinde, kulvarlar aşağıdaki gibi gitmişti:", @@ -555,12 +555,12 @@ "story_lane_free": "{players} had a free {lane} lane", "story_lane_empty": "{lane} Kulvarda kimse yoktu", "story_lane_jungle": "{players} farmed the jungle", - "story_lane_roam": "{players} roamed", - "story_roshan": "{team} killed Roshan", - "story_aegis": "{player} {action} the aegis", + "story_lane_roam": "{players} gezginci", + "story_roshan": "Roshan {team} tarafından yok edildi", + "story_aegis": "{player} {action} Ageis", "story_gameover": "The match ended in a {winning_team} victory at {duration} with a score of {radiant_score} to {dire_score}", "story_during_teamfight": "during the fight, {events}", - "story_after_teamfight": "after the fight, {events}", + "story_after_teamfight": "savaştan sonra {events}", "story_expensive_item": "at {time}, {player} purchased {item}, which was the first item in the game with a price greater than {price_limit}", "story_building_destroy": "{building} was destroyed", "story_building_destroy_player": "{player} destroyed {building}", From 28b056909b6e4a2a5b7f44c9026d1826e6b5def4 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 20 Mar 2018 03:10:16 -0700 Subject: [PATCH 0091/1495] New translations en-US.json (Russian) --- src/lang/ru-RU.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index 6621aea8b2..db61e87c2c 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -596,7 +596,7 @@ "tab_wordcloud": "Облако слов", "tab_mmr": "Рейтинг", "tab_rankings": "Ранги", - "tab_drafts": "Draft", + "tab_drafts": "Драфт", "tab_benchmarks": "Бенчмарки", "tab_performances": "Показатели", "tab_damage": "Урон", From aae097e1dc528f888de6e47e2bb4ee3125b828a3 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 22 Mar 2018 07:20:27 -0700 Subject: [PATCH 0092/1495] New translations en-US.json (Chinese Simplified) --- src/lang/zh-CN.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index f80c9a6b81..f1a5bb9470 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -362,7 +362,7 @@ "heading_cm_enabled": "是否启用队长模式", "heading_current_players": "当前玩家", "heading_former_players": "Former Players", - "subheading_avg_and_max": "在最近 %d 比赛里", + "subheading_avg_and_max": "最近的 %d 场比赛中", "subheading_records": "在天梯比赛中。每周重置。", "subheading_team_elo_rankings": "k = 32, init = 1000", "hero_pro_tab": "职业比赛", From a1d1839f4159d89d59fb8a2da6097cb9546d7141 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Sat, 24 Mar 2018 19:25:10 +0100 Subject: [PATCH 0093/1495] automate request --- src/components/Request/Request.jsx | 8 +++++++- src/reducers/request.js | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/components/Request/Request.jsx b/src/components/Request/Request.jsx index 8f16e01227..abf9580663 100644 --- a/src/components/Request/Request.jsx +++ b/src/components/Request/Request.jsx @@ -19,6 +19,12 @@ class Request extends React.Component { this.setState({ matchId: window.location.hash.slice(1) }); } + componentDidMount() { + if (this.state.matchId) { + this.handleSubmit() + } + } + handleSubmit() { const { dispatchPostRequest } = this.props; dispatchPostRequest(this.state.matchId); @@ -36,7 +42,7 @@ class Request extends React.Component { this.setState({ matchId: e.target.value })} /> diff --git a/src/reducers/request.js b/src/reducers/request.js index b136d8db48..6b312421b7 100644 --- a/src/reducers/request.js +++ b/src/reducers/request.js @@ -16,7 +16,7 @@ export default (state = initialState, action) => { case requestActions.ERROR: return { ...initialState, - error: action.error, + error: action.error || true, }; case requestActions.OK: return initialState; From 68263c11053bd856d803d5a32c920f2561809dcf Mon Sep 17 00:00:00 2001 From: Argn0 Date: Sat, 24 Mar 2018 19:30:45 +0100 Subject: [PATCH 0094/1495] lint --- src/components/Request/Request.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Request/Request.jsx b/src/components/Request/Request.jsx index abf9580663..8967cd76fb 100644 --- a/src/components/Request/Request.jsx +++ b/src/components/Request/Request.jsx @@ -21,7 +21,7 @@ class Request extends React.Component { componentDidMount() { if (this.state.matchId) { - this.handleSubmit() + this.handleSubmit(); } } From 26d20dd10f40524f7b9789bf2a9356c7e0fc5248 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 24 Mar 2018 14:20:11 -0700 Subject: [PATCH 0095/1495] New translations en-US.json (Chinese Simplified) --- src/lang/zh-CN.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index f1a5bb9470..f4d3ed7f40 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -361,7 +361,7 @@ "heading_legs": "腿数", "heading_cm_enabled": "是否启用队长模式", "heading_current_players": "当前玩家", - "heading_former_players": "Former Players", + "heading_former_players": "前队员", "subheading_avg_and_max": "最近的 %d 场比赛中", "subheading_records": "在天梯比赛中。每周重置。", "subheading_team_elo_rankings": "k = 32, init = 1000", @@ -451,7 +451,7 @@ "matches_highest_mmr": "高分公开", "matches_lowest_mmr": "低天梯分", "meta_title": "玩法", - "meta_description": "Run advanced queries on data from sampled public matches in previous 24h", + "meta_description": "基于24小时内的样本公开比赛数据进行高级查询", "mmr_not_up_to_date": "为什么 MMR 没有更新?", "npc_dota_beastmaster_boar_#": "豪猪", "npc_dota_lesser_eidolon": "次级精神体", @@ -601,7 +601,7 @@ "tab_performances": "表现", "tab_damage": "伤害", "tab_purchases": "购买物品", - "tab_farm": "发育", + "tab_farm": "打钱", "tab_combat": "战斗", "tab_graphs": "曲线图", "tab_casts": "主动物品/技能", @@ -716,7 +716,7 @@ "th_DOTA_UNIT_ORDER_ATTACK_MOVE": "攻击(位置)", "th_DOTA_UNIT_ORDER_CAST_POSITION": "释放(位置)", "th_DOTA_UNIT_ORDER_CAST_TARGET": "释放(目标)", - "th_DOTA_UNIT_ORDER_CAST_NO_TARGET": "释放(无)", + "th_DOTA_UNIT_ORDER_CAST_NO_TARGET": "施放(无目标)", "th_DOTA_UNIT_ORDER_HOLD_POSITION": "固守原位", "th_DOTA_UNIT_ORDER_GLYPH": "标记", "th_DOTA_UNIT_ORDER_RADAR": "扫描", From 704a724056c875a0bb2be21db5f28c96c6226d68 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 24 Mar 2018 14:30:09 -0700 Subject: [PATCH 0096/1495] New translations en-US.json (Chinese Simplified) --- src/lang/zh-CN.json | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index f4d3ed7f40..0218045549 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -193,7 +193,7 @@ "game_mode_1": "全英雄选择", "game_mode_2": "队长模式", "game_mode_3": "随机征召", - "game_mode_4": "单一征招", + "game_mode_4": "单一征召", "game_mode_5": "全英雄随机", "game_mode_6": "开局", "game_mode_7": "夜魇暗潮", @@ -547,7 +547,7 @@ "story_chatmessage": "“{message}”,{player}{said_verb}", "story_teamfight": "{winning_team} 获得了团战胜利,以 {win_dead} 的牺牲为代价击杀了 {lose_dead} ,获得了 {net_change} 的经济优势", "story_teamfight_none_dead": "{winning_team} 以 0 换 {lose_dead} 的战绩获得了团战胜利,带来了 {net_change} 的经济收入", - "story_teamfight_none_dead_loss": "{winning_team} somehow won a teamfight without killing anyone, and losing {win_dead}, resulting in a net worth increase of {net_change}", + "story_teamfight_none_dead_loss": "{winning_team} 奇怪地获得了团战胜利,获得了{net_change} 的经济优势,尽管他们没有击杀任何人并且牺牲了{win_dead}", "story_lane_intro": "比赛开始后十分钟,各分路的情况如下:", "story_lane_radiant_win": "{radiant_players} 在 {lane}路 压制了 {dire_players}", "story_lane_radiant_lose": "{radiant_players} 在与 {dire_players} 的 {lane} 路对线中处于劣势", @@ -596,7 +596,7 @@ "tab_wordcloud": "词云", "tab_mmr": "天梯分数", "tab_rankings": "排名", - "tab_drafts": "Draft", + "tab_drafts": "阵容", "tab_benchmarks": "评估", "tab_performances": "表现", "tab_damage": "伤害", @@ -723,7 +723,7 @@ "th_ability_builds": "加点", "th_purchase_shorthand": "快捷购买", "th_use_shorthand": "使用", - "th_duration_shorthand": "DUR", + "th_duration_shorthand": "时长", "th_country": "国家/地区", "th_count": "总计", "th_sum": "总和", @@ -749,7 +749,7 @@ "th_scans_used": "扫描使用", "th_glyphs_used": "符文使用", "th_legs": "腿部", - "th_fantasy_points": "Fantasy Pts", + "th_fantasy_points": "梦幻点数", "th_rating": "等级分", "th_teamfight_participation": "参战", "th_firstblood_claimed": "第一滴血", @@ -758,7 +758,7 @@ "th_league": "联赛", "th_attack_type": "攻击类型", "th_primary_attr": "主属性", - "th_opposing_team": "Opposing Team", + "th_opposing_team": "敌方", "ward_log_type": "类型:", "ward_log_owner": "拥有者:", "ward_log_entered_at": "放置", @@ -797,7 +797,7 @@ "title_search": "搜索", "title_status": "状态", "title_explorer": "数据探索器", - "title_meta": "Meta", + "title_meta": "玩法", "title_records": "记录", "tooltip_mmr": "玩家单排天梯积分", "tooltip_abilitydraft": "技能征召", @@ -893,7 +893,7 @@ "tooltip_multikill": "多杀记录", "tooltip_killstreak": "连杀记录", "tooltip_casts": "该物品/技能主动释放的次数", - "tooltip_target_abilities": "How many times each hero was targeted by this hero's abilities", + "tooltip_target_abilities": "被该英雄技能选定次数", "tooltip_hits": "该物品/技能主动释放对英雄产生伤害的次数", "tooltip_damage": "该物品/技能主动释放对英雄造成的伤害", "tooltip_autoattack_other": "自动攻击/其它", @@ -914,7 +914,7 @@ "xp_reasons_2": "小兵", "xp_reasons_3": "肉山", "rankings_description": "", - "rankings_none": "This player is not ranked on any heroes.", + "rankings_none": "该玩家在任何英雄上都没有排名。", "region_0": "自动", "region_1": "美国西部", "region_2": "美国东部", @@ -967,14 +967,14 @@ "chatwheel_10": "中路英雄失踪!", "chatwheel_11": "下路英雄失踪!", "chatwheel_12": "出发!", - "chatwheel_13": "Initiate!", + "chatwheel_13": "上啊!", "chatwheel_14": "跟上", "chatwheel_15": "抱团", "chatwheel_16": "散开", "chatwheel_17": "分开发育", "chatwheel_18": "进攻!", "chatwheel_19": "回来", - "chatwheel_20": "Dive!", + "chatwheel_20": "越塔!", "chatwheel_21": "正在前进", "chatwheel_22": "做好准备", "chatwheel_23": "上去卖", @@ -1058,7 +1058,7 @@ "chatwheel_101": "Жил до конца, умер как герой", "chatwheel_102": "They're all dead!", "chatwheel_103": "天火!", - "chatwheel_104": "Ай-ай-ай-ай-ай, что сейчас произошло!", + "chatwheel_104": "(俄语)啊呀呀呀呀,这里发生了什么!", "chatwheel_105": "Brutal. Savage. Rekt.", "chatwheel_106": "加油!", "chatwheel_107": "Это ГГ", @@ -1109,10 +1109,10 @@ "top_rax": "上路兵营", "bot_rax": "下路兵营", "mid_rax": "中路兵营", - "tier1": "Tier 1", - "tier2": "Tier 2", - "tier3": "Tier 3", - "tier4": "Tier 4", + "tier1": "一塔", + "tier2": "二塔", + "tier3": "三塔", + "tier4": "四塔", "show_consumables_items": "显示消耗物品", "activated": "Activated", "rune": "神符", From 0a7776502102cdd113df9c1b142412bb52e5a3c4 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Sun, 25 Mar 2018 04:15:16 +0200 Subject: [PATCH 0097/1495] hide draft tab --- src/components/Match/matchPages.jsx | 11 ++++++----- src/components/TabBar/TabBar.jsx | 7 ++++++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/components/Match/matchPages.jsx b/src/components/Match/matchPages.jsx index eb07fadeca..96f177c6e3 100644 --- a/src/components/Match/matchPages.jsx +++ b/src/components/Match/matchPages.jsx @@ -53,7 +53,7 @@ const matchPages = [Overview, { name: strings.tab_drafts, key: 'draft', parsed: true, - disabled: match => match.game_mode !== 2, + hidden: match => match.game_mode !== 2, content: match => (
matchPages.map(page => ({ parsed: page.parsed, content: page.content, route: `/matches/${matchId}/${page.key.toLowerCase()}`, - disabled: (m) => { - if (page.disabled) { - return page.disabled(m); + disabled: match && !match.version && page.parsed, + hidden: (m) => { + if (page.hidden) { + return page.hidden(m); } - return match && !match.version && page.parsed; + return false; }, })); diff --git a/src/components/TabBar/TabBar.jsx b/src/components/TabBar/TabBar.jsx index 19a49eb04d..06ff20b535 100644 --- a/src/components/TabBar/TabBar.jsx +++ b/src/components/TabBar/TabBar.jsx @@ -34,6 +34,10 @@ const StyledSection = styled.section` color: ${constants.colorMuted}; } + &[hidden] { + display: none; + } + @media only screen and (max-width: 768px) { padding-left: 10px; padding-right: 10px; @@ -55,7 +59,8 @@ const TabBar = ({ tabs, info, match }) => ( key={`${tab.name}_${tab.route}_${tab.key}`} className={tab.key === info ? 'chosen' : ''} to={tab.route + window.location.search} - disabled={tab.disabled && tab.disabled(match)} + disabled={tab.disabled} + hidden={tab.hidden && tab.hidden(match)} > {tab.name} From 47b9bb43bc3b8433d8368f1b36cd2ebd8b1dd654 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Sun, 25 Mar 2018 05:48:14 +0200 Subject: [PATCH 0098/1495] simplified function --- src/components/Match/matchPages.jsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/components/Match/matchPages.jsx b/src/components/Match/matchPages.jsx index 96f177c6e3..6b4e183f44 100644 --- a/src/components/Match/matchPages.jsx +++ b/src/components/Match/matchPages.jsx @@ -340,10 +340,5 @@ export default (matchId, match) => matchPages.map(page => ({ content: page.content, route: `/matches/${matchId}/${page.key.toLowerCase()}`, disabled: match && !match.version && page.parsed, - hidden: (m) => { - if (page.hidden) { - return page.hidden(m); - } - return false; - }, + hidden: m => page.hidden && page.hidden(m), })); From 0305d57a92d8843f0ebb71f1fd27fdda6ef32f16 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 25 Mar 2018 06:20:10 -0700 Subject: [PATCH 0099/1495] New translations en-US.json (Hungarian) --- src/lang/hu-HU.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/hu-HU.json b/src/lang/hu-HU.json index 22e47cb237..dd2d04e534 100644 --- a/src/lang/hu-HU.json +++ b/src/lang/hu-HU.json @@ -14,7 +14,7 @@ "analysis_farm_drought": "Lowest GPM in 5 minute interval", "analysis_skillshot": "Skillshots landed", "analysis_late_courier": "Courier upgrade delay", - "analysis_wards": "Wards placed", + "analysis_wards": "Elhelyezett wardok", "analysis_roshan": "Roshans killed", "analysis_rune_control": "Runes obtained", "analysis_unused_item": "Unused active items", From 6d6583151621f505b97442f1f9400dab5252c749 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Mon, 26 Mar 2018 10:18:39 +0200 Subject: [PATCH 0100/1495] unique key for rows --- src/components/Match/TeamTable.jsx | 6 ++++-- src/components/Match/TeamfightMap/index.jsx | 1 + src/components/Table/Table.jsx | 5 ++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/components/Match/TeamTable.jsx b/src/components/Match/TeamTable.jsx index 050bd12388..af5940c56d 100644 --- a/src/components/Match/TeamTable.jsx +++ b/src/components/Match/TeamTable.jsx @@ -23,19 +23,20 @@ const TeamTable = ({ summable = false, hoverRowColumn = false, loggedInId, + uniqueKey = false, }) => (
} /> - +
{picksBans && pb.team === 0)} /> /* team 0 - radiant */} } /> -
+
{picksBans && pb.team === 1)} /> /* team 1 - dire */} ); @@ -50,6 +51,7 @@ TeamTable.propTypes = { summable: PropTypes.bool, hoverRowColumn: PropTypes.bool, loggedInId: PropTypes.number, + uniqueKey: PropTypes.bool, }; const mapStateToProps = state => ({ diff --git a/src/components/Match/TeamfightMap/index.jsx b/src/components/Match/TeamfightMap/index.jsx index 50f712e4bf..80c0c7e985 100644 --- a/src/components/Match/TeamfightMap/index.jsx +++ b/src/components/Match/TeamfightMap/index.jsx @@ -507,6 +507,7 @@ class TeamfightMap extends Component { columns={teamfightColumns} radiantTeam={this.props.match.radiant_team} direTeam={this.props.match.dire_team} + uniqueKey /> diff --git a/src/components/Table/Table.jsx b/src/components/Table/Table.jsx index 834c7ce3a7..576c531d14 100644 --- a/src/components/Table/Table.jsx +++ b/src/components/Table/Table.jsx @@ -10,6 +10,7 @@ import { import { TablePercent } from 'components/Visualizations'; import Pagination from 'components/Table/PaginatedTable/Pagination'; import { abbreviateNumber, SORT_ENUM, defaultSort } from 'utility'; +import uuid from 'uuid'; import TableHeader from './TableHeader'; import Spinner from '../Spinner'; import Error from '../Error'; @@ -134,6 +135,7 @@ class Table extends React.Component { pageLength = 20, hoverRowColumn, highlightFn, + uniqueKey = false, } = this.props; const { sortState, sortField, sortFn, currentPage, @@ -176,7 +178,7 @@ class Table extends React.Component { {data.map((row, index) => ( - + {columns.map((column, colIndex) => { const { field, color, center, displayFn, relativeBars, percentBars, @@ -301,6 +303,7 @@ Table.propTypes = { pageLength: number, hoverRowColumn: bool, highlightFn: func, + uniqueKey: bool, }; export default Table; From dee335e5fd26905a572105a6e4da7ec6d1a56f50 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Mon, 26 Mar 2018 10:20:13 +0200 Subject: [PATCH 0101/1495] revert accidental change --- src/components/Match/TeamTable.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Match/TeamTable.jsx b/src/components/Match/TeamTable.jsx index af5940c56d..1387d8b622 100644 --- a/src/components/Match/TeamTable.jsx +++ b/src/components/Match/TeamTable.jsx @@ -30,13 +30,13 @@ const TeamTable = ({ title={`${getTeamName(radiantTeam, true)} - ${heading}`} icon={} /> -
+
{picksBans && pb.team === 0)} /> /* team 0 - radiant */} } /> -
+
{picksBans && pb.team === 1)} /> /* team 1 - dire */} ); From 0a8dda490de78dfe64f57562871a5b5d3d3a1af0 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Mon, 26 Mar 2018 16:13:15 +0000 Subject: [PATCH 0102/1495] fixes #1624 --- package-lock.json | 22 +++++++++++----------- package.json | 2 +- src/utility/index.jsx | 8 +++++--- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9133985596..96341f2c7b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3477,9 +3477,9 @@ "integrity": "sha512-Eykn8QhYQFd481Px4obDWxzbIskro9ihUgUmq+NB05Z3av8koVNmwMvJ8VP31y3KS1q5C7BZWdug97NXdUpXnA==" }, "dotaconstants": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/dotaconstants/-/dotaconstants-5.25.0.tgz", - "integrity": "sha512-4fCNxnQ9IPyGzqaukTKhF0eFi5D6d43P0D0WWxvnjiLRHU9mv3850Do9bLJv2hTdRvaW3NLxq8rvTLvYr8zl5Q==" + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/dotaconstants/-/dotaconstants-5.26.0.tgz", + "integrity": "sha512-ZF4aVPeU7eUhquR0cdSVOiPyz5Gv9KHtT9BkT+OKNotfCen7Jc2uh8TAwrOUo4Oe5LJQ58gpRzmHcXHtlf2eIg==" }, "dotenv": { "version": "4.0.0", @@ -10621,14 +10621,6 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - }, "string-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", @@ -10683,6 +10675,14 @@ "function-bind": "1.1.1" } }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + }, "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", diff --git a/package.json b/package.json index 93ed6508bf..cf0c9e962f 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "abcolor": "^0.5.5", "core-js": "^2.5.2", "dota2-emoticons": "^1.0.1", - "dotaconstants": "^5.25.0", + "dotaconstants": "^5.26.0", "fuzzy": "^0.1.3", "heatmap.js": "^2.0.5", "history": "^4.7.2", diff --git a/src/utility/index.jsx b/src/utility/index.jsx index 1d03c86f9b..132969a43e 100644 --- a/src/utility/index.jsx +++ b/src/utility/index.jsx @@ -263,12 +263,14 @@ const getTitle = (row, col, heroName) => { export const transformations = { hero_id: (row, col, field, showPvgnaGuide = false, imageSizeSuffix = IMAGESIZE_ENUM.SMALL) => { const heroName = heroes[row[col.field]] ? heroes[row[col.field]].localized_name : strings.general_no_hero; - const imageUrl = heroes[row[col.field]] && process.env.REACT_APP_API_HOST + heroes[row[col.field]].img; // "[api url]/abaddon_full.png?" - const imageUrlNoSuffix = imageUrl.slice(0, -('full.png?'.length)); // "[api url]/abaddon" + let imageUrl = heroes[row[col.field]] && process.env.REACT_APP_API_HOST + heroes[row[col.field]].img; // "[api url]/abaddon_full.png?" + if (imageUrl) { + imageUrl = imageUrl.slice(0, -('full.png?'.length)); // "[api url]/abaddon" + } return ( Date: Mon, 26 Mar 2018 20:10:36 +0200 Subject: [PATCH 0103/1495] uniquekey func --- src/components/Match/TeamTable.jsx | 4 ++-- src/components/Match/TeamfightMap/index.jsx | 1 - src/components/Table/Table.jsx | 7 +++---- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/components/Match/TeamTable.jsx b/src/components/Match/TeamTable.jsx index 1387d8b622..d39289f607 100644 --- a/src/components/Match/TeamTable.jsx +++ b/src/components/Match/TeamTable.jsx @@ -7,6 +7,8 @@ import { connect } from 'react-redux'; import Table from 'components/Table'; import PicksBans from './Overview/PicksBans'; // Displayed only on `Overview` page +const uniqueKey = row => row && row.player_slot + 1; + const getHighlightFn = loggedInId => row => loggedInId && row.account_id === loggedInId; const filterMatchPlayers = (players, team = '') => @@ -23,7 +25,6 @@ const TeamTable = ({ summable = false, hoverRowColumn = false, loggedInId, - uniqueKey = false, }) => (
({ diff --git a/src/components/Match/TeamfightMap/index.jsx b/src/components/Match/TeamfightMap/index.jsx index 80c0c7e985..50f712e4bf 100644 --- a/src/components/Match/TeamfightMap/index.jsx +++ b/src/components/Match/TeamfightMap/index.jsx @@ -507,7 +507,6 @@ class TeamfightMap extends Component { columns={teamfightColumns} radiantTeam={this.props.match.radiant_team} direTeam={this.props.match.dire_team} - uniqueKey />
diff --git a/src/components/Table/Table.jsx b/src/components/Table/Table.jsx index 576c531d14..ea2693382e 100644 --- a/src/components/Table/Table.jsx +++ b/src/components/Table/Table.jsx @@ -10,7 +10,6 @@ import { import { TablePercent } from 'components/Visualizations'; import Pagination from 'components/Table/PaginatedTable/Pagination'; import { abbreviateNumber, SORT_ENUM, defaultSort } from 'utility'; -import uuid from 'uuid'; import TableHeader from './TableHeader'; import Spinner from '../Spinner'; import Error from '../Error'; @@ -135,7 +134,7 @@ class Table extends React.Component { pageLength = 20, hoverRowColumn, highlightFn, - uniqueKey = false, + uniqueKey, } = this.props; const { sortState, sortField, sortFn, currentPage, @@ -178,7 +177,7 @@ class Table extends React.Component { {data.map((row, index) => ( - + {columns.map((column, colIndex) => { const { field, color, center, displayFn, relativeBars, percentBars, @@ -303,7 +302,7 @@ Table.propTypes = { pageLength: number, hoverRowColumn: bool, highlightFn: func, - uniqueKey: bool, + uniqueKey: func, }; export default Table; From 77bd030815d8909453719f9f4a53705385e10291 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 27 Mar 2018 05:32:10 +0200 Subject: [PATCH 0104/1495] renamed to keyFn --- src/components/Match/TeamTable.jsx | 6 +++--- src/components/Table/Table.jsx | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/Match/TeamTable.jsx b/src/components/Match/TeamTable.jsx index d39289f607..001133581b 100644 --- a/src/components/Match/TeamTable.jsx +++ b/src/components/Match/TeamTable.jsx @@ -7,7 +7,7 @@ import { connect } from 'react-redux'; import Table from 'components/Table'; import PicksBans from './Overview/PicksBans'; // Displayed only on `Overview` page -const uniqueKey = row => row && row.player_slot + 1; +const keyFn = row => row && row.player_slot + 1; const getHighlightFn = loggedInId => row => loggedInId && row.account_id === loggedInId; @@ -31,13 +31,13 @@ const TeamTable = ({ title={`${getTeamName(radiantTeam, true)} - ${heading}`} icon={} /> -
+
{picksBans && pb.team === 0)} /> /* team 0 - radiant */} } /> -
+
{picksBans && pb.team === 1)} /> /* team 1 - dire */} ); diff --git a/src/components/Table/Table.jsx b/src/components/Table/Table.jsx index ea2693382e..27123ef361 100644 --- a/src/components/Table/Table.jsx +++ b/src/components/Table/Table.jsx @@ -134,7 +134,7 @@ class Table extends React.Component { pageLength = 20, hoverRowColumn, highlightFn, - uniqueKey, + keyFn, } = this.props; const { sortState, sortField, sortFn, currentPage, @@ -177,7 +177,7 @@ class Table extends React.Component { {data.map((row, index) => ( - + {columns.map((column, colIndex) => { const { field, color, center, displayFn, relativeBars, percentBars, @@ -302,7 +302,7 @@ Table.propTypes = { pageLength: number, hoverRowColumn: bool, highlightFn: func, - uniqueKey: func, + keyFn: func, }; export default Table; From 9a4a76545d7083e39e69f61d90e91c9505b94a63 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Tue, 27 Mar 2018 03:46:26 +0000 Subject: [PATCH 0105/1495] update react-snap --- package-lock.json | 1818 ++++++++++++++++++++++++++++++++++++++++++--- package.json | 2 +- 2 files changed, 1719 insertions(+), 101 deletions(-) diff --git a/package-lock.json b/package-lock.json index 96341f2c7b..8387678fd7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -248,6 +248,12 @@ "integrity": "sha512-+kbOcYW1/noncDwRryRoB9tH87IYcMfdBGvw98iocK39LtTA2DFL7agmk4UHW/GxjzVfwrxfjlLrqrgA7MCtmg==", "dev": true }, + "@types/node": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.0.tgz", + "integrity": "sha512-h3YZbOq2+ZoDFI1z8Zx0Ck/xRWkOESVaLdgLdd/c25mMQ1Y2CAkILu9ny5A15S5f32gGcQdaUIZ2jzYr8D7IFg==", + "dev": true + }, "@types/react": { "version": "16.0.20", "resolved": "https://registry.npmjs.org/@types/react/-/react-16.0.20.tgz", @@ -329,9 +335,9 @@ "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==" }, "agent-base": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.1.2.tgz", - "integrity": "sha512-VE6QoEdaugY86BohRtfGmTDabxdU5sCKOkbcPA6PXKJsRzEi/7A3RCTxJal1ft/4qSfPht5/iQLhMh/wzSkkNw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.0.tgz", + "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", "dev": true, "requires": { "es6-promisify": "5.0.0" @@ -2386,6 +2392,54 @@ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz", "integrity": "sha1-lCg191Dk7GGjCOYMLvjMEBEgLvw=" }, + "cheerio": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", + "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", + "dev": true, + "requires": { + "css-select": "1.2.0", + "dom-serializer": "0.1.0", + "entities": "1.1.1", + "htmlparser2": "3.9.2", + "lodash": "4.17.4", + "parse5": "3.0.3" + }, + "dependencies": { + "domhandler": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", + "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.4.1", + "domutils": "1.5.1", + "entities": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "9.6.0" + } + } + } + }, "chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", @@ -2393,6 +2447,7 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", + "fsevents": "1.1.3", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -2963,12 +3018,12 @@ } }, "css-tree": { - "version": "1.0.0-alpha25", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha25.tgz", - "integrity": "sha512-XC6xLW/JqIGirnZuUWHXCHRaAjje2b3OIB0Vj5RIJo6mIi/AdJo30quQl5LxUl0gkXDIrTrFGbMlcZjyFplz1A==", + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", + "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", "dev": true, "requires": { - "mdn-data": "1.0.0", + "mdn-data": "1.1.0", "source-map": "0.5.7" }, "dependencies": { @@ -4575,21 +4630,809 @@ "mime-types": "2.1.17" } }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "optional": true, + "requires": { + "nan": "2.10.0", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + } + } + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -4937,9 +5780,9 @@ "integrity": "sha1-Rm07hlE/XUkRKknSVwCrJzAUkVM=" }, "highland": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/highland/-/highland-2.11.1.tgz", - "integrity": "sha1-ObTZKZtuB9o9FeeveypvEnUirK8=", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/highland/-/highland-2.13.0.tgz", + "integrity": "sha512-zGZBcgAHPY2Zf9VG9S5IrlcC7CH9ELioXVtp9T5bU2a4fP2zIsA+Y8pV/n/h2lMwbWMHTX0I0xN0ODJ3Pd3aBQ==", "dev": true, "requires": { "util-deprecate": "1.0.2" @@ -5197,24 +6040,13 @@ "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=" }, "https-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.1.0.tgz", - "integrity": "sha512-/DTVSUCbRc6AiyOV4DBRvPDpKKCJh4qQJNaCgypX0T41quD9hp/PB5iUyx/60XobuMPQa9ce1jNV9UOUq6PnTg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.0.tgz", + "integrity": "sha512-uUWcfXHvy/dwfM9bqa6AozvAjS32dZSTUYd/4SEpYKRg6LEcPLshksnQYRudM9AyNvUARMfAg5TLjUDyX/K4vA==", "dev": true, "requires": { - "agent-base": "4.1.2", - "debug": "2.6.9" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "agent-base": "4.2.0", + "debug": "3.1.0" } }, "hyphenate-style-name": { @@ -6726,9 +7558,9 @@ } }, "mdn-data": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.0.0.tgz", - "integrity": "sha1-pp2dp2hHtNWDTBRl6iXAZTofv2Y=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.0.tgz", + "integrity": "sha512-jC6B3BFC07cCOU8xx1d+sQtDkVIpGKWv4TzK7pN7PyObdbwlIFJbHYk8ofvr0zrU8SkV1rSi87KAHhWCdLGw1Q==", "dev": true }, "media-typer": { @@ -6859,34 +7691,38 @@ } }, "minimalcss": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/minimalcss/-/minimalcss-0.3.1.tgz", - "integrity": "sha1-2JNgQICmTI4SEiMW27TjfpJeXZ4=", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/minimalcss/-/minimalcss-0.7.5.tgz", + "integrity": "sha512-oIKw2aeOljH+SoeDodePV3ALUswVhAIgJjI3qYEMTdIhLky4tlaK4SQ0/k5+QbwIbnVppb/FvP31uERO+UCX4g==", "dev": true, "requires": { - "css-tree": "1.0.0-alpha25", - "csso": "3.3.1", + "cheerio": "1.0.0-rc.2", + "css-tree": "1.0.0-alpha.28", + "csso": "3.5.0", "filesize": "3.5.11", "minimist": "1.2.0", - "puppeteer": "0.10.2" + "puppeteer": "1.2.0" }, "dependencies": { "csso": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/csso/-/csso-3.3.1.tgz", - "integrity": "sha512-OjETffCFB/OzwxVL3eF0+5tXOXCMukVO6rEUxlkIhscE1KRObyg+zMrLUbkPn9kxgBrFWicc37Gv5/22dOh5EA==", - "dev": true, - "requires": { - "css-tree": "1.0.0-alpha25" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.0.tgz", + "integrity": "sha512-WtJjFP3ZsSdWhiZr4/k1B9uHPgYjFYnDxfbaJxk1hz5PDLIJ5BCRWkJqaztZ0DbP8d2ZIVwUPIJb2YmCwkPaMw==", "dev": true, "requires": { - "ms": "2.0.0" + "css-tree": "1.0.0-alpha.27" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.27", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.27.tgz", + "integrity": "sha512-BAYp9FyN4jLXjfvRpTDchBllDptqlK9I7OsagXCG9Am5C+5jc8eRZHgqb9x500W2OKS14MMlpQc/nmh/aA7TEQ==", + "dev": true, + "requires": { + "mdn-data": "1.1.0", + "source-map": "0.5.7" + } + } } }, "minimist": { @@ -6895,21 +7731,11 @@ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, - "puppeteer": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-0.10.2.tgz", - "integrity": "sha512-dj1MdwiYfEwTemfFeBu0inGyhcaEe3cKREvTFSA/pkGHaCwyj/FFfJHJpr9vykXvSs/PbmcApOztsUyqzd1msA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "extract-zip": "1.6.6", - "https-proxy-agent": "2.1.0", - "mime": "1.4.1", - "progress": "2.0.0", - "proxy-from-env": "1.0.0", - "rimraf": "2.6.2", - "ws": "3.3.1" - } + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, @@ -6974,6 +7800,12 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "optional": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -8850,19 +9682,19 @@ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "puppeteer": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-0.11.0.tgz", - "integrity": "sha512-/o8uY6VChG74B1HYBZkLDU6aIekWeOd85wez9YxB9SNbDnFNsUddv2F4xWuhwvQ4ab84vb+1VX4fxs2kBz3u8g==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.2.0.tgz", + "integrity": "sha512-4sY/6mB7+kNPGAzPGKq65tH0VG3ohUEkXHuOReB9K/tw3m1TqifYmxnMR/uDeci/UPwyk5K1gWYh8rw0U0Zscw==", "dev": true, "requires": { "debug": "2.6.9", "extract-zip": "1.6.6", - "https-proxy-agent": "2.1.0", + "https-proxy-agent": "2.2.0", "mime": "1.4.1", "progress": "2.0.0", "proxy-from-env": "1.0.0", "rimraf": "2.6.2", - "ws": "3.3.1" + "ws": "3.3.3" }, "dependencies": { "debug": { @@ -9296,6 +10128,7 @@ "extract-text-webpack-plugin": "3.0.2", "file-loader": "1.1.5", "fs-extra": "3.0.1", + "fsevents": "1.1.2", "html-webpack-plugin": "2.29.0", "jest": "20.0.4", "object-assign": "4.1.1", @@ -9403,6 +10236,791 @@ "universalify": "0.1.1" } }, + "fsevents": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", + "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", + "optional": true, + "requires": { + "nan": "2.10.0", + "node-pre-gyp": "0.6.36" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "optional": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.36", + "bundled": true, + "optional": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "optional": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + } + } + }, "js-yaml": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", @@ -9489,21 +11107,21 @@ } }, "react-snap": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/react-snap/-/react-snap-1.0.5.tgz", - "integrity": "sha512-utC3Hi7s1qnq+ox17FFJt1iu52OzW905m9ic5Ag3djvtsYPnAomk/iA6WT3tLnnHQrH2zauoxBq9WHrHWpORQg==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/react-snap/-/react-snap-1.11.5.tgz", + "integrity": "sha512-XBwpTGM5BiUukj8S41eggU7b2QmkAXb6qhkzemAyfVm0mswWVRFK0QU1T5e8YYiuKlL5w7Juz8698la4eV/BCA==", "dev": true, "requires": { "clean-css": "4.1.9", "express": "4.16.2", "express-history-api-fallback": "2.2.1", - "highland": "2.11.1", + "highland": "2.13.0", "html-minifier": "3.5.6", - "minimalcss": "0.3.1", + "minimalcss": "0.7.5", "mkdirp": "0.5.1", - "puppeteer": "0.11.0", + "puppeteer": "1.2.0", "serve-static": "1.13.1", - "sourcemapped-stacktrace-node": "2.0.4" + "sourcemapped-stacktrace-node": "2.1.6" } }, "react-split-pane": { @@ -10490,9 +12108,9 @@ } }, "sourcemapped-stacktrace-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sourcemapped-stacktrace-node/-/sourcemapped-stacktrace-node-2.0.4.tgz", - "integrity": "sha512-+zQGs0RlIwu/+6mCpwfHlKdICsCueo6mx2o6J5Ee3LRnaYUkvk1IzuRrIUeHNisGYwGTumYucUQPTtgYn+I2UQ==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/sourcemapped-stacktrace-node/-/sourcemapped-stacktrace-node-2.1.6.tgz", + "integrity": "sha512-wuBM/n7R0iXqiXrsR5qI3CUBwuRQYxivCCuWFTjMNUhj9Tse9iG4NEx8OXHQQJZkI3A9naAiVYLh0lRSzMpN/A==", "dev": true, "requires": { "es6-promise": "4.1.1", @@ -11118,9 +12736,9 @@ } }, "ultron": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.0.tgz", - "integrity": "sha1-sHoualQagV/Go0zNRTO67DB8qGQ=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true }, "unherit": { @@ -11981,14 +13599,14 @@ } }, "ws": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.1.tgz", - "integrity": "sha512-8A/uRMnQy8KCQsmep1m7Bk+z/+LIkeF7w+TDMLtX1iZm5Hq9HsUDmgFGaW1ACW5Cj0b2Qo7wCvRhYN2ErUVp/A==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "dev": true, "requires": { "async-limiter": "1.0.0", "safe-buffer": "5.1.1", - "ultron": "1.1.0" + "ultron": "1.1.1" } }, "x-is-function": { diff --git a/package.json b/package.json index cf0c9e962f..0e8dd050af 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "eslint-plugin-import": "^2.8.0", "eslint-plugin-jsx-a11y": "^6.0.3", "eslint-plugin-react": "^7.4.0", - "react-snap": "^1.0.5", + "react-snap": "^1.11.5", "simple-vdf": "^1.1.0" } } From 4fa7d6905ae5baf89f5bd4b4e787b6ced30c0a52 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Tue, 27 Mar 2018 06:37:54 +0000 Subject: [PATCH 0106/1495] add rivalry sponsorship --- public/assets/images/rivalry-banner.png | Bin 0 -> 63536 bytes public/assets/images/rivalry-icon.png | Bin 0 -> 5107 bytes public/assets/images/rivalry-logo.png | Bin 0 -> 10124 bytes src/components/App/App.jsx | 26 ++++++++++++++++++ src/components/Header/Header.jsx | 16 ----------- src/components/Home/Sponsors.jsx | 5 +++- .../Match/MatchHeader/MatchHeader.jsx | 7 +++++ src/components/Teams/index.jsx | 10 +++++++ src/lang/en-US.json | 1 + 9 files changed, 48 insertions(+), 17 deletions(-) create mode 100644 public/assets/images/rivalry-banner.png create mode 100644 public/assets/images/rivalry-icon.png create mode 100644 public/assets/images/rivalry-logo.png diff --git a/public/assets/images/rivalry-banner.png b/public/assets/images/rivalry-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..acd466b0ad5c223c45ba75fd3932948f15e90ab0 GIT binary patch literal 63536 zcmZs@WmFtY5G{zi4DLR-ySoz@U~sp=CAb9$?(VLGyF0<%Ap{TZ5In(>{oZ@KZ{MD? zf4b{*SDor#)m?ROb&Li`5fhCR4F(1VQ&~w43zX`!sT1^@T zra1}y-2xE?MhZq*PFmX+_NpJX&stB1vG1n;bCsTl4oe1xKqVAMO(pd1bO(>s_~O)|M~9UfBzio z1E2eU4bC7q}wA0;j}eWkH&$BLivqq0gH@r zz6G3Ifqm>S$`@U_?yL+J3kLNOa*f{|_flp2PuIBZ;x1x0>3d5lQL22J^f{PuXu79V ztp3s94|8Nih#|&J)VrdK7nFM*f24{rjw6+@VGo^8g>qWML5ZHEcHkk>MNdTQU{rZ> zAS4i1SNXiHzSlp4-PkXO-PAL)y&_5fv_iDbNgB2Ycem8yG? z7Fk@!d|-5)=+tskI*HCfA`|}`hiecNC$WCvUH?Nq#ysl}P>gR-L4X9?)P^YgUO59z zp3oY+shkvK+<}#8@#)n9Z5ZN~+OX;|o!Xu_&b^RTr(`?Pocxr*6Y)64es(UMr0;6? zDvz_Q*objH90cZ86UH#8i$^rRS*(;vmD)gd62i+5C9zd9KKZmwy^c&s#c#2qezU&) zO1GA)D47;7;N)WD7=McK`g|1L&iF(Bvpatfv7#uk%@(@AT{(%-TScC?iF06#cQ?($AhX3>Pw07ojfVNX{O6rAzc^X`i>lBq6U9ohye**Ky2`+-= z5~Eg;=PfcF{Y%Ucf(K;{M6&px_MHARs#cNGl%{QDyv+1yvFf8+Vh($JL5Ksp_YR2P zcZ7pa?pCBOxXP1L1&hl~HC4i@qHio(9@IC#sP*;!@1?$^NT&M`SqDy8LoouD@@N3X zuy;tRkMQPEn&xb9NSnMS?kYFRGSgBBBdd9IA%bvBxMIR8Pfmrg+=W?6`NuSJ0|%J~ zrE$fw?45GfQE{blOU57%HE-fw!VgblS+W2si~ZZtB`-!@T-V}QCdeop3UIUO(_@G` zWvZMcj)ju6VPMys1cpkwSs>Cgug&68T8f7mvrc*^=P6GEeV&{HmsQj5Wprw>x0D ztyG+pSQ$RY-rf+2A-V6_QHd%G8FGol&QN7&h^`ZWJV6CUG#ojLnKtyoOhc%t#6}ow zqQVTt#nC8eH#kx7q>Ewp7Ln&!D1fVUb;{<{*v$34cn0xVt!i2p3l#!SjH?^GXeNFy+aSwZ<(_0h6h6|f+!2q%z)7-MOfOZvANAtZ&ixMe_6PJpM0J1isf}u zp#ikGIkd>ymwf;VtgaZ&$Lcs9twKv2(E=rv}ifeXcA*TAt&#m^yhUN;&K2kZ+;{!=phM~uaJNhAZ)a7TI>eaYL*spSS2gugR2CX@$>aoE#m4E$qWXTe;%!0~E- zNF27NYTzTzAOrY4&g~l4?5fR%#VSBu`^@x+sjj0$pH(nK2_(<0++Ll|woSAIbC&T9 zT8e~c_QTM>1}(w4&tiDW7~@g zX;p;jLKH4b#QK$ur6zo7NLtsn``T?ZI7B}G@o~(YcDaaexd;|R7ee6x^5}L{_X*+n z!Ybddru(&UtNE^xS#U&DV_+#8%Cz>OKA>mxa#bsC&o!( z+r^9$Ro9)ymko67$3m^0$>^ydQwp2wH8ni`V`xZ)d=8s@1~!7FqhXmSU@%tlrHhWU zRQEZn``J{hUTn+Mn#uztvQq#Bq<0W}@nFJ0D92oZT=i)iKOvKsNDC?e(aengPgJHQMu{wU@EHk17aiXwDyGr>tgHtuno-Uf z(!76l^zwOBvqjMZcr)QPDc`%_j*M6Aa5GgMW{H zRA)6I4UUBgpz>hRPcMtTGtbF3Ge^HlDJKiLSu;$-5D$ex?MGqava4Gu!&;=trqp7e zIaVgL+F}8($a6}$_>+$QpWTh;+ug{A|BP(-NTfh$Qcc~=cDV3hJ3Q_a)Lmxgr!0p<;h z;4@iU&7H}L+4KcDWn|QcYQYs{215!t)t22=7NdZpF}tqzwL)Rb>)xB@XYt;BNExi~ zCzXjbnvGZ|I3Bv#zX8jPDsFILSyy)O%9@+>3>mHC^5Gd&P8&|6y@*1>sM_%5Z^=SU z5l&fI@-Z}B;59?3sIjqDuNjk@LDv^~5q5{RSfPjv5tPGM76;-$%!jtD5)`%=X(6@S z7R3Sr6+(&@*MleB5u8ElO0se~ecWQvr&z$0M7@r+zN5g)etMKy1b7~L zs`HxI5DzRybq3p~=6;3r!rU{b{k%hFzO)T{Ki|I+C)-fhtVF+D9-9` zR3&faa!KU%*-HIdsFzV!iA#bJ`bYT|<%FC7dGd3%bMCe|k!qo(?fmS<=9Yv*>zQ6r z=!m$9DA0nzIdO#pO*-5`%IjiK3`y*wm?ql8IABljr_`+b;V`X^ALUvp*e}*P|6&aP z1%bh2nwVOh?|W;mHL~AJcoH5CG3$A{*S>zIpXvF@s8KrPNb_5)KG#JldvJL-!K5S0 z9cXRUb`lsExtO_8cb@t?JYF%C8=gSB1VWbrAyD3A(^w|zL0}t6&fto7BFU5p3{=S} zInXvmEvHjd0O3byoqm#B{FY{%9|U@Ir9D$-Cyo7cd@wFKDb9hLn)Y8>u_fA_m(tbp?vh<><2#XHEQZ0>7Xj7Ld>E6+c2ZSk zj`F3fqah1SM>>{xykZrm>)~+ppT^sfOwENx*2Yxx687A^0SY8s;7K`u6-o2Ht8Mf)fa2)lG+np_whchL0_3&sqRjfm)j2w| zsu2={(!qSG503!j=^9twmF>K1?vW)f7j`ph`>pghQY;38F^*7=K+sC5n$zWa3TE~P z3^XApUe|Vcyh31IEK7WFzc5$ADQRP1q_BIRPt?k-XvgdF+qyXN_%-iuwoROP9C>~q z^h!f>A5G35tt2~!l@N>;`lF>Xg^n~zz7Kn8t4V#VY4lyO&^b+j z*}x9P76~>Q0XFnJV%Uu!tEdK{5W`Sp)67$?V)q_QeJBLHRjr5#~oLD7=}tiauf1Puw_ zp8$pCQA$egIhpsB9nSiIG1Mves|RyvVxpVV1T(sr9j-->u&C_I%+C78hZ?))Gy8e? zvw9L*H2LgP8PB0$p=q}&E#W8;l&fEN?^gB@*-bQ<&^-~HL0+bHwTO}sN=wgwC0ve!!zuEaC!cYJl=R&A~nl;kw8bC@hLrp7cm zE=GaIeY^4Ldky`wl<14bXwte(d@*Z4NdPGyH8SFUxB@y}N_`;m4$`y<2mW)azDkZa z>fx|bKd?BNUBY10tA9dbo+_}D?VTDv9KwsLlh;J9J}DF%R>tB@Y{$ zrdHYB+0z#}%^mDupd3cj_W`rQaqy@}Yu8g+M$$k$cFdk}6nq?v(Qm}CaecJp!%mDK z!_3-8x-}(QrE$;53ZLp*ggA0OS}PlR8n0m88V8CYPTvDo;71o5EB%Wl zar?5uzLu|Tw{7LfwxB~(zmzPtY?#46ko=FsBv{V$tRC2Dc1(C4b!sVlU8;m|z(UVM zu{K}$2(D}Z6vv+Y;Ll{%mAN|hVcEFM=IA~tkCv@A#45a&#k}zpp@MxcON4y=uc{zi zn$Uq1M0hmoab5`xnXv^&Q#QRqWP8;0g^j{_-uMR}W@Y7a9eEBa0oyBwU)s1ZHC6C{ zhgC8)3L?lD4c7`zi#7uxBz`OeC_6d1wA)K{y=tt7>T#eAwvPA|ux15|MxC)JkLPQ$ zCz&@Vt1RS7i1kdnnF9%6862R~;!}CbBj-U+mSM&ssIs=nI9tuU(K#Oj`^4c|pwrl-Fma3Ue1%9B%d`%t;-z&;wX-r7LJT zCi5r-z%~cIB1gp~;Td=aSYw1Mid9fIVt-|kqKk~krThb^a8rU~eW(5+%NH$OD4-;@ zhxCADlVj~nXlgEHu2`QVoB_|t?b;oMWIA7Z2aRpzY*)s!@U-l<$xqei;P_R77e`Gx zIuE}A0};nnRGroWA;=(jBzW1kU?-YjbB1u_2a*QureZ8r5?<-rS z0pJ{;I<97|dn|+0rsyi}a<`^SoQF(3$iq;0z4_UkssUZtG=Ilut&&_ELyU@Gio!dfm2> z|2B+alBHx#biEbRj7#*|0^R#&-tiiT(aecVud!W6f5vAyL{`A-M9b-LHQnNSOo87L zK}XP`?$)hgvP9-?h_Mu})o}cJKnD|WI#y(&)B9QSx zeIR*ZVnDvi34ao~R9w>_MOVpW<*I8kd<rXgC8uE5ADQ6N$rhbFRZh;2xynMAtdXew|i=U29u5sc&A z^wFbg)GB*ymea48LlaRCQp+cZM{^}#I_H_{c^gOqkzRag|Y#RQDET?!`W7hkQ86u|m6+-*9ob6?c~J9LS%>7U2Vg zpHL%bOG$G)TUK~-&j}dAE|-;Hk;BBuwyQBfsO13%JA{_21g$NtK}sXAsEjgSe!)5h zqJo~i1mEZcyrJ%;S|BS$J2*Bl8(peel()7f<27bh-5p#HO3V$iQ2V7PztUlmYbB(A z&2O*(fv?Wq@-6H^L{mqcLj#)d2nVEr$hSYEU$q9mnt1GAm$@LpH`b2JI4I3omYn+@ zZR~XI65e*z2ksRo>~z2fA~=VN>PLb_ba>1?ySg~=FDG}{R$(`j<^jr3srX`R3n4N--X+`r{UM0eV0XWpdD2=5b*fAykni|+ErZ@PEfrBe@9V&hy+5QGm zzCe8;yUH^b-sH+UcTfJ%KQvpLZ^4Q7K(BC924G$jOB021ng|f{dd_RGA8}PObOnfm z>3V_RN;o4`=-Xvw)UaVql<$^e@|;|`*^{uI_-hcf6}oXDVAI;$%5?e|*wOT*mx9vF zQStevIjtA@3RU!*!|9y&Rpir_)AJzgmW!4*-fbU|N*)CMp^pX_8mL*aO3tdMqefW( z&(=uIq1gIG%Hc}p!*z~LmRUtt%)Sa;Qji)KAvpW#(j6VPTmwJU=;|D48o!%3pLL5( z2tsr<^p%~)-o(_>IMvY;ZKBqPfW1^f+P%)kG&79e*=^tgg*HQ6$^bcBvuOqa)3&ol zY-)$nc6QmHIcH|Cdi(;AIxELpkbvuV3YYK9SBx5rqD;V-iqoX6f2rKTqD!@ZoY@;< zhl-PLd(~i`z2itVB#I(zql6gV%xTGHBKCnVv~FuBOuz_l*tbg{N=6pzA1r3_0}~S! zZ6nchH7u55Jz3W-ug`;bf!;mt)M-R+6zbJ>gfF@}I6vPYP93_9uM`OHh3UO_M;EKi zY#vL~_T2zS*!#Sh=J6HfuT1tI1nMH7+W>))MKr?|;hkK_(d65l(1L(J zgYia&9>Iufa6$i3x6q`5FqURQO>Xd2iFZL;Q%z(UzzNj?j3x_T5Jq=&@ZWt}2lJpqzRyd2!UFFxR0OwopY}ET>z4LWj_*QYeN@ zKRj=Oann-@qeh?h(UT!CGO?{#Qxh;{Ft$t%RTEi-zv1ePWyJJ6_#y5b$8PFg_;d?) ze%tL|J0WFDKA9@Tm5x4wDG6-e;Ls^PqDEo5b-+HOu13)&(+Px865pOj`$kw`gG;ng zhi4aMwX+e_=(707-TG}H&_8{5w;BEMCO(?+rHXZB19^mn0Hb$ZgUYMZlUJI=wXHhW z^XN1w$zM2+s$}m1VI`f8^z#UmarG_U3RPX#1d#0ZphOTj#w?d@Y=D1^hq6(aK3d8% zd)}((88OTJ-XA=Cf`~$zl@|+hq^7gai0%3zLxHq~eHi&-)!BJm6&K z+3h&)gQlHsm)d@xosEt%LHn)@@Yjs*0X0JsBbAK#G(eCS@`!ouc#Ne-Iz4Sj0oyp` zYWe*_8S=4o zwll7-F8-0_Kc!w{g(|>!JCr`BR<5grsUu6aACoIfJB!^ntPmHXPOS4MmN~&XLg2d! z5;ir*)AeMqze0>*XSYY|N}@`w+YQQuy-Dj!glVJ8s2XG%1j7B9D29o9*Ss;uHVt}G2>As4I0x0{7> z+Rg1fQok9OlPHkY)Ye32K<2ibCJvP|w(tZGDg?7sdB~CUHE1DJLvTuSQSGN_Nqtl4 znGY>!M)?kfqD$3LB6`4q1g0p{{_-tNtYfBRG`MqrqIyvLe{C7);wtRKQLn%;rl5O) zp|V0=Ho~=`3~SQ=#hDKG(K(}9WaPX^B0pvx*!g5(lKCJ7R{ftfMMpSI)4?EkBo$N< z`f3#W&$5kWhT?J8;0uvdfh;l>gKG>BrRt;~%XvYCM8n`v!z5X^sj}&nMsHtg(=c5| zZX0~W80ymTnxrp{BKpr}tXW4CMBDQF2~pBDrS%kCpc=AZ1Qa7ys_{gcfi(?9w_6K= zvO65#lp!-5075mtC3lt+A<#;`aw5-yVnix9;NYeLra%j^iOR88hiX>kpCH3ThB)xd zeqvCJUv;}LC>~gpBz+iF2F(nsZgrpCMX~Lw^WJGc)vY{JDWlL%*U7WUQU_fOf#{aa z&$C91sg=$?1h^R%IAocA%?FMa-nfK9Xv-{2cu~S&ozk#8hcE}hSB_^ICVbU@orbIrY%LApuO7g zUKjSdymQQ|T0KI#1s6uZe#YOjU(e2liDah!`gKSA&1F`bYO{BX;n$W+Ywxd)FL%)& zYYSheZ^o`RN=8;X-fqn{4P5m>-Bz7yZ1EfRm4z-^zYod~JY3s|o(H3HI-+j2K4(#M zFGw`q7;o(qwqYj}Vel^w^JnYVvVB}7!Pv7wVR6<4W~Xg7F1(7kQe*P(9n9}VD-kqO z=Sh|XKDLzmanaOnAHuzt(tj?{^_O}W*W3pkrB>15iqJ?oOa}FO z#Io`smC!-y97?6Ou^= zz%U?&^=w-k67Kz?*4-i(j7Luzn--od3NtZ^ZCf%i;E#6$r)O}g>r_82F_GuOq_t$A zAHKWEpWVOfz|Iji3XZ4jD0BX`xwWX0w352?hI=2tGUq6Gmv474XNe&q&Hf_2e=enj zgr3kR#e((<&zm0ckfZ*0e882$M)~6dRoo5bO&$~j)%!1vzlQ_h38}A5@DRpEq$Vqw zx7c2-b+e)2U?1=mCvk)Tm2g06)^Qx|K+&c)in*0a zI*}Nb2W{g*1&1tCX>2!c!@y7<6IcXBIm{oW4R378qCu+|su)=*H@Bhzdx42ulN)NF zk)ko0vWAMh&Qnsgnj^D;YQIU>4*7XHgHcf6YWyuAj05Yv1tOtY?0^UaGF!!h$Ss!; zn@7ac#9S1)@QZm{TsBu@a!Ln6lsswjy`&lQh$0VBT~sBJImG;Fma}$VG3?fN(_^0^ zc&i;8Q}zZ~tb1GpY<=1XHan--M~9ITds zJlE0#doqOQE0mc@Xed^bK#WiQiAr#cV8Ows$xEW9s!rO89AnD0%!lzHa?Vrq#^#Zq zf=esxFkb?C;3)_4H#ZXb=k<{`hCqCE)S$@Y6#}Bmr^8`$*v6RbCsVNpd=sMc?6*3$ zv&SM`f6;DD1IlT4KQRRz#8G|?AF|eK@%}AX;w!y>)C6PEONXh>BFu}_xBmbrH9hX- z>G`m>sUhwpJkR;?z#MRa9BPk)-`ze#6<(a-oX%pTpro@`H$({)hY?V@gu1> z(hnMTjt&V1@cqYjog6Zr)A36*6|BFY^rsjmyJ9Du%adOfB_XDQ^E2p59(EtY~m{^SBjTaisP@1B*nUQqKtWzWK#`baUv(XdGyl&=Mx(t zJxu*1E3JaOPQH~q_`Z6p#B`rIj5klb&gj^xvCiL%3&nv+dPMBItV0Oz0+B+~j@~7} zJ7jOL)d|pA%cP*tYTFzNluwSw$B<{mpaB*@$8{_3Utx(v;bm${KdKcpboihueRL*T z_Zryk0${MN%5=c=T%UfXXccWpU3!XoZX_ySKii#ZB+yGtgMj?`+}0pd=IkB!lck;xY>Y*87n8f4M>@hnCIkh_AyilX zIhrNLnA)Qfl(1oaIY;>g*XH$R!yfsjXNwSvs%3<+z9a3<{m{U+$f;w z+in*;P-z*>4!y@fy=iYmLY{(ge&MQ+tVC@*nw_0CtQjIMw`Q`ZiE{K!`p|&n3r+eg znCTzVic;EG-prZv@Fgg*%ieHsRA% zX}xrLA{t5Lvti8LKt4-RUmSl}I=fG7z6X)Ma}I}X&}9^*dQu>u!fUiQ*vAwce4Twc)DE&4dU zr+#iZ0D*%jN5T!H_1pfgDnW{M7qGWXo={etN&xrf%VNo*Dl$G6oZPG3m;HTpLr*HL z9sJ2|$)PX%v zL1>u1wMaw%`)>%<=YghxRxdllULpDzeFJ9geD`d55$Do9;(F-F!yu7>xpaQuto)r2 zfPB9v_@0~ga>oAB+J6+nZM+Hi562|N@^+x)iZ&n=Ij$L%wL?1Rp_(-SNGdOBY_p(C z#>k@@2as#F8pg3OWqhfxL^WWy$7lV%0#f{rF`ZJaf-idJx(AQ4U8e74=r3xld|c%+4piWZ`hhgv2f%u+qV{9O~8L_~z(#Wz(OUc<{>R3pYN zHJF{*Ev1YU??Blqz-T65ukuODK#%1sTq@TQ<9Y@)BMcV4c5+)O8abOCHVX7J6UEj~ z=LRA1shpoj^x^NtPq0XYD>>s;peDK6&nY9QUbrd(>;Tq8c~x!`dHM2?)#Ko7dtHbQ zCISGhR0dUJkbLE9x@MQ(f4m3hparj`@FnGw8^o?4-y#@Q+A%IU1;k1TZ-Sp+s!AeC zNU80(ri4er7+2t4C=UuG#iUapbO9I-o$MyJ<4I#-P!cH zt$ek;snOL;t@^j7sI86%&K7pt{J4eS5$4gE^4i<3K=MDk)u$UZfxS-qrneRbQ%4;u zPVNuN`pi65TCP}$<~z>^I5(_fpRtQJT(TNOHX3q-rm*(m1zMC&22nPL++72`6D6ETicMq}LWp`>t)pT74$!~&ET_KDl3WQ3;r1%(PuVWSE}5UW(eRjJR1 z#qj*}a=_%rB2pNY{`;Y=^}G?-e_WB$K>`c5#iJ7z#4)9xuB5=&;Z1qI!jsexu$&+r z>B3h$A^!`Ka;jJKo{rIhWR6!JA!=%efS zl+Z}%L7QwuF>TzXZ!S(W-wJh;!|wAuw?T-@30gv?!FaG?qCumK>42J$-XqaRwW zV}|kWc~18gFpc=dRjHskeu{{@lWNB+h9Y-*reDxV@hyEz;~IkgLg#2|GxDz5^XSe1 zpqvsjZsoV92(WS1)yZihp_1yBL&=yYv&Lax*+}ihO{UO$@ea5b%41sysYzmd{L)#Y zSvj9raO7yaVgRE-gHyDH9s%wO8yFT+oBL9<^!VJ%2J?_o47T#J8w{X@D=4diFIBnR z1?M22lz7^bA=*6x-Vb%=`O%+dQC8awqC_el8qdaxDrCVTZTB@a8aIln!0+760Qt+r zR&$2~{{PMOeJ864;Wc~VqN32LAdcbJwk%$iPlzVxBbm@Z+XmV=QgU}r6!yIt=H-ey zz5OC-ox^k9^4=eDdN@vMou|(-KsJ4~e(PQNfP&%!-2z&TsI^8YXM=s3 zFX7E1zh40v8Jd7Q@vVK=rk0fL4GXN zJxWtS5hMjwg{y-1RF>tsH+6A~<91+`4+e4!NH0Xkvj@iTcqHSsFlkBldCuloMpz1B+DUoMd{$l8;83G_>cwOh=f) z6kgtN5TpEC=?%vezA!--lZKd+zn4{zn{a4W-HUd;eRN6eG#=j?=359lKGpRiW(8U! zIe6(uj#}69?6MNFB0gVqxND*+E9h--@rR@o=gxK(X&Tk5GPdWQS&8N{O!#35VORK~ z8i3?HltPn`h9(Bw9cL;ftz;aEbV>gOA9Y=khwpwE;k(as09d%5!E7=vX!Q_E$k?#{ zx293SgD$6!M*J0>hJ$lY$nU$LyM{8~ft`*FIQEA;>1>`*g4bfzzyfh#bE%$z@$^S+7-ZL6N5(4wsY0uH{h9J_U zx)1Ix#QhyP{k_@hV-`kY+oz2PTY1p^mdkJCw6p4v_wDdZqd9z4e z$yTw<8b%OJi6l2kd6?7%Dy86P*?W^gin4wO1jTsHs$ibQ&{sIlrY4I#7$`DwK8Cc8 z@?HhjrX1qv$kbKCh;F>A{|?fR1D-6=$S^t!>9ho?9IxQT1C&(Cr{&$iL54s3Kxn&m z{Cx7dYq6WW0@sgwIYpRrS~Sr!5XA1-2cx^*7Egojq5fAfn|3*Mm z*+VW5bLJf+$HV5zdh`Sl5t3fD^-7>6&x+-0To@^lt90czz^V;1nV*dEMHEbW{7NmR z@`wh@a;uB=x+3`nNHn7gtAL?EwB0XRC1QD=4&KfxGpj`jK_8l|NGb#QoUVAJxfbct zWXvIW2WrSob26+Zho}g^qCkHG(2_O9Yn(9S`RFHt!vEg5%a~HrHv)PfoW}YB7(~ab z%5<5WWZ8S0 z3guJ`WA9U1?q2&syJ6@?vbPqm|4St4nyJ_57EIs4dAZ#Tk41RqSAARBX-%*^t)O`shfbz&HW*B~ zD|l8vGO)9ai6)wGURx|iRAUYH64lJ{_>u>8nznY$U*UtPq-|K(XMj<7)$^9WR!{^F zXF|2;4l4EF`o~uv#*V1@6;w24RbLpjy(>gu;ly zqYC46Q7AZ6$yGyDjyg?Y+K+k=8{R!F=MM|SmKyu%p(2)Rhgv0X@BI(nZ}DH2B>0j% zt34+S@k6Wle1Iu@p{IwW$3Yi3xr6jVufkAAIU!DcCi)rn!sLAff-t+hk;x&K3(IuU z|IrWgx3N0JUjvdm!T^6jzMgUzzl>nx)G@bhn}+VYomgvOYnh?uyc^3uq}3rM(11EV zVeMa!Xf!Ia@{%K;H^O$Aat?p*X46DKwH6*sK*T)zs#d=NsU_^#w^npg?m_z%V6NN1 zFJW=r{%3G;s&Zp}e8t)Ohl%&itoZY2jMsCDSLIfasrj;kDfyi`FY5OY&JGKzy$BEW z&It5{&@xF2bp6ETAyQ-U%lm&g1g=DDlDGTmUT(m0^MAqXDku=p<*)*By zJB=E7)>-LyYsL&KaU%Nx^Qa{4$tj6T?SFQN`7UO;nrPBbYANX+Fqg43&eg)v2kO@2 z(p|+qNSWBT=9Y$!_*Gm??UoF&&WuQ-vvlbl4_CNS-Rqq6o{8hEWTsVoy3=6PjFsdz z&V3xlT!W1nIZQc1kV{;zk}FbP$G%B$`GJNRlLr}9V9xqK{^(!~jwIi@~xwo?IVnBGwQ+<{vV*3h97_cx3UtTeJQ6rJH_dn1@pWB=y zJ0Cw7!u^cDcl;XoS@9K*jk4Of0qL2-rTc3O`A`_lKbx}vKdca_N3$VmL~21u{%%{kfyY?2g0~i>h(ep_xdnxrT~mgxHm9ejPK2#?t@>+j z2%Nl>Lv*(kqnvX*w_T3MrNN z$G+HLY%mvtaj)5K4$<nWlJ^Emu^Fp-)j$M3Uf>zB%5 z)q-&Vo;6o3gtD_ZNJE0PhP>(w!!Rmy)QM6Blybh`;Px>OI zW*2G(>?*A(nE%500W07o+a#2U&qeXfu8xJ=zH-8oSRAOR0upL=VwK!_XT!roaU@On z+7+@aN=eoghFz%NBpJ$U-NT@K_33%ao=Ybd_tr?dU`ls0PiAV`19q!ux!F|gmuKH; zXk((~dB*O2O-2&^x4XTrfS)`V?F0iELN<;3M>&Lk4Gn z&&`;3-R#|eBIreZ{Q6Z?biCk^SfKuL1HGuloHKB@&)N8J{O{tW-bU27(Lmg{k&1Tl z-is2GB~$Ohg{pv;%ntEO9bW@m>b{GJhv$~lr*C)fnZFaZ-XsNW{<(V?fk=+U@828x zFXSIG@0o0bKdLQxod#~cVtf6vp< z-L=()KllGyHgC4abWJ4k2g+^D0vZv1lr%^KTP5r|9;`{LN-7hgsXdXSjKC3!`)EO_v?*1&(iBj(R37c0V7& z5k>I?zVA~C**E@+Lw$SyvFZKr+|fXnRk+g5C~i3v^!#?3(RhCO$W;(0} zzWH0yZ-_&Tf+#qo30&~?>5ls?M{xh{lzaH=zbS(+`&w=xF@x@6`_^ibL1Vw?wpa%m zzx`uyroeutdd_qFi^7{E6m@ya`p;u{{om#7_fF8(6xrM5Gh>iX#>chfTX$4mK<_g) zHraa}?v473uf+R_DC3ofpy$=i8`osHInUaJuyf-UhEu4=aJKk!64rr;6AD_<5FNx%Icx#9CnI=IVd7JlmBifex3n_I)wW z+o`9!v`)h>Po!e8yUvyKR4os;GRFnk{ANe5S_ru)IF!o)cKc<%4QeNBMK*vJOM`i1 zWMR4%D16!;zTWAF`vvhGN(?@SnEST1l92uw^(2U9adak#Tk|CpL#X|B3>q2xz8uBs z*xiLY>91h-YuDCfTj`deDym#~Dkp%J1((cGhJ~xpU8Ga*6@^M_&1+6XYrrPHt+kvU ztBxOC#>P&apr%Ee+`UbQ?MLQtOq0O8)qq?iy>vxZtFh(CGIX>s6nT)Q=UXwNJ|5j1 z8@uX%2=2l$=i>9j&6 zFVN(`u?%MF$IpxKsM<3;X^F3qZfa|0_vKhd;E1sNx3?a39N<3@A(*wDVLM5j=b(3G z{!sd%^{rFo7e0{pupimz`Rx})C+E&;$G5-MV#7ukdPMjAQHIYxMVIT0jpyrTf0yIM z(dO?|M!1l}?*HDIi9FK_{r&nkj`#TtU6JpOyVj_B-f;iBWg))}-^>KTFxHmtTG|-|8}qta@PmcWd=X zY#Vr+IJaGG(Z9I~Z-4u3W)m1nhYE7d4}6k~mkydDS?kQbUwWq$u|B=|((L^l>};6b z+`ePb7bWCUyJiXRgwf&YZKUt0X6uLZjnaHODlkPd+Cjap1JSA1Cwm?T=}mw`#ub?l zb|fan?~2wP@-I*T8`+KEndQb(+^v$|o`Q|U-Xid~gV09nm(DE~Vh4STcex^@$* zIZR`dF&0cR#KeX5IiJ_viKei`DsljnY3C4PVStO8aL%Y-dt4-fUG zczHYv%_tyNb3Kg)b`eQqP4*&r8+fioEV9ykNe2`>X0*!iqCe9*TX`s6+H{O(-+xbT z#aBoyll80{<-ac@kM0VnNrG~YY|2VWo}l+%{pcGy)B}1Y9vpWR+r0`APinmuklIa2AAKHnoaikKrk^j!#7iEyq zuIEESKb5*xVnoOi2=*k`&};d$05$cQd-b0y$O~&;rfO4%GYPY@-A?I5GTRb_LtOLv{eVf2TL_`m3Gu7++w*l$nPQn^PBja?F0F6N zpSVMgw#HLfAk+8YhKXOau61Fq2}O2fK}+d^w)x_M0XaEapE!whugt$)|8iR{8_YNO zLdQ{+A2UEkHSuMqNPWGs(c|>wliBAjg6!_Pk)n|egD8?Vx(D&Mhp*(F-~NsgQ>KvG z95P&CoBEG(Y_7Hc?mvnCc;6boW|bv}8vj3k0d#hG++qn`oPKt6xK!WgJHFcS3;uWH zGq-g})noT7ysoqFtMMltp|t;QEDrXwpYInqBSCM07IZdERPnBLEo&k_@9*i>rIpp} zsot_WK5lxs*b{HH7799l`L>D5rQ!Ww0B%5$zYpBb=Ra}5{=+kxnbx%7p=Tf4>3Z%} z3-+I$?Yv*Rt8Ksaj&b8-dCr*sw-?ZHXhN;$?%kZB9=BWJL~q~IhQl~!&-*r)^ZZ|1 zWw-Bi=lX}9K5swt^aa}m=k2X%$4}tKiw@!||Hp*=&QC1wz^B${U$JOE^_+P-fM$Q^ zKaJV@KHD)a|M-6B_~7f0*ahfY49BCBj_te9XEOZc?@k(LzfW46_j&ju~y-RO1}{_D3!n+y8-vx)0T|vajCXF{qa1X+Q6l!U@4S zhkstkJ9plrfp}_R*7l68vn^QiF$0HZ0<+0n``hLK42}gHHNk-k59eaLfX~4hpY3+A zECiF`=C03obqtm(pZ)cH&r$!OJeO zaZw3JmmKbs0hdk{1P3Kz;=v=BOBa&n5(ZGdOxWmiLv&GhLCyj>zN?4JDMuEBFjDY9bHjxunj$FSy>&R!eNjXti#_1&<8 zEY#giC6sPlyf?ua z(H8c@r{TRVoADk6UVO$U>pQtjfb5bNa?+g0)-~yZU9}e&M3vd~w3 zca7gfq2hS6*X4_??1!+6%YL}ezZ({YP>~uOv2-+wmEs|T8j2ax7K0KSalpOd+_}b! z-2BLmo;v8p6C*Aie>(h}#pciu@=94!stW3+^_{1Iug#MPj5GWYn8vJ>Ne7ru&iGh( z9(wu0Ils`nOz8ItmLcK{BQNp{XP??D7t?K6?)R%NnYY)z-5K}8xfu+P!mM&G9l7%2 zIs53BJDTYohoj6eGwbF1`rYl~T(ez%>pwM1D6YhE zl864-8a-|K$dKhl5;Sl)Wn;ILjZWSL?;N+^_^Sy!gf+q+{Cvm$>vwnUcy)5g#mO6+ z`uCe0?14PSHp`R+SQHAAV2fe$H1G=ZD{vTUenh3#&;z);Cjt)JmtF<<>Ji+ z1N-Z5|K}*nd0o5c4D{2V@fp=GV5!gZpD3~ibg28#pr8jb1`Wzmp2f-$7_qWmRKfKD z1rEp{+C8z>4tFN)AO`Twi*0-o9m_-LG;^@Wfa^{*X0Ac2G+gKfIN)@MFwb3$`E-0j zG58N1*=PIixXH#hY{W8=4K}rUwY8_PG-S&bn>g=0TYbkZHoN<7Temo4k2td1KDhaO zJB%(U2O@1{VVK4&i)LKt@Ze&=m%cPh!!jZ`xjPMcBs|bwe&o1bnb#7+^CILl;r<}Q z7c~iM^AN=T;*j%%t0Oygy(Jk8C~3+LJxDT#KMKQ?u{=*DEmOm?B<^a&Cx-gMV?jzq-@(0tKG4z(FZ2&R+h+~9 z9`hw{ScO^F4xIOv);@E_nZNIN%y0)JC1T4=T%5e58)Ch7;*J)70ZTv_*2777;-&qw z7f-GprGM$B#t}K1yl({V{+9I{VcY%Hu^0U}L*6uHelY$boGu3ToyR}S`^9Ilj3dLd zuk7zDYTJi9?B0E?Wu3_69~OTnX0$VW7VCu>9&DY|k&f*+obXq@Xs)b_em7>KR~qm& zXnV?K-nX?(unrsvpeIfwRZcA`2%+T!eQ$ynZ1QjI*|BvF}u(^ z6|)|3XU50edBI?>amNS=rI|0+9irJE>^kQ1UNUwYqq&2TsUb#r}{A71K@|8@PayK4>fx}pr&M3 zeC2&MF4|wc)n_F67@xnjt9thI$8_xlPn@@>$FhbZITBn>ux1h;Pk_V!S05XfJw#n~ z2}glr2QEq21&52_!qXS=bfCY|_*glYRIG+QgMlv-4hAl9c}nG&5904{{(+WtC3>&= zY0MgWb%>nHw2l`3_(S8y7u)J^$yr_d%U?VOBN%SHt7U)rG3UMRj<)^Thnq(MoN?Zc zw#mSy2wWn>z$GGF2Eyz7ufAl~=!`LZ`R0Z`Z`g#017TcK&+uh9ZOIqtV@50&U$EpF zaL%eSJlHy^O!yV_R88~EfS&5cxplZ2xdmfLxXR$o2rjhR1&3WwrC-;0`FH9p@8M7Qj;>QFY9ryUylnyp8KdI(W-~Uy3V4Cey=b zoPmuTL3`{{pYE&*G!tGnwpW%}Y1)?s04dXfml_;WUA7=&5B;$}4H%Vw)c)Rq{;l_a z-OTHT9%Bx762d;%y}j5Q9b=LA0iGXmGL>^CP90)^&NE0*o|rs;iHmdC$0rgJ7iS*N zQ9Mf3mXKT)f~=nA^_};P9;W&|uYO!#?&Z(Nm&qXTx3QZ5#!&@6isy?*{BeEe8-5%g z1864RM3c(|YGIuDdO3EYSV>5yVL4ik?cB*^xxm@b!7v++$RPZI<{xNTSE8S@o5vHl zjB9#eTeVX*txN`Aw&QOw{2X>|*@~qUwS&!NE_dJ8Px}(AvHtPz^qEx3IG%df*205| zSCD6aU^p=CWqh!8(t*z1U^sKk@STY1U^DP#$CWzR&$xU6H;@xrCh{RHapAIvcYmt6 zsd>&-^Kh_-?{Jc9z`4{UUmoVN4!(TMHXOEmN(LU~aICuH&CJoliSDcScMLk3jT(nl z4D^@uXvE0!;pBAiPkHDlPu zhh-*!!^$eU<&f`Awdj%Mc)f^qptE~-+rmN2U{B*~WLO*5p2BbQMw`6k5?ga%pUr*x zfK5*CwJQ#8x2q?&+Ah9eqYHvN*%ZyuzP)odzTU?#n)#YQmcUym+sR!>UNh34D@7+Q zfO0m2k#;hWR-q4$3lauqyttk*44LI|JV4&7hAa|9L}h2Y`HF+FB@vG zit{EbAWuA&l>u;nFGUGtd9y1p{AnZ#J@I59fC*5NFeea*NfgqF=4>3|mdNTzU$# z-x)ZgG8pLWbHytBY+zRh|9>1V<#)JHv;d~VE3)n*8v)8w^#DlZv zcp2V);l+M4wb~zmh*cePKuFzktB3oM0~|}UbV?c67Z@IFo$1)JuAYgRYlbI2yqQVo z3yZJ$k^ZghL^R~Ub<&&#=Nfdrtoe^<+xLCOZ(8_L<;7>#HPi^$eV}EZh#R42UlDh| zK-1Cx(oKFt{NB%w<7HPaYFK$VR^4$2p+mTV>%hsRV?P)kjJ|q*#-KjCG#EuaW_2cv zc?~5z6r>%5qs;!lhzn60V-OZ`0E>aWhgH|ggPt;CwAG9z*m;Q`!`kgOK2XEjSp+R# za^ysXF9yNOkQl&r-g3Q7ZNZ0YHmtWbbg?(-jBv}oJ@|b3v^`|* zfPEHUcVv*Mh;8J*bjtT>;b&0#x4NKV=ws(qqJ7#?6rIE&0BAM2BRlFcH7 z5aC&=IjCe?BmsrgfpkejxYB5$pqCDUgGcp?wAX0DX-$SqyQR*bFsEr~nNOV4J4KbI zqn|brnYM;~PG22|mM6+sk(K07`ce5u?eD$R`)~Gh@AuiK*@v7e`!FGy{>JqGu`gX` zZR{enc)^*50aH7jjD77^J+;eaeQZm;JgQxs+{Su%Al`lHbgt9(rlcyTm_Xy;fiWN| zqdIk|sSYc0uz3OJ)@%$Ho!PaQz{%r}>pp+(k0$k!A#oqZTIAQ(kf;&G81# zl=5*mU$(jdJ6YfwqJ5}S4tKYB>MQ(ZtGB=E$daWhKm9#($MupUsuH4cOF#zu3imh9@F>t8Z{Qx;e5%55`9(gP{9x+j zx%b|1fO#YGlHX|V3i7ED>)@ZSZQHlO>0U|TGLd}A^Vi-!QC>29?p4dz2W{Z;L52@s z&Fv1cgaF|{_0ln)G99mj{Rq6wnBnRn?e&VcPTKpibIT(^_rce5p0+=n$iDhO#-Ki{ zc=GB*#=*OaB7w?@O&sZ*W)|D$tzN(fVNe}yZ4-sZgy}W%Eps^BngxO+-OPhd;|D~n z9bapQu-5u;7tSy6K2r*dFuHR=$vg@<0L|_WVtWuVP z+a+q2n6obmt}ltzv^YUmN>5wUW{UF}X!5)AtTV<8S+Xn_c@su_zco(JTZg3gG+Q?d z7lLKSpf$7yu;VDt@zM`!9F-q!g~lGW|2L=qxA9VAOD{O?(uaqbZgEDN&NMH)Ixo>a z+@qT3MxH)M)8dj<9=QN8BEAk>n=KfS&g;iusY!>X8;@ov+JRrdWANwv(v*IG@zLgy zHD65o;c8aw$b+=>;xTX%8MxemGq!c8U&MO!g*l+s6vvl7|1_^U&LGxnQ2B`chC95v z&Ohye>p4EFzO|^ibl}o(&Uj;VYuub&d2!<;egIEF>cH91PsdA;+)W~1psQ()mHq&n zy$n~z8vh4VCwEfG{h|3Jhs#CsSAXr0YoJ#eo{10ntNkBdnKPLa+eXx^VwOh z;r6k89y7nQSRS%4bHEm+r?G4V^V`4~)?>HVt+k0$PO;S+w@T(&GrR4I=^a>w-Hbty z>SmKijNUFPStd~yq7{(fHAprJA4DXGB#D(pK0$R#a?lC5C$ZKt;jQ{MK3%OfiXld` zNk~%;ZS1PA9&n7ZPCuUsl79 zG#L-0uVFQ9!=G{}EA?jF*pm9y@U)dS%WlwQ%po$2-lQq>_gi!V4TL;p_o~X5gc!T z<`~QnQAyP^<*)bh{R4bWjyr(Rak=sCj=lN4 zjfmW@c8H#3L7eU6%W-sQGko&e4jzYh?X0a{!Y5z0pqVn_UxQh_RTFb|2EKCmH=pd- zpJIP*20lXP7a9ixADv^{#J;eBUx2J;=W65=u;WF3tmEhYctXo!xR3Ymy&In)j%!-( zic$0ZYfW=~@W-niDbmi%@R6Tm?F5pv_b29dgE

&FvjK_p}B4dfJ=%rr0Bzd#Jzg z$@6ybNE_Sh`9AB^l}jy-rT6aLZIz8TuAjp;lKkKi1HXpI7Y!Lsv`z_)Lw;O_lXox2 zmrUCOOOf96o(bI)z8|}QydGc9OvkyFF_>nXJn7QKz8guFVc1Kd`=#bx3`Tm>M#EG1-<`Vs@KXCJO)xW1B) zm-(RwUTk0X`^}^9B%(w0qNg7Jh4yC5ZvMb){gHOc;x>Twr_#9`h07rLu^E268^pmX{4*%D_)I4+h%$$^X9ekv8eR_uCfi?H?J_{>j|?`$fOr%!(3EhvSFwv5jw) zz#T4fmy6nF*4KAqJ@tbX9)}s^x4h4#e*xRQJ?C+r=5~(H|FtQ7j{c4B8aMvxz;*m9 zU6zu&+0^`e;q@KAbi~eyolA&2kvdZs*Lu@&W_SYj$Nt&x_vJB(XM79#Eca;V%YNL} za=D#$Y96LJTU|e?dG6zuU*hwgYIdCa!ViAv>DCCPN6sb%&ZG9Qc^lMj?!=KDSPvgC8&eAXYWp%YIB>HWXXuS~97*K&Hk+3?%(fu095e8-~~ z%12<{_MtI-Qk(jCgYvFlnXw;u%0lT&oB_TJPZVDIy>s?feBp8>GrhI#{E!e|=H$z> z@A>(ialV63{yFwDxC6-#(qT6d?610jb=Y(Gs#}*|N&{VM752eix536XZnn;v z^;(V5vvE6P{*X<=*;Y^)Jn3u0shIz?qamrt1k?;J?Z6dc5a(Q!kr)vMIG|jbfaNT0 z+&pmoV+&t))Bf1tA$8Pdk>L51#~kI55;fxtNFotw*W!4ID~BWoMKW^9#R`A*vWk@~ z>Ch4lE-8qgmKRjI2IUc-uwgbO&UL%p2|E$=!(`O3)Rp?Vq{7pTQOUC3W2Q&t_cj`} ze}7-dJ~h~%y#FkJK0aW2p8on}q6`cZcb2kuaU zZBKhx;-}rBLR^kXt^L@36_X2+lY?xL*d$uhA3eX;)nJa2;`-8^dwi#cqivCQ6cG;y z#pO2Ju`S#=_^M=GX%9%~GR%AozJNg{m#Zv8HUckG1N@30m)OvW9u~OAIltQZVBVY! z>iuTu9JJwEHP7>bJNxj4^P3s&?-+FE&s~}>9n3GI=D>*CUotv@SM0yduH1Q@ZH3o- z3LM=vc%iS|8Mn^F1h%U~=Z2_7IPZ(tMaP|J)Q{H4F52Re1-tj)4%7ec+Lm#3n0%XK~~Jj)-=MGw6!ZC7%g5LOIqS7;)LRyZ`g2AxaWJkhF}K z2G*6-20GJ)eSoEwM&A1lw(aEgd<-LAeXf`q~E?{*)xcD8O`xuOZn5H zL3?NLe$Jl5Z98p4HzrPwul$@7xbG19+&bRGyu6%QW#`Qjk-72{f!Ra44vQTGCo-P{#hu@O84xp)hF2_u;zJs z7B3?5ir2%^G51bM?#oEPMd{j?HMHQ?QZp#{>=M>tW5yW+GFFu+EWq*Tz_IP(tw@aR zcKFa&MmqW3Hjo4T@^`Mc|MfXvHu#FC zAGTLM(`TWa$Lza*f1`c+mI<50_OhRQ)gIfn0kiUu`M<&Q*H^EyFWotAhh}k;1qb`` zvlr|qpEQk_+i>;Nt*j4Aw+Y>LGx92_ryCejBFnZA+Z?F#!;ZM3By=vOt@VrCz zqCeiagpN`Rp-sy_dfE7orPV!*zZ`=b65-e z+7GO@_k3m2?%wCiDY?$=X%fEfvo^~;xaP{o5uiIjG>|JJ-B{ZF}anY{+h26^4 zW&J_eJ*2@Q`3-^BeQ=Gvdsw|Z74>q-tokDvbnc=$8E0T}c%PeBpSuF(&T#czW2N1G{#l3Z z$$*WI>gWj?iKK6*c@%s-f(Z`m&>NooPthcUf`1Y#L-uXKAS)Oq{`{ErF z_6zS`W7pp^ZoIi-V4r{S7=cDLFsgx34Seg?fQDZ;UjrrvSH=L#-wU*l&rRkCmUy%m;DlmeoxpA) zTqeRamw}{1%{3&=@Quy;IJ!~jnx{!x_ zZ8^oOivQ!wk9b)VpB*MhA!87fWS}yl>8d9HN`0XM3q2B&M*x3bR8La~jUx@yIxvBd zY2w1)`zP!vPv@Fp=Yh7p@2eB`f+H3!Atv%;WoAl8t%3H+NI?s6HM*IDLT3wuLvaqP1y>;AP z49EW;u7#t*@~gENA0tGYQGWR?!!k36cUx|pu;;&Jlij!j?$B6cZx=I?E?H!oK&Z}WO7?Vom2cKnv_bCc+E8`0-buR&Xv`M1zd zzJ8C_MdC|YVYlmKKVsVZ6YH%n5Kb7&%wHX(vup4A(xg56|KA8FyK$~bws*P>hkCWW zYG70YqZ;^@s(~C; zF-mfvWOmsB6UYu`k$nykFE#1{>uapr9F)Zj=b3}PgaL*>URE^r<0Z&dco~uNd-I^@ zE@2(SZA@E_k%u$l@YMOynf=)B`p~}nZ1Tu9n>=+Zb`?1lUw53c#e46u{U85`?fS?E zY{%Dczzo?c+k}@y?t+tj1RuijD?oo4Xo`%Zr_X6c5NVHSAppV)I&G{Y^zYpRsDHPe ztPK7FBzc*kI6CTthf0)#;);_l!s-yL1u~c?Z$U1Tpe`zrqM%`#fjGvz5Qm^7Ye;x8 z^m3g6r}@VoH*LTF$u)A8-}JF5`-NxVMh1Vc|B%nJt;NjfOP_?TzpyjOUt!kz^?&d1 z3$|d!`U%ta`19xNZ@#?B-ukIEwjawSfACK?+9zImpPio{TS~=YmmD(MhPr~9Ccya^ z41fFMdu$RN1?-Qh08(;hNwuf)vh|6%Vt03=dc%ccXsA|-&bA# z-!r=_-3i2d@V4)Ey1Tlny1Tmn{;T`1?w&ifVc&<+`<`!1lcN1ESM=IbmL0Tzd+9EV zV|;&viOOI9$YuJL3-;MlKugC}eQ!s!7i7i0CP%r!O~;q>@4b1O!Xq%n`t&tZ?6cSP z+CEGGzHxK6y&pFR=gMZ(fzKlA7t_X*=8xE?U)rz(X%YBA%frL(J^9QJAQC)cdJ~E2 z-f0prPh%ee-+#XbU%wFK0>MALa5uiR4BH0ulaGFHD(c^5*P?ISxT>Zv3^RK;p>d}$ z3E8GmJ_Pgn$Jd}}|8dJ(5C>=aWR#qEr*>ypagNalGi&Z#PyMQegy(7F$Wa~pgt3*f zW&Xk0yCh;_M9N4BF0KBgg54^Q$=IX>CMEFeE&&a;StSwIFv*{mv;Z`13T|WE)i+>^ z_HMERqcGE`W9YEi*3o1 zpJ6+0z123~a1$<*>9X0!onZ4$JKg$mG#@uM@{p3z1N*J9eyt6|bYytd{n#uCJI+zO z1n_cr%8u1`@06K_?KY|4u2?CGiuk((zsPfR-fa1mE!aH64T&f>kJc+3iYX-oWsO=Z zP`pSICKUB%SEn`mr|A6Ij$xRo=tV`U%#k0mZV_je{9r-lAA}K!I143M8*j=va?{Hj z1nC7D6Ce4&dgld$_W7Uo;R2uz`!}o*zv;X|yLo-5U60i`x;LG_&t_36z@+DUce^E(HJn%BeDwxB^P&F*95tC2qJ5_67V4CC>}*sZ5h&(UUu4 z(XjPkg`J>tj~ueE-_|4h+XGM{Ly?M_7Gy=h?2LsY)>TE@vK>?XB^EUGvVmdSwkL8j zn-699%*9Y{lMb1$aC7zkti?$Kg-;ve_h04;C9R35s9p0wY1Z;$DBPzla7FpmkEz=| zSVg^OOU-7&CYPGnV^A)y6%_W&ROHxMbvy5aWoV`k74#9R7Z7w(aQ z%^IN_;$gvGstaMP!K{aavn!ppka@amEzgLZ50f8nCtzg!61p8f0C~*C!gyEJx$1f_!%tW7S zE93R6JMGg~^Pr>8@ z;YCyH_K~MH>?7ax3EUp^8P>671-lPQD_~J)@`x~fcdfqXpN(x^0dL4e(c)o2A%-pA z^bO9qxT}fNoD7@JJGgm4SOo?ZR85D?KBL8)8Oa578Qo+uI zF&Uhcz@!9z%_V?QkprW~O@{Fo!#NX}mN3$I>cju0?&)>{Y_Lb5m^N@69c>7q#{dTd zKi)b`8CHW62Wc?p)#_wW?dib+@j;j+OtT|TJi$(U?dxrD!+PsqxKK(EtgEdycY)1V zwAiK}xx~7$fwF5F&cEJ&!1mpCyVZKTt+8j1HFj@@l8!q7`liYBgh%8}hoaw!6{RW^ zGU^vz_9%Y>aOE0jwvH~EgN-{lTl?mFtcsh^jH@*H%Y$TD?G+`YWQvy-B7AvG@3;E0 zBdzoH`|!5q3lkL`$7Q7Bqyj{;agg#nwepS$0`q2ZH8J3%Cea29F9Ty_Nv2dJoVm9k zCk~!I(9^ItLaF}5kNUCtS+T$S@f5pyjVm<+up52TxmeLgok(#Floh&ZutR<<6hVhG z`=&kXgo9GBnSLEs>|T9(DA=A4;q3~IR^pie$21SP$6qNo%p3K+4|d$!p`_3~;n;)9 zn_<=}>dkmdJ5qsCwI`^5%F^lZOHo3wQpodmWCp2x4Bn9B!2P`EOAZZt)O;$U?mqDC zX)>Gn4anrknRWZ~r|*%Bm|7}S2|4d~cwSiNSfvz3Do;_b48N4W$!sNYv?m<{C6wh2 znKA(d7jFdE7oz6o!TOoe#ph_nUKqp znGMKgcjArWC57B4Lu@yv&->g3Eq%_6^5vwC?x*N;uQ?q`bY5qr;Jy%iad;Y5$d80w zd#Z-}Y-8q=)xVgCC0g=psedLP_E{>8C(RqN+ctLE1KX&_lTzZkJct!jcK^iqe_})wjhPt7Cjagivz}Ze5 z>(FT%xKh2b^avYWILE5%He2x!ljAE2s(Du0%Ww27REM504b zby9@Ur~yJmDW-e~W@HIHc|x3!r)NN7RGw!8vkl;MAbUO_IaK+wSaNOU3oy&<-OAgk zfGd#di?AQd116}4g%6H_9 zlWg>u#o&QF@%g;#r?*;V3kD1I8RQRsR8sgix?m1$SbME@&nl~~*{>( zN-t_^hvYe$S2{^G5wXGyvMvZBtaE+?mKu?iN+g2Ph=@U2{c${5IhyE1N+QNYT!z6f zx}N$0Qrrb4V~HjwO;}3G*#^9z0e`F_P|kJi)~?;V+Nv9{$ttZTl%Px?D zRVczauQ%TCx&aAh?WI(X$p;O7HYhCZC?1>qF+L-@_-4BBUYI>mO- zX7rk=k{xm1dH$eHrHwX7H{!IA&3k?0-m*DZ8D@teOY!QklV_I-=Fc`j5sxu0iUwbb zKQh*HSrmXdArL(+oL663cpfdZ~ZM}BmT3@AH4}0@fJ8RTa>`$M%+m4wI z`D1neaYr81#A6Ru*J*qE$Cppj-*PBlR0Lo1m_eh>Ed}3F|EwM=dsc?B1X-n0aQA_V zJ?UTP2!-Y*_in>;071MJlcjTxNaJ}%_Gz^5#W1(X-AQxncFD`O6@5Z!?d4&SGolEG zFIl$JNO5(d3&+T1I^;6l3b~xIPjV^wCFL4z(9-8-kKjN~WTcHA?7tnh9Q`ny_c_F} zI-iCw1vjBD?#I`ecV0T(zWQ=EsUZ!!ui8KL1$8dM*)Q4A=;%#QeGf-)~Pj4qpfo&w<HQ=7I7nMz9r6mRr0ibByzp55L@TtfPKMAJ0w) z%m$mf;y3RM1t$e2RIr;g(`6^tDLWUYUTMmVokcw+%RfJ!is?-Z#JpWh0^yGPl&|t+mgJ-# zu`GTf%L2dv3k3=C59+Tt}la!)Tt4>Tr8pXl1aDk`96v^wRzQn_{v5Bh*<=STSOUdB(wF>?^ zu!&3@@uYhXL{xocllmxcXR57O2SuE_h>?~Gs@v-DiJg6zv*0Ek)Q(+)ct)UHvmXQ^ zLSr2J1k1|75=@I7$cQHPfFpu4I9>4}+}n_Jj)Oq%z>|GVeK9E$k`?)rh;%7ib*Un( z))%KXjv@${WJ*o}$n%bHQTPDBXTI*G-wa8-I9TCt3hel1OttDp-+k{KGF&oBHTSga zH_8+lC7(6Zgo&tp`$okx2}TY|B3wcXs54g1i6>F2u*c(gLRnX!5R9_FppWqe!A27U zEtGDnV&LXP4mfpeM(lu6+&z1a9r^6%+5y;5@45ee+Xtn#Z(zV~`|8DZ`b%DBw|?fI zYG#>l_RR)W7`Cj_tp|O#$$o|Lrh{fE_{7-(1-lm)((p8s3Qia~VeeL3 z*WG6aQO0QV=>H8YFlZwq`hSyWyMoW?qPgh1n9#6qLqw`Ia5~hCq(ltXUclBOQIG-CeV~G!I}JSI$58!fiG{lNAmza?DqS@F;`HeFchf z?oOUNVt)uz3Li;8mt{#VdHE#6M7$2R*8I!et4<%Z*FOgGVL4F$J|utlHCyaemkiiF z+g#Zq{_UGP_4gmR;Oak~ze8pyMg57ueiM%E#ximIDmq-$EyDu}$!<+bU63z@xyEyj z-=_`3YDn@+j!NeK;nq6PEG87Zz-uWFGhw@gh=~+o`gF`9f9I=j0GJ-4DL4!NyRU^@ zzA_7PDOIdOE;m9hFWBzpE9A#|r}_^KXMK(tNmk5|4*r-vM_8nr{q7li?Gsl{vlTmP z_T!b^c1hkJfEH#c&d-0l+h?DA z`Yuh%W^_XLViiF*(2Z|x?fkR)M~O3w)X6!dhh$CTr>4>lwEG zmaX3khqiyRH8>dGx7sTAtuY&foeft2Q2RA5YYb2Veq89`Wy}~1{$Ri$ag!%r9!*$6V5)HR!(jH{wk|ERcXM=*GbpYXjLVh%;7vT>_*?Z!F7 z$c(FHnpDO>%7=&}$uQai4`-9gIys4%4>}5$0xk;~A=l^>%YvTDy0W^M*xFu90B9de zn3x8GRyiqEWNdrK8%$d9V+O1`VZDQYx}15*}&Yz=pREi^|<3egfRh1_6Y2ydyhKW z=AM56UOu=|{y#r!Qx+d#yYIcndgjfu1MAmW|5<0-7AV?le|DWMTE5)&;*9Ivs~)f_ z@VVgJgZC?KoO#*I(5~IqITP2WPsJA)j5!tD>e!8ynVAcZvVFU6#n3Zi%lB`$A2;#x zNaa-xu)@+n8SBR#WuxSQd4qsZx(ZgBDwxPt_*@kIAZSx=tXrb+ z){mBCDLm8govYbvPupw%eBBgVzt>-b?>&F7^|0UKIVZ0^*t>_*I8!LN30fvwUne3l z-sN=!%+A9<@*XVDn(rez2m)xH|ld|D0?8`!$@O#tkyRW3Olhr@!O&(}ZEqu|B z24}U{QKEXu@5Ls__nz-YUJ6Gcood7hSLP#^EXYgXD`EXglH2K z$!5YdWCy-L%)x}Qoqt~c$R}_AkbN#+JyfWVeEx`ux|8}-2gVHYpxrg?uW8L7<$C=V ztKPc`7h~Z$Aw6ix*F%gE;bD`@T}dp3Ihnu6Ic|uco;n9@w~z+a!MpF2Hy@UFI??lTGS}$#{vLJ zxXJe{DG)eBiox0w1Wa;9n0a_6gemG|tz{<~{;`u4Y@DnW543W@j1kqhEG6?GlM)h) zl)cFHQ-B%p{L9R|97;(IO`HzA)XEWv5YQo=G9a3F5keJVsuw3k;kkZ+ zRNo>e%E13C+u-ly-b?&BBqSlK1e7fuU@26DDSr-t_&P=`4q9rb43$ATZ6Z`aQL#`? zVvZkW?tR%YSbxHym{FNzyW$@)f~WA1?%8=-;x0P>x`0#(5Glg#uyq5A?DU;0Z61{5 zGv4+d+j-ZW)&-Lfeh2A4cA0It@(S2bPqPtxA*t`*XZxT~AKbaqHvjZm>zgyjHeLB6 z8@lTbyZ+Lz0cVf>_^fPQe|Ann2&gCF zmqlj>EpYfOqi(cHjjcFLWvoc?XUAl>K>7NWXHIzXl(F zB*xf60d3k`eA-?N6N`0wYIgV5PONC-9Sa4M|5(PG)~AIQusab3K7aAV9oXc^qBiXxuAgon`q6aT4)cre-`8WWf-)mVd@=~StX^Mx(H86G zX&i(_{izHxOjxFj>D?hk(VvlgRrX0s4%i=Eh(#T^L97Cw_38PxWna}UzOBzbc)?E9 z|7M(jJOqWRAL|$AEIeT6E;?uzJ#nX9vAWA%@%1^j7pt*1Zs@YD=qhty+aAUA@j|R6 zGkyi4JYyx*!_g0bmk7D}^X+H3xeM$67ObY9_|J=MClt3!@9MKB9|dJP8?(>G1mQjB z5+6LG{>)Z&W+1tcBctfwK2eI&7Dy2QJEUd#us)iosNawyh`~;Y&yma|KyZH7gwjoU(MFZ5L&jl0t$Un(Io+gSwPALG30{tkO! zC(F^a<6$QC>Qe{pRj2Gldspp!-Gi+Mw%g2lQm_Y&@9W2Z}HO?aB8*?al}E6|efhTIrzxT|lD0`Qn+#Q+1_| zh$mW^3l%e=SaVSoN;BkAPDPQAB!#K^zV3j6szi6ksNoDB07p0iG+%9I*7jF|z_&kche*;VBt=8cI@QDdw z*wIWI_Wc-y*@nfSl(?~699UGp>@Ac@simaErvo`d;*wYiUi>6Hc?D*o$l{5gOtQdD z=!t1AlY&j)qAOil{LgV@P| zdC8N^>A=ae_Gn8aC6F=xqzqEIPMBk#yGUsD3;b3v@&*6I8(O6+@yMU}%-P2j5-G+2 zoTnD)KoWoP@>F7R?QpmTl?>)Uy)$On-VGaV1pSHqY9~$t+3~ZVS+%#!YHQ3J}$#W`;OrOd{zg2XF^w&o1)Oo}9{T02o2}<@#Y-~FQr$@Z=@&Vi^+GVq#B;Nk|b;bGO7vN-) z)8-FDp>+9-)X_)K*;8p-^I?BdzI-B*Ls?>M5G2}&a*}z0m$wu3nNn-mPCV;ZF)!AI zf8iJ`@Ijo*D`Z04j6}~%iWlVp(8JzPYJU%UPGqfjhezLe`7Fq#)8+EJ>v5`!BR{T9 zE<93?Z4kU8zjGEIM4y|I`dqg?{TTKGci+Az>vK4rL}hQOGx9>6Kl->GYOihRbA@9u z*yifL$SvdwS>%28w$x`?9@5{H%zvWK-mt#MUiJ-NA^+%wJME1yOQB4rp`X0^)V+m* zeNgQV*?`X%pSMlNB1+-R>ddlvy+aNFw6{Nz#&b?sq_mDZtS5MLkj0m;+KqSdl>pgr z?+KqhHZmDdC~%NL@tzf5j9pxmxO0UR>Fc%my41sE5-qz`6}o0udPECBg34US>YgaMBx2;9*g%7tn+Wk$WOV2N-tABfxZ1&q3Rae>eAYK^08d^hq4JDk!|E2_ z`#k-ldnzuGL44#u16K`mEXRo;SSjTy_Q=pdYhYq3B^&hO!NDD$D5uStZ~ND-v7zR$ zJ#FVI`&`e-HVji0)`yd!D$HWKZ@R}C*o;Wi3RkS581qY_UM{Sczf|~JR#n3DO6xbJ zE&J#^ikng!EgCgiv$?Kews3avm!Q<&i@3%|t_Uq{X_{TGFt^KG`(co(27jDD; z4mg@FT(}q$m!x1ncF_U59Lgx&`@cV6?>%RiO~q>F-`+62(ErW{PT;d%g+s?sRncdT zo6c#SyW6*-b3hF47+@_Nkn7V@R;9pr+a>~dO}h;|Zpv(!*I{+@$E$knLaf|Nc2vH? zkw>ZzSKW`BIbz?(?f|;mw{+Vv(+2I7Im1%0IdOP5>iP1M2Vu6*v@0N+P_AcmkJ`ds zD1xj?YT9CAL1wH%t^^Ye0%$!|gov0IqPuoQ`rualGHA)Ku?ie?s+TM`d#P+`g?F8wpF*X)W?`IigMBPMI?# z1zU3Y?o506^1arFXZ?z`J#BKq7=b!ztnx+|eQTeai9XlxJ_q`|&pnP4F!tB1*%U?{ z2D%z{(S_UXb>DGCSd2L)qD|ZTKUa<~z}JVO&;9^?_Uv6)fp4PEPHXM6Xsc6ap*@rP zN2E_jUgu&`a1U0s|KUbIqL0ZZ4{$N7VGr!8*?WHo`(?P-KYFh{b1CJ-LZ=pBxw87V zw|`*LpU@RZ?8!w${R>MLs5b=-$FVOlax9kyfs|b_3^C5J1ty`*SRmXBGd1kJBE6n2 zm@hW^uz~W?CxG$2V&DE#_LBCL$@ruMCM7T_fr%u*!3b#@B8vdxSjpsREBazV45rZ) zJ}5M%0YG02gpqz65a=3rnL>c@b0UV3kdO;p;)@M__@AHpm>8K+k)YBGLSK#K3tdtD z#4AYnfQu9{)skY-7VP6xX=2#dc~V7BYY`v(<9g8X(~Y_Tc#!mHn_1Be>{eD zYCr4{d#d<^T(cRtm}L2xHCu8L6z-v#ZM+-rfdiwqZDqsutZCXVYqzUurbyZR zAwSt+Pam-UIrD7W`qfs09rnDT{aOL{>alJp4-|8rd9C9DQFbZSdbzNorK3~`p&!oU z4k^;~=E*RS5T9B3N+W+NMTG;obHFcfDO0|{1mh3>qzni^1irF>lfC5%+{l}K3wDt8 zqZe6a$8P-L^S@T(L8aOZKNPTDH$Ve|x{(i&gBOZtS)fwb3k?GHS1Z z(xpiX`FOFNBa4_6+y3gPEypML+p+4sa(B(P!PJ5#1yL9JaydN}s3g;r3ieL(v8!-{ z;41%oPr7g1+h^apzt6V5d6m~W=^(+AN8-_u&$;st+CQ0}gMIymPJ7NVW^X%vw|yIS z(7T4J_Fs2Q)t?BmpO2i6Q(wTBJffI-<`Ry=sI&HL1VVwC0D3rKsxnfsms~nGzw9YVAnFf!4{FOU zM^jRU%OKl1KzcYxklIsYOG+eK#w*OZa4xI&6rzb20$o_lz^XP+CmB6@F%!mhlM42@ zVwnU^N?=j~4<&(6JROgt6GAi%!m254-35qIlgJ8V1mhq^Tm|S);7Aflkr{mL?B?b= zDp%TA=SX5NzCi>ZcEY1PNrt@A>T+d}rb76`%Z53Sj%3O!@&QCJ#l678@V52fViBs* zQYL|+bYg-Y=@qQ7GOd9f^|%`yCxO6(V*$)O@TQ>>(G8p4v(Fy3c}MXDSAk;8&5d{? zV&(dX<8fvBftn2;XxiS5y>`nbJ8gL9ZmZ+k^jbgcuyGqCSIBu>UuQRzdt`yBgLUD! zs6MQi58|W|Y&GqO{(;q zo)P=b3pU!je>BUkT;FTkV0%h86Fkm@t@bA$x6OE?WRvzma8&)nN$ElvlGw!m13wwC zols&we(ivL^1^MvE|qMjE9q7Kq!f)8Zz)FbxUS*Y(%H}%-3 zZ=GguICYOL>mRnup1aBZ@@F%&nmodZWOAosb^9%l8x^+>z+)Ad$=qBSP8&**kNT3g zyksBsCtk@lsNARN#hLSl?9GqfZBIQC=98S@WV~Ck%h+me!bF}0-?BI;93reY69XRM zL{QL`EFCxHy|jPGE_)v2as%YD0>{6OBbOH*w=Zjd_JE@2EAO{GYM0GMfBDileeNx% z?Xt7y`Lk#dm2bda`KMr8IBZ(BM2Frmjh1}@az&JGesN-QO zSJt0+x$D^f!=*WoJZ&;ODS=4|OiEx}351DAk;u`CdV~})_!?CnYG`p~%7?MmaQh3+ z$36^}SgzvfAdLmHb%r(-EPq*oOUj!AF^i+JP{HQ8<=hR93sSgYh39Tp*Kfsu1(0y}fYX6#Di8jPuc@FmPR%ff;{dDwE-fNi_u4C|SHg7qw3 zV4VPu?%ioa+qc=!#`U)H#w%^l{$bqY*l%B$zZ|zZ4%iSrTb7O$icAPiamtC{mgEFT z!ebGb+~V36kg zww&>`HsZsGMp^X+1)bzGPWh2U-DM+AfuMryZ`=pRXDQYX)?@{76ed@PO)1e_9M*VlA9JI-<(B?jq7nP+=`?0xiw4xjRWD0d?xsSzatAEi?$8^ZC zqz?;n81)zb!@y@%Xt#b?a%rnS=WZL(hos;>tO`B^(Kz*4k3P;5WXA2YZTS1@RogUJ zu>suLnO}?k5V=mA+*beg_MdafnV@B7AY$^=H-a!=d?(;2P`H~oTe)_} z1Afv7kT^!saUc~TyfWyV7_Va>-qk(D7Qs+@cyz>iaHguLeh09!iS>$U3%F_x z69y>BWCAm3w?U;@HiERlE(%Ace1l@;NqJKST-n6`xkn6Iea~*ZoUuZSF9I^XsdnOa z$37dyk$wHM=iAV_)v!%HVCU`LX!rNg&M_2h<%GDGy{Hu9sw{mZhhy8x!T0}>Qu;*6 zX;Mm1mWT-HO+-I~M!3x%SGmr}3LYqT$50)nFFUP%%n>+0eH$i9IER+@mHHYHjC10L z4y&k?eOUQ3D=KI_-^z}vhuH$Gf~IIzRzg~9c)0ad!I}8+G734*Pne{!vxAZzANiGr7~(uaq@}WxcIH*J>2>~ zRQ~FGMDmx3cZWozF%@>;O&(pz3h~Qh6rFyA!KApCVFSh#ehH8Oz%C68Y)kcY#2Y;R zbT&31V__v0c2brt-XSU2@A{W+`>!85>bqVzV()u#Y2;3B&;3x3U3+I0#{-#N^Y;gA z;egMy{}*V!c4f_Oy1!zB2Rm%u%%+`jT*Kb*tYJIz_}1C@dGF}66&pHiW`EP}`b@cN zmi(XmzFxb1RmFIe>#8r{QxM#R@9wpG)>iCM$29Eni+ppz%P;D&@Bb`bFhbMMaf@Mu ze`3QPd&;Oi`VgoD)#gbBzvg>YSxdL;h86}4x{$m^XqoR9H*TKKO?n2`<-EX?bG;xm+pZL z6+8bOWj^nD(TKh0MXha0?7YlDy%>3)b^NG3cKN9N_7h84KHNS+zSrGVwdeea3+%b) zkJ`Vy9V?5;t=v?xbKmA=g-OORMKZvoWI=(pBo*wZ&-s%a2htR4pRx0 z-OI`1`ul;e1SP2alsRitD0m@UKo7|Us~nj;oUKFK<2mkl;lR(+1S3-h-01}glOS!_ zWD;J26`rib4VDmJ(S{&lHPic1Ma#2@aByz-gI1zKHslj9mL$Rxr4uK2j*oU=ndS7F zMkwV>FRSWU{-i~lMTLZ{4kB)0zdTugm*<%FN|Fxow~0Giq43Abzie{~{Grm-DA|wW zPqshh;O^(_|9V!k2PW8tujhp6_+yyna{5AuFyrh1bVTtV20Tb}4;EBu1QIzSi4dOd z6Tt1wJS&^4-4nTZwM~>RI2EuiZ04Z*)MYi>IT#t5U2%I=$~Dto14S;B>%abLr@a%3 zIn$|J({aV`+t*d?#UJgpAKyAw5f;)T@N@6Fiv8#JYWDiS>bAfAI<)jdbW7$Xfj$U6 zm6h+_Sk|RI{vf1>oU|7!V?Vs9Y9ITrE_==&^+<_2RN^J`#y0-f(_|ocw8sNJp1*D@ zZfnA%i3;^wp`1qFdN_R~_&?^j(P9<&>N{Gyo!UBeZf}S7 zc4BULi4R)?L1IABtET%?R zBGSQ!R;n8Tr}XF$|Hgb=J&$Yc!(L8`ap2~@20thpz#Td17+hJ8l?2*jQ@bR4{1s0v z17yTOlZrUY0tB6UL0q29p|TLq+Y%u-CWdPb52M^0duQ4RwBS1G%T!g3^oZ1cIg+ZcG>6qY}MVU6E-_` zaHX60xMZZSXA{g%aPBl^sy#I2Fz@IIs!?1k9v z{+g%N?O!kJl(PKK-|DnKz{(fh$G?P^7u-~QCV$)We5Ld&SQ-5Imt2uux{xc@bvy5* zQ7LAh{_jrPjYY^;e7xI!{FevqXxJ@29QXJ~joS7-6`L`2e4%~qLkGFhQ%4?O2BrSf z-|=!@{G-~Kl|SYm_<31oU(^I*v?(BEB(vg8@9vkBYFPZgK*AC4f_GUK7Imb zV)!_Goygsxw96CFhrW(}67G$E+ijaL3FOy>ProZ^qDW*P=JWZ25BF%2Nc@*QX~bUf zl)7z3d;H@!aazFL75nNHHLawxEgp{hlUEGe6Hlw!AAH829k%iBJbip#!%)E9@y}iM zt&iZw$rvHV$&_uy=ar82cq5+0^YQiJyXd!{_;ROl^7f8@>bC3uvGvQqIIJcHVTD+O zn9di6prFXg6axqIckpN^cEJT@ZuIq9efhC|=5`Oth_jBnaI~E9f*4i`tYTmb zGRA3BJpwx3u2q3;b;q^0S{199QYJD@QDT9@$@5HgstL=7bRIv(Gfb;o!KM;KsF3x8 z0h)0iOreq>HNg?W6atIR_##)uHShd~!Q0h#a`v&ED~*F&I_&B%^xLsGC1fTxB+Wl+ zFTN(?vn$O*_BU(@6T@%)01EcHVH+MAwbA_}w&Lba`^}ek+mfYdb131gKe;xM-o&-& z2?{D3>h?3W2d z=3j)fWCe5L@$iCfoJ>X924@rxVimWi*)8{ayRuFB0!5qVxs4YtVVqu&nL{G%etR7} zUebemlQ_htJ%i&W`K6C+k0cd$r56y?tD+ z(dJBz@c8_q9m0Po{^j!(6ww!)e?Y@;=NItsfA!m+H5|uD9IWMdatB=6F_Lo>49EP! z$zw)2zDhWeoQ76>hYR!yrVsWtL;D9>NS z%bKgvpZQJ=O7n=_0+WUt?(x;HH#~d9Xi`D8d`{-+ijfxE2dtq9_cP$kXDhNNh zt@5xH><_Vn_f4Zh$dy4(BBqxoB27R&F?a!ZossHx2GF+e?I;wl16bK=cR7B0S{|pV4V7cM zS3`mSkMDXHU_DMby4B<$r#tP~h7?bh=~Yi1v6EhhgYco7lI|0)$F<>Lc{qI}=gsir zp!89}rsG$SP@=E8qqU1(bz2n^51+_gos@5yLY;J!v=Pzs=TO>Z4optw%qaU$cNhC_ zhi+>-7ZbwV-2u5#`KCJ^vf!jb4kk)6K}u#UH{4UP7hK>;hx^MqZ^vGRa5Smn>i$HI z&)#SLr)D%knaG7qnVvt3zxS+$-GeVXH2qqOuM%sZ5FR<#pWlgiwZd7>gii&Be`V2e z=XaNl9x>0VYtb%z=reTjq4I|n0xIIXg0_MyY@1xo#$Oc*w&Mg@%7-*`P;i+yPY}_G zB8W44x;z_!s6gYI?dk*Te6~#-435>6>+zWn<^>o$i%;(?4^FAj2`IAZ1uZo1#9I9M z!_6?OXUw$)JJ;i)i(%`n^q?G2TG$0yG!%kC?xDQ%C*3wMztaYuIAlG(rCy1>Sn1xq zb<{R&s9O)d4tB#{d(WN`TZakkqIuXfiA+^nOb|vnX3-8CtJu1(mzT=mh^TJd8ac4= zXdB#pi}f@H?c~92_T!n0fjo{&qH7UQj>bw7M>1}&aUc?5ytIH#lpgf-fkQN|4v|cM zL7$~ZgA!CYv+fwn+5XPkx4z2RTrug%=+;(3T+M(XMV3=cPtP&_;F2LAxQLQu)1yY!kvFE4H3W75RFaN8=E!Qu3g z_HySY9#+db|jdqT5@heQ&#ovhi2ER=A zXaB2P&%s1_-guw4>v+%N>z_GdZ+VXY?Vn)cIT2rVM4DKzx;n(4qYj1|&a~h<_TXqa zUQ4^z_ec2qn?q3=j)2aUZQX{oeYe$Ct+&pb?zSpEy~Uu$k<5E1$()X>3Du2Tt?QcG ztm}GQRetl`ersVd;3obo1Rda9!S1|wwRKmNvqma*n)yKtXvfz z9hjlhN+N+OHgAb#S@<`CvaFkq4Te}N9)f8Gfl+2Il8_(Pn0XKg;1%1u13U6@v{T0n zj8)wL;`wRf&S7G{j*wc0F7}DwI;h=Z(4)A9gST?@0lCN;$9r+6n zu)r6bw1fpbeDdMzAo+Q?pl7{FKUx2x-6z{W`nLBe_SNWL5sv=b+UNft=>HrCilLzh zlrS!er1u3;-TC+(v63DT)*S$H@=$^a&LpNWRc`|QYK+3WqXI=+NB<#pJa_0?6{z3v z?7IE?|8yFaTYh$qcN$kNX(B?m5hoPT)|zhFqEU>c4i^AFCub%LH?45REYc3g$7w6Z zRqQjcQazq~$;W!|s=@OFA-pr%G%s%wWp>bFJ|NZh#Rhw}fZ zV_Z&$(nk`D7LR46vcDCd&O?dL?XRDF`lvRr?nK|?YBHZ6_CvZ0+ss2AiFTn0O}LYn zjGff|@RJ94NnZJo2Qqxh_p4WyeZ7$`q{vVXJ9ygChTZf)MPCu#4SV=6|50l@lOdnQ zn4sj(A}6MFQ?YrLUnA&n3+!RJ#`LMM5yrEGRaGjNT1lqD4dq9hO1N<_R-#+9y_5}Y zg+beS_e$Aab5o?BQHlqZ532?jFQk*K zfKFmk;9P55QZl6<_R_sr`C$8FHT(DzxQ75{B5TlgFdZ3~+F{eCVKX;QjF56oQlReK zj4Rf6VFeuLX-f-7SM0ziOs=xjU|(LrC(a56dlbv2H|x0FvD1qU@-o24gE+mAAUAwb z=oo^0sk}1(!buPwW03etPlYVP1%ci&KfFGW{o?!x34jP~6n`>g<$?P&nI2$Bpv+{BRvVpZ^}rR3>sf)g*UZ!TXQ* z4i#oBc^bp9SuTeUCFMDX<>9bpru{J$9y*#2{0ys@KY=L&l^dEbJRHYObnCaZ*5Q>; z9+}V_faV(e(`M4hZ{ExpKpjE_I+QD}xYIoYJ{3SZZgzYylLR59pDLHfG+2auk{mE-;aU|l+*}xn1qU*wI%X~}K%`ZqL@3l+U11b(sncmd z($JTfq!dj6qzz;Abl&)F8(BpHFgMRtU_wHCmd1G_BOrvX2y1UFELZFRR**+g<~o$x zPW&VDU>mqB-w4LJ`)}#7S+nR3^y?H zY;NGNtfNr8SKK*bQw9#;N_Jdv!&PcdWOV5auTAf^o+(ppXn42v*7w;-yEoakfyEHL z)3aWMYl#Gu6+>9s8tP2jL)1-e!%BN%AWIIiv1b`@2Do359?E#&Cw}pgh_(|y;Bd8- zORbS!a`*fsJQfO$Eag%>%2Ut+P8{~Ngi^Mg1EN#~DJ*b#1!l?6P{atFsY$@x5o)Yq;kSE(eNlQJhHO$z<@BdCMwukm3g4XtM zLcn66*0aJflQ6Vn4CHtu*{XW<0gt^oQ6Kr|1$Uv=XSzj^D1?hV8zh_pTS# z3tMMm_3{&Fayr*GA_c4j^kuju^cNHQEgT_N#nD+?cDhY8%?6(J!5;hG#}8^lUVAP) z1%vpxTec7{feGC9JsoyMQUITMmJf_XrNa8N`@6J|_pR$X3wz-S*h~oKD(Pv*;-mt+ zXs^4gq79B*rN+K7`@`QJJ2Ro3`QzJ8(wNI*aWfZ+C%?=-4J+4l7c6h+7(i}z`zFjp z{`A%5QF9sTm>|m)ZpPHI{)9bL9|^j4pBoiJQKTLAHFtXVqYx;jw-3Z zMz(eEDf>&j@wI~7^2m9_)!Mu+pv~|UWFwGe1}C6AvMfuBtU)6Z{%G048IVPxNHfgU z@x;8eCj=z;z^5_Bn&}H{&aU;CBVco81z+^^wa$^46E0ZPDSVxH-iC2Q_E7+9kb!Rv&aR^K+LQD&GfkuUqj_^nmDSng$zkmlU@hJ#{830_t50;`s3($vi zNw7s6Ks2E!6+ir%LS*`d%XoVwfRkWifS(MdAVYwPX!IMxBOEK*C80BL1r`c!6qx-~ z<%ta1{3yIv$Jqr;`72XZiTO{~--R>T{@!8Oo3ieL{`0HV|BH8-s)O3-xk)u*<@j!( z(=!BL(F9XM{D4MeJ{8qFAfdEqQ z6E;} z>$r-46^_Y!ER^nta=G~i^UmEv^^qJm59cej~mWsmf;VNSz|OE{i`{qri=kV%3U<@x&pC)qi3d~`90+1nDA!!TU%C(*I+-C)4WYSu6c%a2xFKyP76=9p zj#z!iCY(Hi>xa3zj%(9n1sja42X@#T8==D6R2Ys|7yhuqtyr_2z9+T+; zUEu_T$Kw=f+g@xC3VhDqm9gg@uOsmi55j>Q_(F>ak_y^T3j-!%PcPnTqyqtIXj@Go z2;%MPc_W!JMN+BYI*E|+qke`L&qVYr33-Kr7Ifi9T9Ka$#5`0P(Q$P;=-ctV7UZ8h zrzK>pf}Z0=`6uf?QTt7{|F2{JN1ZrsVjSXeuUOgA!UXL!xj#dSWcdjBctd^$%kZ(%SZ*Hh8e_#8!Qv&cJHti>~;p@#m_#$S0ZV)@S|I5SS>A; z@c+hT7vavv= zxK%hlZ`G!Vl|DCnQt^qi!ON7x3(@@G6ew;y5rQXKP(h>F#NoKBVKNi8@iZNvxyX2q z^?K~`QW+c%hbPJK1Q z9;tT8O=rH14Xp3Rg-hW$(Yon=FH?>e>5ruU;a3gg)S6mhYu%m~O_z91JC*An;B=d3 zVUuy(Jjo*uAFivdT&FRL_Rme&>sEK{GF!3MkIvgYh;b-As}c)-_&;@7jdKh$Ee0_~ zSQ-N0K~ZbqeCuW>%1Dz1+EL>+L${|!x|k(~P8ICnLxn*mJ`jpy!JW)Y#fNDeC;{WZ ziB)NF#9&RIEA0AQ$T0rI5HO|(ik=AzlFw=1U#3hDC)%3kPk+OiX4# zz;lT!kcs&6(V+o1sw4ntu?rHBLJWppz9?4sEMICke}yG<(MA~%34Hlz!6-*$13n@V zdC<|P%ZXVGSAN4pgBae*4226?Pg9>^S>Zf9u>u{u!XJy@nt$-7FaGpUKZ%6^%9D|h zD?sek;hbu+{w@bfg|cBRWEA0$RIB`*B5)a_E8}d(Xd|YKZO_*9X!r2P;yy=TS zy~*}3`@hD12!&$~#v3i{@H8qs4;@rGv5!UzKWsBSBf!--M`?OHs)Zz8@Bm1`lp4g|<|^SEp4G~OO5n6Mo86}*la2PgB7Q977e}t$zPbtpyPUKThql$@ zUEcF3C|JC;FD{ee%m1Cvhn;7eIm|zPvr8N1zI|=YF2e1PcyG73tD%fd10O2spTU{p zVc*LY)MDUop?G+a3zyfSV3(gfmSfeLtJieAJ(4#PhGSjMKe?2{&)Y7+cRc@uBO1n| z5ShoF=tKM>!kaAbUDsis#m3*55KMGzSw>5_2S0LI~x1aGH>GWr!kA4id zME>62lwTzB^e3HOFP^K9ezD7XJBRHE9LIMF&g}kgY|;&vy{iNCpgxbti$RNn5RZ_f z{dHx>9v|eW@Dxma_);r+F!4r&N@+_@gh9cjay=Cn&v2k%2jglftrz&B!HRLXk{$S@ zNPI#hXRc}y%skxJ&?<;HVnQ*B%tjhj+toGI z=8hcHDz;AW0J{b@cy7al`|9ljws7H8JMp-kIEoJgKjvgIVPWA}APx&E7>Z)`mY>e+Xo<{eOM>KOYD@5ge1L1mKw0<}_T=!F?eZgOmoPQST^!VEj>u=dXBj zJW=MRdU^Or5F{k>g%?1wF(=+HRKx>Z(zJ%kH*72X=Zf)?l?~g6rG#)b@})S@BX^u^ zd=VFyc9OeaFZ60s)A+M=!cT{Sx z{F`*lSeE$BZ1wv6FB!J8vXywEt=w3Lg6*f0d;^=$cxHI+{ty$0c6ad~;v$!%NVcaj zeh$oX{`E3XxdBJUJ^P$iES?S$CxqlF|N4$0`wg6MLdBWxe4Ovh^T^xX3Y?AoRg{&t zbp8lO5AxKG+`ay<$0~5#6vwlbf06D2m_2;urufL#6u(KPFp&v6?Bi8 z{k-iGe8%(nj=JQJ58Ct7WivE8;$QBlaQ{3P3|(|_S1~aoU)scTwLGp$&-2Q|&pEHI zOKxI1MIY9BHluv}g#CG|uou zIrB0V-SWtR6L#JlFts9)vC7L@sybjCD-2}B0a8jxkztAfie#~45@|SCW95}c^o^Xl z4Cit8TGws&;n={PP#k&HdcX1Hl-kM-R^5ruYG7~>CLwnX9BGR--fq34*yad3><&F< z9ahIK~}S7z=UMP zYHRRWk`FBKi{g+zv0;!-X>G6qC-M)U1QAX&b5_5=^@oscqz5j2mRT-OOrY?JqzHr` z2oK>S3n|Fs%D;^keNGce$WE6baV062YoN2(EC!rcfxVi2DDU||Kq9jhUi@Ifq>Wrk z_ViLgNJv3Mp6rvV19Ct><|#l^PUMX=&zZCdz>sJNb62Jy&U)gdKYZ$O)&8?G+m>T#mQad z0otgKGh$|R;Hx}aN-Y$}cX(tkvo*emu*sKUe$nwg0ANBGZ;nNsdCC&MxCIaTbd;a} zdc3T!mr79Z=QE{y0#IMC59$Jb9XuLTeMRib9~F>osMc~gzs7-&ItJyz@-TN+iH;HA zx6mj-U?8&pI6y-~3MUkhGcO93|0A(YjzngX7&)%fJAPRdGC?fi(R2RvbDmBoo*Y}$ z#=yZwDYi$2a_0#ek`dCGB}hD<#D^>#-~nVt90H?%%THOc1WXG)j73txhU9Gyz2uQ` zZ~Dy<`%7Bq3C!+-ZRdG%_x+~_KQ4dyZy~SJ!roPWg$O#gDZ4Y_P+hGgIWc5 zPKW>dCY<3-UbG4S zQ?L>l7teh5^75+gNT0}Gy%{UpP?+O-droA=b1!&Y36IT?mCT&WmQ=@%&-P z1FNk6m)u3T>?e-OY%jt^uN%@Ap;I8c7+Bekgn#aRSXqVRm$k!k9980vLk(AmF#7nZ z5;6RYGxRVC;3$XZ>3ICr0EWR%E2KCzgP;65aI%MNT<~)6mu28{2+SP@M=*{7pIF35 z5QS3qK01mRSVZJY8#d%4$1m{>d^4xvqMZ5G7=Y4v(o+33`ug<3_PZNl0RhEwCvHw0 z(TX%a^YTNC=o;~_npj;|g!Nw<2{_)y$2n}}FxHi2pY@OJ6 z>6L^xo@1ShqA~)<@&-JCG9<^ze*=eaLQYPOm|LzS;Y$GH4NQ_+9BB%=2$Uel4S4v8 zhUFzFz~PI?Tbl3ZBAsx?qfJyl016xi=)y-(GD$d*M7kV@@ODSKR6e1nbT3a*J+f?^ z9oF2TaI()yDa#0hotFo(1W*+~>{*ozRYLr*xARX9o}LB5MIeNt{$k0=5eD1_zKG}x z4hLUl;$>z~3MCnmpv9E{f69;ue7YiqeS;3>LOhbQ>)Knax&a%YHC_Nt{P-hYi*shq z0l&eUh0(QJKXvNF|h)M8y}AqTPdM!GerZxeAYROOXtpnG!0QB436jVVpb9 zu}+FFzjCEXB+do)$r6vD+lUkg=B?K;iJR8PS+c3!T3Y5yhnn4%P9KdmW!m z^HuIcrJV?m{b?`y{m*m5;zYcES#WOrqv=epg#NPfp3J9J0_>waHHQ?1c!6s33d0yQx$?pnrxaKq z0xBmOMT+4&4a^Ba9@CsVhkl|*UJ5f0tUA>f%(3BfPr)i1HW4CEt%&W~i`6o$661RA z+I_ehcMn&`_(F9K^G5gC3+}tZ7Q+sD8kFrCSDi2z$2$%~jx2mxjNa~1TRL^W9Y19c z_Cn&tpjGM)+X$umYg=lz3KNMw=r<=1blTHrVt+$7R$;h+k3Pn7j@EnZfobPiZOL-$ zS+u}v9P|fwS$*3U+qZGOt-SGStbz~On(AEp{GwBAO%Fbs%8|Owsp70dN>kjUdXbJp z5^Ys*3UUlaO(<6OTrDVZH)IpoZHrJMVY^M;~IgkY4TuEzNB>ktPpn8`3yZ ze7w9%LJtu?@S+?EC#q7AFwllGCXEOMVG+pC+A|}=pVLWh-I&HOy zPNr35(&&Gxf821Fya~-$a|5r%kFq2_@Z^G@#wZN{%Dkv@;L$IOl5hafQ!d_! zV52y{nAI`4=Y?Grm|VHSPJEVTBFD7EJ^y24{&k%rw*9)@KpXHE9pwhk!%?o8fBR8qzlbtXDg9Me zt|^0G_45BB+VTGt9*;yHeWdF~d;DLBYiAQL6poTH8bwAau0dQd064I7#20!(kjEc? z$;AuBS6r|`P;TDL%mdf>bR+KPxllXZVcg8M<^&dK?MU1Dl7KjPd$>u z{Qe=_K0DfD$5i%erMW@H8Or^FYQwtIg;1Fm+R(Z+Hqh8@XYbi$t9zEI?yR0%)Kzi>L~WMR zGOuW-Ts}+>`oN7i8wN)k@+2AT$h0Qqh#Nes8@5PhE^#8KjQPUHr*y3nfL6*-C|toa zWf$#M&=x$R5DC{i-e3R#H^WIpK~#}Zuvab_j{+;Qk2KXyKOjne!5eW3K{Sz8aPo}u zs3W#ONENP~eZZ+?vaeQoG7KGLp`M!BC5lS+MHpydt4*ldDrJ`Ah#zs0Ig_J2EK4EN zL_iqNv~TjbFTNx>k&Qf&7JNM~a*Ah)xiFrbCn=&J2$dHZ5a17R>9d~94|0fl__Lb$ z<-Ao0{hiVkSIC*l{zWqWBwq@!isNNZ;#Q^wz9)&q z3(sWMTONOl>L`-`6bzYX8Y{pru@q*4B3$AGhGYQb4opltZ@I@;$+2SY88RWuEN3ck zN+g^?3YIcp9Ak|x1e44GVE>~68tFt&WJQPoK(%NfA8Z99JZ+s-P+dW{t#Nnvjk^=v zHtz23?(XjH8YH;8y9alN;1Fa(fFQv+{P(`xd(K%;U8{Rlt%vUFsyWB_Mzb*qi5Bqr z_n3LY*%PRCrK zj*=JQS|vzyXDNZC1a2XK=TE zq#NiF?a1%N;HxsU+s>Dy%973n+*eQ4pbl-1JI{gG{F=3M3#@n<{_xeb9!p}IyR|(> z!42nVif`!&yLS60CpW4~j~Nw-NM^z^s90czA~ULgjXqKIz52JCK;AiqUxC#W``pOu z#Yy{dBae{CdR>UPb41#9<8uPTd{#4|#9ZliwHxZbzGwxe9KTtbuRvM{0+;9;Cd)7p zc`7hxtgb3L^VFj$7~{83rX^{Y0vj*i@l^Vs4E7`XM^{AzdMm4}9iZ!PZnv zBsxQAt>9&n8KnW&+olGmNE(&`n=e*`Fnz9syTw1WPvenZF2$)yP<>Qq!O}E}S_sjO z!5NPQ8$5-vsJk4k7N!|FmT*I+Uw0Az9xQE2Ff4EoX$h(R^MMF*9(zmxbA^AMBwyX9 z+cy7*dbdhiyi86hPjn`0GY$bdB~%+C8YRnnNe-DFj-VRi4%YCHD(`+Q9_v_dfo}H$ z5+wv90cQ7`*wPL(>uG8)uOUhi6)&00329DGZ<3E-v}!r5VaV=M2f1JQ?{8JHQwhA4 z_3%*#(P_-4Z+vTcoXhmtjdGIb&veckU7H;!qMEIJ6(zk0mPm~#&|tS%bBI!WykHr> z_?Tnj=)ov6LMD#b(QrTH={F*1sUg!aveO4mWP;7&B#Ga}#TiZYwZdzL1gOMnP)8FE zmnw3uKVpZKcE^o3#xjOl1n(n}pYS#UWjwH4gWMLwOk$Tk& zs=!iPC(yyipuvc>j641eR!GpsJP~cXfU(%sGeR(z1=k4DiTM&)o!<#uUiHzk?7qmt z{Gvg(5D-g4BE_4@qU=x39I-`hu#)c0Za@thjHOUe~v80&9{P<#m{yM!2+l zrK6?wGd)CMq52joTY-wbj8WfOk?qMKmHls;zuMGxKVvQu$uPqAMDv_o8%CMf!ZN*m zcq-&%!09*80L(u0auXpex0#ChcZvt0bDQ!{-}#aj)Q04iM(spRm7FD5>4ZpQ`tkqT zsZgs&sfr#dn}>M_ve;;)+vwQ`b!mJ%<~BeH)e~tM`=Ju3ehme$kbeEJ;m^i3@AZx4Lod#Vx)m3-C@Q zzRh9T7Um5ejS|Yoof$C;j9{#ss`RBCmgge#%!2p9NoFI0&sJ|7$DXEiR)t8z;4z1H zj$hPPk2l8yk;mhrz}&(DB7vw-fbpUqB9kis?UgLX^n@~dhN4cF_+vShhNg6h_y)#s zF8c#2Rbk&IO=$)_uLDXn+EanwNi|jzG*iW1oDA^gj1cws#(gx+8fp&LFq6HMfZo~6{3^WBp(x@LCARm&8AiZvw6IxBPE=K)n;kr-b&-o ztHjv7XWGJVMWw9#_+wxRca68HA=Ts?w1)8|BZ2w=Ud<$J(^-vwav^8Ip-apBt0*Yf zLkQ2&`JG--2KR?MT46O3=?S4B<=Ih-o-i=afXS zgAg2^_&b&{w{!@eNVq2^W;PA{A+n5&;!?gWt9=AWATLjb$Q0*rX~~@_FZnZE-dSv8 z$pyCwC11rFOAycE81=zRla$FFgCk(4cZAQH5M*6^Jt+B`x**^36RUaIhpMu>c)H{EllfV|)BD z@d-M&g_~*ZiKu|^wCG|-(M4?biz_KCg1RnSm(fE*Ref1lWI5YC7vTxyKA!$bxs=@k0KSeiHoHlGV z?C*=NS~PVhvfor;gj&g#CrE@?)a+;S>T&%rrLH)CBPsK@ZFScvP7h_yAr@s(?oG#D z7}NvI)6k;jK74(ovIoV(TEp;uXes45xWRU48#!$FUa;;2Yu4gI-SDiH!0`npBR+4V zK5hv5S#BC?=U?JgAA-0pYh8%;!0UfCG5Q0NgA-kjX9xI%PS(DA=zmXKt*Clm^O#|; zK|<2TW_5JGyeM>pjB{~#DbTb3nDFHPGkC8FP1uXFik^Wn5x6Cd7_Zqm8kt#UI=d>W zpue>t-Cjvx7&t}2bId4KM7u@CI^xuTbdZ9B6og`QImF`R)og|%uU0~irqjH56BMr| zh>`9N9cT;zG&~^hn}~+zHHk$4yhF&SqRY^18KVU*B8Ge~5MG4p$19UgAF+9^$-@kE zjz9DkuntxF+jSq^KvyEg(!BW0qw0D}Qgc&T9L|jDP?L}^Kxf_X{aeCZVL}Oeg&qyf z<}c@*7X+F)|3{B*WtC*cdFu)YtOppdrutI4w59*P$v zH@<7ENu~JcFrkY$;_$@~^spf%_V{mP$1(6pW-9!ObJT25O6>;5-KaTqKpnD$B}*!1 zH_Mc81cAf=*P~;G&g75;q47Rqg+TP7NRQl1b(d%St2>YRU^o2NY0t5r_W9oF@>?rL zHxXfGc-%@CcweP61WB%$G!J?(GjF9zV-{~{L-{T_4|nC`6$r*MRV2KbPUI-G;9~h) zg>p;jBw^Y-OaF^Js$1FGGc7QPTsN}Posf3YBrq4eIeqbI`=2uM9;Q<~-gCq!GQH7D z7usuQ#z0pH7Wm=BYaXinBWRY?R(@U(P1r$$k;vYN=Q?bbH**swJE?DKoU7?!ZB%I$ zc@nZTnL)O-?15w|VLk3xbMr_)yOM7ZFJs}B!eXE|HV*BFukD&Yg78Hq$G-pS8j3LR zn4kkiOR-t!xqW?N_P?c2yyh^c^1=Z;GxQf#4JYPdFGqP!0Va*60SrAi?BhDCCCN%9 zsHe&-d59aNinfEnGE{Ip5?K&Tg@WC*MN4rAv{i2|E18F=2R9%MwbKo{9`60WIVzwN zNvVB_Af(iEaK$}PaOl5C>7Jqln`7 zb1$*}Etow9Z0%{fnn*Ze@t^*k>b`9G%RQ@|03L8?(KFi>hYMN|0u`6L3*w78@*t7Yu528AGm{x(9%y*0%qKQD9=8NFaSqFr=d5?+{T``7^P+|!>qtXJ*4Ms^eac< zLA1%?l4=#!f%i-k?up%fNxc5#Zz|c1=nb~;2D8ejJ0iW*;2Zq(HwrzfMn;kI=DD=H z#)Zjni9;w!2}sGO7^B<9yDklYqW%-gcsN*LXDob_5uOB$^Wo9Z->lZ%hGH5xLg8Au zV);Pc?z95+TAisKo!CTmaOAzTqmJvt6}*D){jnrFs}-olJn%Gil{0FErzjGJObcu)Y=oH4A_K2)Q>03M6= z#9{cOn~mn+AqpFz;id#LlY1;5Y|8j*L|%)=Ox5$SJ|@hLuC@``Pz1T@kSf+Qa*;&V zeOX609bz$Xs$8J?ps)>svX;W0&MjTR66Y0#-8FDRbhFm#2Kmr_0|m7%6vg3MCG7Dh zw`%2~#1aDOeK84{I=Y(7;mftUtIj3=vRb15q*q8m4v$)U3j<_BJYA4`5=?6^#>JnW z-g4)E(|fULZH&avxDvjPa++4 z@YAgu_zZrWt3hzccN?F%)5VvR#?Lpk;eL>vU@HWc74*~l+ytO@T_qOyG;ywZJwnnP zOLZ{MM_yaZlbE`C>W=+2HG;gfZp-kmhxb{1QnP^^5BVfvR9;~ zAXr948dd!o5(vEJ`}f#h$HGn0>(ZA0`hnVk`aaBZUR3e!IiBR-Yw$AgS&{#~F1+=} z|K`Bc{h2d}JwOgJ#{s#sNv7ut$EGL_D5cBL(q%9%b{NO!LeZv-^K9*znSK zt3Gd@a7-M3_fvXc0wO)}5Uv(RzCwI|q9UAFW4fByY{d8H`l=F5M5xcwq6pc@KzJ3t z#ZI5L9*4m$`1?__V$e}Lj~-1I!d{H{m(s#)eA`!j9C3|<+a{J!2>4+qOdkp0^ zqaW_sgJTWIsGzUvF;7 z`kp79Fhz1S?y1-|ivOF@O(V1b}xlLZHf>OdYv zQ>Um{@FpTEfXn#+QQ0YV%p9(;GZ~`c(nAXP1lkbNPCx2TqKv192UGyJ_%XdX6#5CY)8dqaQq`=|1#-- z7v7J#;({x`!{tm_&6>N5@pS|x<|kd{!s>Z52qP9VdX#xqpZ6{G+|k)*ynk_NI4tSL z;OOLcyz!tHk86?9?`)Nj7SH1?sFI?stBj+jpWNuk(PfA1=lA#Q`Bq<@LE`Gouq$fs zlhuu+er_4cKkJu!aYoY5zPxBui+kEk~x=`irHHis50G!(!A- z5{~(p-`&>b6=jHAnHc#X74+wHn?LYOYAeAG_UacbiH+C5b>CHb|AzO0(`WTnjgr3K z<+Q_R^IBWM+H3v8Vh&UOaxaRWk(d7Y@O57Q#nS{~ZUDOGn~hb{MjHFisl^Vz;dA-9 zIeA#-2)V?=ypBKOlr_ShDJqJ$e+j91j5MnmwK)pzB+#a5B*ULE`|c5<0$zCaS&Bk9 zM#I*51vw}aPj0@8>=nR-ztE!F&DpfTQG!`qXa9B?ws%T_E%}gj*w;-*pwIj@dkBhD z2;#Jhw;jZ$eXn<>HeZy_)Xs-lh&I&j9?tdPFltQ>)&9G*hQS2m(qr@~)mNhHbYv3T z>!}Fe6H5dsyyLU={5#Fz^!)TeLXrt}QCyU0nJ@WGxug*>P@N)QN%S-yyNj@>;j{#-0;IO@`8T$#&uZEno6%6weMcxvqY#}WZJfv7}ZG| z%Cprm!(u|%FCa;LvoUhD@Cx*q~$gB$&@vTt!X); zG|QHSB~^yI(st^1$9>gsVn++;&!#3>`mKnooS%xW@+*xuvU+XM$-u}F$fQY{*xAx8 zPbOZ$GDXSoE9U|^tbwR^LM6IvydzWgU0xH+ZJ9EJ7E_Q&5Fo|b5K$T}Mn*Kw>du+A zm~073%YRlmjf^tfL{z|a$|>{>uvrUhP!%a(Jlrua-TD5}F>1WhTQ9*Be28o-=hZ0z zRMR%of^|Nt2F$ddjVw||ZNR;px`)S=ctB3&LU52=$0uTlNQapT=n&OyO0%#Spov#H z83dPaJtA_J7#*XaN5Frwrg{!TO%OZ|l%{GC`zi1g`4E{peUyi*dg8O$anEW2cL_vD zNIo{GDll0H3*2VuFXlR$b~#iK{sZ1pPe*zb<7me7n4h|(&d1&1wY}_B=yY1&zwvlK zd2fL1O?cg|8Fn~dr{_zgYFFyy(llzVCrsT_;kmVm`swU<&eFf|=kqH!*U8Yo?R`|~ zL*4JPrO<}u{atHoTlg*P>Sx61c4B6bzR#^_&&S_s2c?#+ia$LAI|4yQe(yC#j@!O8 zkM)6Qhb`w`ZTx?Pmj48O!fu0-0-Ev%JlX=3Auqpb%+8`z&40Sw^it-fC0mYys&irW za#r9Kp{CxsnyZ5G0+_Kw$ZI5jYw~jh2fqr`0wn$&EHS<{J8+&KtejCENFC^LV<$JU zT}`p|gkZvDhD<~i!oU?+q{N#2?t~Aq&h##8cp$c}!kJDw#P$m52sXl*ns6`K&NTEd%fZ5?>((_sKbpFQHL>J`*ZnMfUe+&I@m178Y6bjJHx=#55XDa z0p5&#zu=5-fV~CT;P>Q0U;8zN_M>h_Xo zLZxsC;SVh~cbn|C-@o3`5M!N8OdI7{sLZ2jcAUBO3)~i`h||WV5a5)cmt(s}hwH-| z^aIU<@M;V5g*R7J%qli&-~2;ezpn-^aW_YATM)BQ=V)!anf3#MnmwrX&>tUgS>Oi( z_vA$t0(a3aL7bz`?~vc`&aWc``vx-^GHZy5gBsXESYijt0ijXH^CJE2EcB^OKVvSXFcnFGO5ogjm3I@%+b7GnRbh)tG?>S~Dn z4^;`I=3jBhsaiYmd(cZZzcSf)SW=zuj^6zkV;)jKK2F=+WDDCp51ripq%U0D@88F_ zYeWU8WU2MHTC;rd_^SlL`h=u#R#nO?DytrIwTh`UES=82{z4?4M6dPRCr3aP@Mm4^3$nue_Nx*8p1;^WhU5r)vjP}4cqS<>{q&RDePe#pZv0mCO z*c84?r>l0WR+QJp^@4R(^!m_raT+1N)46u9fH#`01TE(FFi=AW2-naaHRy1!EiUNa z*keJ^XNxX`YhA#NR#2VbKmJ0;Q{k7z_BvSHfsdR$o6mcipcN9|d!u&P0{?1*KIbCA ze-Xlq1fb=s;liMz{Gj=s?FU>#>x%gThiwA;hHryLSJrD%a^g?+d79kkIq zehdGQ%_$@6M^pC0EeD^zjwWDKOQ*|{BY)ho{3=y&{7GYg2UE7i88m0Pj8;L`jVwDF zqMnXgsBpqTd6}RCKc9?=$397cm~o^o*%zap$Hmg0OxI%bm23|paKpA?c)vZ7HF9@5 zxN5epoc}qf!$*lQy5R#tgl$Vvh*KH=0XJj0J;xV)Gz3ke<(+zTcv77C;Vdr)@ZRsu zsGW^LYu)UO!1>-mVw_c(0%5(I39m=bzqQ$UO~2~HZY}}M zZntlrlB)lW!o0}0JuVf}Z%cVfT~kARBQ&QYJi1I@2P%cCtXm=$Coepd2fiw0XD>yi z;M5Z$zC_)1RQHoY(&e~#7U0TNlwf79PoD^#THib2MkK~&F6Me(dqm}VP%%V#Z%|1P zCRfo(-$?5Xdi71J5nP3#RK2J|Nnv2L7&aQB)Abn}Qp>0WBkeYpptQ|*G(hTBXndC1p>yo`AWbZe7>qQG0>N3^`biX?|H*=r z!o(mr?iKN0c--=MQeUvgJMHV~oh?0r5K&D`{ zk(3VUI27*5OjH6=ww_BROSw$^?FSuYE&o~ZN-g9x_+C7hIjw+uf!J%!vusEI+K3?{ zIVN|S5eHJ&E~P^7mcY8Og7gh&F7}P{Nf-msnFAA+oU@2>7;rwDC9ltd7kSpQuz2LM zo2AO^eM#Z$z~n{WjnwWrSV#;n zb%tD;b3Mh*j}Bq{5N zBdHG33Z-r4+(AsVlS&$QL-!dp^amb3hXF+IHc3 zcz7A&P4w(Hn_|&n%_F&f!#}$vPH4dOe`39huLa=U2MR0@NipOLP-_(dq>G1clKQG-Qb90Sn_wMh=>y4lQ|7)Ji| zox?|UeNcJuw772FHLB~;&W+J)YS;CJ&0=Z875W!-~y;~T^V(i zcH0WpL@x2?X6T;}t-llA3SEkg4WbUyd(N0T*(p2XwcN*tBcgp)+`Gz{Bvr}yDYDlZ1V!QECW6iN?1($Q@mRXD9hs*q{0Wqp)SH8U`*5q3c~tiL z^6m^$_!17~c#azdN;okuFzUweMW^?Ym8c_3Ve{j4oxn+! zxFfizGHI?e(u+?w>%D#E#7};<$NXxq%r6+V<(n&F}%Ot8CaJ0K(Z>g96=ChXO z4azQLK^Z2fU#Nfrnqg^kBk;bU_UAGw<%>7Cj(zERNI~kN8smnN%$JYtbR@xX;`pyF z%wW8HN*m6+0VphCsn{3N<<<2>xUJw{yW)j>n2d%*&d0sT71Woj-KpjE&T>{HN>Xiw zR3^- z>7R3Vbm`VbscpCzg|ZT&GacRi@XF*)3>5?-yNF-u$f7b$O68tx$yg|`QT*v&p~LZ8 z4X9j;Q>x9YKoeCn%W88FHh3kQv`e##f|oaS*o7+EaEq*W`$@Oms+jG@N zHv1(FE@QbDhoigw@*Z&XE~%)aw1lu6eQv4Op)y*$nOEw1S-?qCx+AR&xjnOW^c~%I zO3Q4S1rz1XIV3_)Z~9!PwiRS`hmj;Q`odp4#cF#PO5oqsNV)~pf658y>#nW(-)GPX zeqW`&T*7={fqtzOMerh?b@qR?U&5$qqkWzFu51@kMbZ3IzX9Ioc~1_h24(m4f2RVj9+4WQHEFF2f%N)h`d97~N-oLN*q zPVjoFdJ0d?;oZm1EYuwl1yl~1=t+z87Hxmu<9T)VTc1t>$;J9zk?a=#ApJsu%KBZ| z8QEQbjM98N@?V$>JQKU>n*VUz?$I&|UYR*UG}?(Uli$&jIAlf0bXbe15-*y{ za`p@ay=7rzbm)(*HB>@%44(@4`R@8UweW9c{oIZe_z z>=O+huObo@`F9Oh73`^r;Q{6xkSXRp-vERfHgf@I3*`%}6`%D`?#B8sl~$nu*JGJ! z)rBeFbW{FGlXxClomBqG;i}!$d1AP9-7EgO(jjS@2oRr(S8y35ZQSp@uejf#(b)PT zxSPSe(z@xtxG(U3b&#)V&G;!(GzZ3EUF5i~8m4t-30){1FGY|T86qrWn8o#_YG5~u zy}8b%BQdU!`(A{^X%+LP1GuHAkWKM_Tnvn&7c0qoo5v)~y-MZw>YYDh4hSW;gT90s z9pDbMk8j}?ThUn-%?+|ZLo#9kpc^4 znY#=ZbQ9-M$+`-OA~lM%Ub4`-Hgli@Mi5=HyTK|^vnCwK*A86J=IaWa1j_&)7cYKs z;(0vocCe^)n`O?>Kh+azMc7dY0U|`%PiW^Qxb#RPz zmNr_}5fM&;gE)sh{%iu3xJC{oLY2f7-l^!~$b{kEQm7vf`uhu_-v&FDGl}Cth84H)BbnfU zv!tmn?G5q2wmy~sH9+*D{He(d9+-~xF6bfLqxkebHpEeMY+IvZTAM;~Mxq5pxzv&6 z0-CH=9^xbg%gHup9J{Z<*NEnvqK<~M{KBhpXdW~#u-yNCuGBGY^d8G{>10bcf%*9w z^!&aG>(sya@%%4nUXGvneOb8G&6i_Lu3>Kl1Jz*S0;`4LhnPk9)O9BHskz)!7EAxe z+`x-%j~c4r;elsCTKj!&{|8u?xg|p(!b|aJ@1pc9_3YZE4Fg3M_yVK zUG$=HMAAaP+1!zPSFD}tKCOuzUX3GRtE8|=*vQZ>hzjEFw<8i z_%K&?bRdW7zwNYWnPNM>Px-pOH>rU14iznJ;0-P-xw6c1TM?=PhL~ortocquUQQ`8 z=B$J5jTq@&M2i0nahQi^76Z)HR?M7sR*oUeOf^SfLu+ErQK)vhzm}UBz2d*!l8$C; zomDrM(ZO7B<|`@@?!J^Wl@x!+SXs(4PpYEkg!Hn%U1wWjsR0ekR+_m-88KqaKcjs_ zY`Tc2CEj9p|Jh~c_dNN!#Sie4!5#bd(iSE=3J)?LuuJB|*2oW5?`3K8L^!L@z)D#u zW-xssuD@O;uRWNM&C*rwPq5}SCI{kWDuhC}WYM6&2`&QaOrE=x$z!CNnu+BDC$hxW zP?{t4?n{1Nf_u<@R-;snCQ{b2>j*MaQaV)(Cc;Tx$+4wl&MJ?w)q%1-Lg#I8aW8?B zGJf}mq{Bv(lQ-Y^Kau6VS+f?EG4j8~`aZ~y)1sc2s)X8VFzXcb^^*D8iJ)8jMNnRPc6d%$AXsoz(~m(HL*JL53GXQoQH?s_zWZ zeLVHmKpKQoOI?BY`AqS8H3xBa-LnXxm9PxnRtv%^ma>*0k^Y%5FS=;p^Sq`t7&_dj zQ4iGUQXk*1-X8+%p_FTZJ3!Z;+1=Q*Yq&00;19j&Y2vj_;(}>Cb?j%u2YScZQ*LtVKp7hQng3E8*Z=xfGYQQA z0Y{?XU33~<zL3x*$9z`oco^+ia`)imVAj@h{{Q-m%k0pKLeT60giXbRmY3L~~Y&;3t=6}uTzb-3m zW^I3q+oiSTrFZKgIxS%(CMPS2Su}8vbHv_=8=TO zOsk8ou{|62ebvGrlDl#wc%vZbEWERR6X%D#-bZn{^i@j0v4B8-f?`!!nU2gLnGW1e>Iijyral`NCGKoTCG)2iU4ABFpU~q zZ(VC*^S$?zQu3V4OQz&PWuiJ;^tKn$1$XE%FHyKA?|7tvS-za%*y~7y4qHFcCR6if za@Y>5wBC(hjtkz0QxoQ12IX36_~S+p zREB=;6FqtOD6a2tW0;%pqNEJjj$jP#JjO7JIf(dZXL3#Rx!5?3nu!T@He$lzf12BN z%n~O(JCZeuP|lVv7d*as4X5W2pBctF0mSOxip3SGQ6=@kD+gqDu_sDsufi~Yo5r<{ zxnuCGTrxN89m=T%USH(&cxcphNGyCtdec)5^+YEy)d<8%PLjl3sr?ue^+aiICEoyn z(HXtr6GQttEr4?J#a=&8;<5n2I$hjqtO zwZFOm73B8qE^bTC2|gL3e%lQ?GJT!E76gV<;5{1pfW?+y9_09K^#{tok?3Zu(>tk5 z#8JLGqmoj=GU`&bXD5em>=KSa$7u!B+7`HyIT9l*GHO?a*EOCp35WMO?YWe!vPVc` z5wQx$I$QpDrr+D1KPO|DEq0MtxY`i$k1wWRJ;JWsicCtp;gqsG*-@gZ2w36JXFN}g z;&xPi+F8cRY=xow<#S`q0E(7Xf{(VeZn@Iz&h{Zgd;7b0wLG@Qj;UxlB7sdyQ?QK$ zh`=6?{d+k3TNwzQqo|~tq+IC%U~1k?As}ZUv_*czC8r)TxI7NACWfolzs`9EmZC{Pu{#m1vQ>bDv3M8Njuw#C$xE@@?RX9{c2KFkLTibiVg3lXY(o2<79#C7d}shvsXl=!rxO z(@HE@T8!(Dww`9bEIo-;`!5Z0l%1f15@MR%QV02|z zc{5VGAOiuI6LtE=2SjjhX3uG;#tj8W!`;)}>bz>6fzP11^&0rw381{45x549MH}5cjBd4J9Z(WX_$0&I$~lv1Zy@ zaQ$U6a(Y2yA@=sSR60{DWG`pLt^0@f{rlR^d$mwxF@A@T@*f19E_HYKpl=jiucK-N zgLJ!m)J<3YsGjGVBvcqkg;x5qLpr*`&&T45ym9%UTQtg-&;LYlX$BO?=6KT zZO>nb$^g9FFtU>%CtXf&JZ(S;^Fc-{&z=~BFVqm<;q1v9V+Q}ff&V&s=ljBIPvi!i zk literal 0 HcmV?d00001 diff --git a/public/assets/images/rivalry-icon.png b/public/assets/images/rivalry-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d177a7dd3decb739ec2d74a163a53ef052438ff7 GIT binary patch literal 5107 zcmV002t}1^@s6I8J)%00004XF*Lt006O% z3;baP000xJNklK%t00D9DOD_bY%$ak}eCN#EyZ2w$Ha>rRHOsQohAqpCvDQ%$fH#mC z(jhG#R#j3oHATuc*8Dhyz#nX8Ce3!T#BSTvtY;>BE=fwyfPQ(dmVDm6<=OMj>+C*d z8I8{!2Vm*x*sKLeaE?#E+DJjiNN3Svf8*^3=t%(mY+>YCh@MC)rBBzs>#I-CCO&Va z@pk~sq^H$=CP|?hR)+{5eGlctJ-qVkFShz_Tuq4zSx6bY?>tY_p6oq zDSP6nmtz~d^$TE8x$##73|lhVX0f3{of% zNA2*FUWs7t_1ibG$^YlMMa#X8q}iNT15<3fnB96uffQ>bJ()EKCWZqp{o z-L>1E|4cM>XxA@e=$L7oy=m3h?6hWjT;`@c7rnpm)^&96qd0*to2GZ zd3)uK7yo+Dvg=I@7S&syy=gVgdUBU!zgS6>hHWsMVqwH*Q1pz95{+qwap7_Tur)f)+nUvPQ|7)x8`9PMYc-Y6r$SGW> zhzBxK;Tardpi+hCD&>7AzKEvWk3h+bElCoAN<-XUX45;@k%wpfmD=IXrk(zjFcD0lrkXdcnX%; zXVWU6ZIMyTi*uERd_Jyv)b(>crJcBv=$kSZSD$wkmc6E(ZT=ia^S0;8QVXp=Ikt*K zoOXSB*7Bf4d36(yyIGTeM)nG&0!!*bj7IteN2*MU7IpC`aiuy}J#O!K;Ub6kTv?pV zR{NoItH{Iynw?YDZYs^0e<+o+ z3-SDcGbO`2(!?GD9yenVuam$DwiXlEQTBC_6FtXS^J49t=Wj+VSy?AuE8V$V{z}?r zwEd=WYewSWi^00Jma54k`|f-GiN2-Xx#k}odp*{27pmlaD3p2CcK&e|c|n9Fq#CcI zPA}5W%uU@tzVX|k{4dwM4K*;+a|^}2M1qq*5xG*i!yqQ5E=~$)fgc(qc-Wez&HeDX zuh!mm{#3P^d_8VDUvS&cJuZ;f8-_(Z?x2USfY z1JEJwbLZCpS(=@ocxGU+8p^evsUPT?h1ax9ZC}@vt8h(lGHf_pE~}0@o&a&&EyC#` zswpdr3(;oZ_FSvFy!1{i_-WeaflaD@l+q{1l!m;wwMafgCwQQ)Rs|gN7{zlv|N{c=5=)rr~vIL$hEf0k6-wE z@wdEy#0U&@oFX*xTwN~nr)E99erY*T)1VUyr|I?=6Q zi}H?|*zBr|U+aghluX(ZpK3}IrTvgP(6AGN(oz{>?ai#RSqG#(k(J;;voax$#8t40ah< z5Cfim{MK+m$-)R&IuQM!jcIzl^gF1o)|@|7P7VS_q>7vdt0=rdgFGwqhx}G`q@z zPwqnJ&;_HsI_IG#f$HHF-MZ!3hg0*_I6Hg!?4CLNjx&R zZeq=rIeGE3j99aMo<8lQ0Y*s@O?U+y+HJ`2Y;3h-R9 z?!(xoj^(8{sKC275d-})&aBzJ&uXmKmUF(`rm_2mljh*iL<3Q&dx$J^{o>5$U4juxLSX@BifzJ6N%!NAd>an)ySk?J6L<`P zWw&^TN&kSSwLVbN!ACzpKg-W{KvBO^F@Mgvw(}eNKWJ@oD?5@|Y*2kJVes-4n{O@R zOp~O8`n}W~&3ef#av*A@z)_e<_rb{lMBAXrNq97S8m#J8uR4w-N)qj!-O2 ziYno{NL_Q-JHT{|fS^DKsO1DuRa2gnVwwg|$`%dx1)2F4QJ|hGft4gemM4=uP~}l4 zjf*AY9YoWeZ`t-vUB0Jsf`6E1Y`KhPSok)3)N6a&4;`!bx>wG^hg6sj7M#%lE(u7K z$b}N+N!g|wN5U`z)gv}J+wr7q#qmM!c_w7loPaoj?2L;}oP;0NZkMk!H`t$C-=tVJ znElyvjZ%5>c7*gfiIZ08C!is(I$@?mUdJU^v4IZ+&P*u{d8g+q1bX!4{Pktj31!3L zkwcRHxI1_$Pl_v?6Y~9donF76{f+{Kk^XCC0jvVRQUJ!X9Cpzu<)pX-X-|d6m{K?2 z>k}kg^3dt&(3fv&dzkNV%=^z{QGLo)Pjy17W2!H4LBYot#ta-b%C+jR!(!fCedk?Z zz%AM2mc$wM|J=rH!#KQgn|>PoBuVZm{rvhP;T$Q1P#_gH$1Q24!lYa^6LIDWnPQfL zE7A{3U+pT*D?)8zE*=M@f=PwPn9||;Sc%Nz+&-^6A@P2k2i+?tkAWLtMxg zDoYil!mezeg_*p97`?i{XvuBas8~j2n-_ z5fDQ#5q_3rr915D^|Qm`8yq7Vv;i@_Wo zLtm=4N!j9^f+#;!THX4H8!dk7DvBe4L;%~^I1B5yhM7>Flx=Kg1Dm4HRAR1f6Xhqh z7cVwP+Q&1PnqqumII#7R(gRx`3S}`r5m=m*12*vB%IO-CXyHR;>?^NsRM&w^jp^E; zy#lxxCQe$JMgOrk7Y~5?aOsz~ekmS}`?`u)KC~}@t)s#eu)^9SL9}lRivyT??uf%d zEQ&EG625W-6_rsta$hhI*+;jTS^MtthqoUq=nfG~1s3NEV3z<`aF-ln*NGyq3VOOw zU3{z%&yV!uZ5R#1+GzA(`lX~&{yw|9`K8$HsQ%Po(NGT9v=6TFYGN?rD5uqr=0}B; zL)U4SOsi3S`npFh$$PJ8+Q{ynz@jw)>{Z-iQ}?!lvattzoaksZ;Z*Kg>5Y?fgJ%dGS1T4F_em3asQgZ zqCwe`=Po~)X2}W7KIO_!>O`T&yZTL3M?0<*tx8gq$1*(B_&0?#EumuYJBdzW+O3M| z@M_~dwaW=Zk*4-TaecY@rGt;Y;$AkY;s`qFIz~+Ii(mec>rZueDi3P5Wh6ptV6jk$ zh9Q6iKvWmfyAFT){9|Hc#K+Fb{U2CcTl%%ZKfgtA6w%IoIJ2m2{2k!Hv8&%%e|Y_$ zN4Uzxg|`m*$dpWi%rceSS}vssTn-0M!E=N%QsD#2A*V0g*pK=xE1#%UyX(2Hyo`dn z5&zyUc@E{2E|A);HI4Q1N7)XrJ~ z>Y5o?wOad1rP>|9B3c`O@<_>6@DYnlqvs6p1b%{MS1;_;>&@ULowuK(MCj6 z)7q(>$nIU-^)X^*U@b3QT|0Q_vbp}~D`x-7hFMtLG383f;iKR%HsSpm`1gL1k@7-^ zbc(jHXdkRpIy-&4w4wHuCmnWC&*|V!YBx8kAKT6K%)p`(zM{o1LruNbGS@9{o5P3J z%u#@MU}e)RE;jI&UH(~K0Ro!?rwj2ikV%_8v$i!?@BCgLAk2ihi7q;!u5ax|^|tKZ z+UvC+)7gQAKS^`(?oVQF@$z09d#YA#nx&;J!^%5y?3UjXxAX@@n-n6%cln_wlh`#W}kI|0^qN`0Fz& zKh1tLyJzmkVSe$LJEJCdLycy*O^(W6Q~WS_u3!$8$7^{B-`ilPV=J$Em5Ir9hdRI5 zYW9At(@v^=REAHl*1Be{2A}n&Df5@ZZ1Bs3;=#FspM!r8Z2s>IIm|Zm%5vF-Wdadh z0uE%PA)o808ZyE{8Me|;Rm>?(^1qT{ehsvyu6a9Cy38})UBKQP%ttIRb|9j;!z z6JKGf3IDB-K<_Bcam1Q{2xx0x*HGN(LPgzMcP6c5>-p7|HCw z(%+Oa7y=@f@}$VH53Iipy-cLFA7zFQt^pv24fPvR+ zW8|8e{Z#82Y~??rPq(#UE{KJGhFzgf&ZpV?v-cdrKf{`3WziZkBjw8~lFP~T44e4( zS$q7oGDFB)l0Jw9<5!eK3{n!t7&8>9-^&h|tykYoyR&9{)WI3=E2lw73ck46NPDyA9&ImuE(uE&59XZz-Z6 z0s~VQkNjx-76yh!Oh#Np%@g*-4=ICEJ=HG#UKH8Ev82&x+LE}|`HT2rV z09-UU1+qnvE>k)ZdC6BvnW(*-}zhK;^!FKZw&UJygO=rF-qleZ|Vh ztwrcI%9W24CEWxh0Qj`K1%ibT@B{isyl&ka_rT{uO~-DTBT&}=KEz0X9KGHM#DLpr zxx6}T4raP)9jcuoMS5k_5w*-y^kj0Y3#mWluvJ!z(W$fg(i5Hk{XUdQkYlRGo8x6|Do;d2$?TLOdRJJl zhic&?auC#m{lxs?$tD{VR7`R#ENT1d5%NfI3RHI0EiTVExuZVzK7s7(q?_u4X!LGX zO>~RJvZz#UNma6kOj5L)G?@%js!}@)oU-%UbgJ`FUcZN{hp{nzQ)BNF4KBn6@mZxL zhJ7RG5RgYGdb&Pzu+`d~2{l3B!?nJ=nx!7Yir3hsCkG+~kslucANaIth9qc{1%C*Q zpiqg_G*5{MmBvC^N^IISZ9Lu0U%i(srf|`$v#0+%YMIk_FAjzc`nLAH4jxw)uS8ApfCShl;oWfQV3F; zUrG6II#@AHI18IPRu2_u86&1HUc88d?|p4=_XR>wyN53toA#@6@(&Q@>5W|)p-^VP z^x{+<&W&HX7XTuP$dW=S{4P|*wM9)fluzv*}pOg&&iJnGd8E7564JwS`4; zi`-UL%W%vW_jFA}IHf}$`Awe(JQ~1*x^nK{9;Js%R$S1l>RPX#=L=pjAl)ib-9@kKkN>Uz zC$|ATgROTr=qWhYucFWeNK>2sq@^Pv*E@1ZY4E@RPk3k@f6;;>5QtAqx!QQS$rc^wr4)vVR0+NLf~uKz-s`bqq6HgA*sDO8OO8F>rXc%R++9! zB0D%AVV(Bk3SU_9o269jP!*G5rZaVM+Vn@^6gw<8yNrmOq->hXZ(;|(T+zSSr834vDH2q; z?bX;7Y<#s#sO}BJT>4qZL}SXKR3=wRFyeH6%7o4W$`NkWJH2?{r%5*a&+||yY7G#x zD{jyX=H_{9$6-kUK6)G<3KJ-x%1G0FU{6Fm)u{1bnN77p?jd+_1&H9Q$@dxljp`S@ z8f2ccbj6^&sD3@IV2#5WnGJfP%y4W0kZ6}|B%@c}=SREfE^+sN(SSXq+nd6!dTIT+ z>m9EE_-~m7*qIWkFkz=G1&z|Ua0ZP={rv%(f%I%F2Bx|1LZ*`a`3k>#$gx?Y=`l0|oG)e#MvlrzNmoFf&rrS@iG3dQ$0k)iA6+cen$??3%d*uo9G ze(~ql=kh&dqWi^gBgcnzJ#%E!mYvOCAjE?ANYfTM^>45Oj?dP~N*c2>Pkyi!5>i)(*6A~HOw0IAT>#2|XEZJe9HYcSgGFkT?K#&csdwj94i0>^ zNRTkhpL2Ov(|7qr98AeG>$Rm&{-0=cYqg6*E$Di1#MQEt+YFD#b6gezgx@jqoTgjQ zDE3I7kCC%6IEA^dXQC}8md&6R_N_)top`)lc_S03a9v!q>E6CV^KrW5m)(idXmC?d zz40S7$>EyK8hin_tw=-fuvZEsR=3vQVE8tIb&2ozxy}er6o~Q#;)DIrd zZJ(`)P}04sk+=Rr4hW}c7sZ+`J2$1&^HhqNlcxi~Xp>d@J1YYl@FW({75Ttw zVM^E)vWC?-a5Z7H!pN$-OLj3X)?Kl`N*4&24nX(HQ#^0rz7zD7%FhdHiT=9eP~OlR@x+5SAA=u_3$uGP*rd|Nom5ZKyTwniIS z{TlYMN{!JPCO289K$D7OT?B$rlY{pCbcgoSu*zqO8rfD9^a1(`!IxImYZbQg7mfH(%G)WHl0*(rKwN9XV3zvo9$thy zT&-vG6Ez?6=hDKi?=H`sA~5K(_TC$lw4L&m0dbfUmbd;MAD<2t#AMZhCnIQ#Nay z$J{S$Yk-qE;@Zs@AU5A9#p%pm5#ViYRD}pDNb>>7n%B) znfmSC?zF^kJFF*8W>4!x*Lum8Nt*kJG0a4a?hPBvk0#Bx=Wn=8FngZ}+#NCFk{3yn zR~?!S19b;59Qnhp`L)Y)y^Is0@YsGy&1pv})TYYy%*ECWv-P8IK*9E&=f0E{j)!FQ z4fBa-ZTK<+s^-tw&i09kV9wEd&n%L?5syz!L4t2@ntro_;rN(!Jm7+J8pg3(1m8ZV z;;{k{{TcddsxJ#RAOYnk@}rIPvwVtDM;M%5UlB1ZMaLBm?1@OhixPI39|7a7Wq|g< zxkR9of=yWwxH5s|QgRNbCciODQJ1Sz`b)daNIm;3;%NUS+PUbgO~cYMpinM>zJd)x zIG6AMYhs7jIM|`#<_CB2r&+Zr=%jXmAKWD7ptKS(Q1GcMC%T1;ty?>UkVN6KuNm35 zjVSfwO&*Is*AT0+ZWUIR)mmh{T$wC`8B$(FNlwwYBc}WJ%J$t4ayzT64f{Knq>hU; znRjeIDOkrwygy%py2nnKm}a~ZjWzY3^!VHa5W4gZXZ5JRV0dD!Sx)9j*4&PV6QM)Q zuVie?(hNi|2)rQXVai)K)x?NJ_%e3P&6kwRV z*E1p!t|>hU$?t1`3v?uTTu~Xe0SK3JJls(Wl{>8tn8ayOWq#D@s@fq|5y&5Uf+iw-E;fTF@hnvvo?Y_3E*()Zvm1?9cNm^xVL>x zBz6$sNh0Vdk?%T)Ad(<`$vK2^`;$h6the&PAg_)wA9)ozJ-x$WDbHr3@Lc443oE&BD2K?3AbkUwT6nw7MIwJiwK{K|A z+OeCBtDYiISmozjjC)H@Vle(~ACR%GD|(q?AfD`&nPNbl9_Z2i%{i6zX(PsU{vF7A z&Smp6X_7?!9xQ~|RpWSlR5*Sj`t!vEuFmqTcL>U9v_|bORmtn$@8?$uP}s)2gH;LA zWyPKDv$_y&CuH+T3beA_SCvZ5_PA4L&asd87={!wY2mbI>0B&2&Zv1Ur(2MdVlZ^4 z1+OhP)<0unY1*pKhnsf$Yz3>t384nvYehMVv0lQZ%^p59kuxPVHnHAiI1%ht>}!KJ z;>4<{>n0Zd+6eSYx()ww>&@94JXf&lna#G3JbWMkX-Dg+74;JP1d5CaY>%yiTB$#u ztmcv*ozT{43u41;hThZe%2b7ILI}`zgBEn^n`Cpv?QCY_^j1#sz-v~2JAY&F#cS|9 zegld|opmH_#ASY84NOZ6=f$*9p&QH(2SxgR1iYKpY`8@d^@7}{txB5` z!AfE!mFDV;mC(4URHGA;z|MAJnnC1Rcfr2trGjsEd0USTQBN?V?Q&6$I@wMJ0Z~{B zLLf?Fgj~0-HPPdEiB9&5jqpW44qN$kpQmh6VP;br`El>^eVm)4yZ4bsqmP*FQirJF z8UYYZIQ8t!SM$e*TsyhoJGJ_Y)KU-H!nT1f2zSq?&$+jOTUpTcP2*)c@5FE3+%!03 zM9FGq*AnLPzC10KL2~uRa4u(-=*{^amN0DAkZ>87EeR;h@h$beC_&fOsGn_95hLc_ zIl!`Dr4qp@lJK!o;AA}BuxDV{N8eY^^M^Wi$p>ruFJ}wL43Bu;b7_MudB~pp0r5XH zl{Sti`WEJCSRC}kmVnp-Lp`A?8wf4L?YX=xH_ajLZp}}oUU4}s$is1 zV!?5EwjithVvt}c48yR~y02T9TzM-wVdL26<)_h2d9P&-ez~@J&=E#m-g9jKOu@}! z?nf4^sxQpDg#*h|6+AHjt9uBAg1~Y}P_YdkW|K6kJDt_vw%e^NXwj?hav&FtH@nXf z86<^DMNR~fV2i`2vj@EXi_S9{M+LIu#F0HejFjJ|g%v2WZyKUo-3tVFmg#$e@Um;7 zqeg!)=^aUOz&>{l(*xkxgc*@tU2NvO0Oc``dl8&4`ykEX@jshekVKSA3Z?g;iufc( zVv^f-2DFQ}&=F{41#x*RF)}HfPnaLSRl;#6j0!&PM7~A8$v71$_F7eU^S(?hWX{)5 z8Y2PyjLl9+zE(=XdiGilv5oPAnM9`ef-j99{zIbiiYq3>r0y7GO@Rm{Bu?-3d}sX` zSOo;h0BV$VQSQ}aHvR95noH2#1=HJI%!+*34kvF1Gzn=|T7+b~XZYG0Cirrhc{}Mn zzAH@!!x&BxQF%QiZ^?9c2O2S+xJnHUfiP6@z7o}#&c-4b>;VdF{M;w);Gr1IS$tVJ zu7vmFQpZ(v=Om#|!E}OI%;VlYAfDf7CQzy2JFrou+HOKT#f?b+Ng_JL>uy|fG=S!g zll`v@_k<5Ve>vFracZBWJTY7-puI>^{_hIlf^+2&Yt6fG%yyl?r!xT8Md~eHyza*o zN@m1VMFj1rSa;V*6e>4CY=)$|@!d`dM55*Q z-sHEMiHb+plEsKJF)zR<^&<(S2K{P0ZC%<$IM?d(l zoBn22X7~}>#m!D)H5wxCOF>_h%%tX2E)L`Qegtv zaeUr1QVX4FJ}ryV-Ym99I^$$JU6vx~dTJ)OiP)DSTMrsM4=Y05Fmr!P+}MhWqV{Ny!zFoNAN!RmdaAKo?t&8(WY z@uXZcF3Osa8R5A^qV^eBvA-cL9v_CEWP;5P9E)J00^% zx@*#JLO~8vG-Q{Z`6rV?@wqchy&y=yd4}R_GePnkDQ9ItOrtL{!nMDF(_7$~y_<qmMLIllFTl3GPY3A3rO_*3B8byMaVB^ru`hFy_szj$V?~38hsFw- zp$93>;i9(0K2m&sC*b6y(cWe0b|44i*2%WV9{KydnJsK0{ZQmD)hOabGdZAI5qkat zy)Gtha;i|<7&-5jy2cpeB`L@4C{L9`Ye<`e%b;HE!6Pix7uRjLjLCn(huZ^qzAh1Lugbp_sTbdVb5TWOdo+)J_+wKsR zTqgic`l}UmamOtQ?gX=U9Vek~+hA*!0dG9i(Yv^9K+I5Aj0*u|T=3Z8q*(kHk6m_9c9cFdylvO?o{X1@m%%i(T6Q;{Wh(d4 zR6dJ=F<_;}iGH9G;i&J{W7tdRt}+0qJ7FR-mlfO{E8S-(Drc*?`Lf8ds>$jBa)U7~ zX(3-ti@O6}?3`thxO=QDl$dT%;AT%w+18@obgb&}DA%_UMM2Bn+DPy&FH zyKS`^ofIvU6i4b2k?X6oCE%pa^z%trqv?pF3eS%C2|g%nnP#G`FQB(r-~MO#{hhO=C2DGt?rzB&Wb<&HL`*bO+QQarIILC9g4_|W z=L8{J1%{LItq{(bFdTZYn?EVY?ymX6diG|XEKWst(elwd<1PSDR53{CWVKhJ+gMS6 zh^M7A`v!K!XM>N>?`P~vj|U9s04s;VdPT|D_wx|O(m2q?_~^s)Z&w8*V=TO9hIs7D zR{iI9>W2y{vq`^0^^`fnlV*QcSiF>Os;4a)WA#+rRLSdN+}M6;BC7u~yJNt<+$S6b zNiWD8#;9hp3k|JQCG&7F+uyn6c0YSVk2~dz8#%oY%~q2nliF=AN~(pvAacZJ)Pyoe z4pQ;tN?zvsQkj+n44tXB_Hy)hX<@}~zICW?(*JqMu0POvKI`EvX>vOCY#SD!(^e8w z8yOcc-a*m2G87)@9C zJgvk)o$OF)E1g8Vw03rX%}aW|=iaeeKgMp38Uq&al|=l(&`iD#O}Z>`n3dwXMIYcP z-YjTipZYDRreGpJY0`6`AB=gdT>|cor13FXCZ3as%(XUx|J2pX=Cy3717Xia&XaLb zl!BySa>8Cr@Ra@-$#bQYKGz`=#+M0MQY)6o1)UBEimPH&b)MPf7rWT{Z(q@JdLqo;Es>vbTQH^>o$#(!~u&K>NEIE7}-kP zG=oM_XMuUGNpbGvwt`Kus~bn@(T^n&r!)ZY#8+AddgytIlr%9o`F~OE_&dtF6QbZ7 z@_Pczhc6Dvd7oK=QJGZr;MCO+Q((3yR-EJws9>ftsJN8<6X(_cX`F@f`w1+T|n12^sAd_R>Qn5UGLkes}{XZt!)@>GeAZ zAK>QZA}}=BqO<1mqSMku?1be_p!r0n=SUJ28k5p{BcRl41SJ3HtGU;^yRHfF@opt7>U5z4P2}-E>=z2OpENDEZSzc5 z$)&BtM~j?B79sLeYj=G~VlOh*l>=bISsRA@x>3tT!J!Pn&(--+dk$BY@L8-yPWfrp ziAZ5cBd6{m!lgAj*Z_U&o*`PKZBsOxtF~!`0Ds?Iox6d;82qDWdC#E1c}b0~H9VKQ z0{{tU`sjH~@{$_|;Mgpx_$ZYwow-a}`P1}g>{jeUmYJS&K%uio*j?&+K zm-fm7>h*1Fl*r5KUm0Xb)TqNgvR{cd!0CChIN4kFj|p_e>d$|M$NcOj%Q-71)S6LO z))#(ZzoY3g*?J-}6xM7psa0>GN+nG}*#=_7Ysx zL<$+Fg^4QtWv|w~Ya+_z1)+cCT{t*Ku?7BSj)3Eb#f^;^m(-6tzC?1oCShcqdxS20 zP47hZmOC`Lo`x76Z*(nuAZMXUl}F$eFLqjgiF_&hRP#YM(SdI$!B6^m_`K$GsQT&E zeu^j5uSEqbYPiB3(=QF2Nyuh$aPVJf+*g?jJ`xqso9o1xB8T!xKR1{9+_}o+Uk)wo z8@;5jc34s{{NUByH&0L@)AGDCyD#IPNEl(3CA{WpXsha+u^8n&_!*zu zs}205JZ{gDv1?E(hTql@fB9|puzvuF&_zr&z|H#bzjtw z8Nq1q@bfr15m=S*$Lrfs!^@HTA@iKDvq-p%hT=;2@yBFiRl{P}Ka2t`@a1wnj@Q@M zuvdBg>9f`W*Yi!Lgb(BC#&rSS-t(>W z**8}HvvgQKxZt}b0^;#Kh~~9cDpB7&>WfnIo#1t%YQ1la^hx(wGBdA7&0TIaI6Fpzvhxg4SRj=)h^UjYE^ zt-%OSa_y8SWZhF&X@b-lz6`_0<1cEu%k{1-f%e_m}t_Mh|y z^7Bx(Uw^3uuJ$&L4{1FcEUtVA9Iu+1hk~%z9=$3=Hv9}M5fA}3hQUa-&DG%R)u><4 zgV6$vAdRi@y^*yTyrVNkqhhYYW~Dj26xncu0atr{AC2f2;N(Rwg77+r(O>G#R<|av zrI0W=+q8#lV5@k|X%GPo!9qOzFw<9>Hc{t;xof@F!AHE$9U7r)a~cpNH(aJjz*}LL`t!0`$SOERk-Ai{XUGP`5-BU?;Gqs(BL5^7uIq7*aHx|TXVsw-_omFJ0+`j>$jkUpzR{4IAqYc zyWtpY+TN74p<z*ow?mtqq8UKd{33I|RY8sEsk1CfRu9B-L*k0>|&zxrl#8VPr zO>~vG(p>P54r>ct6@4VK{dz!egP)LqgBXisj_YCe&Gj~oqlCTrbr~EORxdflJVy14 z!k9xcviD?SHR#@D14s=j*7G5xRHS=3BP5r}c{b`p^g6pPDy|NLlb@iayv0{4lW}>M zrm6P-j2(vlA_iDqOHYNTD(ObGPx=_#nxd@#L?3!g@EzFILB4 zQFqTUWQJFsE>RS%9{d(7I$dxo81jJ^APRfysrwHm*+Tq{YmDX`+@n68;CzdKsA@j_ zDN>_}o+=G~J!IF=u#L!?xJpmFB@H)_A+cf`pF`5MI@ol$2Pc@Ky?LYHA7MisBpi*w z36-QBOoQ~uc019T4Q3#+N+PLjg{s{vVd*6BDbag>I(8l*zW8N^Jr*4-dw9^%$8ezu zTZQ+^o3O&`95r=Tz0>rZ@FKy2tAzLpCrztee5X8&y|-Ota`1hA;7V~oLA|``&MNZs zC@ge|r7+w$*A@6jW&FodJ)mzGD%3Df|NPI(Q_-#J7!x&ufO96Vrne<~!LD@T!>fR= zRdlr%LQA!PHT>0{RiQ5|m#qMC6aFhLq=LcHs~8F-d<{^)Kfy^ZR9$;6*u2so(h}W> zeAxIdue{l$&I{SqJO?tac-;j5fncwl{@0DCCdJt^Y;mFAB7d%9^b1}GBO{?GUM*@A G^#1@*o6&3l literal 0 HcmV?d00001 diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index 852330ff71..7372468eda 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -73,6 +73,15 @@ const StyledBodyDiv = styled.div` } `; +const AdBannerDiv = styled.div` + text-align: center; + + & img { + margin-top: 10px; + max-width: 100%; + } +`; + class App extends React.Component { componentWillUpdate(nextProps) { if (this.props.location.key !== nextProps.location.key) { @@ -90,6 +99,13 @@ class App extends React.Component { titleTemplate={strings.title_template} />

+ + { location.pathname !== '/' && + + + + } + @@ -104,6 +120,16 @@ class App extends React.Component { + + { location.pathname !== '/' && + + + + } +
+ {strings.home_sponsored_by} Rivalry +
+
diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index f3674d25aa..842cea1137 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -175,15 +175,6 @@ const ToolbarHeader = styled(Toolbar)` } `; -const AdBannerDiv = styled.div` - text-align: center; - - & img { - margin-top: 10px; - max-width: 100%; - } -`; - const Header = ({ location, small, user }) => (
@@ -198,13 +189,6 @@ const Header = ({ location, small, user }) => ( { location.pathname !== '/' && } - - { location.pathname !== '/' && - - - - } -
); diff --git a/src/components/Home/Sponsors.jsx b/src/components/Home/Sponsors.jsx index 7a401852f0..12929a5ecd 100644 --- a/src/components/Home/Sponsors.jsx +++ b/src/components/Home/Sponsors.jsx @@ -47,9 +47,12 @@ export default () => ( - + + + + { target="_blank" rel="noopener noreferrer" /> + } + href="https://glhf.rivalry.gg/get-started-dota/?utm_source=opendota&utm_medium=link&utm_campaign=opendota" + target="_blank" + rel="noopener noreferrer" + /> ); diff --git a/src/components/Teams/index.jsx b/src/components/Teams/index.jsx index 6bb4d0e2db..062cae88f5 100644 --- a/src/components/Teams/index.jsx +++ b/src/components/Teams/index.jsx @@ -9,6 +9,7 @@ import Team from 'components/Team'; import Table, { TableLink } from 'components/Table'; import styled from 'styled-components'; import { getOrdinal, getTeamLogoUrl, fromNow, subTextStyle } from 'utility'; +import FlatButton from 'material-ui/FlatButton'; import { Logo } from '../Team/TeamStyled'; const TeamImageContainer = styled.div` @@ -78,6 +79,15 @@ class RequestLayer extends React.Component { return (
+
+ } + href="https://glhf.rivalry.gg/get-started-dota/?utm_source=opendota&utm_medium=link&utm_campaign=opendota" + target="_blank" + rel="noopener noreferrer" + /> +
); diff --git a/src/lang/en-US.json b/src/lang/en-US.json index d4bc1fd310..ee5534aaf9 100644 --- a/src/lang/en-US.json +++ b/src/lang/en-US.json @@ -50,6 +50,7 @@ "app_dotacoach": "Ask a Coach", "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "Refresh", "app_login": "Login", From 650e72ef46e4cfb2a0a69d3c6a42aea3d0c93074 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Tue, 27 Mar 2018 06:49:52 +0000 Subject: [PATCH 0107/1495] add to team pages --- src/components/Match/MatchHeader/MatchHeader.jsx | 2 +- src/components/Team/TeamHeader.jsx | 10 ++++++++++ src/components/Teams/index.jsx | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/components/Match/MatchHeader/MatchHeader.jsx b/src/components/Match/MatchHeader/MatchHeader.jsx index adfb165d11..3b6c370689 100644 --- a/src/components/Match/MatchHeader/MatchHeader.jsx +++ b/src/components/Match/MatchHeader/MatchHeader.jsx @@ -335,7 +335,7 @@ const MatchHeader = ({ match, user, loading }) => { /> } + icon={} href="https://glhf.rivalry.gg/get-started-dota/?utm_source=opendota&utm_medium=link&utm_campaign=opendota" target="_blank" rel="noopener noreferrer" diff --git a/src/components/Team/TeamHeader.jsx b/src/components/Team/TeamHeader.jsx index 9e25111ae8..86017ace30 100644 --- a/src/components/Team/TeamHeader.jsx +++ b/src/components/Team/TeamHeader.jsx @@ -1,6 +1,7 @@ import React from 'react'; import strings from 'lang'; import { getTeamLogoUrl } from 'utility'; +import FlatButton from 'material-ui/FlatButton'; import { HeaderContainer, Logo, Column, TeamName, Row, TeamStatsCard } from './TeamStyled'; export default generalData => ( @@ -25,6 +26,15 @@ export default generalData => ( subtitle={Math.floor(generalData.data.rating)} /> + + } + href="https://glhf.rivalry.gg/get-started-dota/?utm_source=opendota&utm_medium=link&utm_campaign=opendota" + target="_blank" + rel="noopener noreferrer" + /> + ); diff --git a/src/components/Teams/index.jsx b/src/components/Teams/index.jsx index 062cae88f5..d019b5ed31 100644 --- a/src/components/Teams/index.jsx +++ b/src/components/Teams/index.jsx @@ -82,7 +82,7 @@ class RequestLayer extends React.Component {
} + icon={} href="https://glhf.rivalry.gg/get-started-dota/?utm_source=opendota&utm_medium=link&utm_campaign=opendota" target="_blank" rel="noopener noreferrer" From ca3332ff37bb51e7667c615e129b95b8ee9f3ac8 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Tue, 27 Mar 2018 06:54:49 +0000 Subject: [PATCH 0108/1495] clean home page --- src/components/App/App.jsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index 7372468eda..aeb1f1ddc5 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -126,9 +126,11 @@ class App extends React.Component { } -
- {strings.home_sponsored_by} Rivalry -
+ { location.pathname !== '/' && +
+ {strings.home_sponsored_by} Rivalry +
+ }
From 4bda815001b142472f45b5a2e530ae4137181295 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Wed, 28 Mar 2018 04:23:24 +0000 Subject: [PATCH 0109/1495] update bottom link --- src/components/App/App.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index aeb1f1ddc5..b9284f67e2 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -128,7 +128,7 @@ class App extends React.Component { } { location.pathname !== '/' &&
- {strings.home_sponsored_by} Rivalry + {strings.home_sponsored_by} Rivalry
} From df681d014b3f9777ea4aedd958fa0340fd7c1373 Mon Sep 17 00:00:00 2001 From: maxlefebvre Date: Wed, 28 Mar 2018 13:24:00 -0400 Subject: [PATCH 0110/1495] added histogram descriptions and placeholder descriptions --- package-lock.json | 1597 +---------------- .../Player/Pages/Histograms/Histograms.jsx | 2 +- src/lang/en-US.json | 31 + 3 files changed, 40 insertions(+), 1590 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8387678fd7..2e147852e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2447,7 +2447,6 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", - "fsevents": "1.1.3", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -4645,794 +4644,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", - "optional": true, - "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.6.39" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.39", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - } - } - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -7800,12 +7011,6 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "optional": true - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -10128,7 +9333,6 @@ "extract-text-webpack-plugin": "3.0.2", "file-loader": "1.1.5", "fs-extra": "3.0.1", - "fsevents": "1.1.2", "html-webpack-plugin": "2.29.0", "jest": "20.0.4", "object-assign": "4.1.1", @@ -10236,791 +9440,6 @@ "universalify": "0.1.1" } }, - "fsevents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", - "optional": true, - "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.6.36" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "optional": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "optional": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.36", - "bundled": true, - "optional": true, - "requires": { - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "optional": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - } - } - }, "js-yaml": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", @@ -12239,6 +10658,14 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + }, "string-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", @@ -12293,14 +10720,6 @@ "function-bind": "1.1.1" } }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - }, "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", diff --git a/src/components/Player/Pages/Histograms/Histograms.jsx b/src/components/Player/Pages/Histograms/Histograms.jsx index 5063ab2eef..134719cdc1 100644 --- a/src/components/Player/Pages/Histograms/Histograms.jsx +++ b/src/components/Player/Pages/Histograms/Histograms.jsx @@ -41,7 +41,7 @@ const Histogram = ({ />
- +
diff --git a/src/lang/en-US.json b/src/lang/en-US.json index d4bc1fd310..03e73a05e9 100644 --- a/src/lang/en-US.json +++ b/src/lang/en-US.json @@ -959,6 +959,37 @@ "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_kills" : "", + "histograms_actions_per_min" : "", + "histograms_assists" : "", + "histograms_comeback" : "Maximum gold advantage in a won game", + "histograms_courier_kills" : "", + "histograms_deaths" : "", + "histograms_denies" : "", + "histograms_duration" : "", + "histograms_lane_efficiency_pct" : "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_purchase_gem" : "", + "histograms_gold_per_min" : "", + "histograms_hero_damage" : "", + "histograms_hero_healing" : "", + "histograms_kda" : "", + "histograms_last_hits" : "", + "histograms_level" : "", + "histograms_loss" : "", + "histograms_pings" : "", + "histograms_neutral_kills" : "", + "histograms_purchase_ward_observer" : "", + "histograms_purchase_rapier" : "", + "histograms_purchase_ward_sentry" : "", + "histograms_stomp" : "Maximum gold disadvantage in a won game", + "histograms_stuns" : "", + "histograms_throw" : "", + "histograms_tower_damage" : "", + "histograms_tower_kills" : "", + "histograms_purchase_tpscroll" : "", + "histograms_win_rate" : "", + "histograms_xp_per_min" : "", + "trends_name": "Trends", "trends_description": "Moving mean of last 20 games", "trends_tooltip_average": "Avg.", From 1cee45892f5f00d34cb8b85638e3f891b0dc46cb Mon Sep 17 00:00:00 2001 From: maxlefebvre Date: Wed, 28 Mar 2018 13:41:40 -0400 Subject: [PATCH 0111/1495] fixed lint error --- .../Player/Pages/Histograms/Histograms.jsx | 9 ++- src/lang/en-US.json | 60 +++++++++---------- 2 files changed, 38 insertions(+), 31 deletions(-) diff --git a/src/components/Player/Pages/Histograms/Histograms.jsx b/src/components/Player/Pages/Histograms/Histograms.jsx index 134719cdc1..0e60d8d794 100644 --- a/src/components/Player/Pages/Histograms/Histograms.jsx +++ b/src/components/Player/Pages/Histograms/Histograms.jsx @@ -25,6 +25,10 @@ const getSubtitleStats = (columns) => { return `${strings.heading_total_matches}: ${total}${(median !== undefined) ? `, ${strings.heading_median}: ${median}` : ''}`; }; +const getSubtitleDescription = (histogramName) => { + return strings[`histograms_${histogramName}_description`] +}; + const histogramNames = dataColumns.filter(col => col !== 'win_rate'); const Histogram = ({ @@ -41,7 +45,10 @@ const Histogram = ({ />
- +
diff --git a/src/lang/en-US.json b/src/lang/en-US.json index 03e73a05e9..2a178a3403 100644 --- a/src/lang/en-US.json +++ b/src/lang/en-US.json @@ -959,36 +959,36 @@ "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", - "histograms_kills" : "", - "histograms_actions_per_min" : "", - "histograms_assists" : "", - "histograms_comeback" : "Maximum gold advantage in a won game", - "histograms_courier_kills" : "", - "histograms_deaths" : "", - "histograms_denies" : "", - "histograms_duration" : "", - "histograms_lane_efficiency_pct" : "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", - "histograms_purchase_gem" : "", - "histograms_gold_per_min" : "", - "histograms_hero_damage" : "", - "histograms_hero_healing" : "", - "histograms_kda" : "", - "histograms_last_hits" : "", - "histograms_level" : "", - "histograms_loss" : "", - "histograms_pings" : "", - "histograms_neutral_kills" : "", - "histograms_purchase_ward_observer" : "", - "histograms_purchase_rapier" : "", - "histograms_purchase_ward_sentry" : "", - "histograms_stomp" : "Maximum gold disadvantage in a won game", - "histograms_stuns" : "", - "histograms_throw" : "", - "histograms_tower_damage" : "", - "histograms_tower_kills" : "", - "histograms_purchase_tpscroll" : "", - "histograms_win_rate" : "", - "histograms_xp_per_min" : "", + "histograms_kills_description" : "", + "histograms_actions_per_min_description" : "", + "histograms_assists_description" : "", + "histograms_comeback_description" : "Maximum gold advantage in a won game", + "histograms_courier_kills_description" : "", + "histograms_deaths_description" : "", + "histograms_denies_description" : "", + "histograms_duration_description" : "", + "histograms_lane_efficiency_pct_description" : "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_purchase_gem_description" : "", + "histograms_gold_per_min_description" : "", + "histograms_hero_damage_description" : "", + "histograms_hero_healing_description" : "", + "histograms_kda_description" : "", + "histograms_last_hits_description" : "", + "histograms_level_description" : "", + "histograms_loss_description" : "", + "histograms_pings_description" : "", + "histograms_neutral_kills_description" : "", + "histograms_purchase_ward_observer_description" : "", + "histograms_purchase_rapier_description" : "", + "histograms_purchase_ward_sentry_description" : "", + "histograms_stomp_description" : "Maximum gold disadvantage in a won game", + "histograms_stuns_description" : "", + "histograms_throw_description" : "", + "histograms_tower_damage_description" : "", + "histograms_tower_kills_description" : "", + "histograms_purchase_tpscroll_description" : "", + "histograms_win_rate_description" : "", + "histograms_xp_per_min_description" : "", "trends_name": "Trends", "trends_description": "Moving mean of last 20 games", From e64520317a09cb4ce7a911d37469e24c5d4cea74 Mon Sep 17 00:00:00 2001 From: maxlefebvre Date: Wed, 28 Mar 2018 13:45:40 -0400 Subject: [PATCH 0112/1495] fixed more eslint errors --- src/components/Player/Pages/Histograms/Histograms.jsx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/components/Player/Pages/Histograms/Histograms.jsx b/src/components/Player/Pages/Histograms/Histograms.jsx index 0e60d8d794..122faad4d1 100644 --- a/src/components/Player/Pages/Histograms/Histograms.jsx +++ b/src/components/Player/Pages/Histograms/Histograms.jsx @@ -25,9 +25,7 @@ const getSubtitleStats = (columns) => { return `${strings.heading_total_matches}: ${total}${(median !== undefined) ? `, ${strings.heading_median}: ${median}` : ''}`; }; -const getSubtitleDescription = (histogramName) => { - return strings[`histograms_${histogramName}_description`] -}; +const getSubtitleDescription = histogramName => strings[`histograms_${histogramName}_description`]; const histogramNames = dataColumns.filter(col => col !== 'win_rate'); @@ -45,8 +43,8 @@ const Histogram = ({ />
- From c95e32912b61c5ce9f23f77ff028c0ecab00fc4f Mon Sep 17 00:00:00 2001 From: maxlefebvre Date: Wed, 28 Mar 2018 14:16:26 -0400 Subject: [PATCH 0113/1495] addd more histogram descriptions --- src/lang/en-US.json | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/lang/en-US.json b/src/lang/en-US.json index 2a178a3403..5eb2b2f46d 100644 --- a/src/lang/en-US.json +++ b/src/lang/en-US.json @@ -960,7 +960,7 @@ "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_kills_description" : "", - "histograms_actions_per_min_description" : "", + "histograms_actions_per_min_description" : "Actions performed by player per minute", "histograms_assists_description" : "", "histograms_comeback_description" : "Maximum gold advantage in a won game", "histograms_courier_kills_description" : "", @@ -969,26 +969,25 @@ "histograms_duration_description" : "", "histograms_lane_efficiency_pct_description" : "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", "histograms_purchase_gem_description" : "", - "histograms_gold_per_min_description" : "", - "histograms_hero_damage_description" : "", - "histograms_hero_healing_description" : "", + "histograms_gold_per_min_description" : "Gold farmed per minute", + "histograms_hero_damage_description" : "Amount of damage dealt to heroes", + "histograms_hero_healing_description" : "Amount of health restored to heroes", "histograms_kda_description" : "", "histograms_last_hits_description" : "", - "histograms_level_description" : "", - "histograms_loss_description" : "", - "histograms_pings_description" : "", + "histograms_level_description" : "Level achieved in a game", + "histograms_loss_description" : "Maximum gold disadvantage in a lost game", + "histograms_pings_description" : "Number of times the player pinged the map", "histograms_neutral_kills_description" : "", "histograms_purchase_ward_observer_description" : "", "histograms_purchase_rapier_description" : "", "histograms_purchase_ward_sentry_description" : "", "histograms_stomp_description" : "Maximum gold disadvantage in a won game", - "histograms_stuns_description" : "", - "histograms_throw_description" : "", + "histograms_stuns_description" : "Seconds of disable on heroes", + "histograms_throw_description" : "Maximum gold advantage in a lost game", "histograms_tower_damage_description" : "", "histograms_tower_kills_description" : "", - "histograms_purchase_tpscroll_description" : "", - "histograms_win_rate_description" : "", - "histograms_xp_per_min_description" : "", + "histograms_purchase_tpscroll_description" : "Town Portal Scroll purchases", + "histograms_xp_per_min_description" : "Experience gained per minute", "trends_name": "Trends", "trends_description": "Moving mean of last 20 games", From 70c7d50d4a313d920071c4dd21b75fdd32ce0444 Mon Sep 17 00:00:00 2001 From: maxlefebvre Date: Wed, 28 Mar 2018 16:51:16 -0400 Subject: [PATCH 0114/1495] reverted weird changes to packagelock.json --- package-lock.json | 1597 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1589 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2e147852e2..8387678fd7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2447,6 +2447,7 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", + "fsevents": "1.1.3", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -4644,6 +4645,794 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "fsevents": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "optional": true, + "requires": { + "nan": "2.10.0", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + } + } + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -7011,6 +7800,12 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "optional": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -9333,6 +10128,7 @@ "extract-text-webpack-plugin": "3.0.2", "file-loader": "1.1.5", "fs-extra": "3.0.1", + "fsevents": "1.1.2", "html-webpack-plugin": "2.29.0", "jest": "20.0.4", "object-assign": "4.1.1", @@ -9440,6 +10236,791 @@ "universalify": "0.1.1" } }, + "fsevents": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", + "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", + "optional": true, + "requires": { + "nan": "2.10.0", + "node-pre-gyp": "0.6.36" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "optional": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.36", + "bundled": true, + "optional": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "optional": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + } + } + }, "js-yaml": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", @@ -10658,14 +12239,6 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - }, "string-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", @@ -10720,6 +12293,14 @@ "function-bind": "1.1.1" } }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + }, "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", From c137a8bb57e2a87d06a115a941d89b017d5b398e Mon Sep 17 00:00:00 2001 From: maxlefebvre Date: Thu, 29 Mar 2018 11:43:55 -0400 Subject: [PATCH 0115/1495] removes empty strings and defaults function to return empty strings on undefined --- .../Player/Pages/Histograms/Histograms.jsx | 2 +- src/lang/en-US.json | 15 --------------- 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/src/components/Player/Pages/Histograms/Histograms.jsx b/src/components/Player/Pages/Histograms/Histograms.jsx index 122faad4d1..d24a9cdd09 100644 --- a/src/components/Player/Pages/Histograms/Histograms.jsx +++ b/src/components/Player/Pages/Histograms/Histograms.jsx @@ -25,7 +25,7 @@ const getSubtitleStats = (columns) => { return `${strings.heading_total_matches}: ${total}${(median !== undefined) ? `, ${strings.heading_median}: ${median}` : ''}`; }; -const getSubtitleDescription = histogramName => strings[`histograms_${histogramName}_description`]; +const getSubtitleDescription = histogramName => (strings[`histograms_${histogramName}_description`] ? strings[`histograms_${histogramName}_description`] : ''); const histogramNames = dataColumns.filter(col => col !== 'win_rate'); diff --git a/src/lang/en-US.json b/src/lang/en-US.json index 5eb2b2f46d..6efaad64de 100644 --- a/src/lang/en-US.json +++ b/src/lang/en-US.json @@ -959,33 +959,18 @@ "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", - "histograms_kills_description" : "", "histograms_actions_per_min_description" : "Actions performed by player per minute", - "histograms_assists_description" : "", "histograms_comeback_description" : "Maximum gold advantage in a won game", - "histograms_courier_kills_description" : "", - "histograms_deaths_description" : "", - "histograms_denies_description" : "", - "histograms_duration_description" : "", "histograms_lane_efficiency_pct_description" : "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", - "histograms_purchase_gem_description" : "", "histograms_gold_per_min_description" : "Gold farmed per minute", "histograms_hero_damage_description" : "Amount of damage dealt to heroes", "histograms_hero_healing_description" : "Amount of health restored to heroes", - "histograms_kda_description" : "", - "histograms_last_hits_description" : "", "histograms_level_description" : "Level achieved in a game", "histograms_loss_description" : "Maximum gold disadvantage in a lost game", "histograms_pings_description" : "Number of times the player pinged the map", - "histograms_neutral_kills_description" : "", - "histograms_purchase_ward_observer_description" : "", - "histograms_purchase_rapier_description" : "", - "histograms_purchase_ward_sentry_description" : "", "histograms_stomp_description" : "Maximum gold disadvantage in a won game", "histograms_stuns_description" : "Seconds of disable on heroes", "histograms_throw_description" : "Maximum gold advantage in a lost game", - "histograms_tower_damage_description" : "", - "histograms_tower_kills_description" : "", "histograms_purchase_tpscroll_description" : "Town Portal Scroll purchases", "histograms_xp_per_min_description" : "Experience gained per minute", From 645c3d71a26f2a4f939649307d0bd50ef49654d1 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Fri, 30 Mar 2018 03:31:37 +0000 Subject: [PATCH 0116/1495] update dotaconstants --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8387678fd7..ac31548a61 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3532,9 +3532,9 @@ "integrity": "sha512-Eykn8QhYQFd481Px4obDWxzbIskro9ihUgUmq+NB05Z3av8koVNmwMvJ8VP31y3KS1q5C7BZWdug97NXdUpXnA==" }, "dotaconstants": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/dotaconstants/-/dotaconstants-5.26.0.tgz", - "integrity": "sha512-ZF4aVPeU7eUhquR0cdSVOiPyz5Gv9KHtT9BkT+OKNotfCen7Jc2uh8TAwrOUo4Oe5LJQ58gpRzmHcXHtlf2eIg==" + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/dotaconstants/-/dotaconstants-5.27.0.tgz", + "integrity": "sha512-Q4k7VV6it6/n46GDdz3aZLiMJ5WOvkeR8/JWc2f8cVTUx1HEBZ5866bP5oinrUxbc8L1noHHSTTEujCrxI/aCQ==" }, "dotenv": { "version": "4.0.0", diff --git a/package.json b/package.json index 0e8dd050af..5b98ebb6f7 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "abcolor": "^0.5.5", "core-js": "^2.5.2", "dota2-emoticons": "^1.0.1", - "dotaconstants": "^5.26.0", + "dotaconstants": "^5.27.0", "fuzzy": "^0.1.3", "heatmap.js": "^2.0.5", "history": "^4.7.2", From e1632d869ad6c47da144181c1431fc33ca6f2db4 Mon Sep 17 00:00:00 2001 From: maxlefebvre Date: Fri, 30 Mar 2018 00:40:46 -0400 Subject: [PATCH 0117/1495] switched ternary operator with or operator --- src/components/Player/Pages/Histograms/Histograms.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Player/Pages/Histograms/Histograms.jsx b/src/components/Player/Pages/Histograms/Histograms.jsx index d24a9cdd09..fec8654ec5 100644 --- a/src/components/Player/Pages/Histograms/Histograms.jsx +++ b/src/components/Player/Pages/Histograms/Histograms.jsx @@ -25,7 +25,7 @@ const getSubtitleStats = (columns) => { return `${strings.heading_total_matches}: ${total}${(median !== undefined) ? `, ${strings.heading_median}: ${median}` : ''}`; }; -const getSubtitleDescription = histogramName => (strings[`histograms_${histogramName}_description`] ? strings[`histograms_${histogramName}_description`] : ''); +const getSubtitleDescription = histogramName => (strings[`histograms_${histogramName}_description`] || ''); const histogramNames = dataColumns.filter(col => col !== 'win_rate'); From 37745d76012920fa91396d4ec74f8acd9495f2f4 Mon Sep 17 00:00:00 2001 From: maxlefebvre Date: Fri, 30 Mar 2018 00:51:53 -0400 Subject: [PATCH 0118/1495] fixes extra space if no description is available --- src/components/Player/Pages/Histograms/Histograms.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Player/Pages/Histograms/Histograms.jsx b/src/components/Player/Pages/Histograms/Histograms.jsx index fec8654ec5..973cf24d28 100644 --- a/src/components/Player/Pages/Histograms/Histograms.jsx +++ b/src/components/Player/Pages/Histograms/Histograms.jsx @@ -22,7 +22,7 @@ const getMedian = (columns, midpoint) => { const getSubtitleStats = (columns) => { const total = columns.reduce((sum, col) => (sum + col.games), 0); const median = getMedian(columns, total / 2); - return `${strings.heading_total_matches}: ${total}${(median !== undefined) ? `, ${strings.heading_median}: ${median}` : ''}`; + return `(${strings.heading_total_matches}: ${total}${(median !== undefined) ? `, ${strings.heading_median}: ${median})` : ''}`; }; const getSubtitleDescription = histogramName => (strings[`histograms_${histogramName}_description`] || ''); @@ -45,7 +45,7 @@ const Histogram = ({
From 69aa328d6f786a8db402cc161808d8aaf487ca99 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:00:25 -0700 Subject: [PATCH 0119/1495] New translations en-US.json (Russian) --- src/lang/ru-RU.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index db61e87c2c..aa1d992c7c 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Рассчитывано Wilson score", "histograms_name": "Гистограммы", "histograms_description": "Процентаж указывает на процент побед для этого столбца", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Графики", "trends_description": "Совокупное среднее за последние 500 игр", "trends_tooltip_average": "Сред.", From cebb31d0223a36f5b31917d4e3fc79ea65ee8d90 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:00:28 -0700 Subject: [PATCH 0120/1495] New translations en-US.json (Korean) --- src/lang/ko-KR.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/ko-KR.json b/src/lang/ko-KR.json index 3e73e2a9f3..cc2394b4ad 100644 --- a/src/lang/ko-KR.json +++ b/src/lang/ko-KR.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "막대 그래프", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "추세", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Avg.", From 9dbcd70a470a4367bfc1efd060caeebf43f4229a Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:00:31 -0700 Subject: [PATCH 0121/1495] New translations en-US.json (Ukrainian) --- src/lang/uk-UA.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/uk-UA.json b/src/lang/uk-UA.json index 1336f7cf43..959bf8d35a 100644 --- a/src/lang/uk-UA.json +++ b/src/lang/uk-UA.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Гістограма", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Тенденції", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Avg.", From 9256a1d141113a13bcb205a2a37e2fc0ce029e56 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:00:33 -0700 Subject: [PATCH 0122/1495] New translations en-US.json (Turkish) --- src/lang/tr-TR.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json index 67c8611bfe..6f9fc1b8f0 100644 --- a/src/lang/tr-TR.json +++ b/src/lang/tr-TR.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Histogramlar", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Trendler", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Ort.", From 06a1107ae2e6218272dfa0a8cb3b47ac21e09547 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:00:36 -0700 Subject: [PATCH 0123/1495] New translations en-US.json (Swedish) --- src/lang/sv-SE.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/sv-SE.json b/src/lang/sv-SE.json index f760132a4c..19dce132dc 100644 --- a/src/lang/sv-SE.json +++ b/src/lang/sv-SE.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Histogram", "histograms_description": "Procentandel anger vinstpriser för det märkta facket", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Trender", "trends_description": "Flyttande medelvärdet av de senaste 20 spelen", "trends_tooltip_average": "Medel.", From 620d951750e68fcf66079b2f19916975e1ada702 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:00:39 -0700 Subject: [PATCH 0124/1495] New translations en-US.json (Spanish, United States) --- src/lang/es-US.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/es-US.json b/src/lang/es-US.json index 2a104506af..9d24c445f9 100644 --- a/src/lang/es-US.json +++ b/src/lang/es-US.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Histogramas", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Tendencias", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Avg.", From ff1db73a88b071c5b361fde636f1b867b1ee61ee Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:00:41 -0700 Subject: [PATCH 0125/1495] New translations en-US.json (Spanish, Peru) --- src/lang/es-PE.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/es-PE.json b/src/lang/es-PE.json index 0472f797af..aaaad604dc 100644 --- a/src/lang/es-PE.json +++ b/src/lang/es-PE.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Histogramas", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Tendencias", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Avg.", From 1e0c41954e1ada588d7b56732ef730a4ec92c719 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:00:44 -0700 Subject: [PATCH 0126/1495] New translations en-US.json (Spanish) --- src/lang/es-ES.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/es-ES.json b/src/lang/es-ES.json index 9436175191..51cafb7307 100644 --- a/src/lang/es-ES.json +++ b/src/lang/es-ES.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculado por califacación de Wilson", "histograms_name": "Histogramas", "histograms_description": "Porcentajes indican tasas de victoria para la gama rotulada", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Tendencias", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Prom.", From 8a904af0615c073a6e938aa95f14268b9d44d0f9 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:00:47 -0700 Subject: [PATCH 0127/1495] New translations en-US.json (Slovak) --- src/lang/sk-SK.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/sk-SK.json b/src/lang/sk-SK.json index c7d945e99c..0879cc4513 100644 --- a/src/lang/sk-SK.json +++ b/src/lang/sk-SK.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Trends", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Avg.", From 19cbb756001edfcaf77528f61d642200fb4257dd Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:00:50 -0700 Subject: [PATCH 0128/1495] New translations en-US.json (Serbian (Cyrillic)) --- src/lang/sr-SP.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/sr-SP.json b/src/lang/sr-SP.json index 99a9dc7a64..8285243c91 100644 --- a/src/lang/sr-SP.json +++ b/src/lang/sr-SP.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Trends", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Avg.", From a294a116924230c7d3a3090a529346b49874a38d Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:00:52 -0700 Subject: [PATCH 0129/1495] New translations en-US.json (Romanian) --- src/lang/ro-RO.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/ro-RO.json b/src/lang/ro-RO.json index b15822f624..42486eb556 100644 --- a/src/lang/ro-RO.json +++ b/src/lang/ro-RO.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Trends", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Avg.", From 7fb632ca3af6ce24d0db1286632977ce1aa06d0b Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:00:55 -0700 Subject: [PATCH 0130/1495] New translations en-US.json (Portuguese, Brazilian) --- src/lang/pt-BR.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index 61479a20b0..43032a4fd6 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculado pelo método Wilson", "histograms_name": "Histograma", "histograms_description": "Percentagens indicam taxas de vitórias para o intervalo rotulado", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Tendências", "trends_description": "Média acumulada dos últimos 500 jogos", "trends_tooltip_average": "Méd.", From 15ba11046cc408539c5683e99ee1766f69e96617 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:00:58 -0700 Subject: [PATCH 0131/1495] New translations en-US.json (Portuguese) --- src/lang/pt-PT.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/pt-PT.json b/src/lang/pt-PT.json index c423e77e80..514b0f0ab6 100644 --- a/src/lang/pt-PT.json +++ b/src/lang/pt-PT.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Trends", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Avg.", From 107ca63a7aff427cd9b0b7d7cdb3cd04206f20a0 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:01:00 -0700 Subject: [PATCH 0132/1495] New translations en-US.json (Polish) --- src/lang/pl-PL.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/pl-PL.json b/src/lang/pl-PL.json index 469687bf54..181b4ba9ee 100644 --- a/src/lang/pl-PL.json +++ b/src/lang/pl-PL.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Obliczone na podstawie Wilson Score", "histograms_name": "Histogramy", "histograms_description": "Procenty oznaczają średnią wygranych dla oznaczonych przedziałów", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Trendy", "trends_description": "Zbiorcza średnia ostatnich 500 gier", "trends_tooltip_average": "Śr.", From 8bc8049e02a2b473118456b4a2c22b26da372e32 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:01:03 -0700 Subject: [PATCH 0133/1495] New translations en-US.json (Norwegian) --- src/lang/no-NO.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/no-NO.json b/src/lang/no-NO.json index c280d8ef87..e40d04a367 100644 --- a/src/lang/no-NO.json +++ b/src/lang/no-NO.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Trends", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Avg.", From 2d3bfc8571611ac83950f09e1d94375e250201f9 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:01:05 -0700 Subject: [PATCH 0134/1495] New translations en-US.json (Japanese) --- src/lang/ja-JP.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/ja-JP.json b/src/lang/ja-JP.json index c8bac45733..8ab8300bc1 100644 --- a/src/lang/ja-JP.json +++ b/src/lang/ja-JP.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "ヒストグラム", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "トレンド", "trends_description": "過去500試合の累積平均", "trends_tooltip_average": "平均", From 94017f0c12d217ae53c5f27d8252157b2a4c930c Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:01:08 -0700 Subject: [PATCH 0135/1495] New translations en-US.json (Malay) --- src/lang/ms-MY.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/ms-MY.json b/src/lang/ms-MY.json index 80ed719b64..8af43ae50c 100644 --- a/src/lang/ms-MY.json +++ b/src/lang/ms-MY.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Dikira oleh Wilson score", "histograms_name": "Histogram", "histograms_description": "Peratusan menunjukkan kadar menang bagi bin berlabel", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Trend", "trends_description": "Purata lebih 500 perlawanan terakhir", "trends_tooltip_average": "Avg.", From 20560182cfd89db7ee1623900fbc02201c57d6df Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:01:11 -0700 Subject: [PATCH 0136/1495] New translations en-US.json (Hungarian) --- src/lang/hu-HU.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/hu-HU.json b/src/lang/hu-HU.json index dd2d04e534..a781b06654 100644 --- a/src/lang/hu-HU.json +++ b/src/lang/hu-HU.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Trends", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Avg.", From 6dd81fdf27f33585626dde9836a70b1cf807ca02 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:01:13 -0700 Subject: [PATCH 0137/1495] New translations en-US.json (Hebrew) --- src/lang/he-IL.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/he-IL.json b/src/lang/he-IL.json index 1e3f3358d9..680543b09f 100644 --- a/src/lang/he-IL.json +++ b/src/lang/he-IL.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "מגמות", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "ממוצע", From 4f21828f502e18215b42d1b3ed745a4c34c05e48 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:01:16 -0700 Subject: [PATCH 0138/1495] New translations en-US.json (Greek) --- src/lang/el-GR.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/el-GR.json b/src/lang/el-GR.json index eafe6a915f..6ec47bf578 100644 --- a/src/lang/el-GR.json +++ b/src/lang/el-GR.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Trends", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Avg.", From 53f5e2655d2f6caed9eb40dc66218dc12139a5ed Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:01:19 -0700 Subject: [PATCH 0139/1495] New translations en-US.json (German) --- src/lang/de-DE.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index 9c01498f66..5867a4cf6f 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Histogramme", "histograms_description": "Prozentzahlen zeigen die Winrates für den markierten bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Trends", "trends_description": "Kumulierter Durchschnitt über die letzten 500 Spiele", "trends_tooltip_average": "Durchschn.", From feae552f053ef8fe7c01a392dceaf9666d09817d Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:01:22 -0700 Subject: [PATCH 0140/1495] New translations en-US.json (French) --- src/lang/fr-FR.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/fr-FR.json b/src/lang/fr-FR.json index 8b2f9d3a3a..122749d1b5 100644 --- a/src/lang/fr-FR.json +++ b/src/lang/fr-FR.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculé par score de Wilson", "histograms_name": "Histogrammes", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Tendances", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Moy.", From 5f9ed906e97713b673ca9b9af0810f2133b4f812 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:01:25 -0700 Subject: [PATCH 0141/1495] New translations en-US.json (Finnish) --- src/lang/fi-FI.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/fi-FI.json b/src/lang/fi-FI.json index 0f06fe807d..44e580c035 100644 --- a/src/lang/fi-FI.json +++ b/src/lang/fi-FI.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Trends", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Avg.", From d7cf95bbb9d03dc6288c6d418a0703feb1e2e527 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:01:27 -0700 Subject: [PATCH 0142/1495] New translations en-US.json (Dutch) --- src/lang/nl-NL.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/nl-NL.json b/src/lang/nl-NL.json index 406691261e..4f586dbbf3 100644 --- a/src/lang/nl-NL.json +++ b/src/lang/nl-NL.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Trends", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Avg.", From 7ad72e1140f75dbfacf97f71ad98a3d1c8555410 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:01:30 -0700 Subject: [PATCH 0143/1495] New translations en-US.json (Danish) --- src/lang/da-DK.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/da-DK.json b/src/lang/da-DK.json index 998e1d6549..7639d6a002 100644 --- a/src/lang/da-DK.json +++ b/src/lang/da-DK.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Trends", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Avg.", From b64d021ecd2f6f161750e83168a279c7e5b81aac Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:01:33 -0700 Subject: [PATCH 0144/1495] New translations en-US.json (Czech) --- src/lang/cs-CZ.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/cs-CZ.json b/src/lang/cs-CZ.json index 5f052739dc..50c4cdda7d 100644 --- a/src/lang/cs-CZ.json +++ b/src/lang/cs-CZ.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Trends", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Avg.", From 40ce28f20fba9009937b55cc3b946e6725d07fa3 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:01:36 -0700 Subject: [PATCH 0145/1495] New translations en-US.json (Chinese Traditional) --- src/lang/zh-TW.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/zh-TW.json b/src/lang/zh-TW.json index a05d737a7a..3b5bd16dad 100644 --- a/src/lang/zh-TW.json +++ b/src/lang/zh-TW.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "直方图", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "趋势", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Avg.", From 057b56a88d87f885e1efde03bbd6cb0f6a39412b Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:01:39 -0700 Subject: [PATCH 0146/1495] New translations en-US.json (Chinese Simplified) --- src/lang/zh-CN.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index 0218045549..5407815044 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -905,6 +905,20 @@ "tooltip_advantage": "按 Wilson 评分计算", "histograms_name": "直方图", "histograms_description": "百分比表示当前标签下的胜率", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "趋势", "trends_description": "近 20 场比赛累计平均值", "trends_tooltip_average": "平均", From ede4b60fae0514002d856105ff21ff0a8d04f3b7 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:01:41 -0700 Subject: [PATCH 0147/1495] New translations en-US.json (Bulgarian) --- src/lang/bg-BG.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/bg-BG.json b/src/lang/bg-BG.json index 43012511a9..f14df5d4e2 100644 --- a/src/lang/bg-BG.json +++ b/src/lang/bg-BG.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Trends", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Avg.", From 0bbae9a2b3548cd5a15c3b292cc4f2c2eace5e0e Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:01:44 -0700 Subject: [PATCH 0148/1495] New translations en-US.json (Italian) --- src/lang/it-IT.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/it-IT.json b/src/lang/it-IT.json index d93e46d240..e91fa9ed39 100644 --- a/src/lang/it-IT.json +++ b/src/lang/it-IT.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Istogrammi", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Tendenze", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Media", From a7712374ca4a84360d9fd2f90c5608ceb630f2fb Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 29 Mar 2018 22:01:47 -0700 Subject: [PATCH 0149/1495] New translations en-US.json (Vietnamese) --- src/lang/vi-VN.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/vi-VN.json b/src/lang/vi-VN.json index 6333ac8c70..6cb5f98ec6 100644 --- a/src/lang/vi-VN.json +++ b/src/lang/vi-VN.json @@ -905,6 +905,20 @@ "tooltip_advantage": "Calculated by Wilson score", "histograms_name": "Biểu đồ", "histograms_description": "Percentages indicate win rates for the labeled bin", + "histograms_actions_per_min_description": "Actions performed by player per minute", + "histograms_comeback_description": "Maximum gold advantage in a won game", + "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_gold_per_min_description": "Gold farmed per minute", + "histograms_hero_damage_description": "Amount of damage dealt to heroes", + "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_level_description": "Level achieved in a game", + "histograms_loss_description": "Maximum gold disadvantage in a lost game", + "histograms_pings_description": "Number of times the player pinged the map", + "histograms_stomp_description": "Maximum gold disadvantage in a won game", + "histograms_stuns_description": "Seconds of disable on heroes", + "histograms_throw_description": "Maximum gold advantage in a lost game", + "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", + "histograms_xp_per_min_description": "Experience gained per minute", "trends_name": "Xu hướng", "trends_description": "Cumulative average over last 500 games", "trends_tooltip_average": "Avg.", From 09c0bf51b3b21488a05710d6b78c7189107ffeee Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Fri, 30 Mar 2018 12:06:46 +0000 Subject: [PATCH 0150/1495] use relative paths --- src/actions/index.js | 14 ++++----- .../AccountWidget/AccountWidget.jsx | 4 +-- src/components/Announce/Announce.jsx | 2 +- src/components/App/App.jsx | 30 +++++++++---------- src/components/Assistant/index.jsx | 2 +- src/components/Container/index.jsx | 6 ++-- src/components/Distributions/index.jsx | 14 ++++----- src/components/Error/ErrorBox.jsx | 2 +- src/components/Explorer/ExplorerFormField.jsx | 2 +- .../Explorer/ExplorerOutputSection.jsx | 6 ++-- src/components/Explorer/index.jsx | 6 ++-- src/components/Header/BurgerMenu/index.jsx | 2 +- src/components/Header/Header.jsx | 6 ++-- src/components/Heatmap/Heatmap.jsx | 2 +- src/components/Hero/AttributesBlock.jsx | 8 ++--- src/components/Hero/Benchmark.jsx | 4 +-- src/components/Hero/BenchmarkTable.jsx | 2 +- src/components/Hero/Durations.jsx | 6 ++-- src/components/Hero/Matchups.jsx | 6 ++-- src/components/Hero/Players.jsx | 6 ++-- src/components/Hero/Ranking.jsx | 4 +-- src/components/Hero/RankingTable.jsx | 2 +- src/components/Hero/Recent.jsx | 10 +++---- src/components/Hero/index.jsx | 10 +++---- src/components/Heroes/columns.jsx | 2 +- src/components/Heroes/index.jsx | 10 +++---- src/components/Home/Buttons.jsx | 2 +- src/components/Home/Why.jsx | 2 +- src/components/Match/AbilityBuildTable.jsx | 6 ++-- src/components/Match/AbilityDraftTable.jsx | 6 ++-- .../Match/BuildingMap/BuildingMap.jsx | 6 ++-- src/components/Match/CastTable.jsx | 2 +- src/components/Match/Chat/Chat.jsx | 2 +- src/components/Match/CrossTable.jsx | 2 +- src/components/Match/Draft/Draft.jsx | 4 +-- src/components/Match/Laning/index.jsx | 8 ++--- src/components/Match/Match.jsx | 6 ++-- .../Match/MatchHeader/MatchHeader.jsx | 6 ++-- src/components/Match/MatchLog.jsx | 6 ++-- src/components/Match/MatchStory.jsx | 2 +- src/components/Match/Overview/Overview.jsx | 2 +- src/components/Match/Overview/Timeline.jsx | 4 +-- src/components/Match/Purchases/index.jsx | 4 +-- src/components/Match/TargetsBreakdown.jsx | 2 +- src/components/Match/TeamTable.jsx | 6 ++-- src/components/Match/TeamfightMap/index.jsx | 12 ++++---- src/components/Match/Vision/LogHover.jsx | 2 +- src/components/Match/Vision/VisionFilter.jsx | 4 +-- src/components/Match/Vision/VisionItems.jsx | 4 +-- src/components/Match/Vision/VisionLog.jsx | 4 +-- src/components/Match/Vision/VisionMap.jsx | 4 +-- src/components/Match/matchColumns.jsx | 6 ++-- src/components/Match/matchPages.jsx | 16 +++++----- src/components/Matches/index.jsx | 12 ++++---- src/components/Meta/index.jsx | 10 +++---- src/components/Player/Header/PlayerBadges.jsx | 6 ++-- .../Player/Header/PlayerButtons.jsx | 4 +-- src/components/Player/Header/PlayerHeader.jsx | 4 +-- src/components/Player/Header/PlayerStats.jsx | 4 +-- src/components/Player/Pages/Counts/Counts.jsx | 6 ++-- src/components/Player/Pages/Heroes/Heroes.jsx | 6 ++-- .../Pages/Heroes/playerHeroesColumns.jsx | 2 +- .../Player/Pages/Histograms/Histograms.jsx | 12 ++++---- src/components/Player/Pages/Items/Items.jsx | 6 ++-- src/components/Player/Pages/MMR/MMR.jsx | 8 ++--- .../Player/Pages/Matches/Matches.jsx | 6 ++-- .../Player/Pages/Overview/Overview.jsx | 12 ++++---- src/components/Player/Pages/Peers/Peers.jsx | 6 ++-- .../Player/Pages/Peers/playerPeersColumns.jsx | 2 +- src/components/Player/Pages/Pros/Pros.jsx | 6 ++-- .../Player/Pages/Pros/playerProsColumns.jsx | 2 +- .../Player/Pages/Rankings/Rankings.jsx | 6 ++-- .../Player/Pages/Records/Records.jsx | 10 +++---- src/components/Player/Pages/Totals/Totals.jsx | 4 +-- src/components/Player/Pages/Trends/Trends.jsx | 12 ++++---- .../Player/Pages/Wardmap/Wardmap.jsx | 6 ++-- .../Player/Pages/Wordcloud/Wordcloud.jsx | 6 ++-- src/components/Player/Player.jsx | 6 ++-- .../Player/TableFilterForm/index.jsx | 4 +-- src/components/Predictions/index.jsx | 6 ++-- src/components/Records/index.jsx | 12 ++++---- src/components/Request/Request.jsx | 2 +- src/components/Search/Search.jsx | 2 +- src/components/Search/SearchForm.jsx | 2 +- src/components/Search/SearchResult.jsx | 4 +-- src/components/Status/Status.jsx | 2 +- src/components/Table/Table.jsx | 4 +-- src/components/Team/Overview.jsx | 4 +-- src/components/Team/TeamStyled.jsx | 2 +- src/components/Team/index.jsx | 6 ++-- src/components/Team/teamDataColumns.jsx | 2 +- src/components/Team/teamPages.jsx | 4 +-- src/components/Teams/index.jsx | 8 ++--- .../Visualizations/Graph/MMRGraph.jsx | 2 +- .../Visualizations/Graph/MatchGraph.jsx | 4 +-- .../Visualizations/Graph/StackedBarGraph.jsx | 4 +-- .../Visualizations/Graph/Styled.jsx | 2 +- .../Visualizations/Graph/TrendGraph.jsx | 2 +- .../Visualizations/Table/HeroImage.jsx | 4 +-- src/index.js | 8 ++--- src/reducers/form.js | 2 +- src/reducers/request.js | 2 +- src/stories/ColorPalette.jsx | 4 +-- src/utility/index.jsx | 6 ++-- 104 files changed, 283 insertions(+), 283 deletions(-) diff --git a/src/actions/index.js b/src/actions/index.js index a1b2fbfa76..cbdd8ae569 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -1,10 +1,10 @@ -import transformMatch from 'actions/transformMatch'; -import transformBenchmarks from 'actions/transformBenchmarks'; -import transformCounts from 'actions/transformCounts'; -import transformHistograms from 'actions/transformHistograms'; -import transformTrends from 'actions/transformTrends'; -import transformRankings from 'actions/transformRankings'; -import action from 'actions/action'; +import transformMatch from '../../actions/transformMatch'; +import transformBenchmarks from '../../actions/transformBenchmarks'; +import transformCounts from '../../actions/transformCounts'; +import transformHistograms from '../../actions/transformHistograms'; +import transformTrends from '../../actions/transformTrends'; +import transformRankings from '../../actions/transformRankings'; +import action from '../../actions/action'; import querystring from 'querystring'; export const getMetadata = () => action('metadata', process.env.REACT_APP_API_HOST, 'api/metadata'); diff --git a/src/components/AccountWidget/AccountWidget.jsx b/src/components/AccountWidget/AccountWidget.jsx index 0e86494860..deaacd50d3 100644 --- a/src/components/AccountWidget/AccountWidget.jsx +++ b/src/components/AccountWidget/AccountWidget.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -// import { getPlayer } from 'actions'; +// import { getPlayer } from '../../actions'; import strings from 'lang'; -import { IconSteam } from 'components/Icons'; +import { IconSteam } from '../components/Icons'; import styled from 'styled-components'; import Spinner from '../Spinner'; import Error from '../Error'; diff --git a/src/components/Announce/Announce.jsx b/src/components/Announce/Announce.jsx index 9ca685934e..2e7216cff7 100644 --- a/src/components/Announce/Announce.jsx +++ b/src/components/Announce/Announce.jsx @@ -4,7 +4,7 @@ import PropTypes from 'prop-types'; import RaisedButton from 'material-ui/RaisedButton'; import strings from 'lang'; import { connect } from 'react-redux'; -import { getGithubPulls } from 'actions'; +import { getGithubPulls } from '../../actions'; import ReactMarkdown from 'react-markdown'; import styled from 'styled-components'; import constants from '../constants'; diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index 852330ff71..5abd5663eb 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -7,21 +7,21 @@ import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'; import Helmet from 'react-helmet'; import strings from 'lang'; import { Route } from 'react-router-dom'; -import Player from 'components/Player'; -import Home from 'components/Home'; -import Search from 'components/Search'; -import Explorer from 'components/Explorer'; -// import FourOhFour from 'components/FourOhFour'; -import Heroes from 'components/Heroes'; -import Request from 'components/Request'; -import Distributions from 'components/Distributions'; -import Status from 'components/Status'; -import Matches from 'components/Matches'; -import Teams from 'components/Teams'; -// import Assistant from 'components/Assistant'; -import Records from 'components/Records'; -// import Predictions from 'components/Predictions'; -import Meta from 'components/Meta'; +import Player from '../components/Player'; +import Home from '../components/Home'; +import Search from '../components/Search'; +import Explorer from '../components/Explorer'; +// import FourOhFour from '../components/FourOhFour'; +import Heroes from '../components/Heroes'; +import Request from '../components/Request'; +import Distributions from '../components/Distributions'; +import Status from '../components/Status'; +import Matches from '../components/Matches'; +import Teams from '../components/Teams'; +// import Assistant from '../components/Assistant'; +import Records from '../components/Records'; +// import Predictions from '../components/Predictions'; +import Meta from '../components/Meta'; import styled from 'styled-components'; import Header from '../Header'; import Footer from '../Footer'; diff --git a/src/components/Assistant/index.jsx b/src/components/Assistant/index.jsx index 807ac4c154..b332cb3688 100644 --- a/src/components/Assistant/index.jsx +++ b/src/components/Assistant/index.jsx @@ -1,6 +1,6 @@ /* eslint-disable */ import React from 'react'; -import Heading from 'components/Heading'; +import Heading from '../components/Heading'; import IconButton from 'material-ui/IconButton'; import Mic from 'material-ui/svg-icons/av/mic'; diff --git a/src/components/Container/index.jsx b/src/components/Container/index.jsx index e1bd51e3e9..ad28345b6c 100644 --- a/src/components/Container/index.jsx +++ b/src/components/Container/index.jsx @@ -1,8 +1,8 @@ import React from 'react'; import PropTypes from 'prop-types'; -import Heading from 'components/Heading'; -import Spinner from 'components/Spinner'; -import Error from 'components/Error'; +import Heading from '../components/Heading'; +import Spinner from '../components/Spinner'; +import Error from '../components/Error'; import stylePropType from 'react-style-proptype'; export const AsyncContainer = ({ loading, error, children }) => { diff --git a/src/components/Distributions/index.jsx b/src/components/Distributions/index.jsx index 7cc7f16b8e..d02da2c468 100644 --- a/src/components/Distributions/index.jsx +++ b/src/components/Distributions/index.jsx @@ -3,21 +3,21 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Helmet from 'react-helmet'; -import { getDistributions } from 'actions'; +import { getDistributions } from '../../actions'; import strings from 'lang'; -import Table from 'components/Table'; +import Table from '../components/Table'; import { sum, abbreviateNumber, getOrdinal, rankTierToString, } from 'utility'; -// import Warning from 'components/Alerts'; -import TabBar from 'components/TabBar'; -import Spinner from 'components/Spinner'; -import Heading from 'components/Heading'; +// import Warning from '../components/Alerts'; +import TabBar from '../components/TabBar'; +import Spinner from '../components/Spinner'; +import Heading from '../components/Heading'; import styled from 'styled-components'; -import { DistributionGraph } from 'components/Visualizations'; +import { DistributionGraph } from '../components/Visualizations'; import constants from '../constants'; const CountryDiv = styled.div` diff --git a/src/components/Error/ErrorBox.jsx b/src/components/Error/ErrorBox.jsx index 08b5569549..df8b16cd57 100644 --- a/src/components/Error/ErrorBox.jsx +++ b/src/components/Error/ErrorBox.jsx @@ -1,7 +1,7 @@ import React from 'react'; import { string } from 'prop-types'; import styled from 'styled-components'; -import constants from 'components/constants'; +import constants from '../components/constants'; const Wrapper = styled.div` background-color: ${constants.colorDanger}; diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index 51c6baa9da..d6f29effe1 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -2,7 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import AutoComplete from 'material-ui/AutoComplete'; import DatePicker from 'material-ui/DatePicker'; -// import FormField from 'components/Form/FormField'; +// import FormField from '../components/Form/FormField'; class ExplorerFormField extends React.Component { constructor() { diff --git a/src/components/Explorer/ExplorerOutputSection.jsx b/src/components/Explorer/ExplorerOutputSection.jsx index 93c463abe7..512366d052 100644 --- a/src/components/Explorer/ExplorerOutputSection.jsx +++ b/src/components/Explorer/ExplorerOutputSection.jsx @@ -8,15 +8,15 @@ import { import { Link } from 'react-router-dom'; import strings from 'lang'; -import Table from 'components/Table'; +import Table from '../components/Table'; import itemData from 'dotaconstants/build/items.json'; -import { IconRadiant, IconDire } from 'components/Icons'; +import { IconRadiant, IconDire } from '../components/Icons'; // import heroes from 'dotaconstants/build/heroes.json'; import { TablePercent, inflictorWithValue, } - from 'components/Visualizations'; + from '../components/Visualizations'; // import redrawGraphs from './redrawGraphs'; import constants from '../constants'; import { StyledTeamIconContainer } from '../Match/StyledMatch'; diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 452f0ed533..29acc270c9 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -4,19 +4,19 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import fetch from 'isomorphic-fetch'; -import Spinner from 'components/Spinner'; +import Spinner from '../components/Spinner'; import RaisedButton from 'material-ui/RaisedButton'; import strings from 'lang'; import Helmet from 'react-helmet'; import { getScript } from 'utility'; -import Heading from 'components/Heading'; +import Heading from '../components/Heading'; import { getProPlayers, getLeagues, getTeams, } - from 'actions'; + from '../../actions'; import querystring from 'querystring'; import json2csv from 'json2csv'; import queryTemplate from './queryTemplate'; diff --git a/src/components/Header/BurgerMenu/index.jsx b/src/components/Header/BurgerMenu/index.jsx index da52ba054d..1a0a1d0117 100644 --- a/src/components/Header/BurgerMenu/index.jsx +++ b/src/components/Header/BurgerMenu/index.jsx @@ -6,7 +6,7 @@ import MenuItem from 'material-ui/MenuItem'; import IconButton from 'material-ui/IconButton'; import MenuIcon from 'material-ui/svg-icons/navigation/menu'; import styled from 'styled-components'; -import constants from 'components/constants'; +import constants from '../components/constants'; const StyledDrawer = styled(Drawer)` background-color: ${constants.defaultPrimaryColor} !important; diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index f3674d25aa..fe2a05c7a9 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -9,9 +9,9 @@ import ActionSettings from 'material-ui/svg-icons/action/settings'; import Bug from 'material-ui/svg-icons/action/bug-report'; import LogOutButton from 'material-ui/svg-icons/action/power-settings-new'; import strings from 'lang'; -import { LocalizationMenu } from 'components/Localization'; -import Dropdown from 'components/Header/Dropdown'; -import Announce from 'components/Announce'; +import { LocalizationMenu } from '../components/Localization'; +import Dropdown from '../components/Header/Dropdown'; +import Announce from '../components/Announce'; import styled from 'styled-components'; import constants from '../constants'; import AccountWidget from '../AccountWidget'; diff --git a/src/components/Heatmap/Heatmap.jsx b/src/components/Heatmap/Heatmap.jsx index f622de9cbd..86f6e1e67a 100644 --- a/src/components/Heatmap/Heatmap.jsx +++ b/src/components/Heatmap/Heatmap.jsx @@ -1,6 +1,6 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; -import DotaMap from 'components/DotaMap'; +import DotaMap from '../components/DotaMap'; import uuid from 'uuid'; import h337 from 'heatmap.js'; diff --git a/src/components/Hero/AttributesBlock.jsx b/src/components/Hero/AttributesBlock.jsx index 71314ef839..5412088fbe 100644 --- a/src/components/Hero/AttributesBlock.jsx +++ b/src/components/Hero/AttributesBlock.jsx @@ -2,10 +2,10 @@ import React from 'react'; import { shape, number, string, bool } from 'prop-types'; import styled from 'styled-components'; import strings from 'lang'; -import AttrStrength from 'components/Icons/AttrStrength'; -import AttrAgility from 'components/Icons/AttrAgility'; -import AttrIntelligent from 'components/Icons/AttrIntelligent'; -import constants from 'components/constants'; +import AttrStrength from '../components/Icons/AttrStrength'; +import AttrAgility from '../components/Icons/AttrAgility'; +import AttrIntelligent from '../components/Icons/AttrIntelligent'; +import constants from '../components/constants'; import Attribute from './Attribute'; diff --git a/src/components/Hero/Benchmark.jsx b/src/components/Hero/Benchmark.jsx index 14bfe577fa..8b66d551a4 100644 --- a/src/components/Hero/Benchmark.jsx +++ b/src/components/Hero/Benchmark.jsx @@ -1,8 +1,8 @@ import React, { Component } from 'react'; import { shape, func, bool, arrayOf, oneOfType, string } from 'prop-types'; import { connect } from 'react-redux'; -import { getBenchmark } from 'actions'; -import Spinner from 'components/Spinner'; +import { getBenchmark } from '../../actions'; +import Spinner from '../components/Spinner'; import BenchmarkTable from './BenchmarkTable'; const renderBenchmark = (hero, data) => ( diff --git a/src/components/Hero/BenchmarkTable.jsx b/src/components/Hero/BenchmarkTable.jsx index c2553bf23f..f73f088d23 100644 --- a/src/components/Hero/BenchmarkTable.jsx +++ b/src/components/Hero/BenchmarkTable.jsx @@ -1,6 +1,6 @@ import React from 'react'; import { oneOfType, shape, arrayOf } from 'prop-types'; -import Table from 'components/Table'; +import Table from '../components/Table'; import strings from 'lang'; const columns = data => Object.keys(data[0] || {}).map(stat => ({ diff --git a/src/components/Hero/Durations.jsx b/src/components/Hero/Durations.jsx index b8f5aadf66..7439f411ec 100644 --- a/src/components/Hero/Durations.jsx +++ b/src/components/Hero/Durations.jsx @@ -1,9 +1,9 @@ import React from 'react'; import { string, shape, func, bool, arrayOf, number } from 'prop-types'; import { connect } from 'react-redux'; -import { getHeroDurations } from 'actions'; -import Spinner from 'components/Spinner'; -import { HistogramGraph } from 'components/Visualizations'; +import { getHeroDurations } from '../../actions'; +import Spinner from '../components/Spinner'; +import { HistogramGraph } from '../components/Visualizations'; import strings from 'lang'; class Durations extends React.Component { diff --git a/src/components/Hero/Matchups.jsx b/src/components/Hero/Matchups.jsx index 2e6b3b82ef..751da148d1 100644 --- a/src/components/Hero/Matchups.jsx +++ b/src/components/Hero/Matchups.jsx @@ -1,10 +1,10 @@ import React from 'react'; import { shape, string, bool, number, func, arrayOf } from 'prop-types'; import { connect } from 'react-redux'; -import { getHeroMatchups } from 'actions'; +import { getHeroMatchups } from '../../actions'; import styled from 'styled-components'; -import Spinner from 'components/Spinner'; -import Table, { TableLink } from 'components/Table'; +import Spinner from '../components/Spinner'; +import Table, { TableLink } from '../components/Table'; import strings from 'lang'; import { wilsonScore } from 'utility'; diff --git a/src/components/Hero/Players.jsx b/src/components/Hero/Players.jsx index 91dc0fe08e..61748ba3b7 100644 --- a/src/components/Hero/Players.jsx +++ b/src/components/Hero/Players.jsx @@ -1,9 +1,9 @@ import React from 'react'; import { bool, func, arrayOf, shape, number, string } from 'prop-types'; import { connect } from 'react-redux'; -import { getHeroPlayers } from 'actions'; -import Spinner from 'components/Spinner'; -import Table, { TableLink } from 'components/Table'; +import { getHeroPlayers } from '../../actions'; +import Spinner from '../components/Spinner'; +import Table, { TableLink } from '../components/Table'; import strings from 'lang'; import { wilsonScore } from 'utility'; import { proPlayersSelector } from 'reducers/selectors'; diff --git a/src/components/Hero/Ranking.jsx b/src/components/Hero/Ranking.jsx index 41964f792b..7209cfc98c 100644 --- a/src/components/Hero/Ranking.jsx +++ b/src/components/Hero/Ranking.jsx @@ -1,8 +1,8 @@ import React, { Component } from 'react'; import { shape, string, bool, oneOfType, func, arrayOf } from 'prop-types'; import { connect } from 'react-redux'; -import { getRanking } from 'actions'; -import Spinner from 'components/Spinner'; +import { getRanking } from '../../actions'; +import Spinner from '../components/Spinner'; import RankingTable from './RankingTable'; const renderRanking = (hero, rankings) => ( diff --git a/src/components/Hero/RankingTable.jsx b/src/components/Hero/RankingTable.jsx index 31faf5dfbe..f40989cfb2 100644 --- a/src/components/Hero/RankingTable.jsx +++ b/src/components/Hero/RankingTable.jsx @@ -1,6 +1,6 @@ import React from 'react'; import { shape, oneOfType, arrayOf } from 'prop-types'; -import Table from 'components/Table'; +import Table from '../components/Table'; import strings from 'lang'; import { transformations, getOrdinal, rankTierToString } from 'utility'; diff --git a/src/components/Hero/Recent.jsx b/src/components/Hero/Recent.jsx index bcd92df04e..c2b31403f1 100644 --- a/src/components/Hero/Recent.jsx +++ b/src/components/Hero/Recent.jsx @@ -2,14 +2,14 @@ import React from 'react'; import { arrayOf, shape, bool, func, string, oneOfType } from 'prop-types'; import { connect } from 'react-redux'; import styled from 'styled-components'; -import Table, { TableLink } from 'components/Table'; -import ErrorBox from 'components/Error/ErrorBox'; -import Spinner from 'components/Spinner'; -import { getHeroRecentGames } from 'actions'; +import Table, { TableLink } from '../components/Table'; +import ErrorBox from '../components/Error/ErrorBox'; +import Spinner from '../components/Spinner'; +import { getHeroRecentGames } from '../../actions'; import strings from 'lang'; import { transformations } from 'utility'; import { proPlayersSelector } from 'reducers/selectors'; -import constants from 'components/constants'; +import constants from '../components/constants'; const LeagueName = styled.span` color: ${constants.colorMutedLight}; diff --git a/src/components/Hero/index.jsx b/src/components/Hero/index.jsx index e6178ad715..80e1cd597d 100644 --- a/src/components/Hero/index.jsx +++ b/src/components/Hero/index.jsx @@ -3,11 +3,11 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Helmet from 'react-helmet'; import strings from 'lang'; -import Heading from 'components/Heading'; -import TabBar from 'components/TabBar'; -import Spinner from 'components/Spinner'; -import ErrorBox from 'components/Error/ErrorBox'; -import constants from 'components/constants'; +import Heading from '../components/Heading'; +import TabBar from '../components/TabBar'; +import Spinner from '../components/Spinner'; +import ErrorBox from '../components/Error/ErrorBox'; +import constants from '../components/constants'; import styled from 'styled-components'; import { heroSelector } from 'reducers/selectors'; import Ranking from './Ranking'; diff --git a/src/components/Heroes/columns.jsx b/src/components/Heroes/columns.jsx index a69fd325e4..02461b506c 100644 --- a/src/components/Heroes/columns.jsx +++ b/src/components/Heroes/columns.jsx @@ -5,7 +5,7 @@ import { } from 'utility'; import strings from 'lang'; import heroes from 'dotaconstants/build/heroes.json'; -// import TablePercent from 'components/Visualizations/Table/Percent'; +// import TablePercent from '../components/Visualizations/Table/Percent'; const decimalToCount = (decimal, total) => ( total && diff --git a/src/components/Heroes/index.jsx b/src/components/Heroes/index.jsx index 713408c2ce..a3773fce8a 100644 --- a/src/components/Heroes/index.jsx +++ b/src/components/Heroes/index.jsx @@ -3,11 +3,11 @@ import PropTypes from 'prop-types'; import Helmet from 'react-helmet'; import { connect } from 'react-redux'; import strings from 'lang'; -import { getHeroStats, getProPlayers } from 'actions'; -import Heading from 'components/Heading'; -import Table from 'components/Table'; -import TabBar from 'components/TabBar'; -import Hero from 'components/Hero'; +import { getHeroStats, getProPlayers } from '../../actions'; +import Heading from '../components/Heading'; +import Table from '../components/Table'; +import TabBar from '../components/TabBar'; +import Hero from '../components/Hero'; import heroes from 'dotaconstants/build/heroes.json'; import { sum, diff --git a/src/components/Home/Buttons.jsx b/src/components/Home/Buttons.jsx index 148c28c5db..ebf0c2858a 100644 --- a/src/components/Home/Buttons.jsx +++ b/src/components/Home/Buttons.jsx @@ -4,7 +4,7 @@ import PropTypes from 'prop-types'; import FlatButton from 'material-ui/FlatButton'; import { connect } from 'react-redux'; import strings from 'lang'; -import { IconSteam } from 'components/Icons'; +import { IconSteam } from '../components/Icons'; import { ButtonsDiv } from './Styled'; const Buttons = ({ user }) => ( diff --git a/src/components/Home/Why.jsx b/src/components/Home/Why.jsx index 09ef536855..ab9c0ee163 100644 --- a/src/components/Home/Why.jsx +++ b/src/components/Home/Why.jsx @@ -1,6 +1,6 @@ import React from 'react'; import strings from 'lang'; -import { IconOpenSource, IconStatsBars, IconWand } from 'components/Icons'; +import { IconOpenSource, IconStatsBars, IconWand } from '../components/Icons'; import styled from 'styled-components'; import constants from '../constants'; diff --git a/src/components/Match/AbilityBuildTable.jsx b/src/components/Match/AbilityBuildTable.jsx index 53ea4258bc..e9c91145a2 100644 --- a/src/components/Match/AbilityBuildTable.jsx +++ b/src/components/Match/AbilityBuildTable.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { isRadiant, getTeamName } from 'utility'; -import { IconRadiant, IconDire } from 'components/Icons'; -import Heading from 'components/Heading'; -import Table from 'components/Table'; +import { IconRadiant, IconDire } from '../components/Icons'; +import Heading from '../components/Heading'; +import Table from '../components/Table'; const filterMatchPlayers = (players, team = '') => players diff --git a/src/components/Match/AbilityDraftTable.jsx b/src/components/Match/AbilityDraftTable.jsx index 011ea32a5c..23c8a9902f 100644 --- a/src/components/Match/AbilityDraftTable.jsx +++ b/src/components/Match/AbilityDraftTable.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { isRadiant, getTeamName } from 'utility'; -import { IconRadiant, IconDire } from 'components/Icons'; -import Heading from 'components/Heading'; -import Table from 'components/Table'; +import { IconRadiant, IconDire } from '../components/Icons'; +import Heading from '../components/Heading'; +import Table from '../components/Table'; const filterMatchPlayers = (players, team = '') => players diff --git a/src/components/Match/BuildingMap/BuildingMap.jsx b/src/components/Match/BuildingMap/BuildingMap.jsx index 58cea75497..416a3b7758 100644 --- a/src/components/Match/BuildingMap/BuildingMap.jsx +++ b/src/components/Match/BuildingMap/BuildingMap.jsx @@ -7,11 +7,11 @@ import { } from 'utility'; import playerColors from 'dotaconstants/build/player_colors.json'; import heroes from 'dotaconstants/build/heroes.json'; -import Heading from 'components/Heading'; -import DotaMap from 'components/DotaMap'; +import Heading from '../components/Heading'; +import DotaMap from '../components/DotaMap'; import strings from 'lang'; import ReactTooltip from 'react-tooltip'; -// import { IconLightbulb } from 'components/Icons'; +// import { IconLightbulb } from '../components/Icons'; import styled from 'styled-components'; import buildingData from './buildingData'; import constants from '../../constants'; diff --git a/src/components/Match/CastTable.jsx b/src/components/Match/CastTable.jsx index 834597758d..247320749b 100644 --- a/src/components/Match/CastTable.jsx +++ b/src/components/Match/CastTable.jsx @@ -4,7 +4,7 @@ import { Tabs, Tab, } from 'material-ui/Tabs'; -import { inflictorWithValue } from 'components/Visualizations'; +import { inflictorWithValue } from '../components/Visualizations'; import heroes from 'dotaconstants/build/heroes.json'; import strings from 'lang'; import Table from '../Table/Table'; diff --git a/src/components/Match/Chat/Chat.jsx b/src/components/Match/Chat/Chat.jsx index 579735dedf..854bc50e8f 100644 --- a/src/components/Match/Chat/Chat.jsx +++ b/src/components/Match/Chat/Chat.jsx @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; import { isRadiant, formatSeconds } from 'utility'; import strings from 'lang'; -import { IconRadiant, IconDire } from 'components/Icons'; +import { IconRadiant, IconDire } from '../components/Icons'; import AvVolumeUp from 'material-ui/svg-icons/av/volume-up'; import Checkbox from 'material-ui/Checkbox'; import Visibility from 'material-ui/svg-icons/action/visibility'; diff --git a/src/components/Match/CrossTable.jsx b/src/components/Match/CrossTable.jsx index c3446c5ad7..fbe1db609b 100644 --- a/src/components/Match/CrossTable.jsx +++ b/src/components/Match/CrossTable.jsx @@ -10,7 +10,7 @@ import heroes from 'dotaconstants/build/heroes.json'; import ReactTooltip from 'react-tooltip'; import { abbreviateNumber } from 'utility'; import strings from 'lang'; -import { IconRadiant, IconDire } from 'components/Icons'; +import { IconRadiant, IconDire } from '../components/Icons'; import { heroTd } from './matchColumns'; import constants from '../constants'; diff --git a/src/components/Match/Draft/Draft.jsx b/src/components/Match/Draft/Draft.jsx index 94765fe6bb..feda827ae6 100644 --- a/src/components/Match/Draft/Draft.jsx +++ b/src/components/Match/Draft/Draft.jsx @@ -1,5 +1,5 @@ -import Heading from 'components/Heading'; -import { IconRadiant, IconDire } from 'components/Icons'; +import Heading from '../components/Heading'; +import { IconRadiant, IconDire } from '../components/Icons'; import heroes from 'dotaconstants/build/heroes.json'; import Next from 'material-ui/svg-icons/hardware/keyboard-arrow-right'; import Prev from 'material-ui/svg-icons/hardware/keyboard-arrow-left'; diff --git a/src/components/Match/Laning/index.jsx b/src/components/Match/Laning/index.jsx index 5da765af63..e32ef0ba2a 100644 --- a/src/components/Match/Laning/index.jsx +++ b/src/components/Match/Laning/index.jsx @@ -1,11 +1,11 @@ import React from 'react'; import PropTypes from 'prop-types'; import strings from 'lang'; -import Heading from 'components/Heading'; -import Heatmap from 'components/Heatmap'; -import Table from 'components/Table'; +import Heading from '../components/Heading'; +import Heatmap from '../components/Heatmap'; +import Table from '../components/Table'; import { unpackPositionData } from 'utility'; -import { laningColumns } from 'components/Match/matchColumns'; +import { laningColumns } from '../components/Match/matchColumns'; import { StyledFlexContainer, StyledFlexElement } from '../StyledMatch'; class Laning extends React.Component { diff --git a/src/components/Match/Match.jsx b/src/components/Match/Match.jsx index 9dc899baf8..4551cc6883 100644 --- a/src/components/Match/Match.jsx +++ b/src/components/Match/Match.jsx @@ -2,9 +2,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Helmet from 'react-helmet'; -import Spinner from 'components/Spinner'; -import TabBar from 'components/TabBar'; -import { getMatch, getPvgnaHeroGuides } from 'actions'; +import Spinner from '../components/Spinner'; +import TabBar from '../components/TabBar'; +import { getMatch, getPvgnaHeroGuides } from '../../actions'; import MatchHeader from './MatchHeader'; import matchPages from './matchPages'; diff --git a/src/components/Match/MatchHeader/MatchHeader.jsx b/src/components/Match/MatchHeader/MatchHeader.jsx index 2b9b3051b8..7fb83eb3be 100644 --- a/src/components/Match/MatchHeader/MatchHeader.jsx +++ b/src/components/Match/MatchHeader/MatchHeader.jsx @@ -2,14 +2,14 @@ import React from 'react'; import PropTypes from 'prop-types'; import { transformations, isRadiant, sum } from 'utility'; import strings from 'lang'; -import Spinner from 'components/Spinner'; -import { IconRadiant, IconDire } from 'components/Icons'; +import Spinner from '../components/Spinner'; +import { IconRadiant, IconDire } from '../components/Icons'; import { Link } from 'react-router-dom'; import FlatButton from 'material-ui/FlatButton'; import NavigationRefresh from 'material-ui/svg-icons/navigation/refresh'; import ActionFingerprint from 'material-ui/svg-icons/action/fingerprint'; import FileFileDownload from 'material-ui/svg-icons/file/file-download'; -import Warning from 'components/Alerts'; +import Warning from '../components/Alerts'; import styled from 'styled-components'; import constants from '../../constants'; diff --git a/src/components/Match/MatchLog.jsx b/src/components/Match/MatchLog.jsx index 5a99ad6d66..d594ebf423 100644 --- a/src/components/Match/MatchLog.jsx +++ b/src/components/Match/MatchLog.jsx @@ -9,10 +9,10 @@ import { } from 'utility'; import styled from 'styled-components'; import ReactTooltip from 'react-tooltip'; -import Table from 'components/Table'; +import Table from '../components/Table'; import heroes from 'dotaconstants/build/heroes.json'; -import FormField from 'components/Form/FormField'; -import { IconRadiant, IconDire } from 'components/Icons'; +import FormField from '../components/Form/FormField'; +import { IconRadiant, IconDire } from '../components/Icons'; import { heroTdColumn } from './matchColumns'; import { StyledLogFilterForm } from './StyledMatch'; diff --git a/src/components/Match/MatchStory.jsx b/src/components/Match/MatchStory.jsx index f28895ced9..c2b66f0127 100644 --- a/src/components/Match/MatchStory.jsx +++ b/src/components/Match/MatchStory.jsx @@ -7,7 +7,7 @@ import { formatTemplate, } from 'utility'; import util from 'util'; -import { IconRadiant, IconDire } from 'components/Icons'; +import { IconRadiant, IconDire } from '../components/Icons'; import heroes from 'dotaconstants/build/heroes.json'; import items from 'dotaconstants/build/items.json'; import itemColors from 'dotaconstants/build/item_colors.json'; diff --git a/src/components/Match/Overview/Overview.jsx b/src/components/Match/Overview/Overview.jsx index ef4ab10f62..9dbafcb6b9 100644 --- a/src/components/Match/Overview/Overview.jsx +++ b/src/components/Match/Overview/Overview.jsx @@ -1,7 +1,7 @@ import React from 'react'; import strings from 'lang'; import styled from 'styled-components'; -import MatchGraph from 'components/Visualizations/Graph/MatchGraph'; +import MatchGraph from '../components/Visualizations/Graph/MatchGraph'; import TeamTable from '../TeamTable'; import AbilityBuildTable from '../AbilityBuildTable'; import AbilityDraftTable from '../AbilityDraftTable'; diff --git a/src/components/Match/Overview/Timeline.jsx b/src/components/Match/Overview/Timeline.jsx index 9f0bbfb198..bb4b166aa9 100644 --- a/src/components/Match/Overview/Timeline.jsx +++ b/src/components/Match/Overview/Timeline.jsx @@ -10,11 +10,11 @@ import { IconBloodDrop, IconRoshan, IconBattle, -} from 'components/Icons'; +} from '../components/Icons'; import strings from 'lang'; import ReactTooltip from 'react-tooltip'; import heroes from 'dotaconstants/build/heroes.json'; -import PlayerThumb from 'components/Match/PlayerThumb'; +import PlayerThumb from '../components/Match/PlayerThumb'; import styled from 'styled-components'; import constants from '../../constants'; diff --git a/src/components/Match/Purchases/index.jsx b/src/components/Match/Purchases/index.jsx index 58d6004cd7..67b0e595bb 100644 --- a/src/components/Match/Purchases/index.jsx +++ b/src/components/Match/Purchases/index.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import strings from 'lang'; -import TeamTable from 'components/Match/TeamTable'; +import TeamTable from '../components/Match/TeamTable'; import Toggle from 'material-ui/Toggle'; -import { purchaseTimesColumns } from 'components/Match/matchColumns'; +import { purchaseTimesColumns } from '../components/Match/matchColumns'; class Purchases extends React.Component { constructor(props) { diff --git a/src/components/Match/TargetsBreakdown.jsx b/src/components/Match/TargetsBreakdown.jsx index c2f7ed2ad2..74b26d393a 100644 --- a/src/components/Match/TargetsBreakdown.jsx +++ b/src/components/Match/TargetsBreakdown.jsx @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import heroes from 'dotaconstants/build/heroes.json'; import ReactTooltip from 'react-tooltip'; import NavigationArrowForward from 'material-ui/svg-icons/navigation/arrow-forward'; -import { inflictorWithValue } from 'components/Visualizations'; +import { inflictorWithValue } from '../components/Visualizations'; import { sumValues, getHeroesById, abbreviateNumber } from 'utility'; import { StyledDmgTargetInflictor, StyledDmgTargetRow } from './StyledMatch'; import constants from '../constants'; diff --git a/src/components/Match/TeamTable.jsx b/src/components/Match/TeamTable.jsx index 001133581b..6083196838 100644 --- a/src/components/Match/TeamTable.jsx +++ b/src/components/Match/TeamTable.jsx @@ -1,10 +1,10 @@ import React from 'react'; import PropTypes from 'prop-types'; import { isRadiant, getTeamName } from 'utility'; -import Heading from 'components/Heading'; -import { IconRadiant, IconDire } from 'components/Icons'; +import Heading from '../components/Heading'; +import { IconRadiant, IconDire } from '../components/Icons'; import { connect } from 'react-redux'; -import Table from 'components/Table'; +import Table from '../components/Table'; import PicksBans from './Overview/PicksBans'; // Displayed only on `Overview` page const keyFn = row => row && row.player_slot + 1; diff --git a/src/components/Match/TeamfightMap/index.jsx b/src/components/Match/TeamfightMap/index.jsx index 50f712e4bf..13e5456c7f 100644 --- a/src/components/Match/TeamfightMap/index.jsx +++ b/src/components/Match/TeamfightMap/index.jsx @@ -3,13 +3,13 @@ import PropTypes from 'prop-types'; import { formatSeconds, calculateDistance, calculateRelativeXY, bindWidth } from 'utility'; import ReactTooltip from 'react-tooltip'; import stylePropType from 'react-style-proptype'; -import { IconRadiant, IconDire, IconDot } from 'components/Icons'; -import TeamTable from 'components/Match/TeamTable'; -import { teamfightColumns } from 'components/Match/matchColumns'; -import PlayerThumb from 'components/Match/PlayerThumb'; +import { IconRadiant, IconDire, IconDot } from '../components/Icons'; +import TeamTable from '../components/Match/TeamTable'; +import { teamfightColumns } from '../components/Match/matchColumns'; +import PlayerThumb from '../components/Match/PlayerThumb'; import strings from 'lang'; -import Timeline from 'components/Match/Overview/Timeline'; -import DotaMap from 'components/DotaMap'; +import Timeline from '../components/Match/Overview/Timeline'; +import DotaMap from '../components/DotaMap'; import styled from 'styled-components'; import constants from '../../constants'; diff --git a/src/components/Match/Vision/LogHover.jsx b/src/components/Match/Vision/LogHover.jsx index 7ec52a7306..ea75ff20eb 100644 --- a/src/components/Match/Vision/LogHover.jsx +++ b/src/components/Match/Vision/LogHover.jsx @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { gameCoordToUV } from 'utility'; -import DotaMap from 'components/DotaMap'; +import DotaMap from '../components/DotaMap'; import styled from 'styled-components'; import constants from '../../constants'; diff --git a/src/components/Match/Vision/VisionFilter.jsx b/src/components/Match/Vision/VisionFilter.jsx index 268a694dd7..8410102212 100644 --- a/src/components/Match/Vision/VisionFilter.jsx +++ b/src/components/Match/Vision/VisionFilter.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import Checkbox from 'material-ui/Checkbox'; -import Table from 'components/Table'; +import Table from '../components/Table'; import strings from 'lang'; -import Heading from 'components/Heading'; +import Heading from '../components/Heading'; import PlayerThumb from '../PlayerThumb'; diff --git a/src/components/Match/Vision/VisionItems.jsx b/src/components/Match/Vision/VisionItems.jsx index da1ff7b624..481cd0b0f6 100644 --- a/src/components/Match/Vision/VisionItems.jsx +++ b/src/components/Match/Vision/VisionItems.jsx @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import TeamTable from 'components/Match/TeamTable'; -import { visionColumns } from 'components/Match/matchColumns'; +import TeamTable from '../components/Match/TeamTable'; +import { visionColumns } from '../components/Match/matchColumns'; import strings from 'lang'; const VisionItems = ({ match }) => ( diff --git a/src/components/Match/Vision/VisionLog.jsx b/src/components/Match/Vision/VisionLog.jsx index 97d67649fb..5a9c07c052 100644 --- a/src/components/Match/Vision/VisionLog.jsx +++ b/src/components/Match/Vision/VisionLog.jsx @@ -3,9 +3,9 @@ import PropTypes from 'prop-types'; import styled from 'styled-components'; import items from 'dotaconstants/build/items.json'; import { threshold, formatSeconds } from 'utility'; -import Table from 'components/Table'; +import Table from '../components/Table'; import strings from 'lang'; -import Heading from 'components/Heading'; +import Heading from '../components/Heading'; import { heroTd, heroTdColumn } from '../matchColumns'; import constants from '../../constants'; import LogHover from './LogHover'; diff --git a/src/components/Match/Vision/VisionMap.jsx b/src/components/Match/Vision/VisionMap.jsx index f9227e1d8d..e7078b00fb 100644 --- a/src/components/Match/Vision/VisionMap.jsx +++ b/src/components/Match/Vision/VisionMap.jsx @@ -6,8 +6,8 @@ import { } from 'utility'; import ReactTooltip from 'react-tooltip'; import strings from 'lang'; -import PlayerThumb from 'components/Match/PlayerThumb'; -import DotaMap from 'components/DotaMap'; +import PlayerThumb from '../components/Match/PlayerThumb'; +import DotaMap from '../components/DotaMap'; import styled from 'styled-components'; import constants from '../../constants'; diff --git a/src/components/Match/matchColumns.jsx b/src/components/Match/matchColumns.jsx index 1b87b1a4f4..2ccb103e48 100644 --- a/src/components/Match/matchColumns.jsx +++ b/src/components/Match/matchColumns.jsx @@ -10,12 +10,12 @@ import buffs from 'dotaconstants/build/permanent_buffs.json'; import util from 'util'; import strings from 'lang'; import { formatSeconds, abbreviateNumber, transformations, percentile, sum, subTextStyle, getHeroesById, rankTierToString, groupBy } from 'utility'; -import { TableHeroImage, inflictorWithValue } from 'components/Visualizations'; +import { TableHeroImage, inflictorWithValue } from '../components/Visualizations'; import ReactTooltip from 'react-tooltip'; import { RadioButton } from 'material-ui/RadioButton'; import ActionOpenInNew from 'material-ui/svg-icons/action/open-in-new'; -import { CompetitiveRank } from 'components/Visualizations/Table/HeroImage'; -import { IconBackpack, IconRadiant, IconDire } from 'components/Icons'; +import { CompetitiveRank } from '../components/Visualizations/Table/HeroImage'; +import { IconBackpack, IconRadiant, IconDire } from '../components/Icons'; import constants from '../constants'; import { StyledAbilityUpgrades, StyledBackpack, StyledCosmetic, StyledDivClearBoth, StyledGoldIcon, StyledPlayersDeath, StyledRunes, StyledUnusedItem } from './StyledMatch'; import TargetsBreakdown from './TargetsBreakdown'; diff --git a/src/components/Match/matchPages.jsx b/src/components/Match/matchPages.jsx index 6b4e183f44..ba08810863 100644 --- a/src/components/Match/matchPages.jsx +++ b/src/components/Match/matchPages.jsx @@ -1,12 +1,12 @@ import React from 'react'; import strings from 'lang'; -import Heading from 'components/Heading'; -import Table from 'components/Table'; -import TeamfightMap from 'components/Match/TeamfightMap'; -import Purchases from 'components/Match/Purchases'; -import Timeline from 'components/Match/Overview/Timeline'; -import MatchGraph from 'components/Visualizations/Graph/MatchGraph'; -import StackedBarGraph from 'components/Visualizations/Graph/StackedBarGraph'; +import Heading from '../components/Heading'; +import Table from '../components/Table'; +import TeamfightMap from '../components/Match/TeamfightMap'; +import Purchases from '../components/Match/Purchases'; +import Timeline from '../components/Match/Overview/Timeline'; +import MatchGraph from '../components/Visualizations/Graph/MatchGraph'; +import StackedBarGraph from '../components/Visualizations/Graph/StackedBarGraph'; import heroes from 'dotaconstants/build/heroes.json'; import Draft from './Draft'; import Vision from './Vision'; @@ -226,7 +226,7 @@ const matchPages = [Overview, { content: match => , }, { name: strings.tab_actions, - key: 'actions', + key: '../../actions', parsed: true, content: match => (
diff --git a/src/components/Matches/index.jsx b/src/components/Matches/index.jsx index b3c9540a79..7e15170dd8 100644 --- a/src/components/Matches/index.jsx +++ b/src/components/Matches/index.jsx @@ -2,14 +2,14 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Helmet from 'react-helmet'; -import { getProMatches, getPublicMatches } from 'actions'; +import { getProMatches, getPublicMatches } from '../../actions'; import strings from 'lang'; -import Table, { TableLink } from 'components/Table'; -// import Heading from 'components/Heading'; +import Table, { TableLink } from '../components/Table'; +// import Heading from '../components/Heading'; import { transformations, subTextStyle, rankTierToString } from 'utility'; -import { IconTrophy } from 'components/Icons'; -import Match from 'components/Match'; -import TabBar from 'components/TabBar'; +import { IconTrophy } from '../components/Icons'; +import Match from '../components/Match'; +import TabBar from '../components/TabBar'; import heroes from 'dotaconstants/build/heroes.json'; import styled from 'styled-components'; import { StyledTeamIconContainer } from '../Match/StyledMatch'; diff --git a/src/components/Meta/index.jsx b/src/components/Meta/index.jsx index c43fbe5597..d670eb7ee7 100644 --- a/src/components/Meta/index.jsx +++ b/src/components/Meta/index.jsx @@ -3,14 +3,14 @@ import React from 'react'; import { connect } from 'react-redux'; import fetch from 'isomorphic-fetch'; -import Spinner from 'components/Spinner'; +import Spinner from '../components/Spinner'; import RaisedButton from 'material-ui/RaisedButton'; -import ExplorerOutputSection from 'components/Explorer/ExplorerOutputSection'; -import ExplorerControlSection from 'components/Explorer/ExplorerControlSection'; -import ExplorerFormField from 'components/Explorer/ExplorerFormField'; +import ExplorerOutputSection from '../components/Explorer/ExplorerOutputSection'; +import ExplorerControlSection from '../components/Explorer/ExplorerControlSection'; +import ExplorerFormField from '../components/Explorer/ExplorerFormField'; import strings from 'lang'; import Helmet from 'react-helmet'; -import Heading from 'components/Heading'; +import Heading from '../components/Heading'; import querystring from 'querystring'; import queryTemplate from './queryTemplate'; import fields from './fields'; diff --git a/src/components/Player/Header/PlayerBadges.jsx b/src/components/Player/Header/PlayerBadges.jsx index 3fb3abfa59..884fb0e469 100644 --- a/src/components/Player/Header/PlayerBadges.jsx +++ b/src/components/Player/Header/PlayerBadges.jsx @@ -1,8 +1,8 @@ import React from 'react'; import { connect } from 'react-redux'; -import Error from 'components/Error'; -import Spinner from 'components/Spinner'; -import { IconCheese, IconSteam, IconEye, IconEyeInactive, IconCheckCircle } from 'components/Icons'; +import Error from '../components/Error'; +import Spinner from '../components/Spinner'; +import { IconCheese, IconSteam, IconEye, IconEyeInactive, IconCheckCircle } from '../components/Icons'; import strings from 'lang'; import styled from 'styled-components'; import constants from '../../constants'; diff --git a/src/components/Player/Header/PlayerButtons.jsx b/src/components/Player/Header/PlayerButtons.jsx index 40c097e6b8..7222ad5134 100644 --- a/src/components/Player/Header/PlayerButtons.jsx +++ b/src/components/Player/Header/PlayerButtons.jsx @@ -5,8 +5,8 @@ import FlatButton from 'material-ui/FlatButton'; import ActionUpdate from 'material-ui/svg-icons/navigation/refresh'; import strings from 'lang'; import fetch from 'isomorphic-fetch'; -import { toggleShowForm as toggleShowFormAction } from 'actions'; -import ShowFormToggle from 'components/Form/ShowFormToggle'; +import { toggleShowForm as toggleShowFormAction } from '../../actions'; +import ShowFormToggle from '../components/Form/ShowFormToggle'; import styled from 'styled-components'; const Styled = styled.div` diff --git a/src/components/Player/Header/PlayerHeader.jsx b/src/components/Player/Header/PlayerHeader.jsx index b1a5555272..acf2b2469e 100644 --- a/src/components/Player/Header/PlayerHeader.jsx +++ b/src/components/Player/Header/PlayerHeader.jsx @@ -5,8 +5,8 @@ import Avatar from 'material-ui/Avatar'; import Badge from 'material-ui/Badge'; import strings from 'lang'; import { rankTierToString } from 'utility'; -import Error from 'components/Error'; -import Spinner from 'components/Spinner'; +import Error from '../components/Error'; +import Spinner from '../components/Spinner'; import styled from 'styled-components'; import PlayerStats from './PlayerStats'; import PlayerBadges from './PlayerBadges'; diff --git a/src/components/Player/Header/PlayerStats.jsx b/src/components/Player/Header/PlayerStats.jsx index db089a0e2e..96dd208611 100644 --- a/src/components/Player/Header/PlayerStats.jsx +++ b/src/components/Player/Header/PlayerStats.jsx @@ -2,8 +2,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import ActionHelp from 'material-ui/svg-icons/action/help'; -import Error from 'components/Error'; -import Spinner from 'components/Spinner'; +import Error from '../components/Error'; +import Spinner from '../components/Spinner'; import strings from 'lang'; import styled from 'styled-components'; import PlayedWith from './PlayedWith'; diff --git a/src/components/Player/Pages/Counts/Counts.jsx b/src/components/Player/Pages/Counts/Counts.jsx index 14d8ab0fd6..a745540f57 100644 --- a/src/components/Player/Pages/Counts/Counts.jsx +++ b/src/components/Player/Pages/Counts/Counts.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { getPlayerCounts } from 'actions'; -import Table from 'components/Table'; -import Container from 'components/Container'; +import { getPlayerCounts } from '../../actions'; +import Table from '../components/Table'; +import Container from '../components/Container'; import strings from 'lang'; import styled from 'styled-components'; import playerCountsColumns from './playerCountsColumns'; diff --git a/src/components/Player/Pages/Heroes/Heroes.jsx b/src/components/Player/Pages/Heroes/Heroes.jsx index 893e09a8aa..7557cb5bbf 100644 --- a/src/components/Player/Pages/Heroes/Heroes.jsx +++ b/src/components/Player/Pages/Heroes/Heroes.jsx @@ -2,9 +2,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import strings from 'lang'; -import { getPlayerHeroes } from 'actions'; -import Table from 'components/Table'; -import Container from 'components/Container'; +import { getPlayerHeroes } from '../../actions'; +import Table from '../components/Table'; +import Container from '../components/Container'; import { playerHeroesColumns } from './playerHeroesColumns'; const Heroes = ({ diff --git a/src/components/Player/Pages/Heroes/playerHeroesColumns.jsx b/src/components/Player/Pages/Heroes/playerHeroesColumns.jsx index c4fe95fa4d..8f345d095b 100644 --- a/src/components/Player/Pages/Heroes/playerHeroesColumns.jsx +++ b/src/components/Player/Pages/Heroes/playerHeroesColumns.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import { TableLink } from 'components/Table'; +import { TableLink } from '../components/Table'; import { transformations } from 'utility'; import strings from 'lang'; diff --git a/src/components/Player/Pages/Histograms/Histograms.jsx b/src/components/Player/Pages/Histograms/Histograms.jsx index 5063ab2eef..5b12c89184 100644 --- a/src/components/Player/Pages/Histograms/Histograms.jsx +++ b/src/components/Player/Pages/Histograms/Histograms.jsx @@ -2,12 +2,12 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; -import { getPlayerHistograms } from 'actions'; -import Heading from 'components/Heading'; -import { HistogramGraph } from 'components/Visualizations'; -import ButtonGarden from 'components/ButtonGarden'; -import dataColumns from 'components/Player/Pages/matchDataColumns'; -import Container from 'components/Container'; +import { getPlayerHistograms } from '../../actions'; +import Heading from '../components/Heading'; +import { HistogramGraph } from '../components/Visualizations'; +import ButtonGarden from '../components/ButtonGarden'; +import dataColumns from '../components/Player/Pages/matchDataColumns'; +import Container from '../components/Container'; import strings from 'lang'; const getMedian = (columns, midpoint) => { diff --git a/src/components/Player/Pages/Items/Items.jsx b/src/components/Player/Pages/Items/Items.jsx index 81eb84659c..3f61a4013a 100644 --- a/src/components/Player/Pages/Items/Items.jsx +++ b/src/components/Player/Pages/Items/Items.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { getPlayerItems } from 'actions'; -import Table from 'components/Table'; -import Container from 'components/Container'; +import { getPlayerItems } from '../../actions'; +import Table from '../components/Table'; +import Container from '../components/Container'; import playerItemsColumns from './playerItemsColumns'; const Items = ({ diff --git a/src/components/Player/Pages/MMR/MMR.jsx b/src/components/Player/Pages/MMR/MMR.jsx index a0dedb648a..254cf1967a 100644 --- a/src/components/Player/Pages/MMR/MMR.jsx +++ b/src/components/Player/Pages/MMR/MMR.jsx @@ -1,11 +1,11 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { MMRGraph } from 'components/Visualizations'; -import { getPlayerMmr } from 'actions'; +import { MMRGraph } from '../components/Visualizations'; +import { getPlayerMmr } from '../../actions'; import strings from 'lang'; -import Container from 'components/Container'; -import Info from 'components/Alerts/Info'; +import Container from '../components/Container'; +import Info from '../components/Alerts/Info'; const MMRInfo = ( diff --git a/src/components/Player/Pages/Matches/Matches.jsx b/src/components/Player/Pages/Matches/Matches.jsx index e3ccd1cd75..9da537512a 100644 --- a/src/components/Player/Pages/Matches/Matches.jsx +++ b/src/components/Player/Pages/Matches/Matches.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { getPlayerMatches } from 'actions'; -import Table from 'components/Table'; -import Container from 'components/Container'; +import { getPlayerMatches } from '../../actions'; +import Table from '../components/Table'; +import Container from '../components/Container'; import strings from 'lang'; import playerMatchesColumns from './playerMatchesColumns'; diff --git a/src/components/Player/Pages/Overview/Overview.jsx b/src/components/Player/Pages/Overview/Overview.jsx index 612e4a7699..dcdb3edca3 100644 --- a/src/components/Player/Pages/Overview/Overview.jsx +++ b/src/components/Player/Pages/Overview/Overview.jsx @@ -7,16 +7,16 @@ import { getPlayerHeroes, getPlayerPeers, getPvgnaHeroGuides, -} from 'actions'; +} from '../../actions'; import Checkbox from 'material-ui/Checkbox'; import Turbo from 'material-ui/svg-icons/image/timelapse'; import TurboOff from 'material-ui/svg-icons/notification/do-not-disturb'; import ReactTooltip from 'react-tooltip'; -import Table from 'components/Table'; -import Container from 'components/Container'; -import playerMatchesColumns from 'components/Player/Pages/Matches/playerMatchesColumns'; -import { playerHeroesOverviewColumns } from 'components/Player/Pages/Heroes/playerHeroesColumns'; -import { playerPeersOverviewColumns } from 'components/Player/Pages/Peers/playerPeersColumns'; +import Table from '../components/Table'; +import Container from '../components/Container'; +import playerMatchesColumns from '../components/Player/Pages/Matches/playerMatchesColumns'; +import { playerHeroesOverviewColumns } from '../components/Player/Pages/Heroes/playerHeroesColumns'; +import { playerPeersOverviewColumns } from '../components/Player/Pages/Peers/playerPeersColumns'; import util from 'util'; import styled from 'styled-components'; import SummOfRecMatches from './Summary'; diff --git a/src/components/Player/Pages/Peers/Peers.jsx b/src/components/Player/Pages/Peers/Peers.jsx index 322d94a60d..01a6a5351f 100644 --- a/src/components/Player/Pages/Peers/Peers.jsx +++ b/src/components/Player/Pages/Peers/Peers.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { getPlayerPeers } from 'actions'; -import Table from 'components/Table'; -import Container from 'components/Container'; +import { getPlayerPeers } from '../../actions'; +import Table from '../components/Table'; +import Container from '../components/Container'; import strings from 'lang'; import { playerPeersColumns } from './playerPeersColumns'; diff --git a/src/components/Player/Pages/Peers/playerPeersColumns.jsx b/src/components/Player/Pages/Peers/playerPeersColumns.jsx index 6d317276b5..c58039131d 100644 --- a/src/components/Player/Pages/Peers/playerPeersColumns.jsx +++ b/src/components/Player/Pages/Peers/playerPeersColumns.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import { TableLink } from 'components/Table'; +import { TableLink } from '../components/Table'; import { transformations } from 'utility'; import strings from 'lang'; diff --git a/src/components/Player/Pages/Pros/Pros.jsx b/src/components/Player/Pages/Pros/Pros.jsx index ba9cd53955..e74003b90f 100644 --- a/src/components/Player/Pages/Pros/Pros.jsx +++ b/src/components/Player/Pages/Pros/Pros.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { getPlayerPros } from 'actions'; -import Table from 'components/Table'; -import Container from 'components/Container'; +import { getPlayerPros } from '../../actions'; +import Table from '../components/Table'; +import Container from '../components/Container'; import strings from 'lang'; import playerProsColumns from './playerProsColumns'; diff --git a/src/components/Player/Pages/Pros/playerProsColumns.jsx b/src/components/Player/Pages/Pros/playerProsColumns.jsx index f67bcfd712..da0706155d 100644 --- a/src/components/Player/Pages/Pros/playerProsColumns.jsx +++ b/src/components/Player/Pages/Pros/playerProsColumns.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import { TableLink } from 'components/Table'; +import { TableLink } from '../components/Table'; import { transformations } from 'utility'; import strings from 'lang'; diff --git a/src/components/Player/Pages/Rankings/Rankings.jsx b/src/components/Player/Pages/Rankings/Rankings.jsx index 894749e142..9c7869d54f 100644 --- a/src/components/Player/Pages/Rankings/Rankings.jsx +++ b/src/components/Player/Pages/Rankings/Rankings.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { getPlayerRankings } from 'actions'; -import Table from 'components/Table'; -import Container from 'components/Container'; +import { getPlayerRankings } from '../../actions'; +import Table from '../components/Table'; +import Container from '../components/Container'; import strings from 'lang'; import playerRankingsColumns from './playerRankingsColumns'; diff --git a/src/components/Player/Pages/Records/Records.jsx b/src/components/Player/Pages/Records/Records.jsx index 10744b31bf..0e5950650e 100644 --- a/src/components/Player/Pages/Records/Records.jsx +++ b/src/components/Player/Pages/Records/Records.jsx @@ -2,12 +2,12 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; -import { getPlayerRecords } from 'actions'; -import Table from 'components/Table'; -import Container from 'components/Container'; +import { getPlayerRecords } from '../../actions'; +import Table from '../components/Table'; +import Container from '../components/Container'; import strings from 'lang'; -import dataColumns from 'components/Player/Pages/matchDataColumns'; -import ButtonGarden from 'components/ButtonGarden'; +import dataColumns from '../components/Player/Pages/matchDataColumns'; +import ButtonGarden from '../components/ButtonGarden'; import playerRecordsColumns from './playerRecordsColumns'; const excludedColumns = ['win_rate', 'level']; diff --git a/src/components/Player/Pages/Totals/Totals.jsx b/src/components/Player/Pages/Totals/Totals.jsx index 15800a91cd..5bfd4670d3 100644 --- a/src/components/Player/Pages/Totals/Totals.jsx +++ b/src/components/Player/Pages/Totals/Totals.jsx @@ -1,8 +1,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { getPlayerTotals } from 'actions'; -import Container from 'components/Container'; +import { getPlayerTotals } from '../../actions'; +import Container from '../components/Container'; import strings from 'lang'; import { CardTitle } from 'material-ui/Card'; // import util from 'util'; diff --git a/src/components/Player/Pages/Trends/Trends.jsx b/src/components/Player/Pages/Trends/Trends.jsx index f27efc06fe..6aa4c8aeae 100644 --- a/src/components/Player/Pages/Trends/Trends.jsx +++ b/src/components/Player/Pages/Trends/Trends.jsx @@ -2,12 +2,12 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; -import { TrendGraph } from 'components/Visualizations'; -import { getPlayerTrends } from 'actions'; -import ButtonGarden from 'components/ButtonGarden'; -import trendNames from 'components/Player/Pages/matchDataColumns'; -import Heading from 'components/Heading'; -import Container from 'components/Container'; +import { TrendGraph } from '../components/Visualizations'; +import { getPlayerTrends } from '../../actions'; +import ButtonGarden from '../components/ButtonGarden'; +import trendNames from '../components/Player/Pages/matchDataColumns'; +import Heading from '../components/Heading'; +import Container from '../components/Container'; import strings from 'lang'; const Trend = ({ diff --git a/src/components/Player/Pages/Wardmap/Wardmap.jsx b/src/components/Player/Pages/Wardmap/Wardmap.jsx index 9ff2ef53c1..ea43814949 100644 --- a/src/components/Player/Pages/Wardmap/Wardmap.jsx +++ b/src/components/Player/Pages/Wardmap/Wardmap.jsx @@ -2,9 +2,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { calculateResponsiveState } from 'redux-responsive'; -import { getPlayerWardmap } from 'actions'; -import Heatmap from 'components/Heatmap'; -import Container from 'components/Container'; +import { getPlayerWardmap } from '../../actions'; +import Heatmap from '../components/Heatmap'; +import Container from '../components/Container'; import strings from 'lang'; import { unpackPositionData } from 'utility'; import styled from 'styled-components'; diff --git a/src/components/Player/Pages/Wordcloud/Wordcloud.jsx b/src/components/Player/Pages/Wordcloud/Wordcloud.jsx index be856d59d3..069a28c6a8 100644 --- a/src/components/Player/Pages/Wordcloud/Wordcloud.jsx +++ b/src/components/Player/Pages/Wordcloud/Wordcloud.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { getPlayerWordcloud } from 'actions'; -import Container from 'components/Container'; -import Wordcloud from 'components/Wordcloud'; +import { getPlayerWordcloud } from '../../actions'; +import Container from '../components/Container'; +import Wordcloud from '../components/Wordcloud'; import strings from 'lang'; const getData = (props) => { diff --git a/src/components/Player/Player.jsx b/src/components/Player/Player.jsx index 2cbe7d5f33..7c50dcd9d7 100644 --- a/src/components/Player/Player.jsx +++ b/src/components/Player/Player.jsx @@ -7,10 +7,10 @@ import Long from 'long'; import { getPlayer, getPlayerWinLoss, -} from 'actions'; +} from '../../actions'; import strings from 'lang'; -import TabBar from 'components/TabBar'; -import Spinner from 'components/Spinner'; +import TabBar from '../components/TabBar'; +import Spinner from '../components/Spinner'; import TableFilterForm from './TableFilterForm'; import PlayerHeader from './Header/PlayerHeader'; // import Error from '../Error'; diff --git a/src/components/Player/TableFilterForm/index.jsx b/src/components/Player/TableFilterForm/index.jsx index 43d859e127..563348eff3 100644 --- a/src/components/Player/TableFilterForm/index.jsx +++ b/src/components/Player/TableFilterForm/index.jsx @@ -5,8 +5,8 @@ import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; import querystring from 'querystring'; import strings from 'lang'; -import { toggleShowForm } from 'actions/formActions'; -import FormField from 'components/Form/FormField'; +import { toggleShowForm } from '../../actions/formActions'; +import FormField from '../components/Form/FormField'; import styled from 'styled-components'; import * as data from './TableFilter.config'; diff --git a/src/components/Predictions/index.jsx b/src/components/Predictions/index.jsx index d5e8407bc3..5c43f37614 100644 --- a/src/components/Predictions/index.jsx +++ b/src/components/Predictions/index.jsx @@ -1,8 +1,8 @@ import React from 'react'; import Helmet from 'react-helmet'; -import Table from 'components/Table'; -import Heading from 'components/Heading'; -import Warning from 'components/Alerts'; +import Table from '../components/Table'; +import Heading from '../components/Heading'; +import Warning from '../components/Alerts'; // import RaisedButton from 'material-ui/RaisedButton'; const predictionArray = [ diff --git a/src/components/Records/index.jsx b/src/components/Records/index.jsx index 4651d9b20d..29859c6cdd 100644 --- a/src/components/Records/index.jsx +++ b/src/components/Records/index.jsx @@ -2,14 +2,14 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Helmet from 'react-helmet'; -import { getRecords } from 'actions'; +import { getRecords } from '../../actions'; import strings from 'lang'; -import Table from 'components/Table'; -import Heading from 'components/Heading'; +import Table from '../components/Table'; +import Heading from '../components/Heading'; import { transformations, formatSeconds, getOrdinal } from 'utility'; -// import { IconRadiant, IconDire, IconTrophy } from 'components/Icons'; -import Container from 'components/Container'; -import TabBar from 'components/TabBar'; +// import { IconRadiant, IconDire, IconTrophy } from '../components/Icons'; +import Container from '../components/Container'; +import TabBar from '../components/TabBar'; const matchesColumns = field => [{ displayName: strings.th_rank, diff --git a/src/components/Request/Request.jsx b/src/components/Request/Request.jsx index 8967cd76fb..b319c398fd 100644 --- a/src/components/Request/Request.jsx +++ b/src/components/Request/Request.jsx @@ -5,7 +5,7 @@ import Helmet from 'react-helmet'; import CircularProgress from 'material-ui/CircularProgress'; import RaisedButton from 'material-ui/RaisedButton'; import TextField from 'material-ui/TextField'; -import { postRequest } from 'actions'; +import { postRequest } from '../../actions'; import strings from 'lang'; class Request extends React.Component { diff --git a/src/components/Search/Search.jsx b/src/components/Search/Search.jsx index c9436429ef..c9440034a0 100644 --- a/src/components/Search/Search.jsx +++ b/src/components/Search/Search.jsx @@ -2,7 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Helmet from 'react-helmet'; -import { getSearchResultAndPros } from 'actions'; +import { getSearchResultAndPros } from '../../actions'; import strings from 'lang'; import fuzzy from 'fuzzy'; import { withRouter } from 'react-router-dom'; diff --git a/src/components/Search/SearchForm.jsx b/src/components/Search/SearchForm.jsx index dbee79181c..6e52c5895e 100644 --- a/src/components/Search/SearchForm.jsx +++ b/src/components/Search/SearchForm.jsx @@ -4,7 +4,7 @@ import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; import { debounce } from 'lodash/fp'; import TextField from 'material-ui/TextField'; -import { getSearchResultAndPros, setSearchQuery } from 'actions'; +import { getSearchResultAndPros, setSearchQuery } from '../../actions'; import strings from 'lang'; import querystring from 'querystring'; import constants from '../constants'; diff --git a/src/components/Search/SearchResult.jsx b/src/components/Search/SearchResult.jsx index a3cc95ef11..2f485ef696 100644 --- a/src/components/Search/SearchResult.jsx +++ b/src/components/Search/SearchResult.jsx @@ -5,8 +5,8 @@ import { transformations, fromNow, } from 'utility'; -import Table, { TableLink } from 'components/Table'; -import Container from 'components/Container'; +import Table, { TableLink } from '../components/Table'; +import Container from '../components/Container'; // import { List } from 'material-ui/List'; const searchColumns = [{ diff --git a/src/components/Status/Status.jsx b/src/components/Status/Status.jsx index 34afb1d86b..61cd918e0b 100644 --- a/src/components/Status/Status.jsx +++ b/src/components/Status/Status.jsx @@ -2,7 +2,7 @@ import React from 'react'; import fetch from 'isomorphic-fetch'; import { fromNow, abbreviateNumber } from 'utility'; import Helmet from 'react-helmet'; -import Table from 'components/Table'; +import Table from '../components/Table'; import strings from 'lang'; function jsonResponse(response) { diff --git a/src/components/Table/Table.jsx b/src/components/Table/Table.jsx index 27123ef361..6adff7d066 100644 --- a/src/components/Table/Table.jsx +++ b/src/components/Table/Table.jsx @@ -7,8 +7,8 @@ import { TableRow as MaterialTableRow, TableRowColumn as MaterialTableRowColumn, } from 'material-ui/Table'; -import { TablePercent } from 'components/Visualizations'; -import Pagination from 'components/Table/PaginatedTable/Pagination'; +import { TablePercent } from '../components/Visualizations'; +import Pagination from '../components/Table/PaginatedTable/Pagination'; import { abbreviateNumber, SORT_ENUM, defaultSort } from 'utility'; import TableHeader from './TableHeader'; import Spinner from '../Spinner'; diff --git a/src/components/Team/Overview.jsx b/src/components/Team/Overview.jsx index 9e841329cf..c9d746ddab 100644 --- a/src/components/Team/Overview.jsx +++ b/src/components/Team/Overview.jsx @@ -1,7 +1,7 @@ import React from 'react'; import strings from 'lang'; -import Container from 'components/Container'; -import Table from 'components/Table'; +import Container from '../components/Container'; +import Table from '../components/Table'; import { matchColumns, memberColumns, heroColumns } from './teamDataColumns'; import { Row, MatchesContainer, MemberAndHeroContainer } from './TeamStyled'; diff --git a/src/components/Team/TeamStyled.jsx b/src/components/Team/TeamStyled.jsx index 8fbf53d879..0121d31807 100644 --- a/src/components/Team/TeamStyled.jsx +++ b/src/components/Team/TeamStyled.jsx @@ -1,6 +1,6 @@ import styled from 'styled-components'; import { CardTitle } from 'material-ui/Card'; -import Container from 'components/Container'; +import Container from '../components/Container'; import constants from '../constants'; export const TeamStatsCard = styled(CardTitle)` diff --git a/src/components/Team/index.jsx b/src/components/Team/index.jsx index 4fac7c72e3..b1aad98616 100644 --- a/src/components/Team/index.jsx +++ b/src/components/Team/index.jsx @@ -2,9 +2,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import Helmet from 'react-helmet'; import { connect } from 'react-redux'; -import { getTeam, getTeamHeroes, getTeamMatches, getTeamPlayers } from 'actions'; -import Spinner from 'components/Spinner'; -import TabBar from 'components/TabBar'; +import { getTeam, getTeamHeroes, getTeamMatches, getTeamPlayers } from '../../actions'; +import Spinner from '../components/Spinner'; +import TabBar from '../components/TabBar'; import teamPages from './teamPages'; import getTeamHeader from './TeamHeader'; import { Column } from './TeamStyled'; diff --git a/src/components/Team/teamDataColumns.jsx b/src/components/Team/teamDataColumns.jsx index 1c3941916c..32e620ac97 100644 --- a/src/components/Team/teamDataColumns.jsx +++ b/src/components/Team/teamDataColumns.jsx @@ -2,7 +2,7 @@ import React from 'react'; import heroes from 'dotaconstants/build/heroes.json'; import strings from 'lang'; import { transformations, subTextStyle, getTeamLogoUrl } from 'utility'; -import { TableLink } from 'components/Table'; +import { TableLink } from '../components/Table'; import constants from '../constants'; import { TableRow, TableImage } from './TeamStyled'; import proPlayerImages from './proPlayerImages'; diff --git a/src/components/Team/teamPages.jsx b/src/components/Team/teamPages.jsx index 00cc2d9bcc..fce797ec26 100644 --- a/src/components/Team/teamPages.jsx +++ b/src/components/Team/teamPages.jsx @@ -1,7 +1,7 @@ import React from 'react'; import strings from 'lang'; -import Container from 'components/Container'; -import Table from 'components/Table'; +import Container from '../components/Container'; +import Table from '../components/Table'; import Overview from './Overview'; import { matchColumns, memberColumns, heroColumns } from './teamDataColumns'; diff --git a/src/components/Teams/index.jsx b/src/components/Teams/index.jsx index 6bb4d0e2db..861c1b0c54 100644 --- a/src/components/Teams/index.jsx +++ b/src/components/Teams/index.jsx @@ -3,10 +3,10 @@ import PropTypes from 'prop-types'; import Helmet from 'react-helmet'; import { connect } from 'react-redux'; import strings from 'lang'; -import { getTeams } from 'actions'; -import Heading from 'components/Heading'; -import Team from 'components/Team'; -import Table, { TableLink } from 'components/Table'; +import { getTeams } from '../../actions'; +import Heading from '../components/Heading'; +import Team from '../components/Team'; +import Table, { TableLink } from '../components/Table'; import styled from 'styled-components'; import { getOrdinal, getTeamLogoUrl, fromNow, subTextStyle } from 'utility'; import { Logo } from '../Team/TeamStyled'; diff --git a/src/components/Visualizations/Graph/MMRGraph.jsx b/src/components/Visualizations/Graph/MMRGraph.jsx index 724acab37c..56292e3376 100644 --- a/src/components/Visualizations/Graph/MMRGraph.jsx +++ b/src/components/Visualizations/Graph/MMRGraph.jsx @@ -11,7 +11,7 @@ import { Legend, Label, ResponsiveContainer, Brush, } from 'recharts'; -import constants from 'components/constants'; +import constants from '../components/constants'; import styled from 'styled-components'; const StyledGraphArea = styled.div` diff --git a/src/components/Visualizations/Graph/MatchGraph.jsx b/src/components/Visualizations/Graph/MatchGraph.jsx index 20778534d4..4096cd8b69 100644 --- a/src/components/Visualizations/Graph/MatchGraph.jsx +++ b/src/components/Visualizations/Graph/MatchGraph.jsx @@ -1,6 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; -import Heading from 'components/Heading'; +import Heading from '../components/Heading'; import { ReferenceArea, XAxis, @@ -13,7 +13,7 @@ import { Legend, ResponsiveContainer, } from 'recharts'; -import constants from 'components/constants'; +import constants from '../components/constants'; import strings from 'lang'; import heroes from 'dotaconstants/build/heroes.json'; import playerColors from 'dotaconstants/build/player_colors.json'; diff --git a/src/components/Visualizations/Graph/StackedBarGraph.jsx b/src/components/Visualizations/Graph/StackedBarGraph.jsx index 40ff3f6af4..4b6c1920a2 100644 --- a/src/components/Visualizations/Graph/StackedBarGraph.jsx +++ b/src/components/Visualizations/Graph/StackedBarGraph.jsx @@ -9,9 +9,9 @@ import { CartesianGrid, ResponsiveContainer, } from 'recharts'; -import Heading from 'components/Heading'; +import Heading from '../components/Heading'; import strings from 'lang'; -import constants from 'components/constants'; +import constants from '../components/constants'; import { StyledHolder } from './Styled'; const category10 = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf']; diff --git a/src/components/Visualizations/Graph/Styled.jsx b/src/components/Visualizations/Graph/Styled.jsx index ad0931a6a4..4723906d11 100644 --- a/src/components/Visualizations/Graph/Styled.jsx +++ b/src/components/Visualizations/Graph/Styled.jsx @@ -1,5 +1,5 @@ import styled from 'styled-components'; -import constants from 'components/constants'; +import constants from '../components/constants'; export const StyledTooltip = styled.div` position: relative; diff --git a/src/components/Visualizations/Graph/TrendGraph.jsx b/src/components/Visualizations/Graph/TrendGraph.jsx index 915890ca1e..97b711eb25 100644 --- a/src/components/Visualizations/Graph/TrendGraph.jsx +++ b/src/components/Visualizations/Graph/TrendGraph.jsx @@ -15,7 +15,7 @@ import strings from 'lang'; import heroes from 'dotaconstants/build/heroes.json'; import { formatSeconds, fromNow } from 'utility'; import styled from 'styled-components'; -import constants from 'components/constants'; +import constants from '../components/constants'; const TooltipStylesDiv = styled.div` .tooltipWrapper { diff --git a/src/components/Visualizations/Table/HeroImage.jsx b/src/components/Visualizations/Table/HeroImage.jsx index f258a07a35..441924c557 100644 --- a/src/components/Visualizations/Table/HeroImage.jsx +++ b/src/components/Visualizations/Table/HeroImage.jsx @@ -3,9 +3,9 @@ import PropTypes from 'prop-types'; import ReactTooltip from 'react-tooltip'; import ActionDoneAll from 'material-ui/svg-icons/action/done-all'; import strings from 'lang'; -import { TableLink } from 'components/Table'; +import { TableLink } from '../components/Table'; import playerColors from 'dotaconstants/build/player_colors.json'; -import { IconDice, IconCrystalBall, IconCheckCircle } from 'components/Icons'; +import { IconDice, IconCrystalBall, IconCheckCircle } from '../components/Icons'; import SocialPerson from 'material-ui/svg-icons/social/person'; import NotificationSync from 'material-ui/svg-icons/notification/sync'; import styled from 'styled-components'; diff --git a/src/index.js b/src/index.js index b704d8afeb..a3f5d7ad79 100644 --- a/src/index.js +++ b/src/index.js @@ -6,11 +6,11 @@ import ReactGA from 'react-ga'; import { hydrate, render } from 'react-dom'; import { Provider } from 'react-redux'; import { Route, Router } from 'react-router-dom'; -import store from 'store'; -import { getMetadata } from 'actions'; -import App from 'components/App'; -import constants from 'components/constants'; import { injectGlobal } from 'styled-components'; +import store from './store'; +import { getMetadata } from './actions'; +import App from './components/App'; +import constants from './components/constants'; // import registerServiceWorker from './registerServiceWorker'; import { unregister } from './registerServiceWorker'; diff --git a/src/reducers/form.js b/src/reducers/form.js index bcb1a3c4a3..b1c10e2cd0 100644 --- a/src/reducers/form.js +++ b/src/reducers/form.js @@ -1,4 +1,4 @@ -import { formActions } from 'actions'; +import { formActions } from '../../actions'; const initialFormState = { show: false, diff --git a/src/reducers/request.js b/src/reducers/request.js index 6b312421b7..9e150a7a9b 100644 --- a/src/reducers/request.js +++ b/src/reducers/request.js @@ -1,4 +1,4 @@ -import { requestActions } from 'actions'; +import { requestActions } from '../../actions'; const initialState = { progress: 0, diff --git a/src/stories/ColorPalette.jsx b/src/stories/ColorPalette.jsx index e21fab579c..4ab3ca1885 100644 --- a/src/stories/ColorPalette.jsx +++ b/src/stories/ColorPalette.jsx @@ -3,7 +3,7 @@ import { string } from 'prop-types'; import { storiesOf } from '@storybook/react'; import styled from 'styled-components'; -import constants from 'components/constants'; +import constants from '../components/constants'; const StyledPanel = styled.div` background-color: ${props => props.color}; @@ -33,7 +33,7 @@ const Title = styled.h1` font-family: Arial; `; -storiesOf('Color Palette').add('components/constantns.js', () => ( +storiesOf('Color Palette').add('../components/constantns.js', () => (
This is colors from components/constants diff --git a/src/utility/index.jsx b/src/utility/index.jsx index 132969a43e..8a749fa3dc 100644 --- a/src/utility/index.jsx +++ b/src/utility/index.jsx @@ -5,19 +5,19 @@ import items from 'dotaconstants/build/items.json'; import patch from 'dotaconstants/build/patch.json'; import itemIds from 'dotaconstants/build/item_ids.json'; import xpLevel from 'dotaconstants/build/xp_level.json'; -import { TableLink } from 'components/Table'; +import { TableLink } from '../components/Table'; import { KDA, TableHeroImage, FromNowTooltip, -} from 'components/Visualizations'; +} from '../components/Visualizations'; import strings from 'lang'; import _ from 'lodash/fp'; import util from 'util'; // import SvgIcon from 'material-ui/SvgIcon'; import SocialPeople from 'material-ui/svg-icons/social/people'; import SocialPerson from 'material-ui/svg-icons/social/person'; -import constants from 'components/constants'; +import constants from '../components/constants'; export const iconStyle = { marginLeft: 5, From becab052a8be4960d91c636afb5484b11cc6eddf Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Fri, 30 Mar 2018 12:07:44 +0000 Subject: [PATCH 0151/1495] remove node path --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 5b98ebb6f7..115ab19d01 100644 --- a/package.json +++ b/package.json @@ -4,18 +4,18 @@ "version": "1.0.1", "license": "MIT", "scripts": { - "start": "cross-env NODE_PATH=src react-scripts start", + "start": "react-scripts start", "build": "npm install && npm run lintnofix && npm run rsbuild", - "rsbuild": "cross-env NODE_PATH=src react-scripts build", + "rsbuild": "react-scripts build", "snapshot": "react-snap", - "test": "cross-env NODE_PATH=src react-scripts test --env=jsdom", + "test": "react-scripts test --env=jsdom", "eject": "react-scripts eject", "analyze": "source-map-explorer build/static/js/main.* --html", "webpack": "NODE_ENV=production webpack", "lint": "eslint . --ext .js,.jsx --fix", "lintnofix": "eslint . --ext .js,.jsx", "update:emoticons": "npm r dota2-emoticons && npm i dota2-emoticons && node dev/updateEmoticons.js", - "storybook": "cross-env NODE_PATH=src start-storybook -p 9009 -s public", + "storybook": "start-storybook -p 9009 -s public", "build-storybook": "build-storybook -s public" }, "greenkeeper": { From 008cfc3ba7c848083a2533b1aa107afe5e22793c Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Fri, 30 Mar 2018 12:12:41 +0000 Subject: [PATCH 0152/1495] more bulk replacemnt --- .../AccountWidget/AccountWidget.jsx | 2 +- src/components/App/App.jsx | 30 +++++++++---------- src/components/Assistant/index.jsx | 2 +- src/components/Container/index.jsx | 6 ++-- src/components/Distributions/index.jsx | 12 ++++---- src/components/Error/ErrorBox.jsx | 2 +- src/components/Explorer/ExplorerFormField.jsx | 2 +- .../Explorer/ExplorerOutputSection.jsx | 6 ++-- src/components/Explorer/index.jsx | 4 +-- src/components/Header/BurgerMenu/index.jsx | 2 +- src/components/Header/Header.jsx | 6 ++-- src/components/Heatmap/Heatmap.jsx | 2 +- src/components/Hero/AttributesBlock.jsx | 8 ++--- src/components/Hero/Benchmark.jsx | 2 +- src/components/Hero/BenchmarkTable.jsx | 2 +- src/components/Hero/Durations.jsx | 4 +-- src/components/Hero/Matchups.jsx | 4 +-- src/components/Hero/Players.jsx | 4 +-- src/components/Hero/Ranking.jsx | 2 +- src/components/Hero/RankingTable.jsx | 2 +- src/components/Hero/Recent.jsx | 8 ++--- src/components/Hero/index.jsx | 10 +++---- src/components/Heroes/columns.jsx | 2 +- src/components/Heroes/index.jsx | 8 ++--- src/components/Home/Buttons.jsx | 2 +- src/components/Home/Why.jsx | 2 +- src/components/Match/AbilityBuildTable.jsx | 6 ++-- src/components/Match/AbilityDraftTable.jsx | 6 ++-- .../Match/BuildingMap/BuildingMap.jsx | 6 ++-- src/components/Match/CastTable.jsx | 2 +- src/components/Match/Chat/Chat.jsx | 2 +- src/components/Match/CrossTable.jsx | 2 +- src/components/Match/Draft/Draft.jsx | 4 +-- src/components/Match/Laning/index.jsx | 8 ++--- src/components/Match/Match.jsx | 4 +-- .../Match/MatchHeader/MatchHeader.jsx | 6 ++-- src/components/Match/MatchLog.jsx | 6 ++-- src/components/Match/MatchStory.jsx | 2 +- src/components/Match/Overview/Overview.jsx | 2 +- src/components/Match/Overview/Timeline.jsx | 4 +-- src/components/Match/Purchases/index.jsx | 4 +-- src/components/Match/TargetsBreakdown.jsx | 2 +- src/components/Match/TeamTable.jsx | 6 ++-- src/components/Match/TeamfightMap/index.jsx | 12 ++++---- src/components/Match/Vision/LogHover.jsx | 2 +- src/components/Match/Vision/VisionFilter.jsx | 4 +-- src/components/Match/Vision/VisionItems.jsx | 4 +-- src/components/Match/Vision/VisionLog.jsx | 4 +-- src/components/Match/Vision/VisionMap.jsx | 4 +-- src/components/Match/matchColumns.jsx | 6 ++-- src/components/Match/matchPages.jsx | 14 ++++----- src/components/Matches/index.jsx | 10 +++---- src/components/Meta/index.jsx | 10 +++---- src/components/Player/Header/PlayerBadges.jsx | 6 ++-- .../Player/Header/PlayerButtons.jsx | 2 +- src/components/Player/Header/PlayerHeader.jsx | 4 +-- src/components/Player/Header/PlayerStats.jsx | 4 +-- src/components/Player/Pages/Counts/Counts.jsx | 4 +-- src/components/Player/Pages/Heroes/Heroes.jsx | 4 +-- .../Pages/Heroes/playerHeroesColumns.jsx | 2 +- .../Player/Pages/Histograms/Histograms.jsx | 10 +++---- src/components/Player/Pages/Items/Items.jsx | 4 +-- src/components/Player/Pages/MMR/MMR.jsx | 6 ++-- .../Player/Pages/Matches/Matches.jsx | 4 +-- .../Player/Pages/Overview/Overview.jsx | 10 +++---- src/components/Player/Pages/Peers/Peers.jsx | 4 +-- .../Player/Pages/Peers/playerPeersColumns.jsx | 2 +- src/components/Player/Pages/Pros/Pros.jsx | 4 +-- .../Player/Pages/Pros/playerProsColumns.jsx | 2 +- .../Player/Pages/Rankings/Rankings.jsx | 4 +-- .../Player/Pages/Records/Records.jsx | 8 ++--- src/components/Player/Pages/Totals/Totals.jsx | 2 +- src/components/Player/Pages/Trends/Trends.jsx | 10 +++---- .../Player/Pages/Wardmap/Wardmap.jsx | 4 +-- .../Player/Pages/Wordcloud/Wordcloud.jsx | 4 +-- src/components/Player/Player.jsx | 4 +-- .../Player/TableFilterForm/index.jsx | 2 +- src/components/Predictions/index.jsx | 6 ++-- src/components/Records/index.jsx | 10 +++---- src/components/Search/SearchResult.jsx | 4 +-- src/components/Status/Status.jsx | 2 +- src/components/Table/Table.jsx | 4 +-- src/components/Team/Overview.jsx | 4 +-- src/components/Team/TeamStyled.jsx | 2 +- src/components/Team/index.jsx | 4 +-- src/components/Team/teamDataColumns.jsx | 2 +- src/components/Team/teamPages.jsx | 4 +-- src/components/Teams/index.jsx | 6 ++-- .../Visualizations/Graph/MMRGraph.jsx | 2 +- .../Visualizations/Graph/MatchGraph.jsx | 4 +-- .../Visualizations/Graph/StackedBarGraph.jsx | 4 +-- .../Visualizations/Graph/Styled.jsx | 2 +- .../Visualizations/Graph/TrendGraph.jsx | 2 +- .../Visualizations/Table/HeroImage.jsx | 4 +-- src/stories/Alerts.jsx | 4 +-- src/stories/Attributes.jsx | 2 +- src/stories/BurgerMenu.jsx | 2 +- src/stories/ButtonGarden.jsx | 2 +- src/stories/ColorPalette.jsx | 4 +-- src/stories/Error.jsx | 4 +-- src/stories/Spinner.jsx | 4 +-- src/utility/index.jsx | 6 ++-- 102 files changed, 241 insertions(+), 241 deletions(-) diff --git a/src/components/AccountWidget/AccountWidget.jsx b/src/components/AccountWidget/AccountWidget.jsx index deaacd50d3..ae641226be 100644 --- a/src/components/AccountWidget/AccountWidget.jsx +++ b/src/components/AccountWidget/AccountWidget.jsx @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; // import { getPlayer } from '../../actions'; import strings from 'lang'; -import { IconSteam } from '../components/Icons'; +import { IconSteam } from '../Icons'; import styled from 'styled-components'; import Spinner from '../Spinner'; import Error from '../Error'; diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index 5abd5663eb..9f5b38ea72 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -7,21 +7,21 @@ import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'; import Helmet from 'react-helmet'; import strings from 'lang'; import { Route } from 'react-router-dom'; -import Player from '../components/Player'; -import Home from '../components/Home'; -import Search from '../components/Search'; -import Explorer from '../components/Explorer'; -// import FourOhFour from '../components/FourOhFour'; -import Heroes from '../components/Heroes'; -import Request from '../components/Request'; -import Distributions from '../components/Distributions'; -import Status from '../components/Status'; -import Matches from '../components/Matches'; -import Teams from '../components/Teams'; -// import Assistant from '../components/Assistant'; -import Records from '../components/Records'; -// import Predictions from '../components/Predictions'; -import Meta from '../components/Meta'; +import Player from '../Player'; +import Home from '../Home'; +import Search from '../Search'; +import Explorer from '../Explorer'; +// import FourOhFour from '../FourOhFour'; +import Heroes from '../Heroes'; +import Request from '../Request'; +import Distributions from '../Distributions'; +import Status from '../Status'; +import Matches from '../Matches'; +import Teams from '../Teams'; +// import Assistant from '../Assistant'; +import Records from '../Records'; +// import Predictions from '../Predictions'; +import Meta from '../Meta'; import styled from 'styled-components'; import Header from '../Header'; import Footer from '../Footer'; diff --git a/src/components/Assistant/index.jsx b/src/components/Assistant/index.jsx index b332cb3688..1f4c4034d5 100644 --- a/src/components/Assistant/index.jsx +++ b/src/components/Assistant/index.jsx @@ -1,6 +1,6 @@ /* eslint-disable */ import React from 'react'; -import Heading from '../components/Heading'; +import Heading from '../Heading'; import IconButton from 'material-ui/IconButton'; import Mic from 'material-ui/svg-icons/av/mic'; diff --git a/src/components/Container/index.jsx b/src/components/Container/index.jsx index ad28345b6c..5e0ca683bc 100644 --- a/src/components/Container/index.jsx +++ b/src/components/Container/index.jsx @@ -1,8 +1,8 @@ import React from 'react'; import PropTypes from 'prop-types'; -import Heading from '../components/Heading'; -import Spinner from '../components/Spinner'; -import Error from '../components/Error'; +import Heading from '../Heading'; +import Spinner from '../Spinner'; +import Error from '../Error'; import stylePropType from 'react-style-proptype'; export const AsyncContainer = ({ loading, error, children }) => { diff --git a/src/components/Distributions/index.jsx b/src/components/Distributions/index.jsx index d02da2c468..c169f17b5c 100644 --- a/src/components/Distributions/index.jsx +++ b/src/components/Distributions/index.jsx @@ -5,19 +5,19 @@ import { connect } from 'react-redux'; import Helmet from 'react-helmet'; import { getDistributions } from '../../actions'; import strings from 'lang'; -import Table from '../components/Table'; +import Table from '../Table'; import { sum, abbreviateNumber, getOrdinal, rankTierToString, } from 'utility'; -// import Warning from '../components/Alerts'; -import TabBar from '../components/TabBar'; -import Spinner from '../components/Spinner'; -import Heading from '../components/Heading'; +// import Warning from '../Alerts'; +import TabBar from '../TabBar'; +import Spinner from '../Spinner'; +import Heading from '../Heading'; import styled from 'styled-components'; -import { DistributionGraph } from '../components/Visualizations'; +import { DistributionGraph } from '../Visualizations'; import constants from '../constants'; const CountryDiv = styled.div` diff --git a/src/components/Error/ErrorBox.jsx b/src/components/Error/ErrorBox.jsx index df8b16cd57..a93470ca4e 100644 --- a/src/components/Error/ErrorBox.jsx +++ b/src/components/Error/ErrorBox.jsx @@ -1,7 +1,7 @@ import React from 'react'; import { string } from 'prop-types'; import styled from 'styled-components'; -import constants from '../components/constants'; +import constants from '../constants'; const Wrapper = styled.div` background-color: ${constants.colorDanger}; diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index d6f29effe1..f05edcf4d5 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -2,7 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import AutoComplete from 'material-ui/AutoComplete'; import DatePicker from 'material-ui/DatePicker'; -// import FormField from '../components/Form/FormField'; +// import FormField from '../Form/FormField'; class ExplorerFormField extends React.Component { constructor() { diff --git a/src/components/Explorer/ExplorerOutputSection.jsx b/src/components/Explorer/ExplorerOutputSection.jsx index 512366d052..364fc07d67 100644 --- a/src/components/Explorer/ExplorerOutputSection.jsx +++ b/src/components/Explorer/ExplorerOutputSection.jsx @@ -8,15 +8,15 @@ import { import { Link } from 'react-router-dom'; import strings from 'lang'; -import Table from '../components/Table'; +import Table from '../Table'; import itemData from 'dotaconstants/build/items.json'; -import { IconRadiant, IconDire } from '../components/Icons'; +import { IconRadiant, IconDire } from '../Icons'; // import heroes from 'dotaconstants/build/heroes.json'; import { TablePercent, inflictorWithValue, } - from '../components/Visualizations'; + from '../Visualizations'; // import redrawGraphs from './redrawGraphs'; import constants from '../constants'; import { StyledTeamIconContainer } from '../Match/StyledMatch'; diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 29acc270c9..c2439f3eaa 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -4,13 +4,13 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import fetch from 'isomorphic-fetch'; -import Spinner from '../components/Spinner'; +import Spinner from '../Spinner'; import RaisedButton from 'material-ui/RaisedButton'; import strings from 'lang'; import Helmet from 'react-helmet'; import { getScript } from 'utility'; -import Heading from '../components/Heading'; +import Heading from '../Heading'; import { getProPlayers, getLeagues, diff --git a/src/components/Header/BurgerMenu/index.jsx b/src/components/Header/BurgerMenu/index.jsx index 1a0a1d0117..01369bd9fc 100644 --- a/src/components/Header/BurgerMenu/index.jsx +++ b/src/components/Header/BurgerMenu/index.jsx @@ -6,7 +6,7 @@ import MenuItem from 'material-ui/MenuItem'; import IconButton from 'material-ui/IconButton'; import MenuIcon from 'material-ui/svg-icons/navigation/menu'; import styled from 'styled-components'; -import constants from '../components/constants'; +import constants from '../constants'; const StyledDrawer = styled(Drawer)` background-color: ${constants.defaultPrimaryColor} !important; diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index fe2a05c7a9..953dc69106 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -9,9 +9,9 @@ import ActionSettings from 'material-ui/svg-icons/action/settings'; import Bug from 'material-ui/svg-icons/action/bug-report'; import LogOutButton from 'material-ui/svg-icons/action/power-settings-new'; import strings from 'lang'; -import { LocalizationMenu } from '../components/Localization'; -import Dropdown from '../components/Header/Dropdown'; -import Announce from '../components/Announce'; +import { LocalizationMenu } from '../Localization'; +import Dropdown from '../Header/Dropdown'; +import Announce from '../Announce'; import styled from 'styled-components'; import constants from '../constants'; import AccountWidget from '../AccountWidget'; diff --git a/src/components/Heatmap/Heatmap.jsx b/src/components/Heatmap/Heatmap.jsx index 86f6e1e67a..27215426da 100644 --- a/src/components/Heatmap/Heatmap.jsx +++ b/src/components/Heatmap/Heatmap.jsx @@ -1,6 +1,6 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; -import DotaMap from '../components/DotaMap'; +import DotaMap from '../DotaMap'; import uuid from 'uuid'; import h337 from 'heatmap.js'; diff --git a/src/components/Hero/AttributesBlock.jsx b/src/components/Hero/AttributesBlock.jsx index 5412088fbe..a59b964f11 100644 --- a/src/components/Hero/AttributesBlock.jsx +++ b/src/components/Hero/AttributesBlock.jsx @@ -2,10 +2,10 @@ import React from 'react'; import { shape, number, string, bool } from 'prop-types'; import styled from 'styled-components'; import strings from 'lang'; -import AttrStrength from '../components/Icons/AttrStrength'; -import AttrAgility from '../components/Icons/AttrAgility'; -import AttrIntelligent from '../components/Icons/AttrIntelligent'; -import constants from '../components/constants'; +import AttrStrength from '../Icons/AttrStrength'; +import AttrAgility from '../Icons/AttrAgility'; +import AttrIntelligent from '../Icons/AttrIntelligent'; +import constants from '../constants'; import Attribute from './Attribute'; diff --git a/src/components/Hero/Benchmark.jsx b/src/components/Hero/Benchmark.jsx index 8b66d551a4..e304f78d9c 100644 --- a/src/components/Hero/Benchmark.jsx +++ b/src/components/Hero/Benchmark.jsx @@ -2,7 +2,7 @@ import React, { Component } from 'react'; import { shape, func, bool, arrayOf, oneOfType, string } from 'prop-types'; import { connect } from 'react-redux'; import { getBenchmark } from '../../actions'; -import Spinner from '../components/Spinner'; +import Spinner from '../Spinner'; import BenchmarkTable from './BenchmarkTable'; const renderBenchmark = (hero, data) => ( diff --git a/src/components/Hero/BenchmarkTable.jsx b/src/components/Hero/BenchmarkTable.jsx index f73f088d23..0e56b61fbb 100644 --- a/src/components/Hero/BenchmarkTable.jsx +++ b/src/components/Hero/BenchmarkTable.jsx @@ -1,6 +1,6 @@ import React from 'react'; import { oneOfType, shape, arrayOf } from 'prop-types'; -import Table from '../components/Table'; +import Table from '../Table'; import strings from 'lang'; const columns = data => Object.keys(data[0] || {}).map(stat => ({ diff --git a/src/components/Hero/Durations.jsx b/src/components/Hero/Durations.jsx index 7439f411ec..c4fcd33994 100644 --- a/src/components/Hero/Durations.jsx +++ b/src/components/Hero/Durations.jsx @@ -2,8 +2,8 @@ import React from 'react'; import { string, shape, func, bool, arrayOf, number } from 'prop-types'; import { connect } from 'react-redux'; import { getHeroDurations } from '../../actions'; -import Spinner from '../components/Spinner'; -import { HistogramGraph } from '../components/Visualizations'; +import Spinner from '../Spinner'; +import { HistogramGraph } from '../Visualizations'; import strings from 'lang'; class Durations extends React.Component { diff --git a/src/components/Hero/Matchups.jsx b/src/components/Hero/Matchups.jsx index 751da148d1..fcbf2c65b9 100644 --- a/src/components/Hero/Matchups.jsx +++ b/src/components/Hero/Matchups.jsx @@ -3,8 +3,8 @@ import { shape, string, bool, number, func, arrayOf } from 'prop-types'; import { connect } from 'react-redux'; import { getHeroMatchups } from '../../actions'; import styled from 'styled-components'; -import Spinner from '../components/Spinner'; -import Table, { TableLink } from '../components/Table'; +import Spinner from '../Spinner'; +import Table, { TableLink } from '../Table'; import strings from 'lang'; import { wilsonScore } from 'utility'; diff --git a/src/components/Hero/Players.jsx b/src/components/Hero/Players.jsx index 61748ba3b7..eabdcecbc1 100644 --- a/src/components/Hero/Players.jsx +++ b/src/components/Hero/Players.jsx @@ -2,8 +2,8 @@ import React from 'react'; import { bool, func, arrayOf, shape, number, string } from 'prop-types'; import { connect } from 'react-redux'; import { getHeroPlayers } from '../../actions'; -import Spinner from '../components/Spinner'; -import Table, { TableLink } from '../components/Table'; +import Spinner from '../Spinner'; +import Table, { TableLink } from '../Table'; import strings from 'lang'; import { wilsonScore } from 'utility'; import { proPlayersSelector } from 'reducers/selectors'; diff --git a/src/components/Hero/Ranking.jsx b/src/components/Hero/Ranking.jsx index 7209cfc98c..f0e28bb4e8 100644 --- a/src/components/Hero/Ranking.jsx +++ b/src/components/Hero/Ranking.jsx @@ -2,7 +2,7 @@ import React, { Component } from 'react'; import { shape, string, bool, oneOfType, func, arrayOf } from 'prop-types'; import { connect } from 'react-redux'; import { getRanking } from '../../actions'; -import Spinner from '../components/Spinner'; +import Spinner from '../Spinner'; import RankingTable from './RankingTable'; const renderRanking = (hero, rankings) => ( diff --git a/src/components/Hero/RankingTable.jsx b/src/components/Hero/RankingTable.jsx index f40989cfb2..5f9e0d9b06 100644 --- a/src/components/Hero/RankingTable.jsx +++ b/src/components/Hero/RankingTable.jsx @@ -1,6 +1,6 @@ import React from 'react'; import { shape, oneOfType, arrayOf } from 'prop-types'; -import Table from '../components/Table'; +import Table from '../Table'; import strings from 'lang'; import { transformations, getOrdinal, rankTierToString } from 'utility'; diff --git a/src/components/Hero/Recent.jsx b/src/components/Hero/Recent.jsx index c2b31403f1..3d5e54ab88 100644 --- a/src/components/Hero/Recent.jsx +++ b/src/components/Hero/Recent.jsx @@ -2,14 +2,14 @@ import React from 'react'; import { arrayOf, shape, bool, func, string, oneOfType } from 'prop-types'; import { connect } from 'react-redux'; import styled from 'styled-components'; -import Table, { TableLink } from '../components/Table'; -import ErrorBox from '../components/Error/ErrorBox'; -import Spinner from '../components/Spinner'; +import Table, { TableLink } from '../Table'; +import ErrorBox from '../Error/ErrorBox'; +import Spinner from '../Spinner'; import { getHeroRecentGames } from '../../actions'; import strings from 'lang'; import { transformations } from 'utility'; import { proPlayersSelector } from 'reducers/selectors'; -import constants from '../components/constants'; +import constants from '../constants'; const LeagueName = styled.span` color: ${constants.colorMutedLight}; diff --git a/src/components/Hero/index.jsx b/src/components/Hero/index.jsx index 80e1cd597d..908090f34b 100644 --- a/src/components/Hero/index.jsx +++ b/src/components/Hero/index.jsx @@ -3,11 +3,11 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Helmet from 'react-helmet'; import strings from 'lang'; -import Heading from '../components/Heading'; -import TabBar from '../components/TabBar'; -import Spinner from '../components/Spinner'; -import ErrorBox from '../components/Error/ErrorBox'; -import constants from '../components/constants'; +import Heading from '../Heading'; +import TabBar from '../TabBar'; +import Spinner from '../Spinner'; +import ErrorBox from '../Error/ErrorBox'; +import constants from '../constants'; import styled from 'styled-components'; import { heroSelector } from 'reducers/selectors'; import Ranking from './Ranking'; diff --git a/src/components/Heroes/columns.jsx b/src/components/Heroes/columns.jsx index 02461b506c..d4ec0fedad 100644 --- a/src/components/Heroes/columns.jsx +++ b/src/components/Heroes/columns.jsx @@ -5,7 +5,7 @@ import { } from 'utility'; import strings from 'lang'; import heroes from 'dotaconstants/build/heroes.json'; -// import TablePercent from '../components/Visualizations/Table/Percent'; +// import TablePercent from '../Visualizations/Table/Percent'; const decimalToCount = (decimal, total) => ( total && diff --git a/src/components/Heroes/index.jsx b/src/components/Heroes/index.jsx index a3773fce8a..82ae60a16d 100644 --- a/src/components/Heroes/index.jsx +++ b/src/components/Heroes/index.jsx @@ -4,10 +4,10 @@ import Helmet from 'react-helmet'; import { connect } from 'react-redux'; import strings from 'lang'; import { getHeroStats, getProPlayers } from '../../actions'; -import Heading from '../components/Heading'; -import Table from '../components/Table'; -import TabBar from '../components/TabBar'; -import Hero from '../components/Hero'; +import Heading from '../Heading'; +import Table from '../Table'; +import TabBar from '../TabBar'; +import Hero from '../Hero'; import heroes from 'dotaconstants/build/heroes.json'; import { sum, diff --git a/src/components/Home/Buttons.jsx b/src/components/Home/Buttons.jsx index ebf0c2858a..7316568f79 100644 --- a/src/components/Home/Buttons.jsx +++ b/src/components/Home/Buttons.jsx @@ -4,7 +4,7 @@ import PropTypes from 'prop-types'; import FlatButton from 'material-ui/FlatButton'; import { connect } from 'react-redux'; import strings from 'lang'; -import { IconSteam } from '../components/Icons'; +import { IconSteam } from '../Icons'; import { ButtonsDiv } from './Styled'; const Buttons = ({ user }) => ( diff --git a/src/components/Home/Why.jsx b/src/components/Home/Why.jsx index ab9c0ee163..68fbd6b8c2 100644 --- a/src/components/Home/Why.jsx +++ b/src/components/Home/Why.jsx @@ -1,6 +1,6 @@ import React from 'react'; import strings from 'lang'; -import { IconOpenSource, IconStatsBars, IconWand } from '../components/Icons'; +import { IconOpenSource, IconStatsBars, IconWand } from '../Icons'; import styled from 'styled-components'; import constants from '../constants'; diff --git a/src/components/Match/AbilityBuildTable.jsx b/src/components/Match/AbilityBuildTable.jsx index e9c91145a2..c40b477468 100644 --- a/src/components/Match/AbilityBuildTable.jsx +++ b/src/components/Match/AbilityBuildTable.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { isRadiant, getTeamName } from 'utility'; -import { IconRadiant, IconDire } from '../components/Icons'; -import Heading from '../components/Heading'; -import Table from '../components/Table'; +import { IconRadiant, IconDire } from '../Icons'; +import Heading from '../Heading'; +import Table from '../Table'; const filterMatchPlayers = (players, team = '') => players diff --git a/src/components/Match/AbilityDraftTable.jsx b/src/components/Match/AbilityDraftTable.jsx index 23c8a9902f..e9bbfb064b 100644 --- a/src/components/Match/AbilityDraftTable.jsx +++ b/src/components/Match/AbilityDraftTable.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { isRadiant, getTeamName } from 'utility'; -import { IconRadiant, IconDire } from '../components/Icons'; -import Heading from '../components/Heading'; -import Table from '../components/Table'; +import { IconRadiant, IconDire } from '../Icons'; +import Heading from '../Heading'; +import Table from '../Table'; const filterMatchPlayers = (players, team = '') => players diff --git a/src/components/Match/BuildingMap/BuildingMap.jsx b/src/components/Match/BuildingMap/BuildingMap.jsx index 416a3b7758..ec9067081b 100644 --- a/src/components/Match/BuildingMap/BuildingMap.jsx +++ b/src/components/Match/BuildingMap/BuildingMap.jsx @@ -7,11 +7,11 @@ import { } from 'utility'; import playerColors from 'dotaconstants/build/player_colors.json'; import heroes from 'dotaconstants/build/heroes.json'; -import Heading from '../components/Heading'; -import DotaMap from '../components/DotaMap'; +import Heading from '../Heading'; +import DotaMap from '../DotaMap'; import strings from 'lang'; import ReactTooltip from 'react-tooltip'; -// import { IconLightbulb } from '../components/Icons'; +// import { IconLightbulb } from '../Icons'; import styled from 'styled-components'; import buildingData from './buildingData'; import constants from '../../constants'; diff --git a/src/components/Match/CastTable.jsx b/src/components/Match/CastTable.jsx index 247320749b..739acefe74 100644 --- a/src/components/Match/CastTable.jsx +++ b/src/components/Match/CastTable.jsx @@ -4,7 +4,7 @@ import { Tabs, Tab, } from 'material-ui/Tabs'; -import { inflictorWithValue } from '../components/Visualizations'; +import { inflictorWithValue } from '../Visualizations'; import heroes from 'dotaconstants/build/heroes.json'; import strings from 'lang'; import Table from '../Table/Table'; diff --git a/src/components/Match/Chat/Chat.jsx b/src/components/Match/Chat/Chat.jsx index 854bc50e8f..8dc581735e 100644 --- a/src/components/Match/Chat/Chat.jsx +++ b/src/components/Match/Chat/Chat.jsx @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; import { isRadiant, formatSeconds } from 'utility'; import strings from 'lang'; -import { IconRadiant, IconDire } from '../components/Icons'; +import { IconRadiant, IconDire } from '../Icons'; import AvVolumeUp from 'material-ui/svg-icons/av/volume-up'; import Checkbox from 'material-ui/Checkbox'; import Visibility from 'material-ui/svg-icons/action/visibility'; diff --git a/src/components/Match/CrossTable.jsx b/src/components/Match/CrossTable.jsx index fbe1db609b..be2256798d 100644 --- a/src/components/Match/CrossTable.jsx +++ b/src/components/Match/CrossTable.jsx @@ -10,7 +10,7 @@ import heroes from 'dotaconstants/build/heroes.json'; import ReactTooltip from 'react-tooltip'; import { abbreviateNumber } from 'utility'; import strings from 'lang'; -import { IconRadiant, IconDire } from '../components/Icons'; +import { IconRadiant, IconDire } from '../Icons'; import { heroTd } from './matchColumns'; import constants from '../constants'; diff --git a/src/components/Match/Draft/Draft.jsx b/src/components/Match/Draft/Draft.jsx index feda827ae6..b397ac12e3 100644 --- a/src/components/Match/Draft/Draft.jsx +++ b/src/components/Match/Draft/Draft.jsx @@ -1,5 +1,5 @@ -import Heading from '../components/Heading'; -import { IconRadiant, IconDire } from '../components/Icons'; +import Heading from '../Heading'; +import { IconRadiant, IconDire } from '../Icons'; import heroes from 'dotaconstants/build/heroes.json'; import Next from 'material-ui/svg-icons/hardware/keyboard-arrow-right'; import Prev from 'material-ui/svg-icons/hardware/keyboard-arrow-left'; diff --git a/src/components/Match/Laning/index.jsx b/src/components/Match/Laning/index.jsx index e32ef0ba2a..12653d0b4a 100644 --- a/src/components/Match/Laning/index.jsx +++ b/src/components/Match/Laning/index.jsx @@ -1,11 +1,11 @@ import React from 'react'; import PropTypes from 'prop-types'; import strings from 'lang'; -import Heading from '../components/Heading'; -import Heatmap from '../components/Heatmap'; -import Table from '../components/Table'; +import Heading from '../Heading'; +import Heatmap from '../Heatmap'; +import Table from '../Table'; import { unpackPositionData } from 'utility'; -import { laningColumns } from '../components/Match/matchColumns'; +import { laningColumns } from '../Match/matchColumns'; import { StyledFlexContainer, StyledFlexElement } from '../StyledMatch'; class Laning extends React.Component { diff --git a/src/components/Match/Match.jsx b/src/components/Match/Match.jsx index 4551cc6883..06c52131af 100644 --- a/src/components/Match/Match.jsx +++ b/src/components/Match/Match.jsx @@ -2,8 +2,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Helmet from 'react-helmet'; -import Spinner from '../components/Spinner'; -import TabBar from '../components/TabBar'; +import Spinner from '../Spinner'; +import TabBar from '../TabBar'; import { getMatch, getPvgnaHeroGuides } from '../../actions'; import MatchHeader from './MatchHeader'; import matchPages from './matchPages'; diff --git a/src/components/Match/MatchHeader/MatchHeader.jsx b/src/components/Match/MatchHeader/MatchHeader.jsx index 7fb83eb3be..bdf6b2d448 100644 --- a/src/components/Match/MatchHeader/MatchHeader.jsx +++ b/src/components/Match/MatchHeader/MatchHeader.jsx @@ -2,14 +2,14 @@ import React from 'react'; import PropTypes from 'prop-types'; import { transformations, isRadiant, sum } from 'utility'; import strings from 'lang'; -import Spinner from '../components/Spinner'; -import { IconRadiant, IconDire } from '../components/Icons'; +import Spinner from '../Spinner'; +import { IconRadiant, IconDire } from '../Icons'; import { Link } from 'react-router-dom'; import FlatButton from 'material-ui/FlatButton'; import NavigationRefresh from 'material-ui/svg-icons/navigation/refresh'; import ActionFingerprint from 'material-ui/svg-icons/action/fingerprint'; import FileFileDownload from 'material-ui/svg-icons/file/file-download'; -import Warning from '../components/Alerts'; +import Warning from '../Alerts'; import styled from 'styled-components'; import constants from '../../constants'; diff --git a/src/components/Match/MatchLog.jsx b/src/components/Match/MatchLog.jsx index d594ebf423..7cec78881c 100644 --- a/src/components/Match/MatchLog.jsx +++ b/src/components/Match/MatchLog.jsx @@ -9,10 +9,10 @@ import { } from 'utility'; import styled from 'styled-components'; import ReactTooltip from 'react-tooltip'; -import Table from '../components/Table'; +import Table from '../Table'; import heroes from 'dotaconstants/build/heroes.json'; -import FormField from '../components/Form/FormField'; -import { IconRadiant, IconDire } from '../components/Icons'; +import FormField from '../Form/FormField'; +import { IconRadiant, IconDire } from '../Icons'; import { heroTdColumn } from './matchColumns'; import { StyledLogFilterForm } from './StyledMatch'; diff --git a/src/components/Match/MatchStory.jsx b/src/components/Match/MatchStory.jsx index c2b66f0127..478d16e563 100644 --- a/src/components/Match/MatchStory.jsx +++ b/src/components/Match/MatchStory.jsx @@ -7,7 +7,7 @@ import { formatTemplate, } from 'utility'; import util from 'util'; -import { IconRadiant, IconDire } from '../components/Icons'; +import { IconRadiant, IconDire } from '../Icons'; import heroes from 'dotaconstants/build/heroes.json'; import items from 'dotaconstants/build/items.json'; import itemColors from 'dotaconstants/build/item_colors.json'; diff --git a/src/components/Match/Overview/Overview.jsx b/src/components/Match/Overview/Overview.jsx index 9dbafcb6b9..d0201d2928 100644 --- a/src/components/Match/Overview/Overview.jsx +++ b/src/components/Match/Overview/Overview.jsx @@ -1,7 +1,7 @@ import React from 'react'; import strings from 'lang'; import styled from 'styled-components'; -import MatchGraph from '../components/Visualizations/Graph/MatchGraph'; +import MatchGraph from '../Visualizations/Graph/MatchGraph'; import TeamTable from '../TeamTable'; import AbilityBuildTable from '../AbilityBuildTable'; import AbilityDraftTable from '../AbilityDraftTable'; diff --git a/src/components/Match/Overview/Timeline.jsx b/src/components/Match/Overview/Timeline.jsx index bb4b166aa9..c7dc7d4c34 100644 --- a/src/components/Match/Overview/Timeline.jsx +++ b/src/components/Match/Overview/Timeline.jsx @@ -10,11 +10,11 @@ import { IconBloodDrop, IconRoshan, IconBattle, -} from '../components/Icons'; +} from '../Icons'; import strings from 'lang'; import ReactTooltip from 'react-tooltip'; import heroes from 'dotaconstants/build/heroes.json'; -import PlayerThumb from '../components/Match/PlayerThumb'; +import PlayerThumb from '../Match/PlayerThumb'; import styled from 'styled-components'; import constants from '../../constants'; diff --git a/src/components/Match/Purchases/index.jsx b/src/components/Match/Purchases/index.jsx index 67b0e595bb..1e7fc5669f 100644 --- a/src/components/Match/Purchases/index.jsx +++ b/src/components/Match/Purchases/index.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import strings from 'lang'; -import TeamTable from '../components/Match/TeamTable'; +import TeamTable from '../Match/TeamTable'; import Toggle from 'material-ui/Toggle'; -import { purchaseTimesColumns } from '../components/Match/matchColumns'; +import { purchaseTimesColumns } from '../Match/matchColumns'; class Purchases extends React.Component { constructor(props) { diff --git a/src/components/Match/TargetsBreakdown.jsx b/src/components/Match/TargetsBreakdown.jsx index 74b26d393a..e5346fa37a 100644 --- a/src/components/Match/TargetsBreakdown.jsx +++ b/src/components/Match/TargetsBreakdown.jsx @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import heroes from 'dotaconstants/build/heroes.json'; import ReactTooltip from 'react-tooltip'; import NavigationArrowForward from 'material-ui/svg-icons/navigation/arrow-forward'; -import { inflictorWithValue } from '../components/Visualizations'; +import { inflictorWithValue } from '../Visualizations'; import { sumValues, getHeroesById, abbreviateNumber } from 'utility'; import { StyledDmgTargetInflictor, StyledDmgTargetRow } from './StyledMatch'; import constants from '../constants'; diff --git a/src/components/Match/TeamTable.jsx b/src/components/Match/TeamTable.jsx index 6083196838..256f46e112 100644 --- a/src/components/Match/TeamTable.jsx +++ b/src/components/Match/TeamTable.jsx @@ -1,10 +1,10 @@ import React from 'react'; import PropTypes from 'prop-types'; import { isRadiant, getTeamName } from 'utility'; -import Heading from '../components/Heading'; -import { IconRadiant, IconDire } from '../components/Icons'; +import Heading from '../Heading'; +import { IconRadiant, IconDire } from '../Icons'; import { connect } from 'react-redux'; -import Table from '../components/Table'; +import Table from '../Table'; import PicksBans from './Overview/PicksBans'; // Displayed only on `Overview` page const keyFn = row => row && row.player_slot + 1; diff --git a/src/components/Match/TeamfightMap/index.jsx b/src/components/Match/TeamfightMap/index.jsx index 13e5456c7f..8753a8cf35 100644 --- a/src/components/Match/TeamfightMap/index.jsx +++ b/src/components/Match/TeamfightMap/index.jsx @@ -3,13 +3,13 @@ import PropTypes from 'prop-types'; import { formatSeconds, calculateDistance, calculateRelativeXY, bindWidth } from 'utility'; import ReactTooltip from 'react-tooltip'; import stylePropType from 'react-style-proptype'; -import { IconRadiant, IconDire, IconDot } from '../components/Icons'; -import TeamTable from '../components/Match/TeamTable'; -import { teamfightColumns } from '../components/Match/matchColumns'; -import PlayerThumb from '../components/Match/PlayerThumb'; +import { IconRadiant, IconDire, IconDot } from '../Icons'; +import TeamTable from '../Match/TeamTable'; +import { teamfightColumns } from '../Match/matchColumns'; +import PlayerThumb from '../Match/PlayerThumb'; import strings from 'lang'; -import Timeline from '../components/Match/Overview/Timeline'; -import DotaMap from '../components/DotaMap'; +import Timeline from '../Match/Overview/Timeline'; +import DotaMap from '../DotaMap'; import styled from 'styled-components'; import constants from '../../constants'; diff --git a/src/components/Match/Vision/LogHover.jsx b/src/components/Match/Vision/LogHover.jsx index ea75ff20eb..1aec4625c3 100644 --- a/src/components/Match/Vision/LogHover.jsx +++ b/src/components/Match/Vision/LogHover.jsx @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { gameCoordToUV } from 'utility'; -import DotaMap from '../components/DotaMap'; +import DotaMap from '../DotaMap'; import styled from 'styled-components'; import constants from '../../constants'; diff --git a/src/components/Match/Vision/VisionFilter.jsx b/src/components/Match/Vision/VisionFilter.jsx index 8410102212..87777db0c8 100644 --- a/src/components/Match/Vision/VisionFilter.jsx +++ b/src/components/Match/Vision/VisionFilter.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import Checkbox from 'material-ui/Checkbox'; -import Table from '../components/Table'; +import Table from '../Table'; import strings from 'lang'; -import Heading from '../components/Heading'; +import Heading from '../Heading'; import PlayerThumb from '../PlayerThumb'; diff --git a/src/components/Match/Vision/VisionItems.jsx b/src/components/Match/Vision/VisionItems.jsx index 481cd0b0f6..79eab90d4c 100644 --- a/src/components/Match/Vision/VisionItems.jsx +++ b/src/components/Match/Vision/VisionItems.jsx @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import TeamTable from '../components/Match/TeamTable'; -import { visionColumns } from '../components/Match/matchColumns'; +import TeamTable from '../Match/TeamTable'; +import { visionColumns } from '../Match/matchColumns'; import strings from 'lang'; const VisionItems = ({ match }) => ( diff --git a/src/components/Match/Vision/VisionLog.jsx b/src/components/Match/Vision/VisionLog.jsx index 5a9c07c052..f7f7fe8e46 100644 --- a/src/components/Match/Vision/VisionLog.jsx +++ b/src/components/Match/Vision/VisionLog.jsx @@ -3,9 +3,9 @@ import PropTypes from 'prop-types'; import styled from 'styled-components'; import items from 'dotaconstants/build/items.json'; import { threshold, formatSeconds } from 'utility'; -import Table from '../components/Table'; +import Table from '../Table'; import strings from 'lang'; -import Heading from '../components/Heading'; +import Heading from '../Heading'; import { heroTd, heroTdColumn } from '../matchColumns'; import constants from '../../constants'; import LogHover from './LogHover'; diff --git a/src/components/Match/Vision/VisionMap.jsx b/src/components/Match/Vision/VisionMap.jsx index e7078b00fb..bebac6fe65 100644 --- a/src/components/Match/Vision/VisionMap.jsx +++ b/src/components/Match/Vision/VisionMap.jsx @@ -6,8 +6,8 @@ import { } from 'utility'; import ReactTooltip from 'react-tooltip'; import strings from 'lang'; -import PlayerThumb from '../components/Match/PlayerThumb'; -import DotaMap from '../components/DotaMap'; +import PlayerThumb from '../Match/PlayerThumb'; +import DotaMap from '../DotaMap'; import styled from 'styled-components'; import constants from '../../constants'; diff --git a/src/components/Match/matchColumns.jsx b/src/components/Match/matchColumns.jsx index 2ccb103e48..b81f08fea1 100644 --- a/src/components/Match/matchColumns.jsx +++ b/src/components/Match/matchColumns.jsx @@ -10,12 +10,12 @@ import buffs from 'dotaconstants/build/permanent_buffs.json'; import util from 'util'; import strings from 'lang'; import { formatSeconds, abbreviateNumber, transformations, percentile, sum, subTextStyle, getHeroesById, rankTierToString, groupBy } from 'utility'; -import { TableHeroImage, inflictorWithValue } from '../components/Visualizations'; +import { TableHeroImage, inflictorWithValue } from '../Visualizations'; import ReactTooltip from 'react-tooltip'; import { RadioButton } from 'material-ui/RadioButton'; import ActionOpenInNew from 'material-ui/svg-icons/action/open-in-new'; -import { CompetitiveRank } from '../components/Visualizations/Table/HeroImage'; -import { IconBackpack, IconRadiant, IconDire } from '../components/Icons'; +import { CompetitiveRank } from '../Visualizations/Table/HeroImage'; +import { IconBackpack, IconRadiant, IconDire } from '../Icons'; import constants from '../constants'; import { StyledAbilityUpgrades, StyledBackpack, StyledCosmetic, StyledDivClearBoth, StyledGoldIcon, StyledPlayersDeath, StyledRunes, StyledUnusedItem } from './StyledMatch'; import TargetsBreakdown from './TargetsBreakdown'; diff --git a/src/components/Match/matchPages.jsx b/src/components/Match/matchPages.jsx index ba08810863..528c7d572f 100644 --- a/src/components/Match/matchPages.jsx +++ b/src/components/Match/matchPages.jsx @@ -1,12 +1,12 @@ import React from 'react'; import strings from 'lang'; -import Heading from '../components/Heading'; -import Table from '../components/Table'; -import TeamfightMap from '../components/Match/TeamfightMap'; -import Purchases from '../components/Match/Purchases'; -import Timeline from '../components/Match/Overview/Timeline'; -import MatchGraph from '../components/Visualizations/Graph/MatchGraph'; -import StackedBarGraph from '../components/Visualizations/Graph/StackedBarGraph'; +import Heading from '../Heading'; +import Table from '../Table'; +import TeamfightMap from '../Match/TeamfightMap'; +import Purchases from '../Match/Purchases'; +import Timeline from '../Match/Overview/Timeline'; +import MatchGraph from '../Visualizations/Graph/MatchGraph'; +import StackedBarGraph from '../Visualizations/Graph/StackedBarGraph'; import heroes from 'dotaconstants/build/heroes.json'; import Draft from './Draft'; import Vision from './Vision'; diff --git a/src/components/Matches/index.jsx b/src/components/Matches/index.jsx index 7e15170dd8..e9d247f756 100644 --- a/src/components/Matches/index.jsx +++ b/src/components/Matches/index.jsx @@ -4,12 +4,12 @@ import { connect } from 'react-redux'; import Helmet from 'react-helmet'; import { getProMatches, getPublicMatches } from '../../actions'; import strings from 'lang'; -import Table, { TableLink } from '../components/Table'; -// import Heading from '../components/Heading'; +import Table, { TableLink } from '../Table'; +// import Heading from '../Heading'; import { transformations, subTextStyle, rankTierToString } from 'utility'; -import { IconTrophy } from '../components/Icons'; -import Match from '../components/Match'; -import TabBar from '../components/TabBar'; +import { IconTrophy } from '../Icons'; +import Match from '../Match'; +import TabBar from '../TabBar'; import heroes from 'dotaconstants/build/heroes.json'; import styled from 'styled-components'; import { StyledTeamIconContainer } from '../Match/StyledMatch'; diff --git a/src/components/Meta/index.jsx b/src/components/Meta/index.jsx index d670eb7ee7..effab56737 100644 --- a/src/components/Meta/index.jsx +++ b/src/components/Meta/index.jsx @@ -3,14 +3,14 @@ import React from 'react'; import { connect } from 'react-redux'; import fetch from 'isomorphic-fetch'; -import Spinner from '../components/Spinner'; +import Spinner from '../Spinner'; import RaisedButton from 'material-ui/RaisedButton'; -import ExplorerOutputSection from '../components/Explorer/ExplorerOutputSection'; -import ExplorerControlSection from '../components/Explorer/ExplorerControlSection'; -import ExplorerFormField from '../components/Explorer/ExplorerFormField'; +import ExplorerOutputSection from '../Explorer/ExplorerOutputSection'; +import ExplorerControlSection from '../Explorer/ExplorerControlSection'; +import ExplorerFormField from '../Explorer/ExplorerFormField'; import strings from 'lang'; import Helmet from 'react-helmet'; -import Heading from '../components/Heading'; +import Heading from '../Heading'; import querystring from 'querystring'; import queryTemplate from './queryTemplate'; import fields from './fields'; diff --git a/src/components/Player/Header/PlayerBadges.jsx b/src/components/Player/Header/PlayerBadges.jsx index 884fb0e469..699aae9d69 100644 --- a/src/components/Player/Header/PlayerBadges.jsx +++ b/src/components/Player/Header/PlayerBadges.jsx @@ -1,8 +1,8 @@ import React from 'react'; import { connect } from 'react-redux'; -import Error from '../components/Error'; -import Spinner from '../components/Spinner'; -import { IconCheese, IconSteam, IconEye, IconEyeInactive, IconCheckCircle } from '../components/Icons'; +import Error from '../Error'; +import Spinner from '../Spinner'; +import { IconCheese, IconSteam, IconEye, IconEyeInactive, IconCheckCircle } from '../Icons'; import strings from 'lang'; import styled from 'styled-components'; import constants from '../../constants'; diff --git a/src/components/Player/Header/PlayerButtons.jsx b/src/components/Player/Header/PlayerButtons.jsx index 7222ad5134..0c1671b28b 100644 --- a/src/components/Player/Header/PlayerButtons.jsx +++ b/src/components/Player/Header/PlayerButtons.jsx @@ -6,7 +6,7 @@ import ActionUpdate from 'material-ui/svg-icons/navigation/refresh'; import strings from 'lang'; import fetch from 'isomorphic-fetch'; import { toggleShowForm as toggleShowFormAction } from '../../actions'; -import ShowFormToggle from '../components/Form/ShowFormToggle'; +import ShowFormToggle from '../Form/ShowFormToggle'; import styled from 'styled-components'; const Styled = styled.div` diff --git a/src/components/Player/Header/PlayerHeader.jsx b/src/components/Player/Header/PlayerHeader.jsx index acf2b2469e..23db1a8203 100644 --- a/src/components/Player/Header/PlayerHeader.jsx +++ b/src/components/Player/Header/PlayerHeader.jsx @@ -5,8 +5,8 @@ import Avatar from 'material-ui/Avatar'; import Badge from 'material-ui/Badge'; import strings from 'lang'; import { rankTierToString } from 'utility'; -import Error from '../components/Error'; -import Spinner from '../components/Spinner'; +import Error from '../Error'; +import Spinner from '../Spinner'; import styled from 'styled-components'; import PlayerStats from './PlayerStats'; import PlayerBadges from './PlayerBadges'; diff --git a/src/components/Player/Header/PlayerStats.jsx b/src/components/Player/Header/PlayerStats.jsx index 96dd208611..8cae6ff8cf 100644 --- a/src/components/Player/Header/PlayerStats.jsx +++ b/src/components/Player/Header/PlayerStats.jsx @@ -2,8 +2,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import ActionHelp from 'material-ui/svg-icons/action/help'; -import Error from '../components/Error'; -import Spinner from '../components/Spinner'; +import Error from '../Error'; +import Spinner from '../Spinner'; import strings from 'lang'; import styled from 'styled-components'; import PlayedWith from './PlayedWith'; diff --git a/src/components/Player/Pages/Counts/Counts.jsx b/src/components/Player/Pages/Counts/Counts.jsx index a745540f57..6da38b9ceb 100644 --- a/src/components/Player/Pages/Counts/Counts.jsx +++ b/src/components/Player/Pages/Counts/Counts.jsx @@ -2,8 +2,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { getPlayerCounts } from '../../actions'; -import Table from '../components/Table'; -import Container from '../components/Container'; +import Table from '../Table'; +import Container from '../Container'; import strings from 'lang'; import styled from 'styled-components'; import playerCountsColumns from './playerCountsColumns'; diff --git a/src/components/Player/Pages/Heroes/Heroes.jsx b/src/components/Player/Pages/Heroes/Heroes.jsx index 7557cb5bbf..8fa3fe3dcb 100644 --- a/src/components/Player/Pages/Heroes/Heroes.jsx +++ b/src/components/Player/Pages/Heroes/Heroes.jsx @@ -3,8 +3,8 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import strings from 'lang'; import { getPlayerHeroes } from '../../actions'; -import Table from '../components/Table'; -import Container from '../components/Container'; +import Table from '../Table'; +import Container from '../Container'; import { playerHeroesColumns } from './playerHeroesColumns'; const Heroes = ({ diff --git a/src/components/Player/Pages/Heroes/playerHeroesColumns.jsx b/src/components/Player/Pages/Heroes/playerHeroesColumns.jsx index 8f345d095b..a5bf174c8a 100644 --- a/src/components/Player/Pages/Heroes/playerHeroesColumns.jsx +++ b/src/components/Player/Pages/Heroes/playerHeroesColumns.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import { TableLink } from '../components/Table'; +import { TableLink } from '../Table'; import { transformations } from 'utility'; import strings from 'lang'; diff --git a/src/components/Player/Pages/Histograms/Histograms.jsx b/src/components/Player/Pages/Histograms/Histograms.jsx index 5b12c89184..a0641c188b 100644 --- a/src/components/Player/Pages/Histograms/Histograms.jsx +++ b/src/components/Player/Pages/Histograms/Histograms.jsx @@ -3,11 +3,11 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; import { getPlayerHistograms } from '../../actions'; -import Heading from '../components/Heading'; -import { HistogramGraph } from '../components/Visualizations'; -import ButtonGarden from '../components/ButtonGarden'; -import dataColumns from '../components/Player/Pages/matchDataColumns'; -import Container from '../components/Container'; +import Heading from '../Heading'; +import { HistogramGraph } from '../Visualizations'; +import ButtonGarden from '../ButtonGarden'; +import dataColumns from '../Player/Pages/matchDataColumns'; +import Container from '../Container'; import strings from 'lang'; const getMedian = (columns, midpoint) => { diff --git a/src/components/Player/Pages/Items/Items.jsx b/src/components/Player/Pages/Items/Items.jsx index 3f61a4013a..d847c5e180 100644 --- a/src/components/Player/Pages/Items/Items.jsx +++ b/src/components/Player/Pages/Items/Items.jsx @@ -2,8 +2,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { getPlayerItems } from '../../actions'; -import Table from '../components/Table'; -import Container from '../components/Container'; +import Table from '../Table'; +import Container from '../Container'; import playerItemsColumns from './playerItemsColumns'; const Items = ({ diff --git a/src/components/Player/Pages/MMR/MMR.jsx b/src/components/Player/Pages/MMR/MMR.jsx index 254cf1967a..66293f82c3 100644 --- a/src/components/Player/Pages/MMR/MMR.jsx +++ b/src/components/Player/Pages/MMR/MMR.jsx @@ -1,11 +1,11 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { MMRGraph } from '../components/Visualizations'; +import { MMRGraph } from '../Visualizations'; import { getPlayerMmr } from '../../actions'; import strings from 'lang'; -import Container from '../components/Container'; -import Info from '../components/Alerts/Info'; +import Container from '../Container'; +import Info from '../Alerts/Info'; const MMRInfo = ( diff --git a/src/components/Player/Pages/Matches/Matches.jsx b/src/components/Player/Pages/Matches/Matches.jsx index 9da537512a..e2ccb5f93f 100644 --- a/src/components/Player/Pages/Matches/Matches.jsx +++ b/src/components/Player/Pages/Matches/Matches.jsx @@ -2,8 +2,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { getPlayerMatches } from '../../actions'; -import Table from '../components/Table'; -import Container from '../components/Container'; +import Table from '../Table'; +import Container from '../Container'; import strings from 'lang'; import playerMatchesColumns from './playerMatchesColumns'; diff --git a/src/components/Player/Pages/Overview/Overview.jsx b/src/components/Player/Pages/Overview/Overview.jsx index dcdb3edca3..81e77ae723 100644 --- a/src/components/Player/Pages/Overview/Overview.jsx +++ b/src/components/Player/Pages/Overview/Overview.jsx @@ -12,11 +12,11 @@ import Checkbox from 'material-ui/Checkbox'; import Turbo from 'material-ui/svg-icons/image/timelapse'; import TurboOff from 'material-ui/svg-icons/notification/do-not-disturb'; import ReactTooltip from 'react-tooltip'; -import Table from '../components/Table'; -import Container from '../components/Container'; -import playerMatchesColumns from '../components/Player/Pages/Matches/playerMatchesColumns'; -import { playerHeroesOverviewColumns } from '../components/Player/Pages/Heroes/playerHeroesColumns'; -import { playerPeersOverviewColumns } from '../components/Player/Pages/Peers/playerPeersColumns'; +import Table from '../Table'; +import Container from '../Container'; +import playerMatchesColumns from '../Player/Pages/Matches/playerMatchesColumns'; +import { playerHeroesOverviewColumns } from '../Player/Pages/Heroes/playerHeroesColumns'; +import { playerPeersOverviewColumns } from '../Player/Pages/Peers/playerPeersColumns'; import util from 'util'; import styled from 'styled-components'; import SummOfRecMatches from './Summary'; diff --git a/src/components/Player/Pages/Peers/Peers.jsx b/src/components/Player/Pages/Peers/Peers.jsx index 01a6a5351f..5618cc077b 100644 --- a/src/components/Player/Pages/Peers/Peers.jsx +++ b/src/components/Player/Pages/Peers/Peers.jsx @@ -2,8 +2,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { getPlayerPeers } from '../../actions'; -import Table from '../components/Table'; -import Container from '../components/Container'; +import Table from '../Table'; +import Container from '../Container'; import strings from 'lang'; import { playerPeersColumns } from './playerPeersColumns'; diff --git a/src/components/Player/Pages/Peers/playerPeersColumns.jsx b/src/components/Player/Pages/Peers/playerPeersColumns.jsx index c58039131d..938524c20d 100644 --- a/src/components/Player/Pages/Peers/playerPeersColumns.jsx +++ b/src/components/Player/Pages/Peers/playerPeersColumns.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import { TableLink } from '../components/Table'; +import { TableLink } from '../Table'; import { transformations } from 'utility'; import strings from 'lang'; diff --git a/src/components/Player/Pages/Pros/Pros.jsx b/src/components/Player/Pages/Pros/Pros.jsx index e74003b90f..5acfa5b581 100644 --- a/src/components/Player/Pages/Pros/Pros.jsx +++ b/src/components/Player/Pages/Pros/Pros.jsx @@ -2,8 +2,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { getPlayerPros } from '../../actions'; -import Table from '../components/Table'; -import Container from '../components/Container'; +import Table from '../Table'; +import Container from '../Container'; import strings from 'lang'; import playerProsColumns from './playerProsColumns'; diff --git a/src/components/Player/Pages/Pros/playerProsColumns.jsx b/src/components/Player/Pages/Pros/playerProsColumns.jsx index da0706155d..2ddd7f3ac2 100644 --- a/src/components/Player/Pages/Pros/playerProsColumns.jsx +++ b/src/components/Player/Pages/Pros/playerProsColumns.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import { TableLink } from '../components/Table'; +import { TableLink } from '../Table'; import { transformations } from 'utility'; import strings from 'lang'; diff --git a/src/components/Player/Pages/Rankings/Rankings.jsx b/src/components/Player/Pages/Rankings/Rankings.jsx index 9c7869d54f..1d608f7135 100644 --- a/src/components/Player/Pages/Rankings/Rankings.jsx +++ b/src/components/Player/Pages/Rankings/Rankings.jsx @@ -2,8 +2,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { getPlayerRankings } from '../../actions'; -import Table from '../components/Table'; -import Container from '../components/Container'; +import Table from '../Table'; +import Container from '../Container'; import strings from 'lang'; import playerRankingsColumns from './playerRankingsColumns'; diff --git a/src/components/Player/Pages/Records/Records.jsx b/src/components/Player/Pages/Records/Records.jsx index 0e5950650e..9843d66c45 100644 --- a/src/components/Player/Pages/Records/Records.jsx +++ b/src/components/Player/Pages/Records/Records.jsx @@ -3,11 +3,11 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; import { getPlayerRecords } from '../../actions'; -import Table from '../components/Table'; -import Container from '../components/Container'; +import Table from '../Table'; +import Container from '../Container'; import strings from 'lang'; -import dataColumns from '../components/Player/Pages/matchDataColumns'; -import ButtonGarden from '../components/ButtonGarden'; +import dataColumns from '../Player/Pages/matchDataColumns'; +import ButtonGarden from '../ButtonGarden'; import playerRecordsColumns from './playerRecordsColumns'; const excludedColumns = ['win_rate', 'level']; diff --git a/src/components/Player/Pages/Totals/Totals.jsx b/src/components/Player/Pages/Totals/Totals.jsx index 5bfd4670d3..9ecee89d5c 100644 --- a/src/components/Player/Pages/Totals/Totals.jsx +++ b/src/components/Player/Pages/Totals/Totals.jsx @@ -2,7 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { getPlayerTotals } from '../../actions'; -import Container from '../components/Container'; +import Container from '../Container'; import strings from 'lang'; import { CardTitle } from 'material-ui/Card'; // import util from 'util'; diff --git a/src/components/Player/Pages/Trends/Trends.jsx b/src/components/Player/Pages/Trends/Trends.jsx index 6aa4c8aeae..50c6f60fc4 100644 --- a/src/components/Player/Pages/Trends/Trends.jsx +++ b/src/components/Player/Pages/Trends/Trends.jsx @@ -2,12 +2,12 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; -import { TrendGraph } from '../components/Visualizations'; +import { TrendGraph } from '../Visualizations'; import { getPlayerTrends } from '../../actions'; -import ButtonGarden from '../components/ButtonGarden'; -import trendNames from '../components/Player/Pages/matchDataColumns'; -import Heading from '../components/Heading'; -import Container from '../components/Container'; +import ButtonGarden from '../ButtonGarden'; +import trendNames from '../Player/Pages/matchDataColumns'; +import Heading from '../Heading'; +import Container from '../Container'; import strings from 'lang'; const Trend = ({ diff --git a/src/components/Player/Pages/Wardmap/Wardmap.jsx b/src/components/Player/Pages/Wardmap/Wardmap.jsx index ea43814949..ec46350fcb 100644 --- a/src/components/Player/Pages/Wardmap/Wardmap.jsx +++ b/src/components/Player/Pages/Wardmap/Wardmap.jsx @@ -3,8 +3,8 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { calculateResponsiveState } from 'redux-responsive'; import { getPlayerWardmap } from '../../actions'; -import Heatmap from '../components/Heatmap'; -import Container from '../components/Container'; +import Heatmap from '../Heatmap'; +import Container from '../Container'; import strings from 'lang'; import { unpackPositionData } from 'utility'; import styled from 'styled-components'; diff --git a/src/components/Player/Pages/Wordcloud/Wordcloud.jsx b/src/components/Player/Pages/Wordcloud/Wordcloud.jsx index 069a28c6a8..cbb41aae1d 100644 --- a/src/components/Player/Pages/Wordcloud/Wordcloud.jsx +++ b/src/components/Player/Pages/Wordcloud/Wordcloud.jsx @@ -2,8 +2,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { getPlayerWordcloud } from '../../actions'; -import Container from '../components/Container'; -import Wordcloud from '../components/Wordcloud'; +import Container from '../Container'; +import Wordcloud from '../Wordcloud'; import strings from 'lang'; const getData = (props) => { diff --git a/src/components/Player/Player.jsx b/src/components/Player/Player.jsx index 7c50dcd9d7..3ed27b9732 100644 --- a/src/components/Player/Player.jsx +++ b/src/components/Player/Player.jsx @@ -9,8 +9,8 @@ import { getPlayerWinLoss, } from '../../actions'; import strings from 'lang'; -import TabBar from '../components/TabBar'; -import Spinner from '../components/Spinner'; +import TabBar from '../TabBar'; +import Spinner from '../Spinner'; import TableFilterForm from './TableFilterForm'; import PlayerHeader from './Header/PlayerHeader'; // import Error from '../Error'; diff --git a/src/components/Player/TableFilterForm/index.jsx b/src/components/Player/TableFilterForm/index.jsx index 563348eff3..5cb9089327 100644 --- a/src/components/Player/TableFilterForm/index.jsx +++ b/src/components/Player/TableFilterForm/index.jsx @@ -6,7 +6,7 @@ import { withRouter } from 'react-router-dom'; import querystring from 'querystring'; import strings from 'lang'; import { toggleShowForm } from '../../actions/formActions'; -import FormField from '../components/Form/FormField'; +import FormField from '../Form/FormField'; import styled from 'styled-components'; import * as data from './TableFilter.config'; diff --git a/src/components/Predictions/index.jsx b/src/components/Predictions/index.jsx index 5c43f37614..f2972405c2 100644 --- a/src/components/Predictions/index.jsx +++ b/src/components/Predictions/index.jsx @@ -1,8 +1,8 @@ import React from 'react'; import Helmet from 'react-helmet'; -import Table from '../components/Table'; -import Heading from '../components/Heading'; -import Warning from '../components/Alerts'; +import Table from '../Table'; +import Heading from '../Heading'; +import Warning from '../Alerts'; // import RaisedButton from 'material-ui/RaisedButton'; const predictionArray = [ diff --git a/src/components/Records/index.jsx b/src/components/Records/index.jsx index 29859c6cdd..32508d2fef 100644 --- a/src/components/Records/index.jsx +++ b/src/components/Records/index.jsx @@ -4,12 +4,12 @@ import { connect } from 'react-redux'; import Helmet from 'react-helmet'; import { getRecords } from '../../actions'; import strings from 'lang'; -import Table from '../components/Table'; -import Heading from '../components/Heading'; +import Table from '../Table'; +import Heading from '../Heading'; import { transformations, formatSeconds, getOrdinal } from 'utility'; -// import { IconRadiant, IconDire, IconTrophy } from '../components/Icons'; -import Container from '../components/Container'; -import TabBar from '../components/TabBar'; +// import { IconRadiant, IconDire, IconTrophy } from '../Icons'; +import Container from '../Container'; +import TabBar from '../TabBar'; const matchesColumns = field => [{ displayName: strings.th_rank, diff --git a/src/components/Search/SearchResult.jsx b/src/components/Search/SearchResult.jsx index 2f485ef696..dc21b9a2a5 100644 --- a/src/components/Search/SearchResult.jsx +++ b/src/components/Search/SearchResult.jsx @@ -5,8 +5,8 @@ import { transformations, fromNow, } from 'utility'; -import Table, { TableLink } from '../components/Table'; -import Container from '../components/Container'; +import Table, { TableLink } from '../Table'; +import Container from '../Container'; // import { List } from 'material-ui/List'; const searchColumns = [{ diff --git a/src/components/Status/Status.jsx b/src/components/Status/Status.jsx index 61cd918e0b..ffa6f41f4b 100644 --- a/src/components/Status/Status.jsx +++ b/src/components/Status/Status.jsx @@ -2,7 +2,7 @@ import React from 'react'; import fetch from 'isomorphic-fetch'; import { fromNow, abbreviateNumber } from 'utility'; import Helmet from 'react-helmet'; -import Table from '../components/Table'; +import Table from '../Table'; import strings from 'lang'; function jsonResponse(response) { diff --git a/src/components/Table/Table.jsx b/src/components/Table/Table.jsx index 6adff7d066..521cfa5ceb 100644 --- a/src/components/Table/Table.jsx +++ b/src/components/Table/Table.jsx @@ -7,8 +7,8 @@ import { TableRow as MaterialTableRow, TableRowColumn as MaterialTableRowColumn, } from 'material-ui/Table'; -import { TablePercent } from '../components/Visualizations'; -import Pagination from '../components/Table/PaginatedTable/Pagination'; +import { TablePercent } from '../Visualizations'; +import Pagination from '../Table/PaginatedTable/Pagination'; import { abbreviateNumber, SORT_ENUM, defaultSort } from 'utility'; import TableHeader from './TableHeader'; import Spinner from '../Spinner'; diff --git a/src/components/Team/Overview.jsx b/src/components/Team/Overview.jsx index c9d746ddab..6ead71418c 100644 --- a/src/components/Team/Overview.jsx +++ b/src/components/Team/Overview.jsx @@ -1,7 +1,7 @@ import React from 'react'; import strings from 'lang'; -import Container from '../components/Container'; -import Table from '../components/Table'; +import Container from '../Container'; +import Table from '../Table'; import { matchColumns, memberColumns, heroColumns } from './teamDataColumns'; import { Row, MatchesContainer, MemberAndHeroContainer } from './TeamStyled'; diff --git a/src/components/Team/TeamStyled.jsx b/src/components/Team/TeamStyled.jsx index 0121d31807..85e81f9b26 100644 --- a/src/components/Team/TeamStyled.jsx +++ b/src/components/Team/TeamStyled.jsx @@ -1,6 +1,6 @@ import styled from 'styled-components'; import { CardTitle } from 'material-ui/Card'; -import Container from '../components/Container'; +import Container from '../Container'; import constants from '../constants'; export const TeamStatsCard = styled(CardTitle)` diff --git a/src/components/Team/index.jsx b/src/components/Team/index.jsx index b1aad98616..ee41bb5a2a 100644 --- a/src/components/Team/index.jsx +++ b/src/components/Team/index.jsx @@ -3,8 +3,8 @@ import PropTypes from 'prop-types'; import Helmet from 'react-helmet'; import { connect } from 'react-redux'; import { getTeam, getTeamHeroes, getTeamMatches, getTeamPlayers } from '../../actions'; -import Spinner from '../components/Spinner'; -import TabBar from '../components/TabBar'; +import Spinner from '../Spinner'; +import TabBar from '../TabBar'; import teamPages from './teamPages'; import getTeamHeader from './TeamHeader'; import { Column } from './TeamStyled'; diff --git a/src/components/Team/teamDataColumns.jsx b/src/components/Team/teamDataColumns.jsx index 32e620ac97..1b44628471 100644 --- a/src/components/Team/teamDataColumns.jsx +++ b/src/components/Team/teamDataColumns.jsx @@ -2,7 +2,7 @@ import React from 'react'; import heroes from 'dotaconstants/build/heroes.json'; import strings from 'lang'; import { transformations, subTextStyle, getTeamLogoUrl } from 'utility'; -import { TableLink } from '../components/Table'; +import { TableLink } from '../Table'; import constants from '../constants'; import { TableRow, TableImage } from './TeamStyled'; import proPlayerImages from './proPlayerImages'; diff --git a/src/components/Team/teamPages.jsx b/src/components/Team/teamPages.jsx index fce797ec26..9357a68029 100644 --- a/src/components/Team/teamPages.jsx +++ b/src/components/Team/teamPages.jsx @@ -1,7 +1,7 @@ import React from 'react'; import strings from 'lang'; -import Container from '../components/Container'; -import Table from '../components/Table'; +import Container from '../Container'; +import Table from '../Table'; import Overview from './Overview'; import { matchColumns, memberColumns, heroColumns } from './teamDataColumns'; diff --git a/src/components/Teams/index.jsx b/src/components/Teams/index.jsx index 861c1b0c54..929b30a29f 100644 --- a/src/components/Teams/index.jsx +++ b/src/components/Teams/index.jsx @@ -4,9 +4,9 @@ import Helmet from 'react-helmet'; import { connect } from 'react-redux'; import strings from 'lang'; import { getTeams } from '../../actions'; -import Heading from '../components/Heading'; -import Team from '../components/Team'; -import Table, { TableLink } from '../components/Table'; +import Heading from '../Heading'; +import Team from '../Team'; +import Table, { TableLink } from '../Table'; import styled from 'styled-components'; import { getOrdinal, getTeamLogoUrl, fromNow, subTextStyle } from 'utility'; import { Logo } from '../Team/TeamStyled'; diff --git a/src/components/Visualizations/Graph/MMRGraph.jsx b/src/components/Visualizations/Graph/MMRGraph.jsx index 56292e3376..634100da72 100644 --- a/src/components/Visualizations/Graph/MMRGraph.jsx +++ b/src/components/Visualizations/Graph/MMRGraph.jsx @@ -11,7 +11,7 @@ import { Legend, Label, ResponsiveContainer, Brush, } from 'recharts'; -import constants from '../components/constants'; +import constants from '../constants'; import styled from 'styled-components'; const StyledGraphArea = styled.div` diff --git a/src/components/Visualizations/Graph/MatchGraph.jsx b/src/components/Visualizations/Graph/MatchGraph.jsx index 4096cd8b69..ed8115380f 100644 --- a/src/components/Visualizations/Graph/MatchGraph.jsx +++ b/src/components/Visualizations/Graph/MatchGraph.jsx @@ -1,6 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; -import Heading from '../components/Heading'; +import Heading from '../Heading'; import { ReferenceArea, XAxis, @@ -13,7 +13,7 @@ import { Legend, ResponsiveContainer, } from 'recharts'; -import constants from '../components/constants'; +import constants from '../constants'; import strings from 'lang'; import heroes from 'dotaconstants/build/heroes.json'; import playerColors from 'dotaconstants/build/player_colors.json'; diff --git a/src/components/Visualizations/Graph/StackedBarGraph.jsx b/src/components/Visualizations/Graph/StackedBarGraph.jsx index 4b6c1920a2..9a9adf552f 100644 --- a/src/components/Visualizations/Graph/StackedBarGraph.jsx +++ b/src/components/Visualizations/Graph/StackedBarGraph.jsx @@ -9,9 +9,9 @@ import { CartesianGrid, ResponsiveContainer, } from 'recharts'; -import Heading from '../components/Heading'; +import Heading from '../Heading'; import strings from 'lang'; -import constants from '../components/constants'; +import constants from '../constants'; import { StyledHolder } from './Styled'; const category10 = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf']; diff --git a/src/components/Visualizations/Graph/Styled.jsx b/src/components/Visualizations/Graph/Styled.jsx index 4723906d11..2fcc9d8caf 100644 --- a/src/components/Visualizations/Graph/Styled.jsx +++ b/src/components/Visualizations/Graph/Styled.jsx @@ -1,5 +1,5 @@ import styled from 'styled-components'; -import constants from '../components/constants'; +import constants from '../constants'; export const StyledTooltip = styled.div` position: relative; diff --git a/src/components/Visualizations/Graph/TrendGraph.jsx b/src/components/Visualizations/Graph/TrendGraph.jsx index 97b711eb25..55e22cce0d 100644 --- a/src/components/Visualizations/Graph/TrendGraph.jsx +++ b/src/components/Visualizations/Graph/TrendGraph.jsx @@ -15,7 +15,7 @@ import strings from 'lang'; import heroes from 'dotaconstants/build/heroes.json'; import { formatSeconds, fromNow } from 'utility'; import styled from 'styled-components'; -import constants from '../components/constants'; +import constants from '../constants'; const TooltipStylesDiv = styled.div` .tooltipWrapper { diff --git a/src/components/Visualizations/Table/HeroImage.jsx b/src/components/Visualizations/Table/HeroImage.jsx index 441924c557..034effc54a 100644 --- a/src/components/Visualizations/Table/HeroImage.jsx +++ b/src/components/Visualizations/Table/HeroImage.jsx @@ -3,9 +3,9 @@ import PropTypes from 'prop-types'; import ReactTooltip from 'react-tooltip'; import ActionDoneAll from 'material-ui/svg-icons/action/done-all'; import strings from 'lang'; -import { TableLink } from '../components/Table'; +import { TableLink } from '../Table'; import playerColors from 'dotaconstants/build/player_colors.json'; -import { IconDice, IconCrystalBall, IconCheckCircle } from '../components/Icons'; +import { IconDice, IconCrystalBall, IconCheckCircle } from '../Icons'; import SocialPerson from 'material-ui/svg-icons/social/person'; import NotificationSync from 'material-ui/svg-icons/notification/sync'; import styled from 'styled-components'; diff --git a/src/stories/Alerts.jsx b/src/stories/Alerts.jsx index c55aec748f..e3dfddc629 100644 --- a/src/stories/Alerts.jsx +++ b/src/stories/Alerts.jsx @@ -2,8 +2,8 @@ import React from 'react'; import { storiesOf } from '@storybook/react'; -import Warning from '../components/Alerts/Warning'; -import Info from '../components/Alerts/Info'; +import Warning from '../Alerts/Warning'; +import Info from '../Alerts/Info'; storiesOf('Alerts', module) .add('Warning with msg', () => ) diff --git a/src/stories/Attributes.jsx b/src/stories/Attributes.jsx index 1e82f02457..e6c2c36433 100644 --- a/src/stories/Attributes.jsx +++ b/src/stories/Attributes.jsx @@ -1,6 +1,6 @@ import React from 'react'; import { storiesOf } from '@storybook/react'; -import AttributesBlock from '../components/Hero/AttributesBlock'; +import AttributesBlock from '../Hero/AttributesBlock'; const hero = { primary_attr: 'agi', diff --git a/src/stories/BurgerMenu.jsx b/src/stories/BurgerMenu.jsx index 1b06b91517..f6d7f53885 100644 --- a/src/stories/BurgerMenu.jsx +++ b/src/stories/BurgerMenu.jsx @@ -3,7 +3,7 @@ import React from 'react'; import { storiesOf } from '@storybook/react'; import { action } from '@storybook/addon-actions'; -import BurgerMenu from '../components/Header/BurgerMenu'; +import BurgerMenu from '../Header/BurgerMenu'; storiesOf('Header', module).add('Burger menu', () => { const menuItems = [ diff --git a/src/stories/ButtonGarden.jsx b/src/stories/ButtonGarden.jsx index b9cea13653..4afbbf76ec 100644 --- a/src/stories/ButtonGarden.jsx +++ b/src/stories/ButtonGarden.jsx @@ -3,7 +3,7 @@ import React from 'react'; import { storiesOf } from '@storybook/react'; import { action } from '@storybook/addon-actions'; -import ButtonGarden from '../components/ButtonGarden'; +import ButtonGarden from '../ButtonGarden'; class ButtonGardenWrapper extends React.Component { constructor(props, context) { diff --git a/src/stories/ColorPalette.jsx b/src/stories/ColorPalette.jsx index 4ab3ca1885..5df2281143 100644 --- a/src/stories/ColorPalette.jsx +++ b/src/stories/ColorPalette.jsx @@ -3,7 +3,7 @@ import { string } from 'prop-types'; import { storiesOf } from '@storybook/react'; import styled from 'styled-components'; -import constants from '../components/constants'; +import constants from '../constants'; const StyledPanel = styled.div` background-color: ${props => props.color}; @@ -33,7 +33,7 @@ const Title = styled.h1` font-family: Arial; `; -storiesOf('Color Palette').add('../components/constantns.js', () => ( +storiesOf('Color Palette').add('../constantns.js', () => (
This is colors from components/constants diff --git a/src/stories/Error.jsx b/src/stories/Error.jsx index af96beb021..411a3f8e5e 100644 --- a/src/stories/Error.jsx +++ b/src/stories/Error.jsx @@ -1,8 +1,8 @@ import React from 'react'; import { storiesOf } from '@storybook/react'; -import Error from '../components/Error'; -import ErrorBox from '../components/Error/ErrorBox'; +import Error from '../Error'; +import ErrorBox from '../Error/ErrorBox'; storiesOf('Error') .add('Default error component', () => ( diff --git a/src/stories/Spinner.jsx b/src/stories/Spinner.jsx index 0d74ad10d4..3bc0dcf0f0 100644 --- a/src/stories/Spinner.jsx +++ b/src/stories/Spinner.jsx @@ -1,8 +1,8 @@ import React from 'react'; import { storiesOf } from '@storybook/react'; -import Spinner from '../components/Spinner'; -import constants from '../components/constants'; +import Spinner from '../Spinner'; +import constants from '../constants'; storiesOf('Spinner') .add('Size 20 color white', () => ) diff --git a/src/utility/index.jsx b/src/utility/index.jsx index 8a749fa3dc..71df5d1f60 100644 --- a/src/utility/index.jsx +++ b/src/utility/index.jsx @@ -5,19 +5,19 @@ import items from 'dotaconstants/build/items.json'; import patch from 'dotaconstants/build/patch.json'; import itemIds from 'dotaconstants/build/item_ids.json'; import xpLevel from 'dotaconstants/build/xp_level.json'; -import { TableLink } from '../components/Table'; +import { TableLink } from '../Table'; import { KDA, TableHeroImage, FromNowTooltip, -} from '../components/Visualizations'; +} from '../Visualizations'; import strings from 'lang'; import _ from 'lodash/fp'; import util from 'util'; // import SvgIcon from 'material-ui/SvgIcon'; import SocialPeople from 'material-ui/svg-icons/social/people'; import SocialPerson from 'material-ui/svg-icons/social/person'; -import constants from '../components/constants'; +import constants from '../constants'; export const iconStyle = { marginLeft: 5, From 1eeca16a0b6e26e1bdfd92f27f8982c5cb84c6aa Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Fri, 30 Mar 2018 13:38:58 +0000 Subject: [PATCH 0153/1495] manual fixes --- src/actions/analyzeMatch.js | 4 ++-- src/actions/index.js | 14 ++++++------ src/actions/transformCounts.js | 4 ++-- src/actions/transformMatch.js | 10 ++++----- .../AccountWidget/AccountWidget.jsx | 2 +- src/components/Announce/Announce.jsx | 4 ++-- src/components/App/App.jsx | 2 +- src/components/Container/index.jsx | 2 +- src/components/Distributions/index.jsx | 10 ++++----- .../Explorer/ExplorerOutputSection.jsx | 4 ++-- src/components/Explorer/index.jsx | 11 +++++----- src/components/Header/BurgerMenu/index.jsx | 2 +- src/components/Header/Header.jsx | 2 +- src/components/Heatmap/Heatmap.jsx | 2 +- src/components/Hero/BenchmarkTable.jsx | 2 +- src/components/Hero/Durations.jsx | 2 +- src/components/Hero/Matchups.jsx | 6 ++--- src/components/Hero/Players.jsx | 6 ++--- src/components/Hero/RankingTable.jsx | 4 ++-- src/components/Hero/Recent.jsx | 6 ++--- src/components/Hero/index.jsx | 6 ++--- src/components/Heroes/index.jsx | 6 ++--- src/components/Home/Why.jsx | 4 ++-- .../Match/BuildingMap/BuildingMap.jsx | 16 +++++++------- src/components/Match/CastTable.jsx | 4 ++-- src/components/Match/Chat/Chat.jsx | 6 ++--- src/components/Match/Draft/Draft.jsx | 8 +++---- src/components/Match/Laning/index.jsx | 10 ++++----- .../Match/MatchHeader/MatchHeader.jsx | 12 +++++----- src/components/Match/MatchLog.jsx | 10 ++++----- src/components/Match/MatchStory.jsx | 14 ++++++------ src/components/Match/Overview/Overview.jsx | 2 +- src/components/Match/Overview/Timeline.jsx | 14 ++++++------ src/components/Match/Purchases/index.jsx | 4 ++-- src/components/Match/TargetsBreakdown.jsx | 2 +- src/components/Match/TeamTable.jsx | 2 +- src/components/Match/TeamfightMap/index.jsx | 14 ++++++------ src/components/Match/Vision/LogHover.jsx | 4 ++-- src/components/Match/Vision/VisionFilter.jsx | 6 ++--- src/components/Match/Vision/VisionItems.jsx | 6 ++--- src/components/Match/Vision/VisionLog.jsx | 8 +++---- src/components/Match/Vision/VisionMap.jsx | 6 ++--- src/components/Match/matchColumns.jsx | 6 ++--- src/components/Match/matchPages.jsx | 2 +- src/components/Matches/index.jsx | 8 +++---- src/components/Meta/index.jsx | 8 +++---- src/components/Player/Header/PlayerBadges.jsx | 8 +++---- .../Player/Header/PlayerButtons.jsx | 6 ++--- src/components/Player/Header/PlayerHeader.jsx | 4 ++-- src/components/Player/Header/PlayerStats.jsx | 6 ++--- src/components/Player/Pages/Counts/Counts.jsx | 8 +++---- src/components/Player/Pages/Heroes/Heroes.jsx | 6 ++--- .../Pages/Heroes/playerHeroesColumns.jsx | 4 ++-- .../Player/Pages/Histograms/Histograms.jsx | 14 ++++++------ src/components/Player/Pages/Items/Items.jsx | 6 ++--- src/components/Player/Pages/MMR/MMR.jsx | 10 ++++----- .../Player/Pages/Matches/Matches.jsx | 8 +++---- .../Player/Pages/Overview/Overview.jsx | 22 +++++++++---------- src/components/Player/Pages/Peers/Peers.jsx | 8 +++---- .../Player/Pages/Peers/playerPeersColumns.jsx | 4 ++-- src/components/Player/Pages/Pros/Pros.jsx | 8 +++---- .../Player/Pages/Pros/playerProsColumns.jsx | 6 ++--- .../Player/Pages/Rankings/Rankings.jsx | 8 +++---- .../Player/Pages/Records/Records.jsx | 12 +++++----- src/components/Player/Pages/Totals/Totals.jsx | 6 ++--- src/components/Player/Pages/Trends/Trends.jsx | 14 ++++++------ .../Player/Pages/Wardmap/Wardmap.jsx | 8 +++---- .../Player/Pages/Wordcloud/Wordcloud.jsx | 8 +++---- src/components/Player/Player.jsx | 2 +- .../Player/TableFilterForm/index.jsx | 6 ++--- src/components/Records/index.jsx | 4 ++-- src/components/Request/Request.jsx | 2 +- src/components/Search/Search.jsx | 4 ++-- src/components/Search/SearchForm.jsx | 2 +- src/components/Status/Status.jsx | 4 ++-- src/components/Table/Table.jsx | 2 +- src/components/Teams/index.jsx | 4 ++-- .../Visualizations/Graph/MMRGraph.jsx | 2 +- .../Visualizations/Graph/MatchGraph.jsx | 6 ++--- .../Visualizations/Graph/StackedBarGraph.jsx | 6 ++--- .../Visualizations/Graph/Styled.jsx | 2 +- .../Visualizations/Graph/TrendGraph.jsx | 4 ++-- .../Visualizations/Table/HeroImage.jsx | 8 +++---- src/reducers/form.js | 2 +- src/reducers/request.js | 2 +- src/stories/Alerts.jsx | 6 ++--- src/stories/Attributes.jsx | 2 +- src/stories/BurgerMenu.jsx | 4 +--- src/stories/ButtonGarden.jsx | 4 +--- src/stories/ColorPalette.jsx | 3 +-- src/stories/Error.jsx | 5 ++--- src/stories/Spinner.jsx | 5 ++--- src/utility/index.jsx | 16 +++++++------- 93 files changed, 284 insertions(+), 294 deletions(-) diff --git a/src/actions/analyzeMatch.js b/src/actions/analyzeMatch.js index b2b07d45b9..c791b9391b 100644 --- a/src/actions/analyzeMatch.js +++ b/src/actions/analyzeMatch.js @@ -1,13 +1,13 @@ import items from 'dotaconstants/build/items.json'; import itemGroups from 'dotaconstants/build/item_groups.json'; import skillshots from 'dotaconstants/build/skillshots.json'; -import strings from 'lang'; +import strings from '../lang'; import { isSupport, getObsWardsPlaced, isRoshHero, isActiveItem, -} from 'utility'; +} from '../utility'; export default function analyzeMatch(match, _pm) { // define condition check for each advice point diff --git a/src/actions/index.js b/src/actions/index.js index cbdd8ae569..4c773b4435 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -1,11 +1,11 @@ -import transformMatch from '../../actions/transformMatch'; -import transformBenchmarks from '../../actions/transformBenchmarks'; -import transformCounts from '../../actions/transformCounts'; -import transformHistograms from '../../actions/transformHistograms'; -import transformTrends from '../../actions/transformTrends'; -import transformRankings from '../../actions/transformRankings'; -import action from '../../actions/action'; import querystring from 'querystring'; +import transformMatch from './transformMatch'; +import transformBenchmarks from './transformBenchmarks'; +import transformCounts from './transformCounts'; +import transformHistograms from './transformHistograms'; +import transformTrends from './transformTrends'; +import transformRankings from './transformRankings'; +import action from './action'; export const getMetadata = () => action('metadata', process.env.REACT_APP_API_HOST, 'api/metadata'); export const getMatch = matchId => action('match', process.env.REACT_APP_API_HOST, `api/matches/${matchId}`, {}, transformMatch); diff --git a/src/actions/transformCounts.js b/src/actions/transformCounts.js index 09267f63df..4b3b2b73df 100644 --- a/src/actions/transformCounts.js +++ b/src/actions/transformCounts.js @@ -1,7 +1,7 @@ import patch from 'dotaconstants/build/patch.json'; import region from 'dotaconstants/build/region.json'; -import { getPercentWin } from 'utility'; -import strings from 'lang'; +import { getPercentWin } from '../utility'; +import strings from '../lang'; const patchLookup = {}; patch.forEach((patchElement, index) => { diff --git a/src/actions/transformMatch.js b/src/actions/transformMatch.js index 9ae59b330b..3a9435ecf3 100644 --- a/src/actions/transformMatch.js +++ b/src/actions/transformMatch.js @@ -1,13 +1,13 @@ +import heroes from 'dotaconstants/build/heroes.json'; +import immutable from 'seamless-immutable'; +import _ from 'lodash/fp'; import { isRadiant, isSupport, getLevelFromXp, unpackPositionData, -} from 'utility'; -import heroes from 'dotaconstants/build/heroes.json'; -import immutable from 'seamless-immutable'; -import _ from 'lodash/fp'; -import strings from 'lang'; +} from '../utility'; +import strings from '../lang'; import analyzeMatch from './analyzeMatch'; const expanded = {}; diff --git a/src/components/AccountWidget/AccountWidget.jsx b/src/components/AccountWidget/AccountWidget.jsx index ae641226be..8a45b8b23d 100644 --- a/src/components/AccountWidget/AccountWidget.jsx +++ b/src/components/AccountWidget/AccountWidget.jsx @@ -3,8 +3,8 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; // import { getPlayer } from '../../actions'; import strings from 'lang'; -import { IconSteam } from '../Icons'; import styled from 'styled-components'; +import { IconSteam } from '../Icons'; import Spinner from '../Spinner'; import Error from '../Error'; import LoggedIn from './LoggedIn'; diff --git a/src/components/Announce/Announce.jsx b/src/components/Announce/Announce.jsx index 2e7216cff7..6a4e511e99 100644 --- a/src/components/Announce/Announce.jsx +++ b/src/components/Announce/Announce.jsx @@ -4,9 +4,9 @@ import PropTypes from 'prop-types'; import RaisedButton from 'material-ui/RaisedButton'; import strings from 'lang'; import { connect } from 'react-redux'; -import { getGithubPulls } from '../../actions'; -import ReactMarkdown from 'react-markdown'; import styled from 'styled-components'; +import ReactMarkdown from 'react-markdown'; +import { getGithubPulls } from '../../actions'; import constants from '../constants'; const StyledDiv = styled.div` diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index 9f5b38ea72..d9a53a10ba 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -7,6 +7,7 @@ import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'; import Helmet from 'react-helmet'; import strings from 'lang'; import { Route } from 'react-router-dom'; +import styled from 'styled-components'; import Player from '../Player'; import Home from '../Home'; import Search from '../Search'; @@ -22,7 +23,6 @@ import Teams from '../Teams'; import Records from '../Records'; // import Predictions from '../Predictions'; import Meta from '../Meta'; -import styled from 'styled-components'; import Header from '../Header'; import Footer from '../Footer'; import constants from '../constants'; diff --git a/src/components/Container/index.jsx b/src/components/Container/index.jsx index 5e0ca683bc..bd934cc023 100644 --- a/src/components/Container/index.jsx +++ b/src/components/Container/index.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; +import stylePropType from 'react-style-proptype'; import Heading from '../Heading'; import Spinner from '../Spinner'; import Error from '../Error'; -import stylePropType from 'react-style-proptype'; export const AsyncContainer = ({ loading, error, children }) => { if (error) { diff --git a/src/components/Distributions/index.jsx b/src/components/Distributions/index.jsx index c169f17b5c..21a90d7e2e 100644 --- a/src/components/Distributions/index.jsx +++ b/src/components/Distributions/index.jsx @@ -3,20 +3,20 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Helmet from 'react-helmet'; -import { getDistributions } from '../../actions'; -import strings from 'lang'; -import Table from '../Table'; +import styled from 'styled-components'; import { sum, abbreviateNumber, getOrdinal, rankTierToString, -} from 'utility'; +} from '../../utility'; +import { getDistributions } from '../../actions'; +import strings from '../../lang'; +import Table from '../Table'; // import Warning from '../Alerts'; import TabBar from '../TabBar'; import Spinner from '../Spinner'; import Heading from '../Heading'; -import styled from 'styled-components'; import { DistributionGraph } from '../Visualizations'; import constants from '../constants'; diff --git a/src/components/Explorer/ExplorerOutputSection.jsx b/src/components/Explorer/ExplorerOutputSection.jsx index 364fc07d67..65d4c67c9e 100644 --- a/src/components/Explorer/ExplorerOutputSection.jsx +++ b/src/components/Explorer/ExplorerOutputSection.jsx @@ -7,9 +7,9 @@ import { from 'utility'; import { Link } from 'react-router-dom'; -import strings from 'lang'; -import Table from '../Table'; import itemData from 'dotaconstants/build/items.json'; +import strings from '../../lang'; +import Table from '../Table'; import { IconRadiant, IconDire } from '../Icons'; // import heroes from 'dotaconstants/build/heroes.json'; import { diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index c2439f3eaa..0d0e2d22f8 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -4,12 +4,13 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import fetch from 'isomorphic-fetch'; -import Spinner from '../Spinner'; import RaisedButton from 'material-ui/RaisedButton'; -import strings from 'lang'; import Helmet from 'react-helmet'; -import { getScript } - from 'utility'; +import querystring from 'querystring'; +import json2csv from 'json2csv'; +import Spinner from '../Spinner'; +import strings from '../../lang'; +import { getScript } from '../../utility'; import Heading from '../Heading'; import { getProPlayers, @@ -17,8 +18,6 @@ import { getTeams, } from '../../actions'; -import querystring from 'querystring'; -import json2csv from 'json2csv'; import queryTemplate from './queryTemplate'; import ExplorerOutputButton from './ExplorerOutputButton'; import ExplorerOutputSection from './ExplorerOutputSection'; diff --git a/src/components/Header/BurgerMenu/index.jsx b/src/components/Header/BurgerMenu/index.jsx index 01369bd9fc..695e78ac07 100644 --- a/src/components/Header/BurgerMenu/index.jsx +++ b/src/components/Header/BurgerMenu/index.jsx @@ -6,7 +6,7 @@ import MenuItem from 'material-ui/MenuItem'; import IconButton from 'material-ui/IconButton'; import MenuIcon from 'material-ui/svg-icons/navigation/menu'; import styled from 'styled-components'; -import constants from '../constants'; +import constants from '../../constants'; const StyledDrawer = styled(Drawer)` background-color: ${constants.defaultPrimaryColor} !important; diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index 953dc69106..a692ec9bc5 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -9,10 +9,10 @@ import ActionSettings from 'material-ui/svg-icons/action/settings'; import Bug from 'material-ui/svg-icons/action/bug-report'; import LogOutButton from 'material-ui/svg-icons/action/power-settings-new'; import strings from 'lang'; +import styled from 'styled-components'; import { LocalizationMenu } from '../Localization'; import Dropdown from '../Header/Dropdown'; import Announce from '../Announce'; -import styled from 'styled-components'; import constants from '../constants'; import AccountWidget from '../AccountWidget'; import SearchForm from '../Search/SearchForm'; diff --git a/src/components/Heatmap/Heatmap.jsx b/src/components/Heatmap/Heatmap.jsx index 27215426da..7a215e9909 100644 --- a/src/components/Heatmap/Heatmap.jsx +++ b/src/components/Heatmap/Heatmap.jsx @@ -1,8 +1,8 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; -import DotaMap from '../DotaMap'; import uuid from 'uuid'; import h337 from 'heatmap.js'; +import DotaMap from '../DotaMap'; /** * Adjust each x/y coordinate by the provided scale factor. diff --git a/src/components/Hero/BenchmarkTable.jsx b/src/components/Hero/BenchmarkTable.jsx index 0e56b61fbb..7f10c0958b 100644 --- a/src/components/Hero/BenchmarkTable.jsx +++ b/src/components/Hero/BenchmarkTable.jsx @@ -1,7 +1,7 @@ import React from 'react'; import { oneOfType, shape, arrayOf } from 'prop-types'; import Table from '../Table'; -import strings from 'lang'; +import strings from '../../lang'; const columns = data => Object.keys(data[0] || {}).map(stat => ({ displayName: strings[`th_${stat}`], diff --git a/src/components/Hero/Durations.jsx b/src/components/Hero/Durations.jsx index c4fcd33994..40bb25e1bf 100644 --- a/src/components/Hero/Durations.jsx +++ b/src/components/Hero/Durations.jsx @@ -4,7 +4,7 @@ import { connect } from 'react-redux'; import { getHeroDurations } from '../../actions'; import Spinner from '../Spinner'; import { HistogramGraph } from '../Visualizations'; -import strings from 'lang'; +import strings from '../../lang'; class Durations extends React.Component { static propTypes = { diff --git a/src/components/Hero/Matchups.jsx b/src/components/Hero/Matchups.jsx index fcbf2c65b9..07fa67d230 100644 --- a/src/components/Hero/Matchups.jsx +++ b/src/components/Hero/Matchups.jsx @@ -1,12 +1,12 @@ import React from 'react'; import { shape, string, bool, number, func, arrayOf } from 'prop-types'; import { connect } from 'react-redux'; -import { getHeroMatchups } from '../../actions'; import styled from 'styled-components'; +import { getHeroMatchups } from '../../actions'; import Spinner from '../Spinner'; import Table, { TableLink } from '../Table'; -import strings from 'lang'; -import { wilsonScore } from 'utility'; +import strings from '../../lang'; +import { wilsonScore } from '../../utility'; const { REACT_APP_API_HOST } = process.env; diff --git a/src/components/Hero/Players.jsx b/src/components/Hero/Players.jsx index eabdcecbc1..c88b935017 100644 --- a/src/components/Hero/Players.jsx +++ b/src/components/Hero/Players.jsx @@ -4,9 +4,9 @@ import { connect } from 'react-redux'; import { getHeroPlayers } from '../../actions'; import Spinner from '../Spinner'; import Table, { TableLink } from '../Table'; -import strings from 'lang'; -import { wilsonScore } from 'utility'; -import { proPlayersSelector } from 'reducers/selectors'; +import strings from '../../lang'; +import { wilsonScore } from '../../utility'; +import { proPlayersSelector } from '../../reducers/selectors'; const playersColumns = [ { diff --git a/src/components/Hero/RankingTable.jsx b/src/components/Hero/RankingTable.jsx index 5f9e0d9b06..b38949c0ed 100644 --- a/src/components/Hero/RankingTable.jsx +++ b/src/components/Hero/RankingTable.jsx @@ -1,8 +1,8 @@ import React from 'react'; import { shape, oneOfType, arrayOf } from 'prop-types'; import Table from '../Table'; -import strings from 'lang'; -import { transformations, getOrdinal, rankTierToString } from 'utility'; +import strings from '../../lang'; +import { transformations, getOrdinal, rankTierToString } from '../../utility'; const rankingColumns = [{ displayName: strings.th_rank, diff --git a/src/components/Hero/Recent.jsx b/src/components/Hero/Recent.jsx index 3d5e54ab88..c5c38594e6 100644 --- a/src/components/Hero/Recent.jsx +++ b/src/components/Hero/Recent.jsx @@ -6,9 +6,9 @@ import Table, { TableLink } from '../Table'; import ErrorBox from '../Error/ErrorBox'; import Spinner from '../Spinner'; import { getHeroRecentGames } from '../../actions'; -import strings from 'lang'; -import { transformations } from 'utility'; -import { proPlayersSelector } from 'reducers/selectors'; +import strings from '../../lang'; +import { transformations } from '../../utility'; +import { proPlayersSelector } from '../../reducers/selectors'; import constants from '../constants'; const LeagueName = styled.span` diff --git a/src/components/Hero/index.jsx b/src/components/Hero/index.jsx index 908090f34b..5540daae35 100644 --- a/src/components/Hero/index.jsx +++ b/src/components/Hero/index.jsx @@ -2,14 +2,14 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Helmet from 'react-helmet'; -import strings from 'lang'; +import styled from 'styled-components'; +import { heroSelector } from '../../reducers/selectors'; +import strings from '../../lang'; import Heading from '../Heading'; import TabBar from '../TabBar'; import Spinner from '../Spinner'; import ErrorBox from '../Error/ErrorBox'; import constants from '../constants'; -import styled from 'styled-components'; -import { heroSelector } from 'reducers/selectors'; import Ranking from './Ranking'; import Benchmark from './Benchmark'; import Recent from './Recent'; diff --git a/src/components/Heroes/index.jsx b/src/components/Heroes/index.jsx index 82ae60a16d..d068fa9472 100644 --- a/src/components/Heroes/index.jsx +++ b/src/components/Heroes/index.jsx @@ -2,17 +2,17 @@ import React from 'react'; import PropTypes from 'prop-types'; import Helmet from 'react-helmet'; import { connect } from 'react-redux'; -import strings from 'lang'; +import heroes from 'dotaconstants/build/heroes.json'; +import strings from '../../lang'; import { getHeroStats, getProPlayers } from '../../actions'; import Heading from '../Heading'; import Table from '../Table'; import TabBar from '../TabBar'; import Hero from '../Hero'; -import heroes from 'dotaconstants/build/heroes.json'; import { sum, abbreviateNumber, -} from 'utility'; +} from '../../utility'; import columns from './columns'; class RequestLayer extends React.Component { diff --git a/src/components/Home/Why.jsx b/src/components/Home/Why.jsx index 68fbd6b8c2..7f8b9989a8 100644 --- a/src/components/Home/Why.jsx +++ b/src/components/Home/Why.jsx @@ -1,7 +1,7 @@ import React from 'react'; -import strings from 'lang'; -import { IconOpenSource, IconStatsBars, IconWand } from '../Icons'; import styled from 'styled-components'; +import strings from '../../lang'; +import { IconOpenSource, IconStatsBars, IconWand } from '../Icons'; import constants from '../constants'; const StyledDiv = styled.div` diff --git a/src/components/Match/BuildingMap/BuildingMap.jsx b/src/components/Match/BuildingMap/BuildingMap.jsx index ec9067081b..81fd8cb765 100644 --- a/src/components/Match/BuildingMap/BuildingMap.jsx +++ b/src/components/Match/BuildingMap/BuildingMap.jsx @@ -1,18 +1,18 @@ import React from 'react'; import PropTypes from 'prop-types'; +import playerColors from 'dotaconstants/build/player_colors.json'; +import heroes from 'dotaconstants/build/heroes.json'; +import ReactTooltip from 'react-tooltip'; +import styled from 'styled-components'; import { pad, sum, isRadiant, -} from 'utility'; -import playerColors from 'dotaconstants/build/player_colors.json'; -import heroes from 'dotaconstants/build/heroes.json'; -import Heading from '../Heading'; -import DotaMap from '../DotaMap'; -import strings from 'lang'; -import ReactTooltip from 'react-tooltip'; +} from '../../../utility'; +import Heading from '../../Heading'; +import DotaMap from '../../DotaMap'; +import strings from '../../../lang'; // import { IconLightbulb } from '../Icons'; -import styled from 'styled-components'; import buildingData from './buildingData'; import constants from '../../constants'; diff --git a/src/components/Match/CastTable.jsx b/src/components/Match/CastTable.jsx index 739acefe74..ce8c2ed5e1 100644 --- a/src/components/Match/CastTable.jsx +++ b/src/components/Match/CastTable.jsx @@ -4,9 +4,9 @@ import { Tabs, Tab, } from 'material-ui/Tabs'; -import { inflictorWithValue } from '../Visualizations'; import heroes from 'dotaconstants/build/heroes.json'; -import strings from 'lang'; +import { inflictorWithValue } from '../Visualizations'; +import strings from '../../lang'; import Table from '../Table/Table'; const castsColumns = [{ diff --git a/src/components/Match/Chat/Chat.jsx b/src/components/Match/Chat/Chat.jsx index 8dc581735e..1c1639aa2e 100644 --- a/src/components/Match/Chat/Chat.jsx +++ b/src/components/Match/Chat/Chat.jsx @@ -1,9 +1,6 @@ import React, { createElement } from 'react'; import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; -import { isRadiant, formatSeconds } from 'utility'; -import strings from 'lang'; -import { IconRadiant, IconDire } from '../Icons'; import AvVolumeUp from 'material-ui/svg-icons/av/volume-up'; import Checkbox from 'material-ui/Checkbox'; import Visibility from 'material-ui/svg-icons/action/visibility'; @@ -12,6 +9,9 @@ import heroes from 'dotaconstants/build/heroes.json'; import playerColors from 'dotaconstants/build/player_colors.json'; import emotes from 'dota2-emoticons/resources/json/charname.json'; import styled from 'styled-components'; +import { isRadiant, formatSeconds } from '../../../utility'; +import strings from '../../../lang'; +import { IconRadiant, IconDire } from '../../Icons'; import constants from '../../constants'; const StyledDiv = styled.div` diff --git a/src/components/Match/Draft/Draft.jsx b/src/components/Match/Draft/Draft.jsx index b397ac12e3..f0a3aa8a63 100644 --- a/src/components/Match/Draft/Draft.jsx +++ b/src/components/Match/Draft/Draft.jsx @@ -1,13 +1,13 @@ -import Heading from '../Heading'; -import { IconRadiant, IconDire } from '../Icons'; +import React from 'react'; import heroes from 'dotaconstants/build/heroes.json'; import Next from 'material-ui/svg-icons/hardware/keyboard-arrow-right'; import Prev from 'material-ui/svg-icons/hardware/keyboard-arrow-left'; import { TableBody, TableRow, TableRowColumn, Table } from 'material-ui/Table'; import PropTypes from 'prop-types'; -import React from 'react'; import styled from 'styled-components'; -import { getTeamName } from 'utility'; +import Heading from '../../Heading'; +import { IconRadiant, IconDire } from '../../Icons'; +import { getTeamName } from '../../../utility'; import constants from '../../constants'; const Styled = styled.div` diff --git a/src/components/Match/Laning/index.jsx b/src/components/Match/Laning/index.jsx index 12653d0b4a..9a49ff0023 100644 --- a/src/components/Match/Laning/index.jsx +++ b/src/components/Match/Laning/index.jsx @@ -1,11 +1,11 @@ import React from 'react'; import PropTypes from 'prop-types'; import strings from 'lang'; -import Heading from '../Heading'; -import Heatmap from '../Heatmap'; -import Table from '../Table'; -import { unpackPositionData } from 'utility'; -import { laningColumns } from '../Match/matchColumns'; +import Heading from '../../Heading'; +import Heatmap from '../../Heatmap'; +import Table from '../../Table'; +import { unpackPositionData } from '../../../utility'; +import { laningColumns } from '../matchColumns'; import { StyledFlexContainer, StyledFlexElement } from '../StyledMatch'; class Laning extends React.Component { diff --git a/src/components/Match/MatchHeader/MatchHeader.jsx b/src/components/Match/MatchHeader/MatchHeader.jsx index bdf6b2d448..69efd60465 100644 --- a/src/components/Match/MatchHeader/MatchHeader.jsx +++ b/src/components/Match/MatchHeader/MatchHeader.jsx @@ -1,16 +1,16 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { transformations, isRadiant, sum } from 'utility'; -import strings from 'lang'; -import Spinner from '../Spinner'; -import { IconRadiant, IconDire } from '../Icons'; import { Link } from 'react-router-dom'; import FlatButton from 'material-ui/FlatButton'; +import styled from 'styled-components'; import NavigationRefresh from 'material-ui/svg-icons/navigation/refresh'; import ActionFingerprint from 'material-ui/svg-icons/action/fingerprint'; import FileFileDownload from 'material-ui/svg-icons/file/file-download'; -import Warning from '../Alerts'; -import styled from 'styled-components'; +import { transformations, isRadiant, sum } from '../../../utility'; +import strings from '../../../lang'; +import Spinner from '../../Spinner'; +import { IconRadiant, IconDire } from '../../Icons'; +import Warning from '../../Alerts'; import constants from '../../constants'; const Styled = styled.header` diff --git a/src/components/Match/MatchLog.jsx b/src/components/Match/MatchLog.jsx index 7cec78881c..45b9b03294 100644 --- a/src/components/Match/MatchLog.jsx +++ b/src/components/Match/MatchLog.jsx @@ -1,16 +1,16 @@ import React from 'react'; import PropTypes from 'prop-types'; -import strings from 'lang'; +import styled from 'styled-components'; +import ReactTooltip from 'react-tooltip'; +import heroes from 'dotaconstants/build/heroes.json'; +import strings from '../../lang'; import { formatSeconds, getHeroesById, translateBuildings, formatTemplate, -} from 'utility'; -import styled from 'styled-components'; -import ReactTooltip from 'react-tooltip'; +} from '../../utility'; import Table from '../Table'; -import heroes from 'dotaconstants/build/heroes.json'; import FormField from '../Form/FormField'; import { IconRadiant, IconDire } from '../Icons'; import { heroTdColumn } from './matchColumns'; diff --git a/src/components/Match/MatchStory.jsx b/src/components/Match/MatchStory.jsx index 478d16e563..bc543deaf6 100644 --- a/src/components/Match/MatchStory.jsx +++ b/src/components/Match/MatchStory.jsx @@ -1,18 +1,18 @@ import React from 'react'; import PropTypes from 'prop-types'; -import strings from 'lang'; -import { - formatSeconds, - jsonFn, - formatTemplate, -} from 'utility'; import util from 'util'; -import { IconRadiant, IconDire } from '../Icons'; import heroes from 'dotaconstants/build/heroes.json'; import items from 'dotaconstants/build/items.json'; import itemColors from 'dotaconstants/build/item_colors.json'; import emotes from 'dota2-emoticons/resources/json/charname.json'; import ReactTooltip from 'react-tooltip'; +import { IconRadiant, IconDire } from '../Icons'; +import strings from '../../lang'; +import { + formatSeconds, + jsonFn, + formatTemplate, +} from '../../utility'; import { StyledEmote, StyledStoryNetWorthBar, StyledStoryNetWorthText, StyledStorySpan, StyledStoryWrapper } from './StyledMatch'; import constants from '../constants'; diff --git a/src/components/Match/Overview/Overview.jsx b/src/components/Match/Overview/Overview.jsx index d0201d2928..852ce11da2 100644 --- a/src/components/Match/Overview/Overview.jsx +++ b/src/components/Match/Overview/Overview.jsx @@ -1,7 +1,7 @@ import React from 'react'; import strings from 'lang'; import styled from 'styled-components'; -import MatchGraph from '../Visualizations/Graph/MatchGraph'; +import MatchGraph from '../../Visualizations/Graph/MatchGraph'; import TeamTable from '../TeamTable'; import AbilityBuildTable from '../AbilityBuildTable'; import AbilityDraftTable from '../AbilityDraftTable'; diff --git a/src/components/Match/Overview/Timeline.jsx b/src/components/Match/Overview/Timeline.jsx index c7dc7d4c34..88d7592ebf 100644 --- a/src/components/Match/Overview/Timeline.jsx +++ b/src/components/Match/Overview/Timeline.jsx @@ -1,21 +1,21 @@ import React from 'react'; import PropTypes from 'prop-types'; +import ReactTooltip from 'react-tooltip'; +import heroes from 'dotaconstants/build/heroes.json'; +import styled from 'styled-components'; import { formatSeconds, isRadiant, jsonFn, getTeamName, -} from 'utility'; +} from '../../../utility'; import { IconBloodDrop, IconRoshan, IconBattle, -} from '../Icons'; -import strings from 'lang'; -import ReactTooltip from 'react-tooltip'; -import heroes from 'dotaconstants/build/heroes.json'; -import PlayerThumb from '../Match/PlayerThumb'; -import styled from 'styled-components'; +} from '../../Icons'; +import strings from '../../../lang'; +import PlayerThumb from '../PlayerThumb'; import constants from '../../constants'; const Styled = styled.div` diff --git a/src/components/Match/Purchases/index.jsx b/src/components/Match/Purchases/index.jsx index 1e7fc5669f..12717cac04 100644 --- a/src/components/Match/Purchases/index.jsx +++ b/src/components/Match/Purchases/index.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import strings from 'lang'; -import TeamTable from '../Match/TeamTable'; import Toggle from 'material-ui/Toggle'; -import { purchaseTimesColumns } from '../Match/matchColumns'; +import TeamTable from '../TeamTable'; +import { purchaseTimesColumns } from '../matchColumns'; class Purchases extends React.Component { constructor(props) { diff --git a/src/components/Match/TargetsBreakdown.jsx b/src/components/Match/TargetsBreakdown.jsx index e5346fa37a..e690b550a3 100644 --- a/src/components/Match/TargetsBreakdown.jsx +++ b/src/components/Match/TargetsBreakdown.jsx @@ -4,7 +4,7 @@ import heroes from 'dotaconstants/build/heroes.json'; import ReactTooltip from 'react-tooltip'; import NavigationArrowForward from 'material-ui/svg-icons/navigation/arrow-forward'; import { inflictorWithValue } from '../Visualizations'; -import { sumValues, getHeroesById, abbreviateNumber } from 'utility'; +import { sumValues, getHeroesById, abbreviateNumber } from '../../utility'; import { StyledDmgTargetInflictor, StyledDmgTargetRow } from './StyledMatch'; import constants from '../constants'; diff --git a/src/components/Match/TeamTable.jsx b/src/components/Match/TeamTable.jsx index 256f46e112..0ed2925164 100644 --- a/src/components/Match/TeamTable.jsx +++ b/src/components/Match/TeamTable.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { isRadiant, getTeamName } from 'utility'; +import { connect } from 'react-redux'; import Heading from '../Heading'; import { IconRadiant, IconDire } from '../Icons'; -import { connect } from 'react-redux'; import Table from '../Table'; import PicksBans from './Overview/PicksBans'; // Displayed only on `Overview` page diff --git a/src/components/Match/TeamfightMap/index.jsx b/src/components/Match/TeamfightMap/index.jsx index 8753a8cf35..3a33c2f2e5 100644 --- a/src/components/Match/TeamfightMap/index.jsx +++ b/src/components/Match/TeamfightMap/index.jsx @@ -3,14 +3,14 @@ import PropTypes from 'prop-types'; import { formatSeconds, calculateDistance, calculateRelativeXY, bindWidth } from 'utility'; import ReactTooltip from 'react-tooltip'; import stylePropType from 'react-style-proptype'; -import { IconRadiant, IconDire, IconDot } from '../Icons'; -import TeamTable from '../Match/TeamTable'; -import { teamfightColumns } from '../Match/matchColumns'; -import PlayerThumb from '../Match/PlayerThumb'; -import strings from 'lang'; -import Timeline from '../Match/Overview/Timeline'; -import DotaMap from '../DotaMap'; import styled from 'styled-components'; +import { IconRadiant, IconDire, IconDot } from '../../Icons'; +import TeamTable from '../TeamTable'; +import { teamfightColumns } from '../matchColumns'; +import PlayerThumb from '../PlayerThumb'; +import strings from '../../../lang'; +import Timeline from '../Overview/Timeline'; +import DotaMap from '../../DotaMap'; import constants from '../../constants'; const Styled = styled.div` diff --git a/src/components/Match/Vision/LogHover.jsx b/src/components/Match/Vision/LogHover.jsx index 1aec4625c3..1eeeae7140 100644 --- a/src/components/Match/Vision/LogHover.jsx +++ b/src/components/Match/Vision/LogHover.jsx @@ -1,8 +1,8 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { gameCoordToUV } from 'utility'; -import DotaMap from '../DotaMap'; import styled from 'styled-components'; +import { gameCoordToUV } from '../../../utility'; +import DotaMap from '../../DotaMap'; import constants from '../../constants'; const Styled = styled.div` diff --git a/src/components/Match/Vision/VisionFilter.jsx b/src/components/Match/Vision/VisionFilter.jsx index 87777db0c8..2d3e5a088e 100644 --- a/src/components/Match/Vision/VisionFilter.jsx +++ b/src/components/Match/Vision/VisionFilter.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import Checkbox from 'material-ui/Checkbox'; -import Table from '../Table'; -import strings from 'lang'; -import Heading from '../Heading'; +import Table from '../../Table'; +import strings from '../../../lang'; +import Heading from '../../Heading'; import PlayerThumb from '../PlayerThumb'; diff --git a/src/components/Match/Vision/VisionItems.jsx b/src/components/Match/Vision/VisionItems.jsx index 79eab90d4c..a2136f46fd 100644 --- a/src/components/Match/Vision/VisionItems.jsx +++ b/src/components/Match/Vision/VisionItems.jsx @@ -1,8 +1,8 @@ import React from 'react'; import PropTypes from 'prop-types'; -import TeamTable from '../Match/TeamTable'; -import { visionColumns } from '../Match/matchColumns'; -import strings from 'lang'; +import TeamTable from '../TeamTable'; +import { visionColumns } from '../matchColumns'; +import strings from '../../../lang'; const VisionItems = ({ match }) => ( [{ displayName: strings.th_hero_id, diff --git a/src/components/Player/Pages/Histograms/Histograms.jsx b/src/components/Player/Pages/Histograms/Histograms.jsx index a0641c188b..0919deb410 100644 --- a/src/components/Player/Pages/Histograms/Histograms.jsx +++ b/src/components/Player/Pages/Histograms/Histograms.jsx @@ -2,13 +2,13 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; -import { getPlayerHistograms } from '../../actions'; -import Heading from '../Heading'; -import { HistogramGraph } from '../Visualizations'; -import ButtonGarden from '../ButtonGarden'; -import dataColumns from '../Player/Pages/matchDataColumns'; -import Container from '../Container'; -import strings from 'lang'; +import { getPlayerHistograms } from '../../../../actions'; +import Heading from '../../../Heading'; +import { HistogramGraph } from '../../../Visualizations'; +import ButtonGarden from '../../../ButtonGarden'; +import dataColumns from '../matchDataColumns'; +import Container from '../../../Container'; +import strings from '../../../../lang'; const getMedian = (columns, midpoint) => { let sum = 0; diff --git a/src/components/Player/Pages/Items/Items.jsx b/src/components/Player/Pages/Items/Items.jsx index d847c5e180..d45a078a4b 100644 --- a/src/components/Player/Pages/Items/Items.jsx +++ b/src/components/Player/Pages/Items/Items.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { getPlayerItems } from '../../actions'; -import Table from '../Table'; -import Container from '../Container'; +import { getPlayerItems } from '../../../../actions'; +import Table from '../../../Table'; +import Container from '../../../Container'; import playerItemsColumns from './playerItemsColumns'; const Items = ({ diff --git a/src/components/Player/Pages/MMR/MMR.jsx b/src/components/Player/Pages/MMR/MMR.jsx index 66293f82c3..f58a83727c 100644 --- a/src/components/Player/Pages/MMR/MMR.jsx +++ b/src/components/Player/Pages/MMR/MMR.jsx @@ -1,11 +1,11 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { MMRGraph } from '../Visualizations'; -import { getPlayerMmr } from '../../actions'; -import strings from 'lang'; -import Container from '../Container'; -import Info from '../Alerts/Info'; +import { MMRGraph } from '../../../Visualizations'; +import { getPlayerMmr } from '../../../../actions'; +import strings from '../../../../lang'; +import Container from '../../../Container'; +import Info from '../../../Alerts/Info'; const MMRInfo = ( diff --git a/src/components/Player/Pages/Matches/Matches.jsx b/src/components/Player/Pages/Matches/Matches.jsx index e2ccb5f93f..f7baa672de 100644 --- a/src/components/Player/Pages/Matches/Matches.jsx +++ b/src/components/Player/Pages/Matches/Matches.jsx @@ -1,10 +1,10 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { getPlayerMatches } from '../../actions'; -import Table from '../Table'; -import Container from '../Container'; -import strings from 'lang'; +import { getPlayerMatches } from '../../../../actions'; +import Table from '../../../Table'; +import Container from '../../../Container'; +import strings from '../../../../lang'; import playerMatchesColumns from './playerMatchesColumns'; const Matches = ({ diff --git a/src/components/Player/Pages/Overview/Overview.jsx b/src/components/Player/Pages/Overview/Overview.jsx index 81e77ae723..105897bbb9 100644 --- a/src/components/Player/Pages/Overview/Overview.jsx +++ b/src/components/Player/Pages/Overview/Overview.jsx @@ -2,23 +2,23 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import strings from 'lang'; -import { - getPlayerRecentMatches, - getPlayerHeroes, - getPlayerPeers, - getPvgnaHeroGuides, -} from '../../actions'; import Checkbox from 'material-ui/Checkbox'; import Turbo from 'material-ui/svg-icons/image/timelapse'; import TurboOff from 'material-ui/svg-icons/notification/do-not-disturb'; import ReactTooltip from 'react-tooltip'; -import Table from '../Table'; -import Container from '../Container'; -import playerMatchesColumns from '../Player/Pages/Matches/playerMatchesColumns'; -import { playerHeroesOverviewColumns } from '../Player/Pages/Heroes/playerHeroesColumns'; -import { playerPeersOverviewColumns } from '../Player/Pages/Peers/playerPeersColumns'; import util from 'util'; import styled from 'styled-components'; +import { + getPlayerRecentMatches, + getPlayerHeroes, + getPlayerPeers, + getPvgnaHeroGuides, +} from '../../../../actions'; +import Table from '../../../Table'; +import Container from '../../../Container'; +import playerMatchesColumns from '../Matches/playerMatchesColumns'; +import { playerHeroesOverviewColumns } from '../Heroes/playerHeroesColumns'; +import { playerPeersOverviewColumns } from '../Peers/playerPeersColumns'; import SummOfRecMatches from './Summary'; import constants from '../../../constants'; diff --git a/src/components/Player/Pages/Peers/Peers.jsx b/src/components/Player/Pages/Peers/Peers.jsx index 5618cc077b..b013bbd54c 100644 --- a/src/components/Player/Pages/Peers/Peers.jsx +++ b/src/components/Player/Pages/Peers/Peers.jsx @@ -1,10 +1,10 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { getPlayerPeers } from '../../actions'; -import Table from '../Table'; -import Container from '../Container'; -import strings from 'lang'; +import { getPlayerPeers } from '../../../../actions'; +import Table from '../../../Table'; +import Container from '../../../Container'; +import strings from '../../../../lang'; import { playerPeersColumns } from './playerPeersColumns'; const Peers = ({ diff --git a/src/components/Player/Pages/Peers/playerPeersColumns.jsx b/src/components/Player/Pages/Peers/playerPeersColumns.jsx index 938524c20d..ea52780adc 100644 --- a/src/components/Player/Pages/Peers/playerPeersColumns.jsx +++ b/src/components/Player/Pages/Peers/playerPeersColumns.jsx @@ -1,7 +1,7 @@ import React from 'react'; -import { TableLink } from '../Table'; import { transformations } from 'utility'; -import strings from 'lang'; +import { TableLink } from '../../../Table'; +import strings from '../../../../lang'; const avatarMatches = playerId => [{ displayName: strings.th_avatar, diff --git a/src/components/Player/Pages/Pros/Pros.jsx b/src/components/Player/Pages/Pros/Pros.jsx index 5acfa5b581..88665949e2 100644 --- a/src/components/Player/Pages/Pros/Pros.jsx +++ b/src/components/Player/Pages/Pros/Pros.jsx @@ -1,10 +1,10 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { getPlayerPros } from '../../actions'; -import Table from '../Table'; -import Container from '../Container'; -import strings from 'lang'; +import { getPlayerPros } from '../../../../actions'; +import Table from '../../../Table'; +import Container from '../../../Container'; +import strings from '../../../../lang'; import playerProsColumns from './playerProsColumns'; const Pros = ({ diff --git a/src/components/Player/Pages/Pros/playerProsColumns.jsx b/src/components/Player/Pages/Pros/playerProsColumns.jsx index 2ddd7f3ac2..0b92042aef 100644 --- a/src/components/Player/Pages/Pros/playerProsColumns.jsx +++ b/src/components/Player/Pages/Pros/playerProsColumns.jsx @@ -1,7 +1,7 @@ import React from 'react'; -import { TableLink } from '../Table'; -import { transformations } from 'utility'; -import strings from 'lang'; +import { transformations } from '../../../../utility'; +import { TableLink } from '../../../Table'; +import strings from '../../../../lang'; export default playerId => [{ displayName: strings.th_avatar, diff --git a/src/components/Player/Pages/Rankings/Rankings.jsx b/src/components/Player/Pages/Rankings/Rankings.jsx index 1d608f7135..effb627b51 100644 --- a/src/components/Player/Pages/Rankings/Rankings.jsx +++ b/src/components/Player/Pages/Rankings/Rankings.jsx @@ -1,10 +1,10 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { getPlayerRankings } from '../../actions'; -import Table from '../Table'; -import Container from '../Container'; -import strings from 'lang'; +import { getPlayerRankings } from '../../../../actions'; +import Table from '../../../Table'; +import Container from '../../../Container'; +import strings from '../../../../lang'; import playerRankingsColumns from './playerRankingsColumns'; const Rankings = ({ data, error, loading }) => ( diff --git a/src/components/Player/Pages/Records/Records.jsx b/src/components/Player/Pages/Records/Records.jsx index 9843d66c45..9a08b850cb 100644 --- a/src/components/Player/Pages/Records/Records.jsx +++ b/src/components/Player/Pages/Records/Records.jsx @@ -2,12 +2,12 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; -import { getPlayerRecords } from '../../actions'; -import Table from '../Table'; -import Container from '../Container'; -import strings from 'lang'; -import dataColumns from '../Player/Pages/matchDataColumns'; -import ButtonGarden from '../ButtonGarden'; +import { getPlayerRecords } from '../../../../actions'; +import Table from '../../../Table'; +import Container from '../../../Container'; +import strings from '../../../../lang'; +import dataColumns from '../matchDataColumns'; +import ButtonGarden from '../../../ButtonGarden'; import playerRecordsColumns from './playerRecordsColumns'; const excludedColumns = ['win_rate', 'level']; diff --git a/src/components/Player/Pages/Totals/Totals.jsx b/src/components/Player/Pages/Totals/Totals.jsx index 9ecee89d5c..e1dff3a31c 100644 --- a/src/components/Player/Pages/Totals/Totals.jsx +++ b/src/components/Player/Pages/Totals/Totals.jsx @@ -1,11 +1,11 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { getPlayerTotals } from '../../actions'; -import Container from '../Container'; -import strings from 'lang'; import { CardTitle } from 'material-ui/Card'; // import util from 'util'; +import { getPlayerTotals } from '../../../../actions'; +import Container from '../../../Container'; +import strings from '../../../../lang'; const totalsToShow = { kills: 1, diff --git a/src/components/Player/Pages/Trends/Trends.jsx b/src/components/Player/Pages/Trends/Trends.jsx index 50c6f60fc4..35a758262b 100644 --- a/src/components/Player/Pages/Trends/Trends.jsx +++ b/src/components/Player/Pages/Trends/Trends.jsx @@ -2,13 +2,13 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; -import { TrendGraph } from '../Visualizations'; -import { getPlayerTrends } from '../../actions'; -import ButtonGarden from '../ButtonGarden'; -import trendNames from '../Player/Pages/matchDataColumns'; -import Heading from '../Heading'; -import Container from '../Container'; -import strings from 'lang'; +import { TrendGraph } from '../../../Visualizations'; +import { getPlayerTrends } from '../../../../actions'; +import ButtonGarden from '../../../ButtonGarden'; +import trendNames from '../matchDataColumns'; +import Heading from '../../../Heading'; +import Container from '../../../Container'; +import strings from '../../../../lang'; const Trend = ({ routeParams, columns, playerId, error, loading, history, diff --git a/src/components/Player/Pages/Wardmap/Wardmap.jsx b/src/components/Player/Pages/Wardmap/Wardmap.jsx index ec46350fcb..2e69142a2a 100644 --- a/src/components/Player/Pages/Wardmap/Wardmap.jsx +++ b/src/components/Player/Pages/Wardmap/Wardmap.jsx @@ -2,12 +2,12 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { calculateResponsiveState } from 'redux-responsive'; -import { getPlayerWardmap } from '../../actions'; -import Heatmap from '../Heatmap'; -import Container from '../Container'; -import strings from 'lang'; import { unpackPositionData } from 'utility'; import styled from 'styled-components'; +import { getPlayerWardmap } from '../../../../actions'; +import Heatmap from '../../../Heatmap'; +import Container from '../../../Container'; +import strings from '../../../../lang'; const MAX_WIDTH = 1200; diff --git a/src/components/Player/Pages/Wordcloud/Wordcloud.jsx b/src/components/Player/Pages/Wordcloud/Wordcloud.jsx index cbb41aae1d..e6d2d5bd54 100644 --- a/src/components/Player/Pages/Wordcloud/Wordcloud.jsx +++ b/src/components/Player/Pages/Wordcloud/Wordcloud.jsx @@ -1,10 +1,10 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { getPlayerWordcloud } from '../../actions'; -import Container from '../Container'; -import Wordcloud from '../Wordcloud'; -import strings from 'lang'; +import { getPlayerWordcloud } from '../../../../actions'; +import Container from '../../../Container'; +import Wordcloud from '../../../Wordcloud'; +import strings from '../../../../lang'; const getData = (props) => { props.getPlayerWordcloud(props.playerId, props.location.search); diff --git a/src/components/Player/Player.jsx b/src/components/Player/Player.jsx index 3ed27b9732..3ef714b52d 100644 --- a/src/components/Player/Player.jsx +++ b/src/components/Player/Player.jsx @@ -8,7 +8,7 @@ import { getPlayer, getPlayerWinLoss, } from '../../actions'; -import strings from 'lang'; +import strings from '../../lang'; import TabBar from '../TabBar'; import Spinner from '../Spinner'; import TableFilterForm from './TableFilterForm'; diff --git a/src/components/Player/TableFilterForm/index.jsx b/src/components/Player/TableFilterForm/index.jsx index 5cb9089327..592fed8f17 100644 --- a/src/components/Player/TableFilterForm/index.jsx +++ b/src/components/Player/TableFilterForm/index.jsx @@ -4,10 +4,10 @@ import fetch from 'isomorphic-fetch'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; import querystring from 'querystring'; -import strings from 'lang'; -import { toggleShowForm } from '../../actions/formActions'; -import FormField from '../Form/FormField'; import styled from 'styled-components'; +import { toggleShowForm } from '../../../actions/formActions'; +import FormField from '../../Form/FormField'; +import strings from '../../../lang'; import * as data from './TableFilter.config'; const Styled = styled.div` diff --git a/src/components/Records/index.jsx b/src/components/Records/index.jsx index 32508d2fef..e0704c24cd 100644 --- a/src/components/Records/index.jsx +++ b/src/components/Records/index.jsx @@ -2,11 +2,11 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Helmet from 'react-helmet'; +import { transformations, formatSeconds, getOrdinal } from 'utility'; import { getRecords } from '../../actions'; -import strings from 'lang'; +import strings from '../../lang'; import Table from '../Table'; import Heading from '../Heading'; -import { transformations, formatSeconds, getOrdinal } from 'utility'; // import { IconRadiant, IconDire, IconTrophy } from '../Icons'; import Container from '../Container'; import TabBar from '../TabBar'; diff --git a/src/components/Request/Request.jsx b/src/components/Request/Request.jsx index b319c398fd..b5c82a8ac4 100644 --- a/src/components/Request/Request.jsx +++ b/src/components/Request/Request.jsx @@ -5,8 +5,8 @@ import Helmet from 'react-helmet'; import CircularProgress from 'material-ui/CircularProgress'; import RaisedButton from 'material-ui/RaisedButton'; import TextField from 'material-ui/TextField'; +import strings from '../../lang'; import { postRequest } from '../../actions'; -import strings from 'lang'; class Request extends React.Component { constructor() { diff --git a/src/components/Search/Search.jsx b/src/components/Search/Search.jsx index c9440034a0..054af46baa 100644 --- a/src/components/Search/Search.jsx +++ b/src/components/Search/Search.jsx @@ -2,10 +2,10 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Helmet from 'react-helmet'; -import { getSearchResultAndPros } from '../../actions'; -import strings from 'lang'; import fuzzy from 'fuzzy'; import { withRouter } from 'react-router-dom'; +import strings from '../../lang'; +import { getSearchResultAndPros } from '../../actions'; import SearchResult from './SearchResult'; const extract = item => `${item.name}${item.team_name}`; diff --git a/src/components/Search/SearchForm.jsx b/src/components/Search/SearchForm.jsx index 6e52c5895e..61cbe63596 100644 --- a/src/components/Search/SearchForm.jsx +++ b/src/components/Search/SearchForm.jsx @@ -4,9 +4,9 @@ import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; import { debounce } from 'lodash/fp'; import TextField from 'material-ui/TextField'; -import { getSearchResultAndPros, setSearchQuery } from '../../actions'; import strings from 'lang'; import querystring from 'querystring'; +import { getSearchResultAndPros, setSearchQuery } from '../../actions'; import constants from '../constants'; class SearchForm extends React.Component { diff --git a/src/components/Status/Status.jsx b/src/components/Status/Status.jsx index ffa6f41f4b..3b7652717f 100644 --- a/src/components/Status/Status.jsx +++ b/src/components/Status/Status.jsx @@ -1,9 +1,9 @@ import React from 'react'; import fetch from 'isomorphic-fetch'; -import { fromNow, abbreviateNumber } from 'utility'; import Helmet from 'react-helmet'; +import { fromNow, abbreviateNumber } from '../../utility'; import Table from '../Table'; -import strings from 'lang'; +import strings from '../../lang'; function jsonResponse(response) { return response.json(); diff --git a/src/components/Table/Table.jsx b/src/components/Table/Table.jsx index 521cfa5ceb..1fbfa51c40 100644 --- a/src/components/Table/Table.jsx +++ b/src/components/Table/Table.jsx @@ -7,9 +7,9 @@ import { TableRow as MaterialTableRow, TableRowColumn as MaterialTableRowColumn, } from 'material-ui/Table'; +import { abbreviateNumber, SORT_ENUM, defaultSort } from 'utility'; import { TablePercent } from '../Visualizations'; import Pagination from '../Table/PaginatedTable/Pagination'; -import { abbreviateNumber, SORT_ENUM, defaultSort } from 'utility'; import TableHeader from './TableHeader'; import Spinner from '../Spinner'; import Error from '../Error'; diff --git a/src/components/Teams/index.jsx b/src/components/Teams/index.jsx index 929b30a29f..a9a99e7f42 100644 --- a/src/components/Teams/index.jsx +++ b/src/components/Teams/index.jsx @@ -3,12 +3,12 @@ import PropTypes from 'prop-types'; import Helmet from 'react-helmet'; import { connect } from 'react-redux'; import strings from 'lang'; +import styled from 'styled-components'; +import { getOrdinal, getTeamLogoUrl, fromNow, subTextStyle } from 'utility'; import { getTeams } from '../../actions'; import Heading from '../Heading'; import Team from '../Team'; import Table, { TableLink } from '../Table'; -import styled from 'styled-components'; -import { getOrdinal, getTeamLogoUrl, fromNow, subTextStyle } from 'utility'; import { Logo } from '../Team/TeamStyled'; const TeamImageContainer = styled.div` diff --git a/src/components/Visualizations/Graph/MMRGraph.jsx b/src/components/Visualizations/Graph/MMRGraph.jsx index 634100da72..cf0208241f 100644 --- a/src/components/Visualizations/Graph/MMRGraph.jsx +++ b/src/components/Visualizations/Graph/MMRGraph.jsx @@ -11,8 +11,8 @@ import { Legend, Label, ResponsiveContainer, Brush, } from 'recharts'; -import constants from '../constants'; import styled from 'styled-components'; +import constants from '../../constants'; const StyledGraphArea = styled.div` user-select: none; diff --git a/src/components/Visualizations/Graph/MatchGraph.jsx b/src/components/Visualizations/Graph/MatchGraph.jsx index ed8115380f..6b0a9e0d85 100644 --- a/src/components/Visualizations/Graph/MatchGraph.jsx +++ b/src/components/Visualizations/Graph/MatchGraph.jsx @@ -1,6 +1,5 @@ import React from 'react'; import PropTypes from 'prop-types'; -import Heading from '../Heading'; import { ReferenceArea, XAxis, @@ -13,10 +12,11 @@ import { Legend, ResponsiveContainer, } from 'recharts'; -import constants from '../constants'; -import strings from 'lang'; import heroes from 'dotaconstants/build/heroes.json'; import playerColors from 'dotaconstants/build/player_colors.json'; +import Heading from '../../Heading'; +import constants from '../../constants'; +import strings from '../../../lang'; import { StyledTooltip, StyledTooltipTeam, StyledRadiant, StyledDire, StyledHolder, GoldSpan, XpSpan, StyledTooltipGold } from './Styled'; const formatGraphTime = minutes => `${minutes}:00`; diff --git a/src/components/Visualizations/Graph/StackedBarGraph.jsx b/src/components/Visualizations/Graph/StackedBarGraph.jsx index 9a9adf552f..496f176f05 100644 --- a/src/components/Visualizations/Graph/StackedBarGraph.jsx +++ b/src/components/Visualizations/Graph/StackedBarGraph.jsx @@ -9,9 +9,9 @@ import { CartesianGrid, ResponsiveContainer, } from 'recharts'; -import Heading from '../Heading'; -import strings from 'lang'; -import constants from '../constants'; +import Heading from '../../Heading'; +import strings from '../../../lang'; +import constants from '../../constants'; import { StyledHolder } from './Styled'; const category10 = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf']; diff --git a/src/components/Visualizations/Graph/Styled.jsx b/src/components/Visualizations/Graph/Styled.jsx index 2fcc9d8caf..0f7de17c7d 100644 --- a/src/components/Visualizations/Graph/Styled.jsx +++ b/src/components/Visualizations/Graph/Styled.jsx @@ -1,5 +1,5 @@ import styled from 'styled-components'; -import constants from '../constants'; +import constants from '../../constants'; export const StyledTooltip = styled.div` position: relative; diff --git a/src/components/Visualizations/Graph/TrendGraph.jsx b/src/components/Visualizations/Graph/TrendGraph.jsx index 55e22cce0d..d2a2b7be98 100644 --- a/src/components/Visualizations/Graph/TrendGraph.jsx +++ b/src/components/Visualizations/Graph/TrendGraph.jsx @@ -11,11 +11,11 @@ import { Label, ResponsiveContainer, } from 'recharts'; -import strings from 'lang'; import heroes from 'dotaconstants/build/heroes.json'; import { formatSeconds, fromNow } from 'utility'; import styled from 'styled-components'; -import constants from '../constants'; +import strings from '../../../lang'; +import constants from '../../constants'; const TooltipStylesDiv = styled.div` .tooltipWrapper { diff --git a/src/components/Visualizations/Table/HeroImage.jsx b/src/components/Visualizations/Table/HeroImage.jsx index 034effc54a..99e5b3e9e6 100644 --- a/src/components/Visualizations/Table/HeroImage.jsx +++ b/src/components/Visualizations/Table/HeroImage.jsx @@ -2,15 +2,15 @@ import React from 'react'; import PropTypes from 'prop-types'; import ReactTooltip from 'react-tooltip'; import ActionDoneAll from 'material-ui/svg-icons/action/done-all'; -import strings from 'lang'; -import { TableLink } from '../Table'; import playerColors from 'dotaconstants/build/player_colors.json'; -import { IconDice, IconCrystalBall, IconCheckCircle } from '../Icons'; import SocialPerson from 'material-ui/svg-icons/social/person'; import NotificationSync from 'material-ui/svg-icons/notification/sync'; import styled from 'styled-components'; -import { subTextStyle } from 'utility'; +import { subTextStyle } from '../../../utility'; +import { TableLink } from '../../Table'; +import { IconDice, IconCrystalBall, IconCheckCircle } from '../../Icons'; import constants from '../../constants'; +import strings from '../../../lang'; const Styled = styled.div` .subTextContainer { diff --git a/src/reducers/form.js b/src/reducers/form.js index b1c10e2cd0..d77d36b81c 100644 --- a/src/reducers/form.js +++ b/src/reducers/form.js @@ -1,4 +1,4 @@ -import { formActions } from '../../actions'; +import { formActions } from '../actions'; const initialFormState = { show: false, diff --git a/src/reducers/request.js b/src/reducers/request.js index 9e150a7a9b..d760b816e6 100644 --- a/src/reducers/request.js +++ b/src/reducers/request.js @@ -1,4 +1,4 @@ -import { requestActions } from '../../actions'; +import { requestActions } from '../actions'; const initialState = { progress: 0, diff --git a/src/stories/Alerts.jsx b/src/stories/Alerts.jsx index e3dfddc629..367065ad6b 100644 --- a/src/stories/Alerts.jsx +++ b/src/stories/Alerts.jsx @@ -1,9 +1,7 @@ import React from 'react'; - import { storiesOf } from '@storybook/react'; - -import Warning from '../Alerts/Warning'; -import Info from '../Alerts/Info'; +import Warning from '../components/Alerts/Warning'; +import Info from '../components/Alerts/Info'; storiesOf('Alerts', module) .add('Warning with msg', () => ) diff --git a/src/stories/Attributes.jsx b/src/stories/Attributes.jsx index e6c2c36433..1e82f02457 100644 --- a/src/stories/Attributes.jsx +++ b/src/stories/Attributes.jsx @@ -1,6 +1,6 @@ import React from 'react'; import { storiesOf } from '@storybook/react'; -import AttributesBlock from '../Hero/AttributesBlock'; +import AttributesBlock from '../components/Hero/AttributesBlock'; const hero = { primary_attr: 'agi', diff --git a/src/stories/BurgerMenu.jsx b/src/stories/BurgerMenu.jsx index f6d7f53885..a70267eed8 100644 --- a/src/stories/BurgerMenu.jsx +++ b/src/stories/BurgerMenu.jsx @@ -1,9 +1,7 @@ import React from 'react'; - import { storiesOf } from '@storybook/react'; import { action } from '@storybook/addon-actions'; - -import BurgerMenu from '../Header/BurgerMenu'; +import BurgerMenu from '../components/Header/BurgerMenu'; storiesOf('Header', module).add('Burger menu', () => { const menuItems = [ diff --git a/src/stories/ButtonGarden.jsx b/src/stories/ButtonGarden.jsx index 4afbbf76ec..c7eb2fdcde 100644 --- a/src/stories/ButtonGarden.jsx +++ b/src/stories/ButtonGarden.jsx @@ -1,9 +1,7 @@ import React from 'react'; - import { storiesOf } from '@storybook/react'; import { action } from '@storybook/addon-actions'; - -import ButtonGarden from '../ButtonGarden'; +import ButtonGarden from '../components/ButtonGarden'; class ButtonGardenWrapper extends React.Component { constructor(props, context) { diff --git a/src/stories/ColorPalette.jsx b/src/stories/ColorPalette.jsx index 5df2281143..5223c3ae14 100644 --- a/src/stories/ColorPalette.jsx +++ b/src/stories/ColorPalette.jsx @@ -2,8 +2,7 @@ import React from 'react'; import { string } from 'prop-types'; import { storiesOf } from '@storybook/react'; import styled from 'styled-components'; - -import constants from '../constants'; +import constants from '../components/constants'; const StyledPanel = styled.div` background-color: ${props => props.color}; diff --git a/src/stories/Error.jsx b/src/stories/Error.jsx index 411a3f8e5e..e39368f594 100644 --- a/src/stories/Error.jsx +++ b/src/stories/Error.jsx @@ -1,8 +1,7 @@ import React from 'react'; import { storiesOf } from '@storybook/react'; - -import Error from '../Error'; -import ErrorBox from '../Error/ErrorBox'; +import Error from '../components/Error'; +import ErrorBox from '../components/Error/ErrorBox'; storiesOf('Error') .add('Default error component', () => ( diff --git a/src/stories/Spinner.jsx b/src/stories/Spinner.jsx index 3bc0dcf0f0..7ff07e26c7 100644 --- a/src/stories/Spinner.jsx +++ b/src/stories/Spinner.jsx @@ -1,8 +1,7 @@ import React from 'react'; import { storiesOf } from '@storybook/react'; - -import Spinner from '../Spinner'; -import constants from '../constants'; +import Spinner from '../components/Spinner'; +import constants from '../components/constants'; storiesOf('Spinner') .add('Size 20 color white', () => ) diff --git a/src/utility/index.jsx b/src/utility/index.jsx index 71df5d1f60..f7093cf91f 100644 --- a/src/utility/index.jsx +++ b/src/utility/index.jsx @@ -5,19 +5,19 @@ import items from 'dotaconstants/build/items.json'; import patch from 'dotaconstants/build/patch.json'; import itemIds from 'dotaconstants/build/item_ids.json'; import xpLevel from 'dotaconstants/build/xp_level.json'; -import { TableLink } from '../Table'; -import { - KDA, - TableHeroImage, - FromNowTooltip, -} from '../Visualizations'; -import strings from 'lang'; import _ from 'lodash/fp'; import util from 'util'; // import SvgIcon from 'material-ui/SvgIcon'; import SocialPeople from 'material-ui/svg-icons/social/people'; import SocialPerson from 'material-ui/svg-icons/social/person'; -import constants from '../constants'; +import strings from '../lang'; +import { TableLink } from '../components/Table'; +import { + KDA, + TableHeroImage, + FromNowTooltip, +} from '../components/Visualizations'; +import constants from '../components/constants'; export const iconStyle = { marginLeft: 5, From eabeaad1c83e0f70de34fe6060676b62d1485eaa Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Fri, 30 Mar 2018 14:03:50 +0000 Subject: [PATCH 0154/1495] fix more paths --- src/components/AccountWidget/AccountWidget.jsx | 4 ++-- src/components/AccountWidget/LoggedIn.jsx | 2 +- src/components/Announce/Announce.jsx | 2 +- src/components/App/App.jsx | 4 ++-- src/components/App/AppLogo.jsx | 2 +- src/components/App/AppLogo.spec.jsx | 2 +- src/components/ButtonGarden/index.jsx | 2 +- src/components/Explorer/ExplorerControlSection.jsx | 2 +- src/components/Explorer/ExplorerOutputSection.jsx | 7 +++---- src/components/Explorer/autocomplete.js | 2 +- src/components/Explorer/fields.js | 4 ++-- src/components/Explorer/redrawGraphs.js | 2 +- src/components/Footer/Cheese.jsx | 2 +- src/components/Footer/Footer.jsx | 2 +- src/components/Footer/PageLinks.jsx | 2 +- src/components/Footer/SocialLinks.jsx | 2 +- src/components/Form/FormField.jsx | 2 +- src/components/Form/ShowFormToggle.jsx | 2 +- src/components/FourOhFour/FourOhFour.jsx | 2 +- src/components/Header/Header.jsx | 2 +- src/components/Hero/AttributesBlock.jsx | 2 +- src/components/Heroes/columns.jsx | 6 +++--- src/components/Home/Buttons.jsx | 2 +- src/components/Home/Home.jsx | 2 +- src/components/Home/Sponsors.jsx | 2 +- src/components/Localization/index.jsx | 2 +- src/components/Match/AbilityBuildTable.jsx | 2 +- src/components/Match/AbilityDraftTable.jsx | 2 +- src/components/Match/CrossTable.jsx | 4 ++-- src/components/Match/Laning/index.jsx | 2 +- src/components/Match/Overview/Overview.jsx | 2 +- src/components/Match/Overview/PicksBans.jsx | 2 +- src/components/Match/PlayerThumb/index.jsx | 2 +- src/components/Match/Purchases/index.jsx | 2 +- src/components/Match/TeamTable.jsx | 2 +- src/components/Match/TeamfightMap/index.jsx | 2 +- src/components/Match/Vision/VisionMap.jsx | 6 +++--- src/components/Match/Vision/index.jsx | 4 ++-- src/components/Match/matchPages.jsx | 2 +- src/components/Meta/fields.js | 2 +- src/components/PercentContainer/PercentContainer.jsx | 4 ++-- src/components/Player/Header/PlayedWith.jsx | 2 +- src/components/Player/Header/PlayerHeader.jsx | 4 ++-- src/components/Player/Pages/Counts/playerCountsColumns.jsx | 4 ++-- src/components/Player/Pages/Heroes/Heroes.jsx | 2 +- src/components/Player/Pages/Heroes/playerHeroesColumns.jsx | 2 +- src/components/Player/Pages/Items/playerItemsColumns.jsx | 2 +- .../Player/Pages/Matches/playerMatchesColumns.jsx | 4 ++-- src/components/Player/Pages/Overview/Overview.jsx | 2 +- src/components/Player/Pages/Overview/Summary.jsx | 6 +++--- src/components/Player/Pages/Peers/playerPeersColumns.jsx | 2 +- .../Player/Pages/Rankings/playerRankingsColumns.jsx | 4 ++-- .../Player/Pages/Records/playerRecordsColumns.jsx | 4 ++-- src/components/Player/Pages/Wardmap/Wardmap.jsx | 2 +- .../Player/TableFilterForm/TableFilter.config.js | 2 +- src/components/Player/playerPages.jsx | 2 +- src/components/Records/index.jsx | 2 +- src/components/Search/SearchForm.jsx | 2 +- src/components/Search/SearchResult.jsx | 4 ++-- src/components/Table/PaginatedTable/Pagination.jsx | 2 +- src/components/Table/Table.jsx | 2 +- src/components/Team/Overview.jsx | 2 +- src/components/Team/TeamHeader.jsx | 4 ++-- src/components/Team/teamDataColumns.jsx | 4 ++-- src/components/Team/teamPages.jsx | 2 +- src/components/Teams/index.jsx | 4 ++-- src/components/Visualizations/FromNowTooltip.jsx | 2 +- src/components/Visualizations/Graph/DistributionGraph.jsx | 2 +- src/components/Visualizations/Graph/HistogramGraph.jsx | 4 ++-- src/components/Visualizations/Graph/MMRGraph.jsx | 2 +- src/components/Visualizations/Graph/TrendGraph.jsx | 2 +- src/components/Visualizations/Table/KDA.jsx | 2 +- src/components/Visualizations/inflictorWithValue.jsx | 2 +- src/reducers/index.js | 6 +++--- src/store/index.js | 2 +- 75 files changed, 101 insertions(+), 102 deletions(-) diff --git a/src/components/AccountWidget/AccountWidget.jsx b/src/components/AccountWidget/AccountWidget.jsx index 8a45b8b23d..25e532ac19 100644 --- a/src/components/AccountWidget/AccountWidget.jsx +++ b/src/components/AccountWidget/AccountWidget.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -// import { getPlayer } from '../../actions'; -import strings from 'lang'; import styled from 'styled-components'; +// import { getPlayer } from '../../actions'; +import strings from '../../lang'; import { IconSteam } from '../Icons'; import Spinner from '../Spinner'; import Error from '../Error'; diff --git a/src/components/AccountWidget/LoggedIn.jsx b/src/components/AccountWidget/LoggedIn.jsx index 752d11efab..66fa168465 100644 --- a/src/components/AccountWidget/LoggedIn.jsx +++ b/src/components/AccountWidget/LoggedIn.jsx @@ -2,9 +2,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { Link } from 'react-router-dom'; -import strings from 'lang'; import styled from 'styled-components'; import FlatButton from 'material-ui/FlatButton'; +import strings from '../../lang'; import Spinner from '../Spinner'; const StyledFlatButton = styled(FlatButton)` diff --git a/src/components/Announce/Announce.jsx b/src/components/Announce/Announce.jsx index 6a4e511e99..2efb49b01f 100644 --- a/src/components/Announce/Announce.jsx +++ b/src/components/Announce/Announce.jsx @@ -2,10 +2,10 @@ import React from 'react'; import PropTypes from 'prop-types'; import RaisedButton from 'material-ui/RaisedButton'; -import strings from 'lang'; import { connect } from 'react-redux'; import styled from 'styled-components'; import ReactMarkdown from 'react-markdown'; +import strings from '../../lang'; import { getGithubPulls } from '../../actions'; import constants from '../constants'; diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index d9a53a10ba..285e10ba54 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -5,9 +5,9 @@ import getMuiTheme from 'material-ui/styles/getMuiTheme'; import darkBaseTheme from 'material-ui/styles/baseThemes/darkBaseTheme'; import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'; import Helmet from 'react-helmet'; -import strings from 'lang'; -import { Route } from 'react-router-dom'; import styled from 'styled-components'; +import { Route } from 'react-router-dom'; +import strings from '../../lang'; import Player from '../Player'; import Home from '../Home'; import Search from '../Search'; diff --git a/src/components/App/AppLogo.jsx b/src/components/App/AppLogo.jsx index e0ceea40e4..94fb1c003f 100644 --- a/src/components/App/AppLogo.jsx +++ b/src/components/App/AppLogo.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; -import strings from 'lang'; import styled from 'styled-components'; import constants from '../constants'; +import strings from '../../lang'; const StyledLink = styled(Link)` font-weight: ${constants.fontWeightMedium}; diff --git a/src/components/App/AppLogo.spec.jsx b/src/components/App/AppLogo.spec.jsx index 17f3e1fa97..b4758a72a6 100644 --- a/src/components/App/AppLogo.spec.jsx +++ b/src/components/App/AppLogo.spec.jsx @@ -3,7 +3,7 @@ import React from 'react'; import { expect } from 'chai'; import { shallow } from 'enzyme'; import { Link } from 'react-router-dom'; -import strings from 'lang'; +import strings from '../../lang'; import AppLogo from './AppLogo'; diff --git a/src/components/ButtonGarden/index.jsx b/src/components/ButtonGarden/index.jsx index 0ddc4603fd..8d74383006 100644 --- a/src/components/ButtonGarden/index.jsx +++ b/src/components/ButtonGarden/index.jsx @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; // import FlatButton from 'material-ui/FlatButton'; import SelectField from 'material-ui/SelectField'; import MenuItem from 'material-ui/MenuItem'; -import strings from 'lang'; +import strings from '../../lang'; const ButtonGarden = ({ buttonNames, selectedButton, onClick }) => ( (['_2', '_3', '_4', '_5'].some(suffix => itemKey.indexOf(suffix) !== -1) ? itemKey[itemKey.length - 1] : ''); diff --git a/src/components/Explorer/redrawGraphs.js b/src/components/Explorer/redrawGraphs.js index fd90227987..9a2c0b22ac 100644 --- a/src/components/Explorer/redrawGraphs.js +++ b/src/components/Explorer/redrawGraphs.js @@ -1,4 +1,4 @@ -// import strings from 'lang'; +// import strings from '../../lang'; /* export default function redrawGraphs(rows, field, yAxis) { diff --git a/src/components/Footer/Cheese.jsx b/src/components/Footer/Cheese.jsx index 9c506b7cd8..61fd4059a4 100644 --- a/src/components/Footer/Cheese.jsx +++ b/src/components/Footer/Cheese.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import strings from 'lang'; +import strings from '../../lang'; import CheeseCircle from '../Cheese'; export default () => ( diff --git a/src/components/Footer/Footer.jsx b/src/components/Footer/Footer.jsx index 771c2b0960..a3a608f193 100644 --- a/src/components/Footer/Footer.jsx +++ b/src/components/Footer/Footer.jsx @@ -1,6 +1,6 @@ import React from 'react'; -import strings from 'lang'; import styled from 'styled-components'; +import strings from '../../lang'; import AppLogo from '../App/AppLogo'; import PageLinks from './PageLinks'; // import Cheese from './Cheese'; diff --git a/src/components/Footer/PageLinks.jsx b/src/components/Footer/PageLinks.jsx index 7441619f23..65d04f8d96 100644 --- a/src/components/Footer/PageLinks.jsx +++ b/src/components/Footer/PageLinks.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import strings from 'lang'; +import strings from '../../lang'; const links = [{ name: strings.app_about, diff --git a/src/components/Footer/SocialLinks.jsx b/src/components/Footer/SocialLinks.jsx index 3c640d43df..fdb15d8c6b 100644 --- a/src/components/Footer/SocialLinks.jsx +++ b/src/components/Footer/SocialLinks.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import strings from 'lang'; +import strings from '../../lang'; import { IconGithub, IconDiscord } from '../Icons'; const links = [{ diff --git a/src/components/Form/FormField.jsx b/src/components/Form/FormField.jsx index dd8d09e3a7..1033c270b4 100644 --- a/src/components/Form/FormField.jsx +++ b/src/components/Form/FormField.jsx @@ -1,8 +1,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import AutoComplete from 'material-ui/AutoComplete'; -import strings from 'lang'; import querystring from 'querystring'; +import strings from '../../lang'; import ChipList from './ChipList'; import constants from '../constants'; diff --git a/src/components/Form/ShowFormToggle.jsx b/src/components/Form/ShowFormToggle.jsx index ba8e813ea7..f0def9b22a 100644 --- a/src/components/Form/ShowFormToggle.jsx +++ b/src/components/Form/ShowFormToggle.jsx @@ -2,9 +2,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import Clear from 'material-ui/svg-icons/content/clear'; import Filter from 'material-ui/svg-icons/content/filter-list'; -import strings from 'lang'; import FlatButton from 'material-ui/FlatButton'; import styled from 'styled-components'; +import strings from '../../lang'; import constants from '../constants'; const StyledDiv = styled.div` diff --git a/src/components/FourOhFour/FourOhFour.jsx b/src/components/FourOhFour/FourOhFour.jsx index aeac72d66a..a9b7ceb183 100644 --- a/src/components/FourOhFour/FourOhFour.jsx +++ b/src/components/FourOhFour/FourOhFour.jsx @@ -1,6 +1,6 @@ import React from 'react'; import Helmet from 'react-helmet'; -import strings from 'lang'; +import strings from '../../lang'; // TODO migrate to styled-components (this component is not currently used) /* diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index a692ec9bc5..9f6602c63d 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -8,8 +8,8 @@ import IconButton from 'material-ui/IconButton'; import ActionSettings from 'material-ui/svg-icons/action/settings'; import Bug from 'material-ui/svg-icons/action/bug-report'; import LogOutButton from 'material-ui/svg-icons/action/power-settings-new'; -import strings from 'lang'; import styled from 'styled-components'; +import strings from '../../lang'; import { LocalizationMenu } from '../Localization'; import Dropdown from '../Header/Dropdown'; import Announce from '../Announce'; diff --git a/src/components/Hero/AttributesBlock.jsx b/src/components/Hero/AttributesBlock.jsx index a59b964f11..7657f59de3 100644 --- a/src/components/Hero/AttributesBlock.jsx +++ b/src/components/Hero/AttributesBlock.jsx @@ -1,7 +1,7 @@ import React from 'react'; import { shape, number, string, bool } from 'prop-types'; import styled from 'styled-components'; -import strings from 'lang'; +import strings from '../../lang'; import AttrStrength from '../Icons/AttrStrength'; import AttrAgility from '../Icons/AttrAgility'; import AttrIntelligent from '../Icons/AttrIntelligent'; diff --git a/src/components/Heroes/columns.jsx b/src/components/Heroes/columns.jsx index d4ec0fedad..f8df8d6102 100644 --- a/src/components/Heroes/columns.jsx +++ b/src/components/Heroes/columns.jsx @@ -1,10 +1,10 @@ // import React from 'react'; +import heroes from 'dotaconstants/build/heroes.json'; import { transformations, abbreviateNumber, -} from 'utility'; -import strings from 'lang'; -import heroes from 'dotaconstants/build/heroes.json'; +} from '../../utility'; +import strings from '../../lang'; // import TablePercent from '../Visualizations/Table/Percent'; const decimalToCount = (decimal, total) => ( diff --git a/src/components/Home/Buttons.jsx b/src/components/Home/Buttons.jsx index 7316568f79..7b269fd2d9 100644 --- a/src/components/Home/Buttons.jsx +++ b/src/components/Home/Buttons.jsx @@ -3,7 +3,7 @@ import { Link } from 'react-router-dom'; import PropTypes from 'prop-types'; import FlatButton from 'material-ui/FlatButton'; import { connect } from 'react-redux'; -import strings from 'lang'; +import strings from '../../lang'; import { IconSteam } from '../Icons'; import { ButtonsDiv } from './Styled'; diff --git a/src/components/Home/Home.jsx b/src/components/Home/Home.jsx index d722cb97df..f5524ee8f7 100644 --- a/src/components/Home/Home.jsx +++ b/src/components/Home/Home.jsx @@ -1,6 +1,6 @@ import React from 'react'; import { connect } from 'react-redux'; -import strings from 'lang'; +import strings from '../../lang'; import Buttons from './Buttons'; import Why from './Why'; import Sponsors from './Sponsors'; diff --git a/src/components/Home/Sponsors.jsx b/src/components/Home/Sponsors.jsx index 7a401852f0..750cad4858 100644 --- a/src/components/Home/Sponsors.jsx +++ b/src/components/Home/Sponsors.jsx @@ -1,7 +1,7 @@ import React from 'react'; import FlatButton from 'material-ui/FlatButton'; -import strings from 'lang'; import styled from 'styled-components'; +import strings from '../../lang'; import { ButtonsDiv } from './Styled'; const StyledDiv = styled.div` diff --git a/src/components/Localization/index.jsx b/src/components/Localization/index.jsx index 8bf2231644..b907d7fe5c 100644 --- a/src/components/Localization/index.jsx +++ b/src/components/Localization/index.jsx @@ -3,8 +3,8 @@ import { connect } from 'react-redux'; import SelectField from 'material-ui/SelectField'; import MenuItem from 'material-ui/MenuItem'; import Next from 'material-ui/svg-icons/hardware/keyboard-arrow-right'; -import strings, { langs } from 'lang'; import styled from 'styled-components'; +import strings, { langs } from '../../lang'; import constants from '../constants'; const ClickableDiv = styled.div` diff --git a/src/components/Match/AbilityBuildTable.jsx b/src/components/Match/AbilityBuildTable.jsx index c40b477468..ab73958efe 100644 --- a/src/components/Match/AbilityBuildTable.jsx +++ b/src/components/Match/AbilityBuildTable.jsx @@ -1,6 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { isRadiant, getTeamName } from 'utility'; +import { isRadiant, getTeamName } from '../../utility'; import { IconRadiant, IconDire } from '../Icons'; import Heading from '../Heading'; import Table from '../Table'; diff --git a/src/components/Match/AbilityDraftTable.jsx b/src/components/Match/AbilityDraftTable.jsx index e9bbfb064b..5a4f6b8279 100644 --- a/src/components/Match/AbilityDraftTable.jsx +++ b/src/components/Match/AbilityDraftTable.jsx @@ -1,6 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { isRadiant, getTeamName } from 'utility'; +import { isRadiant, getTeamName } from '../../utility'; import { IconRadiant, IconDire } from '../Icons'; import Heading from '../Heading'; import Table from '../Table'; diff --git a/src/components/Match/CrossTable.jsx b/src/components/Match/CrossTable.jsx index be2256798d..fc56d27d83 100644 --- a/src/components/Match/CrossTable.jsx +++ b/src/components/Match/CrossTable.jsx @@ -8,8 +8,8 @@ import { } from 'material-ui/Table'; import heroes from 'dotaconstants/build/heroes.json'; import ReactTooltip from 'react-tooltip'; -import { abbreviateNumber } from 'utility'; -import strings from 'lang'; +import { abbreviateNumber } from '../../utility'; +import strings from '../../lang'; import { IconRadiant, IconDire } from '../Icons'; import { heroTd } from './matchColumns'; import constants from '../constants'; diff --git a/src/components/Match/Laning/index.jsx b/src/components/Match/Laning/index.jsx index 9a49ff0023..fa75886c60 100644 --- a/src/components/Match/Laning/index.jsx +++ b/src/components/Match/Laning/index.jsx @@ -1,6 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; -import strings from 'lang'; +import strings from '../../../lang'; import Heading from '../../Heading'; import Heatmap from '../../Heatmap'; import Table from '../../Table'; diff --git a/src/components/Match/Overview/Overview.jsx b/src/components/Match/Overview/Overview.jsx index 852ce11da2..8c40062717 100644 --- a/src/components/Match/Overview/Overview.jsx +++ b/src/components/Match/Overview/Overview.jsx @@ -1,6 +1,6 @@ import React from 'react'; -import strings from 'lang'; import styled from 'styled-components'; +import strings from '../../../lang'; import MatchGraph from '../../Visualizations/Graph/MatchGraph'; import TeamTable from '../TeamTable'; import AbilityBuildTable from '../AbilityBuildTable'; diff --git a/src/components/Match/Overview/PicksBans.jsx b/src/components/Match/Overview/PicksBans.jsx index d34dce967b..462ad33152 100644 --- a/src/components/Match/Overview/PicksBans.jsx +++ b/src/components/Match/Overview/PicksBans.jsx @@ -1,8 +1,8 @@ import React from 'react'; import PropTypes from 'prop-types'; -import strings from 'lang'; import heroes from 'dotaconstants/build/heroes.json'; import styled from 'styled-components'; +import strings from '../../../lang'; import constants from '../../constants'; const Styled = styled.div` diff --git a/src/components/Match/PlayerThumb/index.jsx b/src/components/Match/PlayerThumb/index.jsx index 9082cf3f3d..62e1b98db6 100644 --- a/src/components/Match/PlayerThumb/index.jsx +++ b/src/components/Match/PlayerThumb/index.jsx @@ -2,8 +2,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import playerColors from 'dotaconstants/build/player_colors.json'; import heroes from 'dotaconstants/build/heroes.json'; -import strings from 'lang'; import styled from 'styled-components'; +import strings from '../../../lang'; import constants from '../../constants'; const StyledAside = styled.aside` diff --git a/src/components/Match/Purchases/index.jsx b/src/components/Match/Purchases/index.jsx index 12717cac04..d72ed3e350 100644 --- a/src/components/Match/Purchases/index.jsx +++ b/src/components/Match/Purchases/index.jsx @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import strings from 'lang'; import Toggle from 'material-ui/Toggle'; +import strings from '../../../lang'; import TeamTable from '../TeamTable'; import { purchaseTimesColumns } from '../matchColumns'; diff --git a/src/components/Match/TeamTable.jsx b/src/components/Match/TeamTable.jsx index 0ed2925164..60dc75cfcb 100644 --- a/src/components/Match/TeamTable.jsx +++ b/src/components/Match/TeamTable.jsx @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { isRadiant, getTeamName } from 'utility'; import { connect } from 'react-redux'; +import { isRadiant, getTeamName } from '../../utility'; import Heading from '../Heading'; import { IconRadiant, IconDire } from '../Icons'; import Table from '../Table'; diff --git a/src/components/Match/TeamfightMap/index.jsx b/src/components/Match/TeamfightMap/index.jsx index 3a33c2f2e5..2174b269ab 100644 --- a/src/components/Match/TeamfightMap/index.jsx +++ b/src/components/Match/TeamfightMap/index.jsx @@ -1,9 +1,9 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; -import { formatSeconds, calculateDistance, calculateRelativeXY, bindWidth } from 'utility'; import ReactTooltip from 'react-tooltip'; import stylePropType from 'react-style-proptype'; import styled from 'styled-components'; +import { formatSeconds, calculateDistance, calculateRelativeXY, bindWidth } from '../../../utility'; import { IconRadiant, IconDire, IconDot } from '../../Icons'; import TeamTable from '../TeamTable'; import { teamfightColumns } from '../matchColumns'; diff --git a/src/components/Match/Vision/VisionMap.jsx b/src/components/Match/Vision/VisionMap.jsx index 5e5dbf0ea3..34b90dccd7 100644 --- a/src/components/Match/Vision/VisionMap.jsx +++ b/src/components/Match/Vision/VisionMap.jsx @@ -1,11 +1,11 @@ import React from 'react'; import PropTypes from 'prop-types'; +import ReactTooltip from 'react-tooltip'; +import styled from 'styled-components'; import { gameCoordToUV, formatSeconds, -} from 'utility'; -import ReactTooltip from 'react-tooltip'; -import styled from 'styled-components'; +} from '../../../utility'; import strings from '../../../lang'; import PlayerThumb from '../PlayerThumb'; import DotaMap from '../../DotaMap'; diff --git a/src/components/Match/Vision/index.jsx b/src/components/Match/Vision/index.jsx index 8978830515..117787aed6 100644 --- a/src/components/Match/Vision/index.jsx +++ b/src/components/Match/Vision/index.jsx @@ -1,10 +1,10 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { formatSeconds } from 'utility'; import Slider from 'material-ui/Slider'; import _ from 'lodash/fp'; -import strings from 'lang'; import styled from 'styled-components'; +import { formatSeconds } from '../../../utility'; +import strings from '../../../lang'; import VisionFilter from './VisionFilter'; import VisionItems from './VisionItems'; import VisionMap from './VisionMap'; diff --git a/src/components/Match/matchPages.jsx b/src/components/Match/matchPages.jsx index 4ec265e4ef..5d52941ef8 100644 --- a/src/components/Match/matchPages.jsx +++ b/src/components/Match/matchPages.jsx @@ -1,6 +1,6 @@ import React from 'react'; -import strings from 'lang'; import heroes from 'dotaconstants/build/heroes.json'; +import strings from '../../lang'; import Heading from '../Heading'; import Table from '../Table'; import TeamfightMap from '../Match/TeamfightMap'; diff --git a/src/components/Meta/fields.js b/src/components/Meta/fields.js index 6a41b5a420..13d5849eeb 100644 --- a/src/components/Meta/fields.js +++ b/src/components/Meta/fields.js @@ -1,9 +1,9 @@ import util from 'util'; -import strings from 'lang'; import heroData from 'dotaconstants/build/heroes.json'; import gameModeData from 'dotaconstants/build/game_mode.json'; import lobbyTypeData from 'dotaconstants/build/lobby_type.json'; // import patchData from 'dotaconstants/build/patch.json'; +import strings from '../../lang'; /* const mmrs = Array(20).fill().map((e, i) => i * 500).map(element => ({ diff --git a/src/components/PercentContainer/PercentContainer.jsx b/src/components/PercentContainer/PercentContainer.jsx index 5c06c722c9..583878a713 100644 --- a/src/components/PercentContainer/PercentContainer.jsx +++ b/src/components/PercentContainer/PercentContainer.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import LinearProgress from 'material-ui/LinearProgress'; -// import PiePercent from '../../PiePercent'; -import { getPercentWin } from 'utility'; import styled from 'styled-components'; +// import PiePercent from '../../PiePercent'; +import { getPercentWin } from '../../utility'; import constants from '../constants'; // const getPercentWin = (wins, games) => (games ? Math.ceil(1000 * (wins / games)) / 10 : 0); diff --git a/src/components/Player/Header/PlayedWith.jsx b/src/components/Player/Header/PlayedWith.jsx index be4637ae33..54f3994b04 100644 --- a/src/components/Player/Header/PlayedWith.jsx +++ b/src/components/Player/Header/PlayedWith.jsx @@ -1,8 +1,8 @@ import React from 'react'; import PropTypes from 'prop-types'; -import strings from 'lang'; import { Link } from 'react-router-dom'; import fetch from 'isomorphic-fetch'; +import strings from '../../../lang'; import { PlayerStatsCard } from './Styled'; import constants from '../../constants'; diff --git a/src/components/Player/Header/PlayerHeader.jsx b/src/components/Player/Header/PlayerHeader.jsx index d7a5847a81..21d981c658 100644 --- a/src/components/Player/Header/PlayerHeader.jsx +++ b/src/components/Player/Header/PlayerHeader.jsx @@ -3,9 +3,9 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Avatar from 'material-ui/Avatar'; import Badge from 'material-ui/Badge'; -import strings from 'lang'; -import { rankTierToString } from 'utility'; import styled from 'styled-components'; +import { rankTierToString } from '../../../utility'; +import strings from '../../../lang'; import Error from '../../Error'; import Spinner from '../../Spinner'; import PlayerStats from './PlayerStats'; diff --git a/src/components/Player/Pages/Counts/playerCountsColumns.jsx b/src/components/Player/Pages/Counts/playerCountsColumns.jsx index 5844bfc4c2..d0dabf0699 100644 --- a/src/components/Player/Pages/Counts/playerCountsColumns.jsx +++ b/src/components/Player/Pages/Counts/playerCountsColumns.jsx @@ -1,5 +1,5 @@ -import { transformations } from 'utility'; -import strings from 'lang'; +import { transformations } from '../../../../utility'; +import strings from '../../../../lang'; export default [{ displayName: strings.th_category, diff --git a/src/components/Player/Pages/Heroes/Heroes.jsx b/src/components/Player/Pages/Heroes/Heroes.jsx index 299f902900..5b0f41542b 100644 --- a/src/components/Player/Pages/Heroes/Heroes.jsx +++ b/src/components/Player/Pages/Heroes/Heroes.jsx @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import strings from 'lang'; +import strings from '../../../../lang'; import { getPlayerHeroes } from '../../../../actions'; import Table from '../../../Table'; import Container from '../../../Container'; diff --git a/src/components/Player/Pages/Heroes/playerHeroesColumns.jsx b/src/components/Player/Pages/Heroes/playerHeroesColumns.jsx index 8cf12aa5e8..3220185e31 100644 --- a/src/components/Player/Pages/Heroes/playerHeroesColumns.jsx +++ b/src/components/Player/Pages/Heroes/playerHeroesColumns.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import { transformations } from 'utility'; +import { transformations } from '../../../../utility'; import { TableLink } from '../../../Table'; import strings from '../../../../lang'; diff --git a/src/components/Player/Pages/Items/playerItemsColumns.jsx b/src/components/Player/Pages/Items/playerItemsColumns.jsx index 0ae4ad4138..e270cbb178 100644 --- a/src/components/Player/Pages/Items/playerItemsColumns.jsx +++ b/src/components/Player/Pages/Items/playerItemsColumns.jsx @@ -1,4 +1,4 @@ -import strings from 'lang'; +import strings from '../../../../lang'; export default [{ displayName: 'Name', diff --git a/src/components/Player/Pages/Matches/playerMatchesColumns.jsx b/src/components/Player/Pages/Matches/playerMatchesColumns.jsx index 48e8bacfe9..9f30a43087 100644 --- a/src/components/Player/Pages/Matches/playerMatchesColumns.jsx +++ b/src/components/Player/Pages/Matches/playerMatchesColumns.jsx @@ -1,5 +1,5 @@ -import { transformations } from 'utility'; -import strings from 'lang'; +import { transformations } from '../../../../utility'; +import strings from '../../../../lang'; export default [{ displayName: strings.th_hero_id, diff --git a/src/components/Player/Pages/Overview/Overview.jsx b/src/components/Player/Pages/Overview/Overview.jsx index 105897bbb9..93dc2b1e4f 100644 --- a/src/components/Player/Pages/Overview/Overview.jsx +++ b/src/components/Player/Pages/Overview/Overview.jsx @@ -1,7 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import strings from 'lang'; import Checkbox from 'material-ui/Checkbox'; import Turbo from 'material-ui/svg-icons/image/timelapse'; import TurboOff from 'material-ui/svg-icons/notification/do-not-disturb'; @@ -14,6 +13,7 @@ import { getPlayerPeers, getPvgnaHeroGuides, } from '../../../../actions'; +import strings from '../../../../lang'; import Table from '../../../Table'; import Container from '../../../Container'; import playerMatchesColumns from '../Matches/playerMatchesColumns'; diff --git a/src/components/Player/Pages/Overview/Summary.jsx b/src/components/Player/Pages/Overview/Summary.jsx index a0a9206088..2cb0ed0950 100644 --- a/src/components/Player/Pages/Overview/Summary.jsx +++ b/src/components/Player/Pages/Overview/Summary.jsx @@ -1,14 +1,14 @@ import React from 'react'; import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; +import heroes from 'dotaconstants/build/heroes.json'; import { isRadiant, sum, formatSeconds, abbreviateNumber, -} from 'utility'; -import heroes from 'dotaconstants/build/heroes.json'; -import strings from 'lang'; +} from '../../../../utility'; +import strings from '../../../../lang'; import { MAX_MATCHES_ROWS } from './Overview'; import constants from '../../../constants'; diff --git a/src/components/Player/Pages/Peers/playerPeersColumns.jsx b/src/components/Player/Pages/Peers/playerPeersColumns.jsx index ea52780adc..4ba9e0babc 100644 --- a/src/components/Player/Pages/Peers/playerPeersColumns.jsx +++ b/src/components/Player/Pages/Peers/playerPeersColumns.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import { transformations } from 'utility'; +import { transformations } from '../../../../utility'; import { TableLink } from '../../../Table'; import strings from '../../../../lang'; diff --git a/src/components/Player/Pages/Rankings/playerRankingsColumns.jsx b/src/components/Player/Pages/Rankings/playerRankingsColumns.jsx index 3799d40762..7989515132 100644 --- a/src/components/Player/Pages/Rankings/playerRankingsColumns.jsx +++ b/src/components/Player/Pages/Rankings/playerRankingsColumns.jsx @@ -1,5 +1,5 @@ -import { transformations } from 'utility'; -import strings from 'lang'; +import { transformations } from '../../../../utility'; +import strings from '../../../../lang'; function roundUp(x) { const y = 10 ** (x.toString().length - 1); diff --git a/src/components/Player/Pages/Records/playerRecordsColumns.jsx b/src/components/Player/Pages/Records/playerRecordsColumns.jsx index e9884de002..6d057a076e 100644 --- a/src/components/Player/Pages/Records/playerRecordsColumns.jsx +++ b/src/components/Player/Pages/Records/playerRecordsColumns.jsx @@ -1,5 +1,5 @@ -import { transformations } from 'utility'; -import strings from 'lang'; +import { transformations } from '../../../../utility'; +import strings from '../../../../lang'; export default [{ displayName: strings.th_hero_id, diff --git a/src/components/Player/Pages/Wardmap/Wardmap.jsx b/src/components/Player/Pages/Wardmap/Wardmap.jsx index 2e69142a2a..9da8494e1d 100644 --- a/src/components/Player/Pages/Wardmap/Wardmap.jsx +++ b/src/components/Player/Pages/Wardmap/Wardmap.jsx @@ -2,8 +2,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { calculateResponsiveState } from 'redux-responsive'; -import { unpackPositionData } from 'utility'; import styled from 'styled-components'; +import { unpackPositionData } from '../../../../utility'; import { getPlayerWardmap } from '../../../../actions'; import Heatmap from '../../../Heatmap'; import Container from '../../../Container'; diff --git a/src/components/Player/TableFilterForm/TableFilter.config.js b/src/components/Player/TableFilterForm/TableFilter.config.js index 57c06b25e9..f3292d428f 100644 --- a/src/components/Player/TableFilterForm/TableFilter.config.js +++ b/src/components/Player/TableFilterForm/TableFilter.config.js @@ -1,7 +1,7 @@ import heroes from 'dotaconstants/build/heroes.json'; import patch from 'dotaconstants/build/patch.json'; import region from 'dotaconstants/build/region.json'; -import strings from 'lang'; +import strings from '../../../lang'; // This has to be a list in order to pass it in. // We should consider refactoring all these kinds of objects into lists. I understand diff --git a/src/components/Player/playerPages.jsx b/src/components/Player/playerPages.jsx index 348714936d..346ce1d3a6 100644 --- a/src/components/Player/playerPages.jsx +++ b/src/components/Player/playerPages.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import strings from 'lang'; +import strings from '../../lang'; import { PeersPage, OverviewPage, diff --git a/src/components/Records/index.jsx b/src/components/Records/index.jsx index e0704c24cd..4cdd218f19 100644 --- a/src/components/Records/index.jsx +++ b/src/components/Records/index.jsx @@ -2,7 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Helmet from 'react-helmet'; -import { transformations, formatSeconds, getOrdinal } from 'utility'; +import { transformations, formatSeconds, getOrdinal } from '../../utility'; import { getRecords } from '../../actions'; import strings from '../../lang'; import Table from '../Table'; diff --git a/src/components/Search/SearchForm.jsx b/src/components/Search/SearchForm.jsx index 61cbe63596..ff398b9b7e 100644 --- a/src/components/Search/SearchForm.jsx +++ b/src/components/Search/SearchForm.jsx @@ -4,8 +4,8 @@ import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; import { debounce } from 'lodash/fp'; import TextField from 'material-ui/TextField'; -import strings from 'lang'; import querystring from 'querystring'; +import strings from '../../lang'; import { getSearchResultAndPros, setSearchQuery } from '../../actions'; import constants from '../constants'; diff --git a/src/components/Search/SearchResult.jsx b/src/components/Search/SearchResult.jsx index dc21b9a2a5..00219f0904 100644 --- a/src/components/Search/SearchResult.jsx +++ b/src/components/Search/SearchResult.jsx @@ -1,10 +1,10 @@ import React from 'react'; import PropTypes from 'prop-types'; -import strings from 'lang'; +import strings from '../../lang'; import { transformations, fromNow, -} from 'utility'; +} from '../../utility'; import Table, { TableLink } from '../Table'; import Container from '../Container'; // import { List } from 'material-ui/List'; diff --git a/src/components/Table/PaginatedTable/Pagination.jsx b/src/components/Table/PaginatedTable/Pagination.jsx index 634d73b96e..0ff9dd9b1e 100644 --- a/src/components/Table/PaginatedTable/Pagination.jsx +++ b/src/components/Table/PaginatedTable/Pagination.jsx @@ -4,7 +4,7 @@ import styled from 'styled-components'; import FlatButton from 'material-ui/FlatButton'; import Next from 'material-ui/svg-icons/hardware/keyboard-arrow-right'; import Prev from 'material-ui/svg-icons/hardware/keyboard-arrow-left'; -import strings from 'lang'; +import strings from '../../../lang'; import constants from '../../constants'; const StyledContainer = styled.div` diff --git a/src/components/Table/Table.jsx b/src/components/Table/Table.jsx index 1fbfa51c40..29d3be0fb7 100644 --- a/src/components/Table/Table.jsx +++ b/src/components/Table/Table.jsx @@ -7,7 +7,7 @@ import { TableRow as MaterialTableRow, TableRowColumn as MaterialTableRowColumn, } from 'material-ui/Table'; -import { abbreviateNumber, SORT_ENUM, defaultSort } from 'utility'; +import { abbreviateNumber, SORT_ENUM, defaultSort } from '../../utility'; import { TablePercent } from '../Visualizations'; import Pagination from '../Table/PaginatedTable/Pagination'; import TableHeader from './TableHeader'; diff --git a/src/components/Team/Overview.jsx b/src/components/Team/Overview.jsx index 6ead71418c..9fed7841c1 100644 --- a/src/components/Team/Overview.jsx +++ b/src/components/Team/Overview.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import strings from 'lang'; +import strings from '../../lang'; import Container from '../Container'; import Table from '../Table'; import { matchColumns, memberColumns, heroColumns } from './teamDataColumns'; diff --git a/src/components/Team/TeamHeader.jsx b/src/components/Team/TeamHeader.jsx index 9e25111ae8..453f56fcdd 100644 --- a/src/components/Team/TeamHeader.jsx +++ b/src/components/Team/TeamHeader.jsx @@ -1,6 +1,6 @@ import React from 'react'; -import strings from 'lang'; -import { getTeamLogoUrl } from 'utility'; +import strings from '../../lang'; +import { getTeamLogoUrl } from '../../utility'; import { HeaderContainer, Logo, Column, TeamName, Row, TeamStatsCard } from './TeamStyled'; export default generalData => ( diff --git a/src/components/Team/teamDataColumns.jsx b/src/components/Team/teamDataColumns.jsx index 1b44628471..c68a61af66 100644 --- a/src/components/Team/teamDataColumns.jsx +++ b/src/components/Team/teamDataColumns.jsx @@ -1,7 +1,7 @@ import React from 'react'; import heroes from 'dotaconstants/build/heroes.json'; -import strings from 'lang'; -import { transformations, subTextStyle, getTeamLogoUrl } from 'utility'; +import strings from '../../lang'; +import { transformations, subTextStyle, getTeamLogoUrl } from '../../utility'; import { TableLink } from '../Table'; import constants from '../constants'; import { TableRow, TableImage } from './TeamStyled'; diff --git a/src/components/Team/teamPages.jsx b/src/components/Team/teamPages.jsx index 9357a68029..7bec3f891b 100644 --- a/src/components/Team/teamPages.jsx +++ b/src/components/Team/teamPages.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import strings from 'lang'; +import strings from '../../lang'; import Container from '../Container'; import Table from '../Table'; import Overview from './Overview'; diff --git a/src/components/Teams/index.jsx b/src/components/Teams/index.jsx index a9a99e7f42..65d3357e96 100644 --- a/src/components/Teams/index.jsx +++ b/src/components/Teams/index.jsx @@ -2,9 +2,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import Helmet from 'react-helmet'; import { connect } from 'react-redux'; -import strings from 'lang'; import styled from 'styled-components'; -import { getOrdinal, getTeamLogoUrl, fromNow, subTextStyle } from 'utility'; +import { getOrdinal, getTeamLogoUrl, fromNow, subTextStyle } from '../../utility'; +import strings from '../../lang'; import { getTeams } from '../../actions'; import Heading from '../Heading'; import Team from '../Team'; diff --git a/src/components/Visualizations/FromNowTooltip.jsx b/src/components/Visualizations/FromNowTooltip.jsx index 60456d164f..7c86846566 100644 --- a/src/components/Visualizations/FromNowTooltip.jsx +++ b/src/components/Visualizations/FromNowTooltip.jsx @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { fromNow } from 'utility'; import styled from 'styled-components'; +import { fromNow } from '../../utility'; const StyledDiv = styled.div` position: relative; diff --git a/src/components/Visualizations/Graph/DistributionGraph.jsx b/src/components/Visualizations/Graph/DistributionGraph.jsx index 3696df35b5..e2900cbdc9 100644 --- a/src/components/Visualizations/Graph/DistributionGraph.jsx +++ b/src/components/Visualizations/Graph/DistributionGraph.jsx @@ -1,6 +1,5 @@ import React from 'react'; import PropTypes from 'prop-types'; -import strings from 'lang'; import { XAxis, YAxis, @@ -11,6 +10,7 @@ import { CartesianGrid, Label, ResponsiveContainer, } from 'recharts'; +import strings from '../../../lang'; import { StyledTooltip } from './Styled'; const DistributionTooltipContent = ({ payload, array }) => { diff --git a/src/components/Visualizations/Graph/HistogramGraph.jsx b/src/components/Visualizations/Graph/HistogramGraph.jsx index 0969b39b07..ad5b045d66 100644 --- a/src/components/Visualizations/Graph/HistogramGraph.jsx +++ b/src/components/Visualizations/Graph/HistogramGraph.jsx @@ -1,6 +1,5 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { hsvToRgb } from 'utility'; import { XAxis, YAxis, @@ -12,7 +11,8 @@ import { Cell, ResponsiveContainer, } from 'recharts'; -import strings from 'lang'; +import { hsvToRgb } from '../../../utility'; +import strings from '../../../lang'; import { StyledTooltip } from './Styled'; const HistogramTooltipContent = ({ payload, xAxisLabel = '' }) => { diff --git a/src/components/Visualizations/Graph/MMRGraph.jsx b/src/components/Visualizations/Graph/MMRGraph.jsx index cf0208241f..eb5af49864 100644 --- a/src/components/Visualizations/Graph/MMRGraph.jsx +++ b/src/components/Visualizations/Graph/MMRGraph.jsx @@ -1,6 +1,5 @@ import React from 'react'; import PropTypes from 'prop-types'; -import strings from 'lang'; import { XAxis, YAxis, @@ -12,6 +11,7 @@ import { Label, ResponsiveContainer, Brush, } from 'recharts'; import styled from 'styled-components'; +import strings from '../../../lang'; import constants from '../../constants'; const StyledGraphArea = styled.div` diff --git a/src/components/Visualizations/Graph/TrendGraph.jsx b/src/components/Visualizations/Graph/TrendGraph.jsx index d2a2b7be98..e754b5ab0f 100644 --- a/src/components/Visualizations/Graph/TrendGraph.jsx +++ b/src/components/Visualizations/Graph/TrendGraph.jsx @@ -12,8 +12,8 @@ import { ResponsiveContainer, } from 'recharts'; import heroes from 'dotaconstants/build/heroes.json'; -import { formatSeconds, fromNow } from 'utility'; import styled from 'styled-components'; +import { formatSeconds, fromNow } from '../../../utility'; import strings from '../../../lang'; import constants from '../../constants'; diff --git a/src/components/Visualizations/Table/KDA.jsx b/src/components/Visualizations/Table/KDA.jsx index 3b1a827000..ff57937ce4 100644 --- a/src/components/Visualizations/Table/KDA.jsx +++ b/src/components/Visualizations/Table/KDA.jsx @@ -1,6 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; -import strings from 'lang'; +import strings from '../../../lang'; import { KDAContainer, TitleContainer, KDAPercentContainer } from './Styled'; import constants from '../../constants'; diff --git a/src/components/Visualizations/inflictorWithValue.jsx b/src/components/Visualizations/inflictorWithValue.jsx index 018a444811..f301b4db21 100644 --- a/src/components/Visualizations/inflictorWithValue.jsx +++ b/src/components/Visualizations/inflictorWithValue.jsx @@ -4,8 +4,8 @@ import uuid from 'uuid'; import items from 'dotaconstants/build/items.json'; import abilities from 'dotaconstants/build/abilities.json'; import neutralAbilities from 'dotaconstants/build/neutral_abilities.json'; -import strings from 'lang'; import styled from 'styled-components'; +import strings from '../../lang'; import constants from '../constants'; const customNameIcon = { diff --git a/src/reducers/index.js b/src/reducers/index.js index ba060350f9..c6b680e63d 100644 --- a/src/reducers/index.js +++ b/src/reducers/index.js @@ -1,7 +1,7 @@ import { combineReducers } from 'redux'; -import reducer from 'reducers/reducer'; -import request from 'reducers/request'; -import form from 'reducers/form'; +import reducer from './reducer'; +import request from './request'; +import form from './form'; export default combineReducers({ player: reducer('player'), diff --git a/src/store/index.js b/src/store/index.js index 132e29bb57..cc4609dead 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -9,7 +9,7 @@ import { createResponsiveStoreEnhancer, createResponsiveStateReducer, } from 'redux-responsive'; -import app from 'reducers'; +import app from '../reducers'; const reducer = combineReducers({ app, From 003966c57b0728d516342f6ec7c03500828ff1d4 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 31 Mar 2018 04:20:17 -0700 Subject: [PATCH 0155/1495] New translations en-US.json (Russian) --- src/lang/ru-RU.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index aa1d992c7c..c36b642f64 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -409,7 +409,7 @@ "lane_role_0": "Неизвестно", "lane_role_1": "Лёгкая", "lane_role_2": "Средняя", - "lane_role_3": "Тяжёлая", + "lane_role_3": "Сложная", "lane_role_4": "Лес", "lane_pos_1": "Нижняя", "lane_pos_2": "Центральную", From c1c11c3551addc9c84ae5cb936011cfec59517a3 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Sat, 31 Mar 2018 19:55:07 +0000 Subject: [PATCH 0156/1495] fixes #1507 --- src/components/Match/matchColumns.jsx | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/components/Match/matchColumns.jsx b/src/components/Match/matchColumns.jsx index ef4c4b624a..66a33a02ba 100644 --- a/src/components/Match/matchColumns.jsx +++ b/src/components/Match/matchColumns.jsx @@ -5,7 +5,6 @@ import items from 'dotaconstants/build/items.json'; import orderTypes from 'dotaconstants/build/order_types.json'; import itemIds from 'dotaconstants/build/item_ids.json'; import abilityIds from 'dotaconstants/build/ability_ids.json'; -import abilityKeys from 'dotaconstants/build/ability_keys.json'; import buffs from 'dotaconstants/build/permanent_buffs.json'; import util from 'util'; import ReactTooltip from 'react-tooltip'; @@ -1025,16 +1024,11 @@ const playerDeaths = (row, col, field) => { ); }; -const inflictorRow = obj => (row, col, field) => +const inflictorRow = (row, col, field) => (field ?
- {Object.keys(field).map((inflictor) => { - if (obj[inflictor]) { - return inflictorWithValue(inflictor, field[inflictor]); - } - return null; - })} + {Object.keys(field).map(inflictor => inflictorWithValue(inflictor, field[inflictor]))}
: ''); @@ -1073,12 +1067,12 @@ export const teamfightColumns = [ { displayName: strings.th_abilities, field: 'ability_uses', - displayFn: inflictorRow(abilityKeys), + displayFn: inflictorRow, }, { displayName: strings.th_items, field: 'item_uses', - displayFn: inflictorRow(items), + displayFn: inflictorRow, }, ]; From d5f0236e2862a0ad83b25f66d814c0be915d106d Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 31 Mar 2018 21:50:09 -0700 Subject: [PATCH 0157/1495] New translations en-US.json (Portuguese, Brazilian) --- src/lang/pt-BR.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index 43032a4fd6..05bae9dc27 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -905,9 +905,9 @@ "tooltip_advantage": "Calculado pelo método Wilson", "histograms_name": "Histograma", "histograms_description": "Percentagens indicam taxas de vitórias para o intervalo rotulado", - "histograms_actions_per_min_description": "Actions performed by player per minute", - "histograms_comeback_description": "Maximum gold advantage in a won game", - "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", + "histograms_actions_per_min_description": "Ações executadas por minuto", + "histograms_comeback_description": "Vantagem máxima de ouro em um jogo ganho", + "histograms_lane_efficiency_pct_description": "Porcentagem de gold na lane (Creeps+Passivo+Inicial) obtido em 10 minutos", "histograms_gold_per_min_description": "Gold farmed per minute", "histograms_hero_damage_description": "Amount of damage dealt to heroes", "histograms_hero_healing_description": "Amount of health restored to heroes", From 0fd63ae1917d8ce80c52654c3e078eccc26bcaf4 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 31 Mar 2018 22:00:09 -0700 Subject: [PATCH 0158/1495] New translations en-US.json (Portuguese, Brazilian) --- src/lang/pt-BR.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index 05bae9dc27..1c9d385aa6 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -907,18 +907,18 @@ "histograms_description": "Percentagens indicam taxas de vitórias para o intervalo rotulado", "histograms_actions_per_min_description": "Ações executadas por minuto", "histograms_comeback_description": "Vantagem máxima de ouro em um jogo ganho", - "histograms_lane_efficiency_pct_description": "Porcentagem de gold na lane (Creeps+Passivo+Inicial) obtido em 10 minutos", - "histograms_gold_per_min_description": "Gold farmed per minute", - "histograms_hero_damage_description": "Amount of damage dealt to heroes", - "histograms_hero_healing_description": "Amount of health restored to heroes", - "histograms_level_description": "Level achieved in a game", - "histograms_loss_description": "Maximum gold disadvantage in a lost game", - "histograms_pings_description": "Number of times the player pinged the map", - "histograms_stomp_description": "Maximum gold disadvantage in a won game", - "histograms_stuns_description": "Seconds of disable on heroes", - "histograms_throw_description": "Maximum gold advantage in a lost game", - "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", - "histograms_xp_per_min_description": "Experience gained per minute", + "histograms_lane_efficiency_pct_description": "Porcentagem de ouro na lane (Creeps+Passivo+Inicial) obtido em 10 minutos", + "histograms_gold_per_min_description": "Ouro ganho por minuto", + "histograms_hero_damage_description": "Quantidade de dano causado em heróis", + "histograms_hero_healing_description": "Quantidade de vida restaurada em heróis", + "histograms_level_description": "Nível alcançado em um jogo", + "histograms_loss_description": "Desvantagem de ouro máxima em um jogo perdido", + "histograms_pings_description": "Número de vezes que o jogador pingou o mapa", + "histograms_stomp_description": "Desvantagem de ouro máxima em um jogo ganho", + "histograms_stuns_description": "Segundos de disable em heróis", + "histograms_throw_description": "Vantagem máxima de ouro em um jogo ganho", + "histograms_purchase_tpscroll_description": "Pergaminho de Teletransporte comprados", + "histograms_xp_per_min_description": "Experiência por minuto", "trends_name": "Tendências", "trends_description": "Média acumulada dos últimos 500 jogos", "trends_tooltip_average": "Méd.", From a8b5f1cf81b4c7557f0a46cbe15950b0de089175 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:20:24 -0700 Subject: [PATCH 0159/1495] New translations en-US.json (Russian) --- src/lang/ru-RU.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index c36b642f64..15db049f70 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -46,6 +46,7 @@ "app_dotacoach": "Запросить тренера", "app_pvgna": "Найти руководство", "app_pvgna_alt": "Найти руководство на Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Обновить историю матчей: Запросить сканирование пропущенных матчей из-за настроек приватности", "app_refresh_label": "Обновить", "app_login": "Войти", From fe8f582826e21334365d58cf18ea07be882de52e Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:20:27 -0700 Subject: [PATCH 0160/1495] New translations en-US.json (Korean) --- src/lang/ko-KR.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/ko-KR.json b/src/lang/ko-KR.json index cc2394b4ad..a19c4d58d0 100644 --- a/src/lang/ko-KR.json +++ b/src/lang/ko-KR.json @@ -46,6 +46,7 @@ "app_dotacoach": "코치에게 질문하세요", "app_pvgna": "가이드 찾기", "app_pvgna_alt": "Pvgna의 도타2 가이드 찾기", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "매치 기록 새로고침: 개인 설정 때문에 빠진 매치를 찾는 것을 탐색합니다.", "app_refresh_label": "새로고침", "app_login": "로그인", From fdee03dea647879649ad8783ada2ee1b0c5b3286 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:20:29 -0700 Subject: [PATCH 0161/1495] New translations en-US.json (Ukrainian) --- src/lang/uk-UA.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/uk-UA.json b/src/lang/uk-UA.json index 959bf8d35a..0690203e81 100644 --- a/src/lang/uk-UA.json +++ b/src/lang/uk-UA.json @@ -46,6 +46,7 @@ "app_dotacoach": "Запитати Тренера", "app_pvgna": "Шукати керівництво", "app_pvgna_alt": "Знайти гайд на Дота 2 від Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Оновити історії матчів: Запитати чергу на сканування матчів втрачених через параметри конфіденційності", "app_refresh_label": "Оновити", "app_login": "Увійти", From 03a5ded8dbd1043735c2cfa0aed93c2a3c795e5a Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:20:32 -0700 Subject: [PATCH 0162/1495] New translations en-US.json (Turkish) --- src/lang/tr-TR.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json index 6f9fc1b8f0..75a50e6348 100644 --- a/src/lang/tr-TR.json +++ b/src/lang/tr-TR.json @@ -46,6 +46,7 @@ "app_dotacoach": "Bir Koça Sor", "app_pvgna": "Bir rehber bulun", "app_pvgna_alt": "Pvgna üzerinde bir Dota 2 rehberi bulun", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Maç Geçmişini Yenile: Gizlilik ayarından dolayı görünmeyen maçları aramayı sıraya sok", "app_refresh_label": "Yenile", "app_login": "Oturum aç", From 806665bb0cdb51d513d4c6cc1d1b069c0fac4c42 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:20:34 -0700 Subject: [PATCH 0163/1495] New translations en-US.json (Swedish) --- src/lang/sv-SE.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/sv-SE.json b/src/lang/sv-SE.json index 19dce132dc..6e920423a2 100644 --- a/src/lang/sv-SE.json +++ b/src/lang/sv-SE.json @@ -46,6 +46,7 @@ "app_dotacoach": "Nekade tork", "app_pvgna": "Hitta en guide", "app_pvgna_alt": "Hitta en Dota 2 Guide på Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Stal Aegis", "app_refresh_label": "Uppdatera", "app_login": "Logga in", From 4d787b277b34ae9423386fd85e8bb0ba15509350 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:20:36 -0700 Subject: [PATCH 0164/1495] New translations en-US.json (Spanish, United States) --- src/lang/es-US.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/es-US.json b/src/lang/es-US.json index 9d24c445f9..644f416f28 100644 --- a/src/lang/es-US.json +++ b/src/lang/es-US.json @@ -46,6 +46,7 @@ "app_dotacoach": "Pregunta a un Entrenador", "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Actualizar Historial de Partidas: Añade a la cola una búsqueda para encontrar partidas que faltan debido a la configuración de privacidad", "app_refresh_label": "Refresh", "app_login": "Iniciar sesión", From fde2678e23bfc3c0ea725b339400a94066a9b93f Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:20:38 -0700 Subject: [PATCH 0165/1495] New translations en-US.json (Spanish, Peru) --- src/lang/es-PE.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/es-PE.json b/src/lang/es-PE.json index aaaad604dc..ba8ec91245 100644 --- a/src/lang/es-PE.json +++ b/src/lang/es-PE.json @@ -46,6 +46,7 @@ "app_dotacoach": "Pregúntale a un entrenador", "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Actualizar Historial de Partidas: Añade a la cola una búsqueda para encontrar partidas que faltan debido a la configuración de privacidad", "app_refresh_label": "Refresh", "app_login": "Iniciar sesión", From df4382ba2e3b9b03c09d93e521e0dfbea226f48f Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:20:41 -0700 Subject: [PATCH 0166/1495] New translations en-US.json (Spanish) --- src/lang/es-ES.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/es-ES.json b/src/lang/es-ES.json index 51cafb7307..f008097071 100644 --- a/src/lang/es-ES.json +++ b/src/lang/es-ES.json @@ -46,6 +46,7 @@ "app_dotacoach": "Pregunta a un Entrenador", "app_pvgna": "Encuentre una guía", "app_pvgna_alt": "Encontrar una guía de Dota 2 en Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Actualizar Historial de Partidas: Añade a la cola una búsqueda para encontrar partidas que faltan debido a la configuración de privacidad", "app_refresh_label": "Actualizar", "app_login": "Iniciar sesión", From 0c8062ff96760f1e1fea5423521ced97f87c5a92 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:20:43 -0700 Subject: [PATCH 0167/1495] New translations en-US.json (Slovak) --- src/lang/sk-SK.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/sk-SK.json b/src/lang/sk-SK.json index 0879cc4513..fd4cf5d329 100644 --- a/src/lang/sk-SK.json +++ b/src/lang/sk-SK.json @@ -46,6 +46,7 @@ "app_dotacoach": "Ask a Coach", "app_pvgna": "Nájsť návod", "app_pvgna_alt": "Nájsť návod na Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "Obnoviť", "app_login": "Prihlásiť sa", From 53fec40ad3dcc2435ffef1fd110bc213d705e5d6 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:20:46 -0700 Subject: [PATCH 0168/1495] New translations en-US.json (Serbian (Cyrillic)) --- src/lang/sr-SP.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/sr-SP.json b/src/lang/sr-SP.json index 8285243c91..4128b561a6 100644 --- a/src/lang/sr-SP.json +++ b/src/lang/sr-SP.json @@ -46,6 +46,7 @@ "app_dotacoach": "Ask a Coach", "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "Refresh", "app_login": "Login", From 0d73e4497b42f98d5ceac7ff78d31e509c4023ff Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:20:48 -0700 Subject: [PATCH 0169/1495] New translations en-US.json (Romanian) --- src/lang/ro-RO.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/ro-RO.json b/src/lang/ro-RO.json index 42486eb556..ff19bd9208 100644 --- a/src/lang/ro-RO.json +++ b/src/lang/ro-RO.json @@ -46,6 +46,7 @@ "app_dotacoach": "Întrebaţi un antrenor", "app_pvgna": "Găsiţi un ghid", "app_pvgna_alt": "Găsiţi un ghid de Dota 2 pe Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Actualizare istoric meciuri: Începeți o scanare pentru a găsi meciurile lipsă din cauza setărilor de confidenţialitate", "app_refresh_label": "Actualizează", "app_login": "Autentificare", From e23ab9f12db5651411a3f2b3116aa04449a2c12f Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:20:52 -0700 Subject: [PATCH 0170/1495] New translations en-US.json (Portuguese, Brazilian) --- src/lang/pt-BR.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index 1c9d385aa6..80a9b4f1cf 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -46,6 +46,7 @@ "app_dotacoach": "Pergunte a um treinador", "app_pvgna": "Encontre um guia", "app_pvgna_alt": "Encontre um guia de Dota 2 na Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Atualizar o Histórico de Partidas: Agendar uma varredura para encontrar as partidas que faltam devido às configurações de privacidade", "app_refresh_label": "Atualizar", "app_login": "Entrar", From d564f389200968ffa3e56e202706368b745fc5b0 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:20:54 -0700 Subject: [PATCH 0171/1495] New translations en-US.json (Portuguese) --- src/lang/pt-PT.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/pt-PT.json b/src/lang/pt-PT.json index 514b0f0ab6..d2f3355f0c 100644 --- a/src/lang/pt-PT.json +++ b/src/lang/pt-PT.json @@ -46,6 +46,7 @@ "app_dotacoach": "Ask a Coach", "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "Refresh", "app_login": "Login", From 805305b194d3bfa4c7f980f6bb322e80ada0d653 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:20:57 -0700 Subject: [PATCH 0172/1495] New translations en-US.json (Polish) --- src/lang/pl-PL.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/pl-PL.json b/src/lang/pl-PL.json index 181b4ba9ee..16f6c7b713 100644 --- a/src/lang/pl-PL.json +++ b/src/lang/pl-PL.json @@ -46,6 +46,7 @@ "app_dotacoach": "Zapytaj trenera", "app_pvgna": "Znajdź podręcznik", "app_pvgna_alt": "Znajdź poradnik Dota 2 na Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Odśwież historię meczu - zakolejkuj skan by odnaleźć brakujące mecze niewidoczne z powodu ustawień prywatności", "app_refresh_label": "Odśwież", "app_login": "Zaloguj się", From b985c51943adaecb67c9ec5032c4139878b0fdbc Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:20:59 -0700 Subject: [PATCH 0173/1495] New translations en-US.json (Norwegian) --- src/lang/no-NO.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/no-NO.json b/src/lang/no-NO.json index e40d04a367..d5b7f026ba 100644 --- a/src/lang/no-NO.json +++ b/src/lang/no-NO.json @@ -46,6 +46,7 @@ "app_dotacoach": "Ask a Coach", "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "Refresh", "app_login": "Innlogging", From 3fba9fd053459e55239dbe2b2d1ba9c8a8cbd0b7 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:21:02 -0700 Subject: [PATCH 0174/1495] New translations en-US.json (Japanese) --- src/lang/ja-JP.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/ja-JP.json b/src/lang/ja-JP.json index 8ab8300bc1..bfad83b24e 100644 --- a/src/lang/ja-JP.json +++ b/src/lang/ja-JP.json @@ -46,6 +46,7 @@ "app_dotacoach": "コーチに尋ねる", "app_pvgna": "ガイドを探す", "app_pvgna_alt": "PvgnaでDota2のガイドを探す", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "マッチ履歴の更新: 未発見のマッチ結果の検索のキューに入れます。", "app_refresh_label": "更新", "app_login": "ログイン", From 616e4bba787b0979c725ed1bb518208c439f6268 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:21:05 -0700 Subject: [PATCH 0175/1495] New translations en-US.json (Malay) --- src/lang/ms-MY.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/ms-MY.json b/src/lang/ms-MY.json index 8af43ae50c..31c2ea178f 100644 --- a/src/lang/ms-MY.json +++ b/src/lang/ms-MY.json @@ -46,6 +46,7 @@ "app_dotacoach": "Tanya jurulatih", "app_pvgna": "Cari Panduan", "app_pvgna_alt": "Cari guide Dota 2 di Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Kemaskini Sejarah Perlawanan: Imbas untuk mencari perlawanan yang hilang disebabkan tetapan privasi", "app_refresh_label": "Muat semula", "app_login": "Log masuk", From 5d1c26057be25c1f7b934e72d71d12e1350ce71e Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:21:08 -0700 Subject: [PATCH 0176/1495] New translations en-US.json (Hungarian) --- src/lang/hu-HU.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/hu-HU.json b/src/lang/hu-HU.json index a781b06654..3913283bef 100644 --- a/src/lang/hu-HU.json +++ b/src/lang/hu-HU.json @@ -46,6 +46,7 @@ "app_dotacoach": "Ask a Coach", "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "Refresh", "app_login": "Login", From 254003eac9f9f50c1a254c99b0261f7c6dbc609d Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:21:10 -0700 Subject: [PATCH 0177/1495] New translations en-US.json (Hebrew) --- src/lang/he-IL.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/he-IL.json b/src/lang/he-IL.json index 680543b09f..641d02ee08 100644 --- a/src/lang/he-IL.json +++ b/src/lang/he-IL.json @@ -46,6 +46,7 @@ "app_dotacoach": "הזמנת מאמן", "app_pvgna": "מצא מדריך", "app_pvgna_alt": "מצא מדריך ל Dota ב Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "רענון", "app_login": "התחברות", From 915e0fcfe194485c9b93309d593b4d853c13a744 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:21:13 -0700 Subject: [PATCH 0178/1495] New translations en-US.json (Greek) --- src/lang/el-GR.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/el-GR.json b/src/lang/el-GR.json index 6ec47bf578..b07217a0da 100644 --- a/src/lang/el-GR.json +++ b/src/lang/el-GR.json @@ -46,6 +46,7 @@ "app_dotacoach": "Ask a Coach", "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "Refresh", "app_login": "Login", From c7a86b11158f2118ea3fad8ed3f3e8d01d5a5f74 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:21:15 -0700 Subject: [PATCH 0179/1495] New translations en-US.json (German) --- src/lang/de-DE.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index 5867a4cf6f..bc4b1dd906 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -46,6 +46,7 @@ "app_dotacoach": "Frag einen Coach", "app_pvgna": "Eine Anleitung finden", "app_pvgna_alt": "Finden Sie eine Dota 2 Anleitung auf Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Aktualisiere Match Verläufe: Fehlende Matches finden, die wegen Privatsphäre Einstellungen blockiert wurden", "app_refresh_label": "Aktuaklisieren", "app_login": "Login", From 6f4bf3e959086d04dc19138af15ca568bfc36f8d Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:21:18 -0700 Subject: [PATCH 0180/1495] New translations en-US.json (French) --- src/lang/fr-FR.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/fr-FR.json b/src/lang/fr-FR.json index 122749d1b5..adeae86125 100644 --- a/src/lang/fr-FR.json +++ b/src/lang/fr-FR.json @@ -46,6 +46,7 @@ "app_dotacoach": "Demandez un coach", "app_pvgna": "Trouver un guide", "app_pvgna_alt": "Chercher un guide Dota 2 sur Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Réactualiser l'Historique des Matchs: Faire un scan pour trouver des matchs manquants dûs aux paramètres de confidentialité", "app_refresh_label": "Actualiser", "app_login": "Se connecter", From 2440495223b27b0b1043fcb9a9ce4f66c5924dee Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:21:21 -0700 Subject: [PATCH 0181/1495] New translations en-US.json (Finnish) --- src/lang/fi-FI.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/fi-FI.json b/src/lang/fi-FI.json index 44e580c035..d68f0d70d8 100644 --- a/src/lang/fi-FI.json +++ b/src/lang/fi-FI.json @@ -46,6 +46,7 @@ "app_dotacoach": "Kysy valmentajalta", "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Päivitä otteluhistoria: Historia skannataan yksityisyysasetusten takia puuttuvien otteluiden löytämiseksi", "app_refresh_label": "Refresh", "app_login": "Kirjaudu sisään", From aef27d92430bd75387063a607e143563af573301 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:21:23 -0700 Subject: [PATCH 0182/1495] New translations en-US.json (Dutch) --- src/lang/nl-NL.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/nl-NL.json b/src/lang/nl-NL.json index 4f586dbbf3..10caf33c0f 100644 --- a/src/lang/nl-NL.json +++ b/src/lang/nl-NL.json @@ -46,6 +46,7 @@ "app_dotacoach": "Raadpleeg een coach", "app_pvgna": "Vind een Gids", "app_pvgna_alt": "Vind een Dota 2 Gids op Pugna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Vernieuw match geschiedenis: Plan een scan om de door privacy settings ontbrekende matches te zoeken", "app_refresh_label": "Ververs", "app_login": "Aanmelden", From ed859d26f61b16cc7aa814759e9f3aabb15a7fd4 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:21:26 -0700 Subject: [PATCH 0183/1495] New translations en-US.json (Danish) --- src/lang/da-DK.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/da-DK.json b/src/lang/da-DK.json index 7639d6a002..103bb5a819 100644 --- a/src/lang/da-DK.json +++ b/src/lang/da-DK.json @@ -46,6 +46,7 @@ "app_dotacoach": "Spørg en Coach", "app_pvgna": "Find en Guide", "app_pvgna_alt": "Find en Dota 2 Guide på Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Opdater Kamphistorie: Sæt en skanning i kø for at finde manglende kampe pga. privatlivsindstillinger", "app_refresh_label": "Opdater", "app_login": "Log ind", From b9d6bf14ecb49612aa55140fa11ba05eecd0ee0d Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:21:29 -0700 Subject: [PATCH 0184/1495] New translations en-US.json (Czech) --- src/lang/cs-CZ.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/cs-CZ.json b/src/lang/cs-CZ.json index 50c4cdda7d..9853d93ada 100644 --- a/src/lang/cs-CZ.json +++ b/src/lang/cs-CZ.json @@ -46,6 +46,7 @@ "app_dotacoach": "Zeptejte se trenéra", "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "Refresh", "app_login": "Přihlásit", From 7c52de6f6a0939eeeb65ac649133afa90ff1ddbc Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:21:31 -0700 Subject: [PATCH 0185/1495] New translations en-US.json (Chinese Traditional) --- src/lang/zh-TW.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/zh-TW.json b/src/lang/zh-TW.json index 3b5bd16dad..9475cd467f 100644 --- a/src/lang/zh-TW.json +++ b/src/lang/zh-TW.json @@ -46,6 +46,7 @@ "app_dotacoach": "寻求一位教练", "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "刷新比赛历史:由于打开隐私设定而导致的比赛缺失时可使用此功能刷新。", "app_refresh_label": "Refresh", "app_login": "登陆", From 26f57b20c2e1050086ad5d139178a473292c6a84 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:21:33 -0700 Subject: [PATCH 0186/1495] New translations en-US.json (Chinese Simplified) --- src/lang/zh-CN.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index 5407815044..d878ff7387 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -46,6 +46,7 @@ "app_dotacoach": "寻求一位教练", "app_pvgna": "寻找向导", "app_pvgna_alt": "在 Pvgna 上寻找 Dota 2 指南", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "刷新比赛历史:由于打开隐私设定而导致的比赛缺失时可使用此功能刷新。", "app_refresh_label": "刷新", "app_login": "登陆", From c68acd552a51fe7c770c080077a67c63a7e6d43d Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:21:36 -0700 Subject: [PATCH 0187/1495] New translations en-US.json (Bulgarian) --- src/lang/bg-BG.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/bg-BG.json b/src/lang/bg-BG.json index f14df5d4e2..6813dd7d63 100644 --- a/src/lang/bg-BG.json +++ b/src/lang/bg-BG.json @@ -46,6 +46,7 @@ "app_dotacoach": "Попитай треньор", "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "Refresh", "app_login": "Вход", From 763f4ac3cf81f79113e36b3f22cac21cdf9f5f9d Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:21:38 -0700 Subject: [PATCH 0188/1495] New translations en-US.json (Italian) --- src/lang/it-IT.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/it-IT.json b/src/lang/it-IT.json index e91fa9ed39..568edc6d31 100644 --- a/src/lang/it-IT.json +++ b/src/lang/it-IT.json @@ -46,6 +46,7 @@ "app_dotacoach": "Richiedi un Coach", "app_pvgna": "Trova una guida", "app_pvgna_alt": "Trova una guida su Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Ricarica Storico Match: Mette in coda una scansione per trovare i match mancanti per colpa delle impostazioni della privacy", "app_refresh_label": "Aggiorna", "app_login": "Login", From dba3e6866a48bb0c252a84a9fc647328fc95037c Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 01:21:41 -0700 Subject: [PATCH 0189/1495] New translations en-US.json (Vietnamese) --- src/lang/vi-VN.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/vi-VN.json b/src/lang/vi-VN.json index 6cb5f98ec6..b2bca1372d 100644 --- a/src/lang/vi-VN.json +++ b/src/lang/vi-VN.json @@ -46,6 +46,7 @@ "app_dotacoach": "Hỏi ý kiến một huấn luyện viên", "app_pvgna": "Tìm bài hướng dẫn", "app_pvgna_alt": "Tìm bài hướng dẫn Dota2 tren Pvgna", + "app_rivalry": "Bet on Pro Matches", "app_refresh": "Làm mới lại lịch sử trận đấu: Xếp hàng để quét các trận còn sót do thiết lập bảo mật cá nhân", "app_refresh_label": "Làm mới", "app_login": "Đăng nhập", From 24edddd5a1c513209e03f9a3433b017eaf72abc4 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Sun, 1 Apr 2018 09:56:13 +0000 Subject: [PATCH 0190/1495] fixes #1511 --- src/components/Match/matchPages.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Match/matchPages.jsx b/src/components/Match/matchPages.jsx index 5d52941ef8..36ad886571 100644 --- a/src/components/Match/matchPages.jsx +++ b/src/components/Match/matchPages.jsx @@ -226,7 +226,7 @@ const matchPages = [Overview, { content: match => , }, { name: strings.tab_actions, - key: '../../actions', + key: 'actions', parsed: true, content: match => (
From 173c7a9a6749ba16c63fdf925b4752d3580150ef Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 1 Apr 2018 08:40:10 -0700 Subject: [PATCH 0191/1495] New translations en-US.json (Russian) --- src/lang/ru-RU.json | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index 15db049f70..d51c27b3a3 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -46,7 +46,7 @@ "app_dotacoach": "Запросить тренера", "app_pvgna": "Найти руководство", "app_pvgna_alt": "Найти руководство на Pvgna", - "app_rivalry": "Bet on Pro Matches", + "app_rivalry": "Поставить на про-матч", "app_refresh": "Обновить историю матчей: Запросить сканирование пропущенных матчей из-за настроек приватности", "app_refresh_label": "Обновить", "app_login": "Войти", @@ -906,20 +906,20 @@ "tooltip_advantage": "Рассчитывано Wilson score", "histograms_name": "Гистограммы", "histograms_description": "Процентаж указывает на процент побед для этого столбца", - "histograms_actions_per_min_description": "Actions performed by player per minute", - "histograms_comeback_description": "Maximum gold advantage in a won game", - "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", - "histograms_gold_per_min_description": "Gold farmed per minute", - "histograms_hero_damage_description": "Amount of damage dealt to heroes", - "histograms_hero_healing_description": "Amount of health restored to heroes", - "histograms_level_description": "Level achieved in a game", - "histograms_loss_description": "Maximum gold disadvantage in a lost game", - "histograms_pings_description": "Number of times the player pinged the map", - "histograms_stomp_description": "Maximum gold disadvantage in a won game", - "histograms_stuns_description": "Seconds of disable on heroes", - "histograms_throw_description": "Maximum gold advantage in a lost game", - "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", - "histograms_xp_per_min_description": "Experience gained per minute", + "histograms_actions_per_min_description": "Действий игрока в минуту", + "histograms_comeback_description": "Наибольшее преимущество по золоту в выигранной игре", + "histograms_lane_efficiency_pct_description": "Процент золота с линии (начальное + пассивное + от крипов), заработанное за 10 первые минут", + "histograms_gold_per_min_description": "Заработанное золото в минуту", + "histograms_hero_damage_description": "Количество нанесённого урона по героям", + "histograms_hero_healing_description": "Количество восстановленного здоровья героям", + "histograms_level_description": "Достигнутый в игре уровень", + "histograms_loss_description": "Наибольшее отставание по золоту в проигранной игре", + "histograms_pings_description": "Количество поданых игроком сигналов на карте", + "histograms_stomp_description": "Наибольшее отставание по золоту в выигранной игре", + "histograms_stuns_description": "Длительность обезвреживания героев", + "histograms_throw_description": "Наибольшее преимущество по золоту в проигранной игре", + "histograms_purchase_tpscroll_description": "Покупок Town Portal Scroll", + "histograms_xp_per_min_description": "Заработанный опыт в минуту", "trends_name": "Графики", "trends_description": "Совокупное среднее за последние 500 игр", "trends_tooltip_average": "Сред.", From 701a532151d4a5a269355f5f0f23327fcc0a34da Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 05:30:11 -0700 Subject: [PATCH 0192/1495] New translations en-US.json (Portuguese, Brazilian) --- src/lang/pt-BR.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index 80a9b4f1cf..ece6ba71a2 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -46,7 +46,7 @@ "app_dotacoach": "Pergunte a um treinador", "app_pvgna": "Encontre um guia", "app_pvgna_alt": "Encontre um guia de Dota 2 na Pvgna", - "app_rivalry": "Bet on Pro Matches", + "app_rivalry": "Apostar em partidas profissionais", "app_refresh": "Atualizar o Histórico de Partidas: Agendar uma varredura para encontrar as partidas que faltam devido às configurações de privacidade", "app_refresh_label": "Atualizar", "app_login": "Entrar", @@ -906,20 +906,20 @@ "tooltip_advantage": "Calculado pelo método Wilson", "histograms_name": "Histograma", "histograms_description": "Percentagens indicam taxas de vitórias para o intervalo rotulado", - "histograms_actions_per_min_description": "Ações executadas por minuto", + "histograms_actions_per_min_description": "Ações por minuto", "histograms_comeback_description": "Vantagem máxima de ouro em um jogo ganho", "histograms_lane_efficiency_pct_description": "Porcentagem de ouro na lane (Creeps+Passivo+Inicial) obtido em 10 minutos", - "histograms_gold_per_min_description": "Ouro ganho por minuto", + "histograms_gold_per_min_description": "Ouro farmado por minuto", "histograms_hero_damage_description": "Quantidade de dano causado em heróis", "histograms_hero_healing_description": "Quantidade de vida restaurada em heróis", - "histograms_level_description": "Nível alcançado em um jogo", - "histograms_loss_description": "Desvantagem de ouro máxima em um jogo perdido", - "histograms_pings_description": "Número de vezes que o jogador pingou o mapa", + "histograms_level_description": "Nível alcançado em uma partida", + "histograms_loss_description": "Déficit máximo de ouro em uma derrota", + "histograms_pings_description": "Pings no mapa", "histograms_stomp_description": "Desvantagem de ouro máxima em um jogo ganho", "histograms_stuns_description": "Segundos de disable em heróis", "histograms_throw_description": "Vantagem máxima de ouro em um jogo ganho", "histograms_purchase_tpscroll_description": "Pergaminho de Teletransporte comprados", - "histograms_xp_per_min_description": "Experiência por minuto", + "histograms_xp_per_min_description": "Experiência ganhada por minuto", "trends_name": "Tendências", "trends_description": "Média acumulada dos últimos 500 jogos", "trends_tooltip_average": "Méd.", From 836fd029e7c16d06f8e13abac8c79a4cebc5423f Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 05:30:14 -0700 Subject: [PATCH 0193/1495] New translations en-US.json (French) --- src/lang/fr-FR.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/fr-FR.json b/src/lang/fr-FR.json index adeae86125..901333c193 100644 --- a/src/lang/fr-FR.json +++ b/src/lang/fr-FR.json @@ -46,7 +46,7 @@ "app_dotacoach": "Demandez un coach", "app_pvgna": "Trouver un guide", "app_pvgna_alt": "Chercher un guide Dota 2 sur Pvgna", - "app_rivalry": "Bet on Pro Matches", + "app_rivalry": "Parier sur des matchs pro", "app_refresh": "Réactualiser l'Historique des Matchs: Faire un scan pour trouver des matchs manquants dûs aux paramètres de confidentialité", "app_refresh_label": "Actualiser", "app_login": "Se connecter", From 7436ab92f1a1872d10ed02cb4832ab35fae8222b Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Tue, 3 Apr 2018 06:29:02 +0000 Subject: [PATCH 0194/1495] use dynamic team name --- src/components/Team/TeamHeader.jsx | 3 ++- src/lang/en-US.json | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/Team/TeamHeader.jsx b/src/components/Team/TeamHeader.jsx index d48da34f6c..354cbc17c7 100644 --- a/src/components/Team/TeamHeader.jsx +++ b/src/components/Team/TeamHeader.jsx @@ -1,5 +1,6 @@ import React from 'react'; import FlatButton from 'material-ui/FlatButton'; +import util from 'util'; import strings from '../../lang'; import { getTeamLogoUrl } from '../../utility'; import { HeaderContainer, Logo, Column, TeamName, Row, TeamStatsCard } from './TeamStyled'; @@ -28,7 +29,7 @@ export default generalData => ( } href="https://glhf.rivalry.gg/get-started-dota/?utm_source=opendota&utm_medium=link&utm_campaign=opendota" target="_blank" diff --git a/src/lang/en-US.json b/src/lang/en-US.json index 386bf3ce48..23afc356ae 100644 --- a/src/lang/en-US.json +++ b/src/lang/en-US.json @@ -51,6 +51,7 @@ "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "Refresh", "app_login": "Login", From d5b5461d49b1ac3751ed582bd936cefd2b56d19c Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:30:58 -0700 Subject: [PATCH 0195/1495] New translations en-US.json (Russian) --- src/lang/ru-RU.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index d51c27b3a3..b6f6d7cdaf 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -47,6 +47,7 @@ "app_pvgna": "Найти руководство", "app_pvgna_alt": "Найти руководство на Pvgna", "app_rivalry": "Поставить на про-матч", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Обновить историю матчей: Запросить сканирование пропущенных матчей из-за настроек приватности", "app_refresh_label": "Обновить", "app_login": "Войти", From 67a29db07be0c827e879b52cc0846cbb5c4e2e40 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:01 -0700 Subject: [PATCH 0196/1495] New translations en-US.json (Korean) --- src/lang/ko-KR.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/ko-KR.json b/src/lang/ko-KR.json index a19c4d58d0..1587e36f1a 100644 --- a/src/lang/ko-KR.json +++ b/src/lang/ko-KR.json @@ -47,6 +47,7 @@ "app_pvgna": "가이드 찾기", "app_pvgna_alt": "Pvgna의 도타2 가이드 찾기", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "매치 기록 새로고침: 개인 설정 때문에 빠진 매치를 찾는 것을 탐색합니다.", "app_refresh_label": "새로고침", "app_login": "로그인", From 7938582a7d850d29bc67456603de751357a72b77 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:04 -0700 Subject: [PATCH 0197/1495] New translations en-US.json (Ukrainian) --- src/lang/uk-UA.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/uk-UA.json b/src/lang/uk-UA.json index 0690203e81..8629c04b76 100644 --- a/src/lang/uk-UA.json +++ b/src/lang/uk-UA.json @@ -47,6 +47,7 @@ "app_pvgna": "Шукати керівництво", "app_pvgna_alt": "Знайти гайд на Дота 2 від Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Оновити історії матчів: Запитати чергу на сканування матчів втрачених через параметри конфіденційності", "app_refresh_label": "Оновити", "app_login": "Увійти", From c519201d6a2f41b32c6a0e7821b749da45834cbd Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:07 -0700 Subject: [PATCH 0198/1495] New translations en-US.json (Turkish) --- src/lang/tr-TR.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json index 75a50e6348..d25992ad63 100644 --- a/src/lang/tr-TR.json +++ b/src/lang/tr-TR.json @@ -47,6 +47,7 @@ "app_pvgna": "Bir rehber bulun", "app_pvgna_alt": "Pvgna üzerinde bir Dota 2 rehberi bulun", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Maç Geçmişini Yenile: Gizlilik ayarından dolayı görünmeyen maçları aramayı sıraya sok", "app_refresh_label": "Yenile", "app_login": "Oturum aç", From efd3968c5bb1795d38d848be10a7942cb9bfab34 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:10 -0700 Subject: [PATCH 0199/1495] New translations en-US.json (Swedish) --- src/lang/sv-SE.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/sv-SE.json b/src/lang/sv-SE.json index 6e920423a2..880e74ac12 100644 --- a/src/lang/sv-SE.json +++ b/src/lang/sv-SE.json @@ -47,6 +47,7 @@ "app_pvgna": "Hitta en guide", "app_pvgna_alt": "Hitta en Dota 2 Guide på Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Stal Aegis", "app_refresh_label": "Uppdatera", "app_login": "Logga in", From b86a162caf9d5856459c72109c1fef1790f94407 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:13 -0700 Subject: [PATCH 0200/1495] New translations en-US.json (Spanish, United States) --- src/lang/es-US.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/es-US.json b/src/lang/es-US.json index 644f416f28..dba3948480 100644 --- a/src/lang/es-US.json +++ b/src/lang/es-US.json @@ -47,6 +47,7 @@ "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Actualizar Historial de Partidas: Añade a la cola una búsqueda para encontrar partidas que faltan debido a la configuración de privacidad", "app_refresh_label": "Refresh", "app_login": "Iniciar sesión", From eb9522fcf7bbc5ebd6fe1168738668796df094e8 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:15 -0700 Subject: [PATCH 0201/1495] New translations en-US.json (Spanish, Peru) --- src/lang/es-PE.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/es-PE.json b/src/lang/es-PE.json index ba8ec91245..70f73d4d4b 100644 --- a/src/lang/es-PE.json +++ b/src/lang/es-PE.json @@ -47,6 +47,7 @@ "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Actualizar Historial de Partidas: Añade a la cola una búsqueda para encontrar partidas que faltan debido a la configuración de privacidad", "app_refresh_label": "Refresh", "app_login": "Iniciar sesión", From a1e3bc3db8b07aed3263856026f13fbe28626765 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:18 -0700 Subject: [PATCH 0202/1495] New translations en-US.json (Spanish) --- src/lang/es-ES.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/es-ES.json b/src/lang/es-ES.json index f008097071..f1691e665c 100644 --- a/src/lang/es-ES.json +++ b/src/lang/es-ES.json @@ -47,6 +47,7 @@ "app_pvgna": "Encuentre una guía", "app_pvgna_alt": "Encontrar una guía de Dota 2 en Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Actualizar Historial de Partidas: Añade a la cola una búsqueda para encontrar partidas que faltan debido a la configuración de privacidad", "app_refresh_label": "Actualizar", "app_login": "Iniciar sesión", From 5ae08c2bdd6bfb02d010de8c38802f382a124b2a Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:21 -0700 Subject: [PATCH 0203/1495] New translations en-US.json (Slovak) --- src/lang/sk-SK.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/sk-SK.json b/src/lang/sk-SK.json index fd4cf5d329..96f8515a54 100644 --- a/src/lang/sk-SK.json +++ b/src/lang/sk-SK.json @@ -47,6 +47,7 @@ "app_pvgna": "Nájsť návod", "app_pvgna_alt": "Nájsť návod na Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "Obnoviť", "app_login": "Prihlásiť sa", From 21b18acf6f543acb464cfc1f7e4436c087b5b1e3 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:24 -0700 Subject: [PATCH 0204/1495] New translations en-US.json (Serbian (Cyrillic)) --- src/lang/sr-SP.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/sr-SP.json b/src/lang/sr-SP.json index 4128b561a6..e65c6611de 100644 --- a/src/lang/sr-SP.json +++ b/src/lang/sr-SP.json @@ -47,6 +47,7 @@ "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "Refresh", "app_login": "Login", From 3d403699a80a1960c41a4a2bb8368879fb307dde Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:27 -0700 Subject: [PATCH 0205/1495] New translations en-US.json (Romanian) --- src/lang/ro-RO.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/ro-RO.json b/src/lang/ro-RO.json index ff19bd9208..073a4df8ce 100644 --- a/src/lang/ro-RO.json +++ b/src/lang/ro-RO.json @@ -47,6 +47,7 @@ "app_pvgna": "Găsiţi un ghid", "app_pvgna_alt": "Găsiţi un ghid de Dota 2 pe Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Actualizare istoric meciuri: Începeți o scanare pentru a găsi meciurile lipsă din cauza setărilor de confidenţialitate", "app_refresh_label": "Actualizează", "app_login": "Autentificare", From c2a675705c1c21c495ea9bf9a421aec2d12d88e3 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:30 -0700 Subject: [PATCH 0206/1495] New translations en-US.json (Portuguese, Brazilian) --- src/lang/pt-BR.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index ece6ba71a2..033e30a55a 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -47,6 +47,7 @@ "app_pvgna": "Encontre um guia", "app_pvgna_alt": "Encontre um guia de Dota 2 na Pvgna", "app_rivalry": "Apostar em partidas profissionais", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Atualizar o Histórico de Partidas: Agendar uma varredura para encontrar as partidas que faltam devido às configurações de privacidade", "app_refresh_label": "Atualizar", "app_login": "Entrar", From 71c5b8d6a789edc1ca4af0c1729765cfc8307e22 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:33 -0700 Subject: [PATCH 0207/1495] New translations en-US.json (Portuguese) --- src/lang/pt-PT.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/pt-PT.json b/src/lang/pt-PT.json index d2f3355f0c..16b1989c2a 100644 --- a/src/lang/pt-PT.json +++ b/src/lang/pt-PT.json @@ -47,6 +47,7 @@ "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "Refresh", "app_login": "Login", From 1d50f8c3c2e52f8c3b04ee47151553a5a0507e8b Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:36 -0700 Subject: [PATCH 0208/1495] New translations en-US.json (Polish) --- src/lang/pl-PL.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/pl-PL.json b/src/lang/pl-PL.json index 16f6c7b713..212957a368 100644 --- a/src/lang/pl-PL.json +++ b/src/lang/pl-PL.json @@ -47,6 +47,7 @@ "app_pvgna": "Znajdź podręcznik", "app_pvgna_alt": "Znajdź poradnik Dota 2 na Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Odśwież historię meczu - zakolejkuj skan by odnaleźć brakujące mecze niewidoczne z powodu ustawień prywatności", "app_refresh_label": "Odśwież", "app_login": "Zaloguj się", From f5e9924012b961d03b41e1cd11162bc66fd0cc51 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:39 -0700 Subject: [PATCH 0209/1495] New translations en-US.json (Norwegian) --- src/lang/no-NO.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/no-NO.json b/src/lang/no-NO.json index d5b7f026ba..d533468973 100644 --- a/src/lang/no-NO.json +++ b/src/lang/no-NO.json @@ -47,6 +47,7 @@ "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "Refresh", "app_login": "Innlogging", From b07c33b7cb601f682b0d84e837dd6ce8e42bcd9d Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:42 -0700 Subject: [PATCH 0210/1495] New translations en-US.json (Japanese) --- src/lang/ja-JP.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/ja-JP.json b/src/lang/ja-JP.json index bfad83b24e..fcd4791e7d 100644 --- a/src/lang/ja-JP.json +++ b/src/lang/ja-JP.json @@ -47,6 +47,7 @@ "app_pvgna": "ガイドを探す", "app_pvgna_alt": "PvgnaでDota2のガイドを探す", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "マッチ履歴の更新: 未発見のマッチ結果の検索のキューに入れます。", "app_refresh_label": "更新", "app_login": "ログイン", From e13d323504dce256c017fec5006f471855a8a42a Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:45 -0700 Subject: [PATCH 0211/1495] New translations en-US.json (Malay) --- src/lang/ms-MY.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/ms-MY.json b/src/lang/ms-MY.json index 31c2ea178f..87d0c3d6bf 100644 --- a/src/lang/ms-MY.json +++ b/src/lang/ms-MY.json @@ -47,6 +47,7 @@ "app_pvgna": "Cari Panduan", "app_pvgna_alt": "Cari guide Dota 2 di Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Kemaskini Sejarah Perlawanan: Imbas untuk mencari perlawanan yang hilang disebabkan tetapan privasi", "app_refresh_label": "Muat semula", "app_login": "Log masuk", From 65d00817eca3512d982f769e7f6e5943712c29e7 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:48 -0700 Subject: [PATCH 0212/1495] New translations en-US.json (Hungarian) --- src/lang/hu-HU.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/hu-HU.json b/src/lang/hu-HU.json index 3913283bef..223ee1519c 100644 --- a/src/lang/hu-HU.json +++ b/src/lang/hu-HU.json @@ -47,6 +47,7 @@ "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "Refresh", "app_login": "Login", From 4e63b6213a5be8dc40fe87afbb8f3b0e753ddef3 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:51 -0700 Subject: [PATCH 0213/1495] New translations en-US.json (Hebrew) --- src/lang/he-IL.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/he-IL.json b/src/lang/he-IL.json index 641d02ee08..1403c5c2ed 100644 --- a/src/lang/he-IL.json +++ b/src/lang/he-IL.json @@ -47,6 +47,7 @@ "app_pvgna": "מצא מדריך", "app_pvgna_alt": "מצא מדריך ל Dota ב Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "רענון", "app_login": "התחברות", From 1474ad75be6624a88bf4273a2db8ab4c5671e0cf Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:54 -0700 Subject: [PATCH 0214/1495] New translations en-US.json (Greek) --- src/lang/el-GR.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/el-GR.json b/src/lang/el-GR.json index b07217a0da..5208e0880a 100644 --- a/src/lang/el-GR.json +++ b/src/lang/el-GR.json @@ -47,6 +47,7 @@ "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "Refresh", "app_login": "Login", From bf74f8311b7e750ce744cb7cbba3d1eb6044cd8d Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:31:57 -0700 Subject: [PATCH 0215/1495] New translations en-US.json (German) --- src/lang/de-DE.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index bc4b1dd906..9bd14249c8 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -47,6 +47,7 @@ "app_pvgna": "Eine Anleitung finden", "app_pvgna_alt": "Finden Sie eine Dota 2 Anleitung auf Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Aktualisiere Match Verläufe: Fehlende Matches finden, die wegen Privatsphäre Einstellungen blockiert wurden", "app_refresh_label": "Aktuaklisieren", "app_login": "Login", From 2241b69ebb1a6e903af063ff2e751dec86f1dc36 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:32:00 -0700 Subject: [PATCH 0216/1495] New translations en-US.json (French) --- src/lang/fr-FR.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/fr-FR.json b/src/lang/fr-FR.json index 901333c193..9b9e48f471 100644 --- a/src/lang/fr-FR.json +++ b/src/lang/fr-FR.json @@ -47,6 +47,7 @@ "app_pvgna": "Trouver un guide", "app_pvgna_alt": "Chercher un guide Dota 2 sur Pvgna", "app_rivalry": "Parier sur des matchs pro", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Réactualiser l'Historique des Matchs: Faire un scan pour trouver des matchs manquants dûs aux paramètres de confidentialité", "app_refresh_label": "Actualiser", "app_login": "Se connecter", From 95ea73332a5bcc02a58c0f3ed36c9017c761cfd0 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:32:03 -0700 Subject: [PATCH 0217/1495] New translations en-US.json (Finnish) --- src/lang/fi-FI.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/fi-FI.json b/src/lang/fi-FI.json index d68f0d70d8..97f64ce648 100644 --- a/src/lang/fi-FI.json +++ b/src/lang/fi-FI.json @@ -47,6 +47,7 @@ "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Päivitä otteluhistoria: Historia skannataan yksityisyysasetusten takia puuttuvien otteluiden löytämiseksi", "app_refresh_label": "Refresh", "app_login": "Kirjaudu sisään", From 5bf6403460af7395ceabd2f5310a24e6725ad9d0 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:32:06 -0700 Subject: [PATCH 0218/1495] New translations en-US.json (Dutch) --- src/lang/nl-NL.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/nl-NL.json b/src/lang/nl-NL.json index 10caf33c0f..41136d7a07 100644 --- a/src/lang/nl-NL.json +++ b/src/lang/nl-NL.json @@ -47,6 +47,7 @@ "app_pvgna": "Vind een Gids", "app_pvgna_alt": "Vind een Dota 2 Gids op Pugna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Vernieuw match geschiedenis: Plan een scan om de door privacy settings ontbrekende matches te zoeken", "app_refresh_label": "Ververs", "app_login": "Aanmelden", From d71f41eb1e765bd85160f4b8e7385e01332b82f1 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:32:09 -0700 Subject: [PATCH 0219/1495] New translations en-US.json (Danish) --- src/lang/da-DK.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/da-DK.json b/src/lang/da-DK.json index 103bb5a819..82b5350c4d 100644 --- a/src/lang/da-DK.json +++ b/src/lang/da-DK.json @@ -47,6 +47,7 @@ "app_pvgna": "Find en Guide", "app_pvgna_alt": "Find en Dota 2 Guide på Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Opdater Kamphistorie: Sæt en skanning i kø for at finde manglende kampe pga. privatlivsindstillinger", "app_refresh_label": "Opdater", "app_login": "Log ind", From 7431587585b35ea0ef4c651d8bd43394eed744ce Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:32:12 -0700 Subject: [PATCH 0220/1495] New translations en-US.json (Czech) --- src/lang/cs-CZ.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/cs-CZ.json b/src/lang/cs-CZ.json index 9853d93ada..1fca1733cb 100644 --- a/src/lang/cs-CZ.json +++ b/src/lang/cs-CZ.json @@ -47,6 +47,7 @@ "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "Refresh", "app_login": "Přihlásit", From 4e02ca2c377dfadbecb60c0132070277f6437542 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:32:15 -0700 Subject: [PATCH 0221/1495] New translations en-US.json (Chinese Traditional) --- src/lang/zh-TW.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/zh-TW.json b/src/lang/zh-TW.json index 9475cd467f..8625c78cab 100644 --- a/src/lang/zh-TW.json +++ b/src/lang/zh-TW.json @@ -47,6 +47,7 @@ "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "刷新比赛历史:由于打开隐私设定而导致的比赛缺失时可使用此功能刷新。", "app_refresh_label": "Refresh", "app_login": "登陆", From ab73431535cfaa6b28c6799c502087cda40bc1c1 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:32:18 -0700 Subject: [PATCH 0222/1495] New translations en-US.json (Chinese Simplified) --- src/lang/zh-CN.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index d878ff7387..d8f4fd1cdf 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -47,6 +47,7 @@ "app_pvgna": "寻找向导", "app_pvgna_alt": "在 Pvgna 上寻找 Dota 2 指南", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "刷新比赛历史:由于打开隐私设定而导致的比赛缺失时可使用此功能刷新。", "app_refresh_label": "刷新", "app_login": "登陆", From 6d41609ee82a25c12d12bc3219566ac9b520e437 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:32:22 -0700 Subject: [PATCH 0223/1495] New translations en-US.json (Bulgarian) --- src/lang/bg-BG.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/bg-BG.json b/src/lang/bg-BG.json index 6813dd7d63..3f8d98d25b 100644 --- a/src/lang/bg-BG.json +++ b/src/lang/bg-BG.json @@ -47,6 +47,7 @@ "app_pvgna": "Find a Guide", "app_pvgna_alt": "Find a Dota 2 Guide on Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Refresh Match History: Queue a scan to find missing matches due to privacy settings", "app_refresh_label": "Refresh", "app_login": "Вход", From b6694577acfe629b975a408d1d60bff4bf446438 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:32:24 -0700 Subject: [PATCH 0224/1495] New translations en-US.json (Italian) --- src/lang/it-IT.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/it-IT.json b/src/lang/it-IT.json index 568edc6d31..bc28201637 100644 --- a/src/lang/it-IT.json +++ b/src/lang/it-IT.json @@ -47,6 +47,7 @@ "app_pvgna": "Trova una guida", "app_pvgna_alt": "Trova una guida su Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Ricarica Storico Match: Mette in coda una scansione per trovare i match mancanti per colpa delle impostazioni della privacy", "app_refresh_label": "Aggiorna", "app_login": "Login", From 9628013cf515af94d1543c34ea42707cee9173c3 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 2 Apr 2018 23:32:26 -0700 Subject: [PATCH 0225/1495] New translations en-US.json (Vietnamese) --- src/lang/vi-VN.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/vi-VN.json b/src/lang/vi-VN.json index b2bca1372d..afe5a96dd1 100644 --- a/src/lang/vi-VN.json +++ b/src/lang/vi-VN.json @@ -47,6 +47,7 @@ "app_pvgna": "Tìm bài hướng dẫn", "app_pvgna_alt": "Tìm bài hướng dẫn Dota2 tren Pvgna", "app_rivalry": "Bet on Pro Matches", + "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Làm mới lại lịch sử trận đấu: Xếp hàng để quét các trận còn sót do thiết lập bảo mật cá nhân", "app_refresh_label": "Làm mới", "app_login": "Đăng nhập", From 398624727f5c7d83b30def5b3e80439209870457 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 3 Apr 2018 18:10:12 -0700 Subject: [PATCH 0226/1495] New translations en-US.json (Vietnamese) --- src/lang/vi-VN.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/vi-VN.json b/src/lang/vi-VN.json index afe5a96dd1..5a36076c53 100644 --- a/src/lang/vi-VN.json +++ b/src/lang/vi-VN.json @@ -30,7 +30,7 @@ "app_api_docs": "Văn bản API", "app_blog": "Blog", "app_translate": "Dịch", - "app_donate": "Donate", + "app_donate": "Quyên góp", "app_gravitech": "A Gravitech LLC Site", "app_powered_by": "cung cấp bởi", "app_donation_goal": "Mục tiêu quyên góp hàng tháng", From 21264fa30cb92869fd7eed2985542b5a520a5f86 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 5 Apr 2018 04:40:10 -0700 Subject: [PATCH 0227/1495] New translations en-US.json (Portuguese, Brazilian) --- src/lang/pt-BR.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index 033e30a55a..4f4ac03fbd 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -47,7 +47,7 @@ "app_pvgna": "Encontre um guia", "app_pvgna_alt": "Encontre um guia de Dota 2 na Pvgna", "app_rivalry": "Apostar em partidas profissionais", - "app_rivalry_team": "Bet on %s Matches", + "app_rivalry_team": "Aposta em %s partidas", "app_refresh": "Atualizar o Histórico de Partidas: Agendar uma varredura para encontrar as partidas que faltam devido às configurações de privacidade", "app_refresh_label": "Atualizar", "app_login": "Entrar", From 304d7b23ae915c5b3e180f3cd138c02183fe3312 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Thu, 5 Apr 2018 13:51:23 +0200 Subject: [PATCH 0228/1495] fix missing recipe image --- src/components/Visualizations/inflictorWithValue.jsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/components/Visualizations/inflictorWithValue.jsx b/src/components/Visualizations/inflictorWithValue.jsx index 018a444811..9feeac3452 100644 --- a/src/components/Visualizations/inflictorWithValue.jsx +++ b/src/components/Visualizations/inflictorWithValue.jsx @@ -12,6 +12,13 @@ const customNameIcon = { kaya: 'trident', }; +const getInflictorImage = (inflictor) => { + if (inflictor.includes('recipe')) { + return 'recipe'; + } + return customNameIcon[inflictor] || inflictor; +}; + const customImageIcon = ['refresher_shard']; const StyledDiv = styled.div` @@ -217,7 +224,7 @@ export default (inflictor, value, type, ptooltip) => { if (customImageIcon.includes(inflictor)) { image = `/assets/images/dota2/${inflictor}.png`; } else { - image = `${process.env.REACT_APP_API_HOST}/apps/dota2/images/items/${customNameIcon[inflictor] || inflictor}_lg.png`; + image = `${process.env.REACT_APP_API_HOST}/apps/dota2/images/items/${getInflictorImage(inflictor)}_lg.png`; } tooltip = tooltipContainer(item); } else { From 397065dd48030ba19b0e3eb28b3946c64ab7d72c Mon Sep 17 00:00:00 2001 From: Argn0 Date: Fri, 6 Apr 2018 19:31:22 +0200 Subject: [PATCH 0229/1495] scenarios2 --- src/actions/index.js | 3 + src/components/App/App.jsx | 2 + src/components/Header/Header.jsx | 1 + src/components/Scenarios/FormFieldData.js | 24 ++ src/components/Scenarios/Scenarios.jsx | 213 ++++++++++++++++++ src/components/Scenarios/ScenariosColumns.jsx | 80 +++++++ .../Scenarios/ScenariosFormField.jsx | 85 +++++++ src/components/Scenarios/Styles.jsx | 13 ++ src/components/Scenarios/index.js | 3 + src/lang/en-US.json | 10 +- src/reducers/index.js | 3 + src/reducers/reducer.js | 4 +- 12 files changed, 438 insertions(+), 3 deletions(-) create mode 100644 src/components/Scenarios/FormFieldData.js create mode 100644 src/components/Scenarios/Scenarios.jsx create mode 100644 src/components/Scenarios/ScenariosColumns.jsx create mode 100644 src/components/Scenarios/ScenariosFormField.jsx create mode 100644 src/components/Scenarios/Styles.jsx create mode 100644 src/components/Scenarios/index.js diff --git a/src/actions/index.js b/src/actions/index.js index 4c773b4435..bbc5fb11d3 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -63,3 +63,6 @@ export const getPlayerMmr = (accountId, params) => action('playerMmr', process.e export const getPlayerRankings = (accountId, params) => action('playerRankings', process.env.REACT_APP_API_HOST, `api/players/${accountId}/rankings`, params, transformRankings); export * from './requestActions'; export * from './formActions'; +export const getScenariosItemTimings = params => action('scenariosItemTimings', process.env.REACT_APP_API_HOST, 'api/scenarios/itemTimings', params); +export const getScenariosLaneRoles = params => action('scenariosLaneRoles', process.env.REACT_APP_API_HOST, 'api/scenarios/laneRoles', params); +export const getScenariosMisc = params => action('scenariosMisc', process.env.REACT_APP_API_HOST, 'api/scenarios/misc', params); diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index 36934aa6f2..d09af4ff48 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -21,6 +21,7 @@ import Matches from '../Matches'; import Teams from '../Teams'; // import Assistant from '../Assistant'; import Records from '../Records'; +import Scenarios from '../Scenarios'; // import Predictions from '../Predictions'; import Meta from '../Meta'; import Header from '../Header'; @@ -119,6 +120,7 @@ class App extends React.Component { + { location.pathname !== '/' && diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index aee945e539..38660d1ac9 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -29,6 +29,7 @@ const navbarPages = [ {strings.header_heroes}, {strings.header_distributions}, {strings.header_records}, + {strings.header_scenarios}, // Predictions, // Assistant, ]; diff --git a/src/components/Scenarios/FormFieldData.js b/src/components/Scenarios/FormFieldData.js new file mode 100644 index 0000000000..5588110cc7 --- /dev/null +++ b/src/components/Scenarios/FormFieldData.js @@ -0,0 +1,24 @@ +import heroes from 'dotaconstants/build/heroes.json'; +import items from 'dotaconstants/build/items.json'; +import strings from 'lang'; + +export default function getFormFieldData(metadata) { + const { teamScenariosQueryParams, itemCost } = metadata; + + return { + heroList: Object.keys(heroes).map(id => ({ + text: heroes[id] && heroes[id].localized_name, + value: id, + })).sort((a, b) => a.text.localeCompare(b.text)), + + itemList: Object.keys(items).map(k => [items[k], k]).filter(x => x[0].cost >= itemCost).map(x => ({ + text: x[0].dname, + value: x[1], + })) + .sort((a, b) => a.text.localeCompare(b.text)), + + laneRoleList: [1, 2, 3, 4].map(role => ({ text: strings[`lane_role_${role}`], value: role.toString() })), + + miscList: Object.keys(teamScenariosQueryParams).map(scenario => ({ text: scenario, value: scenario })), + }; +} diff --git a/src/components/Scenarios/Scenarios.jsx b/src/components/Scenarios/Scenarios.jsx new file mode 100644 index 0000000000..88dbd37414 --- /dev/null +++ b/src/components/Scenarios/Scenarios.jsx @@ -0,0 +1,213 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; +import strings from 'lang'; +import Table from 'components/Table'; +import ActionSearch from 'material-ui/svg-icons/action/search'; +import { withRouter, Link } from 'react-router-dom'; +import querystring from 'querystring'; +import FlatButton from 'material-ui/FlatButton'; +import MenuItem from 'material-ui/MenuItem'; +import { DropDownMenu } from 'material-ui/DropDownMenu'; +import ScenariosFormField from './ScenariosFormField'; +import getColumns from './ScenariosColumns'; +import { buttonStyle, formFieldStyle } from './Styles'; +import { getScenariosItemTimings, getScenariosMisc, getScenariosLaneRoles } from '../../actions/index'; + + +// placeholder, will be replaced by api call +const metadata = { + timings: [450, 600, 720, 900, 1200, 1500, 1800], + gameDurationBucket: [900, 1800, 2700, 3600, 5400], + itemCost: 2000, + teamScenariosQueryParams: { + pos_chat_1min: 'Positivity in chat before 1 minute', + neg_chat_1min: 'Negativity in chat before 1 minute', + courier_kill: 'Courier Kill before 3 minutes', + first_blood: 'First Blood', + }, +}; + +const minSampleSize = x => x.games > 100; + +const fields = { + itemTimings: ['hero_id', 'item'], + laneRoles: ['hero_id', 'lane_role'], + misc: ['scenario'], +}; + +const menuItems = [{ + text: strings.item_timings, + value: 'itemTimings', +}, +{ + text: strings.heading_lane_role, + value: 'laneRoles', +}, +{ + text: strings.misc, + value: 'misc', +}, +]; + +const reduceRows = (data) => { + if (data.length === 0) { + return data; + } + return [data.reduce((a, b) => ({ + ...a, + games: Number(a.games) + Number(b.games), + wins: Number(a.wins) + Number(b.wins), + }))]; +}; + +class Scenarios extends React.Component { + constructor(props) { + super(props); + + const dropDownValue = this.props.match.params.info || 'itemTimings'; + const params = this.props.location.search.substring(1); + this.state = { + dropDownValue, + formFields: { [dropDownValue]: querystring.parse(params) || null }, + }; + + this.updateFormFieldStates(); + + this.getData = this.getData.bind(this); + this.updateQueryParams = this.updateQueryParams.bind(this); + this.updateFormFieldStates = this.updateFormFieldStates.bind(this); + } + + componentDidMount() { + const { dropDownValue, formFields } = this.state; + if (Object.keys(formFields[dropDownValue]).length > 0) { + this.getData(); + } + } + + getData() { + const { scenariosDispatch } = this.props; + const { dropDownValue, formFields } = this.state; + scenariosDispatch[dropDownValue](formFields[dropDownValue]); + } + + getLink(scenario) { + return ; + } + + handleChange = (event, index, dropDownValue) => { + this.setState({ dropDownValue }, this.updateQueryParams); + } + + updateQueryParams() { + const { formFields, dropDownValue } = this.state; + const { location } = this.props; + this.props.history.push(`${location.pathname}?${querystring.stringify(formFields[dropDownValue])}`); + } + + updateFormFieldStates(newFormFieldState) { + const { dropDownValue, formFields } = this.state; + this.setState({ + formFields: { ...formFields, [dropDownValue]: { ...formFields[dropDownValue], ...newFormFieldState } }, + }, this.updateQueryParams); + } + + render() { + const { scenariosState } = this.props; + const { dropDownValue, formFields } = this.state; + const { data } = scenariosState[dropDownValue]; + return ( +
+ + {menuItems.map(item => ( + + ))} + +
+ {fields[dropDownValue].map(field => ( + + ))} +
+ } + primary + /> +
+ + ); + } +} + +Scenarios.propTypes = { + match: PropTypes.shape({ + params: PropTypes.shape({ info: PropTypes.string }), + }), +}; + +const mapStateToProps = (state) => { + const { + scenariosItemTimings, + scenariosLaneRoles, + scenariosMisc, + } = state.app; + + return { + scenariosState: { + itemTimings: { + data: scenariosItemTimings.data, + loading: scenariosItemTimings.loading, + error: scenariosItemTimings.error, + }, + laneRoles: { + data: scenariosLaneRoles.data, + loading: scenariosLaneRoles.loading, + error: scenariosLaneRoles.error, + }, + misc: { + data: reduceRows(scenariosMisc.data), + loading: scenariosMisc.loading, + error: scenariosMisc.error, + }, + }, + }; +}; + +const mapDispatchToProps = dispatch => ({ + scenariosDispatch: { + itemTimings: params => dispatch(getScenariosItemTimings(params)), + laneRoles: params => dispatch(getScenariosLaneRoles(params)), + misc: params => dispatch(getScenariosMisc(params)), + }, +}); + +Scenarios.propTypes = { + location: PropTypes.shape({ + search: PropTypes.shape({ + substring: PropTypes.string, + }), + }), + history: PropTypes.shape({ + push: PropTypes.func, + }), + scenariosState: PropTypes.shape({}), + scenariosDispatch: PropTypes.shape({}), +}; + +export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Scenarios)); diff --git a/src/components/Scenarios/ScenariosColumns.jsx b/src/components/Scenarios/ScenariosColumns.jsx new file mode 100644 index 0000000000..c3b0e7d176 --- /dev/null +++ b/src/components/Scenarios/ScenariosColumns.jsx @@ -0,0 +1,80 @@ +import strings from 'lang'; +import { transformations, formatSeconds } from 'utility'; +import { inflictorWithValue } from 'components/Visualizations'; + +const computeWinRate = row => (row.wins / row.games); + +const getTimeRange = (field, metadata) => { + let lower; + if (metadata.indexOf(field) !== 0) { + lower = metadata[metadata.indexOf(field) - 1]; + } else { + lower = 0; + } + return `${formatSeconds(lower)} - ${formatSeconds(field)}`; +}; + +const getColumns = (f, metadata) => { + const columns = +{ + itemTimings: [{ + displayName: strings.filter_hero_id, + field: 'hero_id', + sortFn: true, + displayFn: transformations.hero_id, + }, { + displayName: strings.time, + field: 'time', + sortFn: row => row.time, + displayFn: (row, col, field) => getTimeRange(field, metadata.timings), + }, { + displayName: strings.item, + field: 'item', + sortFn: true, + displayFn: (row, col, field) => inflictorWithValue(field), + }, { + displayName: strings.heading_win_rate, + field: 'wins', + sortFn: computeWinRate, + percentBars: true, + }], + + laneRoles: [{ + displayName: strings.filter_hero_id, + field: 'hero_id', + sortFn: true, + displayFn: transformations.hero_id, + }, { + displayName: strings.heading_lane_role, + field: 'lane_role', + sortFn: true, + displayFn: (row, col, field) => strings[`lane_role_${field}`], + }, { + displayName: strings.game_duration, + field: 'time', + sortFn: true, + displayFn: (row, col, field) => getTimeRange(field, metadata.gameDurationBucket), + }, { + displayName: strings.heading_win_rate, + field: 'wins', + sortFn: computeWinRate, + percentBars: true, + }], + + misc: [{ + displayName: strings.scenario, + field: 'scenario', + sortFn: true, + displayFn: (row, col, field) => field, + }, { + displayName: strings.heading_win_rate, + field: 'wins', + sortFn: computeWinRate, + percentBars: true, + }], +}; + + return columns[f]; +}; + +export default getColumns; diff --git a/src/components/Scenarios/ScenariosFormField.jsx b/src/components/Scenarios/ScenariosFormField.jsx new file mode 100644 index 0000000000..02c6649744 --- /dev/null +++ b/src/components/Scenarios/ScenariosFormField.jsx @@ -0,0 +1,85 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import strings from 'lang'; +import AutoComplete from 'material-ui/AutoComplete'; +import getFormFieldData from './FormFieldData'; +import { autoCompleteStyle } from './Styles'; + +const hintText = { + hero_id: strings.filter_hero_id, + item: strings.item, + scenario: strings.scenario, + lane_role: strings.heading_lane_role, +}; + +class ScenarioFormField extends React.Component { + constructor(props) { + super(props); + const { field, formFieldState, metadata } = this.props; + + const { + heroList, itemList, laneRoleList, miscList, + } = getFormFieldData(metadata); + this.dataSources = { + hero_id: heroList, + item: itemList, + lane_role: laneRoleList, + scenario: miscList, + }; + + let searchText = this.dataSources[field].find(el => el.value === formFieldState); + searchText = searchText ? searchText.text : ''; + + this.state = { + searchText, + }; + + this.resetField = this.resetField.bind(this); + this.handleUpdateInput = this.handleUpdateInput.bind(this); + this.handleRequest = this.handleRequest.bind(this); + } + + resetField() { + const { updateFormFieldState, field } = this.props; + this.setState({ searchText: '' }, updateFormFieldState({ [field]: null })); + } + + handleUpdateInput(searchText) { + this.setState({ searchText }); + } + + handleRequest(chosenRequest) { + const { updateFormFieldState, field } = this.props; + updateFormFieldState({ [field]: chosenRequest.value }); + } + + render() { + const { field } = this.props; + const { searchText } = this.state; + return ( +
+ +
+ ); + } +} + +ScenarioFormField.propTypes = { + field: PropTypes.string, + formFieldState: PropTypes.shape({}), + metadata: PropTypes.shape({}), + updateFormFieldState: PropTypes.func, +}; + +export default ScenarioFormField; diff --git a/src/components/Scenarios/Styles.jsx b/src/components/Scenarios/Styles.jsx new file mode 100644 index 0000000000..9120003037 --- /dev/null +++ b/src/components/Scenarios/Styles.jsx @@ -0,0 +1,13 @@ +export const buttonStyle = { + marginTop: '20px', + marginBottom: '20px', +}; + +export const formFieldStyle = { + display: 'flex', + flexWrap: 'wrap', +}; + +export const autoCompleteStyle = { + paddingRight: '20px', +}; diff --git a/src/components/Scenarios/index.js b/src/components/Scenarios/index.js new file mode 100644 index 0000000000..1357214fee --- /dev/null +++ b/src/components/Scenarios/index.js @@ -0,0 +1,3 @@ +import Scenarios from './Scenarios'; + +export default Scenarios; diff --git a/src/lang/en-US.json b/src/lang/en-US.json index 23afc356ae..d4a554d8bd 100644 --- a/src/lang/en-US.json +++ b/src/lang/en-US.json @@ -263,6 +263,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_scenarios": "Scenarios", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -1213,7 +1214,14 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + + "item_timings": "Item Timings", + "misc": "Misc", + "time": "Time", + "item": "Item", + "game_duration": "Game Duration", + "scenario": "Scenario" } diff --git a/src/reducers/index.js b/src/reducers/index.js index c6b680e63d..8b7bda9bc1 100644 --- a/src/reducers/index.js +++ b/src/reducers/index.js @@ -48,4 +48,7 @@ export default combineReducers({ ghPulls: reducer('ghPulls'), form, request, + scenariosItemTimings: reducer('scenariosItemTimings', null, false), + scenariosLaneRoles: reducer('scenariosLaneRoles', null, false), + scenariosMisc: reducer('scenariosMisc', null, false), }); diff --git a/src/reducers/reducer.js b/src/reducers/reducer.js index b222a30eea..520983893d 100644 --- a/src/reducers/reducer.js +++ b/src/reducers/reducer.js @@ -1,5 +1,5 @@ -export default (type, initialData) => (state = { - loading: true, +export default (type, initialData, initialLoading = true) => (state = { + loading: initialLoading, data: initialData || [], }, action) => { switch (action.type) { From b2cd713029852c46046798770342a2dd7b1078b4 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Fri, 6 Apr 2018 19:53:33 +0200 Subject: [PATCH 0230/1495] fix --- src/components/Scenarios/FormFieldData.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Scenarios/FormFieldData.js b/src/components/Scenarios/FormFieldData.js index 5588110cc7..909e250e4d 100644 --- a/src/components/Scenarios/FormFieldData.js +++ b/src/components/Scenarios/FormFieldData.js @@ -19,6 +19,6 @@ export default function getFormFieldData(metadata) { laneRoleList: [1, 2, 3, 4].map(role => ({ text: strings[`lane_role_${role}`], value: role.toString() })), - miscList: Object.keys(teamScenariosQueryParams).map(scenario => ({ text: scenario, value: scenario })), + miscList: Object.keys(teamScenariosQueryParams).map(scenario => ({ text: teamScenariosQueryParams[scenario], value: scenario })), }; } From c7feeb9fada1ae13e36efb8b2fd83f6be24d1b0b Mon Sep 17 00:00:00 2001 From: Argn0 Date: Fri, 6 Apr 2018 21:21:56 +0200 Subject: [PATCH 0231/1495] sample size 200 --- src/components/Scenarios/Scenarios.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Scenarios/Scenarios.jsx b/src/components/Scenarios/Scenarios.jsx index 88dbd37414..5a875cb7bd 100644 --- a/src/components/Scenarios/Scenarios.jsx +++ b/src/components/Scenarios/Scenarios.jsx @@ -28,7 +28,7 @@ const metadata = { }, }; -const minSampleSize = x => x.games > 100; +const minSampleSize = x => x.games > 200; const fields = { itemTimings: ['hero_id', 'item'], From 8f595183c84baa1894432c021177a30cc05c4f7d Mon Sep 17 00:00:00 2001 From: hchung Date: Sat, 7 Apr 2018 00:11:33 -0700 Subject: [PATCH 0232/1495] fix some lint issues --- src/components/Footer/SocialLinks.jsx | 4 ++-- src/components/Form/ChipList.jsx | 2 +- src/components/Header/BurgerMenu/index.jsx | 4 ++-- src/components/Match/Chat/Chat.jsx | 4 ++-- src/components/Match/Overview/Timeline.jsx | 6 +++--- src/components/Match/TeamfightMap/index.jsx | 2 +- src/components/Match/matchColumns.jsx | 14 +++++++------- src/components/Player/Pages/Counts/Counts.jsx | 4 ++-- src/components/Table/Table.jsx | 5 +++-- src/utility/index.jsx | 4 ++-- 10 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/components/Footer/SocialLinks.jsx b/src/components/Footer/SocialLinks.jsx index fdb15d8c6b..d6eb78ca00 100644 --- a/src/components/Footer/SocialLinks.jsx +++ b/src/components/Footer/SocialLinks.jsx @@ -12,9 +12,9 @@ const links = [{ icon: , }]; -export default () => links.map((link, index) => ( +export default () => links.map(link => ( ( deleteChip(name, index, history)} > {chip.text} diff --git a/src/components/Header/BurgerMenu/index.jsx b/src/components/Header/BurgerMenu/index.jsx index 695e78ac07..66e916f23f 100644 --- a/src/components/Header/BurgerMenu/index.jsx +++ b/src/components/Header/BurgerMenu/index.jsx @@ -37,10 +37,10 @@ export default class BurgerMenu extends React.Component { onRequestChange={open => this.setState({ open })} > - {this.props.menuItems.map((item, index) => { + {this.props.menuItems.map((item) => { const linkElement = React.cloneElement(item, { style: { width: '100%', display: 'block' } }); return ( - + {linkElement} ); diff --git a/src/components/Match/Chat/Chat.jsx b/src/components/Match/Chat/Chat.jsx index 1c1639aa2e..97d42c70d9 100644 --- a/src/components/Match/Chat/Chat.jsx +++ b/src/components/Match/Chat/Chat.jsx @@ -511,12 +511,12 @@ class Chat extends React.Component {
  • {strings[`chat_category_${cat}`]}
  • diff --git a/src/components/Table/Table.jsx b/src/components/Table/Table.jsx index 29d3be0fb7..795b852e17 100644 --- a/src/components/Table/Table.jsx +++ b/src/components/Table/Table.jsx @@ -181,9 +181,10 @@ class Table extends React.Component { {columns.map((column, colIndex) => { const { field, color, center, displayFn, relativeBars, percentBars, - percentBarsWithValue, sortFn, invertBarColor, underline, + percentBarsWithValue, invertBarColor, underline, } = column; - const getValue = typeof sortFn === 'function' ? sortFn : null; + const columnSortFn = column.sortFn; + const getValue = typeof columnSortFn === 'function' ? columnSortFn : null; const value = getValue ? getValue(row) : row[field]; const style = { overflow: `${field === 'kills' ? 'visible' : null}`, diff --git a/src/utility/index.jsx b/src/utility/index.jsx index f7093cf91f..bca34df778 100644 --- a/src/utility/index.jsx +++ b/src/utility/index.jsx @@ -626,8 +626,8 @@ export const wilsonScore = (up, down) => { ); }; -export const translateBuildings = (isRadiant, key) => { - const team = isRadiant ? strings.general_radiant : strings.general_dire; +export const translateBuildings = (isRad, key) => { + const team = isRad ? strings.general_radiant : strings.general_dire; const k = key.split('_').slice(3).join('_'); const dict = { fort: ` ${strings.building_ancient}`, From 232e0818286a80bc3540962036e9e7ac5c357145 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Sun, 8 Apr 2018 21:54:59 +0200 Subject: [PATCH 0233/1495] metadata endpoint --- src/components/Scenarios/FormFieldData.js | 4 +- src/components/Scenarios/Scenarios.jsx | 100 +++++++++--------- src/components/Scenarios/ScenariosColumns.jsx | 14 +-- .../Scenarios/ScenariosFormField.jsx | 6 +- src/lang/en-US.json | 16 +-- 5 files changed, 74 insertions(+), 66 deletions(-) diff --git a/src/components/Scenarios/FormFieldData.js b/src/components/Scenarios/FormFieldData.js index 909e250e4d..397f0303cf 100644 --- a/src/components/Scenarios/FormFieldData.js +++ b/src/components/Scenarios/FormFieldData.js @@ -1,6 +1,6 @@ import heroes from 'dotaconstants/build/heroes.json'; import items from 'dotaconstants/build/items.json'; -import strings from 'lang'; +import strings from '../../lang'; export default function getFormFieldData(metadata) { const { teamScenariosQueryParams, itemCost } = metadata; @@ -19,6 +19,6 @@ export default function getFormFieldData(metadata) { laneRoleList: [1, 2, 3, 4].map(role => ({ text: strings[`lane_role_${role}`], value: role.toString() })), - miscList: Object.keys(teamScenariosQueryParams).map(scenario => ({ text: teamScenariosQueryParams[scenario], value: scenario })), + miscList: teamScenariosQueryParams.map(scenario => ({ text: strings[`scenarios_${scenario}`], value: scenario })), }; } diff --git a/src/components/Scenarios/Scenarios.jsx b/src/components/Scenarios/Scenarios.jsx index 5a875cb7bd..02325f689d 100644 --- a/src/components/Scenarios/Scenarios.jsx +++ b/src/components/Scenarios/Scenarios.jsx @@ -1,8 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import strings from 'lang'; -import Table from 'components/Table'; import ActionSearch from 'material-ui/svg-icons/action/search'; import { withRouter, Link } from 'react-router-dom'; import querystring from 'querystring'; @@ -13,22 +11,12 @@ import ScenariosFormField from './ScenariosFormField'; import getColumns from './ScenariosColumns'; import { buttonStyle, formFieldStyle } from './Styles'; import { getScenariosItemTimings, getScenariosMisc, getScenariosLaneRoles } from '../../actions/index'; +import strings from '../../lang'; +import Table from '../Table'; +import Spinner from '../Spinner'; +import Error from '../Error'; - -// placeholder, will be replaced by api call -const metadata = { - timings: [450, 600, 720, 900, 1200, 1500, 1800], - gameDurationBucket: [900, 1800, 2700, 3600, 5400], - itemCost: 2000, - teamScenariosQueryParams: { - pos_chat_1min: 'Positivity in chat before 1 minute', - neg_chat_1min: 'Negativity in chat before 1 minute', - courier_kill: 'Courier Kill before 3 minutes', - first_blood: 'First Blood', - }, -}; - -const minSampleSize = x => x.games > 200; +const minSampleSize = row => row.games > 200; const fields = { itemTimings: ['hero_id', 'item'], @@ -37,7 +25,7 @@ const fields = { }; const menuItems = [{ - text: strings.item_timings, + text: strings.scenarios_item_timings, value: 'itemTimings', }, { @@ -45,7 +33,7 @@ const menuItems = [{ value: 'laneRoles', }, { - text: strings.misc, + text: strings.scenarios_misc, value: 'misc', }, ]; @@ -117,39 +105,49 @@ class Scenarios extends React.Component { const { scenariosState } = this.props; const { dropDownValue, formFields } = this.state; const { data } = scenariosState[dropDownValue]; + const { metadata, metadataLoading, metadataError } = scenariosState.metadata; + return (
    - - {menuItems.map(item => ( - + {metadataError && } + {metadataLoading && } + {!metadataError && !metadataLoading && +
    + + {menuItems.map(item => ( + + ))} + +
    + {fields[dropDownValue].map(field => ( + ))} - -
    - {fields[dropDownValue].map(field => ( - - ))} +
    + } + primary + /> +
    - } - primary - /> -
    + } ); } @@ -166,10 +164,16 @@ const mapStateToProps = (state) => { scenariosItemTimings, scenariosLaneRoles, scenariosMisc, + metadata, } = state.app; return { scenariosState: { + metadata: { + metadata: metadata.data.scenarios, + metadataLoading: metadata.loading, + metadataError: metadata.error, + }, itemTimings: { data: scenariosItemTimings.data, loading: scenariosItemTimings.loading, diff --git a/src/components/Scenarios/ScenariosColumns.jsx b/src/components/Scenarios/ScenariosColumns.jsx index c3b0e7d176..6db6161af4 100644 --- a/src/components/Scenarios/ScenariosColumns.jsx +++ b/src/components/Scenarios/ScenariosColumns.jsx @@ -1,6 +1,6 @@ -import strings from 'lang'; -import { transformations, formatSeconds } from 'utility'; import { inflictorWithValue } from 'components/Visualizations'; +import strings from '../../lang'; +import { transformations, formatSeconds } from '../../utility'; const computeWinRate = row => (row.wins / row.games); @@ -23,12 +23,12 @@ const getColumns = (f, metadata) => { sortFn: true, displayFn: transformations.hero_id, }, { - displayName: strings.time, + displayName: strings.scenarios_time, field: 'time', sortFn: row => row.time, displayFn: (row, col, field) => getTimeRange(field, metadata.timings), }, { - displayName: strings.item, + displayName: strings.scenarios_item, field: 'item', sortFn: true, displayFn: (row, col, field) => inflictorWithValue(field), @@ -50,7 +50,7 @@ const getColumns = (f, metadata) => { sortFn: true, displayFn: (row, col, field) => strings[`lane_role_${field}`], }, { - displayName: strings.game_duration, + displayName: strings.scenarios_game_duration, field: 'time', sortFn: true, displayFn: (row, col, field) => getTimeRange(field, metadata.gameDurationBucket), @@ -62,10 +62,10 @@ const getColumns = (f, metadata) => { }], misc: [{ - displayName: strings.scenario, + displayName: strings.scenarios_scenario, field: 'scenario', sortFn: true, - displayFn: (row, col, field) => field, + displayFn: (row, col, field) => strings[`scenarios_${field}`], }, { displayName: strings.heading_win_rate, field: 'wins', diff --git a/src/components/Scenarios/ScenariosFormField.jsx b/src/components/Scenarios/ScenariosFormField.jsx index 02c6649744..c5ad4ed38d 100644 --- a/src/components/Scenarios/ScenariosFormField.jsx +++ b/src/components/Scenarios/ScenariosFormField.jsx @@ -1,14 +1,14 @@ import React from 'react'; import PropTypes from 'prop-types'; -import strings from 'lang'; import AutoComplete from 'material-ui/AutoComplete'; import getFormFieldData from './FormFieldData'; import { autoCompleteStyle } from './Styles'; +import strings from '../../lang'; const hintText = { hero_id: strings.filter_hero_id, - item: strings.item, - scenario: strings.scenario, + item: strings.scenarios_item, + scenario: strings.scenarios_scenario, lane_role: strings.heading_lane_role, }; diff --git a/src/lang/en-US.json b/src/lang/en-US.json index d4a554d8bd..ebb9d42e43 100644 --- a/src/lang/en-US.json +++ b/src/lang/en-US.json @@ -1216,12 +1216,16 @@ "placement": "Placement", "exclude_turbo_matches": "Exclude Turbo matches", - "item_timings": "Item Timings", - "misc": "Misc", - "time": "Time", - "item": "Item", - "game_duration": "Game Duration", - "scenario": "Scenario" + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } From cfbd6d5e3dfa5057b56994a9317d09529305d786 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 9 Apr 2018 13:50:14 -0700 Subject: [PATCH 0234/1495] New translations en-US.json (Ukrainian) --- src/lang/uk-UA.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lang/uk-UA.json b/src/lang/uk-UA.json index 8629c04b76..72f8ebda46 100644 --- a/src/lang/uk-UA.json +++ b/src/lang/uk-UA.json @@ -9,7 +9,7 @@ "abbr_not_available": "Н/Д", "abbr_pick": "P", "abbr_win": "W", - "abbr_number": "No.", + "abbr_number": "Ні.", "analysis_eff": "Ефективність на лінії", "analysis_farm_drought": "Найменше ДВХ за 5 хвилин", "analysis_skillshot": "Успішних скілшотів", @@ -30,7 +30,7 @@ "app_api_docs": "Документація API", "app_blog": "Блог", "app_translate": "Переклад", - "app_donate": "Donate", + "app_donate": "Підтримати проект", "app_gravitech": "A Gravitech LLC Site", "app_powered_by": "працює на", "app_donation_goal": "Ціль щомісячного пожертвування", @@ -46,7 +46,7 @@ "app_dotacoach": "Запитати Тренера", "app_pvgna": "Шукати керівництво", "app_pvgna_alt": "Знайти гайд на Дота 2 від Pvgna", - "app_rivalry": "Bet on Pro Matches", + "app_rivalry": "Ставки на професійні матчі", "app_rivalry_team": "Bet on %s Matches", "app_refresh": "Оновити історії матчів: Запитати чергу на сканування матчів втрачених через параметри конфіденційності", "app_refresh_label": "Оновити", @@ -109,10 +109,10 @@ "explorer_patch": "Патч", "explorer_min_patch": "Мінімальний Патч", "explorer_max_patch": "Максимальний Патч", - "explorer_min_mmr": "Min MMR", + "explorer_min_mmr": "Мінімальний ММР", "explorer_max_mmr": "Макс MMR", - "explorer_min_rank_tier": "Min Tier", - "explorer_max_rank_tier": "Max Tier", + "explorer_min_rank_tier": "Мінімальний Ранг", + "explorer_max_rank_tier": "Максимальний Ранг", "explorer_player": "Гравець", "explorer_league": "Ліга", "explorer_player_purchased": "Придбань", @@ -129,8 +129,8 @@ "explorer_min_date": "Min Date", "explorer_max_date": "Max Date", "explorer_hero_combos": "Hero Combos", - "explorer_hero_player": "Hero-Player", - "explorer_player_player": "Player-Player", + "explorer_hero_player": "Герой-Гравець", + "explorer_player_player": "Гравець-гравець", "explorer_sql": "SQL", "explorer_postgresql_function": "Функція PostgreSQL", "explorer_table": "Таблиця", @@ -199,7 +199,7 @@ "game_mode_5": "All Random", "game_mode_6": "Intro", "game_mode_7": "Пора Пітьми", - "game_mode_8": "Reverse Captains Mode", + "game_mode_8": "Обернений капітанський режим", "game_mode_9": "Жаднування", "game_mode_10": "Навчання", "game_mode_11": "Mid Only", @@ -278,7 +278,7 @@ "heading_graph_xp": "Досвід", "heading_graph_lh": "Останні удари", "heading_overview": "Огляд", - "heading_ability_draft": "Abilities Drafted", + "heading_ability_draft": "Вибрані здатності", "heading_buildings": "Мапа будівель", "heading_benchmarks": "Контрольні показники", "heading_laning": "Лейнінг", From 17e5435d5a54a7a37d573a333c8181fc94158e89 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Mon, 9 Apr 2018 14:00:19 -0700 Subject: [PATCH 0235/1495] New translations en-US.json (Ukrainian) --- src/lang/uk-UA.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/lang/uk-UA.json b/src/lang/uk-UA.json index 72f8ebda46..94a4750dde 100644 --- a/src/lang/uk-UA.json +++ b/src/lang/uk-UA.json @@ -89,7 +89,7 @@ "distributions_heading_ranks": "Rank Tier Distribution", "distributions_heading_mmr": "Розподіл сольного MMR", "distributions_heading_country_mmr": "Середній сольний MMR по країнам", - "distributions_tab_ranks": "Rank Tiers", + "distributions_tab_ranks": "Рейтингові рівні", "distributions_tab_mmr": "Сольний MMR", "distributions_tab_country_mmr": "Сольний MMR по країнам", "distributions_warning_1": "Цей набір даних обмежується гравцями які відображають MMR у профілі та обмінюються загальними даними матчів.", @@ -145,17 +145,17 @@ "explorer_bar_button": "Bar", "explorer_timeseries_button": "Timeseries", "explorer_chart_unavailable": "Chart not available, try adding a GROUP BY", - "explorer_value": "Value", + "explorer_value": "Цінність", "explorer_category": "Категорія", "explorer_region": "Регіон", "explorer_picks_bans": "Вибори/заборони", - "explorer_counter_picks_bans": "Counter Picks/Bans", + "explorer_counter_picks_bans": "Контр-піки/бани", "explorer_organization": "Organization", "explorer_order": "Замовити", "explorer_asc": "За зростанням", "explorer_desc": "За спаданням", - "explorer_tier": "Tier", - "explorer_having": "At Least This Many Matches", + "explorer_tier": "Ранг", + "explorer_having": "Як мінімум таку кількість матчів", "explorer_limit": "Limit", "explorer_match": "Match", "farm_heroes": "Героїв вбито", @@ -190,7 +190,7 @@ "filter_last_3_months": "Останні 3 місяці", "filter_last_6_months": "Останні 6 місяців", "filter_error": "Будь ласка, виберіть пункт зі списку", - "filter_party_size": "Party Size", + "filter_party_size": "Розмір групи", "game_mode_0": "Невідомо", "game_mode_1": "All Pick", "game_mode_2": "Captains Mode", @@ -204,12 +204,12 @@ "game_mode_10": "Навчання", "game_mode_11": "Mid Only", "game_mode_12": "Least Played", - "game_mode_13": "Limited Heroes", + "game_mode_13": "Обмежений вибір героїв", "game_mode_14": "Compendium", "game_mode_15": "Власний", "game_mode_16": "Captains Draft", "game_mode_17": "Balanced Draft", - "game_mode_18": "Ability Draft", + "game_mode_18": "Вибір здібностей", "game_mode_19": "Захід", "game_mode_20": "All Random Deathmatch", "game_mode_21": "1v1 Solo Mid", @@ -268,7 +268,7 @@ "heading_mmr": "Історія MMR", "heading_peers": "Зіграно з гравцями", "heading_pros": "Зіграно з професійними гравцями", - "heading_rankings": "Hero Rankings", + "heading_rankings": "Рейтинг героїв", "heading_all_matches": "У всіх матчах", "heading_parsed_matches": "В аналізованих матчах", "heading_records": "Рекорди", From 1fc0c7b5cc98b618ea4d5f2fb8f2f3cf7f86c7d6 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Tue, 10 Apr 2018 19:48:54 +0200 Subject: [PATCH 0236/1495] initial queue --- src/components/Scenarios/Scenarios.jsx | 5 +---- src/reducers/index.js | 6 +++--- src/reducers/reducer.js | 4 ++-- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/components/Scenarios/Scenarios.jsx b/src/components/Scenarios/Scenarios.jsx index 02325f689d..7b0f5de7b0 100644 --- a/src/components/Scenarios/Scenarios.jsx +++ b/src/components/Scenarios/Scenarios.jsx @@ -68,10 +68,7 @@ class Scenarios extends React.Component { } componentDidMount() { - const { dropDownValue, formFields } = this.state; - if (Object.keys(formFields[dropDownValue]).length > 0) { - this.getData(); - } + this.getData(); } getData() { diff --git a/src/reducers/index.js b/src/reducers/index.js index 8b7bda9bc1..62ff047c84 100644 --- a/src/reducers/index.js +++ b/src/reducers/index.js @@ -48,7 +48,7 @@ export default combineReducers({ ghPulls: reducer('ghPulls'), form, request, - scenariosItemTimings: reducer('scenariosItemTimings', null, false), - scenariosLaneRoles: reducer('scenariosLaneRoles', null, false), - scenariosMisc: reducer('scenariosMisc', null, false), + scenariosItemTimings: reducer('scenariosItemTimings'), + scenariosLaneRoles: reducer('scenariosLaneRoles'), + scenariosMisc: reducer('scenariosMisc'), }); diff --git a/src/reducers/reducer.js b/src/reducers/reducer.js index 520983893d..b222a30eea 100644 --- a/src/reducers/reducer.js +++ b/src/reducers/reducer.js @@ -1,5 +1,5 @@ -export default (type, initialData, initialLoading = true) => (state = { - loading: initialLoading, +export default (type, initialData) => (state = { + loading: true, data: initialData || [], }, action) => { switch (action.type) { From 75f25680025ec8e65fa603e97bb6fd93e8d8cc3a Mon Sep 17 00:00:00 2001 From: Argn0 Date: Thu, 12 Apr 2018 14:49:38 +0200 Subject: [PATCH 0237/1495] changes --- public/assets/images/dota2/lane_roles.svg | 11 +++++ src/components/Explorer/index.jsx | 2 + src/components/Meta/index.jsx | 2 + src/components/Scenarios/Scenarios.jsx | 43 ++++++++++--------- src/components/Scenarios/ScenariosColumns.jsx | 12 +++--- src/components/Scenarios/Styles.jsx | 14 ++++++ src/lang/en-US.json | 1 + 7 files changed, 59 insertions(+), 26 deletions(-) create mode 100644 public/assets/images/dota2/lane_roles.svg diff --git a/public/assets/images/dota2/lane_roles.svg b/public/assets/images/dota2/lane_roles.svg new file mode 100644 index 0000000000..490183aa3f --- /dev/null +++ b/public/assets/images/dota2/lane_roles.svg @@ -0,0 +1,11 @@ + + + + Layer 1 + + + + + + + \ No newline at end of file diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 0d0e2d22f8..a5b297514d 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -5,6 +5,7 @@ import { connect } from 'react-redux'; import fetch from 'isomorphic-fetch'; import RaisedButton from 'material-ui/RaisedButton'; +import ActionSearch from 'material-ui/svg-icons/action/search'; import Helmet from 'react-helmet'; import querystring from 'querystring'; import json2csv from 'json2csv'; @@ -223,6 +224,7 @@ class Explorer extends React.Component { primary={!this.state.loading} secondary={this.state.loading} style={{ margin: '5px' }} + icon={!this.state.loading ? : null} label={this.state.loading ? strings.explorer_cancel_button : strings.explorer_query_button} onClick={this.state.loading ? handleCancel : handleQuery} /> diff --git a/src/components/Meta/index.jsx b/src/components/Meta/index.jsx index 7c581fbc99..76497d8f63 100644 --- a/src/components/Meta/index.jsx +++ b/src/components/Meta/index.jsx @@ -4,6 +4,7 @@ import { connect } from 'react-redux'; import fetch from 'isomorphic-fetch'; import RaisedButton from 'material-ui/RaisedButton'; +import ActionSearch from 'material-ui/svg-icons/action/search'; import Helmet from 'react-helmet'; import querystring from 'querystring'; import Spinner from '../Spinner'; @@ -125,6 +126,7 @@ class Explorer extends React.Component { primary={!this.state.loading} secondary={this.state.loading} style={{ margin: '5px' }} + icon={!this.state.loading ? : null} label={this.state.loading ? strings.explorer_cancel_button : strings.explorer_query_button} onClick={this.state.loading ? handleCancel : handleQuery} /> diff --git a/src/components/Scenarios/Scenarios.jsx b/src/components/Scenarios/Scenarios.jsx index 7b0f5de7b0..267f7f7566 100644 --- a/src/components/Scenarios/Scenarios.jsx +++ b/src/components/Scenarios/Scenarios.jsx @@ -2,19 +2,21 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import ActionSearch from 'material-ui/svg-icons/action/search'; +import Schedule from 'material-ui/svg-icons/action/schedule'; +import Grain from 'material-ui/svg-icons/image/grain'; import { withRouter, Link } from 'react-router-dom'; import querystring from 'querystring'; import FlatButton from 'material-ui/FlatButton'; -import MenuItem from 'material-ui/MenuItem'; -import { DropDownMenu } from 'material-ui/DropDownMenu'; +import { Tabs, Tab } from 'material-ui/Tabs'; import ScenariosFormField from './ScenariosFormField'; import getColumns from './ScenariosColumns'; -import { buttonStyle, formFieldStyle } from './Styles'; +import { buttonStyle, formFieldStyle, StyledDiv, tabsStyle } from './Styles'; import { getScenariosItemTimings, getScenariosMisc, getScenariosLaneRoles } from '../../actions/index'; import strings from '../../lang'; import Table from '../Table'; import Spinner from '../Spinner'; import Error from '../Error'; +import Heading from '../Heading'; const minSampleSize = row => row.games > 200; @@ -27,14 +29,17 @@ const fields = { const menuItems = [{ text: strings.scenarios_item_timings, value: 'itemTimings', + icon: , }, { text: strings.heading_lane_role, value: 'laneRoles', + icon: , }, { text: strings.scenarios_misc, value: 'misc', + icon: , }, ]; @@ -49,6 +54,8 @@ const reduceRows = (data) => { }))]; }; +const getLink = scenario => ; + class Scenarios extends React.Component { constructor(props) { super(props); @@ -77,11 +84,7 @@ class Scenarios extends React.Component { scenariosDispatch[dropDownValue](formFields[dropDownValue]); } - getLink(scenario) { - return ; - } - - handleChange = (event, index, dropDownValue) => { + handleChange = (dropDownValue) => { this.setState({ dropDownValue }, this.updateQueryParams); } @@ -103,18 +106,18 @@ class Scenarios extends React.Component { const { dropDownValue, formFields } = this.state; const { data } = scenariosState[dropDownValue]; const { metadata, metadataLoading, metadataError } = scenariosState.metadata; - return ( -
    + {metadataError && } {metadataLoading && } {!metadataError && !metadataLoading &&
    - + + {menuItems.map(item => ( - + ))} - +
    {fields[dropDownValue].map(field => ( } primary /> + {!scenariosState[dropDownValue].loading && + + }
    } - + ); } } -Scenarios.propTypes = { - match: PropTypes.shape({ - params: PropTypes.shape({ info: PropTypes.string }), - }), -}; - const mapStateToProps = (state) => { const { scenariosItemTimings, @@ -199,6 +199,9 @@ const mapDispatchToProps = dispatch => ({ }); Scenarios.propTypes = { + match: PropTypes.shape({ + params: PropTypes.shape({ info: PropTypes.string }), + }), location: PropTypes.shape({ search: PropTypes.shape({ substring: PropTypes.string, diff --git a/src/components/Scenarios/ScenariosColumns.jsx b/src/components/Scenarios/ScenariosColumns.jsx index 6db6161af4..b2bd034859 100644 --- a/src/components/Scenarios/ScenariosColumns.jsx +++ b/src/components/Scenarios/ScenariosColumns.jsx @@ -34,9 +34,9 @@ const getColumns = (f, metadata) => { displayFn: (row, col, field) => inflictorWithValue(field), }, { displayName: strings.heading_win_rate, - field: 'wins', + field: 'games', sortFn: computeWinRate, - percentBars: true, + percentBarsWithValue: row => row.games, }], laneRoles: [{ @@ -56,9 +56,9 @@ const getColumns = (f, metadata) => { displayFn: (row, col, field) => getTimeRange(field, metadata.gameDurationBucket), }, { displayName: strings.heading_win_rate, - field: 'wins', + field: 'games', sortFn: computeWinRate, - percentBars: true, + percentBarsWithValue: row => row.games, }], misc: [{ @@ -68,9 +68,9 @@ const getColumns = (f, metadata) => { displayFn: (row, col, field) => strings[`scenarios_${field}`], }, { displayName: strings.heading_win_rate, - field: 'wins', + field: 'games', sortFn: computeWinRate, - percentBars: true, + percentBarsWithValue: row => row.games, }], }; diff --git a/src/components/Scenarios/Styles.jsx b/src/components/Scenarios/Styles.jsx index 9120003037..47c99bfdb2 100644 --- a/src/components/Scenarios/Styles.jsx +++ b/src/components/Scenarios/Styles.jsx @@ -1,3 +1,12 @@ +import styled from 'styled-components'; + +export const StyledDiv = styled.div` + & small { + font-size: xx-small !important; + } +} +`; + export const buttonStyle = { marginTop: '20px', marginBottom: '20px', @@ -11,3 +20,8 @@ export const formFieldStyle = { export const autoCompleteStyle = { paddingRight: '20px', }; + +export const tabsStyle = { + paddingBottom: '50px', + paddingTop: '10px', +}; diff --git a/src/lang/en-US.json b/src/lang/en-US.json index ebb9d42e43..f4c08f71b2 100644 --- a/src/lang/en-US.json +++ b/src/lang/en-US.json @@ -1216,6 +1216,7 @@ "placement": "Placement", "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Combination of factors that are present in a match", "scenarios_item_timings": "Item Timings", "scenarios_misc": "Misc", "scenarios_time": "Time", From 7a0aeb270a2132dd7e2a34a93da7d44c6128c1d4 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Thu, 12 Apr 2018 15:03:12 +0200 Subject: [PATCH 0238/1495] initialquery on tab change --- src/components/Scenarios/Scenarios.jsx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/components/Scenarios/Scenarios.jsx b/src/components/Scenarios/Scenarios.jsx index 267f7f7566..69e0c2925a 100644 --- a/src/components/Scenarios/Scenarios.jsx +++ b/src/components/Scenarios/Scenarios.jsx @@ -84,8 +84,18 @@ class Scenarios extends React.Component { scenariosDispatch[dropDownValue](formFields[dropDownValue]); } + initialQuery() { + const { scenariosState } = this.props; + const { dropDownValue } = this.state; + const { data } = scenariosState[dropDownValue]; + if (scenariosState[dropDownValue].loading && data.length === 0){ + this.getData() + } + this.updateQueryParams() + } + handleChange = (dropDownValue) => { - this.setState({ dropDownValue }, this.updateQueryParams); + this.setState({ dropDownValue }, this.initialQuery); } updateQueryParams() { From fdf4c66c7561116d0c12026a03ea746c8c85e686 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Thu, 12 Apr 2018 15:40:28 +0200 Subject: [PATCH 0239/1495] tooltip --- src/components/Scenarios/ScenariosColumns.jsx | 3 +++ src/lang/en-US.json | 1 + 2 files changed, 4 insertions(+) diff --git a/src/components/Scenarios/ScenariosColumns.jsx b/src/components/Scenarios/ScenariosColumns.jsx index b2bd034859..18f3ebe4c3 100644 --- a/src/components/Scenarios/ScenariosColumns.jsx +++ b/src/components/Scenarios/ScenariosColumns.jsx @@ -37,6 +37,7 @@ const getColumns = (f, metadata) => { field: 'games', sortFn: computeWinRate, percentBarsWithValue: row => row.games, + tooltip: strings.tooltip_winrate_samplesize }], laneRoles: [{ @@ -59,6 +60,7 @@ const getColumns = (f, metadata) => { field: 'games', sortFn: computeWinRate, percentBarsWithValue: row => row.games, + tooltip: strings.tooltip_winrate_samplesize }], misc: [{ @@ -71,6 +73,7 @@ const getColumns = (f, metadata) => { field: 'games', sortFn: computeWinRate, percentBarsWithValue: row => row.games, + tooltip: strings.tooltip_winrate_samplesize }], }; diff --git a/src/lang/en-US.json b/src/lang/en-US.json index f4c08f71b2..2e6d851b8e 100644 --- a/src/lang/en-US.json +++ b/src/lang/en-US.json @@ -958,6 +958,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", From ed125c818bf91032f1dd4b310b8dd0e882342098 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Thu, 12 Apr 2018 17:41:05 +0200 Subject: [PATCH 0240/1495] reducerows groupby --- src/components/Scenarios/Scenarios.jsx | 13 +++++++------ src/components/Scenarios/ScenariosColumns.jsx | 6 +++--- src/utility/index.jsx | 16 ++++++++++++++++ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/components/Scenarios/Scenarios.jsx b/src/components/Scenarios/Scenarios.jsx index 69e0c2925a..4f6277606c 100644 --- a/src/components/Scenarios/Scenarios.jsx +++ b/src/components/Scenarios/Scenarios.jsx @@ -17,6 +17,7 @@ import Table from '../Table'; import Spinner from '../Spinner'; import Error from '../Error'; import Heading from '../Heading'; +import { groupByArray } from '../../utility/index'; const minSampleSize = row => row.games > 200; @@ -47,11 +48,11 @@ const reduceRows = (data) => { if (data.length === 0) { return data; } - return [data.reduce((a, b) => ({ + return data.map(scenario => scenario.values.reduce((a, b) => ({ ...a, games: Number(a.games) + Number(b.games), wins: Number(a.wins) + Number(b.wins), - }))]; + }))); }; const getLink = scenario => ; @@ -88,10 +89,10 @@ class Scenarios extends React.Component { const { scenariosState } = this.props; const { dropDownValue } = this.state; const { data } = scenariosState[dropDownValue]; - if (scenariosState[dropDownValue].loading && data.length === 0){ - this.getData() + if (scenariosState[dropDownValue].loading && data.length === 0) { + this.getData(); } - this.updateQueryParams() + this.updateQueryParams(); } handleChange = (dropDownValue) => { @@ -192,7 +193,7 @@ const mapStateToProps = (state) => { error: scenariosLaneRoles.error, }, misc: { - data: reduceRows(scenariosMisc.data), + data: reduceRows(groupByArray(scenariosMisc.data, 'scenario')), loading: scenariosMisc.loading, error: scenariosMisc.error, }, diff --git a/src/components/Scenarios/ScenariosColumns.jsx b/src/components/Scenarios/ScenariosColumns.jsx index 18f3ebe4c3..73a87ff8b7 100644 --- a/src/components/Scenarios/ScenariosColumns.jsx +++ b/src/components/Scenarios/ScenariosColumns.jsx @@ -37,7 +37,7 @@ const getColumns = (f, metadata) => { field: 'games', sortFn: computeWinRate, percentBarsWithValue: row => row.games, - tooltip: strings.tooltip_winrate_samplesize + tooltip: strings.tooltip_winrate_samplesize, }], laneRoles: [{ @@ -60,7 +60,7 @@ const getColumns = (f, metadata) => { field: 'games', sortFn: computeWinRate, percentBarsWithValue: row => row.games, - tooltip: strings.tooltip_winrate_samplesize + tooltip: strings.tooltip_winrate_samplesize, }], misc: [{ @@ -73,7 +73,7 @@ const getColumns = (f, metadata) => { field: 'games', sortFn: computeWinRate, percentBarsWithValue: row => row.games, - tooltip: strings.tooltip_winrate_samplesize + tooltip: strings.tooltip_winrate_samplesize, }], }; diff --git a/src/utility/index.jsx b/src/utility/index.jsx index f7093cf91f..d8f2622c5a 100644 --- a/src/utility/index.jsx +++ b/src/utility/index.jsx @@ -658,5 +658,21 @@ export const groupBy = (xs, key) => return rv; }, {}); +export function groupByArray(xs, key) { + return xs.reduce((rv, x) => { + const v = key instanceof Function ? key(x) : x[key]; + const el = rv.find(r => r && r.key === v); + if (el) { + el.values.push(x); + } else { + rv.push({ + key: v, + values: [x], + }); + } + return rv; + }, []); +} + export const sumValues = f => Object.values(f).reduce((a, b) => a + b); From 2bff74b7dc361d267f0022f7e3f19843556b2dee Mon Sep 17 00:00:00 2001 From: Argn0 Date: Thu, 12 Apr 2018 18:45:09 +0200 Subject: [PATCH 0241/1495] styling --- src/components/Scenarios/ScenariosColumns.jsx | 4 ++-- src/components/Scenarios/ScenariosFormField.jsx | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/components/Scenarios/ScenariosColumns.jsx b/src/components/Scenarios/ScenariosColumns.jsx index 73a87ff8b7..8b9c2dab9a 100644 --- a/src/components/Scenarios/ScenariosColumns.jsx +++ b/src/components/Scenarios/ScenariosColumns.jsx @@ -49,7 +49,7 @@ const getColumns = (f, metadata) => { displayName: strings.heading_lane_role, field: 'lane_role', sortFn: true, - displayFn: (row, col, field) => strings[`lane_role_${field}`], + displayFn: (row, col, field) => strings[`lane_role_${field}`] || field, }, { displayName: strings.scenarios_game_duration, field: 'time', @@ -67,7 +67,7 @@ const getColumns = (f, metadata) => { displayName: strings.scenarios_scenario, field: 'scenario', sortFn: true, - displayFn: (row, col, field) => strings[`scenarios_${field}`], + displayFn: (row, col, field) => strings[`scenarios_${field}`] || field, }, { displayName: strings.heading_win_rate, field: 'games', diff --git a/src/components/Scenarios/ScenariosFormField.jsx b/src/components/Scenarios/ScenariosFormField.jsx index c5ad4ed38d..8dad937193 100644 --- a/src/components/Scenarios/ScenariosFormField.jsx +++ b/src/components/Scenarios/ScenariosFormField.jsx @@ -12,6 +12,10 @@ const hintText = { lane_role: strings.heading_lane_role, }; +const customStyles = { + scenario: { width: '450px' }, +}; + class ScenarioFormField extends React.Component { constructor(props) { super(props); @@ -60,7 +64,9 @@ class ScenarioFormField extends React.Component {
    Date: Thu, 12 Apr 2018 19:53:32 +0200 Subject: [PATCH 0242/1495] more styling --- public/assets/images/dota2/lane_roles.svg | 11 ----------- src/components/App/App.jsx | 2 +- src/components/Icons/LaneRoles.jsx | 23 +++++++++++++++++++++++ src/components/Icons/index.js | 1 + src/components/Scenarios/Scenarios.jsx | 9 ++++----- 5 files changed, 29 insertions(+), 17 deletions(-) delete mode 100644 public/assets/images/dota2/lane_roles.svg create mode 100644 src/components/Icons/LaneRoles.jsx diff --git a/public/assets/images/dota2/lane_roles.svg b/public/assets/images/dota2/lane_roles.svg deleted file mode 100644 index 490183aa3f..0000000000 --- a/public/assets/images/dota2/lane_roles.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - Layer 1 - - - - - - - \ No newline at end of file diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index d09af4ff48..8b5b4afdd8 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -46,7 +46,7 @@ const muiTheme = { }, tabs: { backgroundColor: constants.primarySurfaceColor, - textColor: constants.textColorPrimary, + textColor: constants.colorMuted, selectedTextColor: constants.textColorPrimary, }, button: { height: 38 }, diff --git a/src/components/Icons/LaneRoles.jsx b/src/components/Icons/LaneRoles.jsx new file mode 100644 index 0000000000..376f289af5 --- /dev/null +++ b/src/components/Icons/LaneRoles.jsx @@ -0,0 +1,23 @@ +import React from 'react'; +import styled from 'styled-components'; +import PropTypes from 'prop-types'; + +const icon = (props) => { + const { color } = props.style; + return ( + + + + + + + ); +}; + +export default styled(icon)` +height: 24px; +`; + +icon.propTypes = { + style: PropTypes.shape({}), +}; diff --git a/src/components/Icons/index.js b/src/components/Icons/index.js index 48c5e43993..91ee814d66 100644 --- a/src/components/Icons/index.js +++ b/src/components/Icons/index.js @@ -21,3 +21,4 @@ export { default as IconBackpack } from './Backpack'; export { default as IconDice } from './Dice'; export { default as IconCrystalBall } from './CrystalBall'; export { default as IconCheckCircle } from './CheckCircle'; +export { default as IconLaneRoles } from './LaneRoles'; diff --git a/src/components/Scenarios/Scenarios.jsx b/src/components/Scenarios/Scenarios.jsx index 4f6277606c..2786c14cce 100644 --- a/src/components/Scenarios/Scenarios.jsx +++ b/src/components/Scenarios/Scenarios.jsx @@ -18,6 +18,7 @@ import Spinner from '../Spinner'; import Error from '../Error'; import Heading from '../Heading'; import { groupByArray } from '../../utility/index'; +import { IconLaneRoles } from '../Icons'; const minSampleSize = row => row.games > 200; @@ -32,10 +33,10 @@ const menuItems = [{ value: 'itemTimings', icon: , }, -{ +{// /assets/images/dota2/lane_roles.svg text: strings.heading_lane_role, value: 'laneRoles', - icon: , + icon: , }, { text: strings.scenarios_misc, @@ -150,9 +151,7 @@ class Scenarios extends React.Component { icon={} primary /> - {!scenariosState[dropDownValue].loading && - - } +
    Date: Thu, 12 Apr 2018 22:00:23 +0200 Subject: [PATCH 0243/1495] listStyle --- src/components/Scenarios/ScenariosFormField.jsx | 6 ++---- src/components/Scenarios/Styles.jsx | 7 +++++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/components/Scenarios/ScenariosFormField.jsx b/src/components/Scenarios/ScenariosFormField.jsx index 8dad937193..2021046962 100644 --- a/src/components/Scenarios/ScenariosFormField.jsx +++ b/src/components/Scenarios/ScenariosFormField.jsx @@ -2,7 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import AutoComplete from 'material-ui/AutoComplete'; import getFormFieldData from './FormFieldData'; -import { autoCompleteStyle } from './Styles'; +import { autoCompleteStyle, listStyle } from './Styles'; import strings from '../../lang'; const hintText = { @@ -64,9 +64,7 @@ class ScenarioFormField extends React.Component {
    Date: Fri, 13 Apr 2018 01:35:12 +0200 Subject: [PATCH 0244/1495] tab styling --- src/components/Scenarios/Scenarios.jsx | 2 +- src/components/Scenarios/Styles.jsx | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/components/Scenarios/Scenarios.jsx b/src/components/Scenarios/Scenarios.jsx index 2786c14cce..7757edc6e3 100644 --- a/src/components/Scenarios/Scenarios.jsx +++ b/src/components/Scenarios/Scenarios.jsx @@ -127,7 +127,7 @@ class Scenarios extends React.Component { {menuItems.map(item => ( - + ))}
    diff --git a/src/components/Scenarios/Styles.jsx b/src/components/Scenarios/Styles.jsx index 14b0c4356e..995e1076ec 100644 --- a/src/components/Scenarios/Styles.jsx +++ b/src/components/Scenarios/Styles.jsx @@ -1,9 +1,21 @@ import styled from 'styled-components'; +import constants from '../constants'; export const StyledDiv = styled.div` & small { font-size: xx-small !important; } + .tab:hover { + transition: ${constants.normalTransition} !important; + color: ${constants.colorMutedLight} !important; + svg { + fill: ${constants.colorMutedLight} !important; + line { + transition: ${constants.normalTransition} !important; + stroke: ${constants.colorMutedLight} !important; + } + } + } } `; From a3e3ca366ef72c3d117d1a338efa688aa03963b6 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Fri, 13 Apr 2018 03:26:30 +0000 Subject: [PATCH 0245/1495] update --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index ac31548a61..03bdb5cbb2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3532,9 +3532,9 @@ "integrity": "sha512-Eykn8QhYQFd481Px4obDWxzbIskro9ihUgUmq+NB05Z3av8koVNmwMvJ8VP31y3KS1q5C7BZWdug97NXdUpXnA==" }, "dotaconstants": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/dotaconstants/-/dotaconstants-5.27.0.tgz", - "integrity": "sha512-Q4k7VV6it6/n46GDdz3aZLiMJ5WOvkeR8/JWc2f8cVTUx1HEBZ5866bP5oinrUxbc8L1noHHSTTEujCrxI/aCQ==" + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/dotaconstants/-/dotaconstants-5.28.0.tgz", + "integrity": "sha512-Kwd74cRJq6o8n9ephvJJPn6bXh9gKbtLpxKpyzieTTvi/c1Im/J3130ctMWQ6Xyw6GEatm6Hy+VtpYsdKSfY6g==" }, "dotenv": { "version": "4.0.0", diff --git a/package.json b/package.json index 115ab19d01..4c2d773e49 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "abcolor": "^0.5.5", "core-js": "^2.5.2", "dota2-emoticons": "^1.0.1", - "dotaconstants": "^5.27.0", + "dotaconstants": "^5.28.0", "fuzzy": "^0.1.3", "heatmap.js": "^2.0.5", "history": "^4.7.2", From be43e90f6417db0b0d6639b92f2e33d6d53443de Mon Sep 17 00:00:00 2001 From: Argn0 Date: Fri, 13 Apr 2018 14:52:22 +0200 Subject: [PATCH 0246/1495] styling --- src/components/App/App.jsx | 3 ++- src/components/Scenarios/Styles.jsx | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index 8b5b4afdd8..14f38fe44c 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -45,9 +45,10 @@ const muiTheme = { borderColor: constants.dividerColor, }, tabs: { - backgroundColor: constants.primarySurfaceColor, + backgroundColor: 'transparent', textColor: constants.colorMuted, selectedTextColor: constants.textColorPrimary, + borderBottom: `1px solid ${constants.dividerColor}`, }, button: { height: 38 }, }; diff --git a/src/components/Scenarios/Styles.jsx b/src/components/Scenarios/Styles.jsx index 995e1076ec..13a99362e4 100644 --- a/src/components/Scenarios/Styles.jsx +++ b/src/components/Scenarios/Styles.jsx @@ -34,8 +34,9 @@ export const autoCompleteStyle = { }; export const tabsStyle = { - paddingBottom: '50px', - paddingTop: '10px', + marginBottom: '50px', + marginTop: '10px', + borderBottom: `1px solid ${constants.dividerColor}`, }; export const listStyle = { From 853dfe003396f315881283d678e8ef4183213775 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Fri, 13 Apr 2018 17:22:03 +0200 Subject: [PATCH 0247/1495] styling --- src/components/App/App.jsx | 1 - src/components/Scenarios/ScenariosFormField.jsx | 1 + src/components/Scenarios/Styles.jsx | 6 ++++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index 14f38fe44c..09096be9ab 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -48,7 +48,6 @@ const muiTheme = { backgroundColor: 'transparent', textColor: constants.colorMuted, selectedTextColor: constants.textColorPrimary, - borderBottom: `1px solid ${constants.dividerColor}`, }, button: { height: 38 }, }; diff --git a/src/components/Scenarios/ScenariosFormField.jsx b/src/components/Scenarios/ScenariosFormField.jsx index 2021046962..7b14fa6fb8 100644 --- a/src/components/Scenarios/ScenariosFormField.jsx +++ b/src/components/Scenarios/ScenariosFormField.jsx @@ -73,6 +73,7 @@ class ScenarioFormField extends React.Component { searchText={searchText} onNewRequest={this.handleRequest} style={autoCompleteStyle} + className="autocomplete" />
    ); diff --git a/src/components/Scenarios/Styles.jsx b/src/components/Scenarios/Styles.jsx index 13a99362e4..8cde4672c2 100644 --- a/src/components/Scenarios/Styles.jsx +++ b/src/components/Scenarios/Styles.jsx @@ -2,11 +2,13 @@ import styled from 'styled-components'; import constants from '../constants'; export const StyledDiv = styled.div` - & small { + .autocomplete:hover label { + color: ${constants.colorMutedLight} !important; + } + small { font-size: xx-small !important; } .tab:hover { - transition: ${constants.normalTransition} !important; color: ${constants.colorMutedLight} !important; svg { fill: ${constants.colorMutedLight} !important; From 35b6f5dc44499e56d505ecdbcd57b017391d5ef6 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Sat, 14 Apr 2018 04:30:51 +0200 Subject: [PATCH 0248/1495] column coloration --- src/components/Heroes/columns.jsx | 14 ++++++++++++++ src/components/Table/Styled.jsx | 6 ++++++ src/components/Table/Table.jsx | 15 ++++++++++++++- 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/components/Heroes/columns.jsx b/src/components/Heroes/columns.jsx index f8df8d6102..a11aa33efb 100644 --- a/src/components/Heroes/columns.jsx +++ b/src/components/Heroes/columns.jsx @@ -48,71 +48,85 @@ export default { field: 'pickRate7', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate7, row.matchCount7), + colColor: 'rgba(33, 41, 69, 0.3)', }, { displayName: strings.rank_tier_7, field: 'winRate7', sortFn: true, percentBarsWithValue: row => decimalToCount(row.winRate7, row['7_pick']), + colColor: 'rgba(33, 41, 69, 0.65)', }, { displayName: strings.rank_tier_6, field: 'pickRate6', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate6, row.matchCount6), + colColor: 'rgba(82, 52, 91, 0.3)', }, { displayName: strings.rank_tier_6, field: 'winRate6', sortFn: true, percentBarsWithValue: row => decimalToCount(row.winRate6, row['6_pick']), + colColor: 'rgba(82, 52, 91, 0.65)', }, { displayName: strings.rank_tier_5, field: 'pickRate5', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate5, row.matchCount5), + colColor: 'rgba(84, 60, 26, 0.3)', }, { displayName: strings.rank_tier_5, field: 'winRate5', sortFn: true, percentBarsWithValue: row => decimalToCount(row.winRate5, row['5_pick']), + colColor: 'rgba(84, 60, 26, 0.65)', }, { displayName: strings.rank_tier_4, field: 'pickRate4', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate4, row.matchCount4), + colColor: 'rgba(24, 85, 74, 0.3)', }, { displayName: strings.rank_tier_4, field: 'winRate4', sortFn: true, percentBarsWithValue: row => decimalToCount(row.winRate4, row['4_pick']), + colColor: 'rgba(24, 85, 74, 0.65)', }, { displayName: strings.rank_tier_3, field: 'pickRate3', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate3, row.matchCount3), + colColor: 'rgba(58, 73, 124, 0.3)', }, { displayName: strings.rank_tier_3, field: 'winRate3', sortFn: true, percentBarsWithValue: row => decimalToCount(row.winRate3, row['3_pick']), + colColor: 'rgba(58, 73, 124, 0.65)', }, { displayName: strings.rank_tier_2, field: 'pickRate2', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate2, row.matchCount2), + colColor: 'rgba(114, 79, 49, 0.3)', }, { displayName: strings.rank_tier_2, field: 'winRate2', sortFn: true, percentBarsWithValue: row => decimalToCount(row.winRate2, row['2_pick']), + colColor: 'rgba(114, 79, 49, 0.65)', }, { displayName: strings.rank_tier_1, field: 'pickRate1', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate1, row.matchCount1), + colColor: 'rgba(32, 74, 33, 0.3)', }, { displayName: strings.rank_tier_1, field: 'winRate1', sortFn: true, percentBarsWithValue: row => decimalToCount(row.winRate1, row['1_pick']), + colColor: 'rgba(32, 74, 33, 0.65)', }].map((col, i) => ({ ...col, displayName: i === 0 ? col.displayName : `${col.displayName.substring(0, 2)} ${col.field.startsWith('pick') ? strings.abbr_pick : strings.abbr_win}%`, diff --git a/src/components/Table/Styled.jsx b/src/components/Table/Styled.jsx index 6c226eee94..fcf5175c7a 100644 --- a/src/components/Table/Styled.jsx +++ b/src/components/Table/Styled.jsx @@ -54,6 +54,12 @@ export const StyledBody = styled.div` padding-right: 24px !important; } } + // function for colorizing columns + ${props => props.colColors.map(col => ` + & td:nth-child(${col.index}), th:nth-child(${col.index}) { + background-color: ${col.color} !important; + } + `).join('')} } /* Override material-ui style */ diff --git a/src/components/Table/Table.jsx b/src/components/Table/Table.jsx index 795b852e17..57b060eff1 100644 --- a/src/components/Table/Table.jsx +++ b/src/components/Table/Table.jsx @@ -55,6 +55,19 @@ const toUnderline = (data, row, field, underline) => { const rowStyle = (highlightFn, row) => ({ backgroundColor: highlightFn && highlightFn(row) ? 'rgba(74, 149, 247, 0.038)' : 'none' }); +const compileColColors = (columns) => { + const colColors = []; + columns.forEach((col, i) => { + if (col.colColor) { + colColors.push({ + index: i + 1, + color: col.colColor, + }); + } + }); + return colColors; +}; + const initialState = { currentPage: 0, sortState: '', @@ -151,7 +164,7 @@ class Table extends React.Component { data = data.slice(currentPage * pageLength, (currentPage + 1) * pageLength); } return ( - + {paginated && Date: Sat, 14 Apr 2018 04:33:09 +0200 Subject: [PATCH 0249/1495] column coloration --- src/components/Heroes/columns.jsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/Heroes/columns.jsx b/src/components/Heroes/columns.jsx index a11aa33efb..8ff5553543 100644 --- a/src/components/Heroes/columns.jsx +++ b/src/components/Heroes/columns.jsx @@ -48,7 +48,7 @@ export default { field: 'pickRate7', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate7, row.matchCount7), - colColor: 'rgba(33, 41, 69, 0.3)', + colColor: 'rgba(33, 41, 69, 0.45)', }, { displayName: strings.rank_tier_7, field: 'winRate7', @@ -60,7 +60,7 @@ export default { field: 'pickRate6', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate6, row.matchCount6), - colColor: 'rgba(82, 52, 91, 0.3)', + colColor: 'rgba(82, 52, 91, 0.45)', }, { displayName: strings.rank_tier_6, field: 'winRate6', @@ -72,7 +72,7 @@ export default { field: 'pickRate5', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate5, row.matchCount5), - colColor: 'rgba(84, 60, 26, 0.3)', + colColor: 'rgba(84, 60, 26, 0.45)', }, { displayName: strings.rank_tier_5, field: 'winRate5', @@ -84,7 +84,7 @@ export default { field: 'pickRate4', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate4, row.matchCount4), - colColor: 'rgba(24, 85, 74, 0.3)', + colColor: 'rgba(24, 85, 74, 0.45)', }, { displayName: strings.rank_tier_4, field: 'winRate4', @@ -96,7 +96,7 @@ export default { field: 'pickRate3', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate3, row.matchCount3), - colColor: 'rgba(58, 73, 124, 0.3)', + colColor: 'rgba(58, 73, 124, 0.45)', }, { displayName: strings.rank_tier_3, field: 'winRate3', @@ -108,7 +108,7 @@ export default { field: 'pickRate2', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate2, row.matchCount2), - colColor: 'rgba(114, 79, 49, 0.3)', + colColor: 'rgba(114, 79, 49, 0.45)', }, { displayName: strings.rank_tier_2, field: 'winRate2', @@ -120,7 +120,7 @@ export default { field: 'pickRate1', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate1, row.matchCount1), - colColor: 'rgba(32, 74, 33, 0.3)', + colColor: 'rgba(32, 74, 33, 0.45)', }, { displayName: strings.rank_tier_1, field: 'winRate1', From e9df625d0bc6c1eeffd9adefbf5710b4ccbacbc7 Mon Sep 17 00:00:00 2001 From: morgvanny Date: Fri, 13 Apr 2018 20:03:30 -0700 Subject: [PATCH 0250/1495] rename unsafe lifecycles --- src/components/AccountWidget/AccountWidget.jsx | 2 +- src/components/Announce/Announce.jsx | 2 +- src/components/App/App.jsx | 2 +- src/components/Explorer/ExplorerFormField.jsx | 2 +- src/components/Heatmap/Heatmap.jsx | 4 ++-- src/components/Match/Match.jsx | 2 +- src/components/Match/Vision/index.jsx | 2 +- src/components/Matches/index.jsx | 2 +- src/components/Player/Header/PlayedWith.jsx | 2 +- src/components/Player/Header/PlayerButtons.jsx | 2 +- src/components/Player/Pages/Counts/Counts.jsx | 2 +- src/components/Player/Pages/Heroes/Heroes.jsx | 2 +- src/components/Player/Pages/Histograms/Histograms.jsx | 4 ++-- src/components/Player/Pages/Items/Items.jsx | 2 +- src/components/Player/Pages/MMR/MMR.jsx | 4 ++-- src/components/Player/Pages/Matches/Matches.jsx | 2 +- src/components/Player/Pages/Overview/Overview.jsx | 2 +- src/components/Player/Pages/Peers/Peers.jsx | 2 +- src/components/Player/Pages/Pros/Pros.jsx | 2 +- src/components/Player/Pages/Rankings/Rankings.jsx | 2 +- src/components/Player/Pages/Records/Records.jsx | 2 +- src/components/Player/Pages/Totals/Totals.jsx | 2 +- src/components/Player/Pages/Trends/Trends.jsx | 4 ++-- src/components/Player/Pages/Wardmap/Wardmap.jsx | 4 ++-- src/components/Player/Pages/Wordcloud/Wordcloud.jsx | 4 ++-- src/components/Player/Player.jsx | 2 +- src/components/Player/TableFilterForm/index.jsx | 2 +- src/components/Records/index.jsx | 2 +- src/components/Request/Request.jsx | 2 +- src/components/Search/SearchForm.jsx | 2 +- src/components/Status/Status.jsx | 2 +- src/components/Table/Table.jsx | 2 +- src/components/Team/index.jsx | 2 +- src/components/Wordcloud/Wordcloud.jsx | 2 +- 34 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/components/AccountWidget/AccountWidget.jsx b/src/components/AccountWidget/AccountWidget.jsx index 25e532ac19..150ea65ecc 100644 --- a/src/components/AccountWidget/AccountWidget.jsx +++ b/src/components/AccountWidget/AccountWidget.jsx @@ -70,7 +70,7 @@ const mapDispatchToProps = dispatch => ({ */ class RequestLayer extends React.Component { - componentWillUpdate() { + UNSAFE_componentWillUpdate() { } render() { diff --git a/src/components/Announce/Announce.jsx b/src/components/Announce/Announce.jsx index 2efb49b01f..f46b261836 100644 --- a/src/components/Announce/Announce.jsx +++ b/src/components/Announce/Announce.jsx @@ -127,7 +127,7 @@ class RequestLayer extends React.Component { }; } - componentWillMount() { + UNSAFE_componentWillMount() { this.props.getPulls(this.getDate(5)); } diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index 36934aa6f2..1a8adbfcd0 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -83,7 +83,7 @@ const AdBannerDiv = styled.div` `; class App extends React.Component { - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.location.key !== nextProps.location.key) { window.scrollTo(0, 0); } diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index f05edcf4d5..6123c671fd 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -11,7 +11,7 @@ class ExplorerFormField extends React.Component { this.addChip = this.addChip.bind(this); this.deleteChip = this.deleteChip.bind(this); } - componentWillUpdate(newProps) { + UNSAFE_componentWillUpdate(newProps) { if (this.autocomplete && !this.autocomplete.state.searchText) { const { builderField, builder, fields, diff --git a/src/components/Heatmap/Heatmap.jsx b/src/components/Heatmap/Heatmap.jsx index 7a215e9909..072ba138d7 100644 --- a/src/components/Heatmap/Heatmap.jsx +++ b/src/components/Heatmap/Heatmap.jsx @@ -36,7 +36,7 @@ const drawHeatmap = ({ }; class Heatmap extends Component { - componentWillMount() { + UNSAFE_componentWillMount() { this.id = `a-${uuid.v4()}`; } componentDidMount() { @@ -46,7 +46,7 @@ class Heatmap extends Component { }); drawHeatmap(this.props, this.heatmap); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { drawHeatmap(nextProps, this.heatmap); } diff --git a/src/components/Match/Match.jsx b/src/components/Match/Match.jsx index 06c52131af..512c896804 100644 --- a/src/components/Match/Match.jsx +++ b/src/components/Match/Match.jsx @@ -14,7 +14,7 @@ class RequestLayer extends React.Component { this.props.getPvgnaHeroGuides(); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.matchId !== nextProps.matchId) { this.props.getMatch(nextProps.matchId); } diff --git a/src/components/Match/Vision/index.jsx b/src/components/Match/Vision/index.jsx index 117787aed6..3b76d4722b 100644 --- a/src/components/Match/Vision/index.jsx +++ b/src/components/Match/Vision/index.jsx @@ -136,7 +136,7 @@ class Vision extends React.Component { this.handleViewportChange = _.debounce(50, this.viewportChange); } - componentWillReceiveProps(props) { + UNSAFE_componentWillReceiveProps(props) { this.sliderMax = props.match.duration; } diff --git a/src/components/Matches/index.jsx b/src/components/Matches/index.jsx index e4f5f11fcf..c7b604dc55 100644 --- a/src/components/Matches/index.jsx +++ b/src/components/Matches/index.jsx @@ -119,7 +119,7 @@ class RequestLayer extends React.Component { getData(this.props); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.match.params.matchId !== nextProps.match.params.matchId) { getData(nextProps); } diff --git a/src/components/Player/Header/PlayedWith.jsx b/src/components/Player/Header/PlayedWith.jsx index 54f3994b04..6f350a4ef5 100644 --- a/src/components/Player/Header/PlayedWith.jsx +++ b/src/components/Player/Header/PlayedWith.jsx @@ -26,7 +26,7 @@ class PlayedWith extends React.Component { componentDidMount() { getData(this.props, this); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.playerId !== nextProps.playerId) { getData(nextProps, this); } diff --git a/src/components/Player/Header/PlayerButtons.jsx b/src/components/Player/Header/PlayerButtons.jsx index ef4777b0b7..fc77a3505b 100644 --- a/src/components/Player/Header/PlayerButtons.jsx +++ b/src/components/Player/Header/PlayerButtons.jsx @@ -38,7 +38,7 @@ const Styled = styled.div` } `; class PlayerButtons extends React.Component { - componentWillMount() { + UNSAFE_componentWillMount() { this.setState({ disableRefresh: false }); } diff --git a/src/components/Player/Pages/Counts/Counts.jsx b/src/components/Player/Pages/Counts/Counts.jsx index 1926893f17..175ffeb25e 100644 --- a/src/components/Player/Pages/Counts/Counts.jsx +++ b/src/components/Player/Pages/Counts/Counts.jsx @@ -51,7 +51,7 @@ class RequestLayer extends React.Component { getData(this.props); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.playerId !== nextProps.playerId || this.props.location.key !== nextProps.location.key) { getData(nextProps); } diff --git a/src/components/Player/Pages/Heroes/Heroes.jsx b/src/components/Player/Pages/Heroes/Heroes.jsx index 5b0f41542b..f63c06ef94 100644 --- a/src/components/Player/Pages/Heroes/Heroes.jsx +++ b/src/components/Player/Pages/Heroes/Heroes.jsx @@ -31,7 +31,7 @@ class RequestLayer extends React.Component { getData(this.props); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.playerId !== nextProps.playerId || this.props.location.key !== nextProps.location.key) { getData(nextProps); } diff --git a/src/components/Player/Pages/Histograms/Histograms.jsx b/src/components/Player/Pages/Histograms/Histograms.jsx index 8e13202a91..2828ecf928 100644 --- a/src/components/Player/Pages/Histograms/Histograms.jsx +++ b/src/components/Player/Pages/Histograms/Histograms.jsx @@ -68,11 +68,11 @@ const getData = (props) => { }; class RequestLayer extends React.Component { - componentWillMount() { + UNSAFE_componentWillMount() { getData(this.props); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.playerId !== nextProps.playerId || this.props.location.key !== nextProps.location.key) { getData(nextProps); diff --git a/src/components/Player/Pages/Items/Items.jsx b/src/components/Player/Pages/Items/Items.jsx index d45a078a4b..7f9d107d24 100644 --- a/src/components/Player/Pages/Items/Items.jsx +++ b/src/components/Player/Pages/Items/Items.jsx @@ -31,7 +31,7 @@ class RequestLayer extends React.Component { getData(this.props); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.playerId !== nextProps.playerId || this.props.location.key !== nextProps.location.key) { getData(nextProps); } diff --git a/src/components/Player/Pages/MMR/MMR.jsx b/src/components/Player/Pages/MMR/MMR.jsx index f58a83727c..4efc26853d 100644 --- a/src/components/Player/Pages/MMR/MMR.jsx +++ b/src/components/Player/Pages/MMR/MMR.jsx @@ -34,11 +34,11 @@ const getData = (props) => { }; class RequestLayer extends React.Component { - componentWillMount() { + UNSAFE_componentWillMount() { getData(this.props); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.playerId !== nextProps.playerId || this.props.location.key !== nextProps.location.key) { getData(nextProps); } diff --git a/src/components/Player/Pages/Matches/Matches.jsx b/src/components/Player/Pages/Matches/Matches.jsx index f7baa672de..ab9ccd93cb 100644 --- a/src/components/Player/Pages/Matches/Matches.jsx +++ b/src/components/Player/Pages/Matches/Matches.jsx @@ -32,7 +32,7 @@ class RequestLayer extends React.Component { getData(this.props); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.playerId !== nextProps.playerId || this.props.location.key !== nextProps.location.key) { getData(nextProps); } diff --git a/src/components/Player/Pages/Overview/Overview.jsx b/src/components/Player/Pages/Overview/Overview.jsx index 93dc2b1e4f..2911a9d62f 100644 --- a/src/components/Player/Pages/Overview/Overview.jsx +++ b/src/components/Player/Pages/Overview/Overview.jsx @@ -221,7 +221,7 @@ class RequestLayer extends React.Component { getData(this.props); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.playerId !== nextProps.playerId || this.props.location.key !== nextProps.location.key) { getData(nextProps); } diff --git a/src/components/Player/Pages/Peers/Peers.jsx b/src/components/Player/Pages/Peers/Peers.jsx index b013bbd54c..c58caeeab0 100644 --- a/src/components/Player/Pages/Peers/Peers.jsx +++ b/src/components/Player/Pages/Peers/Peers.jsx @@ -31,7 +31,7 @@ class RequestLayer extends React.Component { getData(this.props); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.playerId !== nextProps.playerId || this.props.location.key !== nextProps.location.key) { getData(nextProps); } diff --git a/src/components/Player/Pages/Pros/Pros.jsx b/src/components/Player/Pages/Pros/Pros.jsx index 88665949e2..708dbe775e 100644 --- a/src/components/Player/Pages/Pros/Pros.jsx +++ b/src/components/Player/Pages/Pros/Pros.jsx @@ -31,7 +31,7 @@ class RequestLayer extends React.Component { getData(this.props); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.playerId !== nextProps.playerId || this.props.location.key !== nextProps.location.key) { getData(nextProps); } diff --git a/src/components/Player/Pages/Rankings/Rankings.jsx b/src/components/Player/Pages/Rankings/Rankings.jsx index effb627b51..4e21605320 100644 --- a/src/components/Player/Pages/Rankings/Rankings.jsx +++ b/src/components/Player/Pages/Rankings/Rankings.jsx @@ -30,7 +30,7 @@ class RequestLayer extends React.Component { getData(this.props); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.playerId !== nextProps.playerId || this.props.location.key !== nextProps.location.key) { getData(this.props); } diff --git a/src/components/Player/Pages/Records/Records.jsx b/src/components/Player/Pages/Records/Records.jsx index 9a08b850cb..a15a9e205c 100644 --- a/src/components/Player/Pages/Records/Records.jsx +++ b/src/components/Player/Pages/Records/Records.jsx @@ -59,7 +59,7 @@ class RequestLayer extends React.Component { getData(this.props); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.playerId !== nextProps.playerId || this.props.location.key !== nextProps.location.key) { getData(nextProps); } diff --git a/src/components/Player/Pages/Totals/Totals.jsx b/src/components/Player/Pages/Totals/Totals.jsx index e1dff3a31c..39ae19a302 100644 --- a/src/components/Player/Pages/Totals/Totals.jsx +++ b/src/components/Player/Pages/Totals/Totals.jsx @@ -81,7 +81,7 @@ class RequestLayer extends React.Component { getData(this.props); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.playerId !== nextProps.playerId || this.props.location.key !== nextProps.location.key) { getData(nextProps); } diff --git a/src/components/Player/Pages/Trends/Trends.jsx b/src/components/Player/Pages/Trends/Trends.jsx index 35a758262b..f2016699eb 100644 --- a/src/components/Player/Pages/Trends/Trends.jsx +++ b/src/components/Player/Pages/Trends/Trends.jsx @@ -54,11 +54,11 @@ const getData = (props) => { }; class RequestLayer extends React.Component { - componentWillMount() { + UNSAFE_componentWillMount() { getData(this.props); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.playerId !== nextProps.playerId || this.props.location.key !== nextProps.location.key) { getData(nextProps); diff --git a/src/components/Player/Pages/Wardmap/Wardmap.jsx b/src/components/Player/Pages/Wardmap/Wardmap.jsx index 9da8494e1d..d1c727666e 100644 --- a/src/components/Player/Pages/Wardmap/Wardmap.jsx +++ b/src/components/Player/Pages/Wardmap/Wardmap.jsx @@ -32,12 +32,12 @@ const getData = (props) => { }; class RequestLayer extends React.Component { - componentWillMount() { + UNSAFE_componentWillMount() { getData(this.props); window.addEventListener('resize', this.props.updateWindowSize); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.playerId !== nextProps.playerId || this.props.location.key !== nextProps.location.key) { getData(nextProps); } diff --git a/src/components/Player/Pages/Wordcloud/Wordcloud.jsx b/src/components/Player/Pages/Wordcloud/Wordcloud.jsx index e6d2d5bd54..36e0ac65f1 100644 --- a/src/components/Player/Pages/Wordcloud/Wordcloud.jsx +++ b/src/components/Player/Pages/Wordcloud/Wordcloud.jsx @@ -11,11 +11,11 @@ const getData = (props) => { }; class RequestLayer extends React.Component { - componentWillMount() { + UNSAFE_componentWillMount() { getData(this.props); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.playerId !== nextProps.playerId || this.props.location.key !== nextProps.location.key) { getData(nextProps); } diff --git a/src/components/Player/Player.jsx b/src/components/Player/Player.jsx index 3ef714b52d..cca5f0ebdf 100644 --- a/src/components/Player/Player.jsx +++ b/src/components/Player/Player.jsx @@ -24,7 +24,7 @@ class RequestLayer extends React.Component { props.getPlayerWinLoss(playerId, props.location.search); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { const props = nextProps; const { playerId } = props.match.params; if (this.props.match.params.playerId !== playerId) { diff --git a/src/components/Player/TableFilterForm/index.jsx b/src/components/Player/TableFilterForm/index.jsx index 592fed8f17..628b040d78 100644 --- a/src/components/Player/TableFilterForm/index.jsx +++ b/src/components/Player/TableFilterForm/index.jsx @@ -57,7 +57,7 @@ class TableFilterForm extends React.Component { getPeers(this.props, this); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (nextProps.playerId !== this.props.playerId) { setShowFormState(nextProps); getPeers(nextProps, this); diff --git a/src/components/Records/index.jsx b/src/components/Records/index.jsx index 4cdd218f19..fe1bda63ad 100644 --- a/src/components/Records/index.jsx +++ b/src/components/Records/index.jsx @@ -55,7 +55,7 @@ class RequestLayer extends React.Component { getData(this.props); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.match.params.info !== nextProps.match.params.info) { getData(nextProps); } diff --git a/src/components/Request/Request.jsx b/src/components/Request/Request.jsx index b5c82a8ac4..6e06bc1823 100644 --- a/src/components/Request/Request.jsx +++ b/src/components/Request/Request.jsx @@ -15,7 +15,7 @@ class Request extends React.Component { this.handleSubmit = this.handleSubmit.bind(this); } - componentWillMount() { + UNSAFE_componentWillMount() { this.setState({ matchId: window.location.hash.slice(1) }); } diff --git a/src/components/Search/SearchForm.jsx b/src/components/Search/SearchForm.jsx index ff398b9b7e..461f8c467f 100644 --- a/src/components/Search/SearchForm.jsx +++ b/src/components/Search/SearchForm.jsx @@ -18,7 +18,7 @@ class SearchForm extends React.Component { this.debouncedSetQuery = this.debouncedSetQuery.bind(this); } - componentWillMount() { + UNSAFE_componentWillMount() { const params = querystring.parse(window.location.search.substring(1)); const { pathname } = window.location; if (params.q && pathname === '/search') { diff --git a/src/components/Status/Status.jsx b/src/components/Status/Status.jsx index 3b7652717f..f184bb0259 100644 --- a/src/components/Status/Status.jsx +++ b/src/components/Status/Status.jsx @@ -31,7 +31,7 @@ const tableStyle = { }; class Status extends React.Component { - componentWillMount() { + UNSAFE_componentWillMount() { this.setState({ result: {}, }); diff --git a/src/components/Table/Table.jsx b/src/components/Table/Table.jsx index 795b852e17..3c93eee0d1 100644 --- a/src/components/Table/Table.jsx +++ b/src/components/Table/Table.jsx @@ -90,7 +90,7 @@ class Table extends React.Component { this.nextPage = this.nextPage.bind(this); this.prevPage = this.prevPage.bind(this); } - componentWillReceiveProps(newProps) { + UNSAFE_componentWillReceiveProps(newProps) { if (newProps.resetTableState) { this.setState(initialState); } diff --git a/src/components/Team/index.jsx b/src/components/Team/index.jsx index ee41bb5a2a..980e9ea8fe 100644 --- a/src/components/Team/index.jsx +++ b/src/components/Team/index.jsx @@ -22,7 +22,7 @@ class Team extends React.Component { getData(this.props); } - componentWillUpdate(nextProps) { + UNSAFE_componentWillUpdate(nextProps) { if (this.props.match.params.teamId !== nextProps.match.params.teamId) { getData(nextProps); } diff --git a/src/components/Wordcloud/Wordcloud.jsx b/src/components/Wordcloud/Wordcloud.jsx index 6bb8c38f83..44e4a01d16 100644 --- a/src/components/Wordcloud/Wordcloud.jsx +++ b/src/components/Wordcloud/Wordcloud.jsx @@ -61,7 +61,7 @@ function updateWordCloud(wordCounts, cloudDomId) { } class Wordcloud extends React.Component { - componentWillMount() { + UNSAFE_componentWillMount() { this.id = `a-${uuid.v4()}`; } componentDidMount() { From 531a447728ecdda3123c6ad33e6afa5a2502df2e Mon Sep 17 00:00:00 2001 From: morgvanny Date: Fri, 13 Apr 2018 20:05:35 -0700 Subject: [PATCH 0251/1495] avoid manually binding this in favor of arrow functions --- src/components/Explorer/ExplorerFormField.jsx | 22 ++++---- src/components/Explorer/index.jsx | 55 ++++++++++--------- src/components/Form/FormField.jsx | 10 ++-- src/components/Header/Dropdown.jsx | 10 ++-- src/components/Localization/index.jsx | 5 +- src/components/Match/Chat/Chat.jsx | 11 ++-- src/components/Match/Laning/index.jsx | 7 ++- src/components/Match/MatchLog.jsx | 11 ++-- src/components/Match/TeamfightMap/index.jsx | 35 +++++------- src/components/Meta/index.jsx | 37 +++++++------ src/components/Request/Request.jsx | 5 +- src/components/Search/SearchForm.jsx | 15 ++--- src/components/Table/Table.jsx | 25 +++++---- .../Visualizations/Graph/MatchGraph.jsx | 11 ++-- 14 files changed, 118 insertions(+), 141 deletions(-) diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index 6123c671fd..494d48b689 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -5,12 +5,6 @@ import DatePicker from 'material-ui/DatePicker'; // import FormField from '../Form/FormField'; class ExplorerFormField extends React.Component { - constructor() { - super(); - this.resetField = this.resetField.bind(this); - this.addChip = this.addChip.bind(this); - this.deleteChip = this.deleteChip.bind(this); - } UNSAFE_componentWillUpdate(newProps) { if (this.autocomplete && !this.autocomplete.state.searchText) { const { @@ -27,7 +21,8 @@ class ExplorerFormField extends React.Component { } } } - resetField() { + + resetField = () => { const { builderField, handleFieldUpdate } = this.props; // Set state on the ref'd component to clear it if (this.autocomplete) { @@ -39,20 +34,23 @@ class ExplorerFormField extends React.Component { this.datepicker.setState({ date: undefined }); } handleFieldUpdate(builderField, undefined); - } - addChip(name, input, limit) { + }; + + addChip = (name, input, limit) => { const currentChips = [].concat(this.props.builder[name] || []); const newChips = [input.key].concat(currentChips).slice(0, limit); this.props.handleFieldUpdate(name, newChips); - } - deleteChip(name, index) { + }; + + deleteChip = (name, index) => { const currentChips = [].concat(this.props.builder[name] || []); const newChips = [ ...currentChips.slice(0, index), ...currentChips.slice(index + 1), ]; this.props.handleFieldUpdate(name, newChips); - } + }; + render() { const { fields, label, builderField, handleFieldUpdate, isDateField, builder, diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 0d0e2d22f8..f4316aa9ce 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -62,15 +62,6 @@ class Explorer extends React.Component { result: {}, builder: urlState, }; - this.instantiateEditor = this.instantiateEditor.bind(this); - this.toggleEditor = this.toggleEditor.bind(this); - this.handleQuery = this.handleQuery.bind(this); - this.handleCancel = this.handleCancel.bind(this); - this.handleResponse = this.handleResponse.bind(this); - this.getSqlString = this.getSqlString.bind(this); - this.buildQuery = this.buildQuery.bind(this); - this.syncWindowHistory = this.syncWindowHistory.bind(this); - this.handleFieldUpdate = this.handleFieldUpdate.bind(this); } componentDidMount() { this.props.dispatchProPlayers(); @@ -80,10 +71,12 @@ class Explorer extends React.Component { getScript('https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.6/ext-language_tools.js', this.instantiateEditor); }); } - getSqlString() { + + getSqlString = () => { return this.editor.getSelectedText() || this.editor.getValue(); - } - instantiateEditor() { + }; + + instantiateEditor = () => { const editor = ace.edit('editor'); editor.setTheme('ace/theme/monokai'); editor.getSession().setMode('ace/mode/sql'); @@ -108,18 +101,21 @@ class Explorer extends React.Component { ...this.state, loadingEditor: false, }); - } - toggleEditor() { + }; + + toggleEditor = () => { this.setState({ ...this.state, showEditor: !this.state.showEditor }); this.editor.renderer.updateFull(); - } - syncWindowHistory() { + }; + + syncWindowHistory = () => { const sqlString = this.getSqlString(); const objectToSerialize = this.state.showEditor ? { sql: sqlString, format: this.state.builder.format } : this.state.builder; const stringToSerialize = `?${querystring.stringify(objectToSerialize)}`; window.history.pushState('', '', stringToSerialize); - } - handleQuery() { + }; + + handleQuery = () => { if (this.state.loadingEditor === true) { return setTimeout(this.handleQuery, 1000); } @@ -130,22 +126,25 @@ class Explorer extends React.Component { this.syncWindowHistory(); const sqlString = this.getSqlString(); return fetch(`${process.env.REACT_APP_API_HOST}/api/explorer?sql=${encodeURIComponent(sqlString)}`).then(jsonResponse).then(this.handleResponse); - } - handleCancel() { + }; + + handleCancel = () => { this.setState({ ...this.state, loading: false, }); window.stop(); - } - handleResponse(json) { + }; + + handleResponse = json => { this.setState({ ...this.state, loading: false, result: json, }); - } - handleFieldUpdate(builderField, value) { + }; + + handleFieldUpdate = (builderField, value) => { this.setState({ ...this.state, builder: { @@ -153,14 +152,16 @@ class Explorer extends React.Component { [builderField]: value, }, }, this.buildQuery); - } - buildQuery() { + }; + + buildQuery = () => { // Note that this will not get expanded data for API-dependent fields (player/league/team) // This is ok if we only need the value prop (e.g. an id to build the query with) const expandedBuilder = expandBuilderState(this.state.builder, fields()); // TODO handle arrays this.editor.setValue(queryTemplate(expandedBuilder)); - } + }; + render() { if (!Object.keys(playerMapping).length) { this.props.proPlayers.forEach((player) => { diff --git a/src/components/Form/FormField.jsx b/src/components/Form/FormField.jsx index 1033c270b4..f299981378 100644 --- a/src/components/Form/FormField.jsx +++ b/src/components/Form/FormField.jsx @@ -45,11 +45,9 @@ class FormField extends React.Component { searchText: '', errorText: '', }; - this.handleSelect = this.handleSelect.bind(this); - this.handleUpdateInput = this.handleUpdateInput.bind(this); } - handleSelect(value, index) { + handleSelect = (value, index) => { const { name, dataSource, @@ -94,14 +92,14 @@ class FormField extends React.Component { this.handleUpdateInput(''); addChip(name, input, limit, history); - } + }; - handleUpdateInput(searchText) { + handleUpdateInput = searchText => { this.setState({ searchText, errorText: '', // clear error when user types }); - } + }; render() { const { diff --git a/src/components/Header/Dropdown.jsx b/src/components/Header/Dropdown.jsx index 605040bce0..2ad5ed5d9a 100644 --- a/src/components/Header/Dropdown.jsx +++ b/src/components/Header/Dropdown.jsx @@ -23,23 +23,21 @@ class Dropdown extends Component { this.state = { open: false, }; - this.handleRequestClose = this.handleRequestClose.bind(this); - this.handleTouchTap = this.handleTouchTap.bind(this); } - handleRequestClose() { + handleRequestClose = () => { this.setState({ open: false, }); - } + }; - handleTouchTap(event) { + handleTouchTap = event => { event.preventDefault(); this.setState({ open: true, anchorEl: event.currentTarget, }); - } + }; render() { const { diff --git a/src/components/Localization/index.jsx b/src/components/Localization/index.jsx index b907d7fe5c..5ce355dc74 100644 --- a/src/components/Localization/index.jsx +++ b/src/components/Localization/index.jsx @@ -47,16 +47,15 @@ class LocalizationMenuItems extends Component { this.state = { open: false, }; - this.handleOnClick = this.handleOnClick.bind(this); } - handleOnClick(event) { + handleOnClick = event => { event.preventDefault(); event.stopPropagation(); this.setState({ open: !this.state.open, }); - } + }; render() { const { open } = this.state; diff --git a/src/components/Match/Chat/Chat.jsx b/src/components/Match/Chat/Chat.jsx index 97d42c70d9..e328f172b5 100644 --- a/src/components/Match/Chat/Chat.jsx +++ b/src/components/Match/Chat/Chat.jsx @@ -329,12 +329,9 @@ class Chat extends React.Component { disabled: () => false, }, }; - - this.filter = this.filter.bind(this); - this.audio = this.audio.bind(this); } - filter(key) { + filter = key => { if (key !== undefined) { this.setState({ ...this.state, [key]: !this.state[key] }); } @@ -363,9 +360,9 @@ class Chat extends React.Component { } return timeDiff; }); - } + }; - audio(key, index) { + audio = (key, index) => { const a = new Audio(`/assets/chatwheel/dota_chatwheel_${key}.wav`); a.play(); this.setState({ @@ -379,7 +376,7 @@ class Chat extends React.Component { clearInterval(i); } }, 500); - } + }; render() { if (!this.messages) { diff --git a/src/components/Match/Laning/index.jsx b/src/components/Match/Laning/index.jsx index fa75886c60..b44bd0b7ad 100644 --- a/src/components/Match/Laning/index.jsx +++ b/src/components/Match/Laning/index.jsx @@ -14,11 +14,12 @@ class Laning extends React.Component { this.state = { selectedPlayer: 0, }; - this.setSelectedPlayer = this.setSelectedPlayer.bind(this); } - setSelectedPlayer(playerSlot) { + + setSelectedPlayer = playerSlot => { this.setState({ ...this.state, selectedPlayer: playerSlot }); - } + }; + render() { const { match } = this.props; return ( diff --git a/src/components/Match/MatchLog.jsx b/src/components/Match/MatchLog.jsx index 45b9b03294..a507c1b812 100644 --- a/src/components/Match/MatchLog.jsx +++ b/src/components/Match/MatchLog.jsx @@ -284,25 +284,22 @@ class MatchLog extends React.Component { text: heroes[player.hero_id] ? heroes[player.hero_id].localized_name : strings.general_no_hero, value: index, })); - - this.addChip = this.addChip.bind(this); - this.deleteChip = this.deleteChip.bind(this); } - addChip(name, input, limit) { + addChip = (name, input, limit) => { const currentChips = this.state[name]; const newChips = [input.value].concat(currentChips).slice(0, limit); this.setState({ [name]: newChips }); - } + }; - deleteChip(name, index) { + deleteChip = (name, index) => { const currentChips = this.state[name]; const newChips = [ ...currentChips.slice(0, index), ...currentChips.slice(index + 1), ]; this.setState({ [name]: newChips }); - } + }; render() { const runeTooltips = Object.keys(strings) diff --git a/src/components/Match/TeamfightMap/index.jsx b/src/components/Match/TeamfightMap/index.jsx index 8e06e0634c..051262bf15 100644 --- a/src/components/Match/TeamfightMap/index.jsx +++ b/src/components/Match/TeamfightMap/index.jsx @@ -370,13 +370,6 @@ const avgPosition = ({ deaths_pos: deathPositions }) => { class TeamfightMap extends Component { constructor(props) { super(); - this.isSelected = this.isSelected.bind(this); - this.onMapClick = this.onMapClick.bind(this); - this.onIconClick = this.onIconClick.bind(this); - this.onTimelineIconClick = this.onTimelineIconClick.bind(this); - this.onTimelineHover = this.onTimelineHover.bind(this); - this.onTeamfightHover = this.onTeamfightHover.bind(this); - this.curriedTeamfightHandler = this.curriedTeamfightHandler.bind(this); const { teamfights = [] } = props; const teamfight = teamfights.length > 0 ? teamfights[0] : null; this.state = { @@ -384,23 +377,23 @@ class TeamfightMap extends Component { }; } - onTimelineIconClick(start) { + onTimelineIconClick = start => { return this.curriedTeamfightHandler(this.onIconClick, start); - } + }; - onTimelineHover(start) { + onTimelineHover = start => { return this.curriedTeamfightHandler(this.onTeamfightHover, start); - } + }; - onTeamfightHover(teamfight) { + onTeamfightHover = teamfight => { return () => { this.setState({ hoveredTeamfight: teamfight, }); }; - } + }; - onIconClick(teamfight) { + onIconClick = teamfight => { return () => { // We do this because we need to prevent the map click event from // being executed. That click event is innaccurate if the actual icon is clicked. @@ -409,9 +402,9 @@ class TeamfightMap extends Component { teamfight, }); }; - } + }; - onMapClick(width) { + onMapClick = width => { return (event) => { const { x: x1, y: y1 } = calculateRelativeXY(event); const { teamfights } = this.props; @@ -435,21 +428,21 @@ class TeamfightMap extends Component { teamfight: newSelection.teamfight, }); }; - } + }; - curriedTeamfightHandler(fn, start) { + curriedTeamfightHandler = (fn, start) => { return (event) => { fn(this.props.teamfights.find(tf => tf.start === start))(event); }; - } + }; isHovered(teamfight = { start: null }) { return this.state.hoveredTeamfight && this.state.hoveredTeamfight.start === teamfight.start; } - isSelected(teamfight = { start: null }) { + isSelected = (teamfight = { start: null }) => { return this.state.teamfight && this.state.teamfight.start === teamfight.start; - } + }; render() { const { teamfights = [], match } = this.props; diff --git a/src/components/Meta/index.jsx b/src/components/Meta/index.jsx index 7c581fbc99..1f56051a29 100644 --- a/src/components/Meta/index.jsx +++ b/src/components/Meta/index.jsx @@ -40,22 +40,18 @@ class Explorer extends React.Component { builder: urlState, sql: '', }; - this.handleQuery = this.handleQuery.bind(this); - this.handleCancel = this.handleCancel.bind(this); - this.handleResponse = this.handleResponse.bind(this); - this.buildQuery = this.buildQuery.bind(this); - this.syncWindowHistory = this.syncWindowHistory.bind(this); - this.handleFieldUpdate = this.handleFieldUpdate.bind(this); } componentDidMount() { this.buildQuery(this.handleQuery); } - syncWindowHistory() { + + syncWindowHistory = () => { const objectToSerialize = this.state.builder; const stringToSerialize = `?${querystring.stringify(objectToSerialize)}`; window.history.pushState('', '', stringToSerialize); - } - handleQuery() { + }; + + handleQuery = () => { this.setState({ ...this.state, loading: true, @@ -63,22 +59,25 @@ class Explorer extends React.Component { this.syncWindowHistory(); const sqlString = this.state.sql; return fetch(`${process.env.REACT_APP_API_HOST}/api/explorer?sql=${encodeURIComponent(sqlString)}`).then(jsonResponse).then(this.handleResponse); - } - handleCancel() { + }; + + handleCancel = () => { this.setState({ ...this.state, loading: false, }); window.stop(); - } - handleResponse(json) { + }; + + handleResponse = json => { this.setState({ ...this.state, loading: false, result: json, }); - } - handleFieldUpdate(builderField, value) { + }; + + handleFieldUpdate = (builderField, value) => { this.setState({ ...this.state, builder: { @@ -86,12 +85,14 @@ class Explorer extends React.Component { [builderField]: value, }, }, this.buildQuery); - } - buildQuery(cb) { + }; + + buildQuery = cb => { const noOp = () => {}; const expandedBuilder = expandBuilderState(this.state.builder, fields()); this.setState({ sql: queryTemplate(expandedBuilder) }, cb || noOp); - } + }; + render() { const { builder } = this.state; const expandedFields = fields(); diff --git a/src/components/Request/Request.jsx b/src/components/Request/Request.jsx index 6e06bc1823..81ffabf92e 100644 --- a/src/components/Request/Request.jsx +++ b/src/components/Request/Request.jsx @@ -12,7 +12,6 @@ class Request extends React.Component { constructor() { super(); this.state = {}; - this.handleSubmit = this.handleSubmit.bind(this); } UNSAFE_componentWillMount() { @@ -25,10 +24,10 @@ class Request extends React.Component { } } - handleSubmit() { + handleSubmit = () => { const { dispatchPostRequest } = this.props; dispatchPostRequest(this.state.matchId); - } + }; render() { const { progress, error, loading } = this.props; diff --git a/src/components/Search/SearchForm.jsx b/src/components/Search/SearchForm.jsx index 461f8c467f..d25f874688 100644 --- a/src/components/Search/SearchForm.jsx +++ b/src/components/Search/SearchForm.jsx @@ -13,9 +13,6 @@ class SearchForm extends React.Component { constructor() { super(); this.state = {}; - this.formSubmit = this.formSubmit.bind(this); - this.handleChange = this.handleChange.bind(this); - this.debouncedSetQuery = this.debouncedSetQuery.bind(this); } UNSAFE_componentWillMount() { @@ -29,18 +26,18 @@ class SearchForm extends React.Component { } } - formSubmit(e) { + formSubmit = e => { const { query } = this.state; e.preventDefault(); this.props.history.push(`/search?q=${query}`); this.props.dispatchSearch(query); - } + }; - debouncedSetQuery() { + debouncedSetQuery = () => { debounce(this.props.dispatchSetQuery, 100); - } + }; - handleChange(e) { + handleChange = e => { const { pathname } = window.location; const { value } = e.target; @@ -51,7 +48,7 @@ class SearchForm extends React.Component { if (pathname === '/search') { this.debouncedSetQuery(value); } - } + }; render() { return ( diff --git a/src/components/Table/Table.jsx b/src/components/Table/Table.jsx index 3c93eee0d1..d99d10db10 100644 --- a/src/components/Table/Table.jsx +++ b/src/components/Table/Table.jsx @@ -85,23 +85,21 @@ class Table extends React.Component { constructor() { super(); this.state = initialState; - this.sortClick = this.sortClick.bind(this); - this.setCurrentPage = this.setCurrentPage.bind(this); - this.nextPage = this.nextPage.bind(this); - this.prevPage = this.prevPage.bind(this); } UNSAFE_componentWillReceiveProps(newProps) { if (newProps.resetTableState) { this.setState(initialState); } } - setCurrentPage(pageNumber) { + + setCurrentPage = pageNumber => { this.setState({ ...this.state, currentPage: pageNumber, }); - } - sortClick(sortField, sortState, sortFn) { + }; + + sortClick = (sortField, sortState, sortFn) => { const { state } = this; this.setState({ ...state, @@ -109,19 +107,22 @@ class Table extends React.Component { sortField, sortFn, }); - } - nextPage() { + }; + + nextPage = () => { this.setState({ ...this.state, currentPage: this.state.currentPage + 1, }); - } - prevPage() { + }; + + prevPage = () => { this.setState({ ...this.state, currentPage: this.state.currentPage - 1, }); - } + }; + render() { const { columns, diff --git a/src/components/Visualizations/Graph/MatchGraph.jsx b/src/components/Visualizations/Graph/MatchGraph.jsx index 6b0a9e0d85..9c8bd63739 100644 --- a/src/components/Visualizations/Graph/MatchGraph.jsx +++ b/src/components/Visualizations/Graph/MatchGraph.jsx @@ -130,22 +130,19 @@ class PlayersGraph extends React.Component { this.state = { hoverHero: null, }; - - this.handleMouseEnter = this.handleMouseEnter.bind(this); - this.handleMouseLeave = this.handleMouseLeave.bind(this); } - handleMouseEnter(o) { + handleMouseEnter = o => { this.setState({ hoverHero: o.dataKey, }); - } + }; - handleMouseLeave() { + handleMouseLeave = () => { this.setState({ hoverHero: null, }); - } + }; render() { const { match, type } = this.props; From 4db5f94c25ba5b178de06c14be3cf5c8db7668e6 Mon Sep 17 00:00:00 2001 From: morgvanny Date: Fri, 13 Apr 2018 20:18:19 -0700 Subject: [PATCH 0252/1495] reorder react component methods to math the ESLint react/sort-comp rule (ordering of the Airbnb style guide) --- src/components/Explorer/ExplorerFormField.jsx | 28 ++--- src/components/Explorer/index.jsx | 100 +++++++++--------- src/components/Heatmap/Heatmap.jsx | 6 +- src/components/Match/Chat/Chat.jsx | 32 +++--- src/components/Match/TeamfightMap/index.jsx | 32 +++--- src/components/Match/Vision/VisionFilter.jsx | 26 ++--- src/components/Match/Vision/index.jsx | 8 +- src/components/Meta/index.jsx | 52 ++++----- .../Player/Pages/Wardmap/Wardmap.jsx | 8 +- src/components/Request/Request.jsx | 8 +- src/components/Search/SearchForm.jsx | 8 +- src/components/Table/Table.jsx | 29 ++--- src/components/Wordcloud/Wordcloud.jsx | 6 +- 13 files changed, 172 insertions(+), 171 deletions(-) diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index 494d48b689..3438abd651 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -22,20 +22,6 @@ class ExplorerFormField extends React.Component { } } - resetField = () => { - const { builderField, handleFieldUpdate } = this.props; - // Set state on the ref'd component to clear it - if (this.autocomplete) { - this.autocomplete.setState({ - searchText: '', - }); - } - if (this.datepicker) { - this.datepicker.setState({ date: undefined }); - } - handleFieldUpdate(builderField, undefined); - }; - addChip = (name, input, limit) => { const currentChips = [].concat(this.props.builder[name] || []); const newChips = [input.key].concat(currentChips).slice(0, limit); @@ -51,6 +37,20 @@ class ExplorerFormField extends React.Component { this.props.handleFieldUpdate(name, newChips); }; + resetField = () => { + const { builderField, handleFieldUpdate } = this.props; + // Set state on the ref'd component to clear it + if (this.autocomplete) { + this.autocomplete.setState({ + searchText: '', + }); + } + if (this.datepicker) { + this.datepicker.setState({ date: undefined }); + } + handleFieldUpdate(builderField, undefined); + }; + render() { const { fields, label, builderField, handleFieldUpdate, isDateField, builder, diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index f4316aa9ce..2a071513de 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -76,6 +76,53 @@ class Explorer extends React.Component { return this.editor.getSelectedText() || this.editor.getValue(); }; + buildQuery = () => { + // Note that this will not get expanded data for API-dependent fields (player/league/team) + // This is ok if we only need the value prop (e.g. an id to build the query with) + const expandedBuilder = expandBuilderState(this.state.builder, fields()); + // TODO handle arrays + this.editor.setValue(queryTemplate(expandedBuilder)); + }; + + handleCancel = () => { + this.setState({ + ...this.state, + loading: false, + }); + window.stop(); + }; + + handleFieldUpdate = (builderField, value) => { + this.setState({ + ...this.state, + builder: { + ...this.state.builder, + [builderField]: value, + }, + }, this.buildQuery); + }; + + handleQuery = () => { + if (this.state.loadingEditor === true) { + return setTimeout(this.handleQuery, 1000); + } + this.setState({ + ...this.state, + loading: true, + }); + this.syncWindowHistory(); + const sqlString = this.getSqlString(); + return fetch(`${process.env.REACT_APP_API_HOST}/api/explorer?sql=${encodeURIComponent(sqlString)}`).then(jsonResponse).then(this.handleResponse); + }; + + handleResponse = json => { + this.setState({ + ...this.state, + loading: false, + result: json, + }); + }; + instantiateEditor = () => { const editor = ace.edit('editor'); editor.setTheme('ace/theme/monokai'); @@ -103,11 +150,6 @@ class Explorer extends React.Component { }); }; - toggleEditor = () => { - this.setState({ ...this.state, showEditor: !this.state.showEditor }); - this.editor.renderer.updateFull(); - }; - syncWindowHistory = () => { const sqlString = this.getSqlString(); const objectToSerialize = this.state.showEditor ? { sql: sqlString, format: this.state.builder.format } : this.state.builder; @@ -115,51 +157,9 @@ class Explorer extends React.Component { window.history.pushState('', '', stringToSerialize); }; - handleQuery = () => { - if (this.state.loadingEditor === true) { - return setTimeout(this.handleQuery, 1000); - } - this.setState({ - ...this.state, - loading: true, - }); - this.syncWindowHistory(); - const sqlString = this.getSqlString(); - return fetch(`${process.env.REACT_APP_API_HOST}/api/explorer?sql=${encodeURIComponent(sqlString)}`).then(jsonResponse).then(this.handleResponse); - }; - - handleCancel = () => { - this.setState({ - ...this.state, - loading: false, - }); - window.stop(); - }; - - handleResponse = json => { - this.setState({ - ...this.state, - loading: false, - result: json, - }); - }; - - handleFieldUpdate = (builderField, value) => { - this.setState({ - ...this.state, - builder: { - ...this.state.builder, - [builderField]: value, - }, - }, this.buildQuery); - }; - - buildQuery = () => { - // Note that this will not get expanded data for API-dependent fields (player/league/team) - // This is ok if we only need the value prop (e.g. an id to build the query with) - const expandedBuilder = expandBuilderState(this.state.builder, fields()); - // TODO handle arrays - this.editor.setValue(queryTemplate(expandedBuilder)); + toggleEditor = () => { + this.setState({ ...this.state, showEditor: !this.state.showEditor }); + this.editor.renderer.updateFull(); }; render() { diff --git a/src/components/Heatmap/Heatmap.jsx b/src/components/Heatmap/Heatmap.jsx index 072ba138d7..c8bf0b5daa 100644 --- a/src/components/Heatmap/Heatmap.jsx +++ b/src/components/Heatmap/Heatmap.jsx @@ -36,9 +36,6 @@ const drawHeatmap = ({ }; class Heatmap extends Component { - UNSAFE_componentWillMount() { - this.id = `a-${uuid.v4()}`; - } componentDidMount() { this.heatmap = h337.create({ container: document.getElementById(this.id), @@ -46,6 +43,9 @@ class Heatmap extends Component { }); drawHeatmap(this.props, this.heatmap); } + UNSAFE_componentWillMount() { + this.id = `a-${uuid.v4()}`; + } UNSAFE_componentWillUpdate(nextProps) { drawHeatmap(nextProps, this.heatmap); } diff --git a/src/components/Match/Chat/Chat.jsx b/src/components/Match/Chat/Chat.jsx index e328f172b5..e56c4db2aa 100644 --- a/src/components/Match/Chat/Chat.jsx +++ b/src/components/Match/Chat/Chat.jsx @@ -331,6 +331,22 @@ class Chat extends React.Component { }; } + audio = (key, index) => { + const a = new Audio(`/assets/chatwheel/dota_chatwheel_${key}.wav`); + a.play(); + this.setState({ + playing: index, + }); + const i = setInterval(() => { + if (a.paused) { + this.setState({ + playing: null, + }); + clearInterval(i); + } + }, 500); + }; + filter = key => { if (key !== undefined) { this.setState({ ...this.state, [key]: !this.state[key] }); @@ -362,22 +378,6 @@ class Chat extends React.Component { }); }; - audio = (key, index) => { - const a = new Audio(`/assets/chatwheel/dota_chatwheel_${key}.wav`); - a.play(); - this.setState({ - playing: index, - }); - const i = setInterval(() => { - if (a.paused) { - this.setState({ - playing: null, - }); - clearInterval(i); - } - }, 500); - }; - render() { if (!this.messages) { this.filter(); diff --git a/src/components/Match/TeamfightMap/index.jsx b/src/components/Match/TeamfightMap/index.jsx index 051262bf15..815555c4f3 100644 --- a/src/components/Match/TeamfightMap/index.jsx +++ b/src/components/Match/TeamfightMap/index.jsx @@ -377,22 +377,6 @@ class TeamfightMap extends Component { }; } - onTimelineIconClick = start => { - return this.curriedTeamfightHandler(this.onIconClick, start); - }; - - onTimelineHover = start => { - return this.curriedTeamfightHandler(this.onTeamfightHover, start); - }; - - onTeamfightHover = teamfight => { - return () => { - this.setState({ - hoveredTeamfight: teamfight, - }); - }; - }; - onIconClick = teamfight => { return () => { // We do this because we need to prevent the map click event from @@ -430,6 +414,22 @@ class TeamfightMap extends Component { }; }; + onTeamfightHover = teamfight => { + return () => { + this.setState({ + hoveredTeamfight: teamfight, + }); + }; + }; + + onTimelineHover = start => { + return this.curriedTeamfightHandler(this.onTeamfightHover, start); + }; + + onTimelineIconClick = start => { + return this.curriedTeamfightHandler(this.onIconClick, start); + }; + curriedTeamfightHandler = (fn, start) => { return (event) => { fn(this.props.teamfights.find(tf => tf.start === start))(event); diff --git a/src/components/Match/Vision/VisionFilter.jsx b/src/components/Match/Vision/VisionFilter.jsx index 2d3e5a088e..a32dd38347 100644 --- a/src/components/Match/Vision/VisionFilter.jsx +++ b/src/components/Match/Vision/VisionFilter.jsx @@ -19,19 +19,6 @@ const data = [ ]; export default class VisionFilter extends React.Component { - playerColumn(playerNumber) { - return { - displayName: , - displayFn: row => ( { - this.props.parent.setPlayer(playerNumber, row.type, checked); - } - } - />), - }; - } - columns(index) { return [ { @@ -52,6 +39,19 @@ export default class VisionFilter extends React.Component { ]; } + playerColumn(playerNumber) { + return { + displayName: , + displayFn: row => ( { + this.props.parent.setPlayer(playerNumber, row.type, checked); + } + } + />), + }; + } + render() { return (
    diff --git a/src/components/Match/Vision/index.jsx b/src/components/Match/Vision/index.jsx index 3b76d4722b..089c26e0c7 100644 --- a/src/components/Match/Vision/index.jsx +++ b/src/components/Match/Vision/index.jsx @@ -136,10 +136,6 @@ class Vision extends React.Component { this.handleViewportChange = _.debounce(50, this.viewportChange); } - UNSAFE_componentWillReceiveProps(props) { - this.sliderMax = props.match.duration; - } - setPlayer(player, type, value) { const newArray = this.state.players[type]; newArray[player] = value; @@ -159,6 +155,10 @@ class Vision extends React.Component { this.setState(newState); } + UNSAFE_componentWillReceiveProps(props) { + this.sliderMax = props.match.duration; + } + computeTick() { const interval = 10 * 60; // every 10 minutes interval return _.rangeStep(interval, 0, this.sliderMax); diff --git a/src/components/Meta/index.jsx b/src/components/Meta/index.jsx index 1f56051a29..5807bf607c 100644 --- a/src/components/Meta/index.jsx +++ b/src/components/Meta/index.jsx @@ -45,20 +45,10 @@ class Explorer extends React.Component { this.buildQuery(this.handleQuery); } - syncWindowHistory = () => { - const objectToSerialize = this.state.builder; - const stringToSerialize = `?${querystring.stringify(objectToSerialize)}`; - window.history.pushState('', '', stringToSerialize); - }; - - handleQuery = () => { - this.setState({ - ...this.state, - loading: true, - }); - this.syncWindowHistory(); - const sqlString = this.state.sql; - return fetch(`${process.env.REACT_APP_API_HOST}/api/explorer?sql=${encodeURIComponent(sqlString)}`).then(jsonResponse).then(this.handleResponse); + buildQuery = cb => { + const noOp = () => {}; + const expandedBuilder = expandBuilderState(this.state.builder, fields()); + this.setState({ sql: queryTemplate(expandedBuilder) }, cb || noOp); }; handleCancel = () => { @@ -69,14 +59,6 @@ class Explorer extends React.Component { window.stop(); }; - handleResponse = json => { - this.setState({ - ...this.state, - loading: false, - result: json, - }); - }; - handleFieldUpdate = (builderField, value) => { this.setState({ ...this.state, @@ -87,10 +69,28 @@ class Explorer extends React.Component { }, this.buildQuery); }; - buildQuery = cb => { - const noOp = () => {}; - const expandedBuilder = expandBuilderState(this.state.builder, fields()); - this.setState({ sql: queryTemplate(expandedBuilder) }, cb || noOp); + handleQuery = () => { + this.setState({ + ...this.state, + loading: true, + }); + this.syncWindowHistory(); + const sqlString = this.state.sql; + return fetch(`${process.env.REACT_APP_API_HOST}/api/explorer?sql=${encodeURIComponent(sqlString)}`).then(jsonResponse).then(this.handleResponse); + }; + + handleResponse = json => { + this.setState({ + ...this.state, + loading: false, + result: json, + }); + }; + + syncWindowHistory = () => { + const objectToSerialize = this.state.builder; + const stringToSerialize = `?${querystring.stringify(objectToSerialize)}`; + window.history.pushState('', '', stringToSerialize); }; render() { diff --git a/src/components/Player/Pages/Wardmap/Wardmap.jsx b/src/components/Player/Pages/Wardmap/Wardmap.jsx index d1c727666e..5fafe4c737 100644 --- a/src/components/Player/Pages/Wardmap/Wardmap.jsx +++ b/src/components/Player/Pages/Wardmap/Wardmap.jsx @@ -32,6 +32,10 @@ const getData = (props) => { }; class RequestLayer extends React.Component { + componentWillUnmount() { + window.removeEventListener('resize', this.props.updateWindowSize); + } + UNSAFE_componentWillMount() { getData(this.props); window.addEventListener('resize', this.props.updateWindowSize); @@ -43,10 +47,6 @@ class RequestLayer extends React.Component { } } - componentWillUnmount() { - window.removeEventListener('resize', this.props.updateWindowSize); - } - render() { const { error, loading, data, browser, diff --git a/src/components/Request/Request.jsx b/src/components/Request/Request.jsx index 81ffabf92e..a38a0775e5 100644 --- a/src/components/Request/Request.jsx +++ b/src/components/Request/Request.jsx @@ -14,16 +14,16 @@ class Request extends React.Component { this.state = {}; } - UNSAFE_componentWillMount() { - this.setState({ matchId: window.location.hash.slice(1) }); - } - componentDidMount() { if (this.state.matchId) { this.handleSubmit(); } } + UNSAFE_componentWillMount() { + this.setState({ matchId: window.location.hash.slice(1) }); + } + handleSubmit = () => { const { dispatchPostRequest } = this.props; dispatchPostRequest(this.state.matchId); diff --git a/src/components/Search/SearchForm.jsx b/src/components/Search/SearchForm.jsx index d25f874688..f3dbac6ee1 100644 --- a/src/components/Search/SearchForm.jsx +++ b/src/components/Search/SearchForm.jsx @@ -26,6 +26,10 @@ class SearchForm extends React.Component { } } + debouncedSetQuery = () => { + debounce(this.props.dispatchSetQuery, 100); + }; + formSubmit = e => { const { query } = this.state; e.preventDefault(); @@ -33,10 +37,6 @@ class SearchForm extends React.Component { this.props.dispatchSearch(query); }; - debouncedSetQuery = () => { - debounce(this.props.dispatchSetQuery, 100); - }; - handleChange = e => { const { pathname } = window.location; const { value } = e.target; diff --git a/src/components/Table/Table.jsx b/src/components/Table/Table.jsx index d99d10db10..647a69a4b3 100644 --- a/src/components/Table/Table.jsx +++ b/src/components/Table/Table.jsx @@ -86,11 +86,6 @@ class Table extends React.Component { super(); this.state = initialState; } - UNSAFE_componentWillReceiveProps(newProps) { - if (newProps.resetTableState) { - this.setState(initialState); - } - } setCurrentPage = pageNumber => { this.setState({ @@ -99,15 +94,11 @@ class Table extends React.Component { }); }; - sortClick = (sortField, sortState, sortFn) => { - const { state } = this; - this.setState({ - ...state, - sortState: sortField === state.sortField ? SORT_ENUM.next(SORT_ENUM[state.sortState]) : SORT_ENUM[0], - sortField, - sortFn, - }); - }; + UNSAFE_componentWillReceiveProps(newProps) { + if (newProps.resetTableState) { + this.setState(initialState); + } + } nextPage = () => { this.setState({ @@ -123,6 +114,16 @@ class Table extends React.Component { }); }; + sortClick = (sortField, sortState, sortFn) => { + const { state } = this; + this.setState({ + ...state, + sortState: sortField === state.sortField ? SORT_ENUM.next(SORT_ENUM[state.sortState]) : SORT_ENUM[0], + sortField, + sortFn, + }); + }; + render() { const { columns, diff --git a/src/components/Wordcloud/Wordcloud.jsx b/src/components/Wordcloud/Wordcloud.jsx index 44e4a01d16..a9928571e4 100644 --- a/src/components/Wordcloud/Wordcloud.jsx +++ b/src/components/Wordcloud/Wordcloud.jsx @@ -61,15 +61,15 @@ function updateWordCloud(wordCounts, cloudDomId) { } class Wordcloud extends React.Component { - UNSAFE_componentWillMount() { - this.id = `a-${uuid.v4()}`; - } componentDidMount() { updateWordCloud(this.props.counts, this.id); } componentDidUpdate(nextProps) { updateWordCloud(nextProps.counts, this.id); } + UNSAFE_componentWillMount() { + this.id = `a-${uuid.v4()}`; + } render() { const width = Math.min(1080, window.innerWidth * 0.75); const height = width * 0.7; From 7551c2b24c94f2923c8da92d8e73448b6eef3b62 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Sat, 14 Apr 2018 06:21:40 +0200 Subject: [PATCH 0253/1495] inline styling --- src/components/Heroes/columns.jsx | 29 +++++++++++----------- src/components/Table/Styled.jsx | 6 ----- src/components/Table/Table.jsx | 18 +++----------- src/components/Table/TableHeaderColumn.jsx | 2 +- src/components/constants.js | 14 +++++++++++ 5 files changed, 33 insertions(+), 36 deletions(-) diff --git a/src/components/Heroes/columns.jsx b/src/components/Heroes/columns.jsx index 8ff5553543..f0fe3b385d 100644 --- a/src/components/Heroes/columns.jsx +++ b/src/components/Heroes/columns.jsx @@ -5,6 +5,7 @@ import { abbreviateNumber, } from '../../utility'; import strings from '../../lang'; +import constants from '../constants'; // import TablePercent from '../Visualizations/Table/Percent'; const decimalToCount = (decimal, total) => ( @@ -48,85 +49,85 @@ export default { field: 'pickRate7', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate7, row.matchCount7), - colColor: 'rgba(33, 41, 69, 0.45)', + colColor: constants.colorDivine, }, { displayName: strings.rank_tier_7, field: 'winRate7', sortFn: true, percentBarsWithValue: row => decimalToCount(row.winRate7, row['7_pick']), - colColor: 'rgba(33, 41, 69, 0.65)', + colColor: constants.colorDivineAlt, }, { displayName: strings.rank_tier_6, field: 'pickRate6', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate6, row.matchCount6), - colColor: 'rgba(82, 52, 91, 0.45)', + colColor: constants.colorAncient, }, { displayName: strings.rank_tier_6, field: 'winRate6', sortFn: true, percentBarsWithValue: row => decimalToCount(row.winRate6, row['6_pick']), - colColor: 'rgba(82, 52, 91, 0.65)', + colColor: constants.colorAncientAlt, }, { displayName: strings.rank_tier_5, field: 'pickRate5', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate5, row.matchCount5), - colColor: 'rgba(84, 60, 26, 0.45)', + colColor: constants.colorLegend, }, { displayName: strings.rank_tier_5, field: 'winRate5', sortFn: true, percentBarsWithValue: row => decimalToCount(row.winRate5, row['5_pick']), - colColor: 'rgba(84, 60, 26, 0.65)', + colColor: constants.colorLegendAlt, }, { displayName: strings.rank_tier_4, field: 'pickRate4', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate4, row.matchCount4), - colColor: 'rgba(24, 85, 74, 0.45)', + colColor: constants.colorArchon, }, { displayName: strings.rank_tier_4, field: 'winRate4', sortFn: true, percentBarsWithValue: row => decimalToCount(row.winRate4, row['4_pick']), - colColor: 'rgba(24, 85, 74, 0.65)', + colColor: constants.colorArchonAlt, }, { displayName: strings.rank_tier_3, field: 'pickRate3', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate3, row.matchCount3), - colColor: 'rgba(58, 73, 124, 0.45)', + colColor: constants.colorCrusader, }, { displayName: strings.rank_tier_3, field: 'winRate3', sortFn: true, percentBarsWithValue: row => decimalToCount(row.winRate3, row['3_pick']), - colColor: 'rgba(58, 73, 124, 0.65)', + colColor: constants.colorCrusaderAlt, }, { displayName: strings.rank_tier_2, field: 'pickRate2', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate2, row.matchCount2), - colColor: 'rgba(114, 79, 49, 0.45)', + colColor: constants.colorGuardian, }, { displayName: strings.rank_tier_2, field: 'winRate2', sortFn: true, percentBarsWithValue: row => decimalToCount(row.winRate2, row['2_pick']), - colColor: 'rgba(114, 79, 49, 0.65)', + colColor: constants.colorGuardianAlt, }, { displayName: strings.rank_tier_1, field: 'pickRate1', sortFn: true, percentBarsWithValue: row => decimalToCount(row.pickRate1, row.matchCount1), - colColor: 'rgba(32, 74, 33, 0.45)', + colColor: constants.colorHerald, }, { displayName: strings.rank_tier_1, field: 'winRate1', sortFn: true, percentBarsWithValue: row => decimalToCount(row.winRate1, row['1_pick']), - colColor: 'rgba(32, 74, 33, 0.65)', + colColor: constants.colorHeraldAlt, }].map((col, i) => ({ ...col, displayName: i === 0 ? col.displayName : `${col.displayName.substring(0, 2)} ${col.field.startsWith('pick') ? strings.abbr_pick : strings.abbr_win}%`, diff --git a/src/components/Table/Styled.jsx b/src/components/Table/Styled.jsx index fcf5175c7a..6c226eee94 100644 --- a/src/components/Table/Styled.jsx +++ b/src/components/Table/Styled.jsx @@ -54,12 +54,6 @@ export const StyledBody = styled.div` padding-right: 24px !important; } } - // function for colorizing columns - ${props => props.colColors.map(col => ` - & td:nth-child(${col.index}), th:nth-child(${col.index}) { - background-color: ${col.color} !important; - } - `).join('')} } /* Override material-ui style */ diff --git a/src/components/Table/Table.jsx b/src/components/Table/Table.jsx index 57b060eff1..ebc8009db3 100644 --- a/src/components/Table/Table.jsx +++ b/src/components/Table/Table.jsx @@ -55,19 +55,6 @@ const toUnderline = (data, row, field, underline) => { const rowStyle = (highlightFn, row) => ({ backgroundColor: highlightFn && highlightFn(row) ? 'rgba(74, 149, 247, 0.038)' : 'none' }); -const compileColColors = (columns) => { - const colColors = []; - columns.forEach((col, i) => { - if (col.colColor) { - colColors.push({ - index: i + 1, - color: col.colColor, - }); - } - }); - return colColors; -}; - const initialState = { currentPage: 0, sortState: '', @@ -164,7 +151,7 @@ class Table extends React.Component { data = data.slice(currentPage * pageLength, (currentPage + 1) * pageLength); } return ( - + {paginated && { const { field, color, center, displayFn, relativeBars, percentBars, - percentBarsWithValue, invertBarColor, underline, + percentBarsWithValue, invertBarColor, underline, colColor, } = column; const columnSortFn = column.sortFn; const getValue = typeof columnSortFn === 'function' ? columnSortFn : null; const value = getValue ? getValue(row) : row[field]; const style = { overflow: `${field === 'kills' ? 'visible' : null}`, + backgroundColor: colColor, color, marginBottom: 0, textUnderlinePosition: 'under', diff --git a/src/components/Table/TableHeaderColumn.jsx b/src/components/Table/TableHeaderColumn.jsx index bb4d1489e3..06ce0f2aff 100644 --- a/src/components/Table/TableHeaderColumn.jsx +++ b/src/components/Table/TableHeaderColumn.jsx @@ -15,7 +15,7 @@ const TableHeaderColumn = ({ }; return ( - + column.sortFn && sortClick(column.field, sortState, column.sortFn)} style={style} diff --git a/src/components/constants.js b/src/components/constants.js index 30debd896d..f45b16fe44 100644 --- a/src/components/constants.js +++ b/src/components/constants.js @@ -30,6 +30,20 @@ export default { tableHeaderSurfaceColor: 'rgba(0, 0, 0, .3)', tableRowOddSurfaceColor: 'rgba(255, 255, 255, .019)', tableRowEvenSurfaceColor: 'rgba(0, 0, 0, .019)', + colorDivine: 'rgba(33, 41, 69, 0.45)', + colorDivineAlt: 'rgba(33, 41, 69, 0.65)', + colorAncient: 'rgba(82, 52, 91, 0.45)', + colorAncientAlt: 'rgba(82, 52, 91, 0.65)', + colorLegend: 'rgba(84, 60, 26, 0.45)', + colorLegendAlt: 'rgba(84, 60, 26, 0.65)', + colorArchon: 'rgba(24, 85, 74, 0.45)', + colorArchonAlt: 'rgba(24, 85, 74, 0.65)', + colorCrusader: 'rgba(58, 73, 124, 0.45)', + colorCrusaderAlt: 'rgba(58, 73, 124, 0.65)', + colorGuardian: 'rgba(114, 79, 49, 0.45)', + colorGuardianAlt: 'rgba(114, 79, 49, 0.65)', + colorHerald: 'rgba(32, 74, 33, 0.45)', + colorHeraldAlt: 'rgba(32, 74, 33, 0.65)', sliderTicksColor: '#757575', sliderTicksColorActive: '#337AB7', dividerColor: 'rgb(52, 50, 50)', From 943ec1ed969b799e9da1f48fb532c8df0c8ff4f4 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Sat, 14 Apr 2018 06:23:07 +0200 Subject: [PATCH 0254/1495] whitespace --- src/components/Table/Table.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Table/Table.jsx b/src/components/Table/Table.jsx index ebc8009db3..ed3fe5ae78 100644 --- a/src/components/Table/Table.jsx +++ b/src/components/Table/Table.jsx @@ -151,7 +151,7 @@ class Table extends React.Component { data = data.slice(currentPage * pageLength, (currentPage + 1) * pageLength); } return ( - + {paginated && Date: Sat, 14 Apr 2018 01:15:30 -0700 Subject: [PATCH 0255/1495] update react, fix lint errors, enable sort-comp lint rule --- .eslintrc.js | 7 +- package-lock.json | 14 +-- package.json | 4 +- .../AccountWidget/AccountWidget.jsx | 7 +- src/components/Explorer/index.jsx | 6 +- src/components/Form/FormField.jsx | 2 +- src/components/Header/Dropdown.jsx | 2 +- src/components/Localization/index.jsx | 2 +- src/components/Match/Chat/Chat.jsx | 2 +- src/components/Match/Laning/index.jsx | 2 +- src/components/Match/TeamfightMap/index.jsx | 88 ++++++++----------- src/components/Meta/index.jsx | 4 +- src/components/Search/SearchForm.jsx | 4 +- src/components/Table/Table.jsx | 2 +- .../Visualizations/Graph/MatchGraph.jsx | 2 +- 15 files changed, 70 insertions(+), 78 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 5775811862..72d1af0671 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -35,6 +35,9 @@ module.exports = { 'src/stories/**' ] } - ] - } + ], + "react/sort-comp": [1], + //remove the following once new component lifecycles are implemented + "camelcase": 1 + }, }; diff --git a/package-lock.json b/package-lock.json index 03bdb5cbb2..1e58f2015b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9863,9 +9863,9 @@ } }, "react": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.1.1.tgz", - "integrity": "sha512-FQfiFfk2z2Fk87OngNJHT05KyC9DOVn8LPeB7ZX+9u5+yU1JK6o5ozRlU3PeOMr0IFkWNvgn9jU8/IhRxR1F0g==", + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-16.3.1.tgz", + "integrity": "sha512-NbkxN9jsZ6+G+ICsLdC7/wUD26uNbvKU/RAxEWgc9kcdKvROt+5d5j2cNQm5PSFTQ4WNGsR3pa4qL2Q0/WSy1w==", "requires": { "fbjs": "0.8.16", "loose-envify": "1.3.1", @@ -9922,9 +9922,9 @@ } }, "react-dom": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.1.1.tgz", - "integrity": "sha512-q06jiwST8SEPAMIEkAsu7BgynEZtqF87VrTc70XsW7nxVhWEu2Y4MF5UfxxHQO/mNtQHQWP0YcFxmwm9oMrMaQ==", + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.3.1.tgz", + "integrity": "sha512-2Infg89vzahq8nfVi1GkjPqq0vrBvf0f3T0+dTtyjq4f6HKOqKixAK25Vr593O3QTx4kw/vmUtAJwerlevNWOA==", "requires": { "fbjs": "0.8.16", "loose-envify": "1.3.1", @@ -9954,7 +9954,7 @@ "integrity": "sha512-hjn2SRdhB3JrdWvodNVegjxLi6xiQyCEELVTvutSB/g57GmfGqSxIvKmxgEN3c6Rjp21rxOYou6TrwzTE288Ig==", "requires": { "prop-types": "15.6.0", - "react": "16.1.1" + "react": "16.3.1" } }, "react-helmet": { diff --git a/package.json b/package.json index 4c2d773e49..b144f0f179 100644 --- a/package.json +++ b/package.json @@ -39,8 +39,8 @@ "long": "^4.0.0", "material-ui": "^0.19.4", "prop-types": "^15.6.0", - "react": "^16.1.1", - "react-dom": "^16.1.1", + "react": "^16.3.1", + "react-dom": "^16.3.1", "react-ga": "^2.4.1", "react-helmet": "^5.2.0", "react-markdown": "^3.0.0", diff --git a/src/components/AccountWidget/AccountWidget.jsx b/src/components/AccountWidget/AccountWidget.jsx index 150ea65ecc..4254264360 100644 --- a/src/components/AccountWidget/AccountWidget.jsx +++ b/src/components/AccountWidget/AccountWidget.jsx @@ -63,11 +63,15 @@ const mapStateToProps = (state) => { }; }; +function RequestLayer(props) { + return ; +} + /* const mapDispatchToProps = dispatch => ({ getPlayer: playerId => dispatch(getPlayer(playerId)), }); -*/ + class RequestLayer extends React.Component { UNSAFE_componentWillUpdate() { @@ -77,5 +81,6 @@ class RequestLayer extends React.Component { return ; } } +*/ export default connect(mapStateToProps, null)(RequestLayer); diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 2a071513de..b2b1d30034 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -72,9 +72,7 @@ class Explorer extends React.Component { }); } - getSqlString = () => { - return this.editor.getSelectedText() || this.editor.getValue(); - }; + getSqlString = () => this.editor.getSelectedText() || this.editor.getValue(); buildQuery = () => { // Note that this will not get expanded data for API-dependent fields (player/league/team) @@ -115,7 +113,7 @@ class Explorer extends React.Component { return fetch(`${process.env.REACT_APP_API_HOST}/api/explorer?sql=${encodeURIComponent(sqlString)}`).then(jsonResponse).then(this.handleResponse); }; - handleResponse = json => { + handleResponse = (json) => { this.setState({ ...this.state, loading: false, diff --git a/src/components/Form/FormField.jsx b/src/components/Form/FormField.jsx index f299981378..31c9ad25a0 100644 --- a/src/components/Form/FormField.jsx +++ b/src/components/Form/FormField.jsx @@ -94,7 +94,7 @@ class FormField extends React.Component { addChip(name, input, limit, history); }; - handleUpdateInput = searchText => { + handleUpdateInput = (searchText) => { this.setState({ searchText, errorText: '', // clear error when user types diff --git a/src/components/Header/Dropdown.jsx b/src/components/Header/Dropdown.jsx index 2ad5ed5d9a..58ffcb0f55 100644 --- a/src/components/Header/Dropdown.jsx +++ b/src/components/Header/Dropdown.jsx @@ -31,7 +31,7 @@ class Dropdown extends Component { }); }; - handleTouchTap = event => { + handleTouchTap = (event) => { event.preventDefault(); this.setState({ open: true, diff --git a/src/components/Localization/index.jsx b/src/components/Localization/index.jsx index 5ce355dc74..88f72e16a4 100644 --- a/src/components/Localization/index.jsx +++ b/src/components/Localization/index.jsx @@ -49,7 +49,7 @@ class LocalizationMenuItems extends Component { }; } - handleOnClick = event => { + handleOnClick = (event) => { event.preventDefault(); event.stopPropagation(); this.setState({ diff --git a/src/components/Match/Chat/Chat.jsx b/src/components/Match/Chat/Chat.jsx index e56c4db2aa..78e75ba623 100644 --- a/src/components/Match/Chat/Chat.jsx +++ b/src/components/Match/Chat/Chat.jsx @@ -347,7 +347,7 @@ class Chat extends React.Component { }, 500); }; - filter = key => { + filter = (key) => { if (key !== undefined) { this.setState({ ...this.state, [key]: !this.state[key] }); } diff --git a/src/components/Match/Laning/index.jsx b/src/components/Match/Laning/index.jsx index b44bd0b7ad..2bd2c8e077 100644 --- a/src/components/Match/Laning/index.jsx +++ b/src/components/Match/Laning/index.jsx @@ -16,7 +16,7 @@ class Laning extends React.Component { }; } - setSelectedPlayer = playerSlot => { + setSelectedPlayer = (playerSlot) => { this.setState({ ...this.state, selectedPlayer: playerSlot }); }; diff --git a/src/components/Match/TeamfightMap/index.jsx b/src/components/Match/TeamfightMap/index.jsx index 815555c4f3..1a65e6e5aa 100644 --- a/src/components/Match/TeamfightMap/index.jsx +++ b/src/components/Match/TeamfightMap/index.jsx @@ -377,72 +377,58 @@ class TeamfightMap extends Component { }; } - onIconClick = teamfight => { - return () => { - // We do this because we need to prevent the map click event from - // being executed. That click event is innaccurate if the actual icon is clicked. - // event.stopPropagation(); - this.setState({ - teamfight, - }); - }; + onIconClick = teamfight => () => { + // We do this because we need to prevent the map click event from + // being executed. That click event is innaccurate if the actual icon is clicked. + // event.stopPropagation(); + this.setState({ + teamfight, + }); }; - onMapClick = width => { - return (event) => { - const { x: x1, y: y1 } = calculateRelativeXY(event); - const { teamfights } = this.props; - const newSelection = teamfights - .reduce((cursor, teamfight) => { - let newCursor = { ...cursor }; - const { left: x2, top: y2 } = style(width, avgPosition(teamfight)); - const distance = calculateDistance(x1, y1, x2 + (iconSize(width) / 2), y2 + (iconSize(width) / 2)); - if (distance < cursor.distance) { - newCursor = { - teamfight, - distance, - }; - } - return newCursor; - }, { - teamfight: this.state.teamfight, - distance: Infinity, - }); - this.setState({ - teamfight: newSelection.teamfight, + onMapClick = width => (event) => { + const { x: x1, y: y1 } = calculateRelativeXY(event); + const { teamfights } = this.props; + const newSelection = teamfights + .reduce((cursor, teamfight) => { + let newCursor = { ...cursor }; + const { left: x2, top: y2 } = style(width, avgPosition(teamfight)); + const distance = calculateDistance(x1, y1, x2 + (iconSize(width) / 2), y2 + (iconSize(width) / 2)); + if (distance < cursor.distance) { + newCursor = { + teamfight, + distance, + }; + } + return newCursor; + }, { + teamfight: this.state.teamfight, + distance: Infinity, }); - }; + this.setState({ + teamfight: newSelection.teamfight, + }); }; - onTeamfightHover = teamfight => { - return () => { - this.setState({ - hoveredTeamfight: teamfight, - }); - }; + onTeamfightHover = teamfight => () => { + this.setState({ + hoveredTeamfight: teamfight, + }); }; - onTimelineHover = start => { - return this.curriedTeamfightHandler(this.onTeamfightHover, start); - }; + onTimelineHover = start => this.curriedTeamfightHandler(this.onTeamfightHover, start); - onTimelineIconClick = start => { - return this.curriedTeamfightHandler(this.onIconClick, start); - }; + onTimelineIconClick = start => this.curriedTeamfightHandler(this.onIconClick, start); - curriedTeamfightHandler = (fn, start) => { - return (event) => { - fn(this.props.teamfights.find(tf => tf.start === start))(event); - }; + curriedTeamfightHandler = (fn, start) => (event) => { + fn(this.props.teamfights.find(tf => tf.start === start))(event); }; isHovered(teamfight = { start: null }) { return this.state.hoveredTeamfight && this.state.hoveredTeamfight.start === teamfight.start; } - isSelected = (teamfight = { start: null }) => { - return this.state.teamfight && this.state.teamfight.start === teamfight.start; - }; + isSelected = (teamfight = { start: null }) => this.state.teamfight && this.state.teamfight.start === teamfight.start; render() { const { teamfights = [], match } = this.props; diff --git a/src/components/Meta/index.jsx b/src/components/Meta/index.jsx index 5807bf607c..91fa944f06 100644 --- a/src/components/Meta/index.jsx +++ b/src/components/Meta/index.jsx @@ -45,7 +45,7 @@ class Explorer extends React.Component { this.buildQuery(this.handleQuery); } - buildQuery = cb => { + buildQuery = (cb) => { const noOp = () => {}; const expandedBuilder = expandBuilderState(this.state.builder, fields()); this.setState({ sql: queryTemplate(expandedBuilder) }, cb || noOp); @@ -79,7 +79,7 @@ class Explorer extends React.Component { return fetch(`${process.env.REACT_APP_API_HOST}/api/explorer?sql=${encodeURIComponent(sqlString)}`).then(jsonResponse).then(this.handleResponse); }; - handleResponse = json => { + handleResponse = (json) => { this.setState({ ...this.state, loading: false, diff --git a/src/components/Search/SearchForm.jsx b/src/components/Search/SearchForm.jsx index f3dbac6ee1..f4806cbc49 100644 --- a/src/components/Search/SearchForm.jsx +++ b/src/components/Search/SearchForm.jsx @@ -30,14 +30,14 @@ class SearchForm extends React.Component { debounce(this.props.dispatchSetQuery, 100); }; - formSubmit = e => { + formSubmit = (e) => { const { query } = this.state; e.preventDefault(); this.props.history.push(`/search?q=${query}`); this.props.dispatchSearch(query); }; - handleChange = e => { + handleChange = (e) => { const { pathname } = window.location; const { value } = e.target; diff --git a/src/components/Table/Table.jsx b/src/components/Table/Table.jsx index 647a69a4b3..597ebfc27d 100644 --- a/src/components/Table/Table.jsx +++ b/src/components/Table/Table.jsx @@ -87,7 +87,7 @@ class Table extends React.Component { this.state = initialState; } - setCurrentPage = pageNumber => { + setCurrentPage = (pageNumber) => { this.setState({ ...this.state, currentPage: pageNumber, diff --git a/src/components/Visualizations/Graph/MatchGraph.jsx b/src/components/Visualizations/Graph/MatchGraph.jsx index 9c8bd63739..a5fcbf932a 100644 --- a/src/components/Visualizations/Graph/MatchGraph.jsx +++ b/src/components/Visualizations/Graph/MatchGraph.jsx @@ -132,7 +132,7 @@ class PlayersGraph extends React.Component { }; } - handleMouseEnter = o => { + handleMouseEnter = (o) => { this.setState({ hoverHero: o.dataKey, }); From 956db3cabe2d378c8866458ecd7d3b268fa745bd Mon Sep 17 00:00:00 2001 From: Morgan VanYperen Date: Sat, 14 Apr 2018 01:47:01 -0700 Subject: [PATCH 0256/1495] remove extraneous comment --- src/components/AccountWidget/AccountWidget.jsx | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/components/AccountWidget/AccountWidget.jsx b/src/components/AccountWidget/AccountWidget.jsx index 4254264360..b6be232f24 100644 --- a/src/components/AccountWidget/AccountWidget.jsx +++ b/src/components/AccountWidget/AccountWidget.jsx @@ -67,20 +67,4 @@ function RequestLayer(props) { return ; } -/* -const mapDispatchToProps = dispatch => ({ - getPlayer: playerId => dispatch(getPlayer(playerId)), -}); - - -class RequestLayer extends React.Component { - UNSAFE_componentWillUpdate() { - } - - render() { - return ; - } -} -*/ - export default connect(mapStateToProps, null)(RequestLayer); From ba0dea8cae88502585a3c2ecc6cc956a8f5bad35 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Sat, 14 Apr 2018 10:12:47 +0000 Subject: [PATCH 0257/1495] fixes #1522 --- src/actions/action.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/actions/action.js b/src/actions/action.js index 3e57023852..5abf534cce 100644 --- a/src/actions/action.js +++ b/src/actions/action.js @@ -12,7 +12,12 @@ export default function action(type, host, path, params = {}, transform) { payload, }); const fetchDataWithRetry = delay => fetch(url, path === 'api/metadata' ? { credentials: 'include' } : {}) - .then(response => response.json()) + .then(response => { + if (!response.ok) { + throw new Error('fetch failed'); + } + return response.json(); + }) .then(transform || (json => json)) .then(json => dispatch(getDataOk(json))) .catch(() => { From d6875392058a024b333cb4c5e2e6258f74263f87 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Sat, 14 Apr 2018 10:16:41 +0000 Subject: [PATCH 0258/1495] add parens --- src/actions/action.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/actions/action.js b/src/actions/action.js index 5abf534cce..a6364c709c 100644 --- a/src/actions/action.js +++ b/src/actions/action.js @@ -12,7 +12,7 @@ export default function action(type, host, path, params = {}, transform) { payload, }); const fetchDataWithRetry = delay => fetch(url, path === 'api/metadata' ? { credentials: 'include' } : {}) - .then(response => { + .then((response) => { if (!response.ok) { throw new Error('fetch failed'); } From 7ce8b5a3fbec7ff5c0b2d430fc09a95b699fd8a1 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Sun, 15 Apr 2018 08:58:22 +0000 Subject: [PATCH 0259/1495] dynamically import abilities --- .../Visualizations/inflictorWithValue.jsx | 143 ++++++++++-------- 1 file changed, 84 insertions(+), 59 deletions(-) diff --git a/src/components/Visualizations/inflictorWithValue.jsx b/src/components/Visualizations/inflictorWithValue.jsx index e308c73cc7..64d5668c0d 100644 --- a/src/components/Visualizations/inflictorWithValue.jsx +++ b/src/components/Visualizations/inflictorWithValue.jsx @@ -2,8 +2,6 @@ import React from 'react'; import ReactTooltip from 'react-tooltip'; import uuid from 'uuid'; import items from 'dotaconstants/build/items.json'; -import abilities from 'dotaconstants/build/abilities.json'; -import neutralAbilities from 'dotaconstants/build/neutral_abilities.json'; import styled from 'styled-components'; import strings from '../../lang'; import constants from '../constants'; @@ -200,70 +198,97 @@ const tooltipContainer = thing => (
    ); -export default (inflictor, value, type, ptooltip) => { - if (inflictor !== undefined) { - const ability = abilities[inflictor]; - const neutralAbility = neutralAbilities[inflictor]; - const item = items[inflictor]; - let image; - let tooltip = strings.tooltip_autoattack_other; - const ttId = uuid.v4(); - - if (ability) { - if (inflictor.includes('attribute_bonus')) { - image = '/assets/images/stats.png'; - } else if (inflictor.includes('special_bonus')) { - image = '/assets/images/dota2/talent_tree.svg'; - } else if (neutralAbility) { - image = neutralAbility.img; +class InflictorWithValue extends React.Component { + constructor(props) { + super(props); + this.state = {}; + } + + async UNSAFE_componentWillMount() { + this.setState({ + abilities: await import('dotaconstants/build/abilities.json'), + neutralAbilities: await import('dotaconstants/build/neutral_abilities.json'), + }); + } + + render() { + const { + inflictor, value, type, ptooltip, + } = this.props; + const { abilities, neutralAbilities } = this.state; + if (inflictor !== undefined) { + const ability = abilities && abilities[inflictor]; + const neutralAbility = neutralAbilities && neutralAbilities[inflictor]; + const item = items[inflictor]; + let image; + let tooltip = strings.tooltip_autoattack_other; + const ttId = uuid.v4(); + + if (ability) { + if (inflictor.includes('attribute_bonus')) { + image = '/assets/images/stats.png'; + } else if (inflictor.includes('special_bonus')) { + image = '/assets/images/dota2/talent_tree.svg'; + } else if (neutralAbility) { + image = neutralAbility.img; + } else { + image = `${process.env.REACT_APP_API_HOST}/apps/dota2/images/abilities/${inflictor}_lg.png`; + } + tooltip = tooltipContainer(ability); + } else if (item) { + if (customImageIcon.includes(inflictor)) { + image = `/assets/images/dota2/${inflictor}.png`; + } else { + image = `${process.env.REACT_APP_API_HOST}/apps/dota2/images/items/${getInflictorImage(inflictor)}_lg.png`; + } + tooltip = tooltipContainer(item); } else { - image = `${process.env.REACT_APP_API_HOST}/apps/dota2/images/abilities/${inflictor}_lg.png`; + image = '/assets/images/default_attack.png'; } - tooltip = tooltipContainer(ability); - } else if (item) { - if (customImageIcon.includes(inflictor)) { - image = `/assets/images/dota2/${inflictor}.png`; - } else { - image = `${process.env.REACT_APP_API_HOST}/apps/dota2/images/items/${getInflictorImage(inflictor)}_lg.png`; + if (ptooltip) { + tooltip = ptooltip; } - tooltip = tooltipContainer(item); - } else { - image = '/assets/images/default_attack.png'; - } - if (ptooltip) { - tooltip = ptooltip; - } - return ( - -
    - {!type && - - - } - {type === 'buff' && -
    +
    + {!type && + + + } + {type === 'buff' && +
    + /> } - {!type &&
    {value}
    } - {type === 'buff' && -
    - {value > 0 && value} -
    + {!type &&
    {value}
    } + {type === 'buff' && +
    + {value > 0 && value} +
    } - {tooltip && -
    - - {tooltip} - -
    } -
    - - ); + {tooltip && +
    + + {tooltip} + +
    } +
    + + ); + } + return null; } - return null; +} + +InflictorWithValueComp.propTypes = { + inflictor: PropTypes.string, + value: PropTypes.string, + type: PropTypes.string, + ptooltip: PropTypes.shape({}), }; + +export default (inflictor, value, type, ptooltip) => ; From 21557ba795beacfa1cced1336c53faed436af106 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Sun, 15 Apr 2018 09:02:57 +0000 Subject: [PATCH 0260/1495] lint --- src/components/Visualizations/inflictorWithValue.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/Visualizations/inflictorWithValue.jsx b/src/components/Visualizations/inflictorWithValue.jsx index 64d5668c0d..9c2f6829b2 100644 --- a/src/components/Visualizations/inflictorWithValue.jsx +++ b/src/components/Visualizations/inflictorWithValue.jsx @@ -1,4 +1,5 @@ import React from 'react'; +import PropTypes from 'prop-types'; import ReactTooltip from 'react-tooltip'; import uuid from 'uuid'; import items from 'dotaconstants/build/items.json'; @@ -284,7 +285,7 @@ class InflictorWithValue extends React.Component { } } -InflictorWithValueComp.propTypes = { +InflictorWithValue.propTypes = { inflictor: PropTypes.string, value: PropTypes.string, type: PropTypes.string, From 753ea3311656666a2cbbec7c1c7b3aa2a64a4ec0 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Sun, 15 Apr 2018 10:38:09 +0000 Subject: [PATCH 0261/1495] dynamically load lang files --- src/actions/index.js | 8 +++++ src/components/App/App.jsx | 46 +++++++++++++----------- src/components/Header/Header.jsx | 37 ++++++++++--------- src/components/Localization/index.jsx | 23 ++++-------- src/index.js | 4 ++- src/lang/index.js | 52 +++++++++++++-------------- src/reducers/index.js | 1 + 7 files changed, 89 insertions(+), 82 deletions(-) diff --git a/src/actions/index.js b/src/actions/index.js index 4c773b4435..95ab508dd9 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -61,5 +61,13 @@ export const getPlayerWordcloud = (accountId, params) => action('playerWordcloud export const getPlayerTotals = (accountId, params) => action('playerTotals', process.env.REACT_APP_API_HOST, `api/players/${accountId}/totals`, params); export const getPlayerMmr = (accountId, params) => action('playerMmr', process.env.REACT_APP_API_HOST, `api/players/${accountId}/ratings`, params); export const getPlayerRankings = (accountId, params) => action('playerRankings', process.env.REACT_APP_API_HOST, `api/players/${accountId}/rankings`, params, transformRankings); +export const getStrings = () => async (dispatch) => { + const { langs } = require('../lang'); + const savedLang = window.localStorage && window.localStorage.getItem('localization'); + const selectedLang = langs.find(lang => lang.value === savedLang) || langs[0]; + const defData = await import('../lang/' + langs[0].data); + const selData = await import('../lang/' + selectedLang.data); + dispatch({ type: 'strings', payload: { ...defData, ...selData } }); +}; export * from './requestActions'; export * from './formActions'; diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index 1a8adbfcd0..4b86597fe0 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -6,25 +6,25 @@ import darkBaseTheme from 'material-ui/styles/baseThemes/darkBaseTheme'; import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'; import Helmet from 'react-helmet'; import styled from 'styled-components'; -import { Route } from 'react-router-dom'; -import strings from '../../lang'; -import Player from '../Player'; -import Home from '../Home'; -import Search from '../Search'; -import Explorer from '../Explorer'; -// import FourOhFour from '../FourOhFour'; -import Heroes from '../Heroes'; -import Request from '../Request'; -import Distributions from '../Distributions'; -import Status from '../Status'; -import Matches from '../Matches'; -import Teams from '../Teams'; -// import Assistant from '../Assistant'; -import Records from '../Records'; -// import Predictions from '../Predictions'; -import Meta from '../Meta'; import Header from '../Header'; -import Footer from '../Footer'; +// import { Route } from 'react-router-dom'; +// import strings from '../../lang'; +// import Player from '../Player'; +// import Home from '../Home'; +// import Search from '../Search'; +// import Explorer from '../Explorer'; +// // import FourOhFour from '../FourOhFour'; +// import Heroes from '../Heroes'; +// import Request from '../Request'; +// import Distributions from '../Distributions'; +// import Status from '../Status'; +// import Matches from '../Matches'; +// import Teams from '../Teams'; +// // import Assistant from '../Assistant'; +// import Records from '../Records'; +// // import Predictions from '../Predictions'; +// import Meta from '../Meta'; +// import Footer from '../Footer'; import constants from '../constants'; const muiTheme = { @@ -90,7 +90,7 @@ class App extends React.Component { } render() { - const { params, width, location } = this.props; + const { params, width, location, strings } = this.props; return ( @@ -99,6 +99,7 @@ class App extends React.Component { titleTemplate={strings.title_template} />
    + {/* { location.pathname !== '/' && @@ -133,6 +134,7 @@ class App extends React.Component { }
    + */} ); @@ -147,4 +149,8 @@ App.propTypes = { }), }; -export default connect()(App); +const mapStateToProps = (state) => ({ + strings: state.app.strings, +}); + +export default connect(mapStateToProps)(App); diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index aee945e539..8b3185a77e 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -9,7 +9,6 @@ import ActionSettings from 'material-ui/svg-icons/action/settings'; import Bug from 'material-ui/svg-icons/action/bug-report'; import LogOutButton from 'material-ui/svg-icons/action/power-settings-new'; import styled from 'styled-components'; -import strings from '../../lang'; import { LocalizationMenu } from '../Localization'; import Dropdown from '../Header/Dropdown'; import Announce from '../Announce'; @@ -21,7 +20,7 @@ import BurgerMenu from './BurgerMenu'; const REPORT_BUG_PATH = '//github.com/odota/web/issues'; -const navbarPages = [ +const navbarPages = (strings) => [ {strings.header_explorer}, {strings.header_meta}, {strings.header_matches}, @@ -33,9 +32,9 @@ const navbarPages = [ // Assistant, ]; -const burgerItems = [ +const burgerItems = (strings) => [ , - ...navbarPages, + ...navbarPages(strings), ]; const buttonProps = { @@ -67,20 +66,21 @@ const TabContainer = styled.div` justify-content: center; `; -const LogoGroup = ({ small }) => ( +const LogoGroup = ({ small, strings }) => ( - {!small && } + {!small && } ); LogoGroup.propTypes = { small: PropTypes.bool, + strings: PropTypes.shape({}), }; -const LinkGroup = () => ( +const LinkGroup = ({ strings }) => ( - {navbarPages.map(Page => ( + {navbarPages(strings).map(Page => (
    {Page} @@ -103,19 +103,20 @@ const AccountGroup = () => ( ); -const SettingsGroup = ({ user }) => ( +const SettingsGroup = ({ user, strings }) => ( - - {user ? : null} + + {user ? : null} ); SettingsGroup.propTypes = { user: PropTypes.shape({}), + strings: PropTypes.shape({}), }; const BugLink = styled.a` @@ -137,7 +138,7 @@ const BugLink = styled.a` } `; -const ReportBug = () => ( +const ReportBug = ({ strings }) => ( ( ); -const LogOut = () => ( +const LogOut = ({ strings }) => ( ( +const Header = ({ location, small, user, strings }) => (
    - - {small && } + + {small && } {small && } - {} + {} { location.pathname !== '/' && } @@ -196,10 +197,12 @@ Header.propTypes = { location: PropTypes.shape({}), small: PropTypes.bool, user: PropTypes.shape({}), + strings: PropTypes.shape({}), }; const mapStateToProps = state => ({ small: state.browser.greaterThan.small, user: state.app.metadata.data.user, + strings: state.app.strings, }); export default connect(mapStateToProps, null)(Header); diff --git a/src/components/Localization/index.jsx b/src/components/Localization/index.jsx index 88f72e16a4..2e59296bc3 100644 --- a/src/components/Localization/index.jsx +++ b/src/components/Localization/index.jsx @@ -1,10 +1,9 @@ import React, { Component } from 'react'; import { connect } from 'react-redux'; -import SelectField from 'material-ui/SelectField'; import MenuItem from 'material-ui/MenuItem'; import Next from 'material-ui/svg-icons/hardware/keyboard-arrow-right'; import styled from 'styled-components'; -import strings, { langs } from '../../lang'; +import { langs } from '../../lang'; import constants from '../constants'; const ClickableDiv = styled.div` @@ -28,19 +27,6 @@ const setLocalization = (event, key, payload) => { window.location.reload(); }; -const Localization = () => ( -
    - - {langs.map(lang => )} - - -
    -); - class LocalizationMenuItems extends Component { constructor() { super(); @@ -58,6 +44,7 @@ class LocalizationMenuItems extends Component { }; render() { + const { strings } = this.props; const { open } = this.state; return (
    @@ -82,6 +69,8 @@ class LocalizationMenuItems extends Component { } } -export default connect(null, null)(Localization); +const mapStateToProps = (state) => ({ + strings: state.app.strings, +}); -export const LocalizationMenu = connect(null, null)(LocalizationMenuItems); +export const LocalizationMenu = connect(mapStateToProps, null)(LocalizationMenuItems); diff --git a/src/index.js b/src/index.js index a3f5d7ad79..fdac3db7c8 100644 --- a/src/index.js +++ b/src/index.js @@ -8,7 +8,7 @@ import { Provider } from 'react-redux'; import { Route, Router } from 'react-router-dom'; import { injectGlobal } from 'styled-components'; import store from './store'; -import { getMetadata } from './actions'; +import { getMetadata, getStrings } from './actions'; import App from './components/App'; import constants from './components/constants'; // import registerServiceWorker from './registerServiceWorker'; @@ -157,6 +157,8 @@ li { // Fetch metadata (used on all pages) store.dispatch(getMetadata()); +// Fetch strings +store.dispatch(getStrings()); ReactGA.initialize('UA-55757642-1'); ReactGA.pageview(window.location.pathname + window.location.search); diff --git a/src/lang/index.js b/src/lang/index.js index 5cab676a74..9c92e0dc18 100644 --- a/src/lang/index.js +++ b/src/lang/index.js @@ -1,99 +1,97 @@ -/* eslint-disable global-require */ export const langs = [ { value: 'en-US', native: 'English (US)', - data: require('./en-US.json'), + data: 'en-US.json', }, /* { value: 'bg-BG', native: 'български bǎlgarski', - data: require('./bg-BG.json'), + data: require('bg-BG.json'), }, { value: 'cs-CZ', native: 'Čeština', - data: require('./cs-CZ.json'), + data: require('cs-CZ.json'), }, */ { value: 'de-DE', native: 'Deutsch', - data: require('./de-DE.json'), + data: 'de-DE.json', }, { value: 'es-ES', native: 'Español', - data: require('./es-ES.json'), + data: 'es-ES.json', }, /* { value: 'es-PE', native: 'Español (América Latina)', - data: require('./es-PE.json'), + data: require('es-PE.json'), }, { value: 'fi-FI', native: 'Suomi', - data: require('./fi-FI.json'), + data: require('fi-FI.json'), }, { value: 'fr-FR', native: 'Français', - data: require('./fr-FR.json'), + data: require('fr-FR.json'), }, */ { value: 'it-IT', native: 'Italiano', - data: require('./it-IT.json'), + data: 'it-IT.json', }, { value: 'ja-JP', native: '日本語', - data: require('./ja-JP.json'), + data: 'ja-JP.json', }, /* { value: 'ko-KR', native: '한국어', - data: require('./ko-KR.json'), + data: require('ko-KR.json'), }, */ { value: 'ms-MY', native: 'Bahasa Melayu', - data: require('./ms-MY.json'), + data: 'ms-MY.json', }, /* { value: 'nl-NL', native: 'Nederlands', - data: require('./nl-NL.json'), + data: require('nl-NL.json'), }, */ { value: 'pl-PL', native: 'Polski', - data: require('./pl-PL.json'), + data: 'pl-PL.json', }, { value: 'pt-BR', native: 'Português Brasileiro', - data: require('./pt-BR.json'), + data: 'pt-BR.json', }, { value: 'ro-RO', native: 'Română', - data: require('./ro-RO.json'), + data: 'ro-RO.json', }, { value: 'ru-RU', native: 'Русский', - data: require('./ru-RU.json'), + data: 'ru-RU.json', }, /* { value: 'sv-SE', native: 'Svenska', - data: require('./sv-SE.json'), + data: require('sv-SE.json'), }, { value: 'tr-TR', native: 'Türkçe', - data: require('./tr-TR.json'), + data: require('tr-TR.json'), }, { value: 'uk-UA', native: 'Українська', - data: require('./uk-UA.json'), + data: require('uk-UA.json'), }, { value: 'vi-VN', native: 'Tiếng Việt', - data: require('./vi-VN.json'), + data: require('vi-VN.json'), }, */ { value: 'zh-CN', native: '中文', - data: require('./zh-CN.json'), + data: 'zh-CN.json', }, /* { value: 'zh-TW', native: '中文 (繁體字)', - data: require('./zh-TW.json'), + data: require('zh-TW.json'), }, */ ]; -const savedLang = window.localStorage && window.localStorage.getItem('localization'); -const selectedLang = langs.find(lang => lang.value === savedLang) || { }; -export default { ...langs[0].data, ...selectedLang.data }; + +export default {}; diff --git a/src/reducers/index.js b/src/reducers/index.js index c6b680e63d..b010805b2d 100644 --- a/src/reducers/index.js +++ b/src/reducers/index.js @@ -46,6 +46,7 @@ export default combineReducers({ teamPlayers: reducer('teamPlayers'), records: reducer('records'), ghPulls: reducer('ghPulls'), + strings: (state = {}, action) => (action && action.type === 'strings') ? action.payload : state, form, request, }); From a97c3e09102b64446225b4b1bcbae9510d2a2ec2 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Sun, 15 Apr 2018 17:18:13 +0200 Subject: [PATCH 0262/1495] 1 --- src/components/Scenarios/FormFieldData.js | 7 +- src/components/Scenarios/Scenarios.jsx | 73 +++++++---- src/components/Scenarios/ScenariosColumns.jsx | 123 +++++++++--------- .../Scenarios/ScenariosFormField.jsx | 51 +++++--- src/components/Table/Table.jsx | 3 +- .../Visualizations/Table/Percent.jsx | 5 +- src/lang/en-US.json | 2 +- 7 files changed, 155 insertions(+), 109 deletions(-) diff --git a/src/components/Scenarios/FormFieldData.js b/src/components/Scenarios/FormFieldData.js index 397f0303cf..667abb0810 100644 --- a/src/components/Scenarios/FormFieldData.js +++ b/src/components/Scenarios/FormFieldData.js @@ -1,9 +1,10 @@ import heroes from 'dotaconstants/build/heroes.json'; import items from 'dotaconstants/build/items.json'; import strings from '../../lang'; +import { getTimeRange } from './ScenariosColumns'; export default function getFormFieldData(metadata) { - const { teamScenariosQueryParams, itemCost } = metadata; + const { teamScenariosQueryParams, itemCost, gameDurationBucket, timings } = metadata; return { heroList: Object.keys(heroes).map(id => ({ @@ -20,5 +21,9 @@ export default function getFormFieldData(metadata) { laneRoleList: [1, 2, 3, 4].map(role => ({ text: strings[`lane_role_${role}`], value: role.toString() })), miscList: teamScenariosQueryParams.map(scenario => ({ text: strings[`scenarios_${scenario}`], value: scenario })), + + gameDurationList: gameDurationBucket.map(time => ({ text: getTimeRange(time, gameDurationBucket), value: time.toString() })), + + timingList: timings.map(time => ({ text: getTimeRange(time, timings), value: time.toString() })), }; } diff --git a/src/components/Scenarios/Scenarios.jsx b/src/components/Scenarios/Scenarios.jsx index 7757edc6e3..f6cc7360a2 100644 --- a/src/components/Scenarios/Scenarios.jsx +++ b/src/components/Scenarios/Scenarios.jsx @@ -19,13 +19,22 @@ import Error from '../Error'; import Heading from '../Heading'; import { groupByArray } from '../../utility/index'; import { IconLaneRoles } from '../Icons'; +import { abbreviateNumber } from './../../utility/index'; const minSampleSize = row => row.games > 200; -const fields = { - itemTimings: ['hero_id', 'item'], - laneRoles: ['hero_id', 'lane_role'], - misc: ['scenario'], +const forms = { + itemTimings: { + queryForms: ['hero_id', 'item'], + filterForms: ['time'] + }, + laneRoles: { + queryForms: ['hero_id', 'lane_role'], + filterForms: ['time'] + }, + misc: { + queryForms: ['scenario'] + } }; const menuItems = [{ @@ -62,13 +71,12 @@ class Scenarios extends React.Component { constructor(props) { super(props); - const dropDownValue = this.props.match.params.info || 'itemTimings'; + const selectedTab = this.props.match.params.info || 'itemTimings'; const params = this.props.location.search.substring(1); this.state = { - dropDownValue, - formFields: { [dropDownValue]: querystring.parse(params) || null }, + selectedTab, + formFields: { [selectedTab]: querystring.parse(params) || null }, }; - this.updateFormFieldStates(); this.getData = this.getData.bind(this); @@ -82,42 +90,50 @@ class Scenarios extends React.Component { getData() { const { scenariosDispatch } = this.props; - const { dropDownValue, formFields } = this.state; - scenariosDispatch[dropDownValue](formFields[dropDownValue]); + const { selectedTab, formFields } = this.state; + scenariosDispatch[selectedTab](formFields[selectedTab]); } initialQuery() { const { scenariosState } = this.props; - const { dropDownValue } = this.state; - const { data } = scenariosState[dropDownValue]; - if (scenariosState[dropDownValue].loading && data.length === 0) { + const { selectedTab } = this.state; + const { data } = scenariosState[selectedTab]; + if (scenariosState[selectedTab].loading && data.length === 0) { this.getData(); } this.updateQueryParams(); } - handleChange = (dropDownValue) => { - this.setState({ dropDownValue }, this.initialQuery); + handleChange = (selectedTab) => { + this.setState({ selectedTab }, this.initialQuery); } updateQueryParams() { - const { formFields, dropDownValue } = this.state; + const { formFields, selectedTab } = this.state; const { location } = this.props; - this.props.history.push(`${location.pathname}?${querystring.stringify(formFields[dropDownValue])}`); + this.props.history.push(`${location.pathname}?${querystring.stringify(formFields[selectedTab])}`); } updateFormFieldStates(newFormFieldState) { - const { dropDownValue, formFields } = this.state; + const { selectedTab, formFields } = this.state; this.setState({ - formFields: { ...formFields, [dropDownValue]: { ...formFields[dropDownValue], ...newFormFieldState } }, + formFields: { ...formFields, [selectedTab]: { ...formFields[selectedTab], ...newFormFieldState } }, }, this.updateQueryParams); } render() { const { scenariosState } = this.props; - const { dropDownValue, formFields } = this.state; - const { data } = scenariosState[dropDownValue]; + const { selectedTab, formFields } = this.state; + let { data } = scenariosState[selectedTab]; + const { queryForms, filterForms } = forms[selectedTab] + console.log(this.state) const { metadata, metadataLoading, metadataError } = scenariosState.metadata; + /* + if (filterForms) { + filterForms.forEach((key) => { + data = data.filter(x => Number(filterForms[key]) == x[key] || filterForms[key] == x[key] || !filterForms[key]); + }); + }*/ return ( {metadataError && } @@ -125,19 +141,20 @@ class Scenarios extends React.Component { {!metadataError && !metadataLoading &&
    - + {menuItems.map(item => ( ))}
    - {fields[dropDownValue].map(field => ( + {forms[selectedTab].map(field => ( ))} @@ -153,10 +170,10 @@ class Scenarios extends React.Component { />
    diff --git a/src/components/Scenarios/ScenariosColumns.jsx b/src/components/Scenarios/ScenariosColumns.jsx index 8b9c2dab9a..0f909e9c2d 100644 --- a/src/components/Scenarios/ScenariosColumns.jsx +++ b/src/components/Scenarios/ScenariosColumns.jsx @@ -4,7 +4,7 @@ import { transformations, formatSeconds } from '../../utility'; const computeWinRate = row => (row.wins / row.games); -const getTimeRange = (field, metadata) => { +export const getTimeRange = (field, metadata) => { let lower; if (metadata.indexOf(field) !== 0) { lower = metadata[metadata.indexOf(field) - 1]; @@ -15,69 +15,72 @@ const getTimeRange = (field, metadata) => { }; const getColumns = (f, metadata) => { - const columns = -{ - itemTimings: [{ - displayName: strings.filter_hero_id, - field: 'hero_id', - sortFn: true, - displayFn: transformations.hero_id, - }, { - displayName: strings.scenarios_time, - field: 'time', - sortFn: row => row.time, - displayFn: (row, col, field) => getTimeRange(field, metadata.timings), - }, { - displayName: strings.scenarios_item, - field: 'item', - sortFn: true, - displayFn: (row, col, field) => inflictorWithValue(field), - }, { - displayName: strings.heading_win_rate, - field: 'games', - sortFn: computeWinRate, - percentBarsWithValue: row => row.games, - tooltip: strings.tooltip_winrate_samplesize, - }], + const columns = { + itemTimings: [{ + displayName: strings.filter_hero_id, + field: 'hero_id', + sortFn: true, + displayFn: transformations.hero_id, + }, { + displayName: strings.scenarios_time, + field: 'time', + sortFn: row => row.time, + displayFn: (row, col, field) => getTimeRange(field, metadata.timings), + }, { + displayName: strings.scenarios_item, + field: 'item', + sortFn: true, + displayFn: (row, col, field) => inflictorWithValue(field), + }, { + displayName: strings.heading_win_rate, + field: 'games', + sortFn: computeWinRate, + percentBarsWithValue: row => row.games, + abbreviateAltValue: true, + tooltip: strings.tooltip_winrate_samplesize, + }], - laneRoles: [{ - displayName: strings.filter_hero_id, - field: 'hero_id', - sortFn: true, - displayFn: transformations.hero_id, - }, { - displayName: strings.heading_lane_role, - field: 'lane_role', - sortFn: true, - displayFn: (row, col, field) => strings[`lane_role_${field}`] || field, - }, { - displayName: strings.scenarios_game_duration, - field: 'time', - sortFn: true, - displayFn: (row, col, field) => getTimeRange(field, metadata.gameDurationBucket), - }, { - displayName: strings.heading_win_rate, - field: 'games', - sortFn: computeWinRate, - percentBarsWithValue: row => row.games, - tooltip: strings.tooltip_winrate_samplesize, - }], + laneRoles: [{ + displayName: strings.filter_hero_id, + field: 'hero_id', + sortFn: true, + displayFn: transformations.hero_id, + }, { + displayName: strings.heading_lane_role, + field: 'lane_role', + sortFn: true, + displayFn: (row, col, field) => strings[`lane_role_${field}`] || field, + }, { + displayName: strings.scenarios_game_duration, + field: 'time', + sortFn: true, + displayFn: (row, col, field) => getTimeRange(field, metadata.gameDurationBucket), + }, { + displayName: strings.heading_win_rate, + field: 'games', + sortFn: computeWinRate, + percentBarsWithValue: row => row.games, + abbreviateAltValue: true, + tooltip: strings.tooltip_winrate_samplesize, + }], - misc: [{ - displayName: strings.scenarios_scenario, - field: 'scenario', - sortFn: true, - displayFn: (row, col, field) => strings[`scenarios_${field}`] || field, - }, { - displayName: strings.heading_win_rate, - field: 'games', - sortFn: computeWinRate, - percentBarsWithValue: row => row.games, - tooltip: strings.tooltip_winrate_samplesize, - }], -}; + misc: [{ + displayName: strings.scenarios_scenario, + field: 'scenario', + sortFn: true, + displayFn: (row, col, field) => strings[`scenarios_${field}`] || field, + }, { + displayName: strings.heading_win_rate, + field: 'games', + sortFn: computeWinRate, + percentBarsWithValue: row => row.games, + abbreviateAltValue: true, + tooltip: strings.tooltip_winrate_samplesize, + }], + }; return columns[f]; }; export default getColumns; + diff --git a/src/components/Scenarios/ScenariosFormField.jsx b/src/components/Scenarios/ScenariosFormField.jsx index 7b14fa6fb8..e18637c482 100644 --- a/src/components/Scenarios/ScenariosFormField.jsx +++ b/src/components/Scenarios/ScenariosFormField.jsx @@ -5,11 +5,20 @@ import getFormFieldData from './FormFieldData'; import { autoCompleteStyle, listStyle } from './Styles'; import strings from '../../lang'; -const hintText = { - hero_id: strings.filter_hero_id, - item: strings.scenarios_item, - scenario: strings.scenarios_scenario, - lane_role: strings.heading_lane_role, +const hintTexts = { + itemTimings: { + hero_id: strings.filter_hero_id, + item: strings.scenarios_item, + time: strings.scenarios_time, + }, + laneRoles: { + hero_id: strings.filter_hero_id, + lane_role: strings.heading_lane_role, + time: strings.scenarios_game_duration, + }, + misc: { + scenario: strings.scenarios_scenario, + } }; const customStyles = { @@ -19,19 +28,29 @@ const customStyles = { class ScenarioFormField extends React.Component { constructor(props) { super(props); - const { field, formFieldState, metadata } = this.props; - + const { field, formFieldState, metadata, selectedTab } = this.props; + console.log(this.props) const { - heroList, itemList, laneRoleList, miscList, + heroList, itemList, laneRoleList, miscList, gameDurationList, timingList, } = getFormFieldData(metadata); this.dataSources = { - hero_id: heroList, - item: itemList, - lane_role: laneRoleList, - scenario: miscList, + itemTimings: { + hero_id: heroList, + item: itemList, + time: timingList + }, + laneRoles: { + hero_id: heroList, + lane_role: laneRoleList, + time: gameDurationList, + }, + misc: { + scenario: miscList, + } }; - let searchText = this.dataSources[field].find(el => el.value === formFieldState); + + let searchText = this.dataSources[selectedTab][field].find(el => el.value === formFieldState); searchText = searchText ? searchText.text : ''; this.state = { @@ -58,7 +77,7 @@ class ScenarioFormField extends React.Component { } render() { - const { field } = this.props; + const { field, selectedTab } = this.props; const { searchText } = this.state; return (
    @@ -66,8 +85,8 @@ class ScenarioFormField extends React.Component { openOnFocus listStyle={{ ...listStyle, ...customStyles[field] }} filter={AutoComplete.caseInsensitiveFilter} - floatingLabelText={hintText[field]} - dataSource={this.dataSources[field]} + floatingLabelText={hintTexts[selectedTab][field]} + dataSource={this.dataSources[selectedTab][field]} onClick={this.resetField} onUpdateInput={this.handleUpdateInput} searchText={searchText} diff --git a/src/components/Table/Table.jsx b/src/components/Table/Table.jsx index 29d3be0fb7..470a04777f 100644 --- a/src/components/Table/Table.jsx +++ b/src/components/Table/Table.jsx @@ -180,7 +180,7 @@ class Table extends React.Component { {columns.map((column, colIndex) => { const { - field, color, center, displayFn, relativeBars, percentBars, + field, color, center, displayFn, relativeBars, percentBars, abbreviateAltValue, percentBarsWithValue, sortFn, invertBarColor, underline, } = column; const getValue = typeof sortFn === 'function' ? sortFn : null; @@ -244,6 +244,7 @@ class Table extends React.Component { percent={barPercentValue} altValue={altValue} inverse={invertBarColor} + abbreviateAltValue />); } else if (displayFn) { fieldEl = displayFn(row, column, value, index); diff --git a/src/components/Visualizations/Table/Percent.jsx b/src/components/Visualizations/Table/Percent.jsx index 8c0bf0994c..e7641f4279 100644 --- a/src/components/Visualizations/Table/Percent.jsx +++ b/src/components/Visualizations/Table/Percent.jsx @@ -3,13 +3,14 @@ import PropTypes from 'prop-types'; import { gradient } from 'abcolor'; import { StyledContainer, PercentContainer, TitleContainer } from './Styled'; import constants from '../../constants'; +import { abbreviateNumber } from './../../../utility/index'; const Percent = ({ - percent, altValue, valEl, inverse = false, + percent, altValue, valEl, inverse = false, abbreviateAltValue, }) => ( - {valEl || percent} {altValue && {altValue}} + {valEl || percent} {altValue && {abbreviateAltValue ? abbreviateNumber(Number(altValue)) : altValue}}
    Date: Sun, 15 Apr 2018 17:45:12 +0200 Subject: [PATCH 0263/1495] 1 --- src/components/Scenarios/Scenarios.jsx | 9 ++++----- src/components/Scenarios/ScenariosFormField.jsx | 1 + src/components/Scenarios/Styles.jsx | 3 +++ 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/components/Scenarios/Scenarios.jsx b/src/components/Scenarios/Scenarios.jsx index f6cc7360a2..e49d3b85e8 100644 --- a/src/components/Scenarios/Scenarios.jsx +++ b/src/components/Scenarios/Scenarios.jsx @@ -126,14 +126,13 @@ class Scenarios extends React.Component { const { selectedTab, formFields } = this.state; let { data } = scenariosState[selectedTab]; const { queryForms, filterForms } = forms[selectedTab] - console.log(this.state) const { metadata, metadataLoading, metadataError } = scenariosState.metadata; - /* if (filterForms) { filterForms.forEach((key) => { - data = data.filter(x => Number(filterForms[key]) == x[key] || filterForms[key] == x[key] || !filterForms[key]); + const formValue = formFields[selectedTab] && formFields[selectedTab][key] + data = data.filter(row => Number(formValue) === row[key] || formValue === row[key] || !formValue); }); - }*/ + } return ( {metadataError && } @@ -147,7 +146,7 @@ class Scenarios extends React.Component { ))}
    - {forms[selectedTab].map(field => ( + {[...(queryForms || []), ...(filterForms || [])].map(field => ( Date: Sun, 15 Apr 2018 18:41:28 +0200 Subject: [PATCH 0264/1495] review 3 --- src/components/Scenarios/FormFieldData.js | 6 ++-- src/components/Scenarios/Scenarios.jsx | 28 ++++++++----------- .../Scenarios/ScenariosFormField.jsx | 18 ++++++------ src/components/Scenarios/Styles.jsx | 12 ++++++-- src/components/Table/Table.jsx | 2 +- .../Visualizations/Table/Percent.jsx | 1 + 6 files changed, 37 insertions(+), 30 deletions(-) diff --git a/src/components/Scenarios/FormFieldData.js b/src/components/Scenarios/FormFieldData.js index 667abb0810..c46c5bc49b 100644 --- a/src/components/Scenarios/FormFieldData.js +++ b/src/components/Scenarios/FormFieldData.js @@ -4,7 +4,9 @@ import strings from '../../lang'; import { getTimeRange } from './ScenariosColumns'; export default function getFormFieldData(metadata) { - const { teamScenariosQueryParams, itemCost, gameDurationBucket, timings } = metadata; + const { + teamScenariosQueryParams, itemCost, gameDurationBucket, timings, + } = metadata; return { heroList: Object.keys(heroes).map(id => ({ @@ -24,6 +26,6 @@ export default function getFormFieldData(metadata) { gameDurationList: gameDurationBucket.map(time => ({ text: getTimeRange(time, gameDurationBucket), value: time.toString() })), - timingList: timings.map(time => ({ text: getTimeRange(time, timings), value: time.toString() })), + timingList: timings.map(time => ({ text: getTimeRange(time, timings), value: time.toString() })), }; } diff --git a/src/components/Scenarios/Scenarios.jsx b/src/components/Scenarios/Scenarios.jsx index e49d3b85e8..b78614b579 100644 --- a/src/components/Scenarios/Scenarios.jsx +++ b/src/components/Scenarios/Scenarios.jsx @@ -19,22 +19,21 @@ import Error from '../Error'; import Heading from '../Heading'; import { groupByArray } from '../../utility/index'; import { IconLaneRoles } from '../Icons'; -import { abbreviateNumber } from './../../utility/index'; const minSampleSize = row => row.games > 200; const forms = { itemTimings: { queryForms: ['hero_id', 'item'], - filterForms: ['time'] + filterForms: ['time'], }, laneRoles: { queryForms: ['hero_id', 'lane_role'], - filterForms: ['time'] + filterForms: ['time'], }, misc: { - queryForms: ['scenario'] - } + queryForms: ['scenario'], + }, }; const menuItems = [{ @@ -89,9 +88,8 @@ class Scenarios extends React.Component { } getData() { - const { scenariosDispatch } = this.props; const { selectedTab, formFields } = this.state; - scenariosDispatch[selectedTab](formFields[selectedTab]); + this.props[selectedTab](formFields[selectedTab]); } initialQuery() { @@ -125,12 +123,12 @@ class Scenarios extends React.Component { const { scenariosState } = this.props; const { selectedTab, formFields } = this.state; let { data } = scenariosState[selectedTab]; - const { queryForms, filterForms } = forms[selectedTab] + const { queryForms, filterForms } = forms[selectedTab]; const { metadata, metadataLoading, metadataError } = scenariosState.metadata; if (filterForms) { filterForms.forEach((key) => { - const formValue = formFields[selectedTab] && formFields[selectedTab][key] - data = data.filter(row => Number(formValue) === row[key] || formValue === row[key] || !formValue); + const formValue = formFields[selectedTab] && formFields[selectedTab][key]; + data = data.filter(row => Number(formValue) === row[key] || formValue === row[key] || !formValue); }); } return ( @@ -155,6 +153,7 @@ class Scenarios extends React.Component { updateFormFieldState={this.updateFormFieldStates} formFieldState={formFields[selectedTab] && formFields[selectedTab][field]} metadata={metadata} + className={filterForms && filterForms.includes(field) ? 'filter' : 'query'} /> ))}
    @@ -217,11 +216,9 @@ const mapStateToProps = (state) => { }; const mapDispatchToProps = dispatch => ({ - scenariosDispatch: { - itemTimings: params => dispatch(getScenariosItemTimings(params)), - laneRoles: params => dispatch(getScenariosLaneRoles(params)), - misc: params => dispatch(getScenariosMisc(params)), - }, + itemTimings: params => dispatch(getScenariosItemTimings(params)), + laneRoles: params => dispatch(getScenariosLaneRoles(params)), + misc: params => dispatch(getScenariosMisc(params)), }); Scenarios.propTypes = { @@ -237,7 +234,6 @@ Scenarios.propTypes = { push: PropTypes.func, }), scenariosState: PropTypes.shape({}), - scenariosDispatch: PropTypes.shape({}), }; export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Scenarios)); diff --git a/src/components/Scenarios/ScenariosFormField.jsx b/src/components/Scenarios/ScenariosFormField.jsx index 995b955d47..b4e3f61d7b 100644 --- a/src/components/Scenarios/ScenariosFormField.jsx +++ b/src/components/Scenarios/ScenariosFormField.jsx @@ -18,7 +18,7 @@ const hintTexts = { }, misc: { scenario: strings.scenarios_scenario, - } + }, }; const customStyles = { @@ -28,8 +28,9 @@ const customStyles = { class ScenarioFormField extends React.Component { constructor(props) { super(props); - const { field, formFieldState, metadata, selectedTab } = this.props; - console.log(this.props) + const { + field, formFieldState, metadata, selectedTab, + } = this.props; const { heroList, itemList, laneRoleList, miscList, gameDurationList, timingList, } = getFormFieldData(metadata); @@ -37,7 +38,7 @@ class ScenarioFormField extends React.Component { itemTimings: { hero_id: heroList, item: itemList, - time: timingList + time: timingList, }, laneRoles: { hero_id: heroList, @@ -46,7 +47,7 @@ class ScenarioFormField extends React.Component { }, misc: { scenario: miscList, - } + }, }; @@ -77,9 +78,8 @@ class ScenarioFormField extends React.Component { } render() { - const { field, selectedTab } = this.props; + const { field, selectedTab, className } = this.props; const { searchText } = this.state; - console.log(this.props) return (
    ); @@ -105,6 +105,8 @@ ScenarioFormField.propTypes = { formFieldState: PropTypes.shape({}), metadata: PropTypes.shape({}), updateFormFieldState: PropTypes.func, + selectedTab: PropTypes.string, + className: PropTypes.string, }; export default ScenarioFormField; diff --git a/src/components/Scenarios/Styles.jsx b/src/components/Scenarios/Styles.jsx index be2809723a..ebfe157ccd 100644 --- a/src/components/Scenarios/Styles.jsx +++ b/src/components/Scenarios/Styles.jsx @@ -2,7 +2,13 @@ import styled from 'styled-components'; import constants from '../constants'; export const StyledDiv = styled.div` - .autocomplete:hover label { + .filter > label { + color: ${constants.colorMuted} !important; + } + .query:hover label { + color: ${constants.colorBlue} !important; + } + .filter:hover label { color: ${constants.colorMutedLight} !important; } small { @@ -18,8 +24,8 @@ export const StyledDiv = styled.div` } } } - #formHeading { - margin-bottom: 0px !important; + .filter > div > hr:nth-child(2) { + border-bottom-color: ${constants.colorMutedLight} !important; } } `; diff --git a/src/components/Table/Table.jsx b/src/components/Table/Table.jsx index 470a04777f..0116865ce5 100644 --- a/src/components/Table/Table.jsx +++ b/src/components/Table/Table.jsx @@ -180,7 +180,7 @@ class Table extends React.Component { {columns.map((column, colIndex) => { const { - field, color, center, displayFn, relativeBars, percentBars, abbreviateAltValue, + field, color, center, displayFn, relativeBars, percentBars, percentBarsWithValue, sortFn, invertBarColor, underline, } = column; const getValue = typeof sortFn === 'function' ? sortFn : null; diff --git a/src/components/Visualizations/Table/Percent.jsx b/src/components/Visualizations/Table/Percent.jsx index e7641f4279..491f1c4a0c 100644 --- a/src/components/Visualizations/Table/Percent.jsx +++ b/src/components/Visualizations/Table/Percent.jsx @@ -36,6 +36,7 @@ Percent.propTypes = { altValue: oneOfType([string, number, bool]), valEl: node, inverse: bool, + abbreviateAltValue: bool, }; export default Percent; From 6471b60d907ea511097d535f0d969c508d9a7d55 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sun, 15 Apr 2018 16:30:15 -0700 Subject: [PATCH 0265/1495] New translations en-US.json (Chinese Simplified) --- src/lang/zh-CN.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index d8f4fd1cdf..f37a3a5aa6 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -8,7 +8,7 @@ "abbr_quadrillion": "q", "abbr_not_available": "N/A", "abbr_pick": "P", - "abbr_win": "W", + "abbr_win": "胜利", "abbr_number": "排名:", "analysis_eff": "占线效率", "analysis_farm_drought": "5分钟间隔内最低GPM", @@ -907,20 +907,20 @@ "tooltip_advantage": "按 Wilson 评分计算", "histograms_name": "直方图", "histograms_description": "百分比表示当前标签下的胜率", - "histograms_actions_per_min_description": "Actions performed by player per minute", - "histograms_comeback_description": "Maximum gold advantage in a won game", - "histograms_lane_efficiency_pct_description": "Percentage of lane gold (creeps+passive+starting) obtained at 10 minutes", - "histograms_gold_per_min_description": "Gold farmed per minute", - "histograms_hero_damage_description": "Amount of damage dealt to heroes", - "histograms_hero_healing_description": "Amount of health restored to heroes", + "histograms_actions_per_min_description": "每分钟操作数", + "histograms_comeback_description": "获胜的比赛中最大的经济领先", + "histograms_lane_efficiency_pct_description": "前 10 分钟线上经济占比(补刀+被动获得+初始)", + "histograms_gold_per_min_description": "每分钟平均金钱", + "histograms_hero_damage_description": "对敌方英雄造成的伤害", + "histograms_hero_healing_description": "对己方英雄的治疗量", "histograms_level_description": "Level achieved in a game", - "histograms_loss_description": "Maximum gold disadvantage in a lost game", - "histograms_pings_description": "Number of times the player pinged the map", - "histograms_stomp_description": "Maximum gold disadvantage in a won game", - "histograms_stuns_description": "Seconds of disable on heroes", - "histograms_throw_description": "Maximum gold advantage in a lost game", - "histograms_purchase_tpscroll_description": "Town Portal Scroll purchases", - "histograms_xp_per_min_description": "Experience gained per minute", + "histograms_loss_description": "失败的比赛中最大的经济落后", + "histograms_pings_description": "在小地图上发信号的次数", + "histograms_stomp_description": "获胜的比赛中最大的经济落后", + "histograms_stuns_description": "晕眩英雄的时间(秒)", + "histograms_throw_description": "失败的比赛中最大的经济领先", + "histograms_purchase_tpscroll_description": "购买回程卷轴数量", + "histograms_xp_per_min_description": "每分钟平均经验", "trends_name": "趋势", "trends_description": "近 20 场比赛累计平均值", "trends_tooltip_average": "平均", From 9e43bb13b28cbe9f7e475814669a3a07a63a1375 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Mon, 16 Apr 2018 01:23:33 +0000 Subject: [PATCH 0266/1495] lint --- src/actions/index.js | 7 +- src/components/App/App.jsx | 44 ++--- src/components/App/AppLogo.jsx | 11 +- src/components/Header/Header.jsx | 234 +++++++++++++------------- src/components/Heroes/columns.jsx | 2 +- src/components/Localization/index.jsx | 9 +- src/components/Search/SearchForm.jsx | 19 +-- src/reducers/index.js | 2 +- 8 files changed, 168 insertions(+), 160 deletions(-) diff --git a/src/actions/index.js b/src/actions/index.js index 95ab508dd9..4ac539942d 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -6,6 +6,7 @@ import transformHistograms from './transformHistograms'; import transformTrends from './transformTrends'; import transformRankings from './transformRankings'; import action from './action'; +import { langs } from '../lang'; export const getMetadata = () => action('metadata', process.env.REACT_APP_API_HOST, 'api/metadata'); export const getMatch = matchId => action('match', process.env.REACT_APP_API_HOST, `api/matches/${matchId}`, {}, transformMatch); @@ -62,11 +63,11 @@ export const getPlayerTotals = (accountId, params) => action('playerTotals', pro export const getPlayerMmr = (accountId, params) => action('playerMmr', process.env.REACT_APP_API_HOST, `api/players/${accountId}/ratings`, params); export const getPlayerRankings = (accountId, params) => action('playerRankings', process.env.REACT_APP_API_HOST, `api/players/${accountId}/rankings`, params, transformRankings); export const getStrings = () => async (dispatch) => { - const { langs } = require('../lang'); const savedLang = window.localStorage && window.localStorage.getItem('localization'); + const defaultLang = langs[0]; const selectedLang = langs.find(lang => lang.value === savedLang) || langs[0]; - const defData = await import('../lang/' + langs[0].data); - const selData = await import('../lang/' + selectedLang.data); + const defData = await import(`../lang/${defaultLang.data}`); + const selData = await import(`../lang/${selectedLang.data}`); dispatch({ type: 'strings', payload: { ...defData, ...selData } }); }; export * from './requestActions'; diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index 4b86597fe0..9fcd9444d6 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -6,25 +6,24 @@ import darkBaseTheme from 'material-ui/styles/baseThemes/darkBaseTheme'; import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'; import Helmet from 'react-helmet'; import styled from 'styled-components'; +import { Route } from 'react-router-dom'; import Header from '../Header'; -// import { Route } from 'react-router-dom'; -// import strings from '../../lang'; -// import Player from '../Player'; -// import Home from '../Home'; -// import Search from '../Search'; -// import Explorer from '../Explorer'; -// // import FourOhFour from '../FourOhFour'; -// import Heroes from '../Heroes'; -// import Request from '../Request'; -// import Distributions from '../Distributions'; -// import Status from '../Status'; -// import Matches from '../Matches'; -// import Teams from '../Teams'; -// // import Assistant from '../Assistant'; -// import Records from '../Records'; -// // import Predictions from '../Predictions'; -// import Meta from '../Meta'; -// import Footer from '../Footer'; +import Player from '../Player'; +import Home from '../Home'; +import Search from '../Search'; +import Explorer from '../Explorer'; +// import FourOhFour from '../FourOhFour'; +import Heroes from '../Heroes'; +import Request from '../Request'; +import Distributions from '../Distributions'; +import Status from '../Status'; +import Matches from '../Matches'; +import Teams from '../Teams'; +// import Assistant from '../Assistant'; +import Records from '../Records'; +// import Predictions from '../Predictions'; +import Meta from '../Meta'; +import Footer from '../Footer'; import constants from '../constants'; const muiTheme = { @@ -90,7 +89,9 @@ class App extends React.Component { } render() { - const { params, width, location, strings } = this.props; + const { + params, width, location, strings, + } = this.props; return ( @@ -99,7 +100,6 @@ class App extends React.Component { titleTemplate={strings.title_template} />
    - {/* { location.pathname !== '/' && @@ -134,7 +134,6 @@ class App extends React.Component { }
    + + + {strings.api_month} + {strings.api_usage_calls} + {strings.api_usage_fees} + + + + { this.state.usage.map(e => ( + + {e.month} + {e.usage_count} + {`$${premPrice * Math.ceil(e.usage_count / premUnit)}`} + ))} + +
    + +
    + :
    + } +
    + :
    + } +
    + } +

    {strings.api_header_table}

    + + + + + + {strings.api_details_free_tier} + {strings.api_details_premium_tier} + + + + + {strings.api_details_price} + {strings.api_details_price_free} + {strings.api_details_price_prem.replace('price', premPrice).replace('$unit', premUnit)} + + + {strings.api_details_key_required} + {strings.api_details_key_required_free} + {strings.api_details_key_required_prem} + + + {strings.api_details_call_limit} + {strings.api_details_call_limit_free.replace('$limit', freeCallLimit)} + {strings.api_details_call_limit_prem} + + + {strings.api_details_rate_limit} + {strings.api_details_rate_limit_val.replace('$num', freeRateLimit)} + {strings.api_details_rate_limit_val.replace('$num', premRateLimit)} + + + {strings.api_details_support} + {strings.api_details_support_free} + {strings.api_details_support_prem} + + + +
    +
    + +

    {strings.api_header_details}

    + +
      +
    • {strings.api_charging.replace('$cost', `$${premPrice / premUnit}`)}
    • +
    • {strings.api_credit_required}
    • +
    • {strings.api_delay}
    • +
    +
    + +
    + ); + } +} + +KeyManagement.propTypes = { + loading: PropTypes.bool, + user: PropTypes.shape({}), +}; + +const mapStateToProps = (state) => { + const { error, loading, data } = state.app.metadata; + return { + loading, + error, + user: data.user, + }; +}; + +// const mapDispatchToProps = dispatch => ({ +// dispatchPostRequest: matchId => dispatch(postRequest(matchId)), +// }); + +export default connect(mapStateToProps, null)(KeyManagement); diff --git a/src/components/Api/index.js b/src/components/Api/index.js new file mode 100644 index 0000000000..cc26b43fec --- /dev/null +++ b/src/components/Api/index.js @@ -0,0 +1,3 @@ +import Api from './Api'; + +export default Api; diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index 1a8adbfcd0..3f0bc64614 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -23,6 +23,7 @@ import Teams from '../Teams'; import Records from '../Records'; // import Predictions from '../Predictions'; import Meta from '../Meta'; +import Api from '../Api'; import Header from '../Header'; import Footer from '../Footer'; import constants from '../constants'; @@ -75,7 +76,8 @@ const StyledBodyDiv = styled.div` const AdBannerDiv = styled.div` text-align: center; - + margin-bottom: 5px; + & img { margin-top: 10px; max-width: 100%; @@ -91,6 +93,7 @@ class App extends React.Component { render() { const { params, width, location } = this.props; + const includeAds = !['/', '/api'].includes(location.pathname); return ( @@ -100,7 +103,7 @@ class App extends React.Component { />
    - { location.pathname !== '/' && + { includeAds && @@ -119,16 +122,17 @@ class App extends React.Component { + - { location.pathname !== '/' && - - - - } - { location.pathname !== '/' && + { includeAds &&
    - {strings.home_sponsored_by} Rivalry + + + +
    + {strings.home_sponsored_by} Rivalry +
    }
    diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index aee945e539..fe17f9bd39 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -29,6 +29,7 @@ const navbarPages = [ {strings.header_heroes}, {strings.header_distributions}, {strings.header_records}, + {strings.header_api}, // Predictions, // Assistant, ]; diff --git a/src/lang/en-US.json b/src/lang/en-US.json index 23afc356ae..708ea08d38 100644 --- a/src/lang/en-US.json +++ b/src/lang/en-US.json @@ -24,7 +24,47 @@ "announce_dismiss": "Dismiss", "announce_github_more": "View on GitHub", - + + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", + "api_header_details": "Details", + "app_name": "OpenDota", "app_language": "Language", "app_localization": "Localization", @@ -263,6 +303,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -852,6 +893,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "Records", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR of the player", "tooltip_abilitydraft": "Ability Drafted", From b9ec9977f5ae6802e9fba9bce8acf230bf0ee5da Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Wed, 18 Apr 2018 04:16:55 +0000 Subject: [PATCH 0272/1495] open docs in new page --- src/components/Api/Api.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Api/Api.jsx b/src/components/Api/Api.jsx index cb74759c7c..cb6db22ae1 100644 --- a/src/components/Api/Api.jsx +++ b/src/components/Api/Api.jsx @@ -208,7 +208,7 @@ class KeyManagement extends React.Component { : } - + { this.state.customer ? From 894fde8143a24ba9fad17e77baa7aab54cbf2b7c Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:20:20 -0700 Subject: [PATCH 0273/1495] New translations en-US.json (Russian) --- src/lang/ru-RU.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index b6f6d7cdaf..61bf2007e6 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -21,6 +21,44 @@ "analysis_expected": "из", "announce_dismiss": "Пропустить", "announce_github_more": "Подробнее на GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Язык", "app_localization": "Локализация", @@ -246,6 +284,7 @@ "header_explorer": "Проводник", "header_teams": "Команды", "header_meta": "Мета", + "header_api": "API", "heading_lhten": "Добиваний @ 10", "heading_lhtwenty": "Добиваний @ 20", "heading_lhthirty": "Добиваний @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Мета", "title_records": "Записи", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Одиночный рейтинг игрока", "tooltip_abilitydraft": "Выбранные способности", "tooltip_level": "Уровень, полученный героем", From a8ae3dbec9f66ec20834745a0949129509e5c70b Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:20:23 -0700 Subject: [PATCH 0274/1495] New translations en-US.json (Italian) --- src/lang/it-IT.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/it-IT.json b/src/lang/it-IT.json index bc28201637..ab64620243 100644 --- a/src/lang/it-IT.json +++ b/src/lang/it-IT.json @@ -21,6 +21,44 @@ "analysis_expected": "di", "announce_dismiss": "Annulla", "announce_github_more": "Vedi su GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Lingua", "app_localization": "Localizzazione", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Squadre", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Colpi di grazia @ 10", "heading_lhtwenty": "Colpi di grazia @ 20", "heading_lhthirty": "Colpi di grazia @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "Record", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR del giocatore", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Livello ottenuto dall'eroe", From 0c513cf4ce3d7510f5c914c71e3f33e9cf9c07f3 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:20:27 -0700 Subject: [PATCH 0275/1495] New translations en-US.json (Swedish) --- src/lang/sv-SE.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/sv-SE.json b/src/lang/sv-SE.json index 880e74ac12..b5b09b80ae 100644 --- a/src/lang/sv-SE.json +++ b/src/lang/sv-SE.json @@ -21,6 +21,44 @@ "analysis_expected": "av", "announce_dismiss": "Avfärda", "announce_github_more": "Visa på GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "ÖpenDota", "app_language": "Språk", "app_localization": "Lokalisering", @@ -246,6 +284,7 @@ "header_explorer": "Utforskare", "header_teams": "Lag", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", "heading_lhthirty": "Last Hits @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Datautforskare", "title_meta": "Meta", "title_records": "Rekord", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Ensam MMR för spelaren", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Övergav (DC) ", From 43411bd4fbb96c2b86c8201ea27e9b3bb9b19f99 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:20:29 -0700 Subject: [PATCH 0276/1495] New translations en-US.json (Spanish, United States) --- src/lang/es-US.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/es-US.json b/src/lang/es-US.json index dba3948480..915a9c5ea5 100644 --- a/src/lang/es-US.json +++ b/src/lang/es-US.json @@ -21,6 +21,44 @@ "analysis_expected": "de", "announce_dismiss": "Despedir", "announce_github_more": "Ver en Github", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Idioma", "app_localization": "Localización", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", "heading_lhthirty": "Last Hits @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "Récords", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "MMR Individual del jugador", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Nivel alcanzado por héroe", From b421b4d9439ac22a42079786f05827970ced0a88 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:20:33 -0700 Subject: [PATCH 0277/1495] New translations en-US.json (Spanish, Peru) --- src/lang/es-PE.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/es-PE.json b/src/lang/es-PE.json index 70f73d4d4b..c162525796 100644 --- a/src/lang/es-PE.json +++ b/src/lang/es-PE.json @@ -21,6 +21,44 @@ "analysis_expected": "de", "announce_dismiss": "Dismiss", "announce_github_more": "View on GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Language", "app_localization": "Localization", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", "heading_lhthirty": "Last Hits @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "Récords", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR del jugador", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Nivel alcanzado por héroe", From f73b35f01adb0f4baa2256a6517173c6d62dad72 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:20:35 -0700 Subject: [PATCH 0278/1495] New translations en-US.json (Spanish) --- src/lang/es-ES.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/es-ES.json b/src/lang/es-ES.json index f1691e665c..13e461b35b 100644 --- a/src/lang/es-ES.json +++ b/src/lang/es-ES.json @@ -21,6 +21,44 @@ "analysis_expected": "de", "announce_dismiss": "Descartar", "announce_github_more": "Ver en Github", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Idioma", "app_localization": "Localización", @@ -246,6 +284,7 @@ "header_explorer": "Explorador", "header_teams": "Equipos", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Últimos Golpes a los 10", "heading_lhtwenty": "Últimos Golpes a los 20", "heading_lhthirty": "Últimos Golpes a los 30", @@ -801,6 +840,7 @@ "title_explorer": "Explorador de datos", "title_meta": "Meta", "title_records": "Récords", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "MMR Individual del jugador", "tooltip_abilitydraft": "Seleccionado en Draft", "tooltip_level": "Nivel alcanzado por héroe", From 9f94ebed26cc7f5c6c174798754365ce4ca18a3b Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:20:38 -0700 Subject: [PATCH 0279/1495] New translations en-US.json (Slovak) --- src/lang/sk-SK.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/sk-SK.json b/src/lang/sk-SK.json index 96f8515a54..076756c2b4 100644 --- a/src/lang/sk-SK.json +++ b/src/lang/sk-SK.json @@ -21,6 +21,44 @@ "analysis_expected": "of", "announce_dismiss": "Dismiss", "announce_github_more": "Zobraziť na GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Jazyk", "app_localization": "Lokalizácia", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", "heading_lhthirty": "Last Hits @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "Records", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR of the player", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Level achieved by hero", From 3f9be83652a0e7f1523e68c91b8dbd076c28b76b Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:20:41 -0700 Subject: [PATCH 0280/1495] New translations en-US.json (Serbian (Cyrillic)) --- src/lang/sr-SP.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/sr-SP.json b/src/lang/sr-SP.json index e65c6611de..62fe848288 100644 --- a/src/lang/sr-SP.json +++ b/src/lang/sr-SP.json @@ -21,6 +21,44 @@ "analysis_expected": "of", "announce_dismiss": "Dismiss", "announce_github_more": "View on GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Language", "app_localization": "Localization", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", "heading_lhthirty": "Last Hits @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "Records", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR of the player", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Level achieved by hero", From 4c891f68c31a4c47d4cab8ca8af9610d4b586647 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:20:43 -0700 Subject: [PATCH 0281/1495] New translations en-US.json (Romanian) --- src/lang/ro-RO.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/ro-RO.json b/src/lang/ro-RO.json index 073a4df8ce..40290efe6e 100644 --- a/src/lang/ro-RO.json +++ b/src/lang/ro-RO.json @@ -21,6 +21,44 @@ "analysis_expected": "of", "announce_dismiss": "Închide", "announce_github_more": "Vezi pe GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Limbă", "app_localization": "Localizare", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Echipe", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Lovituri de Finalizare @ 10", "heading_lhtwenty": "Lovituri de Finalizare @ 20", "heading_lhthirty": "Lovituri de Finalizare @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Explorator de Date", "title_meta": "Meta", "title_records": "Înregistrări", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "MMR-ul individual al jucatorului", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Level achieved by hero", From 290bdeb53c14b86e77d0ccf232dc1cbfa0dd1ec1 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:20:46 -0700 Subject: [PATCH 0282/1495] New translations en-US.json (Portuguese) --- src/lang/pt-PT.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/pt-PT.json b/src/lang/pt-PT.json index 16b1989c2a..f464d9cb86 100644 --- a/src/lang/pt-PT.json +++ b/src/lang/pt-PT.json @@ -21,6 +21,44 @@ "analysis_expected": "of", "announce_dismiss": "Dismiss", "announce_github_more": "View on GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Language", "app_localization": "Localization", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", "heading_lhthirty": "Last Hits @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "Records", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR of the player", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Level achieved by hero", From 79438e6702d199455733fd1df3f702746f025f09 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:20:49 -0700 Subject: [PATCH 0283/1495] New translations en-US.json (Polish) --- src/lang/pl-PL.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/pl-PL.json b/src/lang/pl-PL.json index 212957a368..ed18e7d112 100644 --- a/src/lang/pl-PL.json +++ b/src/lang/pl-PL.json @@ -21,6 +21,44 @@ "analysis_expected": "z", "announce_dismiss": "Pomiń", "announce_github_more": "Zobacz w witrynie GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Język", "app_localization": "Lokalizacja", @@ -246,6 +284,7 @@ "header_explorer": "Eksplorator", "header_teams": "Drużyny", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Ostatnie trafienia w 10 min", "heading_lhtwenty": "Ostatnie trafienia w 20 min", "heading_lhthirty": "Ostatnie trafienia w 30 min", @@ -801,6 +840,7 @@ "title_explorer": "Eksplorator danych", "title_meta": "Meta", "title_records": "Wpisy", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR gracza", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Poziom uzyskany przez bohatera", From 15c5de7b52364c74755957c5a858d0f37098f917 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:20:52 -0700 Subject: [PATCH 0284/1495] New translations en-US.json (Norwegian) --- src/lang/no-NO.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/no-NO.json b/src/lang/no-NO.json index d533468973..015e5f65ab 100644 --- a/src/lang/no-NO.json +++ b/src/lang/no-NO.json @@ -21,6 +21,44 @@ "analysis_expected": "of", "announce_dismiss": "Dismiss", "announce_github_more": "View on GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Language", "app_localization": "Localization", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", "heading_lhthirty": "Last Hits @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "Records", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR of the player", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Level achieved by hero", From dc3c6aff0d495c602988e80236944f50bcc40c31 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:20:55 -0700 Subject: [PATCH 0285/1495] New translations en-US.json (Malay) --- src/lang/ms-MY.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/ms-MY.json b/src/lang/ms-MY.json index 87d0c3d6bf..aa1c0b5761 100644 --- a/src/lang/ms-MY.json +++ b/src/lang/ms-MY.json @@ -21,6 +21,44 @@ "analysis_expected": "dari", "announce_dismiss": "Abaikan", "announce_github_more": "Lihat di GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Bahasa", "app_localization": "Penyetempatan", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Team", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", "heading_lhthirty": "Last Hits @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "Rekod", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "MMR Solo Pemain", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Level yang dicapai oleh hero", From 4ef788bc43a335325d2a5ac055844e011efdf823 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:20:58 -0700 Subject: [PATCH 0286/1495] New translations en-US.json (Korean) --- src/lang/ko-KR.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/ko-KR.json b/src/lang/ko-KR.json index 1587e36f1a..33232515eb 100644 --- a/src/lang/ko-KR.json +++ b/src/lang/ko-KR.json @@ -21,6 +21,44 @@ "analysis_expected": "의", "announce_dismiss": "숨기기", "announce_github_more": "Github에서 보기", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "오픈도타", "app_language": "언어", "app_localization": "현지화", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "팀", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "마지막 타격 @ 10", "heading_lhtwenty": "마지막 타격 @ 20", "heading_lhthirty": "마지막 타격 @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "기록", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR of the player", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Level achieved by hero", From 53ce2aa9a77e7e44c44251ce48e01c5950ffb3e1 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:21:01 -0700 Subject: [PATCH 0287/1495] New translations en-US.json (Japanese) --- src/lang/ja-JP.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/ja-JP.json b/src/lang/ja-JP.json index fcd4791e7d..d069bd2044 100644 --- a/src/lang/ja-JP.json +++ b/src/lang/ja-JP.json @@ -21,6 +21,44 @@ "analysis_expected": "の", "announce_dismiss": "閉じる", "announce_github_more": "GitHubで見る", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "言語", "app_localization": "ローカライゼーション", @@ -246,6 +284,7 @@ "header_explorer": "エクスプローラー", "header_teams": "Teams", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "ラストヒット数 @ 10", "heading_lhtwenty": "ラストヒット数 @ 20", "heading_lhthirty": "ラストヒット数 @ 30", @@ -801,6 +840,7 @@ "title_explorer": "データを見る", "title_meta": "Meta", "title_records": "記録", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "プレイヤーのソロMMR", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "ヒーローが到達したレベル", From 1e36fd9ba5210245584183255491f6599b817ce3 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:21:04 -0700 Subject: [PATCH 0288/1495] New translations en-US.json (Hungarian) --- src/lang/hu-HU.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/hu-HU.json b/src/lang/hu-HU.json index 223ee1519c..4461c6df1d 100644 --- a/src/lang/hu-HU.json +++ b/src/lang/hu-HU.json @@ -21,6 +21,44 @@ "analysis_expected": "of", "announce_dismiss": "Dismiss", "announce_github_more": "View on GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Language", "app_localization": "Localization", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", "heading_lhthirty": "Last Hits @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "Records", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR of the player", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Level achieved by hero", From c3c92a5ad5a0d48e6f653387ab98bd2e1b39f96e Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:21:07 -0700 Subject: [PATCH 0289/1495] New translations en-US.json (Chinese Simplified) --- src/lang/zh-CN.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index f37a3a5aa6..b7e5fc9002 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -21,6 +21,44 @@ "analysis_expected": "of", "announce_dismiss": "关闭", "announce_github_more": "在 GitHub 上查看", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "语言", "app_localization": "本地化", @@ -246,6 +284,7 @@ "header_explorer": "数据探索器", "header_teams": "职业战队", "header_meta": "玩法", + "header_api": "API", "heading_lhten": "10 分钟正补", "heading_lhtwenty": "20 分钟正补", "heading_lhthirty": "30 分钟正补", @@ -801,6 +840,7 @@ "title_explorer": "数据探索器", "title_meta": "玩法", "title_records": "记录", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "玩家单排天梯积分", "tooltip_abilitydraft": "技能征召", "tooltip_level": "结束游戏时的英雄等级", From 2ba58cf86980b47ce55eb67d932db046c176a853 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:21:10 -0700 Subject: [PATCH 0290/1495] New translations en-US.json (Hebrew) --- src/lang/he-IL.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/he-IL.json b/src/lang/he-IL.json index 1403c5c2ed..f5c7eea7d3 100644 --- a/src/lang/he-IL.json +++ b/src/lang/he-IL.json @@ -21,6 +21,44 @@ "analysis_expected": "של", "announce_dismiss": "דחה", "announce_github_more": "הצג ב GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "דוטא פתוח", "app_language": "שפה", "app_localization": "לוקליזציה", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "קבוצות", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", "heading_lhthirty": "Last Hits @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "רשומות", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "MMR אישי של השחקן", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Level achieved by hero", From b8c0d528e3b583394e70c0d0b5a45cfa1a05e48a Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:21:13 -0700 Subject: [PATCH 0291/1495] New translations en-US.json (Greek) --- src/lang/el-GR.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/el-GR.json b/src/lang/el-GR.json index 5208e0880a..ba978175cc 100644 --- a/src/lang/el-GR.json +++ b/src/lang/el-GR.json @@ -21,6 +21,44 @@ "analysis_expected": "of", "announce_dismiss": "Dismiss", "announce_github_more": "View on GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Language", "app_localization": "Localization", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", "heading_lhthirty": "Last Hits @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "Records", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR of the player", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Level achieved by hero", From 923a4113812bc08c15517b15d57f905ae3036ccf Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:21:16 -0700 Subject: [PATCH 0292/1495] New translations en-US.json (German) --- src/lang/de-DE.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index 9bd14249c8..0bcf70e0f9 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -21,6 +21,44 @@ "analysis_expected": "von", "announce_dismiss": "Verwerfen", "announce_github_more": "Öffne auf Github", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Sprache", "app_localization": "Lokalisation", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", "heading_lhthirty": "Last Hits @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "Nutzerdatensätze", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR des Spielers", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Erreichtes Level je Held", From fe56ba0b1c959207af57d92ae9bf9ce80379a173 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:21:19 -0700 Subject: [PATCH 0293/1495] New translations en-US.json (French) --- src/lang/fr-FR.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/fr-FR.json b/src/lang/fr-FR.json index 9b9e48f471..b2165adf2c 100644 --- a/src/lang/fr-FR.json +++ b/src/lang/fr-FR.json @@ -21,6 +21,44 @@ "analysis_expected": "de", "announce_dismiss": "Cacher", "announce_github_more": "Voir sur GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Langue", "app_localization": "Localisation", @@ -246,6 +284,7 @@ "header_explorer": "Explorateur", "header_teams": "Équipes", "header_meta": "Méta", + "header_api": "API", "heading_lhten": "Last Hits à 10 minutes", "heading_lhtwenty": "Last Hits à 20 minutes", "heading_lhthirty": "Last Hits à 30 minutes", @@ -801,6 +840,7 @@ "title_explorer": "Explorateur de données", "title_meta": "Méta", "title_records": "Records", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR du joueur", "tooltip_abilitydraft": "Abilités choisies", "tooltip_level": "Niveau acquis par héros", From d09a341b56fcc9a1992465084c2fa4876ccf9f73 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:21:22 -0700 Subject: [PATCH 0294/1495] New translations en-US.json (Finnish) --- src/lang/fi-FI.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/fi-FI.json b/src/lang/fi-FI.json index 97f64ce648..b8ef5cf66c 100644 --- a/src/lang/fi-FI.json +++ b/src/lang/fi-FI.json @@ -21,6 +21,44 @@ "analysis_expected": "of", "announce_dismiss": "Dismiss", "announce_github_more": "View on GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Language", "app_localization": "Localization", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", "heading_lhthirty": "Last Hits @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "Records", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR of the player", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Level achieved by hero", From 7ea768534f0eae5934f8b73bc4d70634a646509b Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:21:25 -0700 Subject: [PATCH 0295/1495] New translations en-US.json (Dutch) --- src/lang/nl-NL.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/nl-NL.json b/src/lang/nl-NL.json index 41136d7a07..e45a97c1ab 100644 --- a/src/lang/nl-NL.json +++ b/src/lang/nl-NL.json @@ -21,6 +21,44 @@ "analysis_expected": "van", "announce_dismiss": "Afwijzen", "announce_github_more": "Bekijk op GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Taal", "app_localization": "Lokalisatie", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", "heading_lhthirty": "Laatste Hits @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Verkenner", "title_meta": "Meta", "title_records": "Records", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR of the player", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Level achieved by hero", From 8a20129acd7ec39e639435b2312b44df14276f94 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:21:28 -0700 Subject: [PATCH 0296/1495] New translations en-US.json (Danish) --- src/lang/da-DK.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/da-DK.json b/src/lang/da-DK.json index 82b5350c4d..9a7183ce86 100644 --- a/src/lang/da-DK.json +++ b/src/lang/da-DK.json @@ -21,6 +21,44 @@ "analysis_expected": "af", "announce_dismiss": "Annullér", "announce_github_more": "Se på GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Sprog", "app_localization": "Lokalisering", @@ -246,6 +284,7 @@ "header_explorer": "Browser", "header_teams": "Teams", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Sidste træffere @ 10", "heading_lhtwenty": "Sidste træffere @ 20", "heading_lhthirty": "Sidste træffere @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "Records", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR of the player", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Level achieved by hero", From a1fe7e0ee9f904bc779499d0b026a5cbf9b00580 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:21:32 -0700 Subject: [PATCH 0297/1495] New translations en-US.json (Czech) --- src/lang/cs-CZ.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/cs-CZ.json b/src/lang/cs-CZ.json index 1fca1733cb..eeb65b16ad 100644 --- a/src/lang/cs-CZ.json +++ b/src/lang/cs-CZ.json @@ -21,6 +21,44 @@ "analysis_expected": "z", "announce_dismiss": "Zavřít", "announce_github_more": "Zobrazit GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Jazyk", "app_localization": "Lokalizace", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", "heading_lhthirty": "Last Hits @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "Rekordy", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR of the player", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Level achieved by hero", From 626d507d53e67d17d91ac0adaae1d483a2082437 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:21:35 -0700 Subject: [PATCH 0298/1495] New translations en-US.json (Chinese Traditional) --- src/lang/zh-TW.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/zh-TW.json b/src/lang/zh-TW.json index 8625c78cab..2e9b740282 100644 --- a/src/lang/zh-TW.json +++ b/src/lang/zh-TW.json @@ -21,6 +21,44 @@ "analysis_expected": "of", "announce_dismiss": "Dismiss", "announce_github_more": "View on GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "語言", "app_localization": "Localization", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", "heading_lhthirty": "Last Hits @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "记录", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "玩家单排天梯积分", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "结束游戏时的英雄等级", From bf4f782fadacca429388c501e2fbb4972897551e Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:21:38 -0700 Subject: [PATCH 0299/1495] New translations en-US.json (Bulgarian) --- src/lang/bg-BG.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/bg-BG.json b/src/lang/bg-BG.json index 3f8d98d25b..97b3adbbfc 100644 --- a/src/lang/bg-BG.json +++ b/src/lang/bg-BG.json @@ -21,6 +21,44 @@ "analysis_expected": "of", "announce_dismiss": "Dismiss", "announce_github_more": "View on GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Language", "app_localization": "Localization", @@ -246,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", "heading_lhthirty": "Last Hits @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "Рекорди", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR of the player", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Level achieved by hero", From 9cd2616fd82d6f9e45c542ca213e89a8dbc5abc3 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:21:41 -0700 Subject: [PATCH 0300/1495] New translations en-US.json (Vietnamese) --- src/lang/vi-VN.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/vi-VN.json b/src/lang/vi-VN.json index 5a36076c53..488a45d2a8 100644 --- a/src/lang/vi-VN.json +++ b/src/lang/vi-VN.json @@ -21,6 +21,44 @@ "analysis_expected": "của", "announce_dismiss": "Bỏ qua", "announce_github_more": "Xem trên Github", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Ngôn ngữ", "app_localization": "Địa phương hóa", @@ -246,6 +284,7 @@ "header_explorer": "Khám phá", "header_teams": "Các đội", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Điểm creep @10", "heading_lhtwenty": "Điểm creep @ 20", "heading_lhthirty": "Điểm creep @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Công cụ khám phá dữ liệu", "title_meta": "Meta", "title_records": "Kỉ lục", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Solo MMR của người chơi", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Level achieved by hero", From a79867a3fe6693e4b79022c171f8627074d144eb Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:21:44 -0700 Subject: [PATCH 0301/1495] New translations en-US.json (Ukrainian) --- src/lang/uk-UA.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/uk-UA.json b/src/lang/uk-UA.json index 94a4750dde..8791b7534f 100644 --- a/src/lang/uk-UA.json +++ b/src/lang/uk-UA.json @@ -21,6 +21,44 @@ "analysis_expected": "з", "announce_dismiss": "Відхиляти", "announce_github_more": "Вид на GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Мова", "app_localization": "Локалізація", @@ -246,6 +284,7 @@ "header_explorer": "Огляд", "header_teams": "Команди", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Добито @ 10", "heading_lhtwenty": "Добито @ 20", "heading_lhthirty": "Добито @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Data Explorer", "title_meta": "Meta", "title_records": "Рекорди", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Соло MMR гравця", "tooltip_abilitydraft": "Ability Drafted", "tooltip_level": "Рівень, досягнутий героєм", From 5682f7109af3e493b09cc123d8217b7111aa440f Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:21:46 -0700 Subject: [PATCH 0302/1495] New translations en-US.json (Portuguese, Brazilian) --- src/lang/pt-BR.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index 4f4ac03fbd..b5af3eb8e0 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -21,6 +21,44 @@ "analysis_expected": "do/da/de\n(male/female/overall)", "announce_dismiss": "Cancelar", "announce_github_more": "Ver no GitHub", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "OpenDota", "app_language": "Idioma", "app_localization": "Localização", @@ -246,6 +284,7 @@ "header_explorer": "Navegador", "header_teams": "Equipes", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Últimos Golpes @ 10", "heading_lhtwenty": "Últimos Golpes @ 20", "heading_lhthirty": "Últimos Golpes @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Explorador de Dados", "title_meta": "Meta", "title_records": "Recordes", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "MMR Individual do jogador", "tooltip_abilitydraft": "Seleção de Habilidades", "tooltip_level": "Nível alcançado pelo herói", From 0526a0594a9ba4cbc45a2bd457e2084428bba2fd Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Tue, 17 Apr 2018 21:21:49 -0700 Subject: [PATCH 0303/1495] New translations en-US.json (Turkish) --- src/lang/tr-TR.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json index d25992ad63..cea4648212 100644 --- a/src/lang/tr-TR.json +++ b/src/lang/tr-TR.json @@ -21,6 +21,44 @@ "analysis_expected": "-nin", "announce_dismiss": "Vazgeç", "announce_github_more": "GitHub'da görüntüle", + "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", + "api_title": "The OpenDota API", + "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", + "api_details_free_tier": "Free Tier", + "api_details_premium_tier": "Premium Tier", + "api_details_price": "Price", + "api_details_price_free": "Free", + "api_details_price_prem": "$price per $unit calls", + "api_details_key_required": "Key Required?", + "api_details_key_required_free": "No", + "api_details_key_required_prem": "Yes -- requires payment method", + "api_details_call_limit": "Call Limit", + "api_details_call_limit_free": "$limit per month", + "api_details_call_limit_prem": "Unlimited", + "api_details_rate_limit": "Rate Limit", + "api_details_rate_limit_val": "$num calls per minute", + "api_details_support": "Support", + "api_details_support_free": "Community support via Discord group", + "api_details_support_prem": "Priority support from core developers", + "api_get_key": "Get my key", + "api_docs": "Read the docs", + "api_header_details": "Details", + "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", + "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", + "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", + "api_login": "Login to access API Key", + "api_update_billing": "Update billing method", + "api_delete": "Delete key", + "api_key_usage": "To use your key, add $param as a query parameter to your API request:", + "api_billing_cycle": "The current billing cycle ends on $date.", + "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_header_usage": "Your Usage", + "api_usage_calls": "# API calls", + "api_usage_fees": "Estimated Fees", + "api_month": "Month", + "api_header_key": "Your Key", + "api_header_table": "Get started for free. Keep going at a ridiculously low price.", "app_name": "AçıkDota", "app_language": "Dil", "app_localization": "Yerelleştirme", @@ -246,6 +284,7 @@ "header_explorer": "Gezgin", "header_teams": "Takımlar", "header_meta": "Meta", + "header_api": "API", "heading_lhten": "Son vuruşlar @ 10", "heading_lhtwenty": "Son Vuruşlar @ 20", "heading_lhthirty": "Son Vuruşlar @ 30", @@ -801,6 +840,7 @@ "title_explorer": "Veri Gezgini", "title_meta": "Meta", "title_records": "Kayıtlar", + "title_api": "The Opendota API: Advanced Dota 2 stats for your app", "tooltip_mmr": "Oyuncunun tekil ED'si", "tooltip_abilitydraft": "Yetenek Çekilişi", "tooltip_level": "Kahramanın ulaşılan seviyesi", From a70e1a690ba5d525a1c585c5c60ba16a158a6bac Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Wed, 18 Apr 2018 04:34:51 +0000 Subject: [PATCH 0304/1495] update url --- src/components/App/App.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index 3f0bc64614..697b85dd58 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -122,7 +122,7 @@ class App extends React.Component { - + { includeAds && From 8d4b750b7064d4512be22611f247cfc153c76b35 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Wed, 18 Apr 2018 04:38:10 +0000 Subject: [PATCH 0305/1495] update other link --- src/components/Header/Header.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index fe17f9bd39..49415d0240 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -29,7 +29,7 @@ const navbarPages = [ {strings.header_heroes}, {strings.header_distributions}, {strings.header_records}, - {strings.header_api}, + {strings.header_api}, // Predictions, // Assistant, ]; From 4c635ce59f27e2e324f2852fd43f8df27b8e87fc Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Wed, 18 Apr 2018 04:40:58 +0000 Subject: [PATCH 0306/1495] fix target blank --- src/components/Api/Api.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Api/Api.jsx b/src/components/Api/Api.jsx index cb6db22ae1..3367c50935 100644 --- a/src/components/Api/Api.jsx +++ b/src/components/Api/Api.jsx @@ -208,7 +208,7 @@ class KeyManagement extends React.Component { : } - + { this.state.customer ? From a045ac9ba95d29f5cf7671de415b6775e7216606 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Wed, 18 Apr 2018 04:45:19 +0000 Subject: [PATCH 0307/1495] last place to update link --- src/components/App/App.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index 697b85dd58..f500be8c90 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -93,7 +93,7 @@ class App extends React.Component { render() { const { params, width, location } = this.props; - const includeAds = !['/', '/api'].includes(location.pathname); + const includeAds = !['/', '/api-keys'].includes(location.pathname); return ( From 685f4eb81ee3b0a720a8c239458f8b7faa298453 Mon Sep 17 00:00:00 2001 From: Argn0 Date: Wed, 18 Apr 2018 07:39:22 +0200 Subject: [PATCH 0308/1495] softlaunch --- src/components/Header/Header.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index 38660d1ac9..5d691d8db9 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -29,7 +29,7 @@ const navbarPages = [ {strings.header_heroes}, {strings.header_distributions}, {strings.header_records}, - {strings.header_scenarios}, + // {strings.header_scenarios}, // Predictions, // Assistant, ]; From de58bf40f528429ebb2079b2ac7d58e2e4f83cb2 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Thu, 19 Apr 2018 06:04:05 +0000 Subject: [PATCH 0309/1495] fix a merge --- package-lock.json | 2 +- src/components/App/App.jsx | 8 +------- src/components/Header/Header.jsx | 2 +- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index a752162899..50b45042af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7752,7 +7752,7 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { "brace-expansion": "1.1.8" } diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index c91e7d8adb..e567216e95 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -91,14 +91,8 @@ class App extends React.Component { } render() { -<<<<<<< HEAD - const { - params, width, location, strings, - } = this.props; -======= - const { params, width, location } = this.props; + const { params, width, location, strings } = this.props; const includeAds = !['/', '/api-keys'].includes(location.pathname); ->>>>>>> a045ac9ba95d29f5cf7671de415b6775e7216606 return ( diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index 56fd131a19..a0a04b0e11 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -88,7 +88,7 @@ const Header = ({ {strings.header_heroes}, {strings.header_distributions}, {strings.header_records}, - {strings.header_api}, + {strings.header_api}, // Predictions, // Assistant, ]; From b3ede0d5807b5e13ebc12abdecfecb45dc6a50dd Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Thu, 19 Apr 2018 06:24:52 +0000 Subject: [PATCH 0310/1495] import ace dynamically --- package-lock.json | 7 ++++++- package.json | 1 + src/components/Explorer/index.jsx | 13 ++++++++----- src/utility/index.jsx | 27 --------------------------- 4 files changed, 15 insertions(+), 33 deletions(-) diff --git a/package-lock.json b/package-lock.json index a752162899..5aedf5167d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -279,6 +279,11 @@ "negotiator": "0.6.1" } }, + "ace-builds": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.3.3.tgz", + "integrity": "sha512-PbSdoHw42kt5vaXkEVSfUYCd3K1BCfAvyXW9TvR/2ATkk65oImjS1v0evHmzHhOYPSTUO8BprvmpfYT9Vp2akA==" + }, "acorn": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", @@ -7752,7 +7757,7 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { "brace-expansion": "1.1.8" } diff --git a/package.json b/package.json index b421128daf..d91cddb9a4 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ }, "dependencies": { "abcolor": "^0.5.5", + "ace-builds": "^1.3.3", "core-js": "^2.5.2", "dota2-emoticons": "^1.0.1", "dotaconstants": "^5.28.0", diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index b2b1d30034..814e885078 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -10,7 +10,6 @@ import querystring from 'querystring'; import json2csv from 'json2csv'; import Spinner from '../Spinner'; import strings from '../../lang'; -import { getScript } from '../../utility'; import Heading from '../Heading'; import { getProPlayers, @@ -63,13 +62,17 @@ class Explorer extends React.Component { builder: urlState, }; } - componentDidMount() { + async componentDidMount() { this.props.dispatchProPlayers(); this.props.dispatchLeagues(); this.props.dispatchTeams(); - getScript('https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.6/ace.js', () => { - getScript('https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.6/ext-language_tools.js', this.instantiateEditor); - }); + await import('ace-builds/src-noconflict/ace'); + await Promise.all([ + import('ace-builds/src-noconflict/ext-language_tools'), + import('ace-builds/src-noconflict/theme-monokai'), + import('ace-builds/src-noconflict/mode-sql') + ]); + this.instantiateEditor(); } getSqlString = () => this.editor.getSelectedText() || this.editor.getValue(); diff --git a/src/utility/index.jsx b/src/utility/index.jsx index bca34df778..b0e7c99c13 100644 --- a/src/utility/index.jsx +++ b/src/utility/index.jsx @@ -554,33 +554,6 @@ export const hsvToRgb = (h, s, v) => { export const bindWidth = (width, maxWidth) => Math.min(width, maxWidth); -// Pretty much jQuery.getScript https://goo.gl/PBD7ml -export const getScript = (url, callback) => { - // Create script - let script = document.createElement('script'); - script.async = 1; - script.src = url; - - // Insert into body - const theFirstChild = document.body.firstChild; - document.body.insertBefore(script, theFirstChild); - - // Attach handlers - script.onreadystatechange = (__, isAbort) => { - if (isAbort || !script.readyState || /loaded|complete/.test(script.readyState)) { - // Handle IE memory leak - script.onreadystatechange = null; - script.onload = null; - script = undefined; - - if (!isAbort && callback) { - callback(); - } - } - }; - script.onload = script.onreadystatechange; -}; - // Fills in a template with the values provided in the dict // returns a list, so react object don't have to be converted to a string // Any keys not found in the given dictionary are simply left untouched From 7d4bd4b826a06a496375eb03d023c8869f62e13b Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Thu, 19 Apr 2018 06:35:02 +0000 Subject: [PATCH 0311/1495] lint --- src/components/Explorer/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 814e885078..095641e293 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -70,7 +70,7 @@ class Explorer extends React.Component { await Promise.all([ import('ace-builds/src-noconflict/ext-language_tools'), import('ace-builds/src-noconflict/theme-monokai'), - import('ace-builds/src-noconflict/mode-sql') + import('ace-builds/src-noconflict/mode-sql'), ]); this.instantiateEditor(); } From fbab4b4d25e59a7ba8ec4fd5c007d69367595039 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Thu, 19 Apr 2018 07:14:31 +0000 Subject: [PATCH 0312/1495] dynamically import announce --- src/components/Header/Header.jsx | 252 ++++++++++++++++--------------- 1 file changed, 134 insertions(+), 118 deletions(-) diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index 49415d0240..5372c9f2ab 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -12,7 +12,6 @@ import styled from 'styled-components'; import strings from '../../lang'; import { LocalizationMenu } from '../Localization'; import Dropdown from '../Header/Dropdown'; -import Announce from '../Announce'; import constants from '../constants'; import AccountWidget from '../AccountWidget'; import SearchForm from '../Search/SearchForm'; @@ -21,28 +20,6 @@ import BurgerMenu from './BurgerMenu'; const REPORT_BUG_PATH = '//github.com/odota/web/issues'; -const navbarPages = [ - {strings.header_explorer}, - {strings.header_meta}, - {strings.header_matches}, - {strings.header_teams}, - {strings.header_heroes}, - {strings.header_distributions}, - {strings.header_records}, - {strings.header_api}, - // Predictions, - // Assistant, -]; - -const burgerItems = [ - , - ...navbarPages, -]; - -const buttonProps = { - children: , -}; - const VerticalAlignToolbar = styled(ToolbarGroup)` display: flex; align-items: center; @@ -68,57 +45,6 @@ const TabContainer = styled.div` justify-content: center; `; -const LogoGroup = ({ small }) => ( - - {!small && } - - -); - -LogoGroup.propTypes = { - small: PropTypes.bool, -}; - -const LinkGroup = () => ( - - {navbarPages.map(Page => ( - -
    - {Page} -
    -
    - ))} -
    -); - -const SearchGroup = () => ( - - - - -); - -const AccountGroup = () => ( - - - -); - -const SettingsGroup = ({ user }) => ( - - - - {user ? : null} - -); - -SettingsGroup.propTypes = { - user: PropTypes.shape({}), -}; - const BugLink = styled.a` font-size: ${constants.fontSizeMedium}; font-weight: ${constants.fontWeightLight}; @@ -127,10 +53,8 @@ const BugLink = styled.a` align-items: center; margin-top: 2px; margin-right: 15px; - & svg { margin-right: 5px; - /* Override material-ui */ color: currentColor !important; width: 18px !important; @@ -138,37 +62,11 @@ const BugLink = styled.a` } `; -const ReportBug = () => ( - - - - {strings.app_report_bug} - - -); - -const LogOut = () => ( - - - - {strings.app_logout} - - -); - const ToolbarHeader = styled(Toolbar)` background-color: ${constants.defaultPrimaryColor} !important; padding: 8px !important; & a { color: ${constants.primaryTextColor}; - &:hover { color: ${constants.primaryTextColor}; opacity: 0.6; @@ -176,22 +74,139 @@ const ToolbarHeader = styled(Toolbar)` } `; -const Header = ({ location, small, user }) => ( -
    - - - - {small && } - - - - {small && } - {} - - - { location.pathname !== '/' && } -
    -); +class Header extends React.Component { + constructor() { + super(); + this.state = {}; + } + + async UNSAFE_componentWillMount() { + const ann = await import('../Announce'); + this.setState({ Announce: ann.default }); + } + + render() { + const { + location, small, user, + } = this.props; + const navbarPages = [ + {strings.header_explorer}, + {strings.header_meta}, + {strings.header_matches}, + {strings.header_teams}, + {strings.header_heroes}, + {strings.header_distributions}, + {strings.header_records}, + {strings.header_api}, + // Predictions, + // Assistant, + ]; + + const burgerItems = [ + , + ...navbarPages, + ]; + + const buttonProps = { + children: , + }; + + const LogoGroup = ({ small }) => ( + + {!small && } + + + ); + + LogoGroup.propTypes = { + small: PropTypes.bool, + }; + + const LinkGroup = () => ( + + {navbarPages.map(Page => ( + +
    + {Page} +
    +
    + ))} +
    + ); + + const SearchGroup = () => ( + + + + + ); + + const AccountGroup = () => ( + + + + ); + + const SettingsGroup = ({ user }) => ( + + + + {user ? : null} + + ); + + SettingsGroup.propTypes = { + user: PropTypes.shape({}), + }; + + const ReportBug = () => ( + + + + {strings.app_report_bug} + + + ); + + const LogOut = () => ( + + + + {strings.app_logout} + + + ); + + const { Announce } = this.state; + + return ( +
    + + + + {small && } + + + + {small && } + {} + + + { location.pathname !== '/' && Announce && } +
    + ); + } +} Header.propTypes = { location: PropTypes.shape({}), @@ -203,4 +218,5 @@ const mapStateToProps = state => ({ small: state.browser.greaterThan.small, user: state.app.metadata.data.user, }); + export default connect(mapStateToProps, null)(Header); From 7a5c83928cd15eb09a9a490e5e69b0d1e0596401 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Thu, 19 Apr 2018 07:18:55 +0000 Subject: [PATCH 0313/1495] improve import --- src/components/Announce/index.js | 3 --- src/components/Announce/{Announce.jsx => index.jsx} | 0 2 files changed, 3 deletions(-) delete mode 100644 src/components/Announce/index.js rename src/components/Announce/{Announce.jsx => index.jsx} (100%) diff --git a/src/components/Announce/index.js b/src/components/Announce/index.js deleted file mode 100644 index 8ffc9be9c3..0000000000 --- a/src/components/Announce/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import Announce from './Announce'; - -export default Announce; diff --git a/src/components/Announce/Announce.jsx b/src/components/Announce/index.jsx similarity index 100% rename from src/components/Announce/Announce.jsx rename to src/components/Announce/index.jsx From de946c2d1b95d6221f997e6c5169d7432e79c866 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Thu, 19 Apr 2018 07:28:58 +0000 Subject: [PATCH 0314/1495] declare lodash imports --- src/actions/transformMatch.js | 14 +++++++------- src/components/Match/Vision/index.jsx | 6 +++--- src/components/Match/matchColumns.jsx | 4 ++-- src/utility/index.jsx | 6 +++--- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/actions/transformMatch.js b/src/actions/transformMatch.js index 3a9435ecf3..e0048325bc 100644 --- a/src/actions/transformMatch.js +++ b/src/actions/transformMatch.js @@ -1,6 +1,6 @@ import heroes from 'dotaconstants/build/heroes.json'; import immutable from 'seamless-immutable'; -import _ from 'lodash/fp'; +import { concat, curry, flatten, map, flow, sortBy } from 'lodash/fp'; import { isRadiant, isSupport, @@ -101,7 +101,7 @@ function generateTeamfights({ players, teamfights = [] }) { // create a detailed history of each wards function generateVisionLog(match) { const computeWardData = (player, i) => { - const sameWard = _.curry((w1, w2) => w1.ehandle === w2.ehandle); + const sameWard = curry((w1, w2) => w1.ehandle === w2.ehandle); // let's coerce some value to be sure the structure is what we expect. const safePlayer = { @@ -126,14 +126,14 @@ function generateVisionLog(match) { }); const observers = extractVisionLog('observer', safePlayer.obs_log, safePlayer.obs_left_log); const sentries = extractVisionLog('sentry', safePlayer.sen_log, safePlayer.sen_left_log); - return _.concat(observers, sentries); + return concat(observers, sentries); }; - const imap = _.map.convert({ cap: false }); // cap: false to keep the index - const visionLog = _.flow( + const imap = map.convert({ cap: false }); // cap: false to keep the index + const visionLog = flow( imap(computeWardData), - _.flatten, - _.sortBy(xs => xs.entered.time), + flatten, + sortBy(xs => xs.entered.time), imap((x, i) => ({ ...x, key: i })), ); diff --git a/src/components/Match/Vision/index.jsx b/src/components/Match/Vision/index.jsx index 089c26e0c7..9eba0fd40d 100644 --- a/src/components/Match/Vision/index.jsx +++ b/src/components/Match/Vision/index.jsx @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import Slider from 'material-ui/Slider'; -import _ from 'lodash/fp'; +import { rangeStep, debounce } from 'lodash/fp'; import styled from 'styled-components'; import { formatSeconds } from '../../../utility'; import strings from '../../../lang'; @@ -133,7 +133,7 @@ class Vision extends React.Component { }; this.ticks = this.computeTick(); - this.handleViewportChange = _.debounce(50, this.viewportChange); + this.handleViewportChange = debounce(50, this.viewportChange); } setPlayer(player, type, value) { @@ -161,7 +161,7 @@ class Vision extends React.Component { computeTick() { const interval = 10 * 60; // every 10 minutes interval - return _.rangeStep(interval, 0, this.sliderMax); + return rangeStep(interval, 0, this.sliderMax); } viewportChange(value) { diff --git a/src/components/Match/matchColumns.jsx b/src/components/Match/matchColumns.jsx index 3246a30320..99ff8112ef 100644 --- a/src/components/Match/matchColumns.jsx +++ b/src/components/Match/matchColumns.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import lodash from 'lodash/fp'; +import { findLast } from 'lodash/fp'; import heroes from 'dotaconstants/build/heroes.json'; import items from 'dotaconstants/build/items.json'; import orderTypes from 'dotaconstants/build/order_types.json'; @@ -63,7 +63,7 @@ const partyStyles = (row, match) => { const findBuyTime = (purchaseLog, itemKey, _itemSkipCount) => { let skipped = 0; let itemSkipCount = _itemSkipCount || 0; - const purchaseEvent = lodash.findLast((item) => { + const purchaseEvent = findLast((item) => { if (item.key !== itemKey) { return false; } diff --git a/src/utility/index.jsx b/src/utility/index.jsx index b0e7c99c13..84e92b8ba7 100644 --- a/src/utility/index.jsx +++ b/src/utility/index.jsx @@ -5,7 +5,7 @@ import items from 'dotaconstants/build/items.json'; import patch from 'dotaconstants/build/patch.json'; import itemIds from 'dotaconstants/build/item_ids.json'; import xpLevel from 'dotaconstants/build/xp_level.json'; -import _ from 'lodash/fp'; +import { curry, findLast, inRange } from 'lodash/fp'; import util from 'util'; // import SvgIcon from 'material-ui/SvgIcon'; import SocialPeople from 'material-ui/svg-icons/social/people'; @@ -489,13 +489,13 @@ export function unpackPositionData(input) { return input; } -export const threshold = _.curry((start, limits, values, value) => { +export const threshold = curry((start, limits, values, value) => { if (limits.length !== values.length) throw new Error('Limits must be the same as functions.'); const limitsWithStart = limits.slice(0); limitsWithStart.unshift(start); - return _.findLast((v, i) => _.inRange(limitsWithStart[i], limitsWithStart[i + 1], value), values); + return findLast((v, i) => inRange(limitsWithStart[i], limitsWithStart[i + 1], value), values); }); export const getTeamName = (team, _isRadiant) => { From d0e3d7b764d9a64f0fd2669e68972fce187f0fc7 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 19 Apr 2018 08:00:30 -0700 Subject: [PATCH 0315/1495] New translations en-US.json (Portuguese, Brazilian) --- src/lang/pt-BR.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index b5af3eb8e0..2f5938fd90 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -21,8 +21,8 @@ "analysis_expected": "do/da/de\n(male/female/overall)", "announce_dismiss": "Cancelar", "announce_github_more": "Ver no GitHub", - "api_meta_description": "The OpenDota API gives you access to all the advanced Dota 2 stats offered by the OpenDota platform. Access performance graphs, heatmaps, wordclouds, and more. Get started for free.", - "api_title": "The OpenDota API", + "api_meta_description": "A API da OpenDota fornece acesso à todas as estatísticas avançadas de Dota 2 oferecidas pela plataforma da OpenDota. Acesse gráficos de performance, calor, nuvem de palavras e mais. Comece já, é GRÁTIS!", + "api_title": "A API da OpenDota", "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", "api_details_free_tier": "Free Tier", "api_details_premium_tier": "Premium Tier", From 78b23054948e058364d649b21164159b3c2ff7ae Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Thu, 19 Apr 2018 08:10:21 -0700 Subject: [PATCH 0316/1495] New translations en-US.json (Portuguese, Brazilian) --- src/lang/pt-BR.json | 74 ++++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index 2f5938fd90..031cd594b8 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -23,42 +23,42 @@ "announce_github_more": "Ver no GitHub", "api_meta_description": "A API da OpenDota fornece acesso à todas as estatísticas avançadas de Dota 2 oferecidas pela plataforma da OpenDota. Acesse gráficos de performance, calor, nuvem de palavras e mais. Comece já, é GRÁTIS!", "api_title": "A API da OpenDota", - "api_subtitle": "Build on top of the OpenDota platform. Bring advanced stats to your app and deep insights to your users.", - "api_details_free_tier": "Free Tier", - "api_details_premium_tier": "Premium Tier", - "api_details_price": "Price", - "api_details_price_free": "Free", - "api_details_price_prem": "$price per $unit calls", - "api_details_key_required": "Key Required?", - "api_details_key_required_free": "No", - "api_details_key_required_prem": "Yes -- requires payment method", - "api_details_call_limit": "Call Limit", - "api_details_call_limit_free": "$limit per month", - "api_details_call_limit_prem": "Unlimited", - "api_details_rate_limit": "Rate Limit", - "api_details_rate_limit_val": "$num calls per minute", - "api_details_support": "Support", - "api_details_support_free": "Community support via Discord group", - "api_details_support_prem": "Priority support from core developers", - "api_get_key": "Get my key", - "api_docs": "Read the docs", - "api_header_details": "Details", - "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", - "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", - "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", - "api_login": "Login to access API Key", - "api_update_billing": "Update billing method", - "api_delete": "Delete key", - "api_key_usage": "To use your key, add $param as a query parameter to your API request:", - "api_billing_cycle": "The current billing cycle ends on $date.", - "api_billed_to": "We'll automatically bill the $brand ending in $last4.", - "api_header_usage": "Your Usage", - "api_usage_calls": "# API calls", - "api_usage_fees": "Estimated Fees", - "api_month": "Month", - "api_header_key": "Your Key", - "api_header_table": "Get started for free. Keep going at a ridiculously low price.", + "api_subtitle": "Construa sobre a excelente plataforma OpenDota. Leve estatísticas avançadas, completas e profundas aos seus usuários.", + "api_details_free_tier": "Nível Grátis", + "api_details_premium_tier": "Nível Premium", + "api_details_price": "Preço", + "api_details_price_free": "Grátis", + "api_details_price_prem": "$price por $unit chamadas", + "api_details_key_required": "Chave necessária?", + "api_details_key_required_free": "Não", + "api_details_key_required_prem": "Sim - requer método de pagamento", + "api_details_call_limit": "Limite de chamadas", + "api_details_call_limit_free": "$limit por mês", + "api_details_call_limit_prem": "Sem limites", + "api_details_rate_limit": "Taxa limite", + "api_details_rate_limit_val": "$num chamadas por minuto", + "api_details_support": "Suporte", + "api_details_support_free": "Suporte da Comunidade através de grupo no Discord", + "api_details_support_prem": "Suporte prioritário pelos principais desenvolvedores", + "api_get_key": "Obter chave", + "api_docs": "Ler documentos", + "api_header_details": "Detalhes", + "api_charging": "Taxa cobrada: $cost por chamada, arredondada para o centavo mais próximo.", + "api_credit_required": "Obter uma chave de API requer um método de pagamento vinculado. Será debitado no cartão o valor de todas as taxas no começo do mês.", + "api_delay": "Acabou de receber sua chave? Aguarde 5 minutos para começar a utilizar.", + "api_error": "Houve um erro com a solicitação. Por favor, tente novamente. Se continuar, contate-nos em support@opendota.com.", + "api_login": "Login para acessar a chave de API", + "api_update_billing": "Atualizar método de pagamento", + "api_delete": "Apagar chave", + "api_key_usage": "Para usar sua chave, adicione $param como um parâmetro de consulta à sua solicitação de API:", + "api_billing_cycle": "O ciclo de cobrança atual termina em $date.", + "api_billed_to": "Nós vamos cobrar automaticamente o cartão $brand terminado em $last4.", + "api_header_usage": "Uso", + "api_usage_calls": "# Chamadas de API", + "api_usage_fees": "Taxa estimada", + "api_month": "Mês", + "api_header_key": "Sua chave", + "api_header_table": "Comece grátis! E incremente por um preço muito baixo.", "app_name": "OpenDota", "app_language": "Idioma", "app_localization": "Localização", @@ -840,7 +840,7 @@ "title_explorer": "Explorador de Dados", "title_meta": "Meta", "title_records": "Recordes", - "title_api": "The Opendota API: Advanced Dota 2 stats for your app", + "title_api": "Opendota API: Estatísticas avançadas de Dota 2 stats para seu app", "tooltip_mmr": "MMR Individual do jogador", "tooltip_abilitydraft": "Seleção de Habilidades", "tooltip_level": "Nível alcançado pelo herói", From fe25a472197648cb4217c63bf84f4e5014719af0 Mon Sep 17 00:00:00 2001 From: hchung Date: Thu, 19 Apr 2018 19:54:09 -0700 Subject: [PATCH 0317/1495] lint --- src/components/App/App.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index e567216e95..ec4aeffd1d 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -91,7 +91,9 @@ class App extends React.Component { } render() { - const { params, width, location, strings } = this.props; + const { + params, width, location, strings, + } = this.props; const includeAds = !['/', '/api-keys'].includes(location.pathname); return ( From 677e2196aa1c29a6642c57bd6143751229fffd78 Mon Sep 17 00:00:00 2001 From: hchung Date: Fri, 20 Apr 2018 03:48:16 -0700 Subject: [PATCH 0318/1495] support dual import of strings --- src/actions/index.js | 4 ++-- src/lang/index.js | 42 ++++++++++++++++++------------------------ 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/src/actions/index.js b/src/actions/index.js index 4ac539942d..721a8aaecf 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -66,8 +66,8 @@ export const getStrings = () => async (dispatch) => { const savedLang = window.localStorage && window.localStorage.getItem('localization'); const defaultLang = langs[0]; const selectedLang = langs.find(lang => lang.value === savedLang) || langs[0]; - const defData = await import(`../lang/${defaultLang.data}`); - const selData = await import(`../lang/${selectedLang.data}`); + const defData = await import(`../lang/${defaultLang.value}.json`); + const selData = await import(`../lang/${selectedLang.value}.json`); dispatch({ type: 'strings', payload: { ...defData, ...selData } }); }; export * from './requestActions'; diff --git a/src/lang/index.js b/src/lang/index.js index 9c92e0dc18..fabf04afa9 100644 --- a/src/lang/index.js +++ b/src/lang/index.js @@ -1,97 +1,91 @@ +/* eslint-disable global-require */ export const langs = [ { value: 'en-US', native: 'English (US)', - data: 'en-US.json', }, /* { value: 'bg-BG', native: 'български bǎlgarski', - data: require('bg-BG.json'), }, { value: 'cs-CZ', native: 'Čeština', - data: require('cs-CZ.json'), }, */ { value: 'de-DE', native: 'Deutsch', - data: 'de-DE.json', }, { value: 'es-ES', native: 'Español', - data: 'es-ES.json', }, /* { value: 'es-PE', native: 'Español (América Latina)', - data: require('es-PE.json'), }, { value: 'fi-FI', native: 'Suomi', - data: require('fi-FI.json'), }, { value: 'fr-FR', native: 'Français', - data: require('fr-FR.json'), }, */ { value: 'it-IT', native: 'Italiano', - data: 'it-IT.json', }, { value: 'ja-JP', native: '日本語', - data: 'ja-JP.json', }, /* { value: 'ko-KR', native: '한국어', - data: require('ko-KR.json'), }, */ { value: 'ms-MY', native: 'Bahasa Melayu', - data: 'ms-MY.json', }, /* { value: 'nl-NL', native: 'Nederlands', - data: require('nl-NL.json'), }, */ { value: 'pl-PL', native: 'Polski', - data: 'pl-PL.json', }, { value: 'pt-BR', native: 'Português Brasileiro', - data: 'pt-BR.json', }, { value: 'ro-RO', native: 'Română', - data: 'ro-RO.json', }, { value: 'ru-RU', native: 'Русский', - data: 'ru-RU.json', }, /* { value: 'sv-SE', native: 'Svenska', - data: require('sv-SE.json'), }, { value: 'tr-TR', native: 'Türkçe', - data: require('tr-TR.json'), }, { value: 'uk-UA', native: 'Українська', - data: require('uk-UA.json'), }, { value: 'vi-VN', native: 'Tiếng Việt', - data: require('vi-VN.json'), }, */ { value: 'zh-CN', native: '中文', - data: 'zh-CN.json', }, /* { value: 'zh-TW', native: '中文 (繁體字)', - data: require('zh-TW.json'), }, */ ]; -export default {}; +// Temporary until we move fully to dynamic loaded strings +const savedLang = window.localStorage && window.localStorage.getItem('localization'); +const selectedLang = langs.find(lang => lang.value === savedLang) || {}; +const data = { + 'en-US': require('./en-US.json'), + 'de-DE': require('./de-DE.json'), + 'es-ES': require('./es-ES.json'), + 'it-IT': require('./it-IT.json'), + 'ja-JP': require('./ja-JP.json'), + 'ms-MY': require('./ms-MY.json'), + 'pl-PL': require('./pl-PL.json'), + 'pt-BR': require('./pt-BR.json'), + 'ro-RO': require('./ro-RO.json'), + 'ru-RU': require('./ru-RU.json'), + 'zh-CN': require('./zh-CN.json'), +}; +export default { ...data[langs[0].value], ...data[selectedLang.value] }; From 684a6493c0a9bdd7ca57ba2d084a8529efc5cc8e Mon Sep 17 00:00:00 2001 From: Argn0 Date: Fri, 20 Apr 2018 17:33:11 +0200 Subject: [PATCH 0319/1495] resolve merge conflict --- src/components/Header/Header.jsx | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index d46441df2d..59f8ccce98 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -20,29 +20,6 @@ import BurgerMenu from './BurgerMenu'; const REPORT_BUG_PATH = '//github.com/odota/web/issues'; -const navbarPages = [ - {strings.header_explorer}, - {strings.header_meta}, - {strings.header_matches}, - {strings.header_teams}, - {strings.header_heroes}, - {strings.header_distributions}, - {strings.header_records}, - // {strings.header_scenarios}, - {strings.header_api}, - // Predictions, - // Assistant, -]; - -const burgerItems = [ - , - ...navbarPages, -]; - -const buttonProps = { - children: , -}; - const VerticalAlignToolbar = styled(ToolbarGroup)` display: flex; align-items: center; @@ -120,6 +97,7 @@ class Header extends React.Component { {strings.header_heroes}, {strings.header_distributions}, {strings.header_records}, + // {strings.header_scenarios}, {strings.header_api}, // Predictions, // Assistant, From 2d2fde556cbc4558bcda24cd64a0508316b796db Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:00:37 -0700 Subject: [PATCH 0320/1495] New translations en-US.json (Russian) --- src/lang/ru-RU.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index 61bf2007e6..a7a00bed31 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -284,6 +284,7 @@ "header_explorer": "Проводник", "header_teams": "Команды", "header_meta": "Мета", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Добиваний @ 10", "heading_lhtwenty": "Добиваний @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "Добыто золота из Track", "tooltip_others_greevils_gold": "Добыто золота из Greevil's Greed", "tooltip_advantage": "Рассчитывано Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Гистограммы", "histograms_description": "Процентаж указывает на процент побед для этого столбца", "histograms_actions_per_min_description": "Действий игрока в минуту", @@ -1173,5 +1175,16 @@ "activated": "Активирован", "rune": "Руны", "placement": "Размещение", - "exclude_turbo_matches": "Исключить Turbo матчи" + "exclude_turbo_matches": "Исключить Turbo матчи", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From a927ff28b4b7bcae34f419dfc14fe9268b3e770d Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:00:40 -0700 Subject: [PATCH 0321/1495] New translations en-US.json (Italian) --- src/lang/it-IT.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/it-IT.json b/src/lang/it-IT.json index ab64620243..22d6ed90eb 100644 --- a/src/lang/it-IT.json +++ b/src/lang/it-IT.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Squadre", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Colpi di grazia @ 10", "heading_lhtwenty": "Colpi di grazia @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "oro guadagnato da Traccia", "tooltip_others_greevils_gold": "oro guadagnato da Avidità del greevil", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Istogrammi", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From 538e034a1932d8437850f319073d409744fd7cbb Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:00:43 -0700 Subject: [PATCH 0322/1495] New translations en-US.json (Swedish) --- src/lang/sv-SE.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/sv-SE.json b/src/lang/sv-SE.json index b5b09b80ae..3b2f9800d8 100644 --- a/src/lang/sv-SE.json +++ b/src/lang/sv-SE.json @@ -284,6 +284,7 @@ "header_explorer": "Utforskare", "header_teams": "Lag", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "guld förtjänat från Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histogram", "histograms_description": "Procentandel anger vinstpriser för det märkta facket", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From e4dabcaeb07fdb4ba8d3e00d63f2765f51c83477 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:00:46 -0700 Subject: [PATCH 0323/1495] New translations en-US.json (Spanish, United States) --- src/lang/es-US.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/es-US.json b/src/lang/es-US.json index 915a9c5ea5..c8b198dbab 100644 --- a/src/lang/es-US.json +++ b/src/lang/es-US.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histogramas", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From b64869d65031d78d4b1c75de69b116e654b17620 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:00:49 -0700 Subject: [PATCH 0324/1495] New translations en-US.json (Spanish, Peru) --- src/lang/es-PE.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/es-PE.json b/src/lang/es-PE.json index c162525796..05b2e51acc 100644 --- a/src/lang/es-PE.json +++ b/src/lang/es-PE.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histogramas", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From 281e9930ef72c3ceb97de3db9b4d97dda50feaf2 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:00:52 -0700 Subject: [PATCH 0325/1495] New translations en-US.json (Spanish) --- src/lang/es-ES.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/es-ES.json b/src/lang/es-ES.json index 13e461b35b..e939c3a5eb 100644 --- a/src/lang/es-ES.json +++ b/src/lang/es-ES.json @@ -284,6 +284,7 @@ "header_explorer": "Explorador", "header_teams": "Equipos", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Últimos Golpes a los 10", "heading_lhtwenty": "Últimos Golpes a los 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "oro obtenido por Track", "tooltip_others_greevils_gold": "oro ganado de Avaricia de Greevil", "tooltip_advantage": "Calculado por califacación de Wilson", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histogramas", "histograms_description": "Porcentajes indican tasas de victoria para la gama rotulada", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activado", "rune": "Runa", "placement": "Ubicación", - "exclude_turbo_matches": "Excluir partidas Turbo" + "exclude_turbo_matches": "Excluir partidas Turbo", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From 6df0ab5b585e3014e358cd161bebf7eaee68be56 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:00:55 -0700 Subject: [PATCH 0326/1495] New translations en-US.json (Slovak) --- src/lang/sk-SK.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/sk-SK.json b/src/lang/sk-SK.json index 076756c2b4..22344a2fc6 100644 --- a/src/lang/sk-SK.json +++ b/src/lang/sk-SK.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From 8ebcd2859ceb6a23f711f88c8903e38fb49945b1 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:00:57 -0700 Subject: [PATCH 0327/1495] New translations en-US.json (Serbian (Cyrillic)) --- src/lang/sr-SP.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/sr-SP.json b/src/lang/sr-SP.json index 62fe848288..087dad8ea9 100644 --- a/src/lang/sr-SP.json +++ b/src/lang/sr-SP.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From 924b18f86ec875bc6d17e7275d08047b2102a2ca Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:00 -0700 Subject: [PATCH 0328/1495] New translations en-US.json (Romanian) --- src/lang/ro-RO.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/ro-RO.json b/src/lang/ro-RO.json index 40290efe6e..6fbf29ae41 100644 --- a/src/lang/ro-RO.json +++ b/src/lang/ro-RO.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Echipe", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Lovituri de Finalizare @ 10", "heading_lhtwenty": "Lovituri de Finalizare @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From a9b028311ed1808998c890ab13833c9202ec4753 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:02 -0700 Subject: [PATCH 0329/1495] New translations en-US.json (Portuguese) --- src/lang/pt-PT.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/pt-PT.json b/src/lang/pt-PT.json index f464d9cb86..447fe653c3 100644 --- a/src/lang/pt-PT.json +++ b/src/lang/pt-PT.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From ed92874e827f39c6244bd22e24e5e307d8a28cbc Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:05 -0700 Subject: [PATCH 0330/1495] New translations en-US.json (Polish) --- src/lang/pl-PL.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/pl-PL.json b/src/lang/pl-PL.json index ed18e7d112..6b86812832 100644 --- a/src/lang/pl-PL.json +++ b/src/lang/pl-PL.json @@ -284,6 +284,7 @@ "header_explorer": "Eksplorator", "header_teams": "Drużyny", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Ostatnie trafienia w 10 min", "heading_lhtwenty": "Ostatnie trafienia w 20 min", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "złoto zdobyte ze Śledzenia", "tooltip_others_greevils_gold": "złoto zdobyte za Złochciwość", "tooltip_advantage": "Obliczone na podstawie Wilson Score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histogramy", "histograms_description": "Procenty oznaczają średnią wygranych dla oznaczonych przedziałów", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Aktywowany", "rune": "Runa", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From 61f90f76764f738e15b6f58624924016f6a89352 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:08 -0700 Subject: [PATCH 0331/1495] New translations en-US.json (Norwegian) --- src/lang/no-NO.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/no-NO.json b/src/lang/no-NO.json index 015e5f65ab..4a22f9c989 100644 --- a/src/lang/no-NO.json +++ b/src/lang/no-NO.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From d9e78e8b45e4ffed1527d7a0d79c5286e4562277 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:11 -0700 Subject: [PATCH 0332/1495] New translations en-US.json (Malay) --- src/lang/ms-MY.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/ms-MY.json b/src/lang/ms-MY.json index aa1c0b5761..301d4bc8ad 100644 --- a/src/lang/ms-MY.json +++ b/src/lang/ms-MY.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Team", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold diperolehi daripada Track", "tooltip_others_greevils_gold": "emas yang diperolehi daripada Greevil's Greed", "tooltip_advantage": "Dikira oleh Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histogram", "histograms_description": "Peratusan menunjukkan kadar menang bagi bin berlabel", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Diaktifkan", "rune": "Rune", "placement": "Penempatan", - "exclude_turbo_matches": "Kecualikan perlawanan Turbo" + "exclude_turbo_matches": "Kecualikan perlawanan Turbo", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From 230ebb706ef8f4f677a3c8fd65b355a071383126 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:13 -0700 Subject: [PATCH 0333/1495] New translations en-US.json (Korean) --- src/lang/ko-KR.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/ko-KR.json b/src/lang/ko-KR.json index 33232515eb..971524c251 100644 --- a/src/lang/ko-KR.json +++ b/src/lang/ko-KR.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "팀", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "마지막 타격 @ 10", "heading_lhtwenty": "마지막 타격 @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "막대 그래프", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From ca9319210c276ff1693956cee495e597599a6fe1 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:16 -0700 Subject: [PATCH 0334/1495] New translations en-US.json (Japanese) --- src/lang/ja-JP.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/ja-JP.json b/src/lang/ja-JP.json index d069bd2044..7f3a1689cb 100644 --- a/src/lang/ja-JP.json +++ b/src/lang/ja-JP.json @@ -284,6 +284,7 @@ "header_explorer": "エクスプローラー", "header_teams": "Teams", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "ラストヒット数 @ 10", "heading_lhtwenty": "ラストヒット数 @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "ヒストグラム", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From 42ae041615a1869c45c3c55696568b9665e9ef44 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:19 -0700 Subject: [PATCH 0335/1495] New translations en-US.json (Hungarian) --- src/lang/hu-HU.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/hu-HU.json b/src/lang/hu-HU.json index 4461c6df1d..0fb2a82a16 100644 --- a/src/lang/hu-HU.json +++ b/src/lang/hu-HU.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From 0f884c47d6e849ab05cec9b71b3620c0a9913ac3 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:22 -0700 Subject: [PATCH 0336/1495] New translations en-US.json (Chinese Simplified) --- src/lang/zh-CN.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index b7e5fc9002..9243d7d2a5 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -284,6 +284,7 @@ "header_explorer": "数据探索器", "header_teams": "职业战队", "header_meta": "玩法", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "10 分钟正补", "heading_lhtwenty": "20 分钟正补", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "追踪术所获金钱", "tooltip_others_greevils_gold": "地精的贪婪所获金钱", "tooltip_advantage": "按 Wilson 评分计算", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "直方图", "histograms_description": "百分比表示当前标签下的胜率", "histograms_actions_per_min_description": "每分钟操作数", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "神符", "placement": "Placement", - "exclude_turbo_matches": "排除加速模式" + "exclude_turbo_matches": "排除加速模式", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From 33d9449cd8e18f0d53e9fa7d523b77044c43497e Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:25 -0700 Subject: [PATCH 0337/1495] New translations en-US.json (Hebrew) --- src/lang/he-IL.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/he-IL.json b/src/lang/he-IL.json index f5c7eea7d3..5f601ee112 100644 --- a/src/lang/he-IL.json +++ b/src/lang/he-IL.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "קבוצות", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From e9b5cd4b571852f3478b715800aa12ea8b0538c5 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:28 -0700 Subject: [PATCH 0338/1495] New translations en-US.json (Greek) --- src/lang/el-GR.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/el-GR.json b/src/lang/el-GR.json index ba978175cc..b96b785fa2 100644 --- a/src/lang/el-GR.json +++ b/src/lang/el-GR.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From cd6c33bee28ffbb66ab40aa7d0c51fc1d0b13e58 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:31 -0700 Subject: [PATCH 0339/1495] New translations en-US.json (German) --- src/lang/de-DE.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index 0bcf70e0f9..502aa7b0c8 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histogramme", "histograms_description": "Prozentzahlen zeigen die Winrates für den markierten bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From 5bec5e0a07465d47fdb46b0fb34712702b56d16e Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:34 -0700 Subject: [PATCH 0340/1495] New translations en-US.json (French) --- src/lang/fr-FR.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/fr-FR.json b/src/lang/fr-FR.json index b2165adf2c..5eae36963e 100644 --- a/src/lang/fr-FR.json +++ b/src/lang/fr-FR.json @@ -284,6 +284,7 @@ "header_explorer": "Explorateur", "header_teams": "Équipes", "header_meta": "Méta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Last Hits à 10 minutes", "heading_lhtwenty": "Last Hits à 20 minutes", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "or gagnés par les traques", "tooltip_others_greevils_gold": "or gagné par Greevil's Greed", "tooltip_advantage": "Calculé par score de Wilson", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histogrammes", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activé", "rune": "Rune", "placement": "Position", - "exclude_turbo_matches": "Exclure les parties Turbo" + "exclude_turbo_matches": "Exclure les parties Turbo", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From bd1409e642843d600a77ecb4db8eeecb308e2551 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:37 -0700 Subject: [PATCH 0341/1495] New translations en-US.json (Finnish) --- src/lang/fi-FI.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/fi-FI.json b/src/lang/fi-FI.json index b8ef5cf66c..b6c072899f 100644 --- a/src/lang/fi-FI.json +++ b/src/lang/fi-FI.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From f9ac7c19597e170ee73786fea8efd8eb89093435 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:40 -0700 Subject: [PATCH 0342/1495] New translations en-US.json (Dutch) --- src/lang/nl-NL.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/nl-NL.json b/src/lang/nl-NL.json index e45a97c1ab..da7e22bd7e 100644 --- a/src/lang/nl-NL.json +++ b/src/lang/nl-NL.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From e989fd43b9567c491b90935d62c5d61db1e6a601 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:43 -0700 Subject: [PATCH 0343/1495] New translations en-US.json (Danish) --- src/lang/da-DK.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/da-DK.json b/src/lang/da-DK.json index 9a7183ce86..0202ca6611 100644 --- a/src/lang/da-DK.json +++ b/src/lang/da-DK.json @@ -284,6 +284,7 @@ "header_explorer": "Browser", "header_teams": "Teams", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Sidste træffere @ 10", "heading_lhtwenty": "Sidste træffere @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From 34fa558fa07efdd1dd4c0a61c287ac4fbb523708 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:45 -0700 Subject: [PATCH 0344/1495] New translations en-US.json (Czech) --- src/lang/cs-CZ.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/cs-CZ.json b/src/lang/cs-CZ.json index eeb65b16ad..46349e619b 100644 --- a/src/lang/cs-CZ.json +++ b/src/lang/cs-CZ.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From d65a6f185e156f838bc5a069b1958a29f854a0da Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:48 -0700 Subject: [PATCH 0345/1495] New translations en-US.json (Chinese Traditional) --- src/lang/zh-TW.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/zh-TW.json b/src/lang/zh-TW.json index 2e9b740282..58b6766e0a 100644 --- a/src/lang/zh-TW.json +++ b/src/lang/zh-TW.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "直方图", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From cc6348b98f41657b64460111df3673514142c4f2 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:51 -0700 Subject: [PATCH 0346/1495] New translations en-US.json (Bulgarian) --- src/lang/bg-BG.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/bg-BG.json b/src/lang/bg-BG.json index 97b3adbbfc..afbce2438f 100644 --- a/src/lang/bg-BG.json +++ b/src/lang/bg-BG.json @@ -284,6 +284,7 @@ "header_explorer": "Explorer", "header_teams": "Teams", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Last Hits @ 10", "heading_lhtwenty": "Last Hits @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histograms", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From d1768ade0c864202a3a0d112bb6cda35c76de6cf Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:54 -0700 Subject: [PATCH 0347/1495] New translations en-US.json (Vietnamese) --- src/lang/vi-VN.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/vi-VN.json b/src/lang/vi-VN.json index 488a45d2a8..8a26a3650a 100644 --- a/src/lang/vi-VN.json +++ b/src/lang/vi-VN.json @@ -284,6 +284,7 @@ "header_explorer": "Khám phá", "header_teams": "Các đội", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Điểm creep @10", "heading_lhtwenty": "Điểm creep @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Biểu đồ", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From e5d97b9af5bc132fd0231c33ef9a3640600d58e0 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:01:57 -0700 Subject: [PATCH 0348/1495] New translations en-US.json (Ukrainian) --- src/lang/uk-UA.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/uk-UA.json b/src/lang/uk-UA.json index 8791b7534f..b55f10772b 100644 --- a/src/lang/uk-UA.json +++ b/src/lang/uk-UA.json @@ -284,6 +284,7 @@ "header_explorer": "Огляд", "header_teams": "Команди", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Добито @ 10", "heading_lhtwenty": "Добито @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Гістограма", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From 4ba13836c73fe6c024984790dc502a8718a84a1a Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:02:00 -0700 Subject: [PATCH 0349/1495] New translations en-US.json (Portuguese, Brazilian) --- src/lang/pt-BR.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index 031cd594b8..741c59d303 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -284,6 +284,7 @@ "header_explorer": "Navegador", "header_teams": "Equipes", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Últimos Golpes @ 10", "heading_lhtwenty": "Últimos Golpes @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "ouro obtido com rastreio", "tooltip_others_greevils_gold": "ouro obtido com Greevil's Greed", "tooltip_advantage": "Calculado pelo método Wilson", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histograma", "histograms_description": "Percentagens indicam taxas de vitórias para o intervalo rotulado", "histograms_actions_per_min_description": "Ações por minuto", @@ -1173,5 +1175,16 @@ "activated": "Ativado(a)", "rune": "Runa", "placement": "Posição", - "exclude_turbo_matches": "Excluir partidas Turbo" + "exclude_turbo_matches": "Excluir partidas Turbo", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From 72371a968b1c231eb216d4f513313fc83e714c29 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Fri, 20 Apr 2018 20:02:04 -0700 Subject: [PATCH 0350/1495] New translations en-US.json (Turkish) --- src/lang/tr-TR.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json index cea4648212..a14b7c6ce1 100644 --- a/src/lang/tr-TR.json +++ b/src/lang/tr-TR.json @@ -284,6 +284,7 @@ "header_explorer": "Gezgin", "header_teams": "Takımlar", "header_meta": "Meta", + "header_scenarios": "Scenarios", "header_api": "API", "heading_lhten": "Son vuruşlar @ 10", "heading_lhtwenty": "Son Vuruşlar @ 20", @@ -945,6 +946,7 @@ "tooltip_others_track_gold": "gold earned from Track", "tooltip_others_greevils_gold": "gold earned from Greevil's Greed", "tooltip_advantage": "Calculated by Wilson score", + "tooltip_winrate_samplesize": "Win rate and sample size", "histograms_name": "Histogramlar", "histograms_description": "Percentages indicate win rates for the labeled bin", "histograms_actions_per_min_description": "Actions performed by player per minute", @@ -1173,5 +1175,16 @@ "activated": "Activated", "rune": "Rune", "placement": "Placement", - "exclude_turbo_matches": "Exclude Turbo matches" + "exclude_turbo_matches": "Exclude Turbo matches", + "scenarios_subtitle": "Explore win rates of combinations of factors that happen in matches", + "scenarios_item_timings": "Item Timings", + "scenarios_misc": "Misc", + "scenarios_time": "Time", + "scenarios_item": "Item", + "scenarios_game_duration": "Game Duration", + "scenarios_scenario": "Scenario", + "scenarios_first_blood": "Team drew First Blood", + "scenarios_courier_kill": "Team sniped the enemy courier before the 3-minute mark", + "scenarios_pos_chat_1min": "Team all chatted positive words before the 1-minute mark", + "scenarios_neg_chat_1min": "Team all chatted negative words before the 1-minute mark" } \ No newline at end of file From 7ad9591f5107ce576bcdbf5f9d9e7161686f38a2 Mon Sep 17 00:00:00 2001 From: hchung Date: Sat, 21 Apr 2018 01:19:26 -0700 Subject: [PATCH 0351/1495] move state init to constructor, load strings from store in actions --- public/index.html | 7 ++++ src/actions/analyzeMatch.js | 3 +- src/actions/transformCounts.js | 20 +++++------ src/actions/transformMatch.js | 33 ++++++++++++------- src/components/Header/Header.jsx | 6 +--- .../Visualizations/inflictorWithValue.jsx | 13 ++++---- 6 files changed, 47 insertions(+), 35 deletions(-) diff --git a/public/index.html b/public/index.html index 42b241dac5..0f36012f3a 100644 --- a/public/index.html +++ b/public/index.html @@ -142,6 +142,7 @@

    Looks like your browser isn't allowing scripts! Enable JavaScript to run thi

    diff --git a/src/actions/analyzeMatch.js b/src/actions/analyzeMatch.js index c791b9391b..058d914782 100644 --- a/src/actions/analyzeMatch.js +++ b/src/actions/analyzeMatch.js @@ -1,15 +1,16 @@ import items from 'dotaconstants/build/items.json'; import itemGroups from 'dotaconstants/build/item_groups.json'; import skillshots from 'dotaconstants/build/skillshots.json'; -import strings from '../lang'; import { isSupport, getObsWardsPlaced, isRoshHero, isActiveItem, } from '../utility'; +import store from '../store'; export default function analyzeMatch(match, _pm) { + const { strings } = store.getState().app; // define condition check for each advice point const advice = {}; const checks = { diff --git a/src/actions/transformCounts.js b/src/actions/transformCounts.js index 4b3b2b73df..678a9e02d3 100644 --- a/src/actions/transformCounts.js +++ b/src/actions/transformCounts.js @@ -1,23 +1,23 @@ import patch from 'dotaconstants/build/patch.json'; import region from 'dotaconstants/build/region.json'; import { getPercentWin } from '../utility'; -import strings from '../lang'; +import store from '../store'; const patchLookup = {}; patch.forEach((patchElement, index) => { patchLookup[index] = patchElement.name; }); -const countTypes = { - patch: patchLookup, - region, - is_radiant: { - 0: strings.general_dire, - 1: strings.general_radiant, - }, -}; - export default function transformCounts(data) { + const { strings } = store.getState().app; + const countTypes = { + patch: patchLookup, + region, + is_radiant: { + 0: strings.general_dire, + 1: strings.general_radiant, + }, + }; const result = {}; Object.keys(data).forEach((key) => { // Translate each ID to a string diff --git a/src/actions/transformMatch.js b/src/actions/transformMatch.js index e0048325bc..efa7e0e3bd 100644 --- a/src/actions/transformMatch.js +++ b/src/actions/transformMatch.js @@ -7,18 +7,23 @@ import { getLevelFromXp, unpackPositionData, } from '../utility'; -import strings from '../lang'; import analyzeMatch from './analyzeMatch'; +import store from '../store'; -const expanded = {}; -Object.keys(strings) - .filter(str => str.indexOf('npc_dota_') === 0) - .forEach((key) => { - // Currently, no unit goes up higher than 4 - for (let i = 1; i < 5; i += 1) { - expanded[key.replace('#', i)] = strings[key]; - } - }); +let expandedUnitNames = null; + +function generateExpandedUnitNames(strings) { + const expanded = {}; + Object.keys(strings) + .filter(str => str.indexOf('npc_dota_') === 0) + .forEach((key) => { + // Currently, no unit goes up higher than 4 + for (let i = 1; i < 5; i += 1) { + expanded[key.replace('#', i)] = strings[key]; + } + }); + return expanded; +} const getMaxKeyOfObject = field => Number(Object.keys(field || {}).sort((a, b) => Number(b) - Number(a))[0]) || 0; @@ -141,6 +146,7 @@ function generateVisionLog(match) { } function transformMatch(m) { + const { strings } = store.getState().app; const newPlayers = m.players.map((player) => { const newPlayer = { ...player, @@ -194,9 +200,12 @@ function transformMatch(m) { // map to friendly name // iterate through keys in killed // if in expanded, put in pm.specific + if (!expandedUnitNames) { + expandedUnitNames = generateExpandedUnitNames(strings); + } Object.keys(player.killed).forEach((key) => { - if (key in expanded) { - const name = expanded[key]; + if (key in expandedUnitNames) { + const name = expandedUnitNames[key]; newPlayer.specific[name] = newPlayer.specific[name] ? newPlayer.specific[name] + newPlayer.killed[key] : newPlayer.killed[key]; } }); diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index 88bb97787a..5967c88987 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -77,11 +77,7 @@ class Header extends React.Component { constructor() { super(); this.state = {}; - } - - async UNSAFE_componentWillMount() { - const ann = await import('../Announce'); - this.setState({ Announce: ann.default }); + import('../Announce').then(ann => this.setState({ Announce: ann.default })); } render() { diff --git a/src/components/Visualizations/inflictorWithValue.jsx b/src/components/Visualizations/inflictorWithValue.jsx index 9c2f6829b2..75989b1c29 100644 --- a/src/components/Visualizations/inflictorWithValue.jsx +++ b/src/components/Visualizations/inflictorWithValue.jsx @@ -203,13 +203,12 @@ class InflictorWithValue extends React.Component { constructor(props) { super(props); this.state = {}; - } - - async UNSAFE_componentWillMount() { - this.setState({ - abilities: await import('dotaconstants/build/abilities.json'), - neutralAbilities: await import('dotaconstants/build/neutral_abilities.json'), - }); + (async () => { + this.setState({ + abilities: await import('dotaconstants/build/abilities.json'), + neutralAbilities: await import('dotaconstants/build/neutral_abilities.json'), + }); + })(); } render() { From 09f43d198bd8e37f6c20af3ea70c275dfcfcf1b0 Mon Sep 17 00:00:00 2001 From: darutoko Date: Sat, 21 Apr 2018 22:51:46 +0700 Subject: [PATCH 0352/1495] move propTypes to class definition as static property --- src/components/Announce/index.jsx | 20 ++--- src/components/Api/Api.jsx | 10 +-- src/components/App/App.jsx | 16 ++-- src/components/Distributions/index.jsx | 22 +++--- src/components/Explorer/ExplorerFormField.jsx | 18 ++--- .../Explorer/ExplorerOutputSection.jsx | 18 ++--- src/components/Explorer/index.jsx | 18 ++--- src/components/Form/FormField.jsx | 30 ++++---- src/components/Header/BurgerMenu/index.jsx | 8 +- src/components/Header/Dropdown.jsx | 20 ++--- src/components/Header/Header.jsx | 12 +-- src/components/Heatmap/Heatmap.jsx | 8 +- src/components/Hero/Benchmark.jsx | 32 ++++---- src/components/Hero/Ranking.jsx | 32 ++++---- src/components/Hero/Recent.jsx | 30 ++++---- src/components/Heroes/index.jsx | 32 ++++---- src/components/Match/Chat/Chat.jsx | 8 +- src/components/Match/Laning/index.jsx | 8 +- src/components/Match/Match.jsx | 28 +++---- src/components/Match/MatchLog.jsx | 12 +-- src/components/Match/MatchStory.jsx | 8 +- src/components/Match/Purchases/index.jsx | 8 +- src/components/Match/TeamfightMap/index.jsx | 17 +++-- src/components/Match/Vision/VisionFilter.jsx | 30 ++++---- src/components/Match/Vision/VisionMap.jsx | 14 ++-- src/components/Match/Vision/index.jsx | 14 ++-- src/components/Matches/index.jsx | 20 ++--- src/components/Meta/index.jsx | 4 +- src/components/Player/Header/PlayedWith.jsx | 10 +-- .../Player/Header/PlayerButtons.jsx | 14 ++-- src/components/Player/Pages/Counts/Counts.jsx | 14 ++-- src/components/Player/Pages/Heroes/Heroes.jsx | 14 ++-- .../Player/Pages/Histograms/Histograms.jsx | 14 ++-- src/components/Player/Pages/Items/Items.jsx | 14 ++-- src/components/Player/Pages/MMR/MMR.jsx | 14 ++-- .../Player/Pages/Matches/Matches.jsx | 14 ++-- .../Player/Pages/Overview/Overview.jsx | 18 ++--- src/components/Player/Pages/Peers/Peers.jsx | 14 ++-- src/components/Player/Pages/Pros/Pros.jsx | 14 ++-- .../Player/Pages/Rankings/Rankings.jsx | 14 ++-- .../Player/Pages/Records/Records.jsx | 14 ++-- src/components/Player/Pages/Totals/Totals.jsx | 14 ++-- src/components/Player/Pages/Trends/Trends.jsx | 14 ++-- .../Player/Pages/Wardmap/Wardmap.jsx | 24 +++--- .../Player/Pages/Wordcloud/Wordcloud.jsx | 20 ++--- src/components/Player/Player.jsx | 32 ++++---- .../Player/TableFilterForm/index.jsx | 14 ++-- src/components/Records/index.jsx | 16 ++-- src/components/Request/Request.jsx | 14 ++-- src/components/Scenarios/Scenarios.jsx | 30 ++++---- .../Scenarios/ScenariosFormField.jsx | 20 ++--- src/components/Search/SearchForm.jsx | 16 ++-- src/components/Table/Table.jsx | 48 ++++++------ src/components/Team/index.jsx | 76 +++++++++---------- src/components/Teams/index.jsx | 22 +++--- .../Visualizations/Graph/MatchGraph.jsx | 9 ++- .../Visualizations/inflictorWithValue.jsx | 14 ++-- src/components/Wordcloud/Wordcloud.jsx | 10 ++- 58 files changed, 538 insertions(+), 534 deletions(-) diff --git a/src/components/Announce/index.jsx b/src/components/Announce/index.jsx index f46b261836..d279d4d308 100644 --- a/src/components/Announce/index.jsx +++ b/src/components/Announce/index.jsx @@ -105,6 +105,16 @@ Announce.propTypes = { }; class RequestLayer extends React.Component { + static propTypes = { + getPulls: PropTypes.func, + error: PropTypes.string, + loading: PropTypes.bool, + data: PropTypes.oneOfType([ + PropTypes.object, + PropTypes.array, + ]), + } + constructor() { super(); @@ -153,16 +163,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - getPulls: PropTypes.func, - error: PropTypes.string, - loading: PropTypes.bool, - data: PropTypes.oneOfType([ - PropTypes.object, - PropTypes.array, - ]), -}; - const mapStateToProps = (state) => { const { error, loading, data } = state.app.ghPulls; diff --git a/src/components/Api/Api.jsx b/src/components/Api/Api.jsx index 3367c50935..1cde9ff83b 100644 --- a/src/components/Api/Api.jsx +++ b/src/components/Api/Api.jsx @@ -63,6 +63,11 @@ const DetailsContainer = styled.div` `; class KeyManagement extends React.Component { + static propTypes = { + loading: PropTypes.bool, + user: PropTypes.shape({}), + } + constructor(props) { super(props); @@ -341,11 +346,6 @@ class KeyManagement extends React.Component { } } -KeyManagement.propTypes = { - loading: PropTypes.bool, - user: PropTypes.shape({}), -}; - const mapStateToProps = (state) => { const { error, loading, data } = state.app.metadata; return { diff --git a/src/components/App/App.jsx b/src/components/App/App.jsx index 8ef10d9e50..83d53e1f67 100644 --- a/src/components/App/App.jsx +++ b/src/components/App/App.jsx @@ -86,6 +86,14 @@ const AdBannerDiv = styled.div` `; class App extends React.Component { + static propTypes = { + params: PropTypes.shape({}), + width: PropTypes.number, + location: PropTypes.shape({ + key: PropTypes.string, + }), + } + UNSAFE_componentWillUpdate(nextProps) { if (this.props.location.key !== nextProps.location.key) { window.scrollTo(0, 0); @@ -145,12 +153,4 @@ class App extends React.Component { } } -App.propTypes = { - params: PropTypes.shape({}), - width: PropTypes.number, - location: PropTypes.shape({ - key: PropTypes.string, - }), -}; - export default connect()(App); diff --git a/src/components/Distributions/index.jsx b/src/components/Distributions/index.jsx index 21a90d7e2e..9b170b4f4f 100644 --- a/src/components/Distributions/index.jsx +++ b/src/components/Distributions/index.jsx @@ -130,6 +130,17 @@ const distributionsPages = [ ]; class RequestLayer extends React.Component { + static propTypes = { + loading: PropTypes.bool, + match: PropTypes.shape({ + params: PropTypes.shape({ + info: PropTypes.string, + }), + }), + dispatchDistributions: PropTypes.func, + data: PropTypes.shape({}), + } + componentDidMount() { this.props.dispatchDistributions(); } @@ -148,17 +159,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - loading: PropTypes.bool, - match: PropTypes.shape({ - params: PropTypes.shape({ - info: PropTypes.string, - }), - }), - dispatchDistributions: PropTypes.func, - data: PropTypes.shape({}), -}; - const mapStateToProps = state => ({ data: state.app.distributions.data, loading: state.app.distributions.loading, diff --git a/src/components/Explorer/ExplorerFormField.jsx b/src/components/Explorer/ExplorerFormField.jsx index 3438abd651..edd519d296 100644 --- a/src/components/Explorer/ExplorerFormField.jsx +++ b/src/components/Explorer/ExplorerFormField.jsx @@ -5,6 +5,15 @@ import DatePicker from 'material-ui/DatePicker'; // import FormField from '../Form/FormField'; class ExplorerFormField extends React.Component { + static propTypes = { + fields: PropTypes.arrayOf({}), + label: PropTypes.string, + builderField: PropTypes.func, + handleFieldUpdate: PropTypes.func, + isDateField: PropTypes.bool, + builder: PropTypes.func, + } + UNSAFE_componentWillUpdate(newProps) { if (this.autocomplete && !this.autocomplete.state.searchText) { const { @@ -106,13 +115,4 @@ class ExplorerFormField extends React.Component { } } -ExplorerFormField.propTypes = { - fields: PropTypes.arrayOf({}), - label: PropTypes.string, - builderField: PropTypes.func, - handleFieldUpdate: PropTypes.func, - isDateField: PropTypes.bool, - builder: PropTypes.func, -}; - export default ExplorerFormField; diff --git a/src/components/Explorer/ExplorerOutputSection.jsx b/src/components/Explorer/ExplorerOutputSection.jsx index abec54bdd8..9373d91633 100644 --- a/src/components/Explorer/ExplorerOutputSection.jsx +++ b/src/components/Explorer/ExplorerOutputSection.jsx @@ -34,6 +34,15 @@ function resolveId(key, value, mappings) { */ class ExplorerOutputSection extends React.Component { + static propTypes = { + rows: PropTypes.string, + fields: PropTypes.string, + expandedBuilder: PropTypes.string, + teamMapping: PropTypes.string, + playerMapping: PropTypes.string, + format: PropTypes.string, + } + shouldComponentUpdate(nextProps) { return nextProps.rows !== this.props.rows || nextProps.format !== this.props.format; } @@ -120,13 +129,4 @@ class ExplorerOutputSection extends React.Component { } } -ExplorerOutputSection.propTypes = { - rows: PropTypes.string, - fields: PropTypes.string, - expandedBuilder: PropTypes.string, - teamMapping: PropTypes.string, - playerMapping: PropTypes.string, - format: PropTypes.string, -}; - export default ExplorerOutputSection; diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index c9cf0b88cf..1fd6f43732 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -44,6 +44,15 @@ function expandBuilderState(builder, _fields) { } class Explorer extends React.Component { + static propTypes = { + proPlayers: PropTypes.arrayOf({}), + teams: PropTypes.arrayOf({}), + leagues: PropTypes.shape({}), + dispatchProPlayers: PropTypes.func, + dispatchLeagues: PropTypes.func, + dispatchTeams: PropTypes.func, + } + constructor() { super(); let urlState = {}; @@ -281,15 +290,6 @@ class Explorer extends React.Component { } } -Explorer.propTypes = { - proPlayers: PropTypes.arrayOf({}), - teams: PropTypes.arrayOf({}), - leagues: PropTypes.shape({}), - dispatchProPlayers: PropTypes.func, - dispatchLeagues: PropTypes.func, - dispatchTeams: PropTypes.func, -}; - const mapStateToProps = state => ({ proPlayers: state.app.proPlayers.data, leagues: state.app.leagues.data, diff --git a/src/components/Form/FormField.jsx b/src/components/Form/FormField.jsx index 31c9ad25a0..29ad504be3 100644 --- a/src/components/Form/FormField.jsx +++ b/src/components/Form/FormField.jsx @@ -39,6 +39,21 @@ const deleteChipDefault = (name, index, history) => { }; class FormField extends React.Component { + static propTypes = { + name: PropTypes.string, + dataSource: PropTypes.arrayOf({}), + strict: PropTypes.bool, + limit: PropTypes.number, + formSelectionState: PropTypes.shape({}), + addChip: PropTypes.string, + history: PropTypes.shape({}), + label: PropTypes.string, + filter: PropTypes.string, + className: PropTypes.string, + maxSearchResults: PropTypes.string, + deleteChip: PropTypes.string, + } + constructor(props) { super(props); this.state = { @@ -150,19 +165,4 @@ class FormField extends React.Component { } } -FormField.propTypes = { - name: PropTypes.string, - dataSource: PropTypes.arrayOf({}), - strict: PropTypes.bool, - limit: PropTypes.number, - formSelectionState: PropTypes.shape({}), - addChip: PropTypes.string, - history: PropTypes.shape({}), - label: PropTypes.string, - filter: PropTypes.string, - className: PropTypes.string, - maxSearchResults: PropTypes.string, - deleteChip: PropTypes.string, -}; - export default FormField; diff --git a/src/components/Header/BurgerMenu/index.jsx b/src/components/Header/BurgerMenu/index.jsx index 66e916f23f..7696da7fc7 100644 --- a/src/components/Header/BurgerMenu/index.jsx +++ b/src/components/Header/BurgerMenu/index.jsx @@ -17,6 +17,10 @@ const StyledMenuItem = styled(MenuItem)` `; export default class BurgerMenu extends React.Component { + static propTypes = { + menuItems: PropTypes.arrayOf({}), + } + constructor() { super(); this.state = { open: false }; @@ -51,7 +55,3 @@ export default class BurgerMenu extends React.Component { ); } } - -BurgerMenu.propTypes = { - menuItems: PropTypes.arrayOf({}), -}; diff --git a/src/components/Header/Dropdown.jsx b/src/components/Header/Dropdown.jsx index 58ffcb0f55..81f94decdc 100644 --- a/src/components/Header/Dropdown.jsx +++ b/src/components/Header/Dropdown.jsx @@ -18,6 +18,16 @@ const StyledButton = styled(Button)` */ class Dropdown extends Component { + static propTypes = { + Button: PropTypes.func, + buttonProps: PropTypes.shape({}), + className: PropTypes.string, + children: PropTypes.oneOfType([ + PropTypes.arrayOf({}), + PropTypes.node, + ]), + } + constructor() { super(); this.state = { @@ -73,14 +83,4 @@ class Dropdown extends Component { } } -Dropdown.propTypes = { - Button: PropTypes.func, - buttonProps: PropTypes.shape({}), - className: PropTypes.string, - children: PropTypes.oneOfType([ - PropTypes.arrayOf({}), - PropTypes.node, - ]), -}; - export default Dropdown; diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index 59f8ccce98..f09959db5b 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -75,6 +75,12 @@ const ToolbarHeader = styled(Toolbar)` `; class Header extends React.Component { + static propTypes = { + location: PropTypes.shape({}), + small: PropTypes.bool, + user: PropTypes.shape({}), + } + constructor() { super(); this.state = {}; @@ -209,12 +215,6 @@ class Header extends React.Component { } } -Header.propTypes = { - location: PropTypes.shape({}), - small: PropTypes.bool, - user: PropTypes.shape({}), -}; - const mapStateToProps = state => ({ small: state.browser.greaterThan.small, user: state.app.metadata.data.user, diff --git a/src/components/Heatmap/Heatmap.jsx b/src/components/Heatmap/Heatmap.jsx index c8bf0b5daa..dab9d31f88 100644 --- a/src/components/Heatmap/Heatmap.jsx +++ b/src/components/Heatmap/Heatmap.jsx @@ -36,6 +36,10 @@ const drawHeatmap = ({ }; class Heatmap extends Component { + static propTypes = { + width: PropTypes.number, + } + componentDidMount() { this.heatmap = h337.create({ container: document.getElementById(this.id), @@ -64,10 +68,6 @@ class Heatmap extends Component { } } -Heatmap.propTypes = { - width: PropTypes.number, -}; - Heatmap.defaultProps = { width: 600, }; diff --git a/src/components/Hero/Benchmark.jsx b/src/components/Hero/Benchmark.jsx index e304f78d9c..fb9142d36e 100644 --- a/src/components/Hero/Benchmark.jsx +++ b/src/components/Hero/Benchmark.jsx @@ -12,6 +12,22 @@ const renderBenchmark = (hero, data) => ( ); class Benchmark extends Component { + static propTypes = { + match: shape({ + params: shape({ + heroId: string, + }), + }), + getBenchmark: func, + isLoading: bool, + isError: bool, + hero: shape({}), + result: oneOfType([ + arrayOf(shape({})), + shape({}), + ]), + } + componentDidMount() { if ( this.props.match.params && @@ -38,22 +54,6 @@ class Benchmark extends Component { } } -Benchmark.propTypes = { - match: shape({ - params: shape({ - heroId: string, - }), - }), - getBenchmark: func, - isLoading: bool, - isError: bool, - hero: shape({}), - result: oneOfType([ - arrayOf(shape({})), - shape({}), - ]), -}; - /** HISTOGRAM API diff --git a/src/components/Hero/Ranking.jsx b/src/components/Hero/Ranking.jsx index f0e28bb4e8..6d6ac80b01 100644 --- a/src/components/Hero/Ranking.jsx +++ b/src/components/Hero/Ranking.jsx @@ -12,6 +12,22 @@ const renderRanking = (hero, rankings) => ( ); class Ranking extends Component { + static propTypes = { + match: shape({ + params: shape({ + heroId: string, + }), + }), + isLoading: bool, + isError: bool, + rankings: oneOfType([ + arrayOf(shape({})), + shape({}), + ]), + hero: string, + getRanking: func, + } + componentDidMount() { if ( this.props.match.params && @@ -38,22 +54,6 @@ class Ranking extends Component { } } -Ranking.propTypes = { - match: shape({ - params: shape({ - heroId: string, - }), - }), - isLoading: bool, - isError: bool, - rankings: oneOfType([ - arrayOf(shape({})), - shape({}), - ]), - hero: string, - getRanking: func, -}; - const mapStateToProps = state => ({ rankings: state.app.heroRanking.data.rankings, isLoading: state.app.heroRanking.loading, diff --git a/src/components/Hero/Recent.jsx b/src/components/Hero/Recent.jsx index c5c38594e6..7a2f524f6b 100644 --- a/src/components/Hero/Recent.jsx +++ b/src/components/Hero/Recent.jsx @@ -73,6 +73,21 @@ const matchesColumns = [ ]; class Recent extends React.Component { + static propTypes = { + isLoading: bool, + isError: bool, + result: oneOfType([arrayOf(shape({})), shape({})]), + onGetRecentMatches: func, + match: shape({ + params: shape({ + heroId: string, + }), + }), + proPlayers: shape({ + name: string, + }), + } + componentDidMount() { const { onGetRecentMatches, match } = this.props; @@ -112,21 +127,6 @@ class Recent extends React.Component { } } -Recent.propTypes = { - isLoading: bool, - isError: bool, - result: oneOfType([arrayOf(shape({})), shape({})]), - onGetRecentMatches: func, - match: shape({ - params: shape({ - heroId: string, - }), - }), - proPlayers: shape({ - name: string, - }), -}; - Recent.defaultProps = { result: null, isError: false, diff --git a/src/components/Heroes/index.jsx b/src/components/Heroes/index.jsx index d068fa9472..c87d272cf6 100644 --- a/src/components/Heroes/index.jsx +++ b/src/components/Heroes/index.jsx @@ -16,6 +16,22 @@ import { import columns from './columns'; class RequestLayer extends React.Component { + static propTypes = { + dispatchHeroStats: PropTypes.func, + onGetProPlayers: PropTypes.func, + data: PropTypes.oneOfType([ + PropTypes.shape({}), + PropTypes.arrayOf(PropTypes.shape({})), + ]), + loading: PropTypes.bool, + match: PropTypes.shape({ + params: PropTypes.shape({ + info: PropTypes.string, + heroId: PropTypes.string, + }), + }), + } + componentDidMount() { this.props.dispatchHeroStats(); this.props.onGetProPlayers(); @@ -122,22 +138,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - dispatchHeroStats: PropTypes.func, - onGetProPlayers: PropTypes.func, - data: PropTypes.oneOfType([ - PropTypes.shape({}), - PropTypes.arrayOf(PropTypes.shape({})), - ]), - loading: PropTypes.bool, - match: PropTypes.shape({ - params: PropTypes.shape({ - info: PropTypes.string, - heroId: PropTypes.string, - }), - }), -}; - const mapStateToProps = state => ({ data: state.app.heroStats.data, loading: state.app.heroStats.loading, diff --git a/src/components/Match/Chat/Chat.jsx b/src/components/Match/Chat/Chat.jsx index 78e75ba623..2a2292da92 100644 --- a/src/components/Match/Chat/Chat.jsx +++ b/src/components/Match/Chat/Chat.jsx @@ -246,6 +246,10 @@ const chatwheelAll = [75, 76, 108, 109, 110]; const isSpectator = slot => slot > 9 && slot < 128; class Chat extends React.Component { + static propTypes = { + data: PropTypes.shape({}), + } + constructor(props) { super(props); @@ -550,8 +554,4 @@ class Chat extends React.Component { } } -Chat.propTypes = { - data: PropTypes.shape({}), -}; - export default Chat; diff --git a/src/components/Match/Laning/index.jsx b/src/components/Match/Laning/index.jsx index 2bd2c8e077..94c8a8e5b8 100644 --- a/src/components/Match/Laning/index.jsx +++ b/src/components/Match/Laning/index.jsx @@ -9,6 +9,10 @@ import { laningColumns } from '../matchColumns'; import { StyledFlexContainer, StyledFlexElement } from '../StyledMatch'; class Laning extends React.Component { + static propTypes = { + match: PropTypes.shape({}), + } + constructor(props) { super(props); this.state = { @@ -39,8 +43,4 @@ class Laning extends React.Component { } } -Laning.propTypes = { - match: PropTypes.shape({}), -}; - export default Laning; diff --git a/src/components/Match/Match.jsx b/src/components/Match/Match.jsx index 512c896804..0104f1efef 100644 --- a/src/components/Match/Match.jsx +++ b/src/components/Match/Match.jsx @@ -9,6 +9,20 @@ import MatchHeader from './MatchHeader'; import matchPages from './matchPages'; class RequestLayer extends React.Component { + static propTypes = { + loading: PropTypes.bool, + matchData: PropTypes.shape({}), + match: PropTypes.shape({ + params: PropTypes.shape({ + info: PropTypes.string, + }), + }), + user: PropTypes.shape({}), + getMatch: PropTypes.func, + getPvgnaHeroGuides: PropTypes.func, + matchId: PropTypes.string, + } + componentDidMount() { this.props.getMatch(this.props.matchId); this.props.getPvgnaHeroGuides(); @@ -44,20 +58,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - loading: PropTypes.bool, - matchData: PropTypes.shape({}), - match: PropTypes.shape({ - params: PropTypes.shape({ - info: PropTypes.string, - }), - }), - user: PropTypes.shape({}), - getMatch: PropTypes.func, - getPvgnaHeroGuides: PropTypes.func, - matchId: PropTypes.string, -}; - const mergeHeroGuides = (match, heroGuides) => ({ ...match, players: match.players.map(player => ({ diff --git a/src/components/Match/MatchLog.jsx b/src/components/Match/MatchLog.jsx index a507c1b812..38f739d271 100644 --- a/src/components/Match/MatchLog.jsx +++ b/src/components/Match/MatchLog.jsx @@ -268,6 +268,12 @@ const logColumns = [ }]; class MatchLog extends React.Component { + static propTypes = { + match: PropTypes.shape({ + players: PropTypes.arrayOf({}), + }), + } + constructor(props) { super(props); this.state = { @@ -345,10 +351,4 @@ class MatchLog extends React.Component { } } -MatchLog.propTypes = { - match: PropTypes.shape({ - players: PropTypes.arrayOf({}), - }), -}; - export default MatchLog; diff --git a/src/components/Match/MatchStory.jsx b/src/components/Match/MatchStory.jsx index bc543deaf6..6d124fb238 100644 --- a/src/components/Match/MatchStory.jsx +++ b/src/components/Match/MatchStory.jsx @@ -858,6 +858,10 @@ const generateStory = (match) => { }; class MatchStory extends React.Component { + static propTypes = { + match: PropTypes.shape({}), + } + renderEvents() { const events = generateStory(this.props.match); return ({events.map(event => event.render())}); @@ -879,8 +883,4 @@ class MatchStory extends React.Component { } } -MatchStory.propTypes = { - match: PropTypes.shape({}), -}; - export default MatchStory; diff --git a/src/components/Match/Purchases/index.jsx b/src/components/Match/Purchases/index.jsx index d72ed3e350..22e34f959c 100644 --- a/src/components/Match/Purchases/index.jsx +++ b/src/components/Match/Purchases/index.jsx @@ -6,6 +6,10 @@ import TeamTable from '../TeamTable'; import { purchaseTimesColumns } from '../matchColumns'; class Purchases extends React.Component { + static propTypes = { + match: PropTypes.shape({}), + } + constructor(props) { super(props); this.state = { @@ -39,8 +43,4 @@ class Purchases extends React.Component { } } -Purchases.propTypes = { - match: PropTypes.shape({}), -}; - export default Purchases; diff --git a/src/components/Match/TeamfightMap/index.jsx b/src/components/Match/TeamfightMap/index.jsx index 1a65e6e5aa..0501ffd771 100644 --- a/src/components/Match/TeamfightMap/index.jsx +++ b/src/components/Match/TeamfightMap/index.jsx @@ -367,7 +367,16 @@ const avgPosition = ({ deaths_pos: deathPositions }) => { }; }; +const { + arrayOf, object, shape, number, bool, func, string, array, +} = PropTypes; + class TeamfightMap extends Component { + static propTypes = { + teamfights: arrayOf(object), + match: shape({}), + } + constructor(props) { super(); const { teamfights = [] } = props; @@ -495,9 +504,6 @@ class TeamfightMap extends Component { } } -const { - arrayOf, object, shape, number, bool, func, string, array, -} = PropTypes; const positionShape = { x: number, y: number, @@ -535,9 +541,4 @@ Teamfight.propTypes = { deathPositions: arrayOf(array), }; -TeamfightMap.propTypes = { - teamfights: arrayOf(object), - match: shape({}), -}; - export default TeamfightMap; diff --git a/src/components/Match/Vision/VisionFilter.jsx b/src/components/Match/Vision/VisionFilter.jsx index a32dd38347..f40dac80a2 100644 --- a/src/components/Match/Vision/VisionFilter.jsx +++ b/src/components/Match/Vision/VisionFilter.jsx @@ -19,6 +19,21 @@ const data = [ ]; export default class VisionFilter extends React.Component { + static propTypes = { + match: PropTypes.shape({ + players: PropTypes.arrayOf({}), + }), + parent: PropTypes.shape({ + state: PropTypes.shape({ + players: PropTypes.arrayOf({}), + teams: PropTypes.arrayOf({}), + }), + setPlayer: PropTypes.func, + teams: PropTypes.arrayOf({}), + setTeam: PropTypes.func, + }), + } + columns(index) { return [ { @@ -63,18 +78,3 @@ export default class VisionFilter extends React.Component { ); } } - -VisionFilter.propTypes = { - match: PropTypes.shape({ - players: PropTypes.arrayOf({}), - }), - parent: PropTypes.shape({ - state: PropTypes.shape({ - players: PropTypes.arrayOf({}), - teams: PropTypes.arrayOf({}), - }), - setPlayer: PropTypes.func, - teams: PropTypes.arrayOf({}), - setTeam: PropTypes.func, - }), -}; diff --git a/src/components/Match/Vision/VisionMap.jsx b/src/components/Match/Vision/VisionMap.jsx index 34b90dccd7..6a96621f3e 100644 --- a/src/components/Match/Vision/VisionMap.jsx +++ b/src/components/Match/Vision/VisionMap.jsx @@ -162,6 +162,13 @@ WardPin.propTypes = { class VisionMap extends React.Component { + static propTypes = { + match: PropTypes.shape({ + start_time: PropTypes.number, + }), + wards: PropTypes.arrayOf({}), + } + shouldComponentUpdate(newProps) { return newProps.wards.length !== this.props.wards.length; } @@ -182,13 +189,6 @@ class VisionMap extends React.Component { } } -VisionMap.propTypes = { - match: PropTypes.shape({ - start_time: PropTypes.number, - }), - wards: PropTypes.arrayOf({}), -}; - VisionMap.defaultProps = { width: 400, }; diff --git a/src/components/Match/Vision/index.jsx b/src/components/Match/Vision/index.jsx index 9eba0fd40d..63c5d17489 100644 --- a/src/components/Match/Vision/index.jsx +++ b/src/components/Match/Vision/index.jsx @@ -114,6 +114,13 @@ const alive = (ward, time) => time === -90 || (time > ward.entered.time && (!war const isTeam = () => true; class Vision extends React.Component { + static propTypes = { + match: PropTypes.shape({ + duration: PropTypes.number, + wards_log: PropTypes.arrayOf({}), + }), + } + constructor(props) { super(props); @@ -214,11 +221,4 @@ class Vision extends React.Component { } } -Vision.propTypes = { - match: PropTypes.shape({ - duration: PropTypes.number, - wards_log: PropTypes.arrayOf({}), - }), -}; - export default Vision; diff --git a/src/components/Matches/index.jsx b/src/components/Matches/index.jsx index c7b604dc55..fc40e219d9 100644 --- a/src/components/Matches/index.jsx +++ b/src/components/Matches/index.jsx @@ -115,6 +115,16 @@ const getData = (props) => { }; class RequestLayer extends React.Component { + static propTypes = { + match: PropTypes.shape({ + params: PropTypes.shape({ + matchId: PropTypes.number, + }), + }), + // proData: PropTypes.array, + // publicData: PropTypes.array, + } + componentDidMount() { getData(this.props); } @@ -146,16 +156,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - match: PropTypes.shape({ - params: PropTypes.shape({ - matchId: PropTypes.number, - }), - }), - // proData: PropTypes.array, - // publicData: PropTypes.array, -}; - const mapStateToProps = state => ({ proData: state.app.proMatches.data, publicData: state.app.publicMatches.data, diff --git a/src/components/Meta/index.jsx b/src/components/Meta/index.jsx index 203bb5ddd7..06d7553469 100644 --- a/src/components/Meta/index.jsx +++ b/src/components/Meta/index.jsx @@ -31,6 +31,8 @@ function expandBuilderState(builder, _fields) { } class Explorer extends React.Component { + static propTypes = {} + constructor() { super(); const urlState = querystring.parse(window.location.search.substring(1)); @@ -145,8 +147,6 @@ class Explorer extends React.Component { } } -Explorer.propTypes = {}; - const mapStateToProps = () => ({ }); diff --git a/src/components/Player/Header/PlayedWith.jsx b/src/components/Player/Header/PlayedWith.jsx index 6f350a4ef5..a6fb0491e6 100644 --- a/src/components/Player/Header/PlayedWith.jsx +++ b/src/components/Player/Header/PlayedWith.jsx @@ -19,6 +19,11 @@ const getData = (props, context) => { const inlineStyle = { display: 'inline' }; class PlayedWith extends React.Component { + static propTypes = { + playerId: PropTypes.string, + loggedInId: PropTypes.string, + } + constructor() { super(); this.state = {}; @@ -48,9 +53,4 @@ class PlayedWith extends React.Component { } } -PlayedWith.propTypes = { - playerId: PropTypes.string, - loggedInId: PropTypes.string, -}; - export default PlayedWith; diff --git a/src/components/Player/Header/PlayerButtons.jsx b/src/components/Player/Header/PlayerButtons.jsx index fc77a3505b..98079dfb13 100644 --- a/src/components/Player/Header/PlayerButtons.jsx +++ b/src/components/Player/Header/PlayerButtons.jsx @@ -38,6 +38,13 @@ const Styled = styled.div` } `; class PlayerButtons extends React.Component { + static propTypes = { + playerId: PropTypes.string, + playerSoloCompetitiveRank: PropTypes.number, + showForm: PropTypes.bool, + toggleShowForm: PropTypes.func, + } + UNSAFE_componentWillMount() { this.setState({ disableRefresh: false }); } @@ -84,13 +91,6 @@ class PlayerButtons extends React.Component { } } -PlayerButtons.propTypes = { - playerId: PropTypes.string, - playerSoloCompetitiveRank: PropTypes.number, - showForm: PropTypes.bool, - toggleShowForm: PropTypes.func, -}; - const mapStateToProps = state => ({ showForm: state.app.form.show, }); diff --git a/src/components/Player/Pages/Counts/Counts.jsx b/src/components/Player/Pages/Counts/Counts.jsx index 175ffeb25e..8c39c13279 100644 --- a/src/components/Player/Pages/Counts/Counts.jsx +++ b/src/components/Player/Pages/Counts/Counts.jsx @@ -47,6 +47,13 @@ const getData = (props) => { }; class RequestLayer extends React.Component { + static propTypes = { + playerId: PropTypes.string, + location: PropTypes.shape({ + key: PropTypes.string, + }), + } + componentDidMount() { getData(this.props); } @@ -64,13 +71,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - playerId: PropTypes.string, - location: PropTypes.shape({ - key: PropTypes.string, - }), -}; - const mapStateToProps = state => ({ counts: state.app.playerCounts.data, error: state.app.playerCounts.error, diff --git a/src/components/Player/Pages/Heroes/Heroes.jsx b/src/components/Player/Pages/Heroes/Heroes.jsx index f63c06ef94..2dfe60f999 100644 --- a/src/components/Player/Pages/Heroes/Heroes.jsx +++ b/src/components/Player/Pages/Heroes/Heroes.jsx @@ -27,6 +27,13 @@ const getData = (props) => { }; class RequestLayer extends React.Component { + static propTypes = { + location: PropTypes.shape({ + key: PropTypes.string, + }), + playerId: PropTypes.string, + } + componentDidMount() { getData(this.props); } @@ -42,13 +49,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - location: PropTypes.shape({ - key: PropTypes.string, - }), - playerId: PropTypes.string, -}; - const mapStateToProps = state => ({ data: state.app.playerHeroes.data, error: state.app.playerHeroes.error, diff --git a/src/components/Player/Pages/Histograms/Histograms.jsx b/src/components/Player/Pages/Histograms/Histograms.jsx index 2828ecf928..71c5c03eaf 100644 --- a/src/components/Player/Pages/Histograms/Histograms.jsx +++ b/src/components/Player/Pages/Histograms/Histograms.jsx @@ -68,6 +68,13 @@ const getData = (props) => { }; class RequestLayer extends React.Component { + static propTypes = { + playerId: PropTypes.string, + location: PropTypes.shape({ + key: PropTypes.string, + }), + } + UNSAFE_componentWillMount() { getData(this.props); } @@ -84,13 +91,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - playerId: PropTypes.string, - location: PropTypes.shape({ - key: PropTypes.string, - }), -}; - const mapStateToProps = (state, { histogramName = histogramNames[0] }) => ({ histogramName, columns: state.app.playerHistograms.data, diff --git a/src/components/Player/Pages/Items/Items.jsx b/src/components/Player/Pages/Items/Items.jsx index 7f9d107d24..d4f66bc197 100644 --- a/src/components/Player/Pages/Items/Items.jsx +++ b/src/components/Player/Pages/Items/Items.jsx @@ -27,6 +27,13 @@ const getData = (props) => { }; class RequestLayer extends React.Component { + static propTypes = { + location: PropTypes.shape({ + key: PropTypes.string, + }), + playerId: PropTypes.string, + } + componentDidMount() { getData(this.props); } @@ -42,13 +49,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - location: PropTypes.shape({ - key: PropTypes.string, - }), - playerId: PropTypes.string, -}; - const mapStateToProps = state => ({ data: state.app.playerItems.data, loading: state.app.playerItems.loading, diff --git a/src/components/Player/Pages/MMR/MMR.jsx b/src/components/Player/Pages/MMR/MMR.jsx index 4efc26853d..d140dd7c6a 100644 --- a/src/components/Player/Pages/MMR/MMR.jsx +++ b/src/components/Player/Pages/MMR/MMR.jsx @@ -34,6 +34,13 @@ const getData = (props) => { }; class RequestLayer extends React.Component { + static propTypes = { + location: PropTypes.shape({ + key: PropTypes.string, + }), + playerId: PropTypes.string, + } + UNSAFE_componentWillMount() { getData(this.props); } @@ -49,13 +56,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - location: PropTypes.shape({ - key: PropTypes.string, - }), - playerId: PropTypes.string, -}; - const mapStateToProps = state => ({ columns: state.app.playerMmr.data, diff --git a/src/components/Player/Pages/Matches/Matches.jsx b/src/components/Player/Pages/Matches/Matches.jsx index ab9ccd93cb..51980a8a68 100644 --- a/src/components/Player/Pages/Matches/Matches.jsx +++ b/src/components/Player/Pages/Matches/Matches.jsx @@ -28,6 +28,13 @@ const getData = (props) => { }; class RequestLayer extends React.Component { + static propTypes = { + location: PropTypes.shape({ + key: PropTypes.string, + }), + playerId: PropTypes.string, + } + componentDidMount() { getData(this.props); } @@ -43,13 +50,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - location: PropTypes.shape({ - key: PropTypes.string, - }), - playerId: PropTypes.string, -}; - const defaultOptions = { limit: null, }; diff --git a/src/components/Player/Pages/Overview/Overview.jsx b/src/components/Player/Pages/Overview/Overview.jsx index 2911a9d62f..b353e035a8 100644 --- a/src/components/Player/Pages/Overview/Overview.jsx +++ b/src/components/Player/Pages/Overview/Overview.jsx @@ -208,6 +208,15 @@ const getData = (props) => { }; class RequestLayer extends React.Component { + static propTypes = { + location: PropTypes.shape({ + key: PropTypes.string, + }), + playerId: PropTypes.string, + toggleTurboGames: PropTypes.func, + showTurboGames: PropTypes.bool, + } + constructor(props) { super(props); this.state = { @@ -237,15 +246,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - location: PropTypes.shape({ - key: PropTypes.string, - }), - playerId: PropTypes.string, - toggleTurboGames: PropTypes.func, - showTurboGames: PropTypes.bool, -}; - const mergeHeroGuides = (heroes, heroGuides) => heroes.map(hero => ({ ...hero, pvgnaGuide: heroGuides[hero.hero_id], diff --git a/src/components/Player/Pages/Peers/Peers.jsx b/src/components/Player/Pages/Peers/Peers.jsx index c58caeeab0..84033f3753 100644 --- a/src/components/Player/Pages/Peers/Peers.jsx +++ b/src/components/Player/Pages/Peers/Peers.jsx @@ -27,6 +27,13 @@ const getData = (props) => { }; class RequestLayer extends React.Component { + static propTypes = { + location: PropTypes.shape({ + key: PropTypes.string, + }), + playerId: PropTypes.string, + } + componentDidMount() { getData(this.props); } @@ -42,13 +49,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - location: PropTypes.shape({ - key: PropTypes.string, - }), - playerId: PropTypes.string, -}; - const mapStateToProps = state => ({ data: state.app.playerPeers.data, error: state.app.playerPeers.error, diff --git a/src/components/Player/Pages/Pros/Pros.jsx b/src/components/Player/Pages/Pros/Pros.jsx index 708dbe775e..f33cbb45f4 100644 --- a/src/components/Player/Pages/Pros/Pros.jsx +++ b/src/components/Player/Pages/Pros/Pros.jsx @@ -27,6 +27,13 @@ const getData = (props) => { }; class RequestLayer extends React.Component { + static propTypes = { + location: PropTypes.shape({ + key: PropTypes.string, + }), + playerId: PropTypes.string, + } + componentDidMount() { getData(this.props); } @@ -42,13 +49,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - location: PropTypes.shape({ - key: PropTypes.string, - }), - playerId: PropTypes.string, -}; - const mapDispatchToProps = dispatch => ({ getPlayerPros: (playerId, options) => dispatch(getPlayerPros(playerId, options)), }); diff --git a/src/components/Player/Pages/Rankings/Rankings.jsx b/src/components/Player/Pages/Rankings/Rankings.jsx index 4e21605320..6a783da15a 100644 --- a/src/components/Player/Pages/Rankings/Rankings.jsx +++ b/src/components/Player/Pages/Rankings/Rankings.jsx @@ -26,6 +26,13 @@ const getData = (props) => { }; class RequestLayer extends React.Component { + static propTypes = { + location: PropTypes.shape({ + key: PropTypes.string, + }), + playerId: PropTypes.string, + } + componentDidMount() { getData(this.props); } @@ -41,13 +48,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - location: PropTypes.shape({ - key: PropTypes.string, - }), - playerId: PropTypes.string, -}; - const mapStateToProps = state => ({ data: state.app.playerRankings.data, error: state.app.playerRankings.error, diff --git a/src/components/Player/Pages/Records/Records.jsx b/src/components/Player/Pages/Records/Records.jsx index a15a9e205c..6ebf5a307b 100644 --- a/src/components/Player/Pages/Records/Records.jsx +++ b/src/components/Player/Pages/Records/Records.jsx @@ -55,6 +55,13 @@ const getData = (props) => { }; class RequestLayer extends React.Component { + static propTypes = { + location: PropTypes.shape({ + key: PropTypes.string, + }), + playerId: PropTypes.string, + } + componentDidMount() { getData(this.props); } @@ -70,13 +77,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - location: PropTypes.shape({ - key: PropTypes.string, - }), - playerId: PropTypes.string, -}; - const mapStateToProps = state => ({ data: state.app.playerRecords.data, error: state.app.playerRecords.error, diff --git a/src/components/Player/Pages/Totals/Totals.jsx b/src/components/Player/Pages/Totals/Totals.jsx index 39ae19a302..8417353535 100644 --- a/src/components/Player/Pages/Totals/Totals.jsx +++ b/src/components/Player/Pages/Totals/Totals.jsx @@ -77,6 +77,13 @@ const getData = (props) => { }; class RequestLayer extends React.Component { + static propTypes = { + playerId: PropTypes.string, + location: PropTypes.shape({ + key: PropTypes.string, + }), + } + componentDidMount() { getData(this.props); } @@ -92,13 +99,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - playerId: PropTypes.string, - location: PropTypes.shape({ - key: PropTypes.string, - }), -}; - const mapStateToProps = state => ({ data: state.app.playerTotals.data, error: state.app.playerTotals.error, diff --git a/src/components/Player/Pages/Trends/Trends.jsx b/src/components/Player/Pages/Trends/Trends.jsx index f2016699eb..de2c6773d7 100644 --- a/src/components/Player/Pages/Trends/Trends.jsx +++ b/src/components/Player/Pages/Trends/Trends.jsx @@ -54,6 +54,13 @@ const getData = (props) => { }; class RequestLayer extends React.Component { + static propTypes = { + playerId: PropTypes.string, + location: PropTypes.shape({ + key: PropTypes.string, + }), + } + UNSAFE_componentWillMount() { getData(this.props); } @@ -70,13 +77,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - playerId: PropTypes.string, - location: PropTypes.shape({ - key: PropTypes.string, - }), -}; - const mapStateToProps = state => ({ columns: state.app.playerTrends.data, loading: state.app.playerTrends.loading, diff --git a/src/components/Player/Pages/Wardmap/Wardmap.jsx b/src/components/Player/Pages/Wardmap/Wardmap.jsx index 5fafe4c737..2b42dd0c83 100644 --- a/src/components/Player/Pages/Wardmap/Wardmap.jsx +++ b/src/components/Player/Pages/Wardmap/Wardmap.jsx @@ -32,6 +32,18 @@ const getData = (props) => { }; class RequestLayer extends React.Component { + static propTypes = { + updateWindowSize: PropTypes.func, + error: PropTypes.string, + loading: PropTypes.bool, + data: PropTypes.arrayOf({}), + browser: PropTypes.shape({}), + playerId: PropTypes.string, + location: PropTypes.shape({ + key: PropTypes.string, + }), + } + componentWillUnmount() { window.removeEventListener('resize', this.props.updateWindowSize); } @@ -80,18 +92,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - updateWindowSize: PropTypes.func, - error: PropTypes.string, - loading: PropTypes.bool, - data: PropTypes.arrayOf({}), - browser: PropTypes.shape({}), - playerId: PropTypes.string, - location: PropTypes.shape({ - key: PropTypes.string, - }), -}; - const mapStateToProps = state => ({ data: state.app.playerWardmap.data, loading: state.app.playerWardmap.loading, diff --git a/src/components/Player/Pages/Wordcloud/Wordcloud.jsx b/src/components/Player/Pages/Wordcloud/Wordcloud.jsx index 36e0ac65f1..11949d64c5 100644 --- a/src/components/Player/Pages/Wordcloud/Wordcloud.jsx +++ b/src/components/Player/Pages/Wordcloud/Wordcloud.jsx @@ -11,6 +11,16 @@ const getData = (props) => { }; class RequestLayer extends React.Component { + static propTypes = { + playerId: PropTypes.string, + location: PropTypes.shape({ + key: PropTypes.string, + }), + error: PropTypes.string, + loading: PropTypes.bool, + data: PropTypes.shape({}), + } + UNSAFE_componentWillMount() { getData(this.props); } @@ -36,16 +46,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - playerId: PropTypes.string, - location: PropTypes.shape({ - key: PropTypes.string, - }), - error: PropTypes.string, - loading: PropTypes.bool, - data: PropTypes.shape({}), -}; - const mapStateToProps = state => ({ data: state.app.playerWordcloud.data, loading: state.app.playerWordcloud.loading, diff --git a/src/components/Player/Player.jsx b/src/components/Player/Player.jsx index cca5f0ebdf..689919c5a4 100644 --- a/src/components/Player/Player.jsx +++ b/src/components/Player/Player.jsx @@ -17,6 +17,22 @@ import PlayerHeader from './Header/PlayerHeader'; import playerPages from './playerPages'; class RequestLayer extends React.Component { + static propTypes = { + location: PropTypes.shape({ + key: PropTypes.string, + }), + match: PropTypes.shape({ + params: PropTypes.shape({ + playerId: PropTypes.string, + }), + }), + history: PropTypes.shape({ + push: PropTypes.func, + }), + officialPlayerName: PropTypes.string, + playerName: PropTypes.string, + } + componentDidMount() { const { props } = this; const { playerId } = props.match.params; @@ -61,22 +77,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - location: PropTypes.shape({ - key: PropTypes.string, - }), - match: PropTypes.shape({ - params: PropTypes.shape({ - playerId: PropTypes.string, - }), - }), - history: PropTypes.shape({ - push: PropTypes.func, - }), - officialPlayerName: PropTypes.string, - playerName: PropTypes.string, -}; - const mapStateToProps = state => ({ playerName: (state.app.player.data.profile || {}).personaname, officialPlayerName: (state.app.player.data.profile || {}).name, diff --git a/src/components/Player/TableFilterForm/index.jsx b/src/components/Player/TableFilterForm/index.jsx index 628b040d78..fefe039ab1 100644 --- a/src/components/Player/TableFilterForm/index.jsx +++ b/src/components/Player/TableFilterForm/index.jsx @@ -45,6 +45,13 @@ const setShowFormState = (props) => { }; class TableFilterForm extends React.Component { + static propTypes = { + showForm: PropTypes.bool, + currentQueryString: PropTypes.string, + history: PropTypes.shape({}), + playerId: PropTypes.string, + } + constructor() { super(); this.state = { @@ -219,13 +226,6 @@ class TableFilterForm extends React.Component { } } -TableFilterForm.propTypes = { - showForm: PropTypes.bool, - currentQueryString: PropTypes.string, - history: PropTypes.shape({}), - playerId: PropTypes.string, -}; - const mapStateToProps = state => ({ showForm: state.app.form.show, currentQueryString: window.location.search, diff --git a/src/components/Records/index.jsx b/src/components/Records/index.jsx index fe1bda63ad..78de02ee8f 100644 --- a/src/components/Records/index.jsx +++ b/src/components/Records/index.jsx @@ -51,6 +51,14 @@ const getData = (props) => { }; class RequestLayer extends React.Component { + static propTypes = { + match: PropTypes.shape({ + params: PropTypes.shape({ + info: PropTypes.string, + }), + }), + } + componentDidMount() { getData(this.props); } @@ -79,14 +87,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - match: PropTypes.shape({ - params: PropTypes.shape({ - info: PropTypes.string, - }), - }), -}; - const mapStateToProps = state => ({ data: state.app.records.data, loading: state.app.records.loading, diff --git a/src/components/Request/Request.jsx b/src/components/Request/Request.jsx index a38a0775e5..dfd26fb129 100644 --- a/src/components/Request/Request.jsx +++ b/src/components/Request/Request.jsx @@ -9,6 +9,13 @@ import strings from '../../lang'; import { postRequest } from '../../actions'; class Request extends React.Component { + static propTypes = { + dispatchPostRequest: PropTypes.func, + progress: PropTypes.number, + error: PropTypes.string, + loading: PropTypes.bool, + } + constructor() { super(); this.state = {}; @@ -51,13 +58,6 @@ class Request extends React.Component { } } -Request.propTypes = { - dispatchPostRequest: PropTypes.func, - progress: PropTypes.number, - error: PropTypes.string, - loading: PropTypes.bool, -}; - const mapStateToProps = (state) => { const { error, loading, progress } = state.app.request; return { diff --git a/src/components/Scenarios/Scenarios.jsx b/src/components/Scenarios/Scenarios.jsx index dfbaad10d5..d7d4eea5c4 100644 --- a/src/components/Scenarios/Scenarios.jsx +++ b/src/components/Scenarios/Scenarios.jsx @@ -67,6 +67,21 @@ const reduceRows = (data) => { const getLink = scenario => ; class Scenarios extends React.Component { + static propTypes = { + match: PropTypes.shape({ + params: PropTypes.shape({ info: PropTypes.string }), + }), + location: PropTypes.shape({ + search: PropTypes.shape({ + substring: PropTypes.string, + }), + }), + history: PropTypes.shape({ + push: PropTypes.func, + }), + scenariosState: PropTypes.shape({}), + } + constructor(props) { super(props); @@ -222,19 +237,4 @@ const mapDispatchToProps = dispatch => ({ misc: params => dispatch(getScenariosMisc(params)), }); -Scenarios.propTypes = { - match: PropTypes.shape({ - params: PropTypes.shape({ info: PropTypes.string }), - }), - location: PropTypes.shape({ - search: PropTypes.shape({ - substring: PropTypes.string, - }), - }), - history: PropTypes.shape({ - push: PropTypes.func, - }), - scenariosState: PropTypes.shape({}), -}; - export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Scenarios)); diff --git a/src/components/Scenarios/ScenariosFormField.jsx b/src/components/Scenarios/ScenariosFormField.jsx index a3e7615d64..cc3ec3693a 100644 --- a/src/components/Scenarios/ScenariosFormField.jsx +++ b/src/components/Scenarios/ScenariosFormField.jsx @@ -26,6 +26,16 @@ const customStyles = { }; class ScenarioFormField extends React.Component { + static propTypes = { + field: PropTypes.string, + formFieldState: PropTypes.shape({}), + metadata: PropTypes.shape({}), + updateFormFieldState: PropTypes.func, + selectedTab: PropTypes.string, + className: PropTypes.string, + index: PropTypes.number, + } + constructor(props) { super(props); const { @@ -114,14 +124,4 @@ class ScenarioFormField extends React.Component { } } -ScenarioFormField.propTypes = { - field: PropTypes.string, - formFieldState: PropTypes.shape({}), - metadata: PropTypes.shape({}), - updateFormFieldState: PropTypes.func, - selectedTab: PropTypes.string, - className: PropTypes.string, - index: PropTypes.number, -}; - export default ScenarioFormField; diff --git a/src/components/Search/SearchForm.jsx b/src/components/Search/SearchForm.jsx index f4806cbc49..b89fb327c0 100644 --- a/src/components/Search/SearchForm.jsx +++ b/src/components/Search/SearchForm.jsx @@ -10,6 +10,14 @@ import { getSearchResultAndPros, setSearchQuery } from '../../actions'; import constants from '../constants'; class SearchForm extends React.Component { + static propTypes = { + dispatchSearch: PropTypes.func, + dispatchSetQuery: PropTypes.func, + history: PropTypes.shape({ + push: PropTypes.func, + }), + } + constructor() { super(); this.state = {}; @@ -71,14 +79,6 @@ class SearchForm extends React.Component { } } -SearchForm.propTypes = { - dispatchSearch: PropTypes.func, - dispatchSetQuery: PropTypes.func, - history: PropTypes.shape({ - push: PropTypes.func, - }), -}; - // const mapStateToProps = (state) => { // const { error, loading, done } = state.app.search; // return { diff --git a/src/components/Table/Table.jsx b/src/components/Table/Table.jsx index 35f5b7cae4..cb44f6d932 100644 --- a/src/components/Table/Table.jsx +++ b/src/components/Table/Table.jsx @@ -62,7 +62,31 @@ const initialState = { sortFn: f => f, }; +const { + arrayOf, + bool, + shape, + number, + string, + func, +} = PropTypes; + class Table extends React.Component { + static propTypes = { + data: arrayOf(shape({})).isRequired, + columns: arrayOf(shape({})).isRequired, + loading: bool, + error: bool, + summable: bool, + maxRows: number, + paginated: bool, + placeholderMessage: string, + pageLength: number, + hoverRowColumn: bool, + highlightFn: func, + keyFn: func, + } + static renderSumRow({ columns, data }) { return ( @@ -285,28 +309,4 @@ class Table extends React.Component { } } -const { - arrayOf, - bool, - shape, - number, - string, - func, -} = PropTypes; - -Table.propTypes = { - data: arrayOf(shape({})).isRequired, - columns: arrayOf(shape({})).isRequired, - loading: bool, - error: bool, - summable: bool, - maxRows: number, - paginated: bool, - placeholderMessage: string, - pageLength: number, - hoverRowColumn: bool, - highlightFn: func, - keyFn: func, -}; - export default Table; diff --git a/src/components/Team/index.jsx b/src/components/Team/index.jsx index 980e9ea8fe..b7cfc8a219 100644 --- a/src/components/Team/index.jsx +++ b/src/components/Team/index.jsx @@ -18,6 +18,44 @@ const getData = (props) => { }; class Team extends React.Component { + static propTypes = { + generalData: PropTypes.shape({ + data: PropTypes.shape({ + team_id: PropTypes.number, + rating: PropTypes.number, + wins: PropTypes.number, + losses: PropTypes.number, + last_match_time: PropTypes.number, + name: PropTypes.string, + tag: PropTypes.string, + logo_url: PropTypes.string, + }), + loading: PropTypes.bool, + error: PropTypes.string, + }), + matchData: PropTypes.shape({ + data: PropTypes.arrayOf(PropTypes.object), + loading: PropTypes.bool, + error: PropTypes.string, + }), + heroData: PropTypes.shape({ + data: PropTypes.arrayOf(PropTypes.object), + loading: PropTypes.bool, + error: PropTypes.string, + }), + playerData: PropTypes.shape({ + data: PropTypes.arrayOf(PropTypes.object), + loading: PropTypes.bool, + error: PropTypes.string, + }), + match: PropTypes.shape({ + params: PropTypes.shape({ + teamId: PropTypes.string, + info: PropTypes.string, + }), + }), + } + componentDidMount() { getData(this.props); } @@ -47,44 +85,6 @@ class Team extends React.Component { } } -Team.propTypes = { - generalData: PropTypes.shape({ - data: PropTypes.shape({ - team_id: PropTypes.number, - rating: PropTypes.number, - wins: PropTypes.number, - losses: PropTypes.number, - last_match_time: PropTypes.number, - name: PropTypes.string, - tag: PropTypes.string, - logo_url: PropTypes.string, - }), - loading: PropTypes.bool, - error: PropTypes.string, - }), - matchData: PropTypes.shape({ - data: PropTypes.arrayOf(PropTypes.object), - loading: PropTypes.bool, - error: PropTypes.string, - }), - heroData: PropTypes.shape({ - data: PropTypes.arrayOf(PropTypes.object), - loading: PropTypes.bool, - error: PropTypes.string, - }), - playerData: PropTypes.shape({ - data: PropTypes.arrayOf(PropTypes.object), - loading: PropTypes.bool, - error: PropTypes.string, - }), - match: PropTypes.shape({ - params: PropTypes.shape({ - teamId: PropTypes.string, - info: PropTypes.string, - }), - }), -}; - const mapStateToProps = state => ({ generalData: state.app.team, heroData: state.app.teamHeroes, diff --git a/src/components/Teams/index.jsx b/src/components/Teams/index.jsx index 946281ecf9..038b09be15 100644 --- a/src/components/Teams/index.jsx +++ b/src/components/Teams/index.jsx @@ -66,6 +66,17 @@ const columns = [{ }]; class RequestLayer extends React.Component { + static propTypes = { + dispatchTeams: PropTypes.func, + data: PropTypes.arrayOf(PropTypes.object), + loading: PropTypes.bool, + match: PropTypes.shape({ + params: PropTypes.shape({ + teamId: PropTypes.string, + }), + }), + } + componentDidMount() { this.props.dispatchTeams(); } @@ -94,17 +105,6 @@ class RequestLayer extends React.Component { } } -RequestLayer.propTypes = { - dispatchTeams: PropTypes.func, - data: PropTypes.arrayOf(PropTypes.object), - loading: PropTypes.bool, - match: PropTypes.shape({ - params: PropTypes.shape({ - teamId: PropTypes.string, - }), - }), -}; - const mapStateToProps = state => ({ data: state.app.teams.data.filter(team => team.last_match_time > ((new Date() / 1000) - (60 * 60 * 24 * 30 * 6))), loading: state.app.teams.loading, diff --git a/src/components/Visualizations/Graph/MatchGraph.jsx b/src/components/Visualizations/Graph/MatchGraph.jsx index a5fcbf932a..dd6e486c59 100644 --- a/src/components/Visualizations/Graph/MatchGraph.jsx +++ b/src/components/Visualizations/Graph/MatchGraph.jsx @@ -125,6 +125,11 @@ XpNetworthGraph.propTypes = { }; class PlayersGraph extends React.Component { + static propTypes = { + match: PropTypes.shape({}), + type: PropTypes.string, + } + constructor(props) { super(props); this.state = { @@ -208,10 +213,6 @@ class PlayersGraph extends React.Component { return null; } } -PlayersGraph.propTypes = { - match: PropTypes.shape({}), - type: PropTypes.string, -}; const MatchGraph = ({ type, match, width }) => { if (type === 'difference') { diff --git a/src/components/Visualizations/inflictorWithValue.jsx b/src/components/Visualizations/inflictorWithValue.jsx index 9c2f6829b2..83c4dd74be 100644 --- a/src/components/Visualizations/inflictorWithValue.jsx +++ b/src/components/Visualizations/inflictorWithValue.jsx @@ -200,6 +200,13 @@ const tooltipContainer = thing => ( ); class InflictorWithValue extends React.Component { + static propTypes = { + inflictor: PropTypes.string, + value: PropTypes.string, + type: PropTypes.string, + ptooltip: PropTypes.shape({}), + } + constructor(props) { super(props); this.state = {}; @@ -285,11 +292,4 @@ class InflictorWithValue extends React.Component { } } -InflictorWithValue.propTypes = { - inflictor: PropTypes.string, - value: PropTypes.string, - type: PropTypes.string, - ptooltip: PropTypes.shape({}), -}; - export default (inflictor, value, type, ptooltip) => ; diff --git a/src/components/Wordcloud/Wordcloud.jsx b/src/components/Wordcloud/Wordcloud.jsx index a9928571e4..9a90406dbe 100644 --- a/src/components/Wordcloud/Wordcloud.jsx +++ b/src/components/Wordcloud/Wordcloud.jsx @@ -60,7 +60,13 @@ function updateWordCloud(wordCounts, cloudDomId) { }); } +const { string } = PropTypes; + class Wordcloud extends React.Component { + static propTypes = { + counts: string, + } + componentDidMount() { updateWordCloud(this.props.counts, this.id); } @@ -86,9 +92,5 @@ class Wordcloud extends React.Component { Wordcloud.defaultProps = { counts: {}, }; -const { string } = PropTypes; -Wordcloud.propTypes = { - counts: string, -}; export default connect()(Wordcloud); From dc392848f6311465b419f2452a01096f1160d3c8 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:18:29 -0700 Subject: [PATCH 0353/1495] update with support and error behavior (#1543) --- src/components/Api/Api.jsx | 3 ++- src/lang/en-US.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/Api/Api.jsx b/src/components/Api/Api.jsx index 3367c50935..04a791f0fa 100644 --- a/src/components/Api/Api.jsx +++ b/src/components/Api/Api.jsx @@ -230,6 +230,7 @@ class KeyManagement extends React.Component { .replace('$last4', this.state.customer.credit_last4)}` }

    +

    {strings.api_support.replace('$email', 'api@opendota.com')}

  • {strings.api_charging.replace('$cost', `$${premPrice / premUnit}`)}
  • {strings.api_credit_required}
  • -
  • {strings.api_delay}
  • +
  • {strings.api_failure}
  • diff --git a/src/lang/en-US.json b/src/lang/en-US.json index 550def5604..e1c8a0f06b 100644 --- a/src/lang/en-US.json +++ b/src/lang/en-US.json @@ -49,7 +49,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -57,6 +57,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 3c23d17c7cf6f27fc7594820d020e13a2e8f31a3 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:20:14 -0700 Subject: [PATCH 0354/1495] New translations en-US.json (Russian) --- src/lang/ru-RU.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index a7a00bed31..e452f1c100 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 17d33870450e9650084399a4c2ae24ef4ef6b1c1 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:20:18 -0700 Subject: [PATCH 0355/1495] New translations en-US.json (Italian) --- src/lang/it-IT.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/it-IT.json b/src/lang/it-IT.json index 22d6ed90eb..cc57321a42 100644 --- a/src/lang/it-IT.json +++ b/src/lang/it-IT.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 76fca18b02e99bad63a4ac0643efa034f73185ba Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:20:20 -0700 Subject: [PATCH 0356/1495] New translations en-US.json (Swedish) --- src/lang/sv-SE.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/sv-SE.json b/src/lang/sv-SE.json index 3b2f9800d8..2f0c079c24 100644 --- a/src/lang/sv-SE.json +++ b/src/lang/sv-SE.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From ee441797e3b81520fa3b6efad8cb50fad346ce4a Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:20:24 -0700 Subject: [PATCH 0357/1495] New translations en-US.json (Spanish, United States) --- src/lang/es-US.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/es-US.json b/src/lang/es-US.json index c8b198dbab..ef87f470ef 100644 --- a/src/lang/es-US.json +++ b/src/lang/es-US.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 13eaa9054355edc7c244801a44918f278dbe3c5c Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:20:26 -0700 Subject: [PATCH 0358/1495] New translations en-US.json (Spanish, Peru) --- src/lang/es-PE.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/es-PE.json b/src/lang/es-PE.json index 05b2e51acc..36589bd722 100644 --- a/src/lang/es-PE.json +++ b/src/lang/es-PE.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 81052230a96d1988d12c11e089594a276a8c23f7 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:20:29 -0700 Subject: [PATCH 0359/1495] New translations en-US.json (Spanish) --- src/lang/es-ES.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/es-ES.json b/src/lang/es-ES.json index e939c3a5eb..e49054694e 100644 --- a/src/lang/es-ES.json +++ b/src/lang/es-ES.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From a60f9e3a850385d6595c267238d626463dd48d2c Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:20:32 -0700 Subject: [PATCH 0360/1495] New translations en-US.json (Slovak) --- src/lang/sk-SK.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/sk-SK.json b/src/lang/sk-SK.json index 22344a2fc6..005bccf19a 100644 --- a/src/lang/sk-SK.json +++ b/src/lang/sk-SK.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 8bd398c4efb741a490887cde7f769d27a252a981 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:20:35 -0700 Subject: [PATCH 0361/1495] New translations en-US.json (Serbian (Cyrillic)) --- src/lang/sr-SP.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/sr-SP.json b/src/lang/sr-SP.json index 087dad8ea9..14ec0715b5 100644 --- a/src/lang/sr-SP.json +++ b/src/lang/sr-SP.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 15b75d244a1aa37f27dd1a698a3773fde67869b3 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:20:38 -0700 Subject: [PATCH 0362/1495] New translations en-US.json (Romanian) --- src/lang/ro-RO.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/ro-RO.json b/src/lang/ro-RO.json index 6fbf29ae41..38838128b6 100644 --- a/src/lang/ro-RO.json +++ b/src/lang/ro-RO.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 3f2e18b9c556a5c63ed5655934ed5294f2b32ff0 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:20:40 -0700 Subject: [PATCH 0363/1495] New translations en-US.json (Portuguese) --- src/lang/pt-PT.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/pt-PT.json b/src/lang/pt-PT.json index 447fe653c3..94412a2b71 100644 --- a/src/lang/pt-PT.json +++ b/src/lang/pt-PT.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From bbd07f8736e67a8c7a15df1919fc41ed3ab1e479 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:20:43 -0700 Subject: [PATCH 0364/1495] New translations en-US.json (Polish) --- src/lang/pl-PL.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/pl-PL.json b/src/lang/pl-PL.json index 6b86812832..4d68318f54 100644 --- a/src/lang/pl-PL.json +++ b/src/lang/pl-PL.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 67d044fbc82048bb1ef3df0fd7890f31e838ccff Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:20:46 -0700 Subject: [PATCH 0365/1495] New translations en-US.json (Norwegian) --- src/lang/no-NO.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/no-NO.json b/src/lang/no-NO.json index 4a22f9c989..ef806b0988 100644 --- a/src/lang/no-NO.json +++ b/src/lang/no-NO.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From b6009ede65a66d8a670ba2758aae5c37637496c8 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:20:48 -0700 Subject: [PATCH 0366/1495] New translations en-US.json (Malay) --- src/lang/ms-MY.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/ms-MY.json b/src/lang/ms-MY.json index 301d4bc8ad..e620160687 100644 --- a/src/lang/ms-MY.json +++ b/src/lang/ms-MY.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 62ae1fd9f8589fc87d8a219e0990608de229183e Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:20:50 -0700 Subject: [PATCH 0367/1495] New translations en-US.json (Korean) --- src/lang/ko-KR.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/ko-KR.json b/src/lang/ko-KR.json index 971524c251..3a70feb538 100644 --- a/src/lang/ko-KR.json +++ b/src/lang/ko-KR.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 3c5bfb4d730e655abae46d74d9bb1b1ca07d1f75 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:20:53 -0700 Subject: [PATCH 0368/1495] New translations en-US.json (Japanese) --- src/lang/ja-JP.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/ja-JP.json b/src/lang/ja-JP.json index 7f3a1689cb..8a6469ce08 100644 --- a/src/lang/ja-JP.json +++ b/src/lang/ja-JP.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 1624085e2c800982d025321a4385340d22ae063b Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:20:57 -0700 Subject: [PATCH 0369/1495] New translations en-US.json (Hungarian) --- src/lang/hu-HU.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/hu-HU.json b/src/lang/hu-HU.json index 0fb2a82a16..83b00a1538 100644 --- a/src/lang/hu-HU.json +++ b/src/lang/hu-HU.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 2e207c53168c4950ec33a6b14354c258829b087e Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:21:00 -0700 Subject: [PATCH 0370/1495] New translations en-US.json (Chinese Simplified) --- src/lang/zh-CN.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index 9243d7d2a5..62a185658d 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 2e437db35ee44c86f66609b0fb712eeca5ae80c1 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:21:03 -0700 Subject: [PATCH 0371/1495] New translations en-US.json (Hebrew) --- src/lang/he-IL.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/he-IL.json b/src/lang/he-IL.json index 5f601ee112..14178615a4 100644 --- a/src/lang/he-IL.json +++ b/src/lang/he-IL.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 6a004f519c6afcff28d65f1f23a6fa15e6a059a1 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:21:06 -0700 Subject: [PATCH 0372/1495] New translations en-US.json (Greek) --- src/lang/el-GR.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/el-GR.json b/src/lang/el-GR.json index b96b785fa2..f0ba19117b 100644 --- a/src/lang/el-GR.json +++ b/src/lang/el-GR.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 0ee4b8a717babf8f8d386abe27f595abf3059bc4 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:21:09 -0700 Subject: [PATCH 0373/1495] New translations en-US.json (German) --- src/lang/de-DE.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index 502aa7b0c8..11f4c99fc7 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 0e943e06a226aa8b0763400d59faaf1d4db43d35 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:21:12 -0700 Subject: [PATCH 0374/1495] New translations en-US.json (French) --- src/lang/fr-FR.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/fr-FR.json b/src/lang/fr-FR.json index 5eae36963e..47aeff75ef 100644 --- a/src/lang/fr-FR.json +++ b/src/lang/fr-FR.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From d1da0e2908342d1cf56b1e8e77d788d2772dc808 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:21:15 -0700 Subject: [PATCH 0375/1495] New translations en-US.json (Finnish) --- src/lang/fi-FI.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/fi-FI.json b/src/lang/fi-FI.json index b6c072899f..0e7e0e7bc4 100644 --- a/src/lang/fi-FI.json +++ b/src/lang/fi-FI.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 4243aa3f88600ac995cd0ce173673db6971a0d89 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:21:18 -0700 Subject: [PATCH 0376/1495] New translations en-US.json (Dutch) --- src/lang/nl-NL.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/nl-NL.json b/src/lang/nl-NL.json index da7e22bd7e..f61a18f312 100644 --- a/src/lang/nl-NL.json +++ b/src/lang/nl-NL.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 7de34dabe056b8d5a143b3cc96a38453a9d2bcf0 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:21:21 -0700 Subject: [PATCH 0377/1495] New translations en-US.json (Danish) --- src/lang/da-DK.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/da-DK.json b/src/lang/da-DK.json index 0202ca6611..8e2714df7d 100644 --- a/src/lang/da-DK.json +++ b/src/lang/da-DK.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 3964314385911900100df984ac13b1e97ace590a Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:21:24 -0700 Subject: [PATCH 0378/1495] New translations en-US.json (Czech) --- src/lang/cs-CZ.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/cs-CZ.json b/src/lang/cs-CZ.json index 46349e619b..dd86f526ca 100644 --- a/src/lang/cs-CZ.json +++ b/src/lang/cs-CZ.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 52e0ca842335ceb6d5264263453eb5dc59b4185a Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:21:27 -0700 Subject: [PATCH 0379/1495] New translations en-US.json (Chinese Traditional) --- src/lang/zh-TW.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/zh-TW.json b/src/lang/zh-TW.json index 58b6766e0a..8ac9b03cef 100644 --- a/src/lang/zh-TW.json +++ b/src/lang/zh-TW.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From d32a6c0e03828fba0d9359a083fd80f60f0a3cf4 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:21:31 -0700 Subject: [PATCH 0380/1495] New translations en-US.json (Bulgarian) --- src/lang/bg-BG.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/bg-BG.json b/src/lang/bg-BG.json index afbce2438f..b6a2c242af 100644 --- a/src/lang/bg-BG.json +++ b/src/lang/bg-BG.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 2bba509d80b3c41673f43f4946decc6ba24f06c9 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:21:34 -0700 Subject: [PATCH 0381/1495] New translations en-US.json (Vietnamese) --- src/lang/vi-VN.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/vi-VN.json b/src/lang/vi-VN.json index 8a26a3650a..4dd5330e31 100644 --- a/src/lang/vi-VN.json +++ b/src/lang/vi-VN.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From 3db90662b699bf4cf9f6bec7c86721c9228d3d10 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:21:37 -0700 Subject: [PATCH 0382/1495] New translations en-US.json (Ukrainian) --- src/lang/uk-UA.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/uk-UA.json b/src/lang/uk-UA.json index b55f10772b..278aac91ea 100644 --- a/src/lang/uk-UA.json +++ b/src/lang/uk-UA.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From f21b1765391db80308b3c14683a0ac76eaf1870c Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:21:39 -0700 Subject: [PATCH 0383/1495] New translations en-US.json (Portuguese, Brazilian) --- src/lang/pt-BR.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index 741c59d303..de30c7ac3f 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -45,7 +45,7 @@ "api_header_details": "Detalhes", "api_charging": "Taxa cobrada: $cost por chamada, arredondada para o centavo mais próximo.", "api_credit_required": "Obter uma chave de API requer um método de pagamento vinculado. Será debitado no cartão o valor de todas as taxas no começo do mês.", - "api_delay": "Acabou de receber sua chave? Aguarde 5 minutos para começar a utilizar.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "Houve um erro com a solicitação. Por favor, tente novamente. Se continuar, contate-nos em support@opendota.com.", "api_login": "Login para acessar a chave de API", "api_update_billing": "Atualizar método de pagamento", @@ -53,6 +53,7 @@ "api_key_usage": "Para usar sua chave, adicione $param como um parâmetro de consulta à sua solicitação de API:", "api_billing_cycle": "O ciclo de cobrança atual termina em $date.", "api_billed_to": "Nós vamos cobrar automaticamente o cartão $brand terminado em $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Uso", "api_usage_calls": "# Chamadas de API", "api_usage_fees": "Taxa estimada", From 5cc66cd18d44e4d2c51721675d831653e97857d1 Mon Sep 17 00:00:00 2001 From: Albert Cui Date: Sat, 21 Apr 2018 10:21:42 -0700 Subject: [PATCH 0384/1495] New translations en-US.json (Turkish) --- src/lang/tr-TR.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json index a14b7c6ce1..087fbc75eb 100644 --- a/src/lang/tr-TR.json +++ b/src/lang/tr-TR.json @@ -45,7 +45,7 @@ "api_header_details": "Details", "api_charging": "You're charged $cost per call, rounded up to the nearest cent.", "api_credit_required": "Getting an API key requires a linked payment method. We'll automatically charge the card at the beginning of the month for any fees owed.", - "api_delay": "Just got your key? It takes up to 5 minutes to take effect.", + "api_failure": "500 errors don't count as usage, since that means we messed up!", "api_error": "There was an error with the request. Please try again. If it continues, contact us at support@opendota.com.", "api_login": "Login to access API Key", "api_update_billing": "Update billing method", @@ -53,6 +53,7 @@ "api_key_usage": "To use your key, add $param as a query parameter to your API request:", "api_billing_cycle": "The current billing cycle ends on $date.", "api_billed_to": "We'll automatically bill the $brand ending in $last4.", + "api_support": "Need support? Email $email.", "api_header_usage": "Your Usage", "api_usage_calls": "# API calls", "api_usage_fees": "Estimated Fees", From e8d265b6f1b0b0f2ecdeead3c01ca82df3d50ac1 Mon Sep 17 00:00:00 2001 From: hchung Date: Sat, 21 Apr 2018 11:09:04 -0700 Subject: [PATCH 0385/1495] remove react-style-proptype --- package-lock.json | 1598 +------------------ package.json | 1 - src/components/Container/index.jsx | 7 +- src/components/Match/TeamfightMap/index.jsx | 3 +- 4 files changed, 14 insertions(+), 1595 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5aedf5167d..ef47d2403e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2452,7 +2452,6 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", - "fsevents": "1.1.3", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -4650,794 +4649,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", - "optional": true, - "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.6.39" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.39", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - } - } - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -7805,12 +7016,6 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "optional": true - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -10133,7 +9338,6 @@ "extract-text-webpack-plugin": "3.0.2", "file-loader": "1.1.5", "fs-extra": "3.0.1", - "fsevents": "1.1.2", "html-webpack-plugin": "2.29.0", "jest": "20.0.4", "object-assign": "4.1.1", @@ -10241,791 +9445,6 @@ "universalify": "0.1.1" } }, - "fsevents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", - "optional": true, - "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.6.36" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "optional": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "optional": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.36", - "bundled": true, - "optional": true, - "requires": { - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "optional": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - } - } - }, "js-yaml": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", @@ -11160,6 +9579,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/react-style-proptype/-/react-style-proptype-3.1.0.tgz", "integrity": "sha512-e4lOMjF4f8Pp/jdO9myNzDvSAx1aG5r0olziD64Bgk40LN8LxidRCgnKeI2RiKrqYD6j2Z8ByXoUbwV+/mwpwg==", + "dev": true, "requires": { "prop-types": "15.6.0" } @@ -12249,6 +10669,14 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + }, "string-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", @@ -12303,14 +10731,6 @@ "function-bind": "1.1.1" } }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - }, "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", diff --git a/package.json b/package.json index d91cddb9a4..b72d5a5557 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,6 @@ "react-router-dom": "^4.2.2", "react-scripts": "^1.0.17", "react-stripe-checkout": "^2.6.3", - "react-style-proptype": "^3.1.0", "react-tooltip": "^3.4.0", "recharts": "^1.0.0-beta.2", "redux": "^3.7.2", diff --git a/src/components/Container/index.jsx b/src/components/Container/index.jsx index bd934cc023..0a6a5eba12 100644 --- a/src/components/Container/index.jsx +++ b/src/components/Container/index.jsx @@ -1,6 +1,5 @@ import React from 'react'; import PropTypes from 'prop-types'; -import stylePropType from 'react-style-proptype'; import Heading from '../Heading'; import Spinner from '../Spinner'; import Error from '../Error'; @@ -15,7 +14,9 @@ export const AsyncContainer = ({ loading, error, children }) => { return children; }; -const { bool, node, string } = PropTypes; +const { + bool, node, string, shape, +} = PropTypes; AsyncContainer.propTypes = { loading: bool, @@ -37,7 +38,7 @@ const Container = ({ Container.propTypes = { title: string, subtitle: string, - style: stylePropType, + style: shape({}), className: string, loading: bool, error: bool, diff --git a/src/components/Match/TeamfightMap/index.jsx b/src/components/Match/TeamfightMap/index.jsx index 0501ffd771..75b7e2ebce 100644 --- a/src/components/Match/TeamfightMap/index.jsx +++ b/src/components/Match/TeamfightMap/index.jsx @@ -1,7 +1,6 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import ReactTooltip from 'react-tooltip'; -import stylePropType from 'react-style-proptype'; import styled from 'styled-components'; import { formatSeconds, calculateDistance, calculateRelativeXY, bindWidth } from '../../../utility'; import { IconRadiant, IconDire, IconDot } from '../../Icons'; @@ -515,7 +514,7 @@ TeamfightIcon.propTypes = { mapWidth: number, onClick: func, // not required because tombstone doesn't need click fn Icon: func, - style: stylePropType, + style: shape({}), }; GoldDelta.propTypes = { From 4b285206c720613ff9a92adac7072467ddff1222 Mon Sep 17 00:00:00 2001 From: hchung Date: Sat, 21 Apr 2018 11:41:14 -0700 Subject: [PATCH 0386/1495] dynamically load ability ids --- src/components/Match/matchColumns.jsx | 5 ++--- src/components/Visualizations/inflictorWithValue.jsx | 11 +++++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/components/Match/matchColumns.jsx b/src/components/Match/matchColumns.jsx index 99ff8112ef..ddccf43d00 100644 --- a/src/components/Match/matchColumns.jsx +++ b/src/components/Match/matchColumns.jsx @@ -4,7 +4,6 @@ import heroes from 'dotaconstants/build/heroes.json'; import items from 'dotaconstants/build/items.json'; import orderTypes from 'dotaconstants/build/order_types.json'; import itemIds from 'dotaconstants/build/item_ids.json'; -import abilityIds from 'dotaconstants/build/ability_ids.json'; import buffs from 'dotaconstants/build/permanent_buffs.json'; import util from 'util'; import ReactTooltip from 'react-tooltip'; @@ -292,7 +291,7 @@ export const abilityColumns = () => { (
    - {inflictorWithValue(abilityIds[row[`ability_upgrades_arr_${index}`]]) ||
    } + {inflictorWithValue(null, null, null, null, row[`ability_upgrades_arr_${index}`]) ||
    }
    ), })); @@ -311,7 +310,7 @@ export const abilityDraftColumns = () => { (
    - {inflictorWithValue(abilityIds[row.abilities[index - 1]]) ||
    } + {inflictorWithValue(null, null, null, null, row.abilities[index - 1]) ||
    }
    ), })); diff --git a/src/components/Visualizations/inflictorWithValue.jsx b/src/components/Visualizations/inflictorWithValue.jsx index 83c4dd74be..efb58a0809 100644 --- a/src/components/Visualizations/inflictorWithValue.jsx +++ b/src/components/Visualizations/inflictorWithValue.jsx @@ -205,6 +205,7 @@ class InflictorWithValue extends React.Component { value: PropTypes.string, type: PropTypes.string, ptooltip: PropTypes.shape({}), + abilityId: PropTypes.number, } constructor(props) { @@ -216,16 +217,18 @@ class InflictorWithValue extends React.Component { this.setState({ abilities: await import('dotaconstants/build/abilities.json'), neutralAbilities: await import('dotaconstants/build/neutral_abilities.json'), + abilityIds: await import('dotaconstants/build/ability_ids.json'), }); } render() { const { - inflictor, value, type, ptooltip, + inflictor, value, type, ptooltip, abilityId, } = this.props; - const { abilities, neutralAbilities } = this.state; + const { abilities, neutralAbilities, abilityIds } = this.state; if (inflictor !== undefined) { - const ability = abilities && abilities[inflictor]; + const resolvedInflictor = abilityId && abilityIds && abilityIds[abilityId]; + const ability = abilities && abilities[resolvedInflictor || inflictor]; const neutralAbility = neutralAbilities && neutralAbilities[inflictor]; const item = items[inflictor]; let image; @@ -292,4 +295,4 @@ class InflictorWithValue extends React.Component { } } -export default (inflictor, value, type, ptooltip) => ; +export default (inflictor, value, type, ptooltip, abilityId) => ; From bc1f93ddf9f6fcd7fbd467af1ff6a4976c191d84 Mon Sep 17 00:00:00 2001 From: hchung Date: Sat, 21 Apr 2018 11:48:28 -0700 Subject: [PATCH 0387/1495] fix ability rendering --- .../Visualizations/inflictorWithValue.jsx | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/components/Visualizations/inflictorWithValue.jsx b/src/components/Visualizations/inflictorWithValue.jsx index 1c7e7fc3ad..28de6f5fe8 100644 --- a/src/components/Visualizations/inflictorWithValue.jsx +++ b/src/components/Visualizations/inflictorWithValue.jsx @@ -225,31 +225,31 @@ class InflictorWithValue extends React.Component { inflictor, value, type, ptooltip, abilityId, } = this.props; const { abilities, neutralAbilities, abilityIds } = this.state; - if (inflictor !== undefined) { - const resolvedInflictor = abilityId && abilityIds && abilityIds[abilityId]; - const ability = abilities && abilities[resolvedInflictor || inflictor]; - const neutralAbility = neutralAbilities && neutralAbilities[inflictor]; - const item = items[inflictor]; + const resolvedInflictor = (abilityId && abilityIds && abilityIds[abilityId]) || inflictor; + if (resolvedInflictor !== undefined) { + const ability = abilities && abilities[resolvedInflictor]; + const neutralAbility = neutralAbilities && neutralAbilities[resolvedInflictor]; + const item = items[resolvedInflictor]; let image; let tooltip = strings.tooltip_autoattack_other; const ttId = uuid.v4(); if (ability) { - if (inflictor.includes('attribute_bonus')) { + if (resolvedInflictor.includes('attribute_bonus')) { image = '/assets/images/stats.png'; - } else if (inflictor.includes('special_bonus')) { + } else if (resolvedInflictor.includes('special_bonus')) { image = '/assets/images/dota2/talent_tree.svg'; } else if (neutralAbility) { image = neutralAbility.img; } else { - image = `${process.env.REACT_APP_API_HOST}/apps/dota2/images/abilities/${inflictor}_lg.png`; + image = `${process.env.REACT_APP_API_HOST}/apps/dota2/images/abilities/${resolvedInflictor}_lg.png`; } tooltip = tooltipContainer(ability); } else if (item) { - if (customImageIcon.includes(inflictor)) { - image = `/assets/images/dota2/${inflictor}.png`; + if (customImageIcon.includes(resolvedInflictor)) { + image = `/assets/images/dota2/${resolvedInflictor}.png`; } else { - image = `${process.env.REACT_APP_API_HOST}/apps/dota2/images/items/${getInflictorImage(inflictor)}_lg.png`; + image = `${process.env.REACT_APP_API_HOST}/apps/dota2/images/items/${getInflictorImage(resolvedInflictor)}_lg.png`; } tooltip = tooltipContainer(item); } else { From 3759c695e23646f44662bd509917eed55463e4e3 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Sat, 21 Apr 2018 21:06:35 +0000 Subject: [PATCH 0388/1495] update recharts --- package-lock.json | 1785 +++++++++++++++++++++++++++++++++++++++++++-- package.json | 2 +- 2 files changed, 1728 insertions(+), 59 deletions(-) diff --git a/package-lock.json b/package-lock.json index ef47d2403e..51ca2fdcf3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2452,6 +2452,7 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", + "fsevents": "1.2.0", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -2460,6 +2461,12 @@ "readdirp": "2.1.0" } }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "optional": true + }, "ci-info": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.1.tgz", @@ -3197,21 +3204,21 @@ "integrity": "sha1-NC39EoN8kJdPM/HMCnha6lcNzcI=" }, "d3-color": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.0.3.tgz", - "integrity": "sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.1.0.tgz", + "integrity": "sha512-IZVcqX5yYFvR2NUBbSfIfbgNcSgAtZ7JbgQWqDXf4CywtN7agvI7Kw6+Q1ETvlHOHWJT55Kyuzt0C3I0GVtRHQ==" }, "d3-format": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.2.0.tgz", - "integrity": "sha1-a0gLqohohdRlHcJIqPSsnaFtsHo=" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.2.2.tgz", + "integrity": "sha512-zH9CfF/3C8zUI47nsiKfD0+AGDEuM8LwBIP7pBVpyR4l/sKkZqITmMtxRp04rwBrlshIZ17XeFAaovN3++wzkw==" }, "d3-interpolate": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.5.tgz", - "integrity": "sha1-aeCZ/zkhRxblY8muw+qdHqS4p58=", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz", + "integrity": "sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==", "requires": { - "d3-color": "1.0.3" + "d3-color": "1.1.0" } }, "d3-path": { @@ -3226,11 +3233,11 @@ "requires": { "d3-array": "1.2.1", "d3-collection": "1.0.4", - "d3-color": "1.0.3", - "d3-format": "1.2.0", - "d3-interpolate": "1.1.5", - "d3-time": "1.0.7", - "d3-time-format": "2.1.0" + "d3-color": "1.1.0", + "d3-format": "1.2.2", + "d3-interpolate": "1.1.6", + "d3-time": "1.0.8", + "d3-time-format": "2.1.1" } }, "d3-shape": { @@ -3242,16 +3249,16 @@ } }, "d3-time": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.7.tgz", - "integrity": "sha1-lMr27bt4ebuAnQ0fdXK8SEgvcnA=" + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.8.tgz", + "integrity": "sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ==" }, "d3-time-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.0.tgz", - "integrity": "sha512-mqTsfDTylgwE3YE/VNs9oB2OGX274fO0B5j1irbgLQI+X3FPoJg25pesNxrcdZ2nBeRx/6sHDJlDyMIjWL0BGQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.1.tgz", + "integrity": "sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw==", "requires": { - "d3-time": "1.0.7" + "d3-time": "1.0.8" } }, "damerau-levenshtein": { @@ -4634,21 +4641,805 @@ "mime-types": "2.1.17" } }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "optional": true, + "requires": { + "minipass": "2.2.4" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.0.tgz", + "integrity": "sha512-ROrBIbmw4ulxmQTwYAAGyN/0xgIOAFd6gX/K3F1aGLP/K5KxkubrlGISMV5EEWEB7qtiEdE0HpaqvMMHR+Ib6w==", + "optional": true, + "requires": { + "nan": "2.10.0", + "node-pre-gyp": "0.9.1" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true + }, + "co": { + "version": "4.6.0", + "bundled": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true + }, + "node-pre-gyp": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz", + "integrity": "sha1-8RwHUW3ZL4cZnbx+GDjqt81WyeA=", + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "mkdirp": "0.5.1", + "needle": "2.2.0", + "nopt": "4.0.1", + "npm-packlist": "1.1.10", + "npmlog": "4.1.0", + "rc": "1.2.1", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "4.4.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "optional": true + }, + "tar": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", + "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", + "optional": true, + "requires": { + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.4", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.1", + "yallist": "3.0.2" + } + } + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true + }, + "qs": { + "version": "6.4.0", + "bundled": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", + "optional": true + } + } + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -5298,6 +6089,15 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==" }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "optional": true, + "requires": { + "minimatch": "3.0.4" + } + }, "immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", @@ -6978,6 +7778,31 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, + "minipass": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", + "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", + "requires": { + "safe-buffer": "5.1.1", + "yallist": "3.0.2" + }, + "dependencies": { + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" + } + } + }, + "minizlib": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", + "optional": true, + "requires": { + "minipass": "2.2.4" + } + }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -7016,6 +7841,12 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "optional": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -7029,6 +7860,28 @@ "xml-char-classes": "1.0.0" } }, + "needle": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", + "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", + "optional": true, + "requires": { + "debug": "2.6.9", + "iconv-lite": "0.4.19", + "sax": "1.2.4" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "optional": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", @@ -7158,6 +8011,22 @@ "sort-keys": "1.1.2" } }, + "npm-bundled": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", + "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==", + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz", + "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", + "optional": true, + "requires": { + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -9338,6 +10207,7 @@ "extract-text-webpack-plugin": "3.0.2", "file-loader": "1.1.5", "fs-extra": "3.0.1", + "fsevents": "1.1.2", "html-webpack-plugin": "2.29.0", "jest": "20.0.4", "object-assign": "4.1.1", @@ -9445,6 +10315,791 @@ "universalify": "0.1.1" } }, + "fsevents": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", + "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", + "optional": true, + "requires": { + "nan": "2.10.0", + "node-pre-gyp": "0.6.36" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "optional": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.36", + "bundled": true, + "optional": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "optional": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + } + } + }, "js-yaml": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", @@ -9512,20 +11167,34 @@ "lodash": "4.17.4", "prop-types": "15.6.0", "raf": "3.4.0", - "react-transition-group": "2.2.1" + "react-transition-group": "2.3.1" }, "dependencies": { + "dom-helpers": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.3.1.tgz", + "integrity": "sha512-2Sm+JaYn74OiTM2wHvxJOo3roiq/h25Yi69Fqk269cNUwIXsCvATB6CRSFC9Am/20G2b28hGv/+7NiWydIrPvg==" + }, "react-transition-group": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.2.1.tgz", - "integrity": "sha512-q54UBM22bs/CekG8r3+vi9TugSqh0t7qcEVycaRc9M0p0aCEu+h6rp/RFiW7fHfgd1IKpd9oILFTl5QK+FpiPA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.3.1.tgz", + "integrity": "sha512-hu4/LAOFSKjWt1+1hgnOv3ldxmt6lvZGTWz4KUkFrqzXrNDIVSu6txIcPszw7PNduR8en9YTN55JLRyd/L1ZiQ==", "requires": { - "chain-function": "1.0.0", - "classnames": "2.2.5", - "dom-helpers": "3.2.1", + "dom-helpers": "3.3.1", "loose-envify": "1.3.1", - "prop-types": "15.6.0", - "warning": "3.0.0" + "prop-types": "15.6.1" + }, + "dependencies": { + "prop-types": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", + "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } + } } } } @@ -9731,13 +11400,13 @@ } }, "recharts": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-1.0.0-beta.2.tgz", - "integrity": "sha1-8nqw3fd1DzjnfslJXffNWm7cykA=", + "version": "1.0.0-beta.10", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-1.0.0-beta.10.tgz", + "integrity": "sha1-080V32t4edWWjaPJQrX82vJQT+E=", "requires": { "classnames": "2.2.5", "core-js": "2.5.1", - "d3-interpolate": "1.1.5", + "d3-interpolate": "1.1.6", "d3-scale": "1.0.6", "d3-shape": "1.2.0", "lodash": "4.17.4", @@ -10669,14 +12338,6 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - }, "string-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", @@ -10731,6 +12392,14 @@ "function-bind": "1.1.1" } }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + }, "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", diff --git a/package.json b/package.json index b72d5a5557..2ad015ed87 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "react-scripts": "^1.0.17", "react-stripe-checkout": "^2.6.3", "react-tooltip": "^3.4.0", - "recharts": "^1.0.0-beta.2", + "recharts": "^1.0.0-beta.10", "redux": "^3.7.2", "redux-responsive": "^4.3.5", "redux-thunk": "^2.2.0", From b032710ea623fddca3b3509e92a16c06b6189e66 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Sat, 21 Apr 2018 21:13:39 +0000 Subject: [PATCH 0389/1495] update more dependencies --- package-lock.json | 8671 ++++++++++++++++++++++++++++----------------- package.json | 46 +- 2 files changed, 5400 insertions(+), 3317 deletions(-) diff --git a/package-lock.json b/package-lock.json index 51ca2fdcf3..9fd6e21ad6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,260 +4,313 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@hypnosphi/fuse.js": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@hypnosphi/fuse.js/-/fuse.js-3.0.9.tgz", - "integrity": "sha1-6pn2EhtKjwZbTHH4VZXbJxRJiAc=", - "dev": true - }, "@storybook/addon-actions": { - "version": "3.2.14", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-3.2.14.tgz", - "integrity": "sha512-tVsgiVxEkygGBs9l8fVqxNAm5cs0ab05DrLcBx3rgMLYzqaadmee7hkQb/Cy0PPoiW9dLSzcZbY/ym8bU24Z3Q==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-3.4.2.tgz", + "integrity": "sha512-OeHC3KJrnfHuNoMnLLrP6zlEZ/B0q8ZmCAZe0umrmErXVQavaBrfldTR9ijdUHF1sd2Vg+0sEEWV93D/Z7PKKg==", "dev": true, "requires": { - "@storybook/addons": "3.2.14", + "@storybook/components": "3.4.2", + "babel-runtime": "6.26.0", "deep-equal": "1.0.1", - "json-stringify-safe": "5.0.1", - "prop-types": "15.6.0", - "react-inspector": "2.2.1", - "uuid": "3.1.0" + "glamor": "2.20.40", + "glamorous": "4.12.4", + "global": "4.3.2", + "make-error": "1.3.4", + "prop-types": "15.6.1", + "react-inspector": "2.3.0", + "uuid": "3.2.1" } }, "@storybook/addon-links": { - "version": "3.2.14", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-3.2.14.tgz", - "integrity": "sha512-IKCNCs245Bt+ngRypJ0TFcnh/9X9yjvDNGQwc52ioY0287taY71hM1r9tFSKTFzyEISfLFzosfH3D6xEiD5/jg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-3.4.2.tgz", + "integrity": "sha512-zgKOVMppdKw+ui5AmYc3Ohb8Ob7quoXdKLGzmpLZ5tZIz1vz8xS+phek0ldnictNWOXBWGfyZd5kgutgOSk9Uw==", "dev": true, "requires": { - "@storybook/addons": "3.2.14" + "@storybook/components": "3.4.2", + "babel-runtime": "6.26.0", + "global": "4.3.2", + "prop-types": "15.6.1" } }, "@storybook/addons": { - "version": "3.2.14", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-3.2.14.tgz", - "integrity": "sha512-DTOuK8/vuK3gPUA8HLYrfF3s+YxWmepHdm0JrbvqL0LUO/xzPZTQrpNhPm9dS96c5hTI41Bwc89/8WyQojiuAQ==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-3.4.2.tgz", + "integrity": "sha512-X2yZqMTbnuTDg1KoDerIBY3Y1woO1ScxK8gVbskLLCqQxwNTXkbGOtDSV/NATTGxN2VVMipKaWXyDsgRxkbwbw==", "dev": true }, "@storybook/channel-postmessage": { - "version": "3.2.14", - "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-3.2.14.tgz", - "integrity": "sha512-ehrJniC2pjiAMyzY3ABFskHZ7W93UqbZ8XWN3q7jkNNzpo1LXk24jJ6Lv047bat+7pcqmeuEq8OL2T5mdi0avQ==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-3.4.2.tgz", + "integrity": "sha512-Dd18ZFxc2C7fKv/Y37cYhUDluSlne7roZ2ZCeM1R6FnVJlvrNxx9iqCJgVYNXwXFU6ICxOG368BHZyE28I9k0Q==", "dev": true, "requires": { - "@storybook/channels": "3.2.14", + "@storybook/channels": "3.4.2", "global": "4.3.2", "json-stringify-safe": "5.0.1" } }, "@storybook/channels": { - "version": "3.2.14", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-3.2.14.tgz", - "integrity": "sha512-n/LhZ9sfXL0TbKbr1ZqAW0m73qoQD3IplcLrmQXmY6zZ613jtbPt0UAoM8cJCFM5TDxQAj5H+6Fb6gHzCwESWA==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-3.4.2.tgz", + "integrity": "sha512-raifocCa1pUVwtBU8Gm7wRuaCNF9FbS4vYUJ5HSO5yir4Q7MM9WAcBiO4MCcYjKH6bp0/TdehF9YugKJ1rwa6A==", + "dev": true + }, + "@storybook/client-logger": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-3.4.2.tgz", + "integrity": "sha512-o1FttrFOPLqpptfHxb1zeIw0KSlYQ4QqxZJpoqYuv/r15VMUb2+uWzU5ZnnrIbjEcWxKy1SnHjOLnYmz94oFOQ==", "dev": true }, "@storybook/components": { - "version": "3.2.14", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-3.2.14.tgz", - "integrity": "sha512-Qyi5JxLg7l2QPxgz0ZnFFDlwsbPW37Xx7aqtWcwbhNoMGuKIhkbmVl8O2u5b0QJjYkkKJoYSqqTY8RcrhG3j0Q==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-3.4.2.tgz", + "integrity": "sha512-KtbgMINfl6h/bTFyQndDVHq4plG06L5Wr9SnDaRo+ZLUloD07MMuCeTw/O6Bs3KH7tfkBXbKOgc5m5HbjIQDpg==", "dev": true, "requires": { "glamor": "2.20.40", - "glamorous": "4.11.0", - "prop-types": "15.6.0" + "glamorous": "4.12.4", + "prop-types": "15.6.1" + } + }, + "@storybook/core": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-3.4.2.tgz", + "integrity": "sha512-eN6CkeB7zxO9q5x0hDsH8gdsGQ3Kmrsd+rFAxLG7rKmHTfLKeKNTE+DOX6wBWtZGQR24Kx2wqBqKk0OsfYQGew==", + "dev": true, + "requires": { + "@storybook/addons": "3.4.2", + "@storybook/channel-postmessage": "3.4.2", + "@storybook/client-logger": "3.4.2", + "@storybook/node-logger": "3.4.2", + "@storybook/ui": "3.4.2", + "autoprefixer": "7.2.6", + "babel-runtime": "6.26.0", + "chalk": "2.4.0", + "commander": "2.15.1", + "css-loader": "0.28.11", + "dotenv": "5.0.1", + "events": "2.0.0", + "express": "4.16.3", + "file-loader": "1.1.11", + "global": "4.3.2", + "json-loader": "0.5.7", + "postcss-flexbugs-fixes": "3.3.0", + "postcss-loader": "2.1.4", + "prop-types": "15.6.1", + "qs": "6.5.1", + "serve-favicon": "2.5.0", + "shelljs": "0.8.1", + "style-loader": "0.20.3", + "url-loader": "0.6.2", + "webpack": "3.11.0", + "webpack-dev-middleware": "1.12.2", + "webpack-hot-middleware": "2.22.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + } + } + }, + "@storybook/mantra-core": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@storybook/mantra-core/-/mantra-core-1.7.2.tgz", + "integrity": "sha512-GD4OYJ8GsayVhIg306sfgcKDk9j8YfuSKIAWvdB/g7IDlw0pDgueONALVEEE2XWJtCwcsUyDtCYzXFgCBWLEjA==", + "dev": true, + "requires": { + "@storybook/react-komposer": "2.0.4", + "@storybook/react-simple-di": "1.3.0", + "babel-runtime": "6.26.0" + } + }, + "@storybook/node-logger": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-3.4.2.tgz", + "integrity": "sha512-fF4vnc9E2AVuFK2cBnMG7JNuF2h5MghLLpfDC+BJwLmzEaAv4FlI+UH1xrEtZWhgY9pzP/QFlPhHVnyPb2U+Yg==", + "dev": true, + "requires": { + "npmlog": "4.1.2" + } + }, + "@storybook/podda": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@storybook/podda/-/podda-1.2.3.tgz", + "integrity": "sha512-g7dsdsn50AhlGZ8iIDKdF8bi7Am++iFOq+QN+hNKz3FvgLuf8Dz+mpC/BFl90eE9bEYxXqXKeMf87399Ec5Qhw==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "immutable": "3.8.2" } }, "@storybook/react": { - "version": "3.2.14", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-3.2.14.tgz", - "integrity": "sha512-Cysxmp5V49AS27CCBQAzLuCa5lLN+wRQ6e3EbYsJJ+9mVMh3fdPDxa508alFn2fMdMW9b6MLYYjoqCWus/Pniw==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-3.4.2.tgz", + "integrity": "sha512-CMjDFYehY5JEwHawQH3VyMrvJj5dg09M2vmKsT82Pu4/wwa9mso+O6NWitLCKidSufUuu1+yx5D/w8fWf/Uv7w==", "dev": true, "requires": { - "@storybook/addon-actions": "3.2.14", - "@storybook/addon-links": "3.2.14", - "@storybook/addons": "3.2.14", - "@storybook/channel-postmessage": "3.2.14", - "@storybook/ui": "3.2.14", - "airbnb-js-shims": "1.3.0", - "autoprefixer": "7.1.6", - "babel-core": "6.26.0", - "babel-loader": "7.1.2", - "babel-plugin-react-docgen": "1.8.1", + "@storybook/addon-actions": "3.4.2", + "@storybook/addon-links": "3.4.2", + "@storybook/addons": "3.4.2", + "@storybook/channel-postmessage": "3.4.2", + "@storybook/client-logger": "3.4.2", + "@storybook/core": "3.4.2", + "@storybook/node-logger": "3.4.2", + "@storybook/ui": "3.4.2", + "airbnb-js-shims": "1.4.1", + "babel-loader": "7.1.4", + "babel-plugin-macros": "2.2.0", + "babel-plugin-react-docgen": "1.9.0", "babel-plugin-transform-regenerator": "6.26.0", "babel-plugin-transform-runtime": "6.23.0", "babel-preset-env": "1.6.1", - "babel-preset-minify": "0.2.0", + "babel-preset-minify": "0.3.0", "babel-preset-react": "6.24.1", - "babel-preset-react-app": "3.1.0", "babel-preset-stage-0": "6.24.1", "babel-runtime": "6.26.0", - "case-sensitive-paths-webpack-plugin": "2.1.1", - "chalk": "2.3.0", - "commander": "2.11.0", - "common-tags": "1.4.0", - "configstore": "3.1.1", - "core-js": "2.5.2", - "css-loader": "0.28.7", - "express": "4.16.2", - "file-loader": "0.11.2", + "case-sensitive-paths-webpack-plugin": "2.1.2", + "common-tags": "1.7.2", + "core-js": "2.5.5", + "dotenv-webpack": "1.5.5", "find-cache-dir": "1.0.0", "glamor": "2.20.40", - "glamorous": "4.11.0", + "glamorous": "4.12.4", "global": "4.3.2", - "json-loader": "0.5.7", - "json-stringify-safe": "5.0.1", + "html-loader": "0.5.5", + "html-webpack-plugin": "2.30.1", "json5": "0.5.1", "lodash.flattendeep": "4.4.0", - "lodash.pick": "4.4.0", - "postcss-flexbugs-fixes": "3.2.0", - "postcss-loader": "2.0.8", - "prop-types": "15.6.0", - "qs": "6.5.1", - "react-modal": "2.4.1", + "markdown-loader": "2.0.2", + "prop-types": "15.6.1", + "react-dev-utils": "5.0.1", "redux": "3.7.2", - "request": "2.83.0", - "serve-favicon": "2.4.5", - "shelljs": "0.7.8", - "style-loader": "0.18.2", - "url-loader": "0.6.2", + "uglifyjs-webpack-plugin": "1.2.5", "util-deprecate": "1.0.2", - "uuid": "3.1.0", - "webpack": "3.8.1", - "webpack-dev-middleware": "1.12.0", - "webpack-hot-middleware": "2.20.0" + "webpack": "3.11.0", + "webpack-hot-middleware": "2.22.1" }, "dependencies": { - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "configstore": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz", - "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==", - "dev": true, - "requires": { - "dot-prop": "4.2.0", - "graceful-fs": "4.1.11", - "make-dir": "1.1.0", - "unique-string": "1.0.0", - "write-file-atomic": "2.3.0", - "xdg-basedir": "3.0.0" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "1.0.1" - } - }, - "file-loader": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.11.2.tgz", - "integrity": "sha512-N+uhF3mswIFeziHQjGScJ/yHXYt3DiLBeC+9vWW+WjUBiClMSOlV1YrXQi+7KM2aA3Rn4Bybgv+uXFQbfkzpvg==", - "dev": true, - "requires": { - "loader-utils": "1.1.0" - } - }, - "style-loader": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.18.2.tgz", - "integrity": "sha512-WPpJPZGUxWYHWIUMNNOYqql7zh85zGmr84FdTVWq52WTIkqlW9xSxD3QYWi/T31cqn9UNSsietVEgGn2aaSCzw==", + "redux": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", + "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.3.0" + "lodash": "4.17.5", + "lodash-es": "4.17.8", + "loose-envify": "1.3.1", + "symbol-observable": "1.0.4" } + } + } + }, + "@storybook/react-komposer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@storybook/react-komposer/-/react-komposer-2.0.4.tgz", + "integrity": "sha1-wsDUp12bSpwMa0bxSrBQ9FitS7A=", + "dev": true, + "requires": { + "@storybook/react-stubber": "1.0.1", + "babel-runtime": "6.26.0", + "hoist-non-react-statics": "1.2.0", + "lodash.pick": "4.4.0", + "shallowequal": "0.2.2" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", + "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=", + "dev": true }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "shallowequal": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-0.2.2.tgz", + "integrity": "sha1-HjL9W8q2rWiKSBLLDMBO/HXHAU4=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" + "lodash.keys": "3.1.2" } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true } } }, - "@storybook/react-fuzzy": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@storybook/react-fuzzy/-/react-fuzzy-0.4.3.tgz", - "integrity": "sha512-TaFbDiEc/34eiAFyOjyvrh5tOqoKscyVH2BHJB15cQ8RepccX3LKIBqSNr7IUi1jmMB5aWjeefvJywPQf13ByQ==", + "@storybook/react-simple-di": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@storybook/react-simple-di/-/react-simple-di-1.3.0.tgz", + "integrity": "sha512-RH6gPQaYMs/VzQX2dgbZU8DQMKFXVOv1ruohHjjNPys4q+YdqMFMDe5jOP1AUE3j9g01x0eW7bVjRawSpl++Ew==", "dev": true, "requires": { "babel-runtime": "6.26.0", - "classnames": "2.2.5", - "fuse.js": "3.2.0", - "prop-types": "15.6.0" + "create-react-class": "15.6.3", + "hoist-non-react-statics": "1.2.0", + "prop-types": "15.6.1" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", + "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=", + "dev": true + } + } + }, + "@storybook/react-stubber": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@storybook/react-stubber/-/react-stubber-1.0.1.tgz", + "integrity": "sha512-k+CHH+vA8bQfCmzBTtJsPkITFgD+C/w19KuByZ9WeEvNUFtnDaCqfP+Vp3/OR+3IAfAXYYOWolqPLxNPcEqEjw==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" } }, "@storybook/ui": { - "version": "3.2.14", - "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-3.2.14.tgz", - "integrity": "sha512-0OErMwjq7EtDlTeBRisNcgzmUYHPi7JLW90s2M/i+cYUHRZMvz4JmYH9HwxG8U32QrekJ7l0Ki8eWWzJu6deug==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-3.4.2.tgz", + "integrity": "sha512-0gyJ3ofyejxgtars0erO2UpQ3gxzzgddaFrWLnJ9gKhwkjXIgx4+zwkMlkqoLGfQVb07oS6PIOUyOe38eLeJNg==", "dev": true, "requires": { - "@hypnosphi/fuse.js": "3.0.9", - "@storybook/components": "3.2.14", - "@storybook/react-fuzzy": "0.4.3", + "@storybook/components": "3.4.2", + "@storybook/mantra-core": "1.7.2", + "@storybook/podda": "1.2.3", + "@storybook/react-komposer": "2.0.4", "babel-runtime": "6.26.0", "deep-equal": "1.0.1", - "events": "1.1.1", + "events": "2.0.0", + "fuse.js": "3.2.0", "global": "4.3.2", - "json-stringify-safe": "5.0.1", "keycode": "2.1.9", "lodash.debounce": "4.0.8", "lodash.pick": "4.4.0", "lodash.sortby": "4.7.0", - "mantra-core": "1.7.0", - "podda": "1.2.2", - "prop-types": "15.6.0", + "lodash.throttle": "4.1.1", + "prop-types": "15.6.1", "qs": "6.5.1", + "react-fuzzy": "0.5.2", "react-icons": "2.2.7", - "react-inspector": "2.2.1", - "react-komposer": "2.0.0", - "react-modal": "2.4.1", - "react-split-pane": "0.1.68", - "react-treebeard": "2.1.0", - "redux": "3.7.2" + "react-modal": "3.4.2", + "react-split-pane": "0.1.77", + "react-treebeard": "2.1.0" } }, - "@types/inline-style-prefixer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/inline-style-prefixer/-/inline-style-prefixer-3.0.1.tgz", - "integrity": "sha512-+kbOcYW1/noncDwRryRoB9tH87IYcMfdBGvw98iocK39LtTA2DFL7agmk4UHW/GxjzVfwrxfjlLrqrgA7MCtmg==", - "dev": true - }, "@types/node": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.0.tgz", - "integrity": "sha512-h3YZbOq2+ZoDFI1z8Zx0Ck/xRWkOESVaLdgLdd/c25mMQ1Y2CAkILu9ny5A15S5f32gGcQdaUIZ2jzYr8D7IFg==", - "dev": true - }, - "@types/react": { - "version": "16.0.20", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.0.20.tgz", - "integrity": "sha512-D2pWzyDOKHIIyH75foyXake574e+auUOy1aB9aGEfXBCrl5R7p9E/EuB9ENm5eh+oZt/uXgUBg3SGZDvuNxLUg==", + "version": "9.6.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.6.tgz", + "integrity": "sha512-SJe0g5cZeGNDP5sD8mIX3scb+eq8LQQZ60FXiKZHipYSeEFZ5EKml+NNMiO76F74TY4PoMWlNxF/YRY40FOvZQ==", "dev": true }, "abab": { @@ -271,11 +324,11 @@ "integrity": "sha1-l+gw0XfVzvXjwjqsiCO6Nv6csXs=" }, "accepts": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "mime-types": "2.1.17", + "mime-types": "2.1.18", "negotiator": "0.6.1" } }, @@ -285,9 +338,9 @@ "integrity": "sha512-PbSdoHw42kt5vaXkEVSfUYCd3K1BCfAvyXW9TvR/2ATkk65oImjS1v0evHmzHhOYPSTUO8BprvmpfYT9Vp2akA==" }, "acorn": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", - "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==" + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==" }, "acorn-dynamic-import": { "version": "2.0.2", @@ -349,15 +402,17 @@ } }, "airbnb-js-shims": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/airbnb-js-shims/-/airbnb-js-shims-1.3.0.tgz", - "integrity": "sha512-Y/9jgf3uEdNyeWPUV1N49FowM/qMIiKSTkRUpYT4jpHkSADfTiRVwI8Mm6o4CIxhnBK1uMf4RIYNYKwwILMCAQ==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/airbnb-js-shims/-/airbnb-js-shims-1.4.1.tgz", + "integrity": "sha512-b7S3d+DPRMwaDAs0cgKQTMLO/JG/iSehIlzEGvt2FpxIztRDDABEjWI73AfTxkSiK3/OsraPRYxVNAX3yhSNLw==", "dev": true, "requires": { "array-includes": "3.0.3", - "es5-shim": "4.5.9", + "array.prototype.flatmap": "1.2.1", + "array.prototype.flatten": "1.2.1", + "es5-shim": "4.5.10", "es6-shim": "0.35.3", - "function.prototype.name": "1.0.3", + "function.prototype.name": "1.1.0", "object.entries": "1.0.4", "object.getownpropertydescriptors": "2.0.3", "object.values": "1.0.4", @@ -367,20 +422,22 @@ } }, "ajv": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz", - "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", + "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", + "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", + "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "json-schema-traverse": "0.3.1", + "uri-js": "3.0.2" } }, "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", + "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", + "dev": true }, "align-text": { "version": "0.1.4", @@ -403,37 +460,46 @@ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" }, "ansi-align": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz", - "integrity": "sha1-LwwWWIKXOa3V67FeawxuNCPwFro=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", "requires": { - "string-width": "1.0.2" + "string-width": "2.1.1" }, "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "number-is-nan": "1.0.1" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "ansi-regex": "3.0.0" } } } }, "ansi-escapes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", - "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==" }, "ansi-html": { "version": "0.0.7", @@ -446,19 +512,19 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "1.9.0" + "color-convert": "1.9.1" } }, "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "requires": { - "micromatch": "2.3.11", + "micromatch": "3.1.10", "normalize-path": "2.1.1" } }, @@ -470,10 +536,26 @@ "default-require-extensions": "1.0.0" } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.6" + } + }, "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { "sprintf-js": "1.0.3" } @@ -488,18 +570,20 @@ } }, "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "requires": { - "arr-flatten": "1.1.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, "array-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", @@ -522,9 +606,9 @@ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" }, "array-flatten": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", - "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "array-includes": { "version": "3.0.3", @@ -559,9 +643,61 @@ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" }, "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "array.prototype.flatmap": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.1.tgz", + "integrity": "sha512-i18e2APdsiezkcqDyZor78Pbfjfds3S94dG6dgIV2ZASJaUf1N0dz2tGdrmwrmlZuNUgxH+wz6Z0zYVH2c5xzQ==", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.11.0", + "function-bind": "1.1.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", + "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", + "dev": true, + "requires": { + "es-to-primitive": "1.1.1", + "function-bind": "1.1.1", + "has": "1.0.1", + "is-callable": "1.1.3", + "is-regex": "1.0.4" + } + } + } + }, + "array.prototype.flatten": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatten/-/array.prototype.flatten-1.2.1.tgz", + "integrity": "sha512-3GhsA78XgK//wQKbhUe6L93kknekGlTRY0kvYcpuSi0aa9rVrMr/okeIIv/XSpN8fZ5iUM+bWifhf2/7CYKtIg==", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.11.0", + "function-bind": "1.1.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", + "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", + "dev": true, + "requires": { + "es-to-primitive": "1.1.1", + "function-bind": "1.1.1", + "has": "1.0.1", + "is-callable": "1.1.3", + "is-regex": "1.0.4" + } + } + } }, "arrify": { "version": "1.0.1", @@ -579,13 +715,13 @@ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" }, "asn1.js": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", - "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "requires": { "bn.js": "4.11.8", "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "minimalistic-assert": "1.0.1" } }, "assert": { @@ -601,10 +737,15 @@ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, "ast-types": { - "version": "0.9.14", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.14.tgz", - "integrity": "sha512-Ebvx7/0lLboCdyEmAw/4GqwBeKIijPveXNiVGhCGCNxc7z26T5he7DC6ARxu8ByKuzUZZcLog+VP8GMyZrBzJw==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz", + "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==", "dev": true }, "ast-types-flow": { @@ -617,7 +758,7 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", "requires": { - "lodash": "4.17.4" + "lodash": "4.17.5" } }, "async-each": { @@ -636,16 +777,22 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "atob": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz", + "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==" + }, "autoprefixer": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.1.6.tgz", - "integrity": "sha512-C9yv/UF3X+eJTi/zvfxuyfxmLibYrntpF3qoJYrMeQwgUJOZrZvpJiMG2FMQ3qnhWtF/be4pYONBBw95ZGe3vA==", + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", + "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", + "dev": true, "requires": { - "browserslist": "2.7.0", - "caniuse-lite": "1.0.30000758", + "browserslist": "2.11.3", + "caniuse-lite": "1.0.30000830", "normalize-range": "0.1.2", "num2fraction": "1.2.2", - "postcss": "6.0.14", + "postcss": "6.0.21", "postcss-value-parser": "3.3.0" } }, @@ -655,9 +802,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" }, "axobject-query": { "version": "0.1.0", @@ -683,7 +830,7 @@ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", "requires": { "babel-code-frame": "6.26.0", - "babel-generator": "6.26.0", + "babel-generator": "6.26.1", "babel-helpers": "6.24.1", "babel-messages": "6.23.0", "babel-register": "6.26.0", @@ -692,10 +839,10 @@ "babel-traverse": "6.26.0", "babel-types": "6.26.0", "babylon": "6.18.0", - "convert-source-map": "1.5.0", + "convert-source-map": "1.5.1", "debug": "2.6.9", "json5": "0.5.1", - "lodash": "4.17.4", + "lodash": "4.17.5", "minimatch": "3.0.4", "path-is-absolute": "1.0.1", "private": "0.1.8", @@ -730,16 +877,16 @@ } }, "babel-generator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", - "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "requires": { "babel-messages": "6.23.0", "babel-runtime": "6.26.0", "babel-types": "6.26.0", "detect-indent": "4.0.0", "jsesc": "1.3.0", - "lodash": "4.17.4", + "lodash": "4.17.5", "source-map": "0.5.7", "trim-right": "1.0.1" }, @@ -801,13 +948,13 @@ "babel-helper-function-name": "6.24.1", "babel-runtime": "6.26.0", "babel-types": "6.26.0", - "lodash": "4.17.4" + "lodash": "4.17.5" } }, "babel-helper-evaluate-path": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.2.0.tgz", - "integrity": "sha512-0EK9TUKMxHL549hWDPkQoS7R0Ozg1CDLheVBHYds2B2qoAvmr9ejY3zOXFsrICK73TN7bPhU14PBeKc8jcBTwg==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.3.0.tgz", + "integrity": "sha512-dRFlMTqUJRGzx5a2smKxmptDdNCXKSkPcXWzKLwAV72hvIZumrd/0z9RcewHkr7PmAEq+ETtpD1GK6wZ6ZUXzw==", "dev": true }, "babel-helper-explode-assignable-expression": { @@ -833,9 +980,9 @@ } }, "babel-helper-flip-expressions": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.2.0.tgz", - "integrity": "sha512-rAsPA1pWBc7e2E6HepkP2e1sXugT+Oq/VCqhyuHJ8aJ2d/ifwnJfd4Qxjm21qlW43AN8tqaeByagKK6wECFMSw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.3.0.tgz", + "integrity": "sha512-kNGohWmtAG3b7tN1xocRQ5rsKkH/hpvZsMiGOJ1VwGJKhnwzR5KlB3rvKBaBPl5/IGHcopB2JN+r1SUEX1iMAw==", "dev": true }, "babel-helper-function-name": { @@ -875,15 +1022,15 @@ "dev": true }, "babel-helper-is-void-0": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.2.0.tgz", - "integrity": "sha512-Axj1AYuD0E3Dl7nT3KxROP7VekEofz3XtEljzURf3fABalLpr8PamtgLFt+zuxtaCxRf9iuZmbAMMYWri5Bazw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.3.0.tgz", + "integrity": "sha512-JVqdX8y7Rf/x4NwbqtUI7mdQjL9HWoDnoAEQ8Gv8oxzjvbJv+n75f7l36m9Y8C7sCUltX3V5edndrp7Hp1oSXQ==", "dev": true }, "babel-helper-mark-eval-scopes": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.2.0.tgz", - "integrity": "sha512-KJuwrOUcHbvbh6he4xRXZFLaivK9DF9o3CrvpWnK1Wp0B+1ANYABXBMgwrnNFIDK/AvicxQ9CNr8wsgivlp4Aw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.3.0.tgz", + "integrity": "sha512-nrho5Dg4vl0VUgURVpGpEGiwbst5JX7efIyDHFxmkCx/ocQFnrPt8ze9Kxl6TKjR29bJ7D/XKY1NMlSxOQJRbQ==", "dev": true }, "babel-helper-optimise-call-expression": { @@ -902,7 +1049,7 @@ "requires": { "babel-runtime": "6.26.0", "babel-types": "6.26.0", - "lodash": "4.17.4" + "lodash": "4.17.5" } }, "babel-helper-remap-async-to-generator": { @@ -918,9 +1065,9 @@ } }, "babel-helper-remove-or-void": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.2.0.tgz", - "integrity": "sha512-1Z41upf/XR+PwY7Nd+F15Jo5BiQi5205ZXUuKed3yoyQgDkMyoM7vAdjEJS/T+M6jy32sXjskMUgms4zeiVtRA==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.3.0.tgz", + "integrity": "sha512-D68W1M3ibCcbg0ysh3ww4/O0g10X1CXK720oOuR8kpfY7w0yP4tVcpK7zDmI1JecynycTQYAZ1rhLJo9aVtIKQ==", "dev": true }, "babel-helper-replace-supers": { @@ -937,9 +1084,9 @@ } }, "babel-helper-to-multiple-sequence-expressions": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.2.0.tgz", - "integrity": "sha512-ij9lpfdP3+Zc/7kNwa+NXbTrUlsYEWPwt/ugmQO0qflzLrveTIkbfOqQztvitk81aG5NblYDQXDlRohzu3oa8Q==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.3.0.tgz", + "integrity": "sha512-1uCrBD+EAaMnAYh7hc944n8Ga19y3daEnoXWPYDvFVsxMCc1l8aDjksApaCEaNSSuewq8BEcff47Cy1PbLg2Gw==", "dev": true }, "babel-helpers": { @@ -957,14 +1104,15 @@ "integrity": "sha1-5KA7E9wQOJ4UD8ZF0J/8TO0wFnE=", "requires": { "babel-core": "6.26.0", - "babel-plugin-istanbul": "4.1.5", + "babel-plugin-istanbul": "4.1.6", "babel-preset-jest": "20.0.3" } }, "babel-loader": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz", - "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.4.tgz", + "integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==", + "dev": true, "requires": { "find-cache-dir": "1.0.0", "loader-utils": "1.1.0", @@ -998,13 +1146,14 @@ } }, "babel-plugin-istanbul": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz", - "integrity": "sha1-Z2DN2Xf0EdPhdbsGTyvDJ9mbK24=", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", + "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", "find-up": "2.1.0", - "istanbul-lib-instrument": "1.9.1", - "test-exclude": "4.1.1" + "istanbul-lib-instrument": "1.10.1", + "test-exclude": "4.2.1" } }, "babel-plugin-jest-hoist": { @@ -1012,110 +1161,165 @@ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz", "integrity": "sha1-r+3IU70/jcNUjqZx++adA8wsF2c=" }, - "babel-plugin-minify-builtins": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.2.0.tgz", - "integrity": "sha512-4i+8ntaS8gwVUcOz5y+zE+55OVOl2nTbmHV51D4wAIiKcRI8U5K//ip1GHfhsgk/NJrrHK7h97Oy5jpqt0Iixg==", + "babel-plugin-macros": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.2.0.tgz", + "integrity": "sha512-HGdenPU9+WGhg++P65O+6aIdmXx99p58K7VtAtizC3eUHbO4FXfyfK9SCJubylcyKziEB3nMAUDFHeyDUj38eA==", "dev": true, "requires": { - "babel-helper-evaluate-path": "0.2.0" - } - }, + "cosmiconfig": "4.0.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", + "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", + "dev": true, + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.11.0", + "parse-json": "4.0.0", + "require-from-string": "2.0.2" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "js-yaml": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "4.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "1.3.1", + "json-parse-better-errors": "1.0.2" + } + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + } + } + }, + "babel-plugin-minify-builtins": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.3.0.tgz", + "integrity": "sha512-MqhSHlxkmgURqj3144qPksbZ/qof1JWdumcbucc4tysFcf3P3V3z3munTevQgKEFNMd8F5/ECGnwb63xogLjAg==", + "dev": true, + "requires": { + "babel-helper-evaluate-path": "0.3.0" + } + }, "babel-plugin-minify-constant-folding": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.2.0.tgz", - "integrity": "sha512-B3ffQBEUQ8ydlIkYv2MkZtTCbV7FAkWAV7NkyhcXlGpD10PaCxNGQ/B9oguXGowR1m16Q5nGhvNn8Pkn1MO6Hw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.3.0.tgz", + "integrity": "sha512-1XeRpx+aY1BuNY6QU/cm6P+FtEi3ar3XceYbmC+4q4W+2Ewq5pL7V68oHg1hKXkBIE0Z4/FjSoHz6vosZLOe/A==", "dev": true, "requires": { - "babel-helper-evaluate-path": "0.2.0" + "babel-helper-evaluate-path": "0.3.0" } }, "babel-plugin-minify-dead-code-elimination": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.2.0.tgz", - "integrity": "sha512-zE7y3pRyzA4zK5nBou0kTcwUTSQ/AiFrynt1cIEYN7vcO2gS9ZFZoI0aO9JYLUdct5fsC1vfB35408yrzTyVfg==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.3.0.tgz", + "integrity": "sha512-SjM2Fzg85YZz+q/PNJ/HU4O3W98FKFOiP9K5z3sfonlamGOzvZw3Eup2OTiEBsbbqTeY8yzNCAv3qpJRYCgGmw==", "dev": true, "requires": { - "babel-helper-evaluate-path": "0.2.0", - "babel-helper-mark-eval-scopes": "0.2.0", - "babel-helper-remove-or-void": "0.2.0", + "babel-helper-evaluate-path": "0.3.0", + "babel-helper-mark-eval-scopes": "0.3.0", + "babel-helper-remove-or-void": "0.3.0", "lodash.some": "4.6.0" } }, "babel-plugin-minify-flip-comparisons": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.2.0.tgz", - "integrity": "sha512-QOqXSEmD/LhT3LpM1WCyzAGcQZYYKJF7oOHvS6QbpomHenydrV53DMdPX2mK01icBExKZcJAHF209wvDBa+CSg==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.3.0.tgz", + "integrity": "sha512-B8lK+ekcpSNVH7PZpWDe5nC5zxjRiiT4nTsa6h3QkF3Kk6y9qooIFLemdGlqBq6j0zALEnebvCpw8v7gAdpgnw==", "dev": true, "requires": { - "babel-helper-is-void-0": "0.2.0" + "babel-helper-is-void-0": "0.3.0" } }, "babel-plugin-minify-guarded-expressions": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.2.0.tgz", - "integrity": "sha512-5+NSPdRQ9mnrHaA+zFj+D5OzmSiv90EX5zGH6cWQgR/OUqmCHSDqgTRPFvOctgpo8MJyO7Rt7ajs2UfLnlAwYg==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.3.0.tgz", + "integrity": "sha512-O+6CvF5/Ttsth3LMg4/BhyvVZ82GImeKMXGdVRQGK/8jFiP15EjRpdgFlxv3cnqRjqdYxLCS6r28VfLpb9C/kA==", "dev": true, "requires": { - "babel-helper-flip-expressions": "0.2.0" + "babel-helper-flip-expressions": "0.3.0" } }, "babel-plugin-minify-infinity": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.2.0.tgz", - "integrity": "sha512-U694vrla1lN6vDHWGrR832t3a/A2eh+kyl019LxEE2+sS4VTydyOPRsAOIYAdJegWRA4cMX1lm9azAN0cLIr8g==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.3.0.tgz", + "integrity": "sha512-Sj8ia3/w9158DWieUxU6/VvnYVy59geeFEkVgLZYBE8EBP+sN48tHtBM/jSgz0ejEdBlcfqJ6TnvPmVXTzR2BQ==", "dev": true }, "babel-plugin-minify-mangle-names": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.2.0.tgz", - "integrity": "sha512-Gixuak1/CO7VCdjn15/8Bxe/QsAtDG4zPbnsNoe1mIJGCIH/kcmSjFhMlGJtXDQZd6EKzeMfA5WmX9+jvGRefw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.3.0.tgz", + "integrity": "sha512-PYTonhFWURsfAN8achDwvR5Xgy6EeTClLz+fSgGRqjAIXb0OyFm3/xfccbQviVi1qDXmlSnt6oJhBg8KE4Fn7Q==", "dev": true, "requires": { - "babel-helper-mark-eval-scopes": "0.2.0" + "babel-helper-mark-eval-scopes": "0.3.0" } }, "babel-plugin-minify-numeric-literals": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.2.0.tgz", - "integrity": "sha512-VcLpb+r1YS7+RIOXdRsFVLLqoh22177USpHf+JM/g1nZbzdqENmfd5v534MLAbRErhbz6SyK+NQViVzVtBxu8g==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.3.0.tgz", + "integrity": "sha512-TgZj6ay8zDw74AS3yiIfoQ8vRSNJisYO/Du60S8nPV7EW7JM6fDMx5Sar6yVHlVuuwNgvDUBh191K33bVrAhpg==", "dev": true }, "babel-plugin-minify-replace": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.2.0.tgz", - "integrity": "sha512-SEW6zoSVxh3OH6E1LCgyhhTWMnCv+JIRu5h5IlJDA11tU4ZeSF7uPQcO4vN/o52+FssRB26dmzJ/8D+z0QPg5Q==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.3.0.tgz", + "integrity": "sha512-VR6tTg2Lt0TicHIOw04fsUtpPw7RaRP8PC8YzSFwEixnzvguZjZJoL7TgG7ZyEWQD1cJ96UezswECmFNa815bg==", "dev": true }, "babel-plugin-minify-simplify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.2.0.tgz", - "integrity": "sha512-Mj3Mwy2zVosMfXDWXZrQH5/uMAyfJdmDQ1NVqit+ArbHC3LlXVzptuyC1JxTyai/wgFvjLaichm/7vSUshkWqw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.3.0.tgz", + "integrity": "sha512-2M16ytQOCqBi7bYMu4DCWn8e6KyFCA108F6+tVrBJxOmm5u2sOmTFEa8s94tR9RHRRNYmcUf+rgidfnzL3ik9Q==", "dev": true, "requires": { - "babel-helper-flip-expressions": "0.2.0", + "babel-helper-flip-expressions": "0.3.0", "babel-helper-is-nodes-equiv": "0.0.1", - "babel-helper-to-multiple-sequence-expressions": "0.2.0" + "babel-helper-to-multiple-sequence-expressions": "0.3.0" } }, "babel-plugin-minify-type-constructors": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.2.0.tgz", - "integrity": "sha512-NiOvvA9Pq6bki6nP4BayXwT5GZadw7DJFDDzHmkpnOQpENWe8RtHtKZM44MG1R6EQ5XxgbLdsdhswIzTkFlO5g==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.3.0.tgz", + "integrity": "sha512-XRXpvsUCPeVw9YEUw+9vSiugcSZfow81oIJT0yR9s8H4W7yJ6FHbImi5DJHoL8KcDUjYnL9wYASXk/fOkbyR6Q==", "dev": true, "requires": { - "babel-helper-is-void-0": "0.2.0" + "babel-helper-is-void-0": "0.3.0" } }, "babel-plugin-react-docgen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-1.8.1.tgz", - "integrity": "sha512-11Yxwk8/iEULr+n5DG0BxXD6j/9htpiiR0/hLfi/gtEAK/d6NCNkyKFrC8loQcyMvF3hehPo30SKXG/itSX+hw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-1.9.0.tgz", + "integrity": "sha512-8lQ73p4BL+xcgba03NTiHrddl2X8J6PDMQHPpz73sesrRBf6JtAscQPLIjFWQR/abLokdv81HdshpjYGppOXgA==", "dev": true, "requires": { "babel-types": "6.26.0", - "lodash": "4.17.4", - "react-docgen": "2.19.0" + "lodash": "4.17.5", + "react-docgen": "3.0.0-beta9" } }, "babel-plugin-syntax-async-functions": { @@ -1285,7 +1489,7 @@ "babel-template": "6.26.0", "babel-traverse": "6.26.0", "babel-types": "6.26.0", - "lodash": "4.17.4" + "lodash": "4.17.5" } }, "babel-plugin-transform-es2015-classes": { @@ -1512,27 +1716,27 @@ } }, "babel-plugin-transform-inline-consecutive-adds": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.2.0.tgz", - "integrity": "sha512-GlhOuLOQ28ua9prg0hT33HslCrEmz9xWXy9ZNZSACppCyRxxRW+haYtRgm7uYXCcd0q8ggCWD2pfWEJp5iiZfQ==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.3.0.tgz", + "integrity": "sha512-iZsYAIjYLLfLK0yN5WVT7Xf7Y3wQ9Z75j9A8q/0IglQSpUt2ppTdHlwl/GeaXnxdaSmsxBu861klbTBbv2n+RA==", "dev": true }, "babel-plugin-transform-member-expression-literals": { - "version": "6.8.5", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.8.5.tgz", - "integrity": "sha512-Ux3ligf+ukzWaCbBYOstDuFBhRgMiJHlpJBKV4P47qtzVkd0lg1ddPj9fqIJqAM0n+CvxipyrZrnNnw3CdtQCg==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.1.tgz", + "integrity": "sha1-lr4umWjn9UlzM64DKE7NU0BAVIk=", "dev": true }, "babel-plugin-transform-merge-sibling-variables": { - "version": "6.8.6", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.8.6.tgz", - "integrity": "sha512-o5Jioq553HtEAUN5uty7ELJMenXIxHI3PIs1yLqYWYQwP6mg6IPVAJ+U7i4zr9XGF/kb2RGsdehglGTV+vngqA==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.1.tgz", + "integrity": "sha1-kHHkQ7IUWM5rCo04QbpaF09dwoI=", "dev": true }, "babel-plugin-transform-minify-booleans": { - "version": "6.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.8.3.tgz", - "integrity": "sha512-bPbUhkeN2Nc0KH0/A19GwQGj8w+CvdJzyu8t59VoEDgsNMQ9Bopzi5DrVkrSsVjbYUaZpzq/DYLrH+wD5K2Tig==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.1.tgz", + "integrity": "sha1-UsunnAD6UJc3BkBV76siFm4UDE0=", "dev": true }, "babel-plugin-transform-object-rest-spread": { @@ -1545,9 +1749,9 @@ } }, "babel-plugin-transform-property-literals": { - "version": "6.8.5", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.8.5.tgz", - "integrity": "sha512-MmiQsQ5AcIaRZMJD0zY5C4H3xuHm06/nWgtOsz7AXV44VEIXIlPiJ39IFYJ4Qx67/fEm8zJAedzR8t+B7d10Bg==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.1.tgz", + "integrity": "sha1-aXD5Oxd5OrzenPJdLozRPgCI5ck=", "dev": true, "requires": { "esutils": "2.0.2" @@ -1606,30 +1810,30 @@ } }, "babel-plugin-transform-regexp-constructors": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.2.0.tgz", - "integrity": "sha512-7IsQ6aQx6LAaOqy97/PthTf+5Nx9grZww3r6E62IdWe76Yr8KsuwVjxzqSPQvESJqTE3EMADQ9S0RtwWDGNG9Q==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.3.0.tgz", + "integrity": "sha512-h92YHzyl042rb0naKO8frTHntpRFwRgKkfWD8602kFHoQingjJNtbvZzvxqHncJ6XmKVyYvfrBpDOSkCTDIIxw==", "dev": true }, "babel-plugin-transform-remove-console": { - "version": "6.8.5", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.8.5.tgz", - "integrity": "sha512-uuCKvtweCyIvvC8fi92EcWRtO2Kt5KMNMRK6BhpDXdeb3sxvGM7453RSmgeu4DlKns3OlvY9Ep5Q9m5a7RQAgg==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.1.tgz", + "integrity": "sha1-QP6V2YyuWBHYoOGImBLXixKFllE=", "dev": true }, "babel-plugin-transform-remove-debugger": { - "version": "6.8.5", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.8.5.tgz", - "integrity": "sha512-InDQDdHPOLJKM+G6oXrEesf+P29QFBmcTXID+TAvZziVz+38xe2VO/Bn3FcRcRtnOOycbgsJkUNp9jIK+ist6g==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.1.tgz", + "integrity": "sha1-dlUtLp1sQ9nGdrv8CPPCoswUvhQ=", "dev": true }, "babel-plugin-transform-remove-undefined": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.2.0.tgz", - "integrity": "sha512-O8v57tPMHkp89kA4ZfQEYds/pzgvz/QYerBJjIuL5/Jc7RnvMVRA5gJY9zFKP7WayW8WOSBV4vh8Y8FJRio+ow==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.3.0.tgz", + "integrity": "sha512-TYGQucc8iP3LJwN3kDZLEz5aa/2KuFrqpT+s8f8NnHsBU1sAgR3y8Opns0xhC+smyDYWscqFCKM1gbkWQOhhnw==", "dev": true, "requires": { - "babel-helper-evaluate-path": "0.2.0" + "babel-helper-evaluate-path": "0.3.0" } }, "babel-plugin-transform-runtime": { @@ -1641,9 +1845,9 @@ } }, "babel-plugin-transform-simplify-comparison-operators": { - "version": "6.8.5", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.8.5.tgz", - "integrity": "sha512-B3HlBZb+Uq86nRj5yNPO6pJ3noEdqHvzYkEYoUWtrsWTv48ZIRatYlumoOiif/v8llF13YjYjx9zhyznDx+N9g==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.1.tgz", + "integrity": "sha1-Ww0GmAoXp4D1MYsnTAC+L7HHxP4=", "dev": true }, "babel-plugin-transform-strict-mode": { @@ -1656,9 +1860,9 @@ } }, "babel-plugin-transform-undefined-to-void": { - "version": "6.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.8.3.tgz", - "integrity": "sha512-goYwp8dMrzHD6x9GjZ2M85Mk2vxf1h85CnUgAjfftUnlJvzF4uj5MrbReHBTbjQ96C8CuRzvhYZ3tv8H3Sc1ZA==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.1.tgz", + "integrity": "sha1-19+cHdDsEuD/6JXtFEX2Hxv14iE=", "dev": true }, "babel-preset-env": { @@ -1693,9 +1897,9 @@ "babel-plugin-transform-es2015-unicode-regex": "6.24.1", "babel-plugin-transform-exponentiation-operator": "6.24.1", "babel-plugin-transform-regenerator": "6.26.0", - "browserslist": "2.7.0", + "browserslist": "2.11.3", "invariant": "2.2.2", - "semver": "5.4.1" + "semver": "5.5.0" } }, "babel-preset-es2015": { @@ -1747,33 +1951,33 @@ } }, "babel-preset-minify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.2.0.tgz", - "integrity": "sha512-mR8Q44RmMzm18bM2Lqd9uiPopzk5GDCtVuquNbLFmX6lOKnqWoenaNBxnWW0UhBFC75lEHTIgNGCbnsRI0pJVw==", - "dev": true, - "requires": { - "babel-plugin-minify-builtins": "0.2.0", - "babel-plugin-minify-constant-folding": "0.2.0", - "babel-plugin-minify-dead-code-elimination": "0.2.0", - "babel-plugin-minify-flip-comparisons": "0.2.0", - "babel-plugin-minify-guarded-expressions": "0.2.0", - "babel-plugin-minify-infinity": "0.2.0", - "babel-plugin-minify-mangle-names": "0.2.0", - "babel-plugin-minify-numeric-literals": "0.2.0", - "babel-plugin-minify-replace": "0.2.0", - "babel-plugin-minify-simplify": "0.2.0", - "babel-plugin-minify-type-constructors": "0.2.0", - "babel-plugin-transform-inline-consecutive-adds": "0.2.0", - "babel-plugin-transform-member-expression-literals": "6.8.5", - "babel-plugin-transform-merge-sibling-variables": "6.8.6", - "babel-plugin-transform-minify-booleans": "6.8.3", - "babel-plugin-transform-property-literals": "6.8.5", - "babel-plugin-transform-regexp-constructors": "0.2.0", - "babel-plugin-transform-remove-console": "6.8.5", - "babel-plugin-transform-remove-debugger": "6.8.5", - "babel-plugin-transform-remove-undefined": "0.2.0", - "babel-plugin-transform-simplify-comparison-operators": "6.8.5", - "babel-plugin-transform-undefined-to-void": "6.8.3", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.3.0.tgz", + "integrity": "sha512-+VV2GWEyak3eDOmzT1DDMuqHrw3VbE9nBNkx2LLVs4pH/Me32ND8DRpVDd8IRvk1xX5p75nygyRPtkMh6GIAbQ==", + "dev": true, + "requires": { + "babel-plugin-minify-builtins": "0.3.0", + "babel-plugin-minify-constant-folding": "0.3.0", + "babel-plugin-minify-dead-code-elimination": "0.3.0", + "babel-plugin-minify-flip-comparisons": "0.3.0", + "babel-plugin-minify-guarded-expressions": "0.3.0", + "babel-plugin-minify-infinity": "0.3.0", + "babel-plugin-minify-mangle-names": "0.3.0", + "babel-plugin-minify-numeric-literals": "0.3.0", + "babel-plugin-minify-replace": "0.3.0", + "babel-plugin-minify-simplify": "0.3.0", + "babel-plugin-minify-type-constructors": "0.3.0", + "babel-plugin-transform-inline-consecutive-adds": "0.3.0", + "babel-plugin-transform-member-expression-literals": "6.9.1", + "babel-plugin-transform-merge-sibling-variables": "6.9.1", + "babel-plugin-transform-minify-booleans": "6.9.1", + "babel-plugin-transform-property-literals": "6.9.1", + "babel-plugin-transform-regexp-constructors": "0.3.0", + "babel-plugin-transform-remove-console": "6.9.1", + "babel-plugin-transform-remove-debugger": "6.9.1", + "babel-plugin-transform-remove-undefined": "0.3.0", + "babel-plugin-transform-simplify-comparison-operators": "6.9.1", + "babel-plugin-transform-undefined-to-void": "6.9.1", "lodash.isplainobject": "4.0.6" } }, @@ -1791,13 +1995,14 @@ } }, "babel-preset-react-app": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-3.1.0.tgz", - "integrity": "sha512-jEAeVozxLzftLl0iDZ0d5jrmfbo3yogON/eI4AsEDIs8p6WW+t9mDRUsj5l12bqPOLSiVOElCQ3QyGjMcyBiwA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-3.1.1.tgz", + "integrity": "sha512-9fRHopNaGL5ScRZdPSoyxRaABKmkS2fx0HUJ5Yphan5G8QDFD7lETsPyY7El6b7YPT3sNrw9gfrWzl4/LsJcfA==", "requires": { "babel-plugin-dynamic-import-node": "1.1.0", "babel-plugin-syntax-dynamic-import": "6.18.0", "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", "babel-plugin-transform-object-rest-spread": "6.26.0", "babel-plugin-transform-react-constant-elements": "6.23.0", "babel-plugin-transform-react-jsx": "6.24.1", @@ -1863,9 +2068,9 @@ "requires": { "babel-core": "6.26.0", "babel-runtime": "6.26.0", - "core-js": "2.5.2", + "core-js": "2.5.5", "home-or-tmp": "2.0.0", - "lodash": "4.17.4", + "lodash": "4.17.5", "mkdirp": "0.5.1", "source-map-support": "0.4.18" } @@ -1875,7 +2080,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.2", + "core-js": "2.5.5", "regenerator-runtime": "0.11.0" } }, @@ -1888,7 +2093,7 @@ "babel-traverse": "6.26.0", "babel-types": "6.26.0", "babylon": "6.18.0", - "lodash": "4.17.4" + "lodash": "4.17.5" } }, "babel-traverse": { @@ -1904,7 +2109,7 @@ "debug": "2.6.9", "globals": "9.18.0", "invariant": "2.2.2", - "lodash": "4.17.4" + "lodash": "4.17.5" }, "dependencies": { "debug": { @@ -1924,7 +2129,7 @@ "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", - "lodash": "4.17.4", + "lodash": "4.17.5", "to-fast-properties": "1.0.3" } }, @@ -1934,19 +2139,74 @@ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, "bail": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.2.tgz", - "integrity": "sha1-99bBcxYwqfnw1NNe0fli4gdKF2Q=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz", + "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==" }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" }, "batch": { "version": "0.6.1", @@ -1968,9 +2228,9 @@ "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" }, "binary-extensions": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", - "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=" }, "bluebird": { "version": "3.5.1", @@ -1990,13 +2250,13 @@ "bytes": "3.0.0", "content-type": "1.0.4", "debug": "2.6.9", - "depd": "1.1.1", - "http-errors": "1.6.2", + "depd": "1.1.2", + "http-errors": "1.6.3", "iconv-lite": "0.4.19", "on-finished": "2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", - "type-is": "1.6.15" + "type-is": "1.6.16" }, "dependencies": { "debug": { @@ -2018,8 +2278,15 @@ "deep-equal": "1.0.1", "dns-equal": "1.0.0", "dns-txt": "2.0.2", - "multicast-dns": "6.1.1", + "multicast-dns": "6.2.3", "multicast-dns-service-types": "1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", + "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=" + } } }, "boolbase": { @@ -2032,7 +2299,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "requires": { - "hoek": "4.2.0" + "hoek": "4.2.1" } }, "bowser": { @@ -2041,63 +2308,97 @@ "integrity": "sha512-NMPaR8ILtdLSWzxQtEs16XbxMcY8ohWGQ5V+TZSJS3fNUt/PBAGkF6YWO9B/4qWE23bK3o0moQKq8UyFEosYkA==" }, "boxen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-0.6.0.tgz", - "integrity": "sha1-g2TUJIrDT/DvGy8r9JpsYM4NgbY=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", "requires": { - "ansi-align": "1.1.0", - "camelcase": "2.1.1", - "chalk": "1.1.3", + "ansi-align": "2.0.0", + "camelcase": "4.1.0", + "chalk": "2.4.0", "cli-boxes": "1.0.0", - "filled-array": "1.1.0", - "object-assign": "4.1.1", - "repeating": "2.0.1", - "string-width": "1.0.2", - "widest-line": "1.0.0" + "string-width": "2.1.1", + "term-size": "1.2.0", + "widest-line": "2.0.0" }, "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "chalk": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { - "number-is-nan": "1.0.1" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" } }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" } } } }, "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } } }, "brcast": { @@ -2127,32 +2428,32 @@ } }, "browserify-aes": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", - "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "requires": { "buffer-xor": "1.0.3", "cipher-base": "1.0.4", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "evp_bytestokey": "1.0.3", "inherits": "2.0.3", "safe-buffer": "5.1.1" } }, "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "requires": { - "browserify-aes": "1.1.1", - "browserify-des": "1.0.0", + "browserify-aes": "1.2.0", + "browserify-des": "1.0.1", "evp_bytestokey": "1.0.3" } }, "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", + "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", "requires": { "cipher-base": "1.0.4", "des.js": "1.0.0", @@ -2165,7 +2466,7 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "requires": { "bn.js": "4.11.8", - "randombytes": "2.0.5" + "randombytes": "2.0.6" } }, "browserify-sign": { @@ -2175,28 +2476,28 @@ "requires": { "bn.js": "4.11.8", "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", "elliptic": "6.4.0", "inherits": "2.0.3", - "parse-asn1": "5.1.0" + "parse-asn1": "5.1.1" } }, "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "requires": { - "pako": "0.2.9" + "pako": "1.0.6" } }, "browserslist": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.7.0.tgz", - "integrity": "sha512-s34mrlczJsfbJu//mz/m9zlOy/S6tiP6El1u8iC1gTfEnzKXvxo8RAoCxS/MmojB7rd7bnfYzvKQNHykWaUWWw==", + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", + "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", "requires": { - "caniuse-lite": "1.0.30000758", - "electron-to-chromium": "1.3.27" + "caniuse-lite": "1.0.30000830", + "electron-to-chromium": "1.3.42" } }, "bser": { @@ -2212,8 +2513,8 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8", + "base64-js": "1.3.0", + "ieee754": "1.1.11", "isarray": "1.0.0" }, "dependencies": { @@ -2224,6 +2525,11 @@ } } }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==" + }, "buffer-indexof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", @@ -2249,6 +2555,51 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "chownr": "1.0.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.2", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.2", + "ssri": "5.3.0", + "unique-filename": "1.1.0", + "y18n": "4.0.0" + }, + "dependencies": { + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + } + }, "caller-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", @@ -2298,7 +2649,7 @@ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000758", + "caniuse-db": "1.0.30000830", "lodash.memoize": "4.1.2", "lodash.uniq": "4.5.0" }, @@ -2308,21 +2659,21 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "requires": { - "caniuse-db": "1.0.30000758", - "electron-to-chromium": "1.3.27" + "caniuse-db": "1.0.30000830", + "electron-to-chromium": "1.3.42" } } } }, "caniuse-db": { - "version": "1.0.30000758", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000758.tgz", - "integrity": "sha1-ojViexki6Hi2MWSULJkbhN6SyBA=" + "version": "1.0.30000830", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000830.tgz", + "integrity": "sha1-bkUlWzRWSf0V/1kHLaHhK7PeLxM=" }, "caniuse-lite": { - "version": "1.0.30000758", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000758.tgz", - "integrity": "sha1-4mEUAHZlEEnPaJHtS8ZJtcjCbGk=" + "version": "1.0.30000830", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000830.tgz", + "integrity": "sha512-yMqGkujkoOIZfvOYiWdqPALgY/PVGiqCHUJb6yNq7xhI/pR+gQO0U2K6lRDqAiJv4+CIU3CtTLblNGw0QGnr6g==" }, "capture-stack-trace": { "version": "1.0.0", @@ -2330,9 +2681,10 @@ "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" }, "case-sensitive-paths-webpack-plugin": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.1.tgz", - "integrity": "sha1-PSnO2MHxJL9vU4Rvs/WJRzH9yQk=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.2.tgz", + "integrity": "sha512-oEZgAFfEvKtjSRCu6VgYkuGxwrWXMnQzyBmlLPP7r6PWQVtHxP5Z5N6XsuJvtoVax78am/r7lr46bwo3IVEBOg==", + "dev": true }, "caseless": { "version": "0.12.0", @@ -2383,19 +2735,24 @@ "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=" }, "character-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.1.tgz", - "integrity": "sha1-92hxvl72bdt/j440eOzDdMJ9bco=" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz", + "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==" }, "character-entities-legacy": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.1.tgz", - "integrity": "sha1-9Ad53xoQGHK7UQo9KV4fzPFHIC8=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz", + "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==" }, "character-reference-invalid": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz", - "integrity": "sha1-lCg191Dk7GGjCOYMLvjMEBEgLvw=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz", + "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==" + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" }, "cheerio": { "version": "1.0.0-rc.2", @@ -2407,7 +2764,7 @@ "dom-serializer": "0.1.0", "entities": "1.1.1", "htmlparser2": "3.9.2", - "lodash": "4.17.4", + "lodash": "4.17.5", "parse5": "3.0.3" }, "dependencies": { @@ -2431,7 +2788,7 @@ "domutils": "1.5.1", "entities": "1.1.1", "inherits": "2.0.3", - "readable-stream": "2.3.3" + "readable-stream": "2.3.6" } }, "parse5": { @@ -2440,37 +2797,39 @@ "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", "dev": true, "requires": { - "@types/node": "9.6.0" + "@types/node": "9.6.6" } } } }, "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", + "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", "requires": { - "anymatch": "1.3.2", + "anymatch": "2.0.0", "async-each": "1.0.1", + "braces": "2.3.2", "fsevents": "1.2.0", - "glob-parent": "2.0.0", + "glob-parent": "3.1.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", - "is-glob": "2.0.1", + "is-glob": "4.0.0", + "normalize-path": "2.1.1", "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "readdirp": "2.1.0", + "upath": "1.0.4" } }, "chownr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", - "optional": true + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" }, "ci-info": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.1.tgz", - "integrity": "sha512-vHDDF/bP9RYpTWtUhpJRhCFdvvp3iDWvEbuDbWgvjUrNGV1MXJrE0MPcwGtEled04m61iwdBLUIHZtDgzWS4ZQ==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", + "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==" }, "cipher-base": { "version": "1.0.4", @@ -2494,15 +2853,36 @@ "chalk": "1.1.3" } }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, "classnames": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=" }, "clean-css": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz", - "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", + "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", "requires": { "source-map": "0.5.7" }, @@ -2548,19 +2928,12 @@ "center-align": "0.1.3", "right-align": "0.1.3", "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" - } } }, "clone": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" }, "co": { "version": "4.6.0", @@ -2581,24 +2954,33 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "collapse-white-space": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.3.tgz", - "integrity": "sha1-S5BvZw5aljqHt2sOFolkM0G2Ajw=" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz", + "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } }, "color": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "requires": { - "clone": "1.0.2", - "color-convert": "1.9.0", + "clone": "1.0.4", + "color-convert": "1.9.1", "color-string": "0.3.0" } }, "color-convert": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", - "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "requires": { "color-name": "1.1.3" } @@ -2632,9 +3014,9 @@ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" }, "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { "delayed-stream": "1.0.0" } @@ -2645,9 +3027,9 @@ "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" }, "common-tags": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.4.0.tgz", - "integrity": "sha1-EYe+Tz1M8MBCfUP3Tu8fc1AWFMA=", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.7.2.tgz", + "integrity": "sha512-joj9ZlUOjCrwdbmiLqafeUSgkUM74NqhLsZtSqDmhKudaIY197zTrb8JMl31fMnCUuxwFT23eC/oWvrZzDLRJQ==", "dev": true, "requires": { "babel-runtime": "6.26.0" @@ -2658,22 +3040,32 @@ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, + "compare-versions": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.1.0.tgz", + "integrity": "sha512-4hAxDSBypT/yp2ySFD346So6Ragw5xmBn/e/agIGl3bZr6DLUqnoRZPusxKrXdYRZpgexO9daejmIenlq/wrIQ==" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, "compressible": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz", - "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz", + "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=", "requires": { - "mime-db": "1.30.0" + "mime-db": "1.33.0" } }, "compression": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz", - "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=", + "version": "1.7.2", + "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", + "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", "requires": { - "accepts": "1.3.4", + "accepts": "1.3.5", "bytes": "3.0.0", - "compressible": "2.0.12", + "compressible": "2.0.13", "debug": "2.6.9", "on-headers": "1.0.1", "safe-buffer": "5.1.1", @@ -2696,42 +3088,33 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "requires": { + "buffer-from": "1.0.0", "inherits": "2.0.3", - "readable-stream": "2.3.3", + "readable-stream": "2.3.6", "typedarray": "0.0.6" } }, "configstore": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", - "integrity": "sha1-c3o6cDbpiGECqmCZ5HuzOrGroaE=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", "requires": { - "dot-prop": "3.0.0", + "dot-prop": "4.2.0", "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "os-tmpdir": "1.0.2", - "osenv": "0.1.4", - "uuid": "2.0.3", - "write-file-atomic": "1.3.4", - "xdg-basedir": "2.0.0" - }, - "dependencies": { - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" - } + "make-dir": "1.2.0", + "unique-string": "1.0.0", + "write-file-atomic": "2.3.0", + "xdg-basedir": "3.0.0" } }, "connect-history-api-fallback": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.4.0.tgz", - "integrity": "sha1-PbJPlz9LkjsOgvYZzg3wJBHKYj0=" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=" }, "console-browserify": { "version": "1.1.0", @@ -2741,6 +3124,12 @@ "date-now": "0.1.4" } }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -2767,9 +3156,9 @@ "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==" }, "convert-source-map": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", - "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=" }, "cookie": { "version": "0.3.1", @@ -2781,13 +3170,32 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "core-js": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.2.tgz", - "integrity": "sha1-vEZIZW59ydyA19PHu8Fy2W50TmM=" - }, - "core-util-is": { - "version": "1.0.2", + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-js": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz", + "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=" + }, + "core-util-is": { + "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, @@ -2813,9 +3221,9 @@ } }, "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.1.tgz", + "integrity": "sha512-iZvCCg8XqHQZ1ioNBTzXS/cQSkqkqcPs8xSX4upNB+DAk9Ht3uzQf2J32uAHNCne8LDmKr29AgZrEs4oIrwLuQ==", "requires": { "bn.js": "4.11.8", "elliptic": "6.4.0" @@ -2830,37 +3238,49 @@ } }, "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "requires": { "cipher-base": "1.0.4", "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.9" + "md5.js": "1.3.4", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" } }, "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "requires": { "cipher-base": "1.0.4", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "inherits": "2.0.3", - "ripemd160": "2.0.1", + "ripemd160": "2.0.2", "safe-buffer": "5.1.1", - "sha.js": "2.4.9" + "sha.js": "2.4.11" + } + }, + "create-react-class": { + "version": "15.6.3", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", + "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", + "dev": true, + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" } }, "cross-env": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.1.1.tgz", - "integrity": "sha512-Wtvr+z0Z06KO1JxjfRRsPC+df7biIOiuV4iZ73cThjFGkH+ULBZq1MkBdywEcJC4cTDbO6c8IjgRjfswx3YTBA==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.1.4.tgz", + "integrity": "sha512-Mx8mw6JWhfpYoEk7PGvHxJMLQwQHORAs8+2bX+C1lGQ4h3GkDb1zbzC2Nw85YH9ZQMlO0BHZxMacgrfPmMFxbg==", "dev": true, "requires": { "cross-spawn": "5.1.0", - "is-windows": "1.0.1" + "is-windows": "1.0.2" } }, "cross-spawn": { @@ -2868,7 +3288,7 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "requires": { - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "shebang-command": "1.2.0", "which": "1.3.0" } @@ -2886,7 +3306,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "requires": { - "hoek": "4.2.0" + "hoek": "4.2.1" } } } @@ -2896,24 +3316,23 @@ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "requires": { - "browserify-cipher": "1.0.0", + "browserify-cipher": "1.0.1", "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", + "create-ecdh": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", - "randombytes": "2.0.5", - "randomfill": "1.0.3" + "pbkdf2": "3.0.16", + "public-encrypt": "4.0.2", + "randombytes": "2.0.6", + "randomfill": "1.0.4" } }, "crypto-random-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" }, "css-color-keywords": { "version": "1.0.0", @@ -2934,9 +3353,10 @@ } }, "css-loader": { - "version": "0.28.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.7.tgz", - "integrity": "sha512-GxMpax8a/VgcfRrVy0gXD6yLd5ePYbXX/5zGgTVYp4wXtJklS8Z2VaUArJgc//f6/Dzil7BaJObdSv8eKKCPgg==", + "version": "0.28.11", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", + "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", + "dev": true, "requires": { "babel-code-frame": "6.26.0", "css-selector-tokenizer": "0.7.0", @@ -2946,7 +3366,7 @@ "lodash.camelcase": "4.3.0", "object-assign": "4.1.1", "postcss": "5.2.18", - "postcss-modules-extract-imports": "1.1.0", + "postcss-modules-extract-imports": "1.2.0", "postcss-modules-local-by-default": "1.2.0", "postcss-modules-scope": "1.1.0", "postcss-modules-values": "1.3.0", @@ -2957,15 +3377,17 @@ "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true }, "postcss": { "version": "5.2.18", "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -2973,12 +3395,14 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, "requires": { "has-flag": "1.0.0" } @@ -3034,7 +3458,7 @@ "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", "dev": true, "requires": { - "mdn-data": "1.1.0", + "mdn-data": "1.1.1", "source-map": "0.5.7" }, "dependencies": { @@ -3101,7 +3525,7 @@ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000758", + "caniuse-db": "1.0.30000830", "normalize-range": "0.1.2", "num2fraction": "1.2.2", "postcss": "5.2.18", @@ -3113,8 +3537,8 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "requires": { - "caniuse-db": "1.0.30000758", - "electron-to-chromium": "1.3.27" + "caniuse-db": "1.0.30000830", + "electron-to-chromium": "1.3.42" } }, "has-flag": { @@ -3128,7 +3552,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -3177,6 +3601,12 @@ "cssom": "0.3.2" } }, + "csstype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.3.0.tgz", + "integrity": "sha512-+iowf+HbYUKV65+HjAhXkx4KH6IFpIxnBlO0maKsXmBIHJXEndaTRYPVL4pEwtK6+1zRvkXo+WD1tRFKygMHQg==", + "dev": true + }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -3185,12 +3615,18 @@ "array-find-index": "1.0.2" } }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, "d": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "requires": { - "es5-ext": "0.10.35" + "es5-ext": "0.10.42" } }, "d3-array": { @@ -3292,6 +3728,11 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", @@ -3313,6 +3754,16 @@ "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", "requires": { "strip-bom": "2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "0.2.1" + } + } } }, "define-properties": { @@ -3324,6 +3775,48 @@ "object-keys": "1.0.11" } }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, "defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", @@ -3336,7 +3829,7 @@ "requires": { "globby": "5.0.0", "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", "object-assign": "4.1.1", "pify": "2.3.0", "pinkie-promise": "2.0.1", @@ -3348,10 +3841,16 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, "des.js": { "version": "1.0.0", @@ -3359,7 +3858,7 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "requires": { "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "minimalistic-assert": "1.0.1" } }, "destroy": { @@ -3381,9 +3880,9 @@ "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=" }, "detect-port-alt": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.3.tgz", - "integrity": "sha1-pNLwYddXoDTs83xRQmCph1DysTE=", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", "requires": { "address": "1.0.3", "debug": "2.6.9" @@ -3400,18 +3899,18 @@ } }, "diff": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", - "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==" + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" }, "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "requires": { "bn.js": "4.11.8", "miller-rabin": "4.0.1", - "randombytes": "2.0.5" + "randombytes": "2.0.6" } }, "dns-equal": { @@ -3420,9 +3919,9 @@ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" }, "dns-packet": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.2.2.tgz", - "integrity": "sha512-kN+DjfGF7dJGUL7nWRktL9Z18t1rWP3aQlyZdY8XlpvU3Nc6GeFTQApftcjtWKxAZfiggZSGrCEoszNgvnpwDg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", "requires": { "ip": "1.1.5", "safe-buffer": "5.1.1" @@ -3437,19 +3936,11 @@ } }, "doctrine": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", - "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - } + "esutils": "2.0.2" } }, "dom-converter": { @@ -3493,7 +3984,7 @@ "resolved": "https://registry.npmjs.org/dom-urls/-/dom-urls-1.1.0.tgz", "integrity": "sha1-AB3fgWKM0ecGElxxdvU8zsVdkY4=", "requires": { - "urijs": "1.19.0" + "urijs": "1.19.1" } }, "dom-walk": { @@ -3503,9 +3994,9 @@ "dev": true }, "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" }, "domelementtype": { "version": "1.3.0", @@ -3530,9 +4021,9 @@ } }, "dot-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", - "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "requires": { "is-obj": "1.0.1" } @@ -3548,21 +4039,45 @@ "integrity": "sha512-Kwd74cRJq6o8n9ephvJJPn6bXh9gKbtLpxKpyzieTTvi/c1Im/J3130ctMWQ6Xyw6GEatm6Hy+VtpYsdKSfY6g==" }, "dotenv": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", - "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", + "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==", + "dev": true + }, + "dotenv-expand": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz", + "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=" + }, + "dotenv-webpack": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-1.5.5.tgz", + "integrity": "sha1-NEEJTwTTBLYRnmtyUk5i+zJS9fI=", + "dev": true, + "requires": { + "dotenv": "5.0.1" + } }, "duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" }, - "duplexer2": { + "duplexer3": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "duplexify": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.4.tgz", + "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", + "dev": true, "requires": { - "readable-stream": "2.3.3" + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "stream-shift": "1.0.0" } }, "ecc-jsbn": { @@ -3580,9 +4095,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.27", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz", - "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=" + "version": "1.3.42", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.42.tgz", + "integrity": "sha1-lcM78B0MxAVVauyJn+Yf1NduoPk=" }, "elliptic": { "version": "6.4.0", @@ -3594,7 +4109,7 @@ "hash.js": "1.1.3", "hmac-drbg": "1.0.1", "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", + "minimalistic-assert": "1.0.1", "minimalistic-crypto-utils": "1.0.1" } }, @@ -3609,9 +4124,9 @@ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" }, "encodeurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, "encoding": { "version": "0.1.12", @@ -3621,6 +4136,15 @@ "iconv-lite": "0.4.19" } }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, "enhanced-resolve": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", @@ -3638,11 +4162,11 @@ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" }, "errno": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", - "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "requires": { - "prr": "0.0.0" + "prr": "1.0.1" } }, "error-ex": { @@ -3676,18 +4200,19 @@ } }, "es5-ext": { - "version": "0.10.35", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.35.tgz", - "integrity": "sha1-GO6FjOajxFx9eekcFfzKnsVoSU8=", + "version": "0.10.42", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.42.tgz", + "integrity": "sha512-AJxO1rmPe1bDEfSR6TJ/FgMFYuTBhR5R57KW58iCkYACMyFbrkqVyzXSurYoScDGvgyMpk7uRF/lPUPPTmsRSA==", "requires": { "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" } }, "es5-shim": { - "version": "4.5.9", - "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.9.tgz", - "integrity": "sha1-Kh4rnlg/9f7Qwgo+4svz91IwpcA=", + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.10.tgz", + "integrity": "sha512-vmryBdqKRO8Ei9LJ4yyEk/EOmAOGIagcHDYPpTAi6pot4IMHS1AC2q5cTKPmydpijg2iX8DVmCuqgrNxIWj8Yg==", "dev": true }, "es6-iterator": { @@ -3696,7 +4221,7 @@ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "requires": { "d": "1.0.0", - "es5-ext": "0.10.35", + "es5-ext": "0.10.42", "es6-symbol": "3.1.1" } }, @@ -3706,7 +4231,7 @@ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", "requires": { "d": "1.0.0", - "es5-ext": "0.10.35", + "es5-ext": "0.10.42", "es6-iterator": "2.0.3", "es6-set": "0.1.5", "es6-symbol": "3.1.1", @@ -3714,9 +4239,9 @@ } }, "es6-promise": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz", - "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==" + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==" }, "es6-promisify": { "version": "5.0.0", @@ -3724,7 +4249,7 @@ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { - "es6-promise": "4.1.1" + "es6-promise": "4.2.4" } }, "es6-set": { @@ -3733,7 +4258,7 @@ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", "requires": { "d": "1.0.0", - "es5-ext": "0.10.35", + "es5-ext": "0.10.42", "es6-iterator": "2.0.3", "es6-symbol": "3.1.1", "event-emitter": "0.3.5" @@ -3751,7 +4276,49 @@ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "requires": { "d": "1.0.0", - "es5-ext": "0.10.35" + "es5-ext": "0.10.42" + } + }, + "es6-templates": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", + "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", + "dev": true, + "requires": { + "recast": "0.11.23", + "through": "2.3.8" + }, + "dependencies": { + "ast-types": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", + "dev": true + }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "recast": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "dev": true, + "requires": { + "ast-types": "0.9.6", + "esprima": "3.1.3", + "private": "0.1.8", + "source-map": "0.5.7" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "es6-weak-map": { @@ -3760,7 +4327,7 @@ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", "requires": { "d": "1.0.0", - "es5-ext": "0.10.35", + "es5-ext": "0.10.42", "es6-iterator": "2.0.3", "es6-symbol": "3.1.1" } @@ -3776,27 +4343,21 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz", - "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", "requires": { "esprima": "3.1.3", "estraverse": "4.2.0", "esutils": "2.0.2", "optionator": "0.8.2", - "source-map": "0.5.7" + "source-map": "0.6.1" }, "dependencies": { "esprima": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "optional": true } } }, @@ -3807,40 +4368,40 @@ "requires": { "es6-map": "0.1.5", "es6-weak-map": "2.0.2", - "esrecurse": "4.2.0", + "esrecurse": "4.2.1", "estraverse": "4.2.0" } }, "eslint": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.11.0.tgz", - "integrity": "sha512-UWbhQpaKlm8h5x/VLwm0S1kheMrDj8jPwhnBMjr/Dlo3qqT7MvcN/UfKAR3E1N4lr4YNtOvS4m3hwsrVc/ky7g==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", "dev": true, "requires": { - "ajv": "5.3.0", + "ajv": "5.5.2", "babel-code-frame": "6.26.0", - "chalk": "2.3.0", - "concat-stream": "1.6.0", + "chalk": "2.4.0", + "concat-stream": "1.6.2", "cross-spawn": "5.1.0", "debug": "3.1.0", - "doctrine": "2.0.0", + "doctrine": "2.1.0", "eslint-scope": "3.7.1", - "espree": "3.5.2", - "esquery": "1.0.0", - "estraverse": "4.2.0", + "eslint-visitor-keys": "1.0.0", + "espree": "3.5.4", + "esquery": "1.0.1", "esutils": "2.0.2", "file-entry-cache": "2.0.0", "functional-red-black-tree": "1.0.1", "glob": "7.1.2", - "globals": "9.18.0", + "globals": "11.4.0", "ignore": "3.3.7", "imurmurhash": "0.1.4", "inquirer": "3.3.0", - "is-resolvable": "1.0.0", - "js-yaml": "3.10.0", + "is-resolvable": "1.1.0", + "js-yaml": "3.11.0", "json-stable-stringify-without-jsonify": "1.0.1", "levn": "0.3.0", - "lodash": "4.17.4", + "lodash": "4.17.5", "minimatch": "3.0.4", "mkdirp": "0.5.1", "natural-compare": "1.4.0", @@ -3848,14 +4409,27 @@ "path-is-inside": "1.0.2", "pluralize": "7.0.0", "progress": "2.0.0", + "regexpp": "1.1.0", "require-uncached": "1.0.3", - "semver": "5.4.1", + "semver": "5.5.0", "strip-ansi": "4.0.0", "strip-json-comments": "2.0.1", "table": "4.0.2", "text-table": "0.2.0" }, "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", @@ -3863,14 +4437,14 @@ "dev": true }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "supports-color": "5.4.0" } }, "esprima": { @@ -3879,13 +4453,19 @@ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", "dev": true }, + "globals": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz", + "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==", + "dev": true + }, "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", "dev": true, "requires": { - "argparse": "1.0.9", + "argparse": "1.0.10", "esprima": "4.0.0" } }, @@ -3919,17 +4499,17 @@ } }, "eslint-config-react-app": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-2.0.1.tgz", - "integrity": "sha512-gHtkzfEjKXhgZJ0Bf+EmztFSWwTiMDgoy85sFaTqrxU1BHSJ9i4i/JJtXJofVCU/SOKxYs46LO3ajvuzFQH5rw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-2.1.0.tgz", + "integrity": "sha512-8QZrKWuHVC57Fmu+SsKAVxnI9LycZl7NFQ4H9L+oeISuCXhYdXqsOOIVSjQFW6JF5MXZLFE+21Syhd7mF1IRZQ==" }, "eslint-import-resolver-node": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz", - "integrity": "sha512-yUtXS15gIcij68NmXmP9Ni77AQuCN0itXbCc/jWd8C6/yKZaSNXicpC8cgvjnxVdmfsosIXrjpzFq7GcDryb6A==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", "requires": { "debug": "2.6.9", - "resolve": "1.5.0" + "resolve": "1.7.1" }, "dependencies": { "debug": { @@ -3950,14 +4530,14 @@ "loader-fs-cache": "1.0.1", "loader-utils": "1.1.0", "object-assign": "4.1.1", - "object-hash": "1.2.0", + "object-hash": "1.3.0", "rimraf": "2.6.2" } }, "eslint-module-utils": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz", - "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", + "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", "requires": { "debug": "2.6.9", "pkg-dir": "1.0.0" @@ -4003,30 +4583,32 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.39.1.tgz", "integrity": "sha512-RiQv+7Z9QDJuzt+NO8sYgkLGT+h+WeCrxP7y8lI7wpU41x3x/2o3PGtHk9ck8QnA9/mlbNcy/hG0eKvmd7npaA==", "requires": { - "lodash": "4.17.4" + "lodash": "4.17.5" } }, "eslint-plugin-import": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz", - "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.11.0.tgz", + "integrity": "sha1-Fa7qN6Z0mdhI6OmBgG1GJ7VQOBY=", + "dev": true, "requires": { - "builtin-modules": "1.1.1", "contains-path": "0.1.0", "debug": "2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.1", - "eslint-module-utils": "2.1.1", + "eslint-import-resolver-node": "0.3.2", + "eslint-module-utils": "2.2.0", "has": "1.0.1", - "lodash.cond": "4.5.2", + "lodash": "4.17.5", "minimatch": "3.0.4", - "read-pkg-up": "2.0.0" + "read-pkg-up": "2.0.0", + "resolve": "1.7.1" }, "dependencies": { "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "requires": { "ms": "2.0.0" } @@ -4035,6 +4617,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, "requires": { "esutils": "2.0.2", "isarray": "1.0.0" @@ -4043,50 +4626,8 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "requires": { - "pify": "2.3.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true } } }, @@ -4106,24 +4647,15 @@ } }, "eslint-plugin-react": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz", - "integrity": "sha512-tvjU9u3VqmW2vVuYnE8Qptq+6ji4JltjOjJ9u7VAOxVYkUkyBZWRvNYKbDv5fN+L6wiA+4we9+qQahZ0m63XEA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz", + "integrity": "sha512-KC7Snr4YsWZD5flu6A5c0AcIZidzW3Exbqp7OT67OaD2AppJtlBr/GuPrW/vaQM/yfZotEvKAdrxrO+v8vwYJA==", + "dev": true, "requires": { - "doctrine": "2.0.0", + "doctrine": "2.1.0", "has": "1.0.1", "jsx-ast-utils": "2.0.1", - "prop-types": "15.6.0" - }, - "dependencies": { - "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", - "requires": { - "array-includes": "3.0.3" - } - } + "prop-types": "15.6.1" } }, "eslint-restricted-globals": { @@ -4137,16 +4669,22 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "requires": { - "esrecurse": "4.2.0", + "esrecurse": "4.2.1", "estraverse": "4.2.0" } }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, "espree": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz", - "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "requires": { - "acorn": "5.2.1", + "acorn": "5.5.3", "acorn-jsx": "3.0.1" } }, @@ -4156,20 +4694,19 @@ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" }, "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "requires": { "estraverse": "4.2.0" } }, "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" + "estraverse": "4.2.0" } }, "estraverse": { @@ -4193,18 +4730,19 @@ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "requires": { "d": "1.0.0", - "es5-ext": "0.10.35" + "es5-ext": "0.10.42" } }, "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.0.1.tgz", + "integrity": "sha512-QOCPu979MMWX9XNlfRZoin+Wm+bK1SP7vv3NGUniYwuSJK/+cPA10blMaeRgzg31RvoSFk6FsCDVa4vNryBTGA==" }, "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-2.0.0.tgz", + "integrity": "sha512-r/M5YkNg9zwI8QbSf7tsDWWJvO3PGwZXyG7GpFAxtMASnHL2eblFd7iHiGPtyGKKFPZ59S63NeX10Ws6WqGDcg==", + "dev": true }, "eventsource": { "version": "0.1.6", @@ -4251,11 +4789,43 @@ "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50=" }, "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "requires": { - "is-posix-bracket": "0.1.1" + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } } }, "expand-range": { @@ -4264,8 +4834,43 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "requires": { "fill-range": "2.2.3" - } - }, + }, + "dependencies": { + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "requires": { + "kind-of": "3.2.2" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -4275,11 +4880,11 @@ } }, "express": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", - "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "requires": { - "accepts": "1.3.4", + "accepts": "1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.2", "content-disposition": "0.5.2", @@ -4287,35 +4892,30 @@ "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.1", - "encodeurl": "1.0.1", + "depd": "1.1.2", + "encodeurl": "1.0.2", "escape-html": "1.0.3", "etag": "1.8.1", - "finalhandler": "1.1.0", + "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "1.1.2", "on-finished": "2.3.0", "parseurl": "1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.2", + "proxy-addr": "2.0.3", "qs": "6.5.1", "range-parser": "1.2.0", "safe-buffer": "5.1.1", - "send": "0.16.1", - "serve-static": "1.13.1", + "send": "0.16.2", + "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.3.1", - "type-is": "1.6.15", + "statuses": "1.4.0", + "type-is": "1.6.16", "utils-merge": "1.0.1", "vary": "1.1.2" }, "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -4342,22 +4942,97 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, "external-editor": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.5.tgz", - "integrity": "sha512-Msjo64WT5W+NhOpQXh0nOHm+n0RfU1QUwDnKYvJ8dEJ8zlwLrqXNTv5mSUTJpepf41PDJGyhueTw2vNZW+Fr/w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "requires": { + "chardet": "0.4.2", "iconv-lite": "0.4.19", - "jschardet": "1.6.0", "tmp": "0.0.33" } }, "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "requires": { - "is-extglob": "1.0.0" + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } } }, "extract-text-webpack-plugin": { @@ -4368,7 +5043,28 @@ "async": "2.6.0", "loader-utils": "1.1.0", "schema-utils": "0.3.0", - "webpack-sources": "1.0.2" + "webpack-sources": "1.1.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "requires": { + "ajv": "5.5.2" + } + } } }, "extract-zip": { @@ -4383,6 +5079,17 @@ "yauzl": "2.4.1" }, "dependencies": { + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" + } + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -4409,9 +5116,9 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, "fast-json-stable-stringify": { "version": "2.0.0", @@ -4424,9 +5131,9 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "fast-memoize": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.2.8.tgz", - "integrity": "sha512-3ppTC3fZ9Vwtjslx8DkhSIbI9PH1nM4pobuTHQINOxTxchG8n3SDGZ8L6jbatGJCGLKR+gbkNWKFN4E1iUROSA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.3.2.tgz", + "integrity": "sha512-h2avnhux4p3tXTA9xR7ntnQSFQdY4hAkyNj8wDXlVT2Die38JxVCInnrieuktdxzRevRWa3dBjN+SbQe1os0GQ==", "dev": true }, "fastparse": { @@ -4498,12 +5205,13 @@ } }, "file-loader": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.5.tgz", - "integrity": "sha512-RzGHDatcVNpGISTvCpfUfOGpYuSR7HSsSg87ki+wF6rw1Hm0RALPTiAdsxAq1UwLf0RRhbe22/eHK6nhXspiOQ==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", + "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", + "dev": true, "requires": { "loader-utils": "1.1.0", - "schema-utils": "0.3.0" + "schema-utils": "0.4.5" } }, "filename-regex": { @@ -4526,33 +5234,37 @@ "integrity": "sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g==" }, "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } } }, - "filled-array": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz", - "integrity": "sha1-w8T2xmO5I0WamqKZEtLQMfFQf4Q=" - }, "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "requires": { "debug": "2.6.9", - "encodeurl": "1.0.1", + "encodeurl": "1.0.2", "escape-html": "1.0.3", "on-finished": "2.3.0", "parseurl": "1.3.2", - "statuses": "1.3.1", + "statuses": "1.4.0", "unpipe": "1.0.0" }, "dependencies": { @@ -4572,7 +5284,7 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "requires": { "commondir": "1.0.1", - "make-dir": "1.1.0", + "make-dir": "1.2.0", "pkg-dir": "2.0.0" } }, @@ -4608,6 +5320,24 @@ "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=" }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "follow-redirects": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", + "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==", + "requires": { + "debug": "3.1.0" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -4632,13 +5362,13 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", - "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "combined-stream": "1.0.6", + "mime-types": "2.1.18" } }, "forwarded": { @@ -4646,11 +5376,39 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "0.2.2" + } + }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "3.0.1", + "universalify": "0.1.1" + } + }, "fs-minipass": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", @@ -4660,6 +5418,18 @@ "minipass": "2.2.4" } }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.6" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -5446,9 +6216,9 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "function.prototype.name": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.0.3.tgz", - "integrity": "sha512-5EblxZUdioXi2JiMZ9FUbwYj40eQ9MFHyzFLBSPdlRl3SO8l7SLWuAnQ/at/1Wi4hjJwME/C5WpF2ZfAc8nGNw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz", + "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==", "dev": true, "requires": { "define-properties": "1.1.2", @@ -5472,6 +6242,22 @@ "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", "integrity": "sha1-THbsL/CsGjap3M+aAN+GIweNTtg=" }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, "get-caller-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", @@ -5487,6 +6273,11 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -5504,22 +6295,23 @@ "fbjs": "0.8.16", "inline-style-prefixer": "3.0.8", "object-assign": "4.1.1", - "prop-types": "15.6.0", + "prop-types": "15.6.1", "through": "2.3.8" } }, "glamorous": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/glamorous/-/glamorous-4.11.0.tgz", - "integrity": "sha512-qWRmq5HZ6kGnp09/z3I0L5ZWZF8PX9W90ED8Ndm3ccfaamWRcEURYilk3zA1M1VW1xJlV28+aD2XlwbQF5YlSw==", + "version": "4.12.4", + "resolved": "https://registry.npmjs.org/glamorous/-/glamorous-4.12.4.tgz", + "integrity": "sha512-9XjKfMnVJlohSa6ZYrrOz/ZW1xu3JK6zjRTCTkLLJowlmEU7zt9uvIZeUHiYEkr8qDfhhSDDOYZrMiknz0r1Iw==", "dev": true, "requires": { "brcast": "3.0.1", - "fast-memoize": "2.2.8", + "csstype": "2.3.0", + "fast-memoize": "2.3.2", "html-tag-names": "1.1.2", "is-function": "1.0.1", "is-plain-object": "2.0.4", - "react-html-attributes": "1.4.1", + "react-html-attributes": "1.4.2", "svg-tag-names": "1.1.1" } }, @@ -5543,14 +6335,48 @@ "requires": { "glob-parent": "2.0.0", "is-glob": "2.0.1" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "requires": { + "is-glob": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + } } }, "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "requires": { - "is-glob": "2.0.1" + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "2.1.1" + } + } } }, "global": { @@ -5561,14 +6387,14 @@ "requires": { "min-document": "2.19.0", "process": "0.5.2" - }, - "dependencies": { - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", - "dev": true - } + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "requires": { + "ini": "1.3.5" } }, "global-modules": { @@ -5577,7 +6403,7 @@ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "requires": { "global-prefix": "1.0.2", - "is-windows": "1.0.1", + "is-windows": "1.0.2", "resolve-dir": "1.0.1" } }, @@ -5588,8 +6414,8 @@ "requires": { "expand-tilde": "2.0.2", "homedir-polyfill": "1.0.1", - "ini": "1.3.4", - "is-windows": "1.0.1", + "ini": "1.3.5", + "is-windows": "1.0.2", "which": "1.3.0" } }, @@ -5612,24 +6438,20 @@ } }, "got": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", - "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "requires": { "create-error-class": "3.0.2", - "duplexer2": "0.1.4", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", "is-redirect": "1.0.0", "is-retry-allowed": "1.1.0", "is-stream": "1.1.0", - "lowercase-keys": "1.0.0", - "node-status-codes": "1.0.0", - "object-assign": "4.1.1", - "parse-json": "2.2.0", - "pinkie-promise": "2.0.1", - "read-all-stream": "3.1.0", - "readable-stream": "2.3.3", - "timed-out": "3.1.3", - "unzip-response": "1.0.2", + "lowercase-keys": "1.0.1", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "unzip-response": "2.0.1", "url-parse-lax": "1.0.0" } }, @@ -5679,37 +6501,6 @@ "requires": { "amdefine": "1.0.1" } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "optional": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "optional": true - } - } - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "optional": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } } } }, @@ -5723,8 +6514,21 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "requires": { - "ajv": "5.3.0", + "ajv": "5.5.2", "har-schema": "2.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + } } }, "has": { @@ -5744,16 +6548,52 @@ } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "1.1.6" + } + } + } }, "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "requires": { - "inherits": "2.0.3" + "inherits": "2.0.3", + "safe-buffer": "5.1.1" } }, "hash.js": { @@ -5762,7 +6602,7 @@ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "requires": { "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "minimalistic-assert": "1.0.1" } }, "hawk": { @@ -5772,7 +6612,7 @@ "requires": { "boom": "4.3.1", "cryptiles": "3.1.2", - "hoek": "4.2.0", + "hoek": "4.2.1", "sntp": "2.1.0" } }, @@ -5813,14 +6653,14 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "requires": { "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", + "minimalistic-assert": "1.0.1", "minimalistic-crypto-utils": "1.0.1" } }, "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" }, "hoist-non-react-statics": { "version": "2.3.1", @@ -5845,9 +6685,9 @@ } }, "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==" }, "hpack.js": { "version": "2.1.6", @@ -5855,9 +6695,9 @@ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "requires": { "inherits": "2.0.3", - "obuf": "1.1.1", - "readable-stream": "2.3.3", - "wbuf": "1.7.2" + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "wbuf": "1.7.3" } }, "html-comment-regex": { @@ -5866,9 +6706,9 @@ "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=" }, "html-element-attributes": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/html-element-attributes/-/html-element-attributes-1.3.0.tgz", - "integrity": "sha1-8G69/OIt6XnbggICZcrFQfsX1Pw=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-element-attributes/-/html-element-attributes-1.3.1.tgz", + "integrity": "sha512-UrRKgp5sQmRnDy4TEwAUsu14XBUlzKB8U3hjIYDjcZ3Hbp86Jtftzxfgrv6E/ii/h78tsaZwAnAE8HwnHr0dPA==", "dev": true }, "html-encoding-sniffer": { @@ -5884,19 +6724,47 @@ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" }, + "html-loader": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz", + "integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==", + "dev": true, + "requires": { + "es6-templates": "0.2.3", + "fastparse": "1.1.1", + "html-minifier": "3.5.15", + "loader-utils": "1.1.0", + "object-assign": "4.1.1" + } + }, "html-minifier": { - "version": "3.5.6", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.6.tgz", - "integrity": "sha512-88FjtKrlak2XjczhxrBomgzV4jmGzM3UnHRBScRkJcmcRum0kb+IwhVAETJ8AVp7j0p3xugjSaw9L+RmI5/QOA==", + "version": "3.5.15", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.15.tgz", + "integrity": "sha512-OZa4rfb6tZOZ3Z8Xf0jKxXkiDcFWldQePGYFDcgKqES2sXeWaEv9y6QQvWUtX3ySI3feApQi5uCsHLINQ6NoAw==", "requires": { "camel-case": "3.0.0", - "clean-css": "4.1.9", - "commander": "2.11.0", + "clean-css": "4.1.11", + "commander": "2.15.1", "he": "1.1.1", - "ncname": "1.0.0", "param-case": "2.1.1", "relateurl": "0.2.7", - "uglify-js": "3.1.8" + "uglify-js": "3.3.22" + }, + "dependencies": { + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" + }, + "uglify-js": { + "version": "3.3.22", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.22.tgz", + "integrity": "sha512-tqw96rL6/BG+7LM5VItdhDjTQmL5zG/I0b2RqWytlgeHe2eydZHuBHdA9vuGpCDhH/ZskNGcqDhivoR2xt8RIw==", + "requires": { + "commander": "2.15.1", + "source-map": "0.6.1" + } + } } }, "html-tag-names": { @@ -5906,14 +6774,15 @@ "dev": true }, "html-webpack-plugin": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.29.0.tgz", - "integrity": "sha1-6Yf0IYU9O2k4yMTIFxhC5f0XryM=", + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz", + "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=", + "dev": true, "requires": { "bluebird": "3.5.1", - "html-minifier": "3.5.6", + "html-minifier": "3.5.15", "loader-utils": "0.2.17", - "lodash": "4.17.4", + "lodash": "4.17.5", "pretty-error": "2.1.1", "toposort": "1.0.6" }, @@ -5922,6 +6791,7 @@ "version": "0.2.17", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, "requires": { "big.js": "3.2.0", "emojis-list": "2.1.0", @@ -5974,34 +6844,28 @@ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" }, "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "depd": "1.1.1", + "depd": "1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - }, - "dependencies": { - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" - } + "setprototypeof": "1.1.0", + "statuses": "1.4.0" } }, "http-parser-js": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz", - "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=" + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.11.tgz", + "integrity": "sha512-QCR5O2AjjMW8Mo4HyI1ctFcv+O99j/0g367V3YoVnrNw5hkDvAWZD0lWGcc+F4yN3V55USPCVix4efb75HxFfA==" }, "http-proxy": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", - "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", "requires": { - "eventemitter3": "1.2.0", + "eventemitter3": "3.0.1", + "follow-redirects": "1.4.1", "requires-port": "1.0.0" } }, @@ -6010,16 +6874,57 @@ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", "requires": { - "http-proxy": "1.16.2", + "http-proxy": "1.17.0", "is-glob": "3.1.0", - "lodash": "4.17.4", + "lodash": "4.17.5", "micromatch": "2.3.11" }, "dependencies": { - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "1.1.0" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "1.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + } + } }, "is-glob": { "version": "3.1.0", @@ -6028,6 +6933,41 @@ "requires": { "is-extglob": "2.1.1" } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + } + } } } }, @@ -6038,18 +6978,18 @@ "requires": { "assert-plus": "1.0.0", "jsprim": "1.4.1", - "sshpk": "1.13.1" + "sshpk": "1.14.1" } }, "https-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", - "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" }, "https-proxy-agent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.0.tgz", - "integrity": "sha512-uUWcfXHvy/dwfM9bqa6AozvAjS32dZSTUYd/4SEpYKRg6LEcPLshksnQYRudM9AyNvUARMfAg5TLjUDyX/K4vA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", "dev": true, "requires": { "agent-base": "4.2.0", @@ -6076,13 +7016,19 @@ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "requires": { - "postcss": "6.0.14" + "postcss": "6.0.21" } }, "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", + "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==" + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true }, "ignore": { "version": "3.3.7", @@ -6104,6 +7050,11 @@ "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", "dev": true }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, "import-local": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/import-local/-/import-local-0.1.1.tgz", @@ -6151,9 +7102,9 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=" + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inline-style-prefixer": { "version": "3.0.8", @@ -6169,13 +7120,13 @@ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "requires": { - "ansi-escapes": "3.0.0", - "chalk": "2.3.0", + "ansi-escapes": "3.1.0", + "chalk": "2.4.0", "cli-cursor": "2.1.0", "cli-width": "2.2.0", - "external-editor": "2.0.5", + "external-editor": "2.2.0", "figures": "2.0.0", - "lodash": "4.17.4", + "lodash": "4.17.5", "mute-stream": "0.0.7", "run-async": "2.3.0", "rx-lite": "4.0.8", @@ -6191,13 +7142,27 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "supports-color": "5.4.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" } }, "strip-ansi": { @@ -6219,9 +7184,9 @@ } }, "interpret": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", - "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=" }, "invariant": { "version": "2.2.2", @@ -6242,27 +7207,35 @@ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" }, "ipaddr.js": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", - "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", + "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" }, "is-absolute-url": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "3.2.2" + } + }, "is-alphabetical": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.1.tgz", - "integrity": "sha1-x3B5zJHU76x3W+EDS/LSQ/lebwg=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz", + "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==" }, "is-alphanumerical": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.1.tgz", - "integrity": "sha1-37SqTRCF4zvbYcLe6cgOnGwZ9Ts=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz", + "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==", "requires": { - "is-alphabetical": "1.0.1", - "is-decimal": "1.0.1" + "is-alphabetical": "1.0.2", + "is-decimal": "1.0.2" } }, "is-arrayish": { @@ -6275,7 +7248,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "requires": { - "binary-extensions": "1.10.0" + "binary-extensions": "1.11.0" } }, "is-buffer": { @@ -6297,11 +7270,19 @@ "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=" }, "is-ci": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz", - "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", + "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", + "requires": { + "ci-info": "1.1.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { - "ci-info": "1.1.1" + "kind-of": "3.2.2" } }, "is-date-object": { @@ -6310,9 +7291,26 @@ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, "is-decimal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.1.tgz", - "integrity": "sha1-9ftqlJlq2ejjdh+/vQkfH8qMToI=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz", + "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } }, "is-directory": { "version": "0.3.1", @@ -6344,9 +7342,9 @@ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-finite": { "version": "1.0.2", @@ -6357,9 +7355,12 @@ } }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } }, "is-function": { "version": "1.0.1", @@ -6368,17 +7369,26 @@ "dev": true }, "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "requires": { - "is-extglob": "1.0.0" + "is-extglob": "2.1.1" } }, "is-hexadecimal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz", - "integrity": "sha1-bghLvJIGH7sJcexYts5tQE4k2mk=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz", + "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==" + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "requires": { + "global-dirs": "0.1.1", + "is-path-inside": "1.0.1" + } }, "is-npm": { "version": "1.0.0", @@ -6386,9 +7396,9 @@ "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" }, "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { "kind-of": "3.2.2" } @@ -6398,23 +7408,38 @@ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" }, + "is-odd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", + "requires": { + "is-number": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" + } + } + }, "is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" }, "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "requires": { - "is-path-inside": "1.0.0" + "is-path-inside": "1.0.1" } }, "is-path-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "requires": { "path-is-inside": "1.0.2" } @@ -6430,13 +7455,6 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } } }, "is-posix-bracket": { @@ -6468,12 +7486,9 @@ } }, "is-resolvable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", - "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", - "requires": { - "tryit": "1.0.3" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" }, "is-retry-allowed": { "version": "1.1.0", @@ -6514,14 +7529,14 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, "is-whitespace-character": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz", - "integrity": "sha1-muAXbzKCtlRXoZks2whPil+DPjs=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz", + "integrity": "sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==" }, "is-windows": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.1.tgz", - "integrity": "sha1-MQ23D3QtJZoWo2kgK1GvhCMzENk=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, "is-word-character": { "version": "1.0.1", @@ -6544,19 +7559,9 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - } - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "isomorphic-fetch": { "version": "2.2.1", @@ -6573,56 +7578,76 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "istanbul-api": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.2.1.tgz", - "integrity": "sha512-oFCwXvd65amgaPCzqrR+a2XjanS1MvpXN6l/MlMUTv6uiA1NOgGX+I0uyq8Lg3GDxsxPsaP1049krz3hIJ5+KA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.1.tgz", + "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==", "requires": { "async": "2.6.0", + "compare-versions": "3.1.0", "fileset": "2.0.3", - "istanbul-lib-coverage": "1.1.1", - "istanbul-lib-hook": "1.1.0", - "istanbul-lib-instrument": "1.9.1", - "istanbul-lib-report": "1.1.2", - "istanbul-lib-source-maps": "1.2.2", - "istanbul-reports": "1.1.3", + "istanbul-lib-coverage": "1.2.0", + "istanbul-lib-hook": "1.2.0", + "istanbul-lib-instrument": "1.10.1", + "istanbul-lib-report": "1.1.4", + "istanbul-lib-source-maps": "1.2.4", + "istanbul-reports": "1.3.0", "js-yaml": "3.7.0", "mkdirp": "0.5.1", "once": "1.4.0" + }, + "dependencies": { + "istanbul-lib-source-maps": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz", + "integrity": "sha512-UzuK0g1wyQijiaYQxj/CdNycFhAd2TLtO2obKQMTZrZ1jzEMRY3rvpASEKkaxbRR6brvdovfA03znPa/pXcejg==", + "requires": { + "debug": "3.1.0", + "istanbul-lib-coverage": "1.2.0", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "source-map": "0.5.7" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } } }, "istanbul-lib-coverage": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", - "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", + "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==" }, "istanbul-lib-hook": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", - "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz", + "integrity": "sha512-p3En6/oGkFQV55Up8ZPC2oLxvgSxD8CzA0yBrhRZSh3pfv3OFj9aSGVC0yoerAi/O4u7jUVnOGVX1eVFM+0tmQ==", "requires": { "append-transform": "0.4.0" } }, "istanbul-lib-instrument": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz", - "integrity": "sha512-RQmXeQ7sphar7k7O1wTNzVczF9igKpaeGQAG9qR2L+BS4DCJNTI9nytRmIVYevwO0bbq+2CXvJmYDuz0gMrywA==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", + "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", "requires": { - "babel-generator": "6.26.0", + "babel-generator": "6.26.1", "babel-template": "6.26.0", "babel-traverse": "6.26.0", "babel-types": "6.26.0", "babylon": "6.18.0", - "istanbul-lib-coverage": "1.1.1", - "semver": "5.4.1" + "istanbul-lib-coverage": "1.2.0", + "semver": "5.5.0" } }, "istanbul-lib-report": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz", - "integrity": "sha512-UTv4VGx+HZivJQwAo1wnRwe1KTvFpfi/NYwN7DcsrdzMXwpRT/Yb6r4SBPoHWj4VuQPakR32g4PUUeyKkdDkBA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz", + "integrity": "sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA==", "requires": { - "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-coverage": "1.2.0", "mkdirp": "0.5.1", "path-parse": "1.0.5", "supports-color": "3.2.3" @@ -6644,12 +7669,12 @@ } }, "istanbul-lib-source-maps": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz", - "integrity": "sha512-8BfdqSfEdtip7/wo1RnrvLpHVEd8zMZEDmOFEnpC6dg0vXflHt9nvoAyQUzig2uMSXfF2OBEYBV3CVjIL9JvaQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz", + "integrity": "sha512-fDa0hwU/5sDXwAklXgAoCJCOsFsBplVQ6WBldz5UwaqOzmDhUK4nfuR7/G//G2lERlblUNJB8P6e8cXq3a7MlA==", "requires": { "debug": "3.1.0", - "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-coverage": "1.2.0", "mkdirp": "0.5.1", "rimraf": "2.6.2", "source-map": "0.5.7" @@ -6663,9 +7688,9 @@ } }, "istanbul-reports": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.3.tgz", - "integrity": "sha512-ZEelkHh8hrZNI5xDaKwPMFwDsUf5wIEI2bXAFGp1e6deR2mnEKBPhLJEgr4ZBt8Gi6Mj38E/C8kcy9XLggVO2Q==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz", + "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", "requires": { "handlebars": "4.0.11" } @@ -6683,11 +7708,87 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=" }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "1.1.0" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, "callsites": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + }, "jest-cli": { "version": "20.0.4", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-20.0.4.tgz", @@ -6697,11 +7798,11 @@ "callsites": "2.0.0", "chalk": "1.1.3", "graceful-fs": "4.1.11", - "is-ci": "1.0.10", - "istanbul-api": "1.2.1", - "istanbul-lib-coverage": "1.1.1", - "istanbul-lib-instrument": "1.9.1", - "istanbul-lib-source-maps": "1.2.2", + "is-ci": "1.1.0", + "istanbul-api": "1.3.1", + "istanbul-lib-coverage": "1.2.0", + "istanbul-lib-instrument": "1.10.1", + "istanbul-lib-source-maps": "1.2.3", "jest-changed-files": "20.0.3", "jest-config": "20.0.4", "jest-docblock": "20.0.3", @@ -6715,37 +7816,155 @@ "jest-snapshot": "20.0.3", "jest-util": "20.0.3", "micromatch": "2.3.11", - "node-notifier": "5.1.2", + "node-notifier": "5.2.1", "pify": "2.3.0", "slash": "1.0.0", "string-length": "1.0.1", "throat": "3.2.0", "which": "1.3.0", - "worker-farm": "1.5.1", + "worker-farm": "1.6.0", "yargs": "7.1.0" } - } - } - }, - "jest-changed-files": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-20.0.3.tgz", - "integrity": "sha1-k5TVzGXEOEBhSb7xv01Sto4D4/g=" - }, - "jest-config": { - "version": "20.0.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-20.0.4.tgz", - "integrity": "sha1-43kwqyIXyRNgXv8T5712PsSPruo=", - "requires": { - "chalk": "1.1.3", - "glob": "7.1.2", - "jest-environment-jsdom": "20.0.3", - "jest-environment-node": "20.0.3", - "jest-jasmine2": "20.0.4", - "jest-matcher-utils": "20.0.3", - "jest-regex-util": "20.0.3", - "jest-resolve": "20.0.4", - "jest-validate": "20.0.3", + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "1.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "0.2.1" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "5.0.0" + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "requires": { + "camelcase": "3.0.0" + } + } + } + }, + "jest-changed-files": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-20.0.3.tgz", + "integrity": "sha1-k5TVzGXEOEBhSb7xv01Sto4D4/g=" + }, + "jest-config": { + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-20.0.4.tgz", + "integrity": "sha1-43kwqyIXyRNgXv8T5712PsSPruo=", + "requires": { + "chalk": "1.1.3", + "glob": "7.1.2", + "jest-environment-jsdom": "20.0.3", + "jest-environment-node": "20.0.3", + "jest-jasmine2": "20.0.4", + "jest-matcher-utils": "20.0.3", + "jest-regex-util": "20.0.3", + "jest-resolve": "20.0.4", + "jest-validate": "20.0.3", "pretty-format": "20.0.3" } }, @@ -6755,7 +7974,7 @@ "integrity": "sha1-gfKI/Z5nXw+yPHXxwrGURf5YZhc=", "requires": { "chalk": "1.1.3", - "diff": "3.4.0", + "diff": "3.5.0", "jest-matcher-utils": "20.0.3", "pretty-format": "20.0.3" } @@ -6794,7 +8013,81 @@ "jest-docblock": "20.0.3", "micromatch": "2.3.11", "sane": "1.6.0", - "worker-farm": "1.5.1" + "worker-farm": "1.6.0" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "1.1.0" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + } } }, "jest-jasmine2": { @@ -6841,6 +8134,80 @@ "chalk": "1.1.3", "micromatch": "2.3.11", "slash": "1.0.0" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "1.1.0" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + } } }, "jest-mock": { @@ -6860,7 +8227,7 @@ "requires": { "browser-resolve": "1.11.2", "is-builtin-module": "1.0.0", - "resolve": "1.5.0" + "resolve": "1.7.1" } }, "jest-resolve-dependencies": { @@ -6878,9 +8245,9 @@ "requires": { "babel-core": "6.26.0", "babel-jest": "20.0.3", - "babel-plugin-istanbul": "4.1.5", + "babel-plugin-istanbul": "4.1.6", "chalk": "1.1.3", - "convert-source-map": "1.5.0", + "convert-source-map": "1.5.1", "graceful-fs": "4.1.11", "jest-config": "20.0.4", "jest-haste-map": "20.0.5", @@ -6893,124 +8260,316 @@ "yargs": "7.1.0" }, "dependencies": { - "strip-bom": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "1.1.0" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "camelcase": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - } - } - }, - "jest-snapshot": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-20.0.3.tgz", - "integrity": "sha1-W4R+GtsaTZCFKn+fElCG4YfHZWY=", - "requires": { - "chalk": "1.1.3", - "jest-diff": "20.0.3", - "jest-matcher-utils": "20.0.3", - "jest-util": "20.0.3", - "natural-compare": "1.4.0", - "pretty-format": "20.0.3" - } - }, - "jest-util": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-20.0.3.tgz", - "integrity": "sha1-DAf32A2C9OWmfG+LnD/n9lz9Mq0=", - "requires": { - "chalk": "1.1.3", - "graceful-fs": "4.1.11", - "jest-message-util": "20.0.3", - "jest-mock": "20.0.3", - "jest-validate": "20.0.3", - "leven": "2.1.0", - "mkdirp": "0.5.1" - } - }, - "jest-validate": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-20.0.3.tgz", - "integrity": "sha1-0M/R3k9XnymEhJJcKA+PHZTsPKs=", - "requires": { - "chalk": "1.1.3", - "jest-matcher-utils": "20.0.3", - "leven": "2.1.0", - "pretty-format": "20.0.3" - } - }, - "js-base64": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz", - "integrity": "sha512-Y2/+DnfJJXT1/FCwUebUhLWb3QihxiSC42+ctHLGogmW2jPY6LCapMdFZXRvVP2z6qyKW7s6qncE/9gSqZiArw==" - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", - "requires": { - "argparse": "1.0.9", - "esprima": "2.7.3" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true - }, - "jschardet": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.6.0.tgz", - "integrity": "sha512-xYuhvQ7I9PDJIGBWev9xm0+SMSed3ZDBAmvVjbFR1ZRLAF+vlXcQu6cRI9uAlj81rzikElRVteehwV7DuX2ZmQ==" - }, - "jsdom": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", - "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", - "requires": { - "abab": "1.0.4", - "acorn": "4.0.13", - "acorn-globals": "3.1.0", - "array-equal": "1.0.0", - "content-type-parser": "1.0.2", - "cssom": "0.3.2", - "cssstyle": "0.2.37", - "escodegen": "1.9.0", - "html-encoding-sniffer": "1.0.2", - "nwmatcher": "1.4.3", - "parse5": "1.5.1", - "request": "2.83.0", - "sax": "1.2.4", - "symbol-tree": "3.2.2", - "tough-cookie": "2.3.3", - "webidl-conversions": "4.0.2", - "whatwg-encoding": "1.0.3", - "whatwg-url": "4.8.0", - "xml-name-validator": "2.0.1" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" - } - } - }, - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" - }, - "json-loader": { - "version": "0.5.7", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "1.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "5.0.0" + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "requires": { + "camelcase": "3.0.0" + } + } + } + }, + "jest-snapshot": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-20.0.3.tgz", + "integrity": "sha1-W4R+GtsaTZCFKn+fElCG4YfHZWY=", + "requires": { + "chalk": "1.1.3", + "jest-diff": "20.0.3", + "jest-matcher-utils": "20.0.3", + "jest-util": "20.0.3", + "natural-compare": "1.4.0", + "pretty-format": "20.0.3" + } + }, + "jest-util": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-20.0.3.tgz", + "integrity": "sha1-DAf32A2C9OWmfG+LnD/n9lz9Mq0=", + "requires": { + "chalk": "1.1.3", + "graceful-fs": "4.1.11", + "jest-message-util": "20.0.3", + "jest-mock": "20.0.3", + "jest-validate": "20.0.3", + "leven": "2.1.0", + "mkdirp": "0.5.1" + } + }, + "jest-validate": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-20.0.3.tgz", + "integrity": "sha1-0M/R3k9XnymEhJJcKA+PHZTsPKs=", + "requires": { + "chalk": "1.1.3", + "jest-matcher-utils": "20.0.3", + "leven": "2.1.0", + "pretty-format": "20.0.3" + } + }, + "js-base64": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", + "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==" + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "requires": { + "argparse": "1.0.10", + "esprima": "2.7.3" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "jsdom": { + "version": "9.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", + "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", + "requires": { + "abab": "1.0.4", + "acorn": "4.0.13", + "acorn-globals": "3.1.0", + "array-equal": "1.0.0", + "content-type-parser": "1.0.2", + "cssom": "0.3.2", + "cssstyle": "0.2.37", + "escodegen": "1.9.1", + "html-encoding-sniffer": "1.0.2", + "nwmatcher": "1.4.4", + "parse5": "1.5.1", + "request": "2.85.0", + "sax": "1.2.4", + "symbol-tree": "3.2.2", + "tough-cookie": "2.3.4", + "webidl-conversions": "4.0.2", + "whatwg-encoding": "1.0.3", + "whatwg-url": "4.8.0", + "xml-name-validator": "2.0.1" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + } + } + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" + }, + "json-loader": { + "version": "0.5.7", "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -7127,11 +8686,11 @@ } }, "latest-version": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz", - "integrity": "sha1-VvjWE5YghHuAF/jx9NeOIRMkFos=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "requires": { - "package-json": "2.4.0" + "package-json": "4.0.1" } }, "lazy-cache": { @@ -7139,11 +8698,6 @@ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" }, - "lazy-req": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", - "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=" - }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -7167,15 +8721,14 @@ } }, "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "requires": { "graceful-fs": "4.1.11", "parse-json": "2.2.0", "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "strip-bom": "3.0.0" } }, "loader-fs-cache": { @@ -7249,14 +8802,15 @@ } }, "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" }, "lodash-es": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.4.tgz", - "integrity": "sha1-3MHXVS4VCgZABzupyzHXDwMpUOc=" + "version": "4.17.8", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.8.tgz", + "integrity": "sha512-I9mjAxengFAleSThFhhAhvba6fsO0hunb9/0sQ6qQihSZsJRBofv2rYH58WXaOb/O++eUmYpCLywSQ22GfU+sA==", + "dev": true }, "lodash._getnative": { "version": "3.9.1", @@ -7401,9 +8955,9 @@ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, "loglevel": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.5.1.tgz", - "integrity": "sha1-GJB4yUq5BT7iFaCs2/JCROoPZQI=" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=" }, "long": { "version": "4.0.0", @@ -7438,14 +8992,14 @@ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" }, "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", + "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "requires": { "pseudomap": "1.0.2", "yallist": "2.1.2" @@ -7457,9 +9011,9 @@ "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=" }, "make-dir": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", - "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", + "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", "requires": { "pify": "3.0.0" }, @@ -7471,6 +9025,12 @@ } } }, + "make-error": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", + "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==", + "dev": true + }, "makeerror": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", @@ -7479,56 +9039,44 @@ "tmpl": "1.0.4" } }, - "mantra-core": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/mantra-core/-/mantra-core-1.7.0.tgz", - "integrity": "sha1-qMg+jO6D72pzgxMVGf6AMa1UY4Y=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "react-komposer": "1.13.1", - "react-simple-di": "1.2.0" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", - "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=", - "dev": true - }, - "react-komposer": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/react-komposer/-/react-komposer-1.13.1.tgz", - "integrity": "sha1-S4rEvMcTI710E9yrlcgxGX9Q7tA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "hoist-non-react-statics": "1.2.0", - "invariant": "2.2.2", - "mobx": "2.7.0", - "shallowequal": "0.2.2" - } - }, - "shallowequal": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-0.2.2.tgz", - "integrity": "sha1-HjL9W8q2rWiKSBLLDMBO/HXHAU4=", - "dev": true, - "requires": { - "lodash.keys": "3.1.2" - } - } - } + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" }, - "markdown-escapes": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.1.tgz", - "integrity": "sha1-GZTfLTr0gR3lmmcUk0wrIpJzRRg=" + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "1.0.1" + } + }, + "markdown-escapes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz", + "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==" + }, + "markdown-loader": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/markdown-loader/-/markdown-loader-2.0.2.tgz", + "integrity": "sha512-v/ej7DflZbb6t//3Yu9vg0T+sun+Q9EoqggifeyABKfvFROqPwwwpv+hd1NKT2QxTRg6VCFk10IIJcMI13yCoQ==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "marked": "0.3.19" + } + }, + "marked": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", + "dev": true }, "material-ui": { "version": "0.19.4", @@ -7540,7 +9088,7 @@ "keycode": "2.1.9", "lodash.merge": "4.6.0", "lodash.throttle": "4.1.1", - "prop-types": "15.6.0", + "prop-types": "15.6.1", "react-event-listener": "0.5.1", "react-transition-group": "1.2.1", "recompose": "0.26.0", @@ -7560,23 +9108,12 @@ "requires": { "hash-base": "3.0.4", "inherits": "2.0.3" - }, - "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - } } }, "mdn-data": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.0.tgz", - "integrity": "sha512-jC6B3BFC07cCOU8xx1d+sQtDkVIpGKWv4TzK7pN7PyObdbwlIFJbHYk8ofvr0zrU8SkV1rSi87KAHhWCdLGw1Q==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.1.tgz", + "integrity": "sha512-2J5JENcb4yD5AzBI4ilTakiq2P9gHSsi4LOygnMu/bkchgTiA63AjsHAhDc+3U36AJHRfcz30Qv6Tb7i/Qsiew==", "dev": true }, "media-typer": { @@ -7594,7 +9131,7 @@ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "1.2.0" } }, "memory-fs": { @@ -7602,8 +9139,8 @@ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "requires": { - "errno": "0.1.4", - "readable-stream": "2.3.3" + "errno": "0.1.7", + "readable-stream": "2.3.6" } }, "meow": { @@ -7623,10 +9160,76 @@ "trim-newlines": "1.0.0" }, "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "0.2.1" + } } } }, @@ -7646,23 +9249,30 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } } }, "miller-rabin": { @@ -7680,22 +9290,22 @@ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" }, "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "1.30.0" + "mime-db": "1.33.0" } }, "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, "min-document": { "version": "2.19.0", @@ -7717,7 +9327,7 @@ "csso": "3.5.0", "filesize": "3.5.11", "minimist": "1.2.0", - "puppeteer": "1.2.0" + "puppeteer": "1.3.0" }, "dependencies": { "csso": { @@ -7735,7 +9345,7 @@ "integrity": "sha512-BAYp9FyN4jLXjfvRpTDchBllDptqlK9I7OsagXCG9Am5C+5jc8eRZHgqb9x500W2OKS14MMlpQc/nmh/aA7TEQ==", "dev": true, "requires": { - "mdn-data": "1.1.0", + "mdn-data": "1.1.1", "source-map": "0.5.7" } } @@ -7756,9 +9366,9 @@ } }, "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "minimalistic-crypto-utils": { "version": "1.0.1", @@ -7770,7 +9380,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -7803,6 +9413,43 @@ "minipass": "2.2.4" } }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "duplexify": "3.5.4", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.3", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.4.0", + "stream-each": "1.2.2", + "through2": "2.0.3" + } + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -7811,11 +9458,19 @@ "minimist": "0.0.8" } }, - "mobx": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mobx/-/mobx-2.7.0.tgz", - "integrity": "sha1-zz2C0YwMp/RY2PKiQIF7PcflSgE=", - "dev": true + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } }, "ms": { "version": "2.0.0", @@ -7823,12 +9478,12 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "multicast-dns": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.1.1.tgz", - "integrity": "sha1-bn3oalcIcqsXBYrepxYLvsqBTd4=", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "requires": { - "dns-packet": "1.2.2", - "thunky": "0.1.0" + "dns-packet": "1.3.1", + "thunky": "1.0.2" } }, "multicast-dns-service-types": { @@ -7847,19 +9502,37 @@ "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", "optional": true }, + "nanomatch": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, - "ncname": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", - "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", - "requires": { - "xml-char-classes": "1.0.0" - } - }, "needle": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", @@ -7887,6 +9560,16 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, + "neo-async": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz", + "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==" + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, "no-case": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", @@ -7914,9 +9597,9 @@ } }, "node-forge": { - "version": "0.6.33", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.6.33.tgz", - "integrity": "sha1-RjgRh59XPUUVWtap9D3ClujoXrw=" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz", + "integrity": "sha1-naYR6giYL0uUIGs760zJZl8gwwA=" }, "node-int64": { "version": "0.4.0", @@ -7924,67 +9607,72 @@ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" }, "node-libs-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz", - "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "requires": { "assert": "1.4.1", - "browserify-zlib": "0.1.4", + "browserify-zlib": "0.2.0", "buffer": "4.9.1", "console-browserify": "1.1.0", "constants-browserify": "1.0.0", "crypto-browserify": "3.12.0", - "domain-browser": "1.1.7", + "domain-browser": "1.2.0", "events": "1.1.1", - "https-browserify": "0.0.1", - "os-browserify": "0.2.1", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", "path-browserify": "0.0.0", "process": "0.11.10", "punycode": "1.4.1", "querystring-es3": "0.2.1", - "readable-stream": "2.3.3", + "readable-stream": "2.3.6", "stream-browserify": "2.0.1", - "stream-http": "2.7.2", - "string_decoder": "0.10.31", - "timers-browserify": "2.0.4", + "stream-http": "2.8.1", + "string_decoder": "1.1.1", + "timers-browserify": "2.0.10", "tty-browserify": "0.0.0", "url": "0.11.0", "util": "0.10.3", "vm-browserify": "0.0.4" }, "dependencies": { - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" } } }, "node-notifier": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.1.2.tgz", - "integrity": "sha1-L6nhJgX6EACdRFSdb82KY93g5P8=", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.2.1.tgz", + "integrity": "sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==", "requires": { "growly": "1.3.0", - "semver": "5.4.1", + "semver": "5.5.0", "shellwords": "0.1.1", "which": "1.3.0" } }, - "node-status-codes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", - "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=" - }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "requires": { - "hosted-git-info": "2.5.0", + "hosted-git-info": "2.6.0", "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" + "semver": "5.5.0", + "validate-npm-package-license": "3.0.3" } }, "normalize-path": { @@ -8035,6 +9723,18 @@ "path-key": "2.0.1" } }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, "nth-check": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", @@ -8054,9 +9754,9 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nwmatcher": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.3.tgz", - "integrity": "sha512-IKdSTiDWCarf2JTS5e9e2+5tPZGdkRJ79XjYV0pzK8Q9BpsFyBq1RGKxzs7Q8UBushGw7m6TzVKz6fcY99iSWw==" + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", + "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==" }, "oauth-sign": { "version": "0.8.2", @@ -8068,16 +9768,44 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, "object-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.2.0.tgz", - "integrity": "sha512-smRWXzkvxw72VquyZ0wggySl7PFUtoDhvhpdwgESXxUrH7vVhhp9asfup1+rVLrhsl7L45Ee1Q/l5R2Ul4MwUg==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.0.tgz", + "integrity": "sha512-05KzQ70lSeGSrZJQXE5wNDiTkBJDlUT/myi6RX9dVIvz7a7Qh4oH93BQdiPMn27nldYvVQCKMUaM83AfizZlsQ==" }, "object-keys": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "3.0.1" + } + }, "object.entries": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", @@ -8109,6 +9837,14 @@ "is-extendable": "0.1.1" } }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "3.0.1" + } + }, "object.values": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", @@ -8122,9 +9858,9 @@ } }, "obuf": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", - "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, "on-finished": { "version": "2.3.0", @@ -8152,13 +9888,13 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "1.2.0" } }, "opn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", - "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.2.0.tgz", + "integrity": "sha512-Jd/GpzPyHF4P2/aNOVmS3lfMSWV9J7cOhCG1s08XCEAsPkB7lp6ddiU0J7XzyQRDUh8BqJ7PchfINjR8jyofRQ==", "requires": { "is-wsl": "1.1.0" } @@ -8169,14 +9905,7 @@ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "requires": { "minimist": "0.0.8", - "wordwrap": "0.0.3" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" - } + "wordwrap": "0.0.2" } }, "optionator": { @@ -8190,6 +9919,13 @@ "prelude-ls": "1.1.2", "type-check": "0.3.2", "wordwrap": "1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + } } }, "original": { @@ -8212,9 +9948,9 @@ } }, "os-browserify": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", - "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" }, "os-homedir": { "version": "1.0.2", @@ -8222,11 +9958,13 @@ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "requires": { - "lcid": "1.0.0" + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" } }, "os-tmpdir": { @@ -8234,31 +9972,25 @@ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, - "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "requires": { + "p-try": "1.0.0" + } }, "p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "requires": { - "p-limit": "1.1.0" + "p-limit": "1.2.0" } }, "p-map": { @@ -8266,21 +9998,37 @@ "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, "package-json": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz", - "integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "requires": { - "got": "5.7.1", - "registry-auth-token": "3.3.1", + "got": "6.7.1", + "registry-auth-token": "3.3.2", "registry-url": "3.1.0", - "semver": "5.4.1" + "semver": "5.5.0" } }, "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } }, "param-case": { "version": "2.1.1", @@ -8291,15 +10039,15 @@ } }, "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "requires": { - "asn1.js": "4.9.2", - "browserify-aes": "1.1.1", - "create-hash": "1.1.3", + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" + "pbkdf2": "3.0.16" } }, "parse-entities": { @@ -8307,12 +10055,12 @@ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.1.tgz", "integrity": "sha1-gRLYhHExnyerrk1klksSL+ThuJA=", "requires": { - "character-entities": "1.2.1", - "character-entities-legacy": "1.1.1", - "character-reference-invalid": "1.1.1", - "is-alphanumerical": "1.0.1", - "is-decimal": "1.0.1", - "is-hexadecimal": "1.0.1" + "character-entities": "1.2.2", + "character-entities-legacy": "1.1.2", + "character-reference-invalid": "1.1.2", + "is-alphanumerical": "1.0.2", + "is-decimal": "1.0.2", + "is-hexadecimal": "1.0.2" } }, "parse-glob": { @@ -8324,6 +10072,21 @@ "is-dotfile": "1.0.3", "is-extglob": "1.0.0", "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + } } }, "parse-json": { @@ -8349,11 +10112,21 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, "path-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -8388,25 +10161,23 @@ } }, "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "pify": "2.3.0" } }, "pbkdf2": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", + "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", "safe-buffer": "5.1.1", - "sha.js": "2.4.9" + "sha.js": "2.4.11" } }, "pend": { @@ -8451,16 +10222,6 @@ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==" }, - "podda": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/podda/-/podda-1.2.2.tgz", - "integrity": "sha1-FbDtvTNK3hRYEzQ/Xs+cEKcc9QA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "immutable": "3.8.2" - } - }, "portfinder": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", @@ -8486,24 +10247,29 @@ } } }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, "postcss": { - "version": "6.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz", - "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "requires": { - "chalk": "2.3.0", + "chalk": "2.4.0", "source-map": "0.6.1", - "supports-color": "4.5.0" + "supports-color": "5.4.0" }, "dependencies": { "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "supports-color": "5.4.0" } } } @@ -8529,7 +10295,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -8570,7 +10336,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -8610,7 +10376,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -8649,7 +10415,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -8688,7 +10454,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -8727,7 +10493,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -8766,7 +10532,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -8806,7 +10572,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -8846,7 +10612,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -8867,11 +10633,12 @@ } }, "postcss-flexbugs-fixes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-3.2.0.tgz", - "integrity": "sha512-0AuD9HG1Ey3/3nqPWu9yqf7rL0KCPu5VgjDsjf5mzEcuo9H/z8nco/fljKgjsOUrZypa95MI0kS4xBZeBzz2lw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-3.3.0.tgz", + "integrity": "sha512-15JauG6a2hu2XZHdB9BaOwCLrI9oyK2UB8kt1ToTGdP1Pd3BQ/TJI9tNiTALntll25/66xMLUIyUPA9w/3BLtg==", + "dev": true, "requires": { - "postcss": "6.0.14" + "postcss": "6.0.21" } }, "postcss-load-config": { @@ -8904,14 +10671,15 @@ } }, "postcss-loader": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.0.8.tgz", - "integrity": "sha512-KtXBiQ/r/WYW8LxTSJK7h8wLqvCMSub/BqmRnud/Mu8RzwflW9cmXxwsMwbn15TNv287Hcufdb3ZSs7xHKnG8Q==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.4.tgz", + "integrity": "sha512-L2p654oK945B/gDFUGgOhh7uzj19RWoY1SVMeJVoKno1H2MdbQ0RppR/28JGju4pMb22iRC7BJ9aDzbxXSLf4A==", + "dev": true, "requires": { "loader-utils": "1.1.0", - "postcss": "6.0.14", + "postcss": "6.0.21", "postcss-load-config": "1.2.0", - "schema-utils": "0.3.0" + "schema-utils": "0.4.5" } }, "postcss-merge-idents": { @@ -8935,7 +10703,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -8974,7 +10742,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -9003,7 +10771,7 @@ "caniuse-api": "1.6.1", "postcss": "5.2.18", "postcss-selector-parser": "2.2.3", - "vendors": "1.0.1" + "vendors": "1.0.2" }, "dependencies": { "browserslist": { @@ -9011,8 +10779,8 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "requires": { - "caniuse-db": "1.0.30000758", - "electron-to-chromium": "1.3.27" + "caniuse-db": "1.0.30000830", + "electron-to-chromium": "1.3.42" } }, "has-flag": { @@ -9026,7 +10794,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -9072,7 +10840,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -9112,7 +10880,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -9154,7 +10922,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -9196,7 +10964,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -9217,11 +10985,11 @@ } }, "postcss-modules-extract-imports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", - "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz", + "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", "requires": { - "postcss": "6.0.14" + "postcss": "6.0.21" } }, "postcss-modules-local-by-default": { @@ -9230,7 +10998,7 @@ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "requires": { "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.14" + "postcss": "6.0.21" } }, "postcss-modules-scope": { @@ -9239,7 +11007,7 @@ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "requires": { "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.14" + "postcss": "6.0.21" } }, "postcss-modules-values": { @@ -9248,7 +11016,7 @@ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "requires": { "icss-replace-symbols": "1.1.0", - "postcss": "6.0.14" + "postcss": "6.0.21" } }, "postcss-normalize-charset": { @@ -9270,7 +11038,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -9312,7 +11080,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -9352,7 +11120,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -9392,7 +11160,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -9431,7 +11199,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -9472,7 +11240,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -9524,7 +11292,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -9565,7 +11333,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -9611,7 +11379,7 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" } @@ -9666,7 +11434,7 @@ "integrity": "sha1-Ag41ClYKH+GpjcO+tsz/s4beixQ=", "requires": { "ansi-regex": "2.1.1", - "ansi-styles": "3.2.0" + "ansi-styles": "3.2.1" } }, "private": { @@ -9675,14 +11443,15 @@ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" }, "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", + "dev": true }, "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "progress": { "version": "2.0.0", @@ -9697,6 +11466,12 @@ "asap": "2.0.6" } }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, "promise.prototype.finally": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.0.tgz", @@ -9709,9 +11484,9 @@ } }, "prop-types": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", - "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", + "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", "requires": { "fbjs": "0.8.16", "loose-envify": "1.3.1", @@ -9719,12 +11494,12 @@ } }, "proxy-addr": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", - "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", + "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", "requires": { "forwarded": "0.1.2", - "ipaddr.js": "1.5.2" + "ipaddr.js": "1.6.0" } }, "proxy-from-env": { @@ -9734,9 +11509,9 @@ "dev": true }, "prr": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" }, "pseudomap": { "version": "1.0.2", @@ -9744,31 +11519,53 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", "requires": { "bn.js": "4.11.8", "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.5" + "create-hash": "1.2.0", + "parse-asn1": "5.1.1", + "randombytes": "2.0.6" } }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "puppeteer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.2.0.tgz", - "integrity": "sha512-4sY/6mB7+kNPGAzPGKq65tH0VG3ohUEkXHuOReB9K/tw3m1TqifYmxnMR/uDeci/UPwyk5K1gWYh8rw0U0Zscw==", + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz", + "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", + "dev": true, + "requires": { + "duplexify": "3.5.4", + "inherits": "2.0.3", + "pump": "2.0.1" + } + }, + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "dev": true + }, + "puppeteer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.3.0.tgz", + "integrity": "sha512-wx10aPQPpGJVxdB6yoDSLm9p4rCwARUSLMVV0bx++owuqkvviXKyiFM3EWsywaFmjOKNPXacIjplF7xhHiFP3w==", "dev": true, "requires": { "debug": "2.6.9", "extract-zip": "1.6.6", - "https-proxy-agent": "2.2.0", + "https-proxy-agent": "2.2.1", "mime": "1.4.1", "progress": "2.0.0", "proxy-from-env": "1.0.0", @@ -9830,7 +11627,7 @@ "array-find": "1.0.0", "exenv": "1.2.2", "inline-style-prefixer": "2.0.5", - "prop-types": "15.6.0" + "prop-types": "15.6.1" }, "dependencies": { "inline-style-prefixer": { @@ -9862,24 +11659,6 @@ "kind-of": "4.0.0" }, "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -9891,19 +11670,19 @@ } }, "randombytes": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", - "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "requires": { "safe-buffer": "5.1.1" } }, "randomfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", - "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "requires": { - "randombytes": "2.0.5", + "randombytes": "2.0.6", "safe-buffer": "5.1.1" } }, @@ -9921,15 +11700,38 @@ "http-errors": "1.6.2", "iconv-lite": "0.4.19", "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } } }, "rc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz", - "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.6.tgz", + "integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=", "requires": { "deep-extend": "0.4.2", - "ini": "1.3.4", + "ini": "1.3.5", "minimist": "1.2.0", "strip-json-comments": "2.0.1" }, @@ -9942,34 +11744,34 @@ } }, "react": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.3.1.tgz", - "integrity": "sha512-NbkxN9jsZ6+G+ICsLdC7/wUD26uNbvKU/RAxEWgc9kcdKvROt+5d5j2cNQm5PSFTQ4WNGsR3pa4qL2Q0/WSy1w==", + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/react/-/react-16.3.2.tgz", + "integrity": "sha512-o5GPdkhciQ3cEph6qgvYB7LTOHw/GB0qRI6ZFNugj49qJCFfgHwVNjZ5u+b7nif4vOeMIOuYj3CeYe2IBD74lg==", "requires": { "fbjs": "0.8.16", "loose-envify": "1.3.1", "object-assign": "4.1.1", - "prop-types": "15.6.0" + "prop-types": "15.6.1" } }, "react-dev-utils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-4.2.1.tgz", - "integrity": "sha1-nydj57r6GhucUiVNKked7sKA8RE=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-5.0.1.tgz", + "integrity": "sha512-+y92rG6pmXt3cpcg/NGmG4w/W309tWNSmyyPL8hCMxuCSg2UP/hUg3npACj2UZc8UKVSXexyLrCnxowizGoAsw==", "requires": { "address": "1.0.3", "babel-code-frame": "6.26.0", "chalk": "1.1.3", "cross-spawn": "5.1.0", - "detect-port-alt": "1.1.3", + "detect-port-alt": "1.1.6", "escape-string-regexp": "1.0.5", "filesize": "3.5.11", "global-modules": "1.0.0", "gzip-size": "3.0.0", "inquirer": "3.3.0", "is-root": "1.0.0", - "opn": "5.1.0", - "react-error-overlay": "3.0.0", + "opn": "5.2.0", + "react-error-overlay": "4.0.0", "recursive-readdir": "2.2.1", "shell-quote": "1.6.1", "sockjs-client": "1.1.4", @@ -9978,43 +11780,43 @@ } }, "react-docgen": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-2.19.0.tgz", - "integrity": "sha1-qeNWJ3qjH0LfFj8LSRfTsHeYX50=", + "version": "3.0.0-beta9", + "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-3.0.0-beta9.tgz", + "integrity": "sha512-3UqwxygAP/eZdDtOKum6vClKWUlceZ7RBVQ3Fe122l1WBYOqHcBzoUZIwN8feaLVo+s2eB/q+NkBfanLgvmt+w==", "dev": true, "requires": { "async": "2.6.0", "babel-runtime": "6.26.0", - "babylon": "5.8.38", + "babylon": "7.0.0-beta.31", "commander": "2.11.0", - "doctrine": "2.0.0", + "doctrine": "2.1.0", "node-dir": "0.1.17", - "recast": "0.12.8" + "recast": "0.12.9" }, "dependencies": { "babylon": { - "version": "5.8.38", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-5.8.38.tgz", - "integrity": "sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0=", + "version": "7.0.0-beta.31", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.31.tgz", + "integrity": "sha512-6lm2mV3S51yEnKmQQNnswoABL1U1H1KHoCCVwdwI3hvIv+W7ya4ki7Aw4o4KxtUHjNKkK5WpZb22rrMMOcJXJQ==", "dev": true } } }, "react-dom": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.3.1.tgz", - "integrity": "sha512-2Infg89vzahq8nfVi1GkjPqq0vrBvf0f3T0+dTtyjq4f6HKOqKixAK25Vr593O3QTx4kw/vmUtAJwerlevNWOA==", + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.3.2.tgz", + "integrity": "sha512-MMPko3zYncNrz/7gG17wJWUREZDvskZHXOwbttzl0F0L3wDmToyuETuo/r8Y5yvDejwYcRyWI1lvVBjLJWFwKA==", "requires": { "fbjs": "0.8.16", "loose-envify": "1.3.1", "object-assign": "4.1.1", - "prop-types": "15.6.0" + "prop-types": "15.6.1" } }, "react-error-overlay": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-3.0.0.tgz", - "integrity": "sha512-XzgvowFrwDo6TWcpJ/WTiarb9UI6lhA4PMzS7n1joK3sHfBBBOQHUc0U4u57D6DWO9vHv6lVSWx2Q/Ymfyv4hw==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-4.0.0.tgz", + "integrity": "sha512-FlsPxavEyMuR6TjVbSSywovXSEyOg6ZDj5+Z8nbsRl9EkOzAhEIcS+GLoQDC5fz/t9suhUXWmUrOBrgeUvrMxw==" }, "react-event-listener": { "version": "0.5.1", @@ -10023,17 +11825,29 @@ "requires": { "babel-runtime": "6.26.0", "fbjs": "0.8.16", - "prop-types": "15.6.0", + "prop-types": "15.6.1", "warning": "3.0.0" } }, + "react-fuzzy": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/react-fuzzy/-/react-fuzzy-0.5.2.tgz", + "integrity": "sha512-qIZZxaCheb/HhcBi5fABbiCFg85+K5r1TCps1D4uaL0LAMMD/1zm/x1/kNR130Tx7nnY9V7mbFyY0DquPYeLAw==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "classnames": "2.2.5", + "fuse.js": "3.2.0", + "prop-types": "15.6.1" + } + }, "react-ga": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/react-ga/-/react-ga-2.4.1.tgz", - "integrity": "sha512-hjn2SRdhB3JrdWvodNVegjxLi6xiQyCEELVTvutSB/g57GmfGqSxIvKmxgEN3c6Rjp21rxOYou6TrwzTE288Ig==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/react-ga/-/react-ga-2.5.0.tgz", + "integrity": "sha512-pnkoXO9YOHOC9+0qCD3HhmYJrKvhU0iEvNpS2IKRHb9BBrpwCjk23/gaClnj4lewwIKsD2PYZ74YpHiNQ4WRNg==", "requires": { - "prop-types": "15.6.0", - "react": "16.3.1" + "prop-types": "15.6.1", + "react": "16.3.2" } }, "react-helmet": { @@ -10043,17 +11857,17 @@ "requires": { "deep-equal": "1.0.1", "object-assign": "4.1.1", - "prop-types": "15.6.0", + "prop-types": "15.6.1", "react-side-effect": "1.1.3" } }, "react-html-attributes": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/react-html-attributes/-/react-html-attributes-1.4.1.tgz", - "integrity": "sha1-l7XscQ2miDNZjIvm+JrENiFoQKU=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/react-html-attributes/-/react-html-attributes-1.4.2.tgz", + "integrity": "sha1-DSzPE0/Hmy01Q4N9wVkdMre5A/k=", "dev": true, "requires": { - "html-element-attributes": "1.3.0" + "html-element-attributes": "1.3.1" } }, "react-icon-base": { @@ -10072,78 +11886,73 @@ } }, "react-inspector": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-2.2.1.tgz", - "integrity": "sha512-aXrxJTfriJtZtv/+A9cFIOpfbt711yCD1Ht3fSn3JyuDaAt1+eLtb01R5d/8gGpyquOVWn/d+eM1VPqFXS7UZA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-2.3.0.tgz", + "integrity": "sha512-aIcbWb0fKFhEMB+RadoOYawlr1JoMMfrQ1oRgPUG/f/e4zERVJ6nYcIaQmrQmdHCZ63BOqe2cEkoeY0kyLBzNg==", "dev": true, "requires": { "babel-runtime": "6.26.0", "is-dom": "1.0.9" } }, - "react-komposer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-komposer/-/react-komposer-2.0.0.tgz", - "integrity": "sha1-uWRzgBSptK7klKg8C1uDPWYHKpA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "hoist-non-react-statics": "1.2.0", - "lodash.pick": "4.4.0", - "react-stubber": "1.0.0", - "shallowequal": "0.2.2" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", - "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=", - "dev": true - }, - "shallowequal": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-0.2.2.tgz", - "integrity": "sha1-HjL9W8q2rWiKSBLLDMBO/HXHAU4=", - "dev": true, - "requires": { - "lodash.keys": "3.1.2" - } - } - } + "react-is": { + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.3.2.tgz", + "integrity": "sha512-ybEM7YOr4yBgFd6w8dJqwxegqZGJNBZl6U27HnGKuTZmDvVrD5quWOK/wAnMywiZzW+Qsk+l4X2c70+thp/A8Q==" + }, + "react-lifecycles-compat": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.2.tgz", + "integrity": "sha512-pbZOSMVVkvppW7XRn9fcHK5OgEDnYLwMva7P6TgS44/SN9uGGjfh3Z1c8tomO+y4IsHQ6Fsz2EGwmE7sMeNZgQ==", + "dev": true }, "react-markdown": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-3.0.0.tgz", - "integrity": "sha512-HCS3KRSVFJusKjEa9jHAHgjv6zcMzELsWEBlvWLodV8amML/bANM0lFuYPHURZKv3+fOVpUq4Vb71Yij1Wv5fg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-3.3.0.tgz", + "integrity": "sha512-eVpQZ8D7NBnms95OhpIrNj6QSuiguSLm27hh1gOeBKZzap6Cr9gl+RXAzpEQpljIqopF6FS0EVkSDCiJEAp77A==", "requires": { - "prop-types": "15.6.0", - "remark-parse": "4.0.0", + "prop-types": "15.6.1", + "remark-parse": "5.0.0", "unified": "6.1.6", - "unist-util-visit": "1.2.0", + "unist-util-visit": "1.3.0", "xtend": "4.0.1" } }, "react-modal": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-2.4.1.tgz", - "integrity": "sha512-3WQCn3xqkbEUvxRUO3nkeqxMNgt1F4CyEU3BiUIrg7C71tnqjQIuSE7+JXp85yFl8X1iRTJouySNpwNqv4kiWg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.4.2.tgz", + "integrity": "sha512-4TC3RZeKPQwgX/1q9scgOIlR8dXBVqB1lMfpBpxRDrK6fqh5zu7IbvSqPArPh+ED/4lRQwezidE7Eex4q/t73Q==", "dev": true, "requires": { "exenv": "1.2.2", - "prop-types": "15.6.0" + "prop-types": "15.6.1", + "react-lifecycles-compat": "3.0.2", + "warning": "3.0.0" } }, "react-redux": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.6.tgz", - "integrity": "sha512-8taaaGu+J7PMJQDJrk/xiWEYQmdo3mkXw6wPr3K3LxvXis3Fymiq7c13S+Tpls/AyNUAsoONkU81AP0RA6y6Vw==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz", + "integrity": "sha512-5VI8EV5hdgNgyjfmWzBbdrqUkrVRKlyTKk1sGH3jzM2M2Mhj/seQgPXaz6gVAj2lz/nz688AdTqMO18Lr24Zhg==", "requires": { - "hoist-non-react-statics": "2.3.1", + "hoist-non-react-statics": "2.5.0", "invariant": "2.2.2", - "lodash": "4.17.4", - "lodash-es": "4.17.4", + "lodash": "4.17.5", + "lodash-es": "4.17.8", "loose-envify": "1.3.1", - "prop-types": "15.6.0" + "prop-types": "15.6.1" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz", + "integrity": "sha512-6Bl6XsDT1ntE0lHbIhr4Kp2PGcleGZ66qu5Jqk8lc0Xc/IeG6gVLmwUGs/K0Us+L8VWoKgj0uWdPMataOsm31w==" + }, + "lodash-es": { + "version": "4.17.8", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.8.tgz", + "integrity": "sha512-I9mjAxengFAleSThFhhAhvba6fsO0hunb9/0sQ6qQihSZsJRBofv2rYH58WXaOb/O++eUmYpCLywSQ22GfU+sA==" + } } }, "react-resize-detector": { @@ -10151,7 +11960,7 @@ "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-1.1.0.tgz", "integrity": "sha512-68KVcQlhcWQGXMAie82YueCa4f4yqwEoiQbVyYlSgJEin1zMtNBLLeU/+6FLNf1TTgjwSfpbMTJTw/uU0HNgtQ==", "requires": { - "prop-types": "15.6.0" + "prop-types": "15.6.1" } }, "react-router": { @@ -10164,7 +11973,7 @@ "invariant": "2.2.2", "loose-envify": "1.3.1", "path-to-regexp": "1.7.0", - "prop-types": "15.6.0", + "prop-types": "15.6.1", "warning": "3.0.0" } }, @@ -10176,29 +11985,30 @@ "history": "4.7.2", "invariant": "2.2.2", "loose-envify": "1.3.1", - "prop-types": "15.6.0", + "prop-types": "15.6.1", "react-router": "4.2.0", "warning": "3.0.0" } }, "react-scripts": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-1.0.17.tgz", - "integrity": "sha512-tf2kBx230iUSxqJZxboYINlIOKryW+CC7oVgQ4rguNLmcPgWvnnCM8huAgCgL2yuqDd0qQvnI5sRCmc+0TQ5zw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-1.1.4.tgz", + "integrity": "sha512-UVZIujEIT9BGbx+NGvyfS92eOrNIIpqqFi1FP7a0O9l94A/XV7bhPk70SfDKaXZouCX81tFdXo0948DjhCEgGw==", "requires": { "autoprefixer": "7.1.6", "babel-core": "6.26.0", "babel-eslint": "7.2.3", "babel-jest": "20.0.3", "babel-loader": "7.1.2", - "babel-preset-react-app": "3.1.0", + "babel-preset-react-app": "3.1.1", "babel-runtime": "6.26.0", "case-sensitive-paths-webpack-plugin": "2.1.1", "chalk": "1.1.3", "css-loader": "0.28.7", "dotenv": "4.0.0", + "dotenv-expand": "4.2.0", "eslint": "4.10.0", - "eslint-config-react-app": "2.0.1", + "eslint-config-react-app": "2.1.0", "eslint-loader": "1.9.0", "eslint-plugin-flowtype": "2.39.1", "eslint-plugin-import": "2.8.0", @@ -10207,7 +12017,7 @@ "extract-text-webpack-plugin": "3.0.2", "file-loader": "1.1.5", "fs-extra": "3.0.1", - "fsevents": "1.1.2", + "fsevents": "1.2.0", "html-webpack-plugin": "2.29.0", "jest": "20.0.4", "object-assign": "4.1.1", @@ -10215,7 +12025,8 @@ "postcss-loader": "2.0.8", "promise": "8.0.1", "raf": "3.4.0", - "react-dev-utils": "4.2.1", + "react-dev-utils": "5.0.1", + "resolve": "1.6.0", "style-loader": "0.19.0", "sw-precache-webpack-plugin": "0.11.4", "url-loader": "0.6.2", @@ -10225,26 +12036,109 @@ "whatwg-fetch": "2.0.3" }, "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=" + }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, + "autoprefixer": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.1.6.tgz", + "integrity": "sha512-C9yv/UF3X+eJTi/zvfxuyfxmLibYrntpF3qoJYrMeQwgUJOZrZvpJiMG2FMQ3qnhWtF/be4pYONBBw95ZGe3vA==", + "requires": { + "browserslist": "2.11.3", + "caniuse-lite": "1.0.30000830", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "6.0.21", + "postcss-value-parser": "3.3.0" + } + }, + "babel-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz", + "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==", + "requires": { + "find-cache-dir": "1.0.0", + "loader-utils": "1.1.0", + "mkdirp": "0.5.1" + } + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.1.tgz", + "integrity": "sha1-PSnO2MHxJL9vU4Rvs/WJRzH9yQk=" + }, + "css-loader": { + "version": "0.28.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.7.tgz", + "integrity": "sha512-GxMpax8a/VgcfRrVy0gXD6yLd5ePYbXX/5zGgTVYp4wXtJklS8Z2VaUArJgc//f6/Dzil7BaJObdSv8eKKCPgg==", + "requires": { + "babel-code-frame": "6.26.0", + "css-selector-tokenizer": "0.7.0", + "cssnano": "3.10.0", + "icss-utils": "2.1.0", + "loader-utils": "1.1.0", + "lodash.camelcase": "4.3.0", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-modules-extract-imports": "1.2.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0", + "postcss-value-parser": "3.3.0", + "source-list-map": "2.0.0" + }, + "dependencies": { + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + } + } + }, + "dotenv": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", + "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=" + }, "eslint": { "version": "4.10.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.10.0.tgz", "integrity": "sha512-MMVl8P/dYUFZEvolL8PYt7qc5LNdS2lwheq9BYa5Y07FblhcZqFyaUqlS8TW5QITGex21tV4Lk0a3fK8lsJIkA==", "requires": { - "ajv": "5.3.0", + "ajv": "5.5.2", "babel-code-frame": "6.26.0", - "chalk": "2.3.0", - "concat-stream": "1.6.0", + "chalk": "2.4.0", + "concat-stream": "1.6.2", "cross-spawn": "5.1.0", "debug": "3.1.0", - "doctrine": "2.0.0", + "doctrine": "2.1.0", "eslint-scope": "3.7.1", - "espree": "3.5.2", - "esquery": "1.0.0", + "espree": "3.5.4", + "esquery": "1.0.1", "estraverse": "4.2.0", "esutils": "2.0.2", "file-entry-cache": "2.0.0", @@ -10254,11 +12148,11 @@ "ignore": "3.3.7", "imurmurhash": "0.1.4", "inquirer": "3.3.0", - "is-resolvable": "1.0.0", - "js-yaml": "3.10.0", + "is-resolvable": "1.1.0", + "js-yaml": "3.11.0", "json-stable-stringify": "1.0.1", "levn": "0.3.0", - "lodash": "4.17.4", + "lodash": "4.17.5", "minimatch": "3.0.4", "mkdirp": "0.5.1", "natural-compare": "1.4.0", @@ -10267,7 +12161,7 @@ "pluralize": "7.0.0", "progress": "2.0.0", "require-uncached": "1.0.3", - "semver": "5.4.1", + "semver": "5.5.0", "strip-ansi": "4.0.0", "strip-json-comments": "2.0.1", "table": "4.0.2", @@ -10275,837 +12169,157 @@ }, "dependencies": { "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "supports-color": "5.4.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "3.0.0" } } } }, - "eslint-plugin-jsx-a11y": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz", - "integrity": "sha512-5I9SpoP7gT4wBFOtXT8/tXNPYohHBVfyVfO17vkbC7r9kEIxYJF12D3pKqhk8+xnk12rfxKClS3WCFpVckFTPQ==", - "requires": { - "aria-query": "0.7.1", - "array-includes": "3.0.3", - "ast-types-flow": "0.0.7", - "axobject-query": "0.1.0", - "damerau-levenshtein": "1.0.4", - "emoji-regex": "6.5.1", - "jsx-ast-utils": "1.4.1" - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" - }, - "fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "3.0.1", - "universalify": "0.1.1" - } - }, - "fsevents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", - "optional": true, + "eslint-plugin-import": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz", + "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==", "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.6.36" + "builtin-modules": "1.1.1", + "contains-path": "0.1.0", + "debug": "2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "0.3.2", + "eslint-module-utils": "2.2.0", + "has": "1.0.1", + "lodash.cond": "4.5.2", + "minimatch": "3.0.4", + "read-pkg-up": "2.0.0" }, "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "optional": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "optional": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.36", - "bundled": true, - "optional": true, - "requires": { - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "optional": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "optional": true, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "extsprintf": "1.0.2" + "ms": "2.0.0" } }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "optional": true, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "requires": { - "string-width": "1.0.2" + "esutils": "2.0.2", + "isarray": "1.0.0" + } + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz", + "integrity": "sha512-5I9SpoP7gT4wBFOtXT8/tXNPYohHBVfyVfO17vkbC7r9kEIxYJF12D3pKqhk8+xnk12rfxKClS3WCFpVckFTPQ==", + "requires": { + "aria-query": "0.7.1", + "array-includes": "3.0.3", + "ast-types-flow": "0.0.7", + "axobject-query": "0.1.0", + "damerau-levenshtein": "1.0.4", + "emoji-regex": "6.5.1", + "jsx-ast-utils": "1.4.1" + } + }, + "eslint-plugin-react": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz", + "integrity": "sha512-tvjU9u3VqmW2vVuYnE8Qptq+6ji4JltjOjJ9u7VAOxVYkUkyBZWRvNYKbDv5fN+L6wiA+4we9+qQahZ0m63XEA==", + "requires": { + "doctrine": "2.1.0", + "has": "1.0.1", + "jsx-ast-utils": "2.0.1", + "prop-types": "15.6.1" + }, + "dependencies": { + "jsx-ast-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", + "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", + "requires": { + "array-includes": "3.0.3" + } + } + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" + }, + "file-loader": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.5.tgz", + "integrity": "sha512-RzGHDatcVNpGISTvCpfUfOGpYuSR7HSsSg87ki+wF6rw1Hm0RALPTiAdsxAq1UwLf0RRhbe22/eHK6nhXspiOQ==", + "requires": { + "loader-utils": "1.1.0", + "schema-utils": "0.3.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "html-webpack-plugin": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.29.0.tgz", + "integrity": "sha1-6Yf0IYU9O2k4yMTIFxhC5f0XryM=", + "requires": { + "bluebird": "3.5.1", + "html-minifier": "3.5.15", + "loader-utils": "0.2.17", + "lodash": "4.17.5", + "pretty-error": "2.1.1", + "toposort": "1.0.6" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true } } }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", "requires": { - "argparse": "1.0.9", + "argparse": "1.0.10", "esprima": "4.0.0" } }, @@ -11114,6 +12328,25 @@ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=" }, + "postcss-flexbugs-fixes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-3.2.0.tgz", + "integrity": "sha512-0AuD9HG1Ey3/3nqPWu9yqf7rL0KCPu5VgjDsjf5mzEcuo9H/z8nco/fljKgjsOUrZypa95MI0kS4xBZeBzz2lw==", + "requires": { + "postcss": "6.0.21" + } + }, + "postcss-loader": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.0.8.tgz", + "integrity": "sha512-KtXBiQ/r/WYW8LxTSJK7h8wLqvCMSub/BqmRnud/Mu8RzwflW9cmXxwsMwbn15TNv287Hcufdb3ZSs7xHKnG8Q==", + "requires": { + "loader-utils": "1.1.0", + "postcss": "6.0.21", + "postcss-load-config": "1.2.0", + "schema-utils": "0.3.0" + } + }, "promise": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.1.tgz", @@ -11122,6 +12355,27 @@ "asap": "2.0.6" } }, + "resolve": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.6.0.tgz", + "integrity": "sha512-mw7JQNu5ExIkcw4LPih0owX/TZXjD/ZUF/ZQ/pDnkw3ZKhDcZZw5klmBlj6gVMwjQ3Pz5Jgu7F3d0jcDVuEWdw==", + "requires": { + "path-parse": "1.0.5" + } + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "requires": { + "ajv": "5.5.2" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -11129,6 +12383,77 @@ "requires": { "ansi-regex": "3.0.0" } + }, + "style-loader": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.19.0.tgz", + "integrity": "sha512-9mx9sC9nX1dgP96MZOODpGC6l1RzQBITI2D5WJhu+wnbrSYVKLGuy14XJSLVQih/0GFrPpjelt+s//VcZQ2Evw==", + "requires": { + "loader-utils": "1.1.0", + "schema-utils": "0.3.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "requires": { + "source-map": "0.5.7", + "uglify-js": "2.8.29", + "webpack-sources": "1.1.0" + } + }, + "webpack": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.8.1.tgz", + "integrity": "sha512-5ZXLWWsMqHKFr5y0N3Eo5IIisxeEeRAajNq4mELb/WELOR7srdbQk2N5XiyNy2A/AgvlR3AmeBCZJW8lHrolbw==", + "requires": { + "acorn": "5.5.3", + "acorn-dynamic-import": "2.0.2", + "ajv": "5.5.2", + "ajv-keywords": "2.1.1", + "async": "2.6.0", + "enhanced-resolve": "3.4.1", + "escope": "3.6.0", + "interpret": "1.1.0", + "json-loader": "0.5.7", + "json5": "0.5.1", + "loader-runner": "2.3.0", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "mkdirp": "0.5.1", + "node-libs-browser": "2.1.0", + "source-map": "0.5.7", + "supports-color": "4.5.0", + "tapable": "0.2.8", + "uglifyjs-webpack-plugin": "0.4.6", + "watchpack": "1.5.0", + "webpack-sources": "1.1.0", + "yargs": "8.0.2" + }, + "dependencies": { + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "2.0.0" + } + } + } } } }, @@ -11141,31 +12466,13 @@ "shallowequal": "1.0.2" } }, - "react-simple-di": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/react-simple-di/-/react-simple-di-1.2.0.tgz", - "integrity": "sha1-3eDlv2ifOR7yqwLJBDshP+I5xtA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "hoist-non-react-statics": "1.2.0" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", - "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=", - "dev": true - } - } - }, "react-smooth": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-1.0.0.tgz", "integrity": "sha1-sp2+vd3bBtIbWwiWIWf7nqwYl9g=", "requires": { - "lodash": "4.17.4", - "prop-types": "15.6.0", + "lodash": "4.17.5", + "prop-types": "15.6.1", "raf": "3.4.0", "react-transition-group": "2.3.1" }, @@ -11200,34 +12507,32 @@ } }, "react-snap": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/react-snap/-/react-snap-1.11.5.tgz", - "integrity": "sha512-XBwpTGM5BiUukj8S41eggU7b2QmkAXb6qhkzemAyfVm0mswWVRFK0QU1T5e8YYiuKlL5w7Juz8698la4eV/BCA==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/react-snap/-/react-snap-1.12.2.tgz", + "integrity": "sha512-aZ7J9udQ/lGqPfw2XsAVwcexXkcWsBWewCNIj0m9irv5Yb1QC54AwiftgErAjJAcDJBeqYkOwcuNRN1xqNwgIw==", "dev": true, "requires": { - "clean-css": "4.1.9", - "express": "4.16.2", + "clean-css": "4.1.11", + "express": "4.16.3", "express-history-api-fallback": "2.2.1", "highland": "2.13.0", - "html-minifier": "3.5.6", + "html-minifier": "3.5.15", "minimalcss": "0.7.5", "mkdirp": "0.5.1", - "puppeteer": "1.2.0", - "serve-static": "1.13.1", + "puppeteer": "1.3.0", + "serve-static": "1.13.2", "sourcemapped-stacktrace-node": "2.1.6" } }, "react-split-pane": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/react-split-pane/-/react-split-pane-0.1.68.tgz", - "integrity": "sha512-63CdXX4YRlt2iXM3EbThNSyI1JkCUH3H/MC2TnZT8wwHN3J1mam0FqEa40dTdQl/oBGBuzcuJ7X1Z9+8FMSOMg==", + "version": "0.1.77", + "resolved": "https://registry.npmjs.org/react-split-pane/-/react-split-pane-0.1.77.tgz", + "integrity": "sha512-xq0PPsbkNI9xEd6yTrGPr7hzf6XfIgnsxuUEdRJELq+kLPHMsO3ymFCjhiYP35wlDPn9W46+rHDsJd7LFYteMw==", "dev": true, "requires": { - "@types/inline-style-prefixer": "3.0.1", - "@types/react": "16.0.20", "inline-style-prefixer": "3.0.8", - "prop-types": "15.6.0", - "react-style-proptype": "3.1.0" + "prop-types": "15.6.1", + "react-style-proptype": "3.2.1" } }, "react-stripe-checkout": { @@ -11235,31 +12540,22 @@ "resolved": "https://registry.npmjs.org/react-stripe-checkout/-/react-stripe-checkout-2.6.3.tgz", "integrity": "sha1-MXOocLBOWjwyGgbSTNU8YDARHEU=" }, - "react-stubber": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/react-stubber/-/react-stubber-1.0.0.tgz", - "integrity": "sha1-Qe4srHLU1P1wpjiW2pjhNzm4Rig=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, "react-style-proptype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/react-style-proptype/-/react-style-proptype-3.1.0.tgz", - "integrity": "sha512-e4lOMjF4f8Pp/jdO9myNzDvSAx1aG5r0olziD64Bgk40LN8LxidRCgnKeI2RiKrqYD6j2Z8ByXoUbwV+/mwpwg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/react-style-proptype/-/react-style-proptype-3.2.1.tgz", + "integrity": "sha512-Z02QsgmdZ4wYNxJsHhNGGZsIF8+MO93fYmdPaC+ljdqX3rq8tl/fSMXOGBbofGJNzq5W/2LFcONllmV6vzyYHA==", "dev": true, "requires": { - "prop-types": "15.6.0" + "prop-types": "15.6.1" } }, "react-tooltip": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-3.4.0.tgz", - "integrity": "sha1-A38495fD5rG1jSU0zMjCx2r09S0=", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-3.5.0.tgz", + "integrity": "sha512-aSfzJVhZe5QkgdbR3o1m7ct4HXBXqPkMQFbYzpzwHxS7d1y4lfM2+bd9dTk7vS7b0jYSyjoNXU1td22TahenLA==", "requires": { "classnames": "2.2.5", - "prop-types": "15.6.0" + "prop-types": "15.6.1" } }, "react-transition-group": { @@ -11270,7 +12566,7 @@ "chain-function": "1.0.0", "dom-helpers": "3.2.1", "loose-envify": "1.3.1", - "prop-types": "15.6.0", + "prop-types": "15.6.1", "warning": "3.0.0" } }, @@ -11282,10 +12578,10 @@ "requires": { "babel-runtime": "6.26.0", "deep-equal": "1.0.1", - "prop-types": "15.6.0", + "prop-types": "15.6.1", "radium": "0.19.6", "shallowequal": "0.2.2", - "velocity-react": "1.3.3" + "velocity-react": "1.4.1" }, "dependencies": { "shallowequal": { @@ -11299,64 +12595,36 @@ } } }, - "read-all-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", - "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", - "requires": { - "pinkie-promise": "2.0.1", - "readable-stream": "2.3.3" - } - }, "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "requires": { - "load-json-file": "1.1.0", + "load-json-file": "2.0.0", "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "path-type": "2.0.0" } }, "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "2.0.1" - } - } + "find-up": "2.1.0", + "read-pkg": "2.0.0" } }, "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", - "process-nextick-args": "1.0.7", + "process-nextick-args": "2.0.0", "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", + "string_decoder": "1.1.1", "util-deprecate": "1.0.2" }, "dependencies": { @@ -11374,18 +12642,18 @@ "requires": { "graceful-fs": "4.1.11", "minimatch": "3.0.4", - "readable-stream": "2.3.3", + "readable-stream": "2.3.6", "set-immediate-shim": "1.0.1" } }, "recast": { - "version": "0.12.8", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.8.tgz", - "integrity": "sha512-sqhh1Rn20bAqVMtXzURPM1Py6sAfwJtN9LMWd11pZBJsbD6SO7oxgwZiUVpfUnBDClwrjB88a/hkP/SWNkcaCA==", + "version": "0.12.9", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.9.tgz", + "integrity": "sha512-y7ANxCWmMW8xLOaiopiRDlyjQ9ajKRENBH+2wjntIbk3A6ZR1+BLQttkmSHMY7Arl+AAZFwJ10grg2T6f1WI8A==", "dev": true, "requires": { - "ast-types": "0.9.14", - "core-js": "2.5.2", + "ast-types": "0.10.1", + "core-js": "2.5.5", "esprima": "4.0.0", "private": "0.1.8", "source-map": "0.6.1" @@ -11409,8 +12677,8 @@ "d3-interpolate": "1.1.6", "d3-scale": "1.0.6", "d3-shape": "1.2.0", - "lodash": "4.17.4", - "prop-types": "15.6.0", + "lodash": "4.17.5", + "prop-types": "15.6.1", "react-resize-detector": "1.1.0", "react-smooth": "1.0.0", "recharts-scale": "0.3.2", @@ -11435,7 +12703,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.5.0" + "resolve": "1.7.1" } }, "recompose": { @@ -11462,7 +12730,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "1.1.11" } } } @@ -11509,20 +12777,25 @@ } }, "redux": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", - "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.0.tgz", + "integrity": "sha512-NnnHF0h0WVE/hXyrB6OlX67LYRuaf/rJcbWvnHHEPCF/Xa/AZpwhs/20WyqzQae5x4SD2F9nPObgBh2rxAgLiA==", "requires": { - "lodash": "4.17.4", - "lodash-es": "4.17.4", "loose-envify": "1.3.1", - "symbol-observable": "1.0.4" + "symbol-observable": "1.2.0" + }, + "dependencies": { + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + } } }, "redux-responsive": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/redux-responsive/-/redux-responsive-4.3.5.tgz", - "integrity": "sha512-yuIPTsdxsToK7L9clusG8MkAz67Bqh0OvSSh28bYg+B0zcH91qhcDvmDt3sMOLBTgAJbMVtRYGqgnrCZDBT1Ug==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/redux-responsive/-/redux-responsive-4.3.6.tgz", + "integrity": "sha512-OQrQ+md+Ty+TbelzvwvTXqWLRhah9rYOfuL/A5GkB2qCnHyiYI/RZJfQ93Pd68XzZuZzLBvlouQVGR19rw9kZA==", "requires": { "mediaquery": "0.0.3" } @@ -11560,6 +12833,21 @@ "is-equal-shallow": "0.1.3" } }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, "regexpu-core": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", @@ -11571,11 +12859,11 @@ } }, "registry-auth-token": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", - "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", "requires": { - "rc": "1.2.2", + "rc": "1.2.6", "safe-buffer": "5.1.1" } }, @@ -11584,7 +12872,7 @@ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", "requires": { - "rc": "1.2.2" + "rc": "1.2.6" } }, "regjsgen": { @@ -11613,19 +12901,19 @@ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" }, "remark-parse": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-4.0.0.tgz", - "integrity": "sha512-XZgICP2gJ1MHU7+vQaRM+VA9HEL3X253uwUM/BGgx3iv6TH2B3bF3B8q00DKcyP9YrJV+/7WOWEWBFF/u8cIsw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz", + "integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==", "requires": { - "collapse-white-space": "1.0.3", - "is-alphabetical": "1.0.1", - "is-decimal": "1.0.1", - "is-whitespace-character": "1.0.1", + "collapse-white-space": "1.0.4", + "is-alphabetical": "1.0.2", + "is-decimal": "1.0.2", + "is-whitespace-character": "1.0.2", "is-word-character": "1.0.1", - "markdown-escapes": "1.0.1", + "markdown-escapes": "1.0.2", "parse-entities": "1.1.1", "repeat-string": "1.6.1", - "state-toggle": "1.0.0", + "state-toggle": "1.0.1", "trim": "0.0.1", "trim-trailing-lines": "1.1.0", "unherit": "1.1.0", @@ -11682,32 +12970,32 @@ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" }, "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "version": "2.85.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", + "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "requires": { "aws-sign2": "0.7.0", - "aws4": "1.6.0", + "aws4": "1.7.0", "caseless": "0.12.0", - "combined-stream": "1.0.5", + "combined-stream": "1.0.6", "extend": "3.0.1", "forever-agent": "0.6.1", - "form-data": "2.3.1", + "form-data": "2.3.2", "har-validator": "5.0.3", "hawk": "6.0.2", "http-signature": "1.2.0", "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", + "mime-types": "2.1.18", "oauth-sign": "0.8.2", "performance-now": "2.1.0", "qs": "6.5.1", "safe-buffer": "5.1.1", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", - "uuid": "3.1.0" + "uuid": "3.2.1" } }, "require-directory": { @@ -11745,9 +13033,9 @@ "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=" }, "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "requires": { "path-parse": "1.0.5" } @@ -11786,6 +13074,11 @@ "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -11795,6 +13088,11 @@ "signal-exit": "3.0.2" } }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", @@ -11812,11 +13110,11 @@ } }, "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "requires": { - "hash-base": "2.0.2", + "hash-base": "3.0.4", "inherits": "2.0.3" } }, @@ -11828,6 +13126,15 @@ "is-promise": "2.1.0" } }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "1.2.0" + } + }, "rx-lite": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", @@ -11846,6 +13153,14 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "0.1.15" + } + }, "sane": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/sane/-/sane-1.6.0.tgz", @@ -11860,6 +13175,38 @@ "watch": "0.10.0" }, "dependencies": { + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "1.1.0" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, "bser": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bser/-/bser-1.0.2.tgz", @@ -11868,6 +13215,22 @@ "node-int64": "0.4.0" } }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "1.0.0" + } + }, "fb-watchman": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-1.9.2.tgz", @@ -11876,6 +13239,39 @@ "bser": "1.0.2" } }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -11889,17 +13285,19 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "schema-utils": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", - "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "dev": true, "requires": { - "ajv": "5.3.0" + "ajv": "6.4.0", + "ajv-keywords": "3.1.0" } }, "seamless-immutable": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/seamless-immutable/-/seamless-immutable-7.1.2.tgz", - "integrity": "sha1-yHoeumdnoyRVMR12YArF7d6vu2k=" + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/seamless-immutable/-/seamless-immutable-7.1.3.tgz", + "integrity": "sha512-ODZawMxNf7n0Ufec01tvaD/CeeYEf9G+fjYc7Q6qAJytTWha1bdtNkjh4Oei1GeYakMF3S+mQMhZv9l7OtcORg==" }, "select-hose": { "version": "2.0.0", @@ -11907,44 +13305,44 @@ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" }, "selfsigned": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.1.tgz", - "integrity": "sha1-v4y3uDJWxFUeMTR8YxF3jbme7FI=", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.2.tgz", + "integrity": "sha1-tESVgNmZKbZbEKSDiTAaZZIIh1g=", "requires": { - "node-forge": "0.6.33" + "node-forge": "0.7.1" } }, "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" }, "semver-diff": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", "requires": { - "semver": "5.4.1" + "semver": "5.5.0" } }, "send": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", - "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "requires": { "debug": "2.6.9", - "depd": "1.1.1", + "depd": "1.1.2", "destroy": "1.0.4", - "encodeurl": "1.0.1", + "encodeurl": "1.0.2", "escape-html": "1.0.3", "etag": "1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.2", + "http-errors": "1.6.3", "mime": "1.4.1", "ms": "2.0.0", "on-finished": "2.3.0", "range-parser": "1.2.0", - "statuses": "1.3.1" + "statuses": "1.4.0" }, "dependencies": { "debug": { @@ -11957,17 +13355,31 @@ } } }, + "serialize-javascript": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", + "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", + "dev": true + }, "serve-favicon": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.4.5.tgz", - "integrity": "sha512-s7F8h2NrslMkG50KxvlGdj+ApSwaLex0vexuJ9iFf3GLTIp1ph/l1qZvRe9T9TJEYZgmq72ZwJ2VYiAEtChknw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", + "integrity": "sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=", "dev": true, "requires": { "etag": "1.8.1", "fresh": "0.5.2", - "ms": "2.0.0", + "ms": "2.1.1", "parseurl": "1.3.2", "safe-buffer": "5.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } } }, "serve-index": { @@ -11975,12 +13387,12 @@ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "requires": { - "accepts": "1.3.4", + "accepts": "1.3.5", "batch": "0.6.1", "debug": "2.6.9", "escape-html": "1.0.3", - "http-errors": "1.6.2", - "mime-types": "2.1.17", + "http-errors": "1.6.3", + "mime-types": "2.1.18", "parseurl": "1.3.2" }, "dependencies": { @@ -11995,14 +13407,14 @@ } }, "serve-static": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", - "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "requires": { - "encodeurl": "1.0.1", + "encodeurl": "1.0.2", "escape-html": "1.0.3", "parseurl": "1.3.2", - "send": "0.16.1" + "send": "0.16.2" } }, "serviceworker-cache-polyfill": { @@ -12020,6 +13432,27 @@ "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -12031,9 +13464,9 @@ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "sha.js": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", - "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "requires": { "inherits": "2.0.3", "safe-buffer": "5.1.1" @@ -12069,13 +13502,13 @@ } }, "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.1.tgz", + "integrity": "sha512-YA/iYtZpzFe5HyWVGrb02FjPxc4EMCfpoU/Phg9fQoyMC72u9598OUBrsU8IrtwAKG0tO8IYaqbaLIw+k3IRGA==", "dev": true, "requires": { "glob": "7.1.2", - "interpret": "1.0.4", + "interpret": "1.1.0", "rechoir": "0.6.2" } }, @@ -12111,19 +13544,126 @@ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "requires": { "is-fullwidth-code-point": "2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + } } }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.1", + "use": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "3.2.2" + } }, "sntp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "requires": { - "hoek": "4.2.0" + "hoek": "4.2.1" } }, "sockjs": { @@ -12160,7 +13700,7 @@ "faye-websocket": "0.11.1", "inherits": "2.0.3", "json3": "3.3.2", - "url-parse": "1.2.0" + "url-parse": "1.4.0" }, "dependencies": { "debug": { @@ -12191,6 +13731,18 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, + "source-map-resolve": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", + "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "requires": { + "atob": "2.1.0", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, "source-map-support": { "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", @@ -12206,34 +13758,49 @@ } } }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, "sourcemapped-stacktrace-node": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/sourcemapped-stacktrace-node/-/sourcemapped-stacktrace-node-2.1.6.tgz", "integrity": "sha512-wuBM/n7R0iXqiXrsR5qI3CUBwuRQYxivCCuWFTjMNUhj9Tse9iG4NEx8OXHQQJZkI3A9naAiVYLh0lRSzMpN/A==", "dev": true, "requires": { - "es6-promise": "4.1.1", + "es6-promise": "4.2.4", "isomorphic-fetch": "2.2.1", "source-map": "0.6.1" } }, "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "requires": { - "spdx-license-ids": "1.2.2" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" } }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" + }, "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } }, "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" }, "spdy": { "version": "3.4.7", @@ -12245,7 +13812,7 @@ "http-deceiver": "1.2.7", "safe-buffer": "5.1.1", "select-hose": "2.0.0", - "spdy-transport": "2.0.20" + "spdy-transport": "2.1.0" }, "dependencies": { "debug": { @@ -12259,17 +13826,17 @@ } }, "spdy-transport": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", - "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.0.tgz", + "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", "requires": { "debug": "2.6.9", "detect-node": "2.0.3", "hpack.js": "2.1.6", - "obuf": "1.1.1", - "readable-stream": "2.3.3", + "obuf": "1.1.2", + "readable-stream": "2.3.6", "safe-buffer": "5.1.1", - "wbuf": "1.7.2" + "wbuf": "1.7.3" }, "dependencies": { "debug": { @@ -12282,15 +13849,23 @@ } } }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "3.0.2" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "requires": { "asn1": "0.2.3", "assert-plus": "1.0.0", @@ -12302,15 +13877,43 @@ "tweetnacl": "0.14.5" } }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, "state-toggle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.0.tgz", - "integrity": "sha1-0g+aYWu08MO5i5GSLSW2QKorxCU=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.1.tgz", + "integrity": "sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } + } + } }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, "stream-browserify": { "version": "2.0.1", @@ -12318,21 +13921,37 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "requires": { "inherits": "2.0.3", - "readable-stream": "2.3.3" + "readable-stream": "2.3.6" + } + }, + "stream-each": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" } }, "stream-http": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", - "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz", + "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", "requires": { "builtin-status-codes": "3.0.0", "inherits": "2.0.3", - "readable-stream": "2.3.3", + "readable-stream": "2.3.6", "to-arraybuffer": "1.0.1", "xtend": "4.0.1" } }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", @@ -12347,27 +13966,13 @@ } }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "3.0.0" - } - } + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "string.prototype.padend": { @@ -12393,9 +13998,9 @@ } }, "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "5.1.1" } @@ -12414,12 +14019,9 @@ } }, "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "0.2.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" }, "strip-eof": { "version": "1.0.0", @@ -12440,27 +14042,29 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "style-loader": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.19.0.tgz", - "integrity": "sha512-9mx9sC9nX1dgP96MZOODpGC6l1RzQBITI2D5WJhu+wnbrSYVKLGuy14XJSLVQih/0GFrPpjelt+s//VcZQ2Evw==", + "version": "0.20.3", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.20.3.tgz", + "integrity": "sha512-2I7AVP73MvK33U7B9TKlYZAqdROyMXDYSMvHLX43qy3GCOaJNiV6i0v/sv9idWIaQ42Yn2dNv79Q5mKXbKhAZg==", + "dev": true, "requires": { "loader-utils": "1.1.0", - "schema-utils": "0.3.0" + "schema-utils": "0.4.5" } }, "styled-components": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-3.1.6.tgz", - "integrity": "sha1-nEQxRvqCxmWan2TdSTvyICSANC4=", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-3.2.6.tgz", + "integrity": "sha1-mebnWnRr3t0pWhfgPdFJMFWhzDs=", "requires": { "buffer": "5.1.0", "css-to-react-native": "2.1.2", "fbjs": "0.8.16", - "hoist-non-react-statics": "1.2.0", + "hoist-non-react-statics": "2.5.0", "is-plain-object": "2.0.4", - "prop-types": "15.6.0", - "stylis": "3.4.10", - "stylis-rule-sheet": "0.0.7", + "prop-types": "15.6.1", + "react-is": "16.3.2", + "stylis": "3.5.0", + "stylis-rule-sheet": "0.0.10", "supports-color": "3.2.3" }, "dependencies": { @@ -12469,8 +14073,8 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8" + "base64-js": "1.3.0", + "ieee754": "1.1.11" } }, "has-flag": { @@ -12479,9 +14083,9 @@ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "hoist-non-react-statics": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", - "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz", + "integrity": "sha512-6Bl6XsDT1ntE0lHbIhr4Kp2PGcleGZ66qu5Jqk8lc0Xc/IeG6gVLmwUGs/K0Us+L8VWoKgj0uWdPMataOsm31w==" }, "supports-color": { "version": "3.2.3", @@ -12494,21 +14098,21 @@ } }, "stylis": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.4.10.tgz", - "integrity": "sha512-J7CXAfeyhjdgvdQMz2yy0gTDccq0nVmatx6IlX1je1kCqdNgk3npGOzX6qprEd2oHVv7IF5HXO08i6XFQs/JRA==" + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.0.tgz", + "integrity": "sha512-pP7yXN6dwMzAR29Q0mBrabPCe0/mNO1MSr93bhay+hcZondvMMTpeGyd8nbhYJdyperNT2DRxONQuUGcJr5iPw==" }, "stylis-rule-sheet": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.7.tgz", - "integrity": "sha512-qxzlUBO40tgcGMhYxk2gXAPcaZYpfCqHMoVHj92lFMyiFotcqaEl7Jb5eW1ccCanGwf1N9dVBKF9+i/gmDfzyQ==" + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", + "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==" }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "2.0.0" + "has-flag": "3.0.0" } }, "svg-tag-names": { @@ -12539,12 +14143,12 @@ } }, "sw-precache": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/sw-precache/-/sw-precache-5.2.0.tgz", - "integrity": "sha512-sKctdX+5hUxkqJ/1DM88ubQ+QRvyw7CnxWdk909N2DgvxMqc1gcQFrwL7zpVc87wFmCA/OvRQd0iMC2XdFopYg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/sw-precache/-/sw-precache-5.2.1.tgz", + "integrity": "sha512-8FAy+BP/FXE+ILfiVTt+GQJ6UEf4CVHD9OfhzH0JX+3zoy2uFk7Vn9EfXASOtVmmIVbL3jE/W8Z66VgPSZcMhw==", "requires": { "dom-urls": "1.1.0", - "es6-promise": "4.1.1", + "es6-promise": "4.2.4", "glob": "7.1.2", "lodash.defaults": "4.2.0", "lodash.template": "4.4.0", @@ -12552,7 +14156,7 @@ "mkdirp": "0.5.1", "pretty-bytes": "4.0.2", "sw-toolbox": "3.6.0", - "update-notifier": "1.0.3" + "update-notifier": "2.5.0" } }, "sw-precache-webpack-plugin": { @@ -12561,8 +14165,24 @@ "integrity": "sha1-ppUBflTu1XVVFJOlGdwdqNotxeA=", "requires": { "del": "2.2.2", - "sw-precache": "5.2.0", - "uglify-js": "3.1.8" + "sw-precache": "5.2.1", + "uglify-js": "3.3.22" + }, + "dependencies": { + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" + }, + "uglify-js": { + "version": "3.3.22", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.22.tgz", + "integrity": "sha512-tqw96rL6/BG+7LM5VItdhDjTQmL5zG/I0b2RqWytlgeHe2eydZHuBHdA9vuGpCDhH/ZskNGcqDhivoR2xt8RIw==", + "requires": { + "commander": "2.15.1", + "source-map": "0.6.1" + } + } } }, "sw-toolbox": { @@ -12589,22 +14209,65 @@ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", "requires": { - "ajv": "5.3.0", + "ajv": "5.5.2", "ajv-keywords": "2.1.1", - "chalk": "2.3.0", - "lodash": "4.17.4", + "chalk": "2.4.0", + "lodash": "4.17.5", "slice-ansi": "1.0.0", "string-width": "2.1.1" }, "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=" + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "supports-color": "5.4.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" } } } @@ -12614,16 +14277,92 @@ "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=" }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "requires": { + "execa": "0.7.0" + } + }, "test-exclude": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.1.1.tgz", - "integrity": "sha512-35+Asrsk3XHJDBgf/VRFexPgh3UyETv8IAn/LRTiZjVy6rjPVqdEk8dJcJYBzl1w0XCJM48lvTy8SfEsCWS4nA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.1.tgz", + "integrity": "sha512-qpqlP/8Zl+sosLxBcVKl9vYy26T9NPalxSzzCP/OY6K7j938ui2oKgo+kRZYfxAeIpLqpbVnsHq1tyV70E4lWQ==", "requires": { "arrify": "1.0.1", - "micromatch": "2.3.11", + "micromatch": "3.1.10", "object-assign": "4.1.1", "read-pkg-up": "1.0.1", "require-main-filename": "1.0.1" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "0.2.1" + } + } } }, "text-table": { @@ -12641,10 +14380,20 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.6", + "xtend": "4.0.1" + } + }, "thunky": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz", - "integrity": "sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz", + "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=" }, "time-stamp": { "version": "2.0.0", @@ -12652,14 +14401,14 @@ "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=" }, "timed-out": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", - "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" }, "timers-browserify": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", - "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "requires": { "setimmediate": "1.0.5" } @@ -12687,17 +14436,52 @@ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "3.2.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + }, "toposort": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz", "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=" }, "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { "punycode": "1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } } }, "tr46": { @@ -12726,14 +14510,9 @@ "integrity": "sha1-eu+7eAjfnWafbaLkOMrIxGradoQ=" }, "trough": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.1.tgz", - "integrity": "sha1-qf2LA5Swro//guBjOgo2zK1bX4Y=" - }, - "tryit": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", - "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.2.tgz", + "integrity": "sha512-FHkoUZvG6Egrv9XZAyYGKEyb1JMsFphgPjoczkZC2y6W93U1jswcVURB8MUvtsahEPEVACyxD47JAL63vF4JsQ==" }, "tty-browserify": { "version": "0.0.0", @@ -12763,12 +14542,12 @@ } }, "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.17" + "mime-types": "2.1.18" } }, "typedarray": { @@ -12782,28 +14561,13 @@ "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==" }, "uglify-js": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.8.tgz", - "integrity": "sha512-1lnTkrJWw6LJ7n43ZyYVXx0eN2PQh0c3Inb0nY/vj5fNfwykXQFif2kvNgm/Bf0ClLA8R6SKaMHFzo9io4Q+vg==", - "requires": { - "commander": "2.11.0", - "source-map": "0.6.1" - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "optional": true - }, - "uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "requires": { "source-map": "0.5.7", - "uglify-js": "2.8.29", - "webpack-sources": "1.0.2" + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" }, "dependencies": { "source-map": { @@ -12811,16 +14575,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - } - }, "yargs": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", @@ -12834,6 +14588,46 @@ } } }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "optional": true + }, + "uglifyjs-webpack-plugin": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.5.tgz", + "integrity": "sha512-hIQJ1yxAPhEA2yW/i7Fr+SXZVMp+VEI3d42RTHBgQd2yhp/1UdBcR3QEWPV5ahBxlqQDMEMTuTEvDHSFINfwSw==", + "dev": true, + "requires": { + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "schema-utils": "0.4.5", + "serialize-javascript": "1.5.0", + "source-map": "0.6.1", + "uglify-es": "3.3.9", + "webpack-sources": "1.1.0", + "worker-farm": "1.6.0" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "dev": true, + "requires": { + "commander": "2.13.0", + "source-map": "0.6.1" + } + } + } + }, "ultron": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", @@ -12854,15 +14648,47 @@ "resolved": "https://registry.npmjs.org/unified/-/unified-6.1.6.tgz", "integrity": "sha512-pW2f82bCIo2ifuIGYcV12fL96kMMYgw7JKVEgh7ODlrM9rj6vXSY3BV+H6lCcv1ksxynFf582hwWLnA1qRFy4w==", "requires": { - "bail": "1.0.2", + "bail": "1.0.3", "extend": "3.0.1", "is-plain-obj": "1.1.0", - "trough": "1.0.1", + "trough": "1.0.2", "vfile": "2.3.0", "x-is-function": "1.0.4", "x-is-string": "0.1.0" } }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, "uniq": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", @@ -12881,11 +14707,28 @@ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" }, + "unique-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "dev": true, + "requires": { + "unique-slug": "2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "dev": true, + "requires": { + "imurmurhash": "0.1.4" + } + }, "unique-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, "requires": { "crypto-random-string": "1.0.0" } @@ -12900,7 +14743,7 @@ "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.1.tgz", "integrity": "sha1-WoXBVV/BugwQG4ZwfRXlD6TIcbs=", "requires": { - "unist-util-visit": "1.2.0" + "unist-util-visit": "1.3.0" } }, "unist-util-stringify-position": { @@ -12909,9 +14752,9 @@ "integrity": "sha1-PMvcU2ee7W7PN3fdf14yKcG2qjw=" }, "unist-util-visit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.2.0.tgz", - "integrity": "sha512-lI+jyPlDztHZ2CJhUchcRMQ7MNc0yASgYFxwRTxs0EZ+9HbYFBLVGDJ2FchTBy+pra0O1LVEn0Wkgf19mDVDzw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.3.0.tgz", + "integrity": "sha512-9ntYcxPFtl44gnwXrQKZ5bMqXMY0ZHzUpqMFiU4zcc8mmf/jzYm8GhYgezuUlX4cJIM1zIDYaO6fG/fI+L6iiQ==", "requires": { "unist-util-is": "2.1.1" } @@ -12926,24 +14769,84 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + } + } + }, "unzip-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", - "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" + }, + "upath": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.4.tgz", + "integrity": "sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw==" }, "update-notifier": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-1.0.3.tgz", - "integrity": "sha1-j5LFFUgr1oMbfJMBPnD4dVLHz1o=", - "requires": { - "boxen": "0.6.0", - "chalk": "1.1.3", - "configstore": "2.1.0", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "requires": { + "boxen": "1.3.0", + "chalk": "2.4.0", + "configstore": "3.1.2", + "import-lazy": "2.1.0", + "is-ci": "1.1.0", + "is-installed-globally": "0.1.0", "is-npm": "1.0.0", - "latest-version": "2.0.0", - "lazy-req": "1.1.0", + "latest-version": "3.1.0", "semver-diff": "2.1.0", - "xdg-basedir": "2.0.0" + "xdg-basedir": "3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + } } }, "upper-case": { @@ -12951,10 +14854,24 @@ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" }, + "uri-js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz", + "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", + "dev": true, + "requires": { + "punycode": "2.1.0" + } + }, "urijs": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.0.tgz", - "integrity": "sha512-Qs2odXn0hST5VSPVjpi73CMqtbAoanahaqWBujGU+IyMrMqpWcIhDewxQRhCkmqYxuyvICDcSuLdv2O7ncWBGw==" + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.1.tgz", + "integrity": "sha512-xVrGVi94ueCJNrBSTjWqjvtgvl3cyOTThp2zaMaFNGp3F542TR6sM3f2o8RqZl+AwteClSVmoCyt0ka4RjQOQg==" + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" }, "url": { "version": "0.11.0", @@ -12980,21 +14897,42 @@ "loader-utils": "1.1.0", "mime": "1.4.1", "schema-utils": "0.3.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "requires": { + "ajv": "5.5.2" + } + } } }, "url-parse": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz", - "integrity": "sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.0.tgz", + "integrity": "sha512-ERuGxDiQ6Xw/agN4tuoCRbmwRuZP0cJ1lJxJubXr5Q/5cDa78+Dc4wfvtxzhzhkm5VvmW6Mf8EVj9SPGN4l8Lg==", "requires": { - "querystringify": "1.0.0", + "querystringify": "2.0.0", "requires-port": "1.0.0" }, "dependencies": { "querystringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", - "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.0.0.tgz", + "integrity": "sha512-eTPo5t/4bgaMNZxyjWx6N2a6AuE0mq51KWvpc7nU/MAqixcI6v6KrGUKES0HaomdnolQBBXU/++X6/QQ9KL4tw==" } } }, @@ -13006,6 +14944,21 @@ "prepend-http": "1.0.4" } }, + "use": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", @@ -13037,17 +14990,17 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" }, "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" } }, "value-equal": { @@ -13061,35 +15014,46 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "velocity-animate": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/velocity-animate/-/velocity-animate-1.5.0.tgz", - "integrity": "sha1-/Idx2N/hE2/wKnB+EPuwlXxLAw8=", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/velocity-animate/-/velocity-animate-1.5.1.tgz", + "integrity": "sha512-VJ3csMz5zP1ifkbBlsNYpxnoWkPHfVRQ8tUongS78W5DxSGHB68pjYHDTgUYBkVM7P/HpYdVukgVUFcxjr1gGg==", "dev": true }, "velocity-react": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/velocity-react/-/velocity-react-1.3.3.tgz", - "integrity": "sha1-1tRyds/Ivip1Yjh5sgFArFjBuCs=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/velocity-react/-/velocity-react-1.4.1.tgz", + "integrity": "sha512-ZyXBm+9C/6kNUNyc+aeNKEhtTu/Mn+OfpsNBGuTxU8S2DUcis/KQL0rTN6jWL+7ygdOrun18qhheNZTA7YERmg==", "dev": true, "requires": { - "lodash": "3.10.1", - "prop-types": "15.6.0", - "react-transition-group": "1.2.1", - "velocity-animate": "1.5.0" + "lodash": "4.17.5", + "prop-types": "15.6.1", + "react-transition-group": "2.3.1", + "velocity-animate": "1.5.1" }, "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dom-helpers": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.3.1.tgz", + "integrity": "sha512-2Sm+JaYn74OiTM2wHvxJOo3roiq/h25Yi69Fqk269cNUwIXsCvATB6CRSFC9Am/20G2b28hGv/+7NiWydIrPvg==", "dev": true + }, + "react-transition-group": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.3.1.tgz", + "integrity": "sha512-hu4/LAOFSKjWt1+1hgnOv3ldxmt6lvZGTWz4KUkFrqzXrNDIVSu6txIcPszw7PNduR8en9YTN55JLRyd/L1ZiQ==", + "dev": true, + "requires": { + "dom-helpers": "3.3.1", + "loose-envify": "1.3.1", + "prop-types": "15.6.1" + } } } }, "vendors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", - "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", + "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==" }, "verror": { "version": "1.10.0", @@ -13155,21 +15119,21 @@ "integrity": "sha1-d3mLLaD5kQ1ZXxrOWwwiWFIfIdw=" }, "watchpack": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", - "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.5.0.tgz", + "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==", "requires": { - "async": "2.6.0", - "chokidar": "1.7.0", - "graceful-fs": "4.1.11" + "chokidar": "2.0.3", + "graceful-fs": "4.1.11", + "neo-async": "2.5.1" } }, "wbuf": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", - "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "requires": { - "minimalistic-assert": "1.0.0" + "minimalistic-assert": "1.0.1" } }, "webidl-conversions": { @@ -13178,172 +15142,86 @@ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, "webpack": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.8.1.tgz", - "integrity": "sha512-5ZXLWWsMqHKFr5y0N3Eo5IIisxeEeRAajNq4mELb/WELOR7srdbQk2N5XiyNy2A/AgvlR3AmeBCZJW8lHrolbw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz", + "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==", + "dev": true, "requires": { - "acorn": "5.2.1", + "acorn": "5.5.3", "acorn-dynamic-import": "2.0.2", - "ajv": "5.3.0", - "ajv-keywords": "2.1.1", + "ajv": "6.4.0", + "ajv-keywords": "3.1.0", "async": "2.6.0", "enhanced-resolve": "3.4.1", "escope": "3.6.0", - "interpret": "1.0.4", + "interpret": "1.1.0", "json-loader": "0.5.7", "json5": "0.5.1", "loader-runner": "2.3.0", "loader-utils": "1.1.0", "memory-fs": "0.4.1", "mkdirp": "0.5.1", - "node-libs-browser": "2.0.0", + "node-libs-browser": "2.1.0", "source-map": "0.5.7", "supports-color": "4.5.0", "tapable": "0.2.8", "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.4.0", - "webpack-sources": "1.0.2", + "watchpack": "1.5.0", + "webpack-sources": "1.1.0", "yargs": "8.0.2" }, "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "requires": { - "pify": "2.3.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { + "has-flag": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" + "has-flag": "2.0.0" } }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true, "requires": { - "camelcase": "4.1.0" + "source-map": "0.5.7", + "uglify-js": "2.8.29", + "webpack-sources": "1.1.0" } } } }, "webpack-dev-middleware": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz", - "integrity": "sha1-007++y7dp+HTtdvgcolRMhllFwk=", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", "requires": { "memory-fs": "0.4.1", - "mime": "1.4.1", + "mime": "1.6.0", "path-is-absolute": "1.0.1", "range-parser": "1.2.0", "time-stamp": "2.0.0" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + } } }, "webpack-dev-server": { @@ -13355,36 +15233,84 @@ "array-includes": "3.0.3", "bonjour": "3.5.0", "chokidar": "1.7.0", - "compression": "1.7.1", - "connect-history-api-fallback": "1.4.0", + "compression": "1.7.2", + "connect-history-api-fallback": "1.5.0", "debug": "3.1.0", "del": "3.0.0", - "express": "4.16.2", + "express": "4.16.3", "html-entities": "1.2.1", "http-proxy-middleware": "0.17.4", "import-local": "0.1.1", "internal-ip": "1.2.0", "ip": "1.1.5", "killable": "1.0.0", - "loglevel": "1.5.1", - "opn": "5.1.0", + "loglevel": "1.6.1", + "opn": "5.2.0", "portfinder": "1.0.13", - "selfsigned": "1.10.1", + "selfsigned": "1.10.2", "serve-index": "1.9.1", "sockjs": "0.3.18", "sockjs-client": "1.1.4", "spdy": "3.4.7", "strip-ansi": "3.0.1", "supports-color": "4.5.0", - "webpack-dev-middleware": "1.12.0", + "webpack-dev-middleware": "1.12.2", "yargs": "6.6.0" }, "dependencies": { + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "1.1.0" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.2.0", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", @@ -13402,12 +15328,45 @@ "requires": { "globby": "6.1.0", "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", "p-map": "1.2.0", "pify": "3.0.0", "rimraf": "2.6.2" } }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "requires": { + "is-glob": "2.0.1" + } + }, "globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", @@ -13427,12 +15386,94 @@ } } }, - "is-fullwidth-code-point": { + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "is-extglob": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "requires": { - "number-is-nan": "1.0.1" + "is-extglob": "1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "1.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } } }, "pify": { @@ -13440,16 +15481,46 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "0.2.1" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "2.0.0" } }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, "yargs": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", @@ -13481,9 +15552,9 @@ } }, "webpack-hot-middleware": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.20.0.tgz", - "integrity": "sha512-AYwVG9DCvMoXbwx8eK16CbJY3Ltwap44lW3T7hFsE0U3zRwtViHMw1DFpY5hMwXNqKsUk3HtNcf3PoV+gIxJeg==", + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.22.1.tgz", + "integrity": "sha512-wbjnvcc3HOPKRE/L0KmTv2MrByfLFOJlVFNKo5Svxy+1plR/bMIMYQDgB4pUOzJXhiBLU7Clp6P1SSzS89iKxA==", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -13498,7 +15569,7 @@ "integrity": "sha512-MX60Bv2G83Zks9pi3oLOmRgnPAnwrlMn+lftMrWBm199VQjk46/xgzBi9lPfpZldw2+EI2S+OevuLIaDuxCWRw==", "requires": { "fs-extra": "0.30.0", - "lodash": "4.17.4" + "lodash": "4.17.5" }, "dependencies": { "fs-extra": { @@ -13524,9 +15595,9 @@ } }, "webpack-sources": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.2.tgz", - "integrity": "sha512-Y7UddMCv6dGjy81nBv6nuQeFFIt5aalHm7uyDsAsW86nZwfOVPGRr3XMjEQLaT+WKo8rlzhC9qtbJvYKLtAwaw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", + "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", "requires": { "source-list-map": "2.0.0", "source-map": "0.6.1" @@ -13537,14 +15608,14 @@ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "requires": { - "http-parser-js": "0.4.9", - "websocket-extensions": "0.1.2" + "http-parser-js": "0.4.11", + "websocket-extensions": "0.1.3" } }, "websocket-extensions": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.2.tgz", - "integrity": "sha1-Dhh4HeYpoYMIzhSBZQ9n/6JpOl0=" + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" }, "whatwg-encoding": { "version": "1.0.3", @@ -13589,34 +15660,52 @@ } }, "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, - "widest-line": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", - "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "dev": true, "requires": { "string-width": "1.0.2" + } + }, + "widest-line": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", + "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", + "requires": { + "string-width": "2.1.1" }, "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "number-is-nan": "1.0.1" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "ansi-regex": "3.0.0" } } } @@ -13627,22 +15716,21 @@ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" }, "wordcloud": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/wordcloud/-/wordcloud-1.0.6.tgz", - "integrity": "sha1-fpjgov0kEMXdv2dTYTXwrm6ekbE=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/wordcloud/-/wordcloud-1.1.0.tgz", + "integrity": "sha512-2PHPdgYYt6jxu7EIQIY3YAs1/3ONZpVn4hwgpWISdypbwqTByJAE7r9bsRDFG0WKL82i0Y28xRZ0wF00lqZzWg==" }, "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" }, "worker-farm": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.5.1.tgz", - "integrity": "sha512-T5NH6Wqsd8MwGD4AK8BBllUy6LmHaqjEOyo/YIUEegZui6/v5Bqde//3jwyE3PGiGYMmWi06exFBi5LNhhPFNw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "requires": { - "errno": "0.1.4", - "xtend": "4.0.1" + "errno": "0.1.7" } }, "wrap-ansi": { @@ -13652,26 +15740,6 @@ "requires": { "string-width": "1.0.2", "strip-ansi": "3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } } }, "wrappy": { @@ -13688,13 +15756,13 @@ } }, "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", "requires": { "graceful-fs": "4.1.11", "imurmurhash": "0.1.4", - "slide": "1.1.6" + "signal-exit": "3.0.2" } }, "ws": { @@ -13719,17 +15787,9 @@ "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=" }, "xdg-basedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", - "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", - "requires": { - "os-homedir": "1.0.2" - } - }, - "xml-char-classes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", - "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" }, "xml-name-validator": { "version": "2.0.1", @@ -13752,29 +15812,34 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", "requires": { - "camelcase": "3.0.0", + "camelcase": "4.1.0", "cliui": "3.2.0", "decamelize": "1.2.0", "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", "require-directory": "2.1.1", "require-main-filename": "1.0.1", "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", "y18n": "3.2.1", - "yargs-parser": "5.0.0" + "yargs-parser": "7.0.0" }, "dependencies": { - "camelcase": { + "ansi-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" }, "cliui": { "version": "3.2.0", @@ -13784,40 +15849,58 @@ "string-width": "1.0.2", "strip-ansi": "3.0.1", "wrap-ansi": "2.1.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } } }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + } } } } }, "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", "requires": { - "camelcase": "3.0.0" + "camelcase": "4.1.0" }, "dependencies": { "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" } } }, diff --git a/package.json b/package.json index 2ad015ed87..78d658a23e 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "dependencies": { "abcolor": "^0.5.5", "ace-builds": "^1.3.3", - "core-js": "^2.5.2", + "core-js": "^2.5.5", "dota2-emoticons": "^1.0.1", "dotaconstants": "^5.28.0", "fuzzy": "^0.1.3", @@ -36,41 +36,41 @@ "history": "^4.7.2", "isomorphic-fetch": "^2.2.1", "json2csv": "^3.11.5", - "lodash": "^4.17.4", + "lodash": "^4.17.5", "long": "^4.0.0", "material-ui": "^0.19.4", - "prop-types": "^15.6.0", - "react": "^16.3.1", - "react-dom": "^16.3.1", - "react-ga": "^2.4.1", + "prop-types": "^15.6.1", + "react": "^16.3.2", + "react-dom": "^16.3.2", + "react-ga": "^2.5.0", "react-helmet": "^5.2.0", - "react-markdown": "^3.0.0", - "react-redux": "^5.0.6", + "react-markdown": "^3.3.0", + "react-redux": "^5.0.7", "react-router-dom": "^4.2.2", - "react-scripts": "^1.0.17", + "react-scripts": "^1.1.4", "react-stripe-checkout": "^2.6.3", - "react-tooltip": "^3.4.0", + "react-tooltip": "^3.5.0", "recharts": "^1.0.0-beta.10", - "redux": "^3.7.2", - "redux-responsive": "^4.3.5", + "redux": "^4.0.0", + "redux-responsive": "^4.3.6", "redux-thunk": "^2.2.0", "reselect": "^3.0.1", - "seamless-immutable": "^7.1.2", - "styled-components": "^3.1.6", - "uuid": "^3.1.0", - "wordcloud": "^1.0.6" + "seamless-immutable": "^7.1.3", + "styled-components": "^3.2.6", + "uuid": "^3.2.1", + "wordcloud": "^1.1.0" }, "devDependencies": { - "@storybook/addon-actions": "^3.2.14", - "@storybook/react": "^3.2.14", + "@storybook/addon-actions": "^3.4.2", + "@storybook/react": "^3.4.2", "babel-preset-es2015": "^6.24.1", - "cross-env": "^5.1.1", - "eslint": "^4.11.0", + "cross-env": "^5.1.4", + "eslint": "^4.19.1", "eslint-config-airbnb": "^16.1.0", - "eslint-plugin-import": "^2.8.0", + "eslint-plugin-import": "^2.11.0", "eslint-plugin-jsx-a11y": "^6.0.3", - "eslint-plugin-react": "^7.4.0", - "react-snap": "^1.11.5", + "eslint-plugin-react": "^7.7.0", + "react-snap": "^1.12.2", "simple-vdf": "^1.1.0" } } From 01c62cd07e8e1641f695a8a46832c6e4772b7602 Mon Sep 17 00:00:00 2001 From: hchung Date: Sat, 21 Apr 2018 14:24:20 -0700 Subject: [PATCH 0390/1495] load ability data in parallel --- src/components/Visualizations/inflictorWithValue.jsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/components/Visualizations/inflictorWithValue.jsx b/src/components/Visualizations/inflictorWithValue.jsx index 28de6f5fe8..99907778fc 100644 --- a/src/components/Visualizations/inflictorWithValue.jsx +++ b/src/components/Visualizations/inflictorWithValue.jsx @@ -212,10 +212,15 @@ class InflictorWithValue extends React.Component { super(props); this.state = {}; (async () => { + const [abilities, neutralAbilities, abilityIds] = await Promise.all([ + await import('dotaconstants/build/abilities.json'), + await import('dotaconstants/build/neutral_abilities.json'), + await import('dotaconstants/build/ability_ids.json'), + ]); this.setState({ - abilities: await import('dotaconstants/build/abilities.json'), - neutralAbilities: await import('dotaconstants/build/neutral_abilities.json'), - abilityIds: await import('dotaconstants/build/ability_ids.json'), + abilities, + neutralAbilities, + abilityIds, }); })(); } From ac3f0b3e00a377e0674e7419c6eff379bcb8afc3 Mon Sep 17 00:00:00 2001 From: hchung Date: Sat, 21 Apr 2018 14:41:27 -0700 Subject: [PATCH 0391/1495] fixes #1544 --- src/components/Match/Overview/PicksBans.jsx | 4 ++-- src/components/Match/matchColumns.jsx | 4 ++-- .../Visualizations/inflictorWithValue.jsx | 2 +- src/utility/index.jsx | 14 +++++++++----- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/components/Match/Overview/PicksBans.jsx b/src/components/Match/Overview/PicksBans.jsx index 462ad33152..3bfc853f98 100644 --- a/src/components/Match/Overview/PicksBans.jsx +++ b/src/components/Match/Overview/PicksBans.jsx @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; -import heroes from 'dotaconstants/build/heroes.json'; import styled from 'styled-components'; import strings from '../../../lang'; import constants from '../../constants'; +import { getHeroImageUrl, IMAGESIZE_ENUM } from '../../../utility'; const Styled = styled.div` .PicksBans { @@ -71,7 +71,7 @@ const PicksBans = ({ data }) => ( {data.map(pb => (
    ( { return {heroName}; }; +export const getHeroImageUrl = (heroId, imageSizeSuffix) => { + let imageUrl = heroes[heroId] && process.env.REACT_APP_API_HOST + heroes[heroId].img; // "[api url]/abaddon_full.png?" + if (imageUrl) { + imageUrl = imageUrl.slice(0, -('full.png?'.length)); // "[api url]/abaddon" + } + return imageUrl + imageSizeSuffix; +}; /** * Transformations of table cell data to display values. @@ -263,14 +270,11 @@ const getTitle = (row, col, heroName) => { export const transformations = { hero_id: (row, col, field, showPvgnaGuide = false, imageSizeSuffix = IMAGESIZE_ENUM.SMALL) => { const heroName = heroes[row[col.field]] ? heroes[row[col.field]].localized_name : strings.general_no_hero; - let imageUrl = heroes[row[col.field]] && process.env.REACT_APP_API_HOST + heroes[row[col.field]].img; // "[api url]/abaddon_full.png?" - if (imageUrl) { - imageUrl = imageUrl.slice(0, -('full.png?'.length)); // "[api url]/abaddon" - } + const imageUrl = getHeroImageUrl(row[col.field], imageSizeSuffix); return ( Date: Sat, 21 Apr 2018 15:04:26 -0700 Subject: [PATCH 0392/1495] fix extra ability icons --- src/components/Visualizations/inflictorWithValue.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Visualizations/inflictorWithValue.jsx b/src/components/Visualizations/inflictorWithValue.jsx index 31739495df..b438b8345f 100644 --- a/src/components/Visualizations/inflictorWithValue.jsx +++ b/src/components/Visualizations/inflictorWithValue.jsx @@ -231,7 +231,7 @@ class InflictorWithValue extends React.Component { } = this.props; const { abilities, neutralAbilities, abilityIds } = this.state; const resolvedInflictor = (abilityId && abilityIds && abilityIds[abilityId]) || inflictor; - if (resolvedInflictor !== undefined) { + if (resolvedInflictor) { const ability = abilities && abilities[resolvedInflictor]; const neutralAbility = neutralAbilities && neutralAbilities[resolvedInflictor]; const item = items[resolvedInflictor]; From 2e06882ca2542d280ea06e8cb98b9e407381bd50 Mon Sep 17 00:00:00 2001 From: hchung Date: Sat, 21 Apr 2018 15:16:37 -0700 Subject: [PATCH 0393/1495] move abilities to redux store --- src/actions/index.js | 9 +++++++++ .../Visualizations/inflictorWithValue.jsx | 19 ++++++++++++++++++- src/index.js | 5 ++++- src/reducers/index.js | 3 +++ 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/actions/index.js b/src/actions/index.js index ccf3b5c78f..724632bf27 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -70,6 +70,15 @@ export const getStrings = () => async (dispatch) => { const selData = await import(`../lang/${selectedLang.value}.json`); dispatch({ type: 'strings', payload: { ...defData, ...selData } }); }; +export const getAbilities = () => async (dispatch) => { + dispatch({ type: 'abilities', payload: await import('dotaconstants/build/abilities.json') }); +}; +export const getNeutralAbilities = () => async (dispatch) => { + dispatch({ type: 'neutralAbilities', payload: await import('dotaconstants/build/neutral_abilities.json') }); +}; +export const getAbilityIds = () => async (dispatch) => { + dispatch({ type: 'abilityIds', payload: await import('dotaconstants/build/ability_ids.json') }); +}; export * from './requestActions'; export * from './formActions'; export const getScenariosItemTimings = params => action('scenariosItemTimings', process.env.REACT_APP_API_HOST, 'api/scenarios/itemTimings', params); diff --git a/src/components/Visualizations/inflictorWithValue.jsx b/src/components/Visualizations/inflictorWithValue.jsx index b438b8345f..1e6d90fddd 100644 --- a/src/components/Visualizations/inflictorWithValue.jsx +++ b/src/components/Visualizations/inflictorWithValue.jsx @@ -1,4 +1,5 @@ import React from 'react'; +import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import ReactTooltip from 'react-tooltip'; import uuid from 'uuid'; @@ -299,4 +300,20 @@ class InflictorWithValue extends React.Component { } } -export default (inflictor, value, type, ptooltip, abilityId) => ; +const mapStateToProps = state => ({ + abilities: state.app.abilities, + neutralAbilities: state.app.neutralAbilities, + abilityIds: state.app.abilityIds, +}); + +const InflictorWithValueCont = connect(mapStateToProps)(InflictorWithValue); + +export default (inflictor, value, type, ptooltip, abilityId) => ( + +); diff --git a/src/index.js b/src/index.js index fdac3db7c8..5ed4e0e34a 100644 --- a/src/index.js +++ b/src/index.js @@ -8,7 +8,7 @@ import { Provider } from 'react-redux'; import { Route, Router } from 'react-router-dom'; import { injectGlobal } from 'styled-components'; import store from './store'; -import { getMetadata, getStrings } from './actions'; +import { getMetadata, getStrings, getAbilities, getNeutralAbilities, getAbilityIds } from './actions'; import App from './components/App'; import constants from './components/constants'; // import registerServiceWorker from './registerServiceWorker'; @@ -159,6 +159,9 @@ li { store.dispatch(getMetadata()); // Fetch strings store.dispatch(getStrings()); +store.dispatch(getAbilities()); +store.dispatch(getNeutralAbilities()); +store.dispatch(getAbilityIds()); ReactGA.initialize('UA-55757642-1'); ReactGA.pageview(window.location.pathname + window.location.search); diff --git a/src/reducers/index.js b/src/reducers/index.js index 495b454e32..a5d3941c7d 100644 --- a/src/reducers/index.js +++ b/src/reducers/index.js @@ -47,6 +47,9 @@ export default combineReducers({ records: reducer('records'), ghPulls: reducer('ghPulls'), strings: (state = {}, action) => ((action && action.type === 'strings') ? action.payload : state), + abilities: (state = {}, action) => ((action && action.type === 'abilities') ? action.payload : state), + neutralAbilities: (state = {}, action) => ((action && action.type === 'neutralAbilities') ? action.payload : state), + abilityIds: (state = {}, action) => ((action && action.type === 'abilityIds') ? action.payload : state), form, request, scenariosItemTimings: reducer('scenariosItemTimings'), From bb9aff70c88c9753bdd925f1cfbd89115b355800 Mon Sep 17 00:00:00 2001 From: hchung Date: Sat, 21 Apr 2018 18:01:37 -0700 Subject: [PATCH 0394/1495] fix on mobile --- src/components/Header/Header.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index 71d32505d3..577818957d 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -116,7 +116,7 @@ class Header extends React.Component { const LogoGroup = ({ small }) => ( - {!small && } + {!small && } ); From ef0774c5be2480f63e65760858620a23b4415a96 Mon Sep 17 00:00:00 2001 From: hchung Date: Sat, 21 Apr 2018 19:05:32 -0700 Subject: [PATCH 0395/1495] move more strings refs --- src/components/AccountWidget/LoggedIn.jsx | 10 +- src/components/App/AppLogo.spec.jsx | 2 - src/components/ButtonGarden/index.jsx | 17 +- src/components/Distributions/index.jsx | 185 +++++++++--------- .../Explorer/ExplorerControlSection.jsx | 11 +- .../Explorer/ExplorerOutputSection.jsx | 11 +- src/components/Explorer/autocomplete.js | 27 +-- src/components/Explorer/redrawGraphs.js | 2 - 8 files changed, 140 insertions(+), 125 deletions(-) diff --git a/src/components/AccountWidget/LoggedIn.jsx b/src/components/AccountWidget/LoggedIn.jsx index 66fa168465..3cb5d874f8 100644 --- a/src/components/AccountWidget/LoggedIn.jsx +++ b/src/components/AccountWidget/LoggedIn.jsx @@ -4,7 +4,6 @@ import { connect } from 'react-redux'; import { Link } from 'react-router-dom'; import styled from 'styled-components'; import FlatButton from 'material-ui/FlatButton'; -import strings from '../../lang'; import Spinner from '../Spinner'; const StyledFlatButton = styled(FlatButton)` @@ -22,7 +21,7 @@ const StyledFlatButton = styled(FlatButton)` } `; -const LoggedIn = ({ playerId, style }) => { +const LoggedIn = ({ playerId, style, strings }) => { if (!playerId) { return ; } @@ -39,6 +38,11 @@ const LoggedIn = ({ playerId, style }) => { LoggedIn.propTypes = { playerId: PropTypes.number, style: PropTypes.shape({}), + strings: PropTypes.shape({}), }; -export default connect()(LoggedIn); +const mapStateToProps = state => ({ + strings: state.app.strings, +}); + +export default connect(mapStateToProps)(LoggedIn); diff --git a/src/components/App/AppLogo.spec.jsx b/src/components/App/AppLogo.spec.jsx index b4758a72a6..75153fd93d 100644 --- a/src/components/App/AppLogo.spec.jsx +++ b/src/components/App/AppLogo.spec.jsx @@ -3,7 +3,6 @@ import React from 'react'; import { expect } from 'chai'; import { shallow } from 'enzyme'; import { Link } from 'react-router-dom'; -import strings from '../../lang'; import AppLogo from './AppLogo'; @@ -12,7 +11,6 @@ describe('AppLogo tests', () => { const ShallowAppLogo = shallow(); const AppLogoLink = ShallowAppLogo.find(Link); expect(AppLogoLink).to.exist(); - expect(AppLogoLink.html()).to.contain(strings.app_name); }); }); */ diff --git a/src/components/ButtonGarden/index.jsx b/src/components/ButtonGarden/index.jsx index 8d74383006..bf2b78d739 100644 --- a/src/components/ButtonGarden/index.jsx +++ b/src/components/ButtonGarden/index.jsx @@ -1,11 +1,13 @@ import React from 'react'; +import { connect } from 'react-redux'; import PropTypes from 'prop-types'; // import FlatButton from 'material-ui/FlatButton'; import SelectField from 'material-ui/SelectField'; import MenuItem from 'material-ui/MenuItem'; -import strings from '../../lang'; -const ButtonGarden = ({ buttonNames, selectedButton, onClick }) => ( +const ButtonGarden = ({ + buttonNames, selectedButton, onClick, strings, +}) => ( ( ); -const { arrayOf, string, func } = PropTypes; +const { + arrayOf, string, func, shape, +} = PropTypes; ButtonGarden.propTypes = { buttonNames: arrayOf(string), selectedButton: string, onClick: func, + strings: shape({}), }; -export default ButtonGarden; +const mapStateToProps = state => ({ + strings: state.app.strings, +}); + +export default connect(mapStateToProps)(ButtonGarden); diff --git a/src/components/Distributions/index.jsx b/src/components/Distributions/index.jsx index 9b170b4f4f..a07d57c019 100644 --- a/src/components/Distributions/index.jsx +++ b/src/components/Distributions/index.jsx @@ -11,7 +11,6 @@ import { rankTierToString, } from '../../utility'; import { getDistributions } from '../../actions'; -import strings from '../../lang'; import Table from '../Table'; // import Warning from '../Alerts'; import TabBar from '../TabBar'; @@ -34,100 +33,6 @@ const CountryDiv = styled.div` height: 24px; } `; -/* -const StyledWarning = styled(Warning)` - font-size: ${constants.fontSizeCommon}; - text-align: center; - margin-bottom: 20px; -`; -*/ - -const countryMmrColumns = [{ - displayName: strings.th_rank, - field: '', - displayFn: (row, col, field, i) => getOrdinal(i + 1), -}, { - displayName: strings.th_country, - field: 'common', - sortFn: true, - displayFn: (row) => { - const code = row.loccountrycode.toLowerCase(); - const image = `/assets/images/flags/${code}.svg`; - let name = row.common; - - // Fill missed flags and country names - if (code === 'yu') { - name = 'Yugoslavia'; - } else if (code === 'fx') { - name = 'Metropolitan France'; - } else if (code === 'tp') { - name = 'East Timor'; - } else if (code === 'zr') { - name = 'Zaire'; - } else if (code === 'bq') { - name = 'Caribbean Netherlands'; - } else if (code === 'sh') { - name = 'Saint Helena, Ascension and Tristan da Cunha'; - } - - return ( - - - - {name} - - - ); - }, -}, { - displayName: strings.th_players, - field: 'count', - sortFn: true, -}, { - displayName: strings.th_mmr, - field: 'avg', - sortFn: true, -}]; - -const getPage = (data, key) => { - let rows = data && data[key] && data[key].rows; - if (key === 'ranks') { - // Translate the rank integers into names - rows = rows.map(r => ({ ...r, bin_name: rankTierToString(r.bin_name) })); - } - return ( -
    - row.count).reduce(sum, 0))} ${strings.th_players} - `} - icon=" " - twoLine - /> - {(key === 'mmr' || key === 'ranks') ? - - : } - ); -}; - -const distributionsPages = [ - { - name: strings.distributions_tab_ranks, key: 'ranks', content: getPage, route: '/distributions/ranks', - }, - { - name: strings.distributions_tab_mmr, key: 'mmr', content: getPage, route: '/distributions/mmr', - }, - { - name: strings.distributions_tab_country_mmr, - key: 'country_mmr', - content: data => getPage(data, 'country_mmr'), - route: '/distributions/country_mmr', - }, -]; class RequestLayer extends React.Component { static propTypes = { @@ -139,13 +44,100 @@ class RequestLayer extends React.Component { }), dispatchDistributions: PropTypes.func, data: PropTypes.shape({}), + strings: PropTypes.shape({}), } componentDidMount() { this.props.dispatchDistributions(); } render() { - const { loading } = this.props; + const { strings, loading } = this.props; + const countryMmrColumns = [{ + displayName: strings.th_rank, + field: '', + displayFn: (row, col, field, i) => getOrdinal(i + 1), + }, { + displayName: strings.th_country, + field: 'common', + sortFn: true, + displayFn: (row) => { + const code = row.loccountrycode.toLowerCase(); + const image = `/assets/images/flags/${code}.svg`; + let name = row.common; + + // Fill missed flags and country names + if (code === 'yu') { + name = 'Yugoslavia'; + } else if (code === 'fx') { + name = 'Metropolitan France'; + } else if (code === 'tp') { + name = 'East Timor'; + } else if (code === 'zr') { + name = 'Zaire'; + } else if (code === 'bq') { + name = 'Caribbean Netherlands'; + } else if (code === 'sh') { + name = 'Saint Helena, Ascension and Tristan da Cunha'; + } + + return ( + + + + {name} + + + ); + }, + }, { + displayName: strings.th_players, + field: 'count', + sortFn: true, + }, { + displayName: strings.th_mmr, + field: 'avg', + sortFn: true, + }]; + + const getPage = (data, key) => { + let rows = data && data[key] && data[key].rows; + if (key === 'ranks') { + // Translate the rank integers into names + rows = rows.map(r => ({ ...r, bin_name: rankTierToString(r.bin_name) })); + } + return ( +
    + row.count).reduce(sum, 0))} ${strings.th_players} + `} + icon=" " + twoLine + /> + {(key === 'mmr' || key === 'ranks') ? + + :
    } + ); + }; + + const distributionsPages = [ + { + name: strings.distributions_tab_ranks, key: 'ranks', content: getPage, route: '/distributions/ranks', + }, + { + name: strings.distributions_tab_mmr, key: 'mmr', content: getPage, route: '/distributions/mmr', + }, + { + name: strings.distributions_tab_country_mmr, + key: 'country_mmr', + content: data => getPage(data, 'country_mmr'), + route: '/distributions/country_mmr', + }, + ]; const info = this.props.match.params.info || 'ranks'; const page = distributionsPages.find(_page => (_page.key || _page.name.toLowerCase()) === info); return loading @@ -162,6 +154,7 @@ class RequestLayer extends React.Component { const mapStateToProps = state => ({ data: state.app.distributions.data, loading: state.app.distributions.loading, + strings: state.app.strings, }); const mapDispatchToProps = dispatch => ({ diff --git a/src/components/Explorer/ExplorerControlSection.jsx b/src/components/Explorer/ExplorerControlSection.jsx index 52948f0763..7ee0683604 100644 --- a/src/components/Explorer/ExplorerControlSection.jsx +++ b/src/components/Explorer/ExplorerControlSection.jsx @@ -1,8 +1,8 @@ import React from 'react'; +import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import Toggle from 'material-ui/Toggle'; import styled from 'styled-components'; -import strings from '../../lang'; const StyledDiv = styled.div` padding: 0 15px; @@ -13,7 +13,7 @@ const StyledDiv = styled.div` `; const ExplorerControlSection = ({ - showToggle, showEditor, toggleEditor, children, + showToggle, showEditor, toggleEditor, children, strings, }) => (
    @@ -43,6 +43,11 @@ ExplorerControlSection.propTypes = { showEditor: PropTypes.bool, toggleEditor: PropTypes.func, children: PropTypes.arrayOf(PropTypes.node), + strings: PropTypes.shape({}), }; -export default ExplorerControlSection; +const mapStateToProps = state => ({ + strings: state.app.strings, +}); + +export default connect(mapStateToProps)(ExplorerControlSection); diff --git a/src/components/Explorer/ExplorerOutputSection.jsx b/src/components/Explorer/ExplorerOutputSection.jsx index 9373d91633..d8c5f9b7d6 100644 --- a/src/components/Explorer/ExplorerOutputSection.jsx +++ b/src/components/Explorer/ExplorerOutputSection.jsx @@ -1,4 +1,5 @@ import React from 'react'; +import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; import itemData from 'dotaconstants/build/items.json'; @@ -7,7 +8,6 @@ import { formatSeconds, } from '../../utility'; -import strings from '../../lang'; import Table from '../Table'; import { IconRadiant, IconDire } from '../Icons'; // import heroes from 'dotaconstants/build/heroes.json'; @@ -41,6 +41,7 @@ class ExplorerOutputSection extends React.Component { teamMapping: PropTypes.string, playerMapping: PropTypes.string, format: PropTypes.string, + strings: PropTypes.shape({}), } shouldComponentUpdate(nextProps) { @@ -48,7 +49,7 @@ class ExplorerOutputSection extends React.Component { } render() { const { - rows = [], fields, expandedBuilder, teamMapping, playerMapping, format, + rows = [], fields, expandedBuilder, teamMapping, playerMapping, format, strings, } = this.props; /* setTimeout(() => { @@ -129,4 +130,8 @@ class ExplorerOutputSection extends React.Component { } } -export default ExplorerOutputSection; +const mapStateToProps = state => ({ + strings: state.app.strings, +}); + +export default connect(mapStateToProps)(ExplorerOutputSection); diff --git a/src/components/Explorer/autocomplete.js b/src/components/Explorer/autocomplete.js index 28431509db..8258560755 100644 --- a/src/components/Explorer/autocomplete.js +++ b/src/components/Explorer/autocomplete.js @@ -1,4 +1,4 @@ -import strings from '../../lang'; +import store from '../../store'; // import fields from './fields'; const sqlfs = ['SELECT', 'WHERE', 'GROUP BY', 'ORDER BY']; @@ -7,16 +7,19 @@ const tables = ['matches', 'player_matches', 'teams', 'match_logs', 'public_matc const sqlks = ['OFFSET', 'LIMIT', 'DISTINCT', 'IN']; const sqlfuncs = ['to_timestamp()', 'count()', 'avg()', 'sum()', 'stddev()', 'min()', 'max()', 'using()']; -const autocomplete = cols => ({ - getCompletions(editor, session, pos, prefix, callback) { - callback(null, [] - .concat(sqlfuncs.map(e => ({ value: e, meta: strings.explorer_postgresql_function }))) - .concat(sqlfs.map(e => ({ value: e, meta: strings.explorer_sql }))) - .concat(sqlts.map(e => ({ value: e, meta: strings.explorer_sql }))) - .concat(sqlks.map(e => ({ value: e, meta: strings.explorer_sql }))) - .concat(tables.map(e => ({ value: e, meta: strings.explorer_table }))) - .concat(cols.map(e => ({ value: `${e.column_name}`, meta: `${e.table_name} - ${e.data_type}` })))); - }, -}); +const autocomplete = (cols) => { + const { strings } = store.getState().app; + return { + getCompletions(editor, session, pos, prefix, callback) { + callback(null, [] + .concat(sqlfuncs.map(e => ({ value: e, meta: strings.explorer_postgresql_function }))) + .concat(sqlfs.map(e => ({ value: e, meta: strings.explorer_sql }))) + .concat(sqlts.map(e => ({ value: e, meta: strings.explorer_sql }))) + .concat(sqlks.map(e => ({ value: e, meta: strings.explorer_sql }))) + .concat(tables.map(e => ({ value: e, meta: strings.explorer_table }))) + .concat(cols.map(e => ({ value: `${e.column_name}`, meta: `${e.table_name} - ${e.data_type}` })))); + }, + }; +}; export default autocomplete; diff --git a/src/components/Explorer/redrawGraphs.js b/src/components/Explorer/redrawGraphs.js index 9a2c0b22ac..fd6ffd57d0 100644 --- a/src/components/Explorer/redrawGraphs.js +++ b/src/components/Explorer/redrawGraphs.js @@ -1,5 +1,3 @@ -// import strings from '../../lang'; - /* export default function redrawGraphs(rows, field, yAxis) { const hasSum = rows[0] && rows[0].sum; From ecbb28363e9e7df7f249e6a3a05af90ca27f012b Mon Sep 17 00:00:00 2001 From: hchung Date: Sat, 21 Apr 2018 21:50:39 -0700 Subject: [PATCH 0396/1495] explorer strings --- src/components/Explorer/fields.js | 888 +++++++++++++++--------------- src/components/Explorer/index.jsx | 16 +- 2 files changed, 453 insertions(+), 451 deletions(-) diff --git a/src/components/Explorer/fields.js b/src/components/Explorer/fields.js index 4b98726231..9a7e62fc78 100644 --- a/src/components/Explorer/fields.js +++ b/src/components/Explorer/fields.js @@ -4,469 +4,471 @@ import patchData from 'dotaconstants/build/patch.json'; import itemData from 'dotaconstants/build/items.json'; import regionData from 'dotaconstants/build/region.json'; import clusterData from 'dotaconstants/build/cluster.json'; -import strings from '../../lang'; +import store from '../../store'; // import { isActiveItem } from '../../utility'; const getItemSuffix = itemKey => (['_2', '_3', '_4', '_5'].some(suffix => itemKey.indexOf(suffix) !== -1) ? itemKey[itemKey.length - 1] : ''); -const jsonSelect = { - value: 'key', - groupValue: 'value::text::int', - groupKey: 'key', - avgPerMatch: true, -}; - -const usesSelect = itemKey => ({ - text: `${strings.explorer_uses} - ${itemData[itemKey].dname} ${getItemSuffix(itemKey)}`, - value: `(item_uses->>'${itemKey}')::int`, - key: `uses_${itemKey}`, - alias: 'uses', -}); +const getFields = (players = [], leagues = [], teams = []) => { + const { strings } = store.getState().app; + const jsonSelect = { + value: 'key', + groupValue: 'value::text::int', + groupKey: 'key', + avgPerMatch: true, + }; -const timingSelect = itemKey => ({ - text: `${strings.explorer_timing} - ${itemData[itemKey].dname} ${getItemSuffix(itemKey)}`, - value: 'match_logs.time', - order: 'ASC', - join: `JOIN match_logs -ON match_logs.match_id = matches.match_id -AND player_matches.player_slot = match_logs.targetname_slot -AND match_logs.type = 'DOTA_COMBATLOG_PURCHASE' -AND match_logs.valuename = 'item_${itemKey}'`, - key: `timing_${itemKey}`, - formatSeconds: true, -}); + const usesSelect = itemKey => ({ + text: `${strings.explorer_uses} - ${itemData[itemKey].dname} ${getItemSuffix(itemKey)}`, + value: `(item_uses->>'${itemKey}')::int`, + key: `uses_${itemKey}`, + alias: 'uses', + }); -const killSelect = ({ - text, - unitKey, -}) => ({ - text: `${strings.explorer_kill} - ${text}`, - value: 'match_logs.time', - order: 'ASC', - join: `JOIN match_logs -ON match_logs.match_id = matches.match_id -AND player_matches.player_slot = match_logs.sourcename_slot -AND match_logs.type = 'DOTA_COMBATLOG_DEATH' -AND match_logs.targetname LIKE '${unitKey}'`, - key: `kill_${unitKey}`, -}); + const timingSelect = itemKey => ({ + text: `${strings.explorer_timing} - ${itemData[itemKey].dname} ${getItemSuffix(itemKey)}`, + value: 'match_logs.time', + order: 'ASC', + join: `JOIN match_logs + ON match_logs.match_id = matches.match_id + AND player_matches.player_slot = match_logs.targetname_slot + AND match_logs.type = 'DOTA_COMBATLOG_PURCHASE' + AND match_logs.valuename = 'item_${itemKey}'`, + key: `timing_${itemKey}`, + formatSeconds: true, + }); -const singleFields = [{ - text: strings.heading_kills, - value: 'kills', - key: 'kills', -}, { - text: strings.heading_deaths, - value: 'deaths', - key: 'deaths', -}, { - text: strings.heading_assists, - value: 'assists', - key: 'assists', -}, { - text: strings.heading_gold_per_min, - value: 'gold_per_min', - bucket: 50, - key: 'gold_per_min', -}, { - text: strings.heading_xp_per_min, - value: 'xp_per_min', - bucket: 50, - key: 'xp_per_min', -}, { - text: strings.heading_last_hits, - value: 'last_hits', - bucket: 10, - key: 'last_hits', -}, { - text: strings.heading_denies, - value: 'denies', - key: 'denies', -}, { - text: strings.heading_hero_damage, - value: 'hero_damage', - bucket: 1000, - key: 'hero_damage', -}, { - text: strings.heading_tower_damage, - value: 'tower_damage', - bucket: 1000, - key: 'tower_damage', -}, { - text: strings.heading_hero_healing, - value: 'hero_healing', - bucket: 1000, - key: 'hero_healing', -}, { - text: strings.heading_level, - value: 'level', - key: 'level', -}, { - text: strings.heading_stuns, - value: 'stuns', - bucket: 1, - key: 'stuns', -}, { - text: strings.heading_camps_stacked, - value: 'camps_stacked', - key: 'camps_stacked', -}, { - text: strings.heading_lhten, - value: 'lh_t[11]', - bucket: 10, - key: 'lh10', -}, { - text: strings.heading_lhtwenty, - value: 'lh_t[21]', - bucket: 10, - key: 'lh20', -}, { - text: strings.heading_lhthirty, - value: 'lh_t[31]', - bucket: 10, - key: 'lh30', -}, { - text: strings.heading_lhforty, - value: 'lh_t[41]', - bucket: 10, - key: 'lh40', -}, { - text: strings.heading_lhfifty, - value: 'lh_t[51]', - bucket: 10, - key: 'lh50', -}, -{ - text: strings.th_buybacks, - value: 'array_length(buyback_log, 1)', - key: 'buybacks', -}, -{ - text: strings.th_scans_used, - value: '(actions->>\'31\')::int', - key: 'scans_used', -}, -{ - text: strings.th_glyphs_used, - value: '(actions->>\'24\')::int', - key: 'glyphs_used', -}, -{ - text: strings.th_obs_placed, - value: 'array_length(obs_log, 1)', - key: 'obs_placed', -}, -{ - text: strings.th_sen_placed, - value: 'array_length(sen_log, 1)', - key: 'sen_placed', -}, -{ - text: strings.th_obs_destroyed, - value: '(killed->>\'npc_dota_observer_wards\')::int', - key: 'obs_destroyed', -}, -{ - text: strings.th_sen_destroyed, - value: '(killed->>\'npc_dota_sentry_wards\')::int', - key: 'sen_destroyed', -}, -{ - text: strings.th_legs, - value: 'heroes.legs', - key: 'legs', -}, -{ - text: strings.th_fantasy_points, - value: 'round((0.3 * kills + (3 - 0.3 * deaths) + 0.003 * (last_hits + denies) + 0.002 * gold_per_min + towers_killed + roshans_killed + 3 * teamfight_participation + 0.5 * observers_placed + 0.5 * camps_stacked + 0.25 * rune_pickups + 4 * firstblood_claimed + 0.05 * stuns)::numeric, 1)', - key: 'fantasy_points', - bucket: 1, -}].map(select => ({ - ...select, - alias: select.alias || select.key, -})); + const killSelect = ({ + text, + unitKey, + }) => ({ + text: `${strings.explorer_kill} - ${text}`, + value: 'match_logs.time', + order: 'ASC', + join: `JOIN match_logs + ON match_logs.match_id = matches.match_id + AND player_matches.player_slot = match_logs.sourcename_slot + AND match_logs.type = 'DOTA_COMBATLOG_DEATH' + AND match_logs.targetname LIKE '${unitKey}'`, + key: `kill_${unitKey}`, + }); -const patches = patchData.reverse().map(patch => ({ - text: patch.name, - value: patch.name, - key: patch.name, -})); + const singleFields = [{ + text: strings.heading_kills, + value: 'kills', + key: 'kills', + }, { + text: strings.heading_deaths, + value: 'deaths', + key: 'deaths', + }, { + text: strings.heading_assists, + value: 'assists', + key: 'assists', + }, { + text: strings.heading_gold_per_min, + value: 'gold_per_min', + bucket: 50, + key: 'gold_per_min', + }, { + text: strings.heading_xp_per_min, + value: 'xp_per_min', + bucket: 50, + key: 'xp_per_min', + }, { + text: strings.heading_last_hits, + value: 'last_hits', + bucket: 10, + key: 'last_hits', + }, { + text: strings.heading_denies, + value: 'denies', + key: 'denies', + }, { + text: strings.heading_hero_damage, + value: 'hero_damage', + bucket: 1000, + key: 'hero_damage', + }, { + text: strings.heading_tower_damage, + value: 'tower_damage', + bucket: 1000, + key: 'tower_damage', + }, { + text: strings.heading_hero_healing, + value: 'hero_healing', + bucket: 1000, + key: 'hero_healing', + }, { + text: strings.heading_level, + value: 'level', + key: 'level', + }, { + text: strings.heading_stuns, + value: 'stuns', + bucket: 1, + key: 'stuns', + }, { + text: strings.heading_camps_stacked, + value: 'camps_stacked', + key: 'camps_stacked', + }, { + text: strings.heading_lhten, + value: 'lh_t[11]', + bucket: 10, + key: 'lh10', + }, { + text: strings.heading_lhtwenty, + value: 'lh_t[21]', + bucket: 10, + key: 'lh20', + }, { + text: strings.heading_lhthirty, + value: 'lh_t[31]', + bucket: 10, + key: 'lh30', + }, { + text: strings.heading_lhforty, + value: 'lh_t[41]', + bucket: 10, + key: 'lh40', + }, { + text: strings.heading_lhfifty, + value: 'lh_t[51]', + bucket: 10, + key: 'lh50', + }, + { + text: strings.th_buybacks, + value: 'array_length(buyback_log, 1)', + key: 'buybacks', + }, + { + text: strings.th_scans_used, + value: '(actions->>\'31\')::int', + key: 'scans_used', + }, + { + text: strings.th_glyphs_used, + value: '(actions->>\'24\')::int', + key: 'glyphs_used', + }, + { + text: strings.th_obs_placed, + value: 'array_length(obs_log, 1)', + key: 'obs_placed', + }, + { + text: strings.th_sen_placed, + value: 'array_length(sen_log, 1)', + key: 'sen_placed', + }, + { + text: strings.th_obs_destroyed, + value: '(killed->>\'npc_dota_observer_wards\')::int', + key: 'obs_destroyed', + }, + { + text: strings.th_sen_destroyed, + value: '(killed->>\'npc_dota_sentry_wards\')::int', + key: 'sen_destroyed', + }, + { + text: strings.th_legs, + value: 'heroes.legs', + key: 'legs', + }, + { + text: strings.th_fantasy_points, + value: 'round((0.3 * kills + (3 - 0.3 * deaths) + 0.003 * (last_hits + denies) + 0.002 * gold_per_min + towers_killed + roshans_killed + 3 * teamfight_participation + 0.5 * observers_placed + 0.5 * camps_stacked + 0.25 * rune_pickups + 4 * firstblood_claimed + 0.05 * stuns)::numeric, 1)', + key: 'fantasy_points', + bucket: 1, + }].map(select => ({ + ...select, + alias: select.alias || select.key, + })); -const durations = Array(10).fill().map((e, i) => i * 10).map(duration => ({ - text: `${util.format(strings.time_mm, duration)}`, - searchText: util.format(strings.time_mm, duration), - value: duration * 60, - key: String(duration), -})); + const patches = patchData.reverse().map(patch => ({ + text: patch.name, + value: patch.name, + key: patch.name, + })); -const having = Array(5).fill().map((e, i) => (i + 1) * 5).map(element => ({ - text: String(element), - value: element, - key: String(element), -})); + const durations = Array(10).fill().map((e, i) => i * 10).map(duration => ({ + text: `${util.format(strings.time_mm, duration)}`, + searchText: util.format(strings.time_mm, duration), + value: duration * 60, + key: String(duration), + })); -const limit = [100, 200, 500, 1000].map(element => ({ - text: String(element), - value: element, - key: String(element), -})); + const having = Array(5).fill().map((e, i) => (i + 1) * 5).map(element => ({ + text: String(element), + value: element, + key: String(element), + })); -const fields = (players = [], leagues = [], teams = []) => ({ - select: [ - { + const limit = [100, 200, 500, 1000].map(element => ({ + text: String(element), + value: element, + key: String(element), + })); + return { + select: [ + { + text: strings.heading_duration, + value: 'duration', + alias: 'as time', + key: 'duration', + formatSeconds: true, + }, + { + text: strings.heading_distinct_heroes, + value: 'player_matches.hero_id', + countValue: 'count(distinct player_matches.hero_id) distinct_heroes', + key: 'distinct_heroes', + distinct: true, + }, + { + ...jsonSelect, + text: strings.heading_item_purchased, + alias: 'item_name', + join: ', json_each(player_matches.purchase)', + key: 'item_purchased', + }, { + ...jsonSelect, + text: strings.heading_ability_used, + alias: 'ability_name', + join: ', json_each(player_matches.ability_uses)', + key: 'ability_used', + }, { + ...jsonSelect, + text: strings.heading_item_used, + alias: 'item_name', + join: ', json_each(player_matches.item_uses)', + key: 'item_used', + }, { + ...jsonSelect, + text: strings.heading_damage_inflictor, + alias: 'inflictor', + join: ', json_each(player_matches.damage_inflictor)', + key: 'damage_inflictor', + }, { + ...jsonSelect, + text: strings.heading_damage_inflictor_received, + alias: 'inflictor', + join: ', json_each(player_matches.damage_inflictor_received)', + key: 'damage_inflictor_received', + }, { + ...jsonSelect, + text: strings.heading_runes, + alias: 'rune_id', + join: ', json_each(player_matches.runes)', + key: 'runes', + }, { + ...jsonSelect, + text: strings.heading_unit_kills, + join: ', json_each(player_matches.killed)', + key: 'unit_kills', + }, { + ...jsonSelect, + text: strings.heading_damage_instances, + join: ', json_each(player_matches.hero_hits)', + key: 'damage_instances', + }, killSelect({ + text: strings.heading_courier, + unitKey: 'npc_dota_courier', + }), + killSelect({ + text: strings.heading_roshan, + unitKey: 'npc_dota_roshan', + }), + killSelect({ + text: strings.heading_tower, + unitKey: '%tower%', + }), + killSelect({ + text: strings.heading_barracks, + unitKey: '%rax%', + }), + killSelect({ + text: strings.heading_shrine, + unitKey: '%healers%', + }), + { + text: strings.explorer_hero_combos, + value: 1, + groupValue: 1, + groupKeySelect: 'player_matches.hero_id, player_matches2.hero_id hero_id2', + groupKey: 'player_matches.hero_id, player_matches2.hero_id', + joinFn: props => `JOIN player_matches player_matches2 +ON player_matches.match_id = player_matches2.match_id +AND player_matches.hero_id != player_matches2.hero_id +AND abs(player_matches.player_slot - player_matches2.player_slot) < 10 +${props.hero && props.hero.value ? '' : 'AND player_matches.hero_id < player_matches2.hero_id'}`, + key: 'hero_combos', + }, + { + text: strings.explorer_hero_player, + value: 1, + groupValue: 1, + groupKey: 'player_matches.hero_id, player_matches.account_id', + key: 'hero_player', + }, + { + text: strings.explorer_player_player, + value: 1, + groupValue: 1, + groupKeySelect: 'player_matches.account_id, player_matches2.account_id account_id2', + groupKey: 'player_matches.account_id, player_matches2.account_id', + joinFn: props => `JOIN player_matches player_matches2 +ON player_matches.match_id = player_matches2.match_id +AND player_matches.account_id != player_matches2.account_id +AND abs(player_matches.player_slot - player_matches2.player_slot) < 10 +${props.player && props.player.value ? '' : 'AND player_matches.account_id < player_matches2.account_id'}`, + key: 'player_player', + }, + { + text: strings.explorer_picks_bans, + template: 'picks_bans', + key: 'picks_bans', + // picks_bans.team is 0 for radiant, 1 for dire + where: 'AND team_match.radiant::int != picks_bans.team', + value: 1, + }, + { + text: strings.explorer_counter_picks_bans, + template: 'picks_bans', + key: 'counter_picks_bans', + where: 'AND team_match.radiant::int = picks_bans.team', + value: 1, + }, + ] + .concat(Object.keys(itemData).filter(itemKey => itemData[itemKey].cd).map(usesSelect)) + .concat(Object.keys(itemData).filter(itemKey => itemData[itemKey].cost > 2000).map(timingSelect)) + .concat(singleFields) + .sort((a, b) => a.text.localeCompare(b.text)), + group: [{ + text: strings.explorer_player, + value: 'notable_players.name', + key: 'player', + }, { + text: strings.th_hero_id, + value: 'heroes.localized_name', + key: 'hero', + }, { + text: strings.explorer_league, + value: 'leagues.name', + alias: 'leaguename', + key: 'league', + }, { + text: strings.explorer_patch, + value: 'patch', + key: 'patch', + }, { text: strings.heading_duration, - value: 'duration', - alias: 'as time', + value: 'duration/300*5', + alias: 'minutes', key: 'duration', - formatSeconds: true, - }, - { - text: strings.heading_distinct_heroes, - value: 'player_matches.hero_id', - countValue: 'count(distinct player_matches.hero_id) distinct_heroes', - key: 'distinct_heroes', - distinct: true, - }, - { - ...jsonSelect, - text: strings.heading_item_purchased, - alias: 'item_name', - join: ', json_each(player_matches.purchase)', - key: 'item_purchased', }, { - ...jsonSelect, - text: strings.heading_ability_used, - alias: 'ability_name', - join: ', json_each(player_matches.ability_uses)', - key: 'ability_used', + text: strings.explorer_side, + value: '(player_matches.player_slot < 128)', + alias: 'is_radiant', + key: 'side', }, { - ...jsonSelect, - text: strings.heading_item_used, - alias: 'item_name', - join: ', json_each(player_matches.item_uses)', - key: 'item_used', + text: strings.th_result, + value: '((player_matches.player_slot < 128) = matches.radiant_win)', + alias: 'win', + key: 'result', }, { - ...jsonSelect, - text: strings.heading_damage_inflictor, - alias: 'inflictor', - join: ', json_each(player_matches.damage_inflictor)', - key: 'damage_inflictor', + text: strings.explorer_team, + value: 'teams.name', + key: 'team', }, { - ...jsonSelect, - text: strings.heading_damage_inflictor_received, - alias: 'inflictor', - join: ', json_each(player_matches.damage_inflictor_received)', - key: 'damage_inflictor_received', + text: strings.explorer_organization, + value: 'teams2.name', + key: 'organization', }, { - ...jsonSelect, - text: strings.heading_runes, - alias: 'rune_id', - join: ', json_each(player_matches.runes)', - key: 'runes', + text: strings.explorer_match, + value: 'matches.match_id', + key: 'match', + }, + ].concat(singleFields), + minPatch: patches, + maxPatch: patches, + hero: Object.keys(heroData).map(heroId => ({ + text: `[${heroId}] ${heroData[heroId].localized_name}`, + searchText: heroData[heroId].localized_name, + value: heroData[heroId].id, + key: String(heroData[heroId].id), + })), + playerPurchased: Object.keys(itemData).map(itemName => ({ + text: itemData[itemName].dname, + value: itemName, + key: itemName, + })), + minDuration: durations, + maxDuration: durations, + side: [{ + text: strings.general_radiant, + value: true, + key: 'radiant', }, { - ...jsonSelect, - text: strings.heading_unit_kills, - join: ', json_each(player_matches.killed)', - key: 'unit_kills', + text: strings.general_dire, + value: false, + key: 'dire', + }], + result: [{ + text: strings.td_win, + value: true, + key: 'win', }, { - ...jsonSelect, - text: strings.heading_damage_instances, - join: ', json_each(player_matches.hero_hits)', - key: 'damage_instances', - }, killSelect({ - text: strings.heading_courier, - unitKey: 'npc_dota_courier', - }), - killSelect({ - text: strings.heading_roshan, - unitKey: 'npc_dota_roshan', - }), - killSelect({ - text: strings.heading_tower, - unitKey: '%tower%', - }), - killSelect({ - text: strings.heading_barracks, - unitKey: '%rax%', + text: strings.td_loss, + value: false, + key: 'loss', + }], + region: Object.keys(regionData).map(regionKey => ({ + text: strings[`region_${regionKey}`], + value: Object.keys(clusterData).filter(key => String(clusterData[key]) === regionKey), + key: String(regionKey), + })), + league: leagues.map(league => ({ + text: `[${league.leagueid}] ${league.name}`, + searchText: league.name, + value: league.leagueid, + key: String(league.leagueid), + })), + team: teams.map(team => ({ + text: `[${team.team_id}] ${team.name}`, + searchText: team.name, + value: team.team_id, + key: String(team.team_id), + })), + organization: teams.map(team => ({ + text: `[${team.team_id}] ${team.name}`, + searchText: team.name, + value: team.team_id, + key: String(team.team_id), + })), + player: players.map(player => ({ + text: `[${player.account_id}] ${player.name}`, + searchText: player.name, + value: player.account_id, + key: String(player.account_id), + })), + tier: ['premium', 'professional'].map(tier => ({ + text: strings[`tier_${tier}`], + value: tier, + key: tier, + })), + order: [{ text: strings.explorer_asc, value: 'ASC', key: 'asc' }, { text: strings.explorer_desc, value: 'DESC', key: 'desc' }], + having, + limit, + laneRole: Object.keys(strings).filter(str => str.indexOf('lane_role_') === 0).map((str) => { + const laneRoleId = Number(str.substring('lane_role_'.length)); + return { text: strings[str], value: laneRoleId, key: String(laneRoleId) }; }), - killSelect({ - text: strings.heading_shrine, - unitKey: '%healers%', - }), - { - text: strings.explorer_hero_combos, - value: 1, - groupValue: 1, - groupKeySelect: 'player_matches.hero_id, player_matches2.hero_id hero_id2', - groupKey: 'player_matches.hero_id, player_matches2.hero_id', - joinFn: props => `JOIN player_matches player_matches2 -ON player_matches.match_id = player_matches2.match_id -AND player_matches.hero_id != player_matches2.hero_id -AND abs(player_matches.player_slot - player_matches2.player_slot) < 10 -${props.hero && props.hero.value ? '' : 'AND player_matches.hero_id < player_matches2.hero_id'}`, - key: 'hero_combos', - }, - { - text: strings.explorer_hero_player, - value: 1, - groupValue: 1, - groupKey: 'player_matches.hero_id, player_matches.account_id', - key: 'hero_player', - }, - { - text: strings.explorer_player_player, - value: 1, - groupValue: 1, - groupKeySelect: 'player_matches.account_id, player_matches2.account_id account_id2', - groupKey: 'player_matches.account_id, player_matches2.account_id', - joinFn: props => `JOIN player_matches player_matches2 -ON player_matches.match_id = player_matches2.match_id -AND player_matches.account_id != player_matches2.account_id -AND abs(player_matches.player_slot - player_matches2.player_slot) < 10 -${props.player && props.player.value ? '' : 'AND player_matches.account_id < player_matches2.account_id'}`, - key: 'player_player', - }, - { - text: strings.explorer_picks_bans, - template: 'picks_bans', - key: 'picks_bans', - // picks_bans.team is 0 for radiant, 1 for dire - where: 'AND team_match.radiant::int != picks_bans.team', - value: 1, - }, - { - text: strings.explorer_counter_picks_bans, - template: 'picks_bans', - key: 'counter_picks_bans', - where: 'AND team_match.radiant::int = picks_bans.team', - value: 1, - }, - ] - .concat(Object.keys(itemData).filter(itemKey => itemData[itemKey].cd).map(usesSelect)) - .concat(Object.keys(itemData).filter(itemKey => itemData[itemKey].cost > 2000).map(timingSelect)) - .concat(singleFields) - .sort((a, b) => a.text.localeCompare(b.text)), - group: [{ - text: strings.explorer_player, - value: 'notable_players.name', - key: 'player', - }, { - text: strings.th_hero_id, - value: 'heroes.localized_name', - key: 'hero', - }, { - text: strings.explorer_league, - value: 'leagues.name', - alias: 'leaguename', - key: 'league', - }, { - text: strings.explorer_patch, - value: 'patch', - key: 'patch', - }, { - text: strings.heading_duration, - value: 'duration/300*5', - alias: 'minutes', - key: 'duration', - }, { - text: strings.explorer_side, - value: '(player_matches.player_slot < 128)', - alias: 'is_radiant', - key: 'side', - }, { - text: strings.th_result, - value: '((player_matches.player_slot < 128) = matches.radiant_win)', - alias: 'win', - key: 'result', - }, { - text: strings.explorer_team, - value: 'teams.name', - key: 'team', - }, { - text: strings.explorer_organization, - value: 'teams2.name', - key: 'organization', - }, { - text: strings.explorer_match, - value: 'matches.match_id', - key: 'match', - }, - ].concat(singleFields), - minPatch: patches, - maxPatch: patches, - hero: Object.keys(heroData).map(heroId => ({ - text: `[${heroId}] ${heroData[heroId].localized_name}`, - searchText: heroData[heroId].localized_name, - value: heroData[heroId].id, - key: String(heroData[heroId].id), - })), - playerPurchased: Object.keys(itemData).map(itemName => ({ - text: itemData[itemName].dname, - value: itemName, - key: itemName, - })), - minDuration: durations, - maxDuration: durations, - side: [{ - text: strings.general_radiant, - value: true, - key: 'radiant', - }, { - text: strings.general_dire, - value: false, - key: 'dire', - }], - result: [{ - text: strings.td_win, - value: true, - key: 'win', - }, { - text: strings.td_loss, - value: false, - key: 'loss', - }], - region: Object.keys(regionData).map(regionKey => ({ - text: strings[`region_${regionKey}`], - value: Object.keys(clusterData).filter(key => String(clusterData[key]) === regionKey), - key: String(regionKey), - })), - league: leagues.map(league => ({ - text: `[${league.leagueid}] ${league.name}`, - searchText: league.name, - value: league.leagueid, - key: String(league.leagueid), - })), - team: teams.map(team => ({ - text: `[${team.team_id}] ${team.name}`, - searchText: team.name, - value: team.team_id, - key: String(team.team_id), - })), - organization: teams.map(team => ({ - text: `[${team.team_id}] ${team.name}`, - searchText: team.name, - value: team.team_id, - key: String(team.team_id), - })), - player: players.map(player => ({ - text: `[${player.account_id}] ${player.name}`, - searchText: player.name, - value: player.account_id, - key: String(player.account_id), - })), - tier: ['premium', 'professional'].map(tier => ({ - text: strings[`tier_${tier}`], - value: tier, - key: tier, - })), - order: [{ text: strings.explorer_asc, value: 'ASC', key: 'asc' }, { text: strings.explorer_desc, value: 'DESC', key: 'desc' }], - having, - limit, - laneRole: Object.keys(strings).filter(str => str.indexOf('lane_role_') === 0).map((str) => { - const laneRoleId = Number(str.substring('lane_role_'.length)); - return { text: strings[str], value: laneRoleId, key: String(laneRoleId) }; - }), - isTi7Team: [{ text: 'Yes', value: true, key: 'true' }], -}); + isTi7Team: [{ text: 'Yes', value: true, key: 'true' }], + }; +}; -export default fields; +export default getFields; diff --git a/src/components/Explorer/index.jsx b/src/components/Explorer/index.jsx index 1fd6f43732..7a5a60f516 100644 --- a/src/components/Explorer/index.jsx +++ b/src/components/Explorer/index.jsx @@ -1,8 +1,7 @@ /* global ace */ import React from 'react'; import PropTypes from 'prop-types'; -import { connect } - from 'react-redux'; +import { connect } from 'react-redux'; import fetch from 'isomorphic-fetch'; import RaisedButton from 'material-ui/RaisedButton'; import ActionSearch from 'material-ui/svg-icons/action/search'; @@ -10,20 +9,18 @@ import Helmet from 'react-helmet'; import querystring from 'querystring'; import json2csv from 'json2csv'; import Spinner from '../Spinner'; -import strings from '../../lang'; import Heading from '../Heading'; import { getProPlayers, getLeagues, getTeams, -} - from '../../actions'; +} from '../../actions'; import queryTemplate from './queryTemplate'; import ExplorerOutputButton from './ExplorerOutputButton'; import ExplorerOutputSection from './ExplorerOutputSection'; import ExplorerControlSection from './ExplorerControlSection'; import ExplorerFormField from './ExplorerFormField'; -import fields from './fields'; +import getFields from './fields'; import autocomplete from './autocomplete'; const playerMapping = {}; @@ -51,6 +48,7 @@ class Explorer extends React.Component { dispatchProPlayers: PropTypes.func, dispatchLeagues: PropTypes.func, dispatchTeams: PropTypes.func, + strings: PropTypes.shape({}), } constructor() { @@ -90,7 +88,7 @@ class Explorer extends React.Component { buildQuery = () => { // Note that this will not get expanded data for API-dependent fields (player/league/team) // This is ok if we only need the value prop (e.g. an id to build the query with) - const expandedBuilder = expandBuilderState(this.state.builder, fields()); + const expandedBuilder = expandBuilderState(this.state.builder, getFields()); // TODO handle arrays this.editor.setValue(queryTemplate(expandedBuilder)); }; @@ -184,13 +182,14 @@ class Explorer extends React.Component { teamMapping[team.team_id] = team.name; }); } - const expandedFields = fields(this.props.proPlayers, this.props.leagues, this.props.teams); + const expandedFields = getFields(this.props.proPlayers, this.props.leagues, this.props.teams); const expandedBuilder = expandBuilderState(this.state.builder, expandedFields); const { handleQuery, handleCancel, getSqlString, handleFieldUpdate, } = this; const explorer = this; const { builder } = this.state; + const { strings } = this.props; return (
    @@ -294,6 +293,7 @@ const mapStateToProps = state => ({ proPlayers: state.app.proPlayers.data, leagues: state.app.leagues.data, teams: state.app.teams.data, + strings: state.app.strings, }); const mapDispatchToProps = dispatch => ({ From a76eb12dc7d00399078a2e1f91fbf2f4e9570fe9 Mon Sep 17 00:00:00 2001 From: hchung Date: Sat, 21 Apr 2018 22:00:32 -0700 Subject: [PATCH 0397/1495] add safety checks for localecompare --- src/components/Explorer/fields.js | 2 +- src/components/Footer/Cheese.jsx | 15 ++++- src/components/Footer/Footer.jsx | 26 ++++---- src/components/Footer/PageLinks.jsx | 65 +++++++++++-------- src/components/Heroes/index.jsx | 2 +- .../TableFilterForm/TableFilter.config.js | 2 +- src/components/Scenarios/FormFieldData.js | 4 +- 7 files changed, 70 insertions(+), 46 deletions(-) diff --git a/src/components/Explorer/fields.js b/src/components/Explorer/fields.js index 9a7e62fc78..9c0688f63f 100644 --- a/src/components/Explorer/fields.js +++ b/src/components/Explorer/fields.js @@ -346,7 +346,7 @@ ${props.player && props.player.value ? '' : 'AND player_matches.account_id < pla .concat(Object.keys(itemData).filter(itemKey => itemData[itemKey].cd).map(usesSelect)) .concat(Object.keys(itemData).filter(itemKey => itemData[itemKey].cost > 2000).map(timingSelect)) .concat(singleFields) - .sort((a, b) => a.text.localeCompare(b.text)), + .sort((a, b) => a.text && a.text.localeCompare(b.text)), group: [{ text: strings.explorer_player, value: 'notable_players.name', diff --git a/src/components/Footer/Cheese.jsx b/src/components/Footer/Cheese.jsx index 61fd4059a4..0c349bf1a2 100644 --- a/src/components/Footer/Cheese.jsx +++ b/src/components/Footer/Cheese.jsx @@ -1,8 +1,9 @@ import React from 'react'; -import strings from '../../lang'; +import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; import CheeseCircle from '../Cheese'; -export default () => ( +const Cheese = ({ strings }) => (
    @@ -17,3 +18,13 @@ export default () => (
    ); + +Cheese.propTypes = { + strings: PropTypes.shape({}), +}; + +const mapStateToProps = state => ({ + strings: state.app.strings, +}); + +export default connect(mapStateToProps)(Cheese); \ No newline at end of file diff --git a/src/components/Footer/Footer.jsx b/src/components/Footer/Footer.jsx index a3a608f193..b19cb5f222 100644 --- a/src/components/Footer/Footer.jsx +++ b/src/components/Footer/Footer.jsx @@ -1,6 +1,7 @@ import React from 'react'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; import styled from 'styled-components'; -import strings from '../../lang'; import AppLogo from '../App/AppLogo'; import PageLinks from './PageLinks'; // import Cheese from './Cheese'; @@ -148,19 +149,8 @@ const StyledHr = styled.hr` background: linear-gradient(to right, ${constants.primaryTextColor}, rgba(0, 0, 0, 0)); `; -export default () => ( +const Footer = ({ strings }) => ( - { - /* - location.pathname !== '/' && -
    -