mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Merge branch 'master' into ImportAccountMessageV2
This commit is contained in:
commit
6a9ca29244
@ -8,6 +8,11 @@
|
|||||||
- Allow editing of symbol and decimal info when adding custom token in new-ui
|
- Allow editing of symbol and decimal info when adding custom token in new-ui
|
||||||
- NewUI shapeshift form can select all coins (not just BTC)
|
- NewUI shapeshift form can select all coins (not just BTC)
|
||||||
- Add most of Microsoft Edge support.
|
- Add most of Microsoft Edge support.
|
||||||
|
- Replace "Unlock" wording with "Log In".
|
||||||
|
- Allow adding custom tokens to classic ui when balance is 0
|
||||||
|
- Allow editing of symbol and decimal info when adding custom token in new-ui
|
||||||
|
- new-ui shapeshift form can select all coins (not just BTC)
|
||||||
|
- Classic ui and new-ui shapeshift forms show when coins are not available on shapeshift
|
||||||
|
|
||||||
## 4.1.3 2018-2-28
|
## 4.1.3 2018-2-28
|
||||||
|
|
||||||
|
@ -7,12 +7,13 @@ const changelogPath = path.join(__dirname, '..', 'CHANGELOG.md')
|
|||||||
const manifestPath = path.join(__dirname, '..', 'app', 'manifest.json')
|
const manifestPath = path.join(__dirname, '..', 'app', 'manifest.json')
|
||||||
const manifest = require('../app/manifest.json')
|
const manifest = require('../app/manifest.json')
|
||||||
const versionBump = require('./version-bump')
|
const versionBump = require('./version-bump')
|
||||||
|
|
||||||
const bumpType = normalizeType(process.argv[2])
|
const bumpType = normalizeType(process.argv[2])
|
||||||
|
|
||||||
|
start().catch(console.error)
|
||||||
|
|
||||||
readFile(changelogPath)
|
async function start() {
|
||||||
.then(async (changeBuffer) => {
|
|
||||||
|
const changeBuffer = await readFile(changelogPath)
|
||||||
const changelog = changeBuffer.toString()
|
const changelog = changeBuffer.toString()
|
||||||
|
|
||||||
const newData = await versionBump(bumpType, changelog, manifest)
|
const newData = await versionBump(bumpType, changelog, manifest)
|
||||||
@ -22,10 +23,8 @@ readFile(changelogPath)
|
|||||||
await writeFile(changelogPath, newData.changelog)
|
await writeFile(changelogPath, newData.changelog)
|
||||||
await writeFile(manifestPath, manifestString)
|
await writeFile(manifestPath, manifestString)
|
||||||
|
|
||||||
return newData.version
|
console.log(`Bumped ${bumpType} to version ${newData.version}`)
|
||||||
})
|
}
|
||||||
.then((version) => console.log(`Bumped ${bumpType} to version ${version}`))
|
|
||||||
.catch(console.error)
|
|
||||||
|
|
||||||
|
|
||||||
function normalizeType (userInput) {
|
function normalizeType (userInput) {
|
||||||
|
@ -63,7 +63,7 @@ InfoScreen.prototype.render = function () {
|
|||||||
h('a', {
|
h('a', {
|
||||||
href: 'https://metamask.io/privacy.html',
|
href: 'https://metamask.io/privacy.html',
|
||||||
target: '_blank',
|
target: '_blank',
|
||||||
onClick (event) { this.navigateTo(event.target.href) },
|
onClick: (event) => { this.navigateTo(event.target.href) },
|
||||||
}, [
|
}, [
|
||||||
h('div.info', 'Privacy Policy'),
|
h('div.info', 'Privacy Policy'),
|
||||||
]),
|
]),
|
||||||
@ -72,7 +72,7 @@ InfoScreen.prototype.render = function () {
|
|||||||
h('a', {
|
h('a', {
|
||||||
href: 'https://metamask.io/terms.html',
|
href: 'https://metamask.io/terms.html',
|
||||||
target: '_blank',
|
target: '_blank',
|
||||||
onClick (event) { this.navigateTo(event.target.href) },
|
onClick: (event) => { this.navigateTo(event.target.href) },
|
||||||
}, [
|
}, [
|
||||||
h('div.info', 'Terms of Use'),
|
h('div.info', 'Terms of Use'),
|
||||||
]),
|
]),
|
||||||
@ -81,7 +81,7 @@ InfoScreen.prototype.render = function () {
|
|||||||
h('a', {
|
h('a', {
|
||||||
href: 'https://metamask.io/attributions.html',
|
href: 'https://metamask.io/attributions.html',
|
||||||
target: '_blank',
|
target: '_blank',
|
||||||
onClick (event) { this.navigateTo(event.target.href) },
|
onClick: (event) => { this.navigateTo(event.target.href) },
|
||||||
}, [
|
}, [
|
||||||
h('div.info', 'Attributions'),
|
h('div.info', 'Attributions'),
|
||||||
]),
|
]),
|
||||||
|
@ -69,7 +69,7 @@ UnlockScreen.prototype.render = function () {
|
|||||||
style: {
|
style: {
|
||||||
margin: 10,
|
margin: 10,
|
||||||
},
|
},
|
||||||
}, 'Unlock'),
|
}, 'Log In'),
|
||||||
]),
|
]),
|
||||||
|
|
||||||
h('.flex-row.flex-center.flex-grow', [
|
h('.flex-row.flex-center.flex-grow', [
|
||||||
|
@ -1498,6 +1498,7 @@ function pairUpdate (coin) {
|
|||||||
dispatch(actions.hideWarning())
|
dispatch(actions.hideWarning())
|
||||||
shapeShiftRequest('marketinfo', {pair: `${coin.toLowerCase()}_eth`}, (mktResponse) => {
|
shapeShiftRequest('marketinfo', {pair: `${coin.toLowerCase()}_eth`}, (mktResponse) => {
|
||||||
dispatch(actions.hideSubLoadingIndication())
|
dispatch(actions.hideSubLoadingIndication())
|
||||||
|
if (mktResponse.error) return dispatch(actions.displayWarning(mktResponse.error))
|
||||||
dispatch({
|
dispatch({
|
||||||
type: actions.PAIR_UPDATE,
|
type: actions.PAIR_UPDATE,
|
||||||
value: {
|
value: {
|
||||||
|
@ -52,7 +52,7 @@ function AddTokenScreen () {
|
|||||||
isShowingConfirmation: false,
|
isShowingConfirmation: false,
|
||||||
customAddress: '',
|
customAddress: '',
|
||||||
customSymbol: '',
|
customSymbol: '',
|
||||||
customDecimals: null,
|
customDecimals: '',
|
||||||
searchQuery: '',
|
searchQuery: '',
|
||||||
isCollapsed: true,
|
isCollapsed: true,
|
||||||
selectedTokens: {},
|
selectedTokens: {},
|
||||||
|
@ -33,6 +33,9 @@ function mapDispatchToProps (dispatch) {
|
|||||||
hideModal: () => {
|
hideModal: () => {
|
||||||
dispatch(actions.hideModal())
|
dispatch(actions.hideModal())
|
||||||
},
|
},
|
||||||
|
hideWarning: () => {
|
||||||
|
dispatch(actions.hideWarning())
|
||||||
|
},
|
||||||
showAccountDetailModal: () => {
|
showAccountDetailModal: () => {
|
||||||
dispatch(actions.showModal({ name: 'ACCOUNT_DETAILS' }))
|
dispatch(actions.showModal({ name: 'ACCOUNT_DETAILS' }))
|
||||||
},
|
},
|
||||||
@ -119,6 +122,7 @@ DepositEtherModal.prototype.render = function () {
|
|||||||
h('div.deposit-ether-modal__header__close', {
|
h('div.deposit-ether-modal__header__close', {
|
||||||
onClick: () => {
|
onClick: () => {
|
||||||
this.setState({ buyingWithShapeshift: false })
|
this.setState({ buyingWithShapeshift: false })
|
||||||
|
this.props.hideWarning()
|
||||||
this.props.hideModal()
|
this.props.hideModal()
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
@ -179,6 +183,7 @@ DepositEtherModal.prototype.render = function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
DepositEtherModal.prototype.goToAccountDetailsModal = function () {
|
DepositEtherModal.prototype.goToAccountDetailsModal = function () {
|
||||||
|
this.props.hideWarning()
|
||||||
this.props.hideModal()
|
this.props.hideModal()
|
||||||
this.props.showAccountDetailModal()
|
this.props.showAccountDetailModal()
|
||||||
}
|
}
|
||||||
|
@ -79,6 +79,7 @@ const MODALS = {
|
|||||||
contents: [
|
contents: [
|
||||||
h(DepositEtherModal, {}, []),
|
h(DepositEtherModal, {}, []),
|
||||||
],
|
],
|
||||||
|
onHide: (props) => props.hideWarning(),
|
||||||
mobileModalStyle: {
|
mobileModalStyle: {
|
||||||
width: '100%',
|
width: '100%',
|
||||||
height: '100%',
|
height: '100%',
|
||||||
@ -286,6 +287,10 @@ function mapDispatchToProps (dispatch) {
|
|||||||
hideModal: () => {
|
hideModal: () => {
|
||||||
dispatch(actions.hideModal())
|
dispatch(actions.hideModal())
|
||||||
},
|
},
|
||||||
|
hideWarning: () => {
|
||||||
|
dispatch(actions.hideWarning())
|
||||||
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -308,7 +313,12 @@ Modal.prototype.render = function () {
|
|||||||
{
|
{
|
||||||
className: 'modal',
|
className: 'modal',
|
||||||
keyboard: false,
|
keyboard: false,
|
||||||
onHide: () => { this.onHide() },
|
onHide: () => {
|
||||||
|
if (modal.onHide) {
|
||||||
|
modal.onHide(this.props)
|
||||||
|
}
|
||||||
|
this.onHide()
|
||||||
|
},
|
||||||
ref: (ref) => {
|
ref: (ref) => {
|
||||||
this.modalRef = ref
|
this.modalRef = ref
|
||||||
},
|
},
|
||||||
|
@ -14,11 +14,13 @@ function mapStateToProps (state) {
|
|||||||
tokenExchangeRates,
|
tokenExchangeRates,
|
||||||
selectedAddress,
|
selectedAddress,
|
||||||
} = state.metamask
|
} = state.metamask
|
||||||
|
const { warning } = state.appState
|
||||||
|
|
||||||
return {
|
return {
|
||||||
coinOptions,
|
coinOptions,
|
||||||
tokenExchangeRates,
|
tokenExchangeRates,
|
||||||
selectedAddress,
|
selectedAddress,
|
||||||
|
warning,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,7 +165,7 @@ ShapeshiftForm.prototype.renderQrCode = function () {
|
|||||||
|
|
||||||
|
|
||||||
ShapeshiftForm.prototype.render = function () {
|
ShapeshiftForm.prototype.render = function () {
|
||||||
const { coinOptions, btnClass } = this.props
|
const { coinOptions, btnClass, warning } = this.props
|
||||||
const { depositCoin, errorMessage, showQrCode, depositAddress } = this.state
|
const { depositCoin, errorMessage, showQrCode, depositAddress } = this.state
|
||||||
const coinPair = `${depositCoin}_eth`
|
const coinPair = `${depositCoin}_eth`
|
||||||
const { tokenExchangeRates } = this.props
|
const { tokenExchangeRates } = this.props
|
||||||
@ -206,7 +208,9 @@ ShapeshiftForm.prototype.render = function () {
|
|||||||
|
|
||||||
]),
|
]),
|
||||||
|
|
||||||
h('div', {
|
warning && h('div.shapeshift-form__address-input-label', warning),
|
||||||
|
|
||||||
|
!warning && h('div', {
|
||||||
className: classnames('shapeshift-form__address-input-wrapper', {
|
className: classnames('shapeshift-form__address-input-wrapper', {
|
||||||
'shapeshift-form__address-input-wrapper--error': errorMessage,
|
'shapeshift-form__address-input-wrapper--error': errorMessage,
|
||||||
}),
|
}),
|
||||||
@ -227,7 +231,7 @@ ShapeshiftForm.prototype.render = function () {
|
|||||||
h('divshapeshift-form__address-input-error-message', [errorMessage]),
|
h('divshapeshift-form__address-input-error-message', [errorMessage]),
|
||||||
]),
|
]),
|
||||||
|
|
||||||
this.renderMarketInfo(),
|
!warning && this.renderMarketInfo(),
|
||||||
|
|
||||||
]),
|
]),
|
||||||
|
|
||||||
|
@ -787,6 +787,10 @@
|
|||||||
width: auto;
|
width: auto;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 575px) {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,8 +361,9 @@ SendTransactionScreen.prototype.validateAmount = function (value) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const verifyTokenBalance = selectedToken && tokenBalance !== null
|
||||||
let sufficientTokens
|
let sufficientTokens
|
||||||
if (selectedToken) {
|
if (verifyTokenBalance) {
|
||||||
sufficientTokens = isTokenBalanceSufficient({
|
sufficientTokens = isTokenBalanceSufficient({
|
||||||
tokenBalance,
|
tokenBalance,
|
||||||
amount,
|
amount,
|
||||||
@ -377,7 +378,7 @@ SendTransactionScreen.prototype.validateAmount = function (value) {
|
|||||||
|
|
||||||
if (conversionRate && !sufficientBalance) {
|
if (conversionRate && !sufficientBalance) {
|
||||||
amountError = 'Insufficient funds.'
|
amountError = 'Insufficient funds.'
|
||||||
} else if (selectedToken && !sufficientTokens) {
|
} else if (verifyTokenBalance && !sufficientTokens) {
|
||||||
amountError = 'Insufficient tokens.'
|
amountError = 'Insufficient tokens.'
|
||||||
} else if (amountLessThanZero) {
|
} else if (amountLessThanZero) {
|
||||||
amountError = 'Can not send negative amounts of ETH.'
|
amountError = 'Can not send negative amounts of ETH.'
|
||||||
@ -396,14 +397,15 @@ SendTransactionScreen.prototype.renderAmountRow = function () {
|
|||||||
amount,
|
amount,
|
||||||
setMaxModeTo,
|
setMaxModeTo,
|
||||||
maxModeOn,
|
maxModeOn,
|
||||||
|
gasTotal,
|
||||||
} = this.props
|
} = this.props
|
||||||
|
|
||||||
return h('div.send-v2__form-row', [
|
return h('div.send-v2__form-row', [
|
||||||
|
|
||||||
h('div.send-v2__form-label', [
|
h('div.send-v2__form-label', [
|
||||||
'Amount:',
|
'Amount:',
|
||||||
this.renderErrorMessage('amount'),
|
this.renderErrorMessage('amount'),
|
||||||
!errors.amount && h('div.send-v2__amount-max', {
|
!errors.amount && gasTotal && h('div.send-v2__amount-max', {
|
||||||
onClick: (event) => {
|
onClick: (event) => {
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
setMaxModeTo(true)
|
setMaxModeTo(true)
|
||||||
@ -491,9 +493,12 @@ SendTransactionScreen.prototype.renderFooter = function () {
|
|||||||
goHome,
|
goHome,
|
||||||
clearSend,
|
clearSend,
|
||||||
gasTotal,
|
gasTotal,
|
||||||
|
tokenBalance,
|
||||||
|
selectedToken,
|
||||||
errors: { amount: amountError, to: toError },
|
errors: { amount: amountError, to: toError },
|
||||||
} = this.props
|
} = this.props
|
||||||
|
|
||||||
|
const missingTokenBalance = selectedToken && !tokenBalance
|
||||||
const noErrors = !amountError && toError === null
|
const noErrors = !amountError && toError === null
|
||||||
|
|
||||||
return h('div.page-container__footer', [
|
return h('div.page-container__footer', [
|
||||||
@ -504,7 +509,7 @@ SendTransactionScreen.prototype.renderFooter = function () {
|
|||||||
},
|
},
|
||||||
}, 'Cancel'),
|
}, 'Cancel'),
|
||||||
h('button.btn-clear.page-container__footer-button', {
|
h('button.btn-clear.page-container__footer-button', {
|
||||||
disabled: !noErrors || !gasTotal,
|
disabled: !noErrors || !gasTotal || missingTokenBalance,
|
||||||
onClick: event => this.onSubmit(event),
|
onClick: event => this.onSubmit(event),
|
||||||
}, 'Next'),
|
}, 'Next'),
|
||||||
])
|
])
|
||||||
|
@ -71,7 +71,7 @@ UnlockScreen.prototype.render = function () {
|
|||||||
style: {
|
style: {
|
||||||
margin: 10,
|
margin: 10,
|
||||||
},
|
},
|
||||||
}, 'Unlock'),
|
}, 'Log In'),
|
||||||
]),
|
]),
|
||||||
|
|
||||||
h('.flex-row.flex-center.flex-grow', [
|
h('.flex-row.flex-center.flex-grow', [
|
||||||
@ -104,7 +104,7 @@ UnlockScreen.prototype.render = function () {
|
|||||||
},
|
},
|
||||||
}, 'Use classic interface'),
|
}, 'Use classic interface'),
|
||||||
]),
|
]),
|
||||||
|
|
||||||
])
|
])
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user