From 16bc776aab147a8fc20402668dea1f6bf342117e Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Wed, 2 Nov 2016 00:58:17 +0100 Subject: [PATCH] Goodbye Gavcoin, Hello Gavcoin --- js/assets/images/dapps/gavcoin-bg.jpg | Bin 79447 -> 0 bytes js/src/dapps/gavcoin.html | 17 -- js/src/dapps/gavcoin.js | 33 --- .../AccountItem/accountItem.css | 45 ---- .../AccountItem/accountItem.js | 63 ----- .../AccountSelector/AccountItem/index.js | 17 -- .../AccountSelector/accountSelector.js | 102 ------- js/src/dapps/gavcoin/AccountSelector/index.js | 22 -- .../accountSelectorText.css | 28 -- .../accountSelectorText.js | 106 -------- .../gavcoin/AccountSelectorText/index.js | 17 -- js/src/dapps/gavcoin/Accounts/accounts.css | 47 ---- js/src/dapps/gavcoin/Accounts/accounts.js | 83 ------ js/src/dapps/gavcoin/Accounts/index.js | 17 -- .../Actions/ActionBuyIn/actionBuyIn.js | 209 --------------- .../gavcoin/Actions/ActionBuyIn/index.js | 17 -- .../Actions/ActionRefund/actionRefund.js | 194 -------------- .../gavcoin/Actions/ActionRefund/index.js | 17 -- .../Actions/ActionTransfer/actionTransfer.js | 223 ---------------- .../gavcoin/Actions/ActionTransfer/index.js | 17 -- .../gavcoin/Actions/StepComplete/index.js | 17 -- .../Actions/StepComplete/stepComplete.js | 29 -- js/src/dapps/gavcoin/Actions/actions.css | 83 ------ js/src/dapps/gavcoin/Actions/actions.js | 76 ------ js/src/dapps/gavcoin/Actions/index.js | 27 -- js/src/dapps/gavcoin/Actions/validation.js | 56 ---- .../dapps/gavcoin/Application/application.css | 22 -- .../dapps/gavcoin/Application/application.js | 249 ------------------ js/src/dapps/gavcoin/Application/index.js | 17 -- js/src/dapps/gavcoin/Events/Event/event.js | 155 ----------- js/src/dapps/gavcoin/Events/Event/index.js | 17 -- .../gavcoin/Events/EventBuyin/eventBuyin.js | 38 --- .../dapps/gavcoin/Events/EventBuyin/index.js | 17 -- .../Events/EventNewTranch/eventNewTranch.js | 36 --- .../gavcoin/Events/EventNewTranch/index.js | 17 -- .../gavcoin/Events/EventRefund/eventRefund.js | 38 --- .../dapps/gavcoin/Events/EventRefund/index.js | 17 -- .../Events/EventTransfer/eventTransfer.js | 38 --- .../gavcoin/Events/EventTransfer/index.js | 17 -- js/src/dapps/gavcoin/Events/events.css | 101 ------- js/src/dapps/gavcoin/Events/events.js | 161 ----------- js/src/dapps/gavcoin/Events/index.js | 17 -- .../gavcoin/IdentityIcon/identityIcon.css | 23 -- .../gavcoin/IdentityIcon/identityIcon.js | 36 --- js/src/dapps/gavcoin/IdentityIcon/index.js | 17 -- js/src/dapps/gavcoin/Loading/index.js | 17 -- js/src/dapps/gavcoin/Loading/loading.css | 21 -- js/src/dapps/gavcoin/Loading/loading.js | 31 --- js/src/dapps/gavcoin/Status/index.js | 17 -- js/src/dapps/gavcoin/Status/status.css | 55 ---- js/src/dapps/gavcoin/Status/status.js | 74 ------ js/src/dapps/gavcoin/format/index.js | 56 ---- js/src/dapps/gavcoin/parity.js | 21 -- js/webpack.config.js | 1 - 54 files changed, 2888 deletions(-) delete mode 100644 js/assets/images/dapps/gavcoin-bg.jpg delete mode 100644 js/src/dapps/gavcoin.html delete mode 100644 js/src/dapps/gavcoin.js delete mode 100644 js/src/dapps/gavcoin/AccountSelector/AccountItem/accountItem.css delete mode 100644 js/src/dapps/gavcoin/AccountSelector/AccountItem/accountItem.js delete mode 100644 js/src/dapps/gavcoin/AccountSelector/AccountItem/index.js delete mode 100644 js/src/dapps/gavcoin/AccountSelector/accountSelector.js delete mode 100644 js/src/dapps/gavcoin/AccountSelector/index.js delete mode 100644 js/src/dapps/gavcoin/AccountSelectorText/accountSelectorText.css delete mode 100644 js/src/dapps/gavcoin/AccountSelectorText/accountSelectorText.js delete mode 100644 js/src/dapps/gavcoin/AccountSelectorText/index.js delete mode 100644 js/src/dapps/gavcoin/Accounts/accounts.css delete mode 100644 js/src/dapps/gavcoin/Accounts/accounts.js delete mode 100644 js/src/dapps/gavcoin/Accounts/index.js delete mode 100644 js/src/dapps/gavcoin/Actions/ActionBuyIn/actionBuyIn.js delete mode 100644 js/src/dapps/gavcoin/Actions/ActionBuyIn/index.js delete mode 100644 js/src/dapps/gavcoin/Actions/ActionRefund/actionRefund.js delete mode 100644 js/src/dapps/gavcoin/Actions/ActionRefund/index.js delete mode 100644 js/src/dapps/gavcoin/Actions/ActionTransfer/actionTransfer.js delete mode 100644 js/src/dapps/gavcoin/Actions/ActionTransfer/index.js delete mode 100644 js/src/dapps/gavcoin/Actions/StepComplete/index.js delete mode 100644 js/src/dapps/gavcoin/Actions/StepComplete/stepComplete.js delete mode 100644 js/src/dapps/gavcoin/Actions/actions.css delete mode 100644 js/src/dapps/gavcoin/Actions/actions.js delete mode 100644 js/src/dapps/gavcoin/Actions/index.js delete mode 100644 js/src/dapps/gavcoin/Actions/validation.js delete mode 100644 js/src/dapps/gavcoin/Application/application.css delete mode 100644 js/src/dapps/gavcoin/Application/application.js delete mode 100644 js/src/dapps/gavcoin/Application/index.js delete mode 100644 js/src/dapps/gavcoin/Events/Event/event.js delete mode 100644 js/src/dapps/gavcoin/Events/Event/index.js delete mode 100644 js/src/dapps/gavcoin/Events/EventBuyin/eventBuyin.js delete mode 100644 js/src/dapps/gavcoin/Events/EventBuyin/index.js delete mode 100644 js/src/dapps/gavcoin/Events/EventNewTranch/eventNewTranch.js delete mode 100644 js/src/dapps/gavcoin/Events/EventNewTranch/index.js delete mode 100644 js/src/dapps/gavcoin/Events/EventRefund/eventRefund.js delete mode 100644 js/src/dapps/gavcoin/Events/EventRefund/index.js delete mode 100644 js/src/dapps/gavcoin/Events/EventTransfer/eventTransfer.js delete mode 100644 js/src/dapps/gavcoin/Events/EventTransfer/index.js delete mode 100644 js/src/dapps/gavcoin/Events/events.css delete mode 100644 js/src/dapps/gavcoin/Events/events.js delete mode 100644 js/src/dapps/gavcoin/Events/index.js delete mode 100644 js/src/dapps/gavcoin/IdentityIcon/identityIcon.css delete mode 100644 js/src/dapps/gavcoin/IdentityIcon/identityIcon.js delete mode 100644 js/src/dapps/gavcoin/IdentityIcon/index.js delete mode 100644 js/src/dapps/gavcoin/Loading/index.js delete mode 100644 js/src/dapps/gavcoin/Loading/loading.css delete mode 100644 js/src/dapps/gavcoin/Loading/loading.js delete mode 100644 js/src/dapps/gavcoin/Status/index.js delete mode 100644 js/src/dapps/gavcoin/Status/status.css delete mode 100644 js/src/dapps/gavcoin/Status/status.js delete mode 100644 js/src/dapps/gavcoin/format/index.js delete mode 100644 js/src/dapps/gavcoin/parity.js diff --git a/js/assets/images/dapps/gavcoin-bg.jpg b/js/assets/images/dapps/gavcoin-bg.jpg deleted file mode 100644 index c344f5979f655729fa9418be631ac9d9d32c36d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79447 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

g$M7M0L0-57(kpq!#?35 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

    )eAW;LcbG7n*(e<>l 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 Z>y&m*dx<^WB&kY|Jjxa4SfIr diff --git a/js/src/dapps/gavcoin.html b/js/src/dapps/gavcoin.html deleted file mode 100644 index 31ff6e7fc8e..00000000000 --- a/js/src/dapps/gavcoin.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - GAVcoin - - -
    - - - - - - diff --git a/js/src/dapps/gavcoin.js b/js/src/dapps/gavcoin.js deleted file mode 100644 index fae095ef257..00000000000 --- a/js/src/dapps/gavcoin.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import ReactDOM from 'react-dom'; -import React from 'react'; - -import injectTapEventPlugin from 'react-tap-event-plugin'; -injectTapEventPlugin(); - -import Application from './gavcoin/Application'; - -import '../../assets/fonts/Roboto/font.css'; -import '../../assets/fonts/RobotoMono/font.css'; -import './style.css'; -import './gavcoin.html'; - -ReactDOM.render( - , - document.querySelector('#container') -); diff --git a/js/src/dapps/gavcoin/AccountSelector/AccountItem/accountItem.css b/js/src/dapps/gavcoin/AccountSelector/AccountItem/accountItem.css deleted file mode 100644 index 3b7457cb707..00000000000 --- a/js/src/dapps/gavcoin/AccountSelector/AccountItem/accountItem.css +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright 2015, 2016 Ethcore (UK) Ltd. -/* This file is part of Parity. -/* -/* Parity is free software: you can redistribute it and/or modify -/* it under the terms of the GNU General Public License as published by -/* the Free Software Foundation, either version 3 of the License, or -/* (at your option) any later version. -/* -/* Parity is distributed in the hope that it will be useful, -/* but WITHOUT ANY WARRANTY; without even the implied warranty of -/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -/* GNU General Public License for more details. -/* -/* You should have received a copy of the GNU General Public License -/* along with Parity. If not, see . -*/ -.account { - padding: 4px 0 !important; - display: inline-block; -} - -.name { - display: inline-block; - margin-right: 1em; - text-transform: uppercase; -} - -.balance { - display: inline-block; - text-align: right; - color: #aaa; - font-family: 'Roboto Mono', monospace; -} - -.details { - display: inline-block; -} - -.image { - display: inline-block; -} - -.image img { - margin: 0 1em -11px 0; -} diff --git a/js/src/dapps/gavcoin/AccountSelector/AccountItem/accountItem.js b/js/src/dapps/gavcoin/AccountSelector/AccountItem/accountItem.js deleted file mode 100644 index 1a55e7f9307..00000000000 --- a/js/src/dapps/gavcoin/AccountSelector/AccountItem/accountItem.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import React, { Component, PropTypes } from 'react'; - -import IdentityIcon from '../../IdentityIcon'; - -import styles from './accountItem.css'; - -export default class AccountItem extends Component { - static propTypes = { - account: PropTypes.object, - gavBalance: PropTypes.bool - }; - - render () { - const { account, gavBalance } = this.props; - - let balance; - let token; - - if (gavBalance) { - if (account.gavBalance) { - balance = account.gavBalance; - token = 'GAV'; - } - } else { - if (account.ethBalance) { - balance = account.ethBalance; - token = 'ETH'; - } - } - - return ( -
    -
    - -
    -
    -
    - { account.name || account.address } -
    -
    - { balance } { token } -
    -
    -
    - ); - } -} diff --git a/js/src/dapps/gavcoin/AccountSelector/AccountItem/index.js b/js/src/dapps/gavcoin/AccountSelector/AccountItem/index.js deleted file mode 100644 index 570b3415aaa..00000000000 --- a/js/src/dapps/gavcoin/AccountSelector/AccountItem/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -export default from './accountItem'; diff --git a/js/src/dapps/gavcoin/AccountSelector/accountSelector.js b/js/src/dapps/gavcoin/AccountSelector/accountSelector.js deleted file mode 100644 index e37d23598a9..00000000000 --- a/js/src/dapps/gavcoin/AccountSelector/accountSelector.js +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import BigNumber from 'bignumber.js'; -import React, { Component, PropTypes } from 'react'; -import { MenuItem, SelectField } from 'material-ui'; - -import AccountItem from './AccountItem'; - -const NAME_ID = ' '; -let lastSelectedAccount = {}; - -export default class AccountSelect extends Component { - static propTypes = { - accounts: PropTypes.array, - account: PropTypes.object, - anyAccount: PropTypes.bool, - gavBalance: PropTypes.bool, - onSelect: PropTypes.func, - errorText: PropTypes.string, - floatingLabelText: PropTypes.string, - hintText: PropTypes.string - } - - componentDidMount () { - this.props.onSelect(lastSelectedAccount); - } - - render () { - const { account, accounts, anyAccount, errorText, floatingLabelText, gavBalance, hintText } = this.props; - - return ( - - { renderAccounts(accounts, { anyAccount, gavBalance }) } - - ); - } - - onSelect = (event, idx, account) => { - lastSelectedAccount = account || {}; - this.props.onSelect(lastSelectedAccount); - } -} - -function isPositive (numberStr) { - return new BigNumber(numberStr.replace(',', '')).gt(0); -} - -export function renderAccounts (accounts, options = {}) { - return accounts - .filter((account) => { - if (options.anyAccount) { - return true; - } - - if (account.uuid) { - return isPositive(account[options.gavBalance ? 'gavBalance' : 'ethBalance']); - } - - return false; - }) - .map((account) => { - const item = ( - - ); - - return ( - - { item } - - ); - }); -} diff --git a/js/src/dapps/gavcoin/AccountSelector/index.js b/js/src/dapps/gavcoin/AccountSelector/index.js deleted file mode 100644 index de529244a15..00000000000 --- a/js/src/dapps/gavcoin/AccountSelector/index.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import { renderAccounts } from './accountSelector'; - -export default from './accountSelector'; -export { - renderAccounts -}; diff --git a/js/src/dapps/gavcoin/AccountSelectorText/accountSelectorText.css b/js/src/dapps/gavcoin/AccountSelectorText/accountSelectorText.css deleted file mode 100644 index 0a969770d7e..00000000000 --- a/js/src/dapps/gavcoin/AccountSelectorText/accountSelectorText.css +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright 2015, 2016 Ethcore (UK) Ltd. -/* This file is part of Parity. -/* -/* Parity is free software: you can redistribute it and/or modify -/* it under the terms of the GNU General Public License as published by -/* the Free Software Foundation, either version 3 of the License, or -/* (at your option) any later version. -/* -/* Parity is distributed in the hope that it will be useful, -/* but WITHOUT ANY WARRANTY; without even the implied warranty of -/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -/* GNU General Public License for more details. -/* -/* You should have received a copy of the GNU General Public License -/* along with Parity. If not, see . -*/ -.addrtext { - position: relative; -} - -.input input { - padding-left: 48px !important; -} - -.addricon { - position: absolute; - top: 37px; -} diff --git a/js/src/dapps/gavcoin/AccountSelectorText/accountSelectorText.js b/js/src/dapps/gavcoin/AccountSelectorText/accountSelectorText.js deleted file mode 100644 index a83b0ec87ad..00000000000 --- a/js/src/dapps/gavcoin/AccountSelectorText/accountSelectorText.js +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import React, { Component, PropTypes } from 'react'; -import { TextField } from 'material-ui'; - -import IdentityIcon from '../IdentityIcon'; -import AccountSelector from '../AccountSelector'; - -import styles from './accountSelectorText.css'; - -const NAME_ID = ' '; - -export default class AccountSelectorText extends Component { - static propTypes = { - accounts: PropTypes.array, - account: PropTypes.object, - errorText: PropTypes.string, - gavBalance: PropTypes.bool, - anyAccount: PropTypes.bool, - floatingLabelText: PropTypes.string, - hintText: PropTypes.string, - selector: PropTypes.bool, - onChange: PropTypes.func - } - - render () { - const { selector } = this.props; - - return selector - ? this.renderDropDown() - : this.renderTextField(); - } - - renderDropDown () { - const { account, accounts, anyAccount, errorText, gavBalance, hintText, floatingLabelText, onChange } = this.props; - - return ( - - ); - } - - renderTextField () { - const { account, errorText, hintText, floatingLabelText } = this.props; - - return ( -
    - - { this.renderAddressIcon() } -
    - ); - } - - renderAddressIcon () { - const { account } = this.props; - - if (!account.address) { - return null; - } - - return ( -
    - -
    - ); - } - - onChangeAddress = (event, address) => { - const lower = address.toLowerCase(); - const account = this.props.accounts.find((_account) => _account.address.toLowerCase() === lower); - - this.props.onChange(account || { address }); - } -} diff --git a/js/src/dapps/gavcoin/AccountSelectorText/index.js b/js/src/dapps/gavcoin/AccountSelectorText/index.js deleted file mode 100644 index c3aab3e52ac..00000000000 --- a/js/src/dapps/gavcoin/AccountSelectorText/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -export default from './accountSelectorText'; diff --git a/js/src/dapps/gavcoin/Accounts/accounts.css b/js/src/dapps/gavcoin/Accounts/accounts.css deleted file mode 100644 index a7fdcee7327..00000000000 --- a/js/src/dapps/gavcoin/Accounts/accounts.css +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright 2015, 2016 Ethcore (UK) Ltd. -/* This file is part of Parity. -/* -/* Parity is free software: you can redistribute it and/or modify -/* it under the terms of the GNU General Public License as published by -/* the Free Software Foundation, either version 3 of the License, or -/* (at your option) any later version. -/* -/* Parity is distributed in the hope that it will be useful, -/* but WITHOUT ANY WARRANTY; without even the implied warranty of -/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -/* GNU General Public License for more details. -/* -/* You should have received a copy of the GNU General Public License -/* along with Parity. If not, see . -*/ -.accounts { - padding: 4em 2em 0 2em; - text-align: center; - width: 100%; -} - -.account { - margin: 0.5em !important; - background: #430 !important; - display: inline-block !important; -} - -.account img { - margin-bottom: -11px; - margin-left: -11px; -} - -.balance { - font-family: 'Roboto Mono', monospace; - color: rgba(255, 255, 255, 1) !important; -} - -.name { - color: rgba(255, 255, 255, 0.7) !important; - margin-right: 1em; - text-transform: uppercase; -} - -.none { - color: rgba(255, 255, 255, 0.7); -} diff --git a/js/src/dapps/gavcoin/Accounts/accounts.js b/js/src/dapps/gavcoin/Accounts/accounts.js deleted file mode 100644 index f510193ac28..00000000000 --- a/js/src/dapps/gavcoin/Accounts/accounts.js +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import React, { Component, PropTypes } from 'react'; -import { Chip } from 'material-ui'; - -import IdentityIcon from '../IdentityIcon'; - -import styles from './accounts.css'; - -export default class Accounts extends Component { - static contextTypes = { - api: PropTypes.object.isRequired, - instance: PropTypes.object.isRequired - } - - static propTypes = { - accounts: PropTypes.array - } - - render () { - const has = this._hasAccounts(); - - return ( -
    - { has ? this.renderAccounts() : this.renderEmpty() } -
    - ); - } - - renderEmpty () { - return ( -
    - You currently do not have any GAVcoin in any of your addresses, buy some -
    - ); - } - - renderAccounts () { - const { accounts } = this.props; - - return accounts - .filter((account) => account.hasGav) - .map((account) => { - return ( - - - - { account.name } - - - { account.gavBalance } - - - ); - }); - } - - _hasAccounts () { - const { accounts } = this.props; - - if (!accounts || !accounts.length) { - return false; - } - - return accounts.filter((account) => account.hasGav).length !== 0; - } -} diff --git a/js/src/dapps/gavcoin/Accounts/index.js b/js/src/dapps/gavcoin/Accounts/index.js deleted file mode 100644 index e9be1d55733..00000000000 --- a/js/src/dapps/gavcoin/Accounts/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -export default from './accounts'; diff --git a/js/src/dapps/gavcoin/Actions/ActionBuyIn/actionBuyIn.js b/js/src/dapps/gavcoin/Actions/ActionBuyIn/actionBuyIn.js deleted file mode 100644 index fe67c3739c0..00000000000 --- a/js/src/dapps/gavcoin/Actions/ActionBuyIn/actionBuyIn.js +++ /dev/null @@ -1,209 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import BigNumber from 'bignumber.js'; -import React, { Component, PropTypes } from 'react'; - -import { Dialog, FlatButton, TextField } from 'material-ui'; - -import { api } from '../../parity'; -import AccountSelector from '../../AccountSelector'; -import { ERRORS, validateAccount, validatePositiveNumber } from '../validation'; - -import styles from '../actions.css'; - -const NAME_ID = ' '; - -export default class ActionBuyIn extends Component { - static contextTypes = { - instance: PropTypes.object.isRequired - } - - static propTypes = { - accounts: PropTypes.array, - price: PropTypes.object, - onClose: PropTypes.func - } - - state = { - account: {}, - accountError: ERRORS.invalidAccount, - amount: 0, - amountError: ERRORS.invalidAmount, - maxPrice: api.util.fromWei(this.props.price.mul(1.2)).toFixed(0), - maxPriceError: null, - sending: false, - complete: false - } - - render () { - const { complete } = this.state; - - if (complete) { - return null; - } - - return ( - - { this.renderFields() } - - ); - } - - renderActions () { - const { complete } = this.state; - - if (complete) { - return ( - - ); - } - - const { accountError, amountError, maxPriceError, sending } = this.state; - const hasError = !!(amountError || accountError || maxPriceError); - - return ([ - , - - ]); - } - - renderFields () { - const maxPriceLabel = `maximum price in ETH (current ${api.util.fromWei(this.props.price).toFormat(3)})`; - - return ( -
    - - - -
    - ); - } - - onChangeAddress = (account) => { - this.setState({ - account, - accountError: validateAccount(account) - }, this.validateTotal); - } - - onChangeAmount = (event, amount) => { - this.setState({ - amount, - amountError: validatePositiveNumber(amount) - }, this.validateTotal); - } - - onChangeMaxPrice = (event, maxPrice) => { - this.setState({ - maxPrice, - maxPriceError: validatePositiveNumber(maxPrice) - }); - } - - validateTotal = () => { - const { account, accountError, amount, amountError } = this.state; - - if (accountError || amountError) { - return; - } - - if (new BigNumber(amount).gt(account.ethBalance.replace(',', ''))) { - this.setState({ - amountError: ERRORS.invalidTotal - }); - } - } - - onSend = () => { - const { instance } = this.context; - const maxPrice = api.util.toWei(this.state.maxPrice); - const values = [this.state.account.address, maxPrice.toString()]; - const options = { - from: this.state.account.address, - value: api.util.toWei(this.state.amount).toString() - }; - - this.setState({ - sending: true - }); - - instance.buyin - .estimateGas(options, values) - .then((gasEstimate) => { - options.gas = gasEstimate.mul(1.2).toFixed(0); - console.log(`buyin: gas estimated as ${gasEstimate.toFixed(0)} setting to ${options.gas}`); - - return instance.buyin.postTransaction(options, values); - }) - .then(() => { - this.props.onClose(); - this.setState({ - sending: false, - complete: true - }); - }) - .catch((error) => { - console.error('error', error); - this.setState({ - sending: false - }); - }); - } -} diff --git a/js/src/dapps/gavcoin/Actions/ActionBuyIn/index.js b/js/src/dapps/gavcoin/Actions/ActionBuyIn/index.js deleted file mode 100644 index 2c0c2374fe8..00000000000 --- a/js/src/dapps/gavcoin/Actions/ActionBuyIn/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -export default from './actionBuyIn'; diff --git a/js/src/dapps/gavcoin/Actions/ActionRefund/actionRefund.js b/js/src/dapps/gavcoin/Actions/ActionRefund/actionRefund.js deleted file mode 100644 index 77944f7c4d7..00000000000 --- a/js/src/dapps/gavcoin/Actions/ActionRefund/actionRefund.js +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import BigNumber from 'bignumber.js'; -import React, { Component, PropTypes } from 'react'; - -import { Dialog, FlatButton, TextField } from 'material-ui'; - -import { api } from '../../parity'; -import AccountSelector from '../../AccountSelector'; -import { ERRORS, validateAccount, validatePositiveNumber } from '../validation'; - -import styles from '../actions.css'; - -const DIVISOR = 10 ** 6; -const NAME_ID = ' '; - -export default class ActionRefund extends Component { - static contextTypes = { - instance: PropTypes.object.isRequired - } - - static propTypes = { - accounts: PropTypes.array, - price: PropTypes.object, - onClose: PropTypes.func - } - - state = { - account: {}, - accountError: ERRORS.invalidAccount, - complete: false, - sending: false, - amount: 0, - amountError: ERRORS.invalidAmount, - price: api.util.fromWei(this.props.price).toString(), - priceError: null - } - - render () { - const { complete } = this.state; - - if (complete) { - return null; - } - - return ( - - { this.renderFields() } - - ); - } - - renderActions () { - if (this.state.complete) { - return ( - - ); - } - - const hasError = !!(this.state.priceError || this.state.amountError || this.state.accountError); - - return ([ - , - - ]); - } - - renderFields () { - const priceLabel = `price in ETH (current ${api.util.fromWei(this.props.price).toFormat(3)})`; - - return ( -
    - - - -
    - ); - } - - onChangeAddress = (account) => { - this.setState({ - account, - accountError: validateAccount(account) - }); - } - - onChangeAmount = (event, amount) => { - this.setState({ - amount, - amountError: validatePositiveNumber(amount) - }); - } - - onChangePrice = (event, price) => { - this.setState({ - price, - priceError: validatePositiveNumber(price) - }); - } - - onSend = () => { - const { instance } = this.context; - const price = api.util.toWei(this.state.price); - const amount = new BigNumber(this.state.amount).mul(DIVISOR); - const values = [price.toString(), amount.toFixed(0)]; - const options = { - from: this.state.account.address - }; - - this.setState({ - sending: true - }); - - instance.refund - .estimateGas(options, values) - .then((gasEstimate) => { - options.gas = gasEstimate.mul(1.2).toFixed(0); - console.log(`refund: gas estimated as ${gasEstimate.toFixed(0)} setting to ${options.gas}`); - - return instance.refund.postTransaction(options, values); - }) - .then(() => { - this.props.onClose(); - this.setState({ - sending: false, - complete: true - }); - }) - .catch((error) => { - console.error('error', error); - this.setState({ - sending: false - }); - }); - } -} diff --git a/js/src/dapps/gavcoin/Actions/ActionRefund/index.js b/js/src/dapps/gavcoin/Actions/ActionRefund/index.js deleted file mode 100644 index d3b5b7e1bff..00000000000 --- a/js/src/dapps/gavcoin/Actions/ActionRefund/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -export default from './actionRefund'; diff --git a/js/src/dapps/gavcoin/Actions/ActionTransfer/actionTransfer.js b/js/src/dapps/gavcoin/Actions/ActionTransfer/actionTransfer.js deleted file mode 100644 index 787993ae02a..00000000000 --- a/js/src/dapps/gavcoin/Actions/ActionTransfer/actionTransfer.js +++ /dev/null @@ -1,223 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import BigNumber from 'bignumber.js'; -import React, { Component, PropTypes } from 'react'; - -import { Dialog, FlatButton, TextField, Toggle } from 'material-ui'; - -import AccountSelector from '../../AccountSelector'; -import AccountSelectorText from '../../AccountSelectorText'; -import { ERRORS, validateAccount, validatePositiveNumber } from '../validation'; - -import styles from '../actions.css'; - -const DIVISOR = 10 ** 6; -const NAME_ID = ' '; - -export default class ActionTransfer extends Component { - static contextTypes = { - instance: PropTypes.object.isRequired - } - - static propTypes = { - accounts: PropTypes.array, - price: PropTypes.object, - onClose: PropTypes.func - } - - state = { - fromAccount: {}, - fromAccountError: ERRORS.invalidAccount, - toAccount: {}, - toAccountError: ERRORS.invalidRecipient, - inputAccount: false, - complete: false, - sending: false, - amount: 0, - amountError: ERRORS.invalidAmount - } - - render () { - const { complete } = this.state; - - if (complete) { - return null; - } - - return ( - - { this.renderFields() } - - ); - } - - renderActions () { - const { complete, sending, amountError, fromAccountError, toAccountError } = this.state; - - if (complete) { - return ( - - ); - } - - const hasError = !!(amountError || fromAccountError || toAccountError); - - return ([ - , - - ]); - } - - renderFields () { - const { accounts } = this.props; - const { fromAccount, fromAccountError, toAccount, toAccountError, inputAccount, amount, amountError } = this.state; - - return ( -
    - -
    - - -
    - -
    - ); - } - - onChangeFromAccount = (fromAccount) => { - this.setState({ - fromAccount, - fromAccountError: validateAccount(fromAccount) - }, this.validateTotal); - } - - onChangeToAccount = (toAccount) => { - this.setState({ - toAccount, - toAccountError: validateAccount(toAccount) - }); - } - - onChangeToInput = () => { - this.setState({ - inputAccount: !this.state.inputAccount - }); - } - - onChangeAmount = (event, amount) => { - this.setState({ - amount, - amountError: validatePositiveNumber(amount) - }, this.validateTotal); - } - - validateTotal = () => { - const { fromAccount, fromAccountError, amount, amountError } = this.state; - - if (fromAccountError || amountError) { - return; - } - - if (new BigNumber(amount).gt(fromAccount.gavBalance.replace(',', ''))) { - this.setState({ - amountError: ERRORS.invalidTotal - }); - } - } - - onSend = () => { - const { instance } = this.context; - const amount = new BigNumber(this.state.amount).mul(DIVISOR); - const values = [this.state.toAccount.address, amount.toFixed(0)]; - const options = { - from: this.state.fromAccount.address - }; - - this.setState({ - sending: true - }); - - instance.transfer - .estimateGas(options, values) - .then((gasEstimate) => { - options.gas = gasEstimate.mul(1.2).toFixed(0); - console.log(`transfer: gas estimated as ${gasEstimate.toFixed(0)} setting to ${options.gas}`); - - return instance.transfer.postTransaction(options, values); - }) - .then(() => { - this.props.onClose(); - this.setState({ - sending: false, - complete: true - }); - }) - .catch((error) => { - console.error('error', error); - this.setState({ - sending: false - }); - }); - } -} diff --git a/js/src/dapps/gavcoin/Actions/ActionTransfer/index.js b/js/src/dapps/gavcoin/Actions/ActionTransfer/index.js deleted file mode 100644 index 848800e00fe..00000000000 --- a/js/src/dapps/gavcoin/Actions/ActionTransfer/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -export default from './actionTransfer'; diff --git a/js/src/dapps/gavcoin/Actions/StepComplete/index.js b/js/src/dapps/gavcoin/Actions/StepComplete/index.js deleted file mode 100644 index 7b95b1937a8..00000000000 --- a/js/src/dapps/gavcoin/Actions/StepComplete/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -export default from './stepComplete'; diff --git a/js/src/dapps/gavcoin/Actions/StepComplete/stepComplete.js b/js/src/dapps/gavcoin/Actions/StepComplete/stepComplete.js deleted file mode 100644 index a066a7c30d8..00000000000 --- a/js/src/dapps/gavcoin/Actions/StepComplete/stepComplete.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import React, { Component } from 'react'; - -import styles from '../actions.css'; - -export default class StepComplete extends Component { - render () { - return ( -
    - Your transaction has been posted. Please visit the Parity Signer to authenticate the transfer. -
    - ); - } -} diff --git a/js/src/dapps/gavcoin/Actions/actions.css b/js/src/dapps/gavcoin/Actions/actions.css deleted file mode 100644 index 0549a6dc134..00000000000 --- a/js/src/dapps/gavcoin/Actions/actions.css +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright 2015, 2016 Ethcore (UK) Ltd. -/* This file is part of Parity. -/* -/* Parity is free software: you can redistribute it and/or modify -/* it under the terms of the GNU General Public License as published by -/* the Free Software Foundation, either version 3 of the License, or -/* (at your option) any later version. -/* -/* Parity is distributed in the hope that it will be useful, -/* but WITHOUT ANY WARRANTY; without even the implied warranty of -/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -/* GNU General Public License for more details. -/* -/* You should have received a copy of the GNU General Public License -/* along with Parity. If not, see . -*/ -.actions { - text-align: center; - padding: 2em 0 0 0; - width: 100%; -} - -.button { - margin: 0 0.5em; -} - -.button button { - background-color: #430 !important; - height: 56px !important; - padding: 0 10px !important; -} - -.button button[disabled] { - opacity: 0.25; -} - -.dlgbtn { -} - -.dlgbtn span { - color: #430 !important; -} - -.dlgbtn[disabled] { - opacity: 0.25; -} - -.dialog { -} - -.dialog h3 { - color: #430 !important; - text-transform: uppercase; -} - -.dialogtext { - padding-top: 1em; -} - -.link, .link:hover, .link:visited { - color: rgb(0, 188, 212); - text-decoration: none; -} - -.overlay { - position: relative; -} - -.overlay svg { - opacity: 0; -} - -.toggle { - text-align: right; -} - -.overlaytoggle { - position: absolute !important; - top: 40px; - right: 0; - display: inline-block !important; - width: auto !important; -} diff --git a/js/src/dapps/gavcoin/Actions/actions.js b/js/src/dapps/gavcoin/Actions/actions.js deleted file mode 100644 index e58d2223fa0..00000000000 --- a/js/src/dapps/gavcoin/Actions/actions.js +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import React, { Component, PropTypes } from 'react'; - -import { RaisedButton } from 'material-ui'; -import ActionAddShoppingCart from 'material-ui/svg-icons/action/add-shopping-cart'; -// import AvReplay from 'material-ui/svg-icons/av/replay'; -import ContentSend from 'material-ui/svg-icons/content/send'; - -import styles from './actions.css'; - -export default class Actions extends Component { - static propTypes = { - onAction: PropTypes.func.isRequired, - gavBalance: PropTypes.object.isRequired - } - - render () { - const { gavBalance } = this.props; - - return ( -
    - } - label='buy coins' - primary - onTouchTap={ this.onBuyIn } /> - } - label='send coins' - primary - onTouchTap={ this.onTransfer } /> -
    - ); - - // } - // label='claim refund' - // primary - // onTouchTap={ this.onRefund } /> - } - - onBuyIn = () => { - this.props.onAction('BuyIn'); - } - - onTransfer = () => { - const { gavBalance } = this.props; - - if (gavBalance && gavBalance.gt(0)) { - this.props.onAction('Transfer'); - } - } - - onRefund = () => { - this.props.onAction('Refund'); - } -} diff --git a/js/src/dapps/gavcoin/Actions/index.js b/js/src/dapps/gavcoin/Actions/index.js deleted file mode 100644 index 865bd65ce14..00000000000 --- a/js/src/dapps/gavcoin/Actions/index.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import ActionBuyIn from './ActionBuyIn'; -import ActionRefund from './ActionRefund'; -import ActionTransfer from './ActionTransfer'; - -export default from './actions'; - -export { - ActionBuyIn, - ActionRefund, - ActionTransfer -}; diff --git a/js/src/dapps/gavcoin/Actions/validation.js b/js/src/dapps/gavcoin/Actions/validation.js deleted file mode 100644 index d494c3392aa..00000000000 --- a/js/src/dapps/gavcoin/Actions/validation.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import BigNumber from 'bignumber.js'; - -import { api } from '../parity'; - -export const ERRORS = { - invalidAccount: 'please select an account to transact with', - invalidRecipient: 'please select an account to send to', - invalidAddress: 'the address is not in the correct format', - invalidAmount: 'please enter a positive amount > 0', - invalidTotal: 'the amount is greater than the availale balance' -}; - -export function validatePositiveNumber (value) { - let bn = null; - - try { - bn = new BigNumber(value); - } catch (e) { - } - - if (!bn || !bn.gt(0)) { - return ERRORS.invalidAmount; - } - - return null; -} - -export function validateAccount (account) { - if (!account || !account.address) { - return ERRORS.invalidAccount; - } - - if (!api.util.isAddressValid(account.address)) { - return ERRORS.invalidAddress; - } - - account.address = api.util.toChecksumAddress(account.address); - - return null; -} diff --git a/js/src/dapps/gavcoin/Application/application.css b/js/src/dapps/gavcoin/Application/application.css deleted file mode 100644 index 25472f00723..00000000000 --- a/js/src/dapps/gavcoin/Application/application.css +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright 2015, 2016 Ethcore (UK) Ltd. -/* This file is part of Parity. -/* -/* Parity is free software: you can redistribute it and/or modify -/* it under the terms of the GNU General Public License as published by -/* the Free Software Foundation, either version 3 of the License, or -/* (at your option) any later version. -/* -/* Parity is distributed in the hope that it will be useful, -/* but WITHOUT ANY WARRANTY; without even the implied warranty of -/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -/* GNU General Public License for more details. -/* -/* You should have received a copy of the GNU General Public License -/* along with Parity. If not, see . -*/ - -.body { - background-size: cover; - background-repeat: no-repeat; - width: 100%; -} diff --git a/js/src/dapps/gavcoin/Application/application.js b/js/src/dapps/gavcoin/Application/application.js deleted file mode 100644 index c5eda9db80c..00000000000 --- a/js/src/dapps/gavcoin/Application/application.js +++ /dev/null @@ -1,249 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import BigNumber from 'bignumber.js'; -import React, { Component, PropTypes } from 'react'; - -import getMuiTheme from 'material-ui/styles/getMuiTheme'; -import lightBaseTheme from 'material-ui/styles/baseThemes/lightBaseTheme'; - -const muiTheme = getMuiTheme(lightBaseTheme); - -import { api } from '../parity'; - -import * as abis from '../../../contracts/abi'; - -import Accounts from '../Accounts'; -import Actions, { ActionBuyIn, ActionRefund, ActionTransfer } from '../Actions'; -import Events from '../Events'; -import Loading from '../Loading'; -import Status from '../Status'; - -import styles from './application.css'; -import bgimage from '../../../../assets/images/dapps/gavcoin-bg.jpg'; - -const bgstyle = { - backgroundImage: `url(${bgimage})` -}; - -const DIVISOR = 10 ** 6; - -export default class Application extends Component { - static childContextTypes = { - api: PropTypes.object, - contract: PropTypes.object, - instance: PropTypes.object, - muiTheme: PropTypes.object - }; - - state = { - action: null, - address: null, - accounts: [], - accountsInfo: {}, - blockNumber: new BigNumber(-1), - ethBalance: new BigNumber(0), - gavBalance: new BigNumber(0), - instance: null, - loading: true, - price: null, - remaining: null, - totalSupply: null - } - - componentDidMount () { - this.attachInterface(); - } - - render () { - const { accounts, accountsInfo, address, blockNumber, gavBalance, loading, price, remaining, totalSupply } = this.state; - - if (loading) { - return ( - - ); - } - - return ( -
    - { this.renderModals() } - - - - - -
    - ); - } - - renderModals () { - const { action, accounts, price } = this.state; - - switch (action) { - case 'BuyIn': - return ( - - ); - case 'Refund': - return ( - - ); - case 'Transfer': - return ( - - ); - default: - return null; - } - } - - getChildContext () { - const { contract, instance } = this.state; - - return { - api, - contract, - instance, - muiTheme - }; - } - - onAction = (action) => { - this.setState({ - action - }); - } - - onActionClose = () => { - this.setState({ - action: null - }); - } - - onNewBlockNumber = (_error, blockNumber) => { - const { instance, accounts } = this.state; - - if (_error) { - console.error('onNewBlockNumber', _error); - return; - } - - Promise - .all([ - instance.totalSupply.call(), - instance.remaining.call(), - instance.price.call() - ]) - .then(([totalSupply, remaining, price]) => { - this.setState({ - blockNumber, - totalSupply, - remaining, - price - }); - - const gavQueries = accounts.map((account) => instance.balanceOf.call({}, [account.address])); - const ethQueries = accounts.map((account) => api.eth.getBalance(account.address)); - - return Promise.all([ - Promise.all(gavQueries), - Promise.all(ethQueries) - ]); - }) - .then(([gavBalances, ethBalances]) => { - this.setState({ - ethBalance: ethBalances.reduce((total, balance) => total.add(balance), new BigNumber(0)), - gavBalance: gavBalances.reduce((total, balance) => total.add(balance), new BigNumber(0)), - accounts: accounts.map((account, idx) => { - const ethBalance = ethBalances[idx]; - const gavBalance = gavBalances[idx]; - - account.ethBalance = api.util.fromWei(ethBalance).toFormat(3); - account.gavBalance = gavBalance.div(DIVISOR).toFormat(6); - account.hasGav = gavBalance.gt(0); - - return account; - }) - }); - }) - .catch((error) => { - console.error('onNewBlockNumber', error); - }); - } - - attachInterface = () => { - api.ethcore - .registryAddress() - .then((registryAddress) => { - console.log(`the registry was found at ${registryAddress}`); - - const registry = api.newContract(abis.registry, registryAddress).instance; - - return Promise - .all([ - registry.getAddress.call({}, [api.util.sha3('gavcoin'), 'A']), - api.eth.accounts(), - api.personal.accountsInfo() - ]); - }) - .then(([address, addresses, accountsInfo]) => { - accountsInfo = accountsInfo || {}; - console.log(`gavcoin was found at ${address}`); - - const contract = api.newContract(abis.gavcoin, address); - - this.setState({ - loading: false, - address, - contract, - accountsInfo, - instance: contract.instance, - accounts: addresses.map((address) => { - const info = accountsInfo[address] || {}; - - return { - address, - name: info.name, - uuid: info.uuid - }; - }) - }); - - api.subscribe('eth_blockNumber', this.onNewBlockNumber); - }) - .catch((error) => { - console.error('attachInterface', error); - }); - } -} diff --git a/js/src/dapps/gavcoin/Application/index.js b/js/src/dapps/gavcoin/Application/index.js deleted file mode 100644 index 236578226a8..00000000000 --- a/js/src/dapps/gavcoin/Application/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -export default from './application'; diff --git a/js/src/dapps/gavcoin/Events/Event/event.js b/js/src/dapps/gavcoin/Events/Event/event.js deleted file mode 100644 index c068454f0c5..00000000000 --- a/js/src/dapps/gavcoin/Events/Event/event.js +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import moment from 'moment'; -import React, { Component, PropTypes } from 'react'; - -import IdentityIcon from '../../IdentityIcon'; -import { formatCoins, formatEth, formatHash } from '../../format'; - -import styles from '../events.css'; - -const EMPTY_COLUMN = ( - -); - -export default class Event extends Component { - static contextTypes = { - accountsInfo: PropTypes.object.isRequired, - api: PropTypes.object.isRequired - } - - static propTypes = { - event: PropTypes.object, - value: PropTypes.object, - price: PropTypes.object, - fromAddress: PropTypes.string, - toAddress: PropTypes.string - } - - state = { - block: null - } - - componentDidMount () { - this.loadBlock(); - } - - render () { - const { event, fromAddress, toAddress, price, value } = this.props; - const { block } = this.state; - const { state, type } = event; - const cls = `${styles.event} ${styles[state]} ${styles[type.toLowerCase()]}`; - - return ( - - { this.renderTimestamp(block) } - { this.renderType(type) } - { this.renderValue(value) } - { this.renderPrice(price) } - { this.renderAddress(fromAddress) } - { this.renderAddress(toAddress) } - - ); - } - - renderTimestamp (block) { - return ( - - { !block ? ' ' : moment(block.timestamp).fromNow() } - - ); - } - - renderAddress (address) { - if (!address) { - return EMPTY_COLUMN; - } - - return ( - - - { this.renderAddressName(address) } - - ); - } - - renderAddressName (address) { - const { accountsInfo } = this.context; - const account = accountsInfo[address]; - - if (account && account.name) { - return ( -
    - { account.name } -
    - ); - } - - return ( -
    - { formatHash(address) } -
    - ); - } - - renderPrice (price) { - if (!price) { - return EMPTY_COLUMN; - } - - return ( - - { formatEth(price) } ETH - - ); - } - - renderValue (value) { - if (!value) { - return EMPTY_COLUMN; - } - - return ( - - { formatCoins(value) } GAV - - ); - } - - renderType (type) { - return ( - - { type } - - ); - } - - loadBlock () { - const { api } = this.context; - const { event } = this.props; - - if (!event || !event.blockNumber || event.blockNumber.eq(0)) { - return; - } - - api.eth - .getBlockByNumber(event.blockNumber) - .then((block) => { - this.setState({ block }); - }); - } -} diff --git a/js/src/dapps/gavcoin/Events/Event/index.js b/js/src/dapps/gavcoin/Events/Event/index.js deleted file mode 100644 index 0925882d3e3..00000000000 --- a/js/src/dapps/gavcoin/Events/Event/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -export default from './event'; diff --git a/js/src/dapps/gavcoin/Events/EventBuyin/eventBuyin.js b/js/src/dapps/gavcoin/Events/EventBuyin/eventBuyin.js deleted file mode 100644 index 571da1bef19..00000000000 --- a/js/src/dapps/gavcoin/Events/EventBuyin/eventBuyin.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import React, { Component, PropTypes } from 'react'; - -import Event from '../Event'; - -export default class EventBuyin extends Component { - static propTypes = { - event: PropTypes.object - } - - render () { - const { event } = this.props; - const { buyer, price, amount } = event.params; - - return ( - - ); - } -} diff --git a/js/src/dapps/gavcoin/Events/EventBuyin/index.js b/js/src/dapps/gavcoin/Events/EventBuyin/index.js deleted file mode 100644 index 77edc578af2..00000000000 --- a/js/src/dapps/gavcoin/Events/EventBuyin/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -export default from './eventBuyin'; diff --git a/js/src/dapps/gavcoin/Events/EventNewTranch/eventNewTranch.js b/js/src/dapps/gavcoin/Events/EventNewTranch/eventNewTranch.js deleted file mode 100644 index 16fa0535156..00000000000 --- a/js/src/dapps/gavcoin/Events/EventNewTranch/eventNewTranch.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import React, { Component, PropTypes } from 'react'; - -import Event from '../Event'; - -export default class EventNewTranch extends Component { - static propTypes = { - event: PropTypes.object - } - - render () { - const { event } = this.props; - const { price } = event.params; - - return ( - - ); - } -} diff --git a/js/src/dapps/gavcoin/Events/EventNewTranch/index.js b/js/src/dapps/gavcoin/Events/EventNewTranch/index.js deleted file mode 100644 index 46d1d2df628..00000000000 --- a/js/src/dapps/gavcoin/Events/EventNewTranch/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -export default from './eventNewTranch'; diff --git a/js/src/dapps/gavcoin/Events/EventRefund/eventRefund.js b/js/src/dapps/gavcoin/Events/EventRefund/eventRefund.js deleted file mode 100644 index 5c4ed656209..00000000000 --- a/js/src/dapps/gavcoin/Events/EventRefund/eventRefund.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import React, { Component, PropTypes } from 'react'; - -import Event from '../Event'; - -export default class EventRefund extends Component { - static propTypes = { - event: PropTypes.object - } - - render () { - const { event } = this.props; - const { buyer, price, amount } = event.params; - - return ( - - ); - } -} diff --git a/js/src/dapps/gavcoin/Events/EventRefund/index.js b/js/src/dapps/gavcoin/Events/EventRefund/index.js deleted file mode 100644 index bac0f20dcca..00000000000 --- a/js/src/dapps/gavcoin/Events/EventRefund/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -export default from './eventRefund'; diff --git a/js/src/dapps/gavcoin/Events/EventTransfer/eventTransfer.js b/js/src/dapps/gavcoin/Events/EventTransfer/eventTransfer.js deleted file mode 100644 index 64e489cb010..00000000000 --- a/js/src/dapps/gavcoin/Events/EventTransfer/eventTransfer.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import React, { Component, PropTypes } from 'react'; - -import Event from '../Event'; - -export default class EventTransfer extends Component { - static propTypes = { - event: PropTypes.object - } - - render () { - const { event } = this.props; - const { from, to, value } = event.params; - - return ( - - ); - } -} diff --git a/js/src/dapps/gavcoin/Events/EventTransfer/index.js b/js/src/dapps/gavcoin/Events/EventTransfer/index.js deleted file mode 100644 index a75b45a0ac9..00000000000 --- a/js/src/dapps/gavcoin/Events/EventTransfer/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -export default from './eventTransfer'; diff --git a/js/src/dapps/gavcoin/Events/events.css b/js/src/dapps/gavcoin/Events/events.css deleted file mode 100644 index 97c3d331b6f..00000000000 --- a/js/src/dapps/gavcoin/Events/events.css +++ /dev/null @@ -1,101 +0,0 @@ -/* Copyright 2015, 2016 Ethcore (UK) Ltd. -/* This file is part of Parity. -/* -/* Parity is free software: you can redistribute it and/or modify -/* it under the terms of the GNU General Public License as published by -/* the Free Software Foundation, either version 3 of the License, or -/* (at your option) any later version. -/* -/* Parity is distributed in the hope that it will be useful, -/* but WITHOUT ANY WARRANTY; without even the implied warranty of -/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -/* GNU General Public License for more details. -/* -/* You should have received a copy of the GNU General Public License -/* along with Parity. If not, see . -*/ -.events { - padding: 4em 2em; - text-align: center; - display: flex; -} - -.container { - overflow: auto; -} - -.list { - margin: 0 auto; - border: none; - border-spacing: 0; - text-align: left; -} - -.list td { - vertical-align: top; - padding: 0.25em 1em; - max-height: 1.5em; - white-space: nowrap; -} - -.event { - line-height: 32px; - vertical-align: top; -} - -.blocknumber, -.ethvalue, -.gavvalue { -} - -.blocknumber, -.gavvalue { - text-align: right; -} - -.ethvalue { - text-align: center; -} - -.type { -} - -.account { -} - -.account img { - margin-bottom: -11px; -} - -.address { -} - -.name { - text-transform: uppercase; -} - -.event div { - display: inline; - margin-right: 1em; - vertical-align: top; -} - -.mined { -} - -.pending { - opacity: 0.5; -} - -.buyin { -} - -.refund { -} - -.transfer { -} - -.newtranch { - background: rgba(255, 175, 0, 0.125); /*rgba(68, 51, 0, 0.15);*/ -} diff --git a/js/src/dapps/gavcoin/Events/events.js b/js/src/dapps/gavcoin/Events/events.js deleted file mode 100644 index 5262e797530..00000000000 --- a/js/src/dapps/gavcoin/Events/events.js +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import React, { Component, PropTypes } from 'react'; - -import { api } from '../parity'; - -import EventBuyin from './EventBuyin'; -import EventNewTranch from './EventNewTranch'; -import EventRefund from './EventRefund'; -import EventTransfer from './EventTransfer'; - -import styles from './events.css'; - -export default class Events extends Component { - static childContextTypes = { - accountsInfo: PropTypes.object - } - - static contextTypes = { - contract: PropTypes.object.isRequired, - instance: PropTypes.object.isRequired - } - - static propTypes = { - accountsInfo: PropTypes.object.isRequired - } - - state = { - allEvents: [], - minedEvents: [], - pendingEvents: [] - } - - componentDidMount () { - this.setupFilters(); - } - - render () { - return ( -
    -
    - - - { this.renderEvents() } - -
    -
    -
    - ); - } - - renderEvents () { - const { allEvents } = this.state; - - if (!allEvents.length) { - return null; - } - - return allEvents - .map((event) => { - switch (event.type) { - case 'Buyin': - return ; - case 'NewTranch': - return ; - case 'Refund': - return ; - case 'Transfer': - return ; - } - }); - } - - getChildContext () { - const { accountsInfo } = this.props; - - return { accountsInfo }; - } - - setupFilters () { - const { contract } = this.context; - - const sortEvents = (a, b) => b.blockNumber.cmp(a.blockNumber) || b.logIndex.cmp(a.logIndex); - const logToEvent = (log) => { - const key = api.util.sha3(JSON.stringify(log)); - const { blockNumber, logIndex, transactionHash, transactionIndex, params, type } = log; - - return { - type: log.event, - state: type, - blockNumber, - logIndex, - transactionHash, - transactionIndex, - params: Object.keys(params).reduce((data, name) => { - data[name] = params[name].value; - return data; - }, {}), - key - }; - }; - - const options = { - fromBlock: 0, - toBlock: 'pending', - limit: 50 - }; - - contract.subscribe(null, options, (error, _logs) => { - if (error) { - console.error('setupFilters', error); - return; - } - - if (!_logs.length) { - return; - } - - const logs = _logs.map(logToEvent); - - const minedEvents = logs - .filter((log) => log.state === 'mined') - .reverse() - .concat(this.state.minedEvents) - .sort(sortEvents); - const pendingEvents = logs - .filter((log) => log.state === 'pending') - .reverse() - .concat(this.state.pendingEvents.filter((event) => { - return !logs.find((log) => { - const isMined = (log.state === 'mined') && (log.transactionHash === event.transactionHash); - const isPending = (log.state === 'pending') && (log.key === event.key); - - return isMined || isPending; - }); - })) - .sort(sortEvents); - const allEvents = pendingEvents.concat(minedEvents); - - this.setState({ - allEvents, - minedEvents, - pendingEvents - }); - }); - } -} diff --git a/js/src/dapps/gavcoin/Events/index.js b/js/src/dapps/gavcoin/Events/index.js deleted file mode 100644 index 88ad6d407c9..00000000000 --- a/js/src/dapps/gavcoin/Events/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -export default from './events'; diff --git a/js/src/dapps/gavcoin/IdentityIcon/identityIcon.css b/js/src/dapps/gavcoin/IdentityIcon/identityIcon.css deleted file mode 100644 index 2b645d8239b..00000000000 --- a/js/src/dapps/gavcoin/IdentityIcon/identityIcon.css +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright 2015, 2016 Ethcore (UK) Ltd. -/* This file is part of Parity. -/* -/* Parity is free software: you can redistribute it and/or modify -/* it under the terms of the GNU General Public License as published by -/* the Free Software Foundation, either version 3 of the License, or -/* (at your option) any later version. -/* -/* Parity is distributed in the hope that it will be useful, -/* but WITHOUT ANY WARRANTY; without even the implied warranty of -/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -/* GNU General Public License for more details. -/* -/* You should have received a copy of the GNU General Public License -/* along with Parity. If not, see . -*/ - -.icon { - width: 32px; - height: 32px; - border-radius: 50%; - margin-right: 0.5em; -} diff --git a/js/src/dapps/gavcoin/IdentityIcon/identityIcon.js b/js/src/dapps/gavcoin/IdentityIcon/identityIcon.js deleted file mode 100644 index 51f48d46ab3..00000000000 --- a/js/src/dapps/gavcoin/IdentityIcon/identityIcon.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import React, { Component, PropTypes } from 'react'; - -import { api } from '../parity'; -import styles from './identityIcon.css'; - -export default class IdentityIcon extends Component { - static propTypes = { - address: PropTypes.string.isRequired - } - - render () { - const { address } = this.props; - - return ( - - ); - } -} diff --git a/js/src/dapps/gavcoin/IdentityIcon/index.js b/js/src/dapps/gavcoin/IdentityIcon/index.js deleted file mode 100644 index 76c107bfb75..00000000000 --- a/js/src/dapps/gavcoin/IdentityIcon/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -export default from './identityIcon'; diff --git a/js/src/dapps/gavcoin/Loading/index.js b/js/src/dapps/gavcoin/Loading/index.js deleted file mode 100644 index 0468cab37df..00000000000 --- a/js/src/dapps/gavcoin/Loading/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -export default from './loading'; diff --git a/js/src/dapps/gavcoin/Loading/loading.css b/js/src/dapps/gavcoin/Loading/loading.css deleted file mode 100644 index 3ec65400f0c..00000000000 --- a/js/src/dapps/gavcoin/Loading/loading.css +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright 2015, 2016 Ethcore (UK) Ltd. -/* This file is part of Parity. -/* -/* Parity is free software: you can redistribute it and/or modify -/* it under the terms of the GNU General Public License as published by -/* the Free Software Foundation, either version 3 of the License, or -/* (at your option) any later version. -/* -/* Parity is distributed in the hope that it will be useful, -/* but WITHOUT ANY WARRANTY; without even the implied warranty of -/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -/* GNU General Public License for more details. -/* -/* You should have received a copy of the GNU General Public License -/* along with Parity. If not, see . -*/ -.loading { - width: 100%; - text-align: center; - padding-top: 2em; -} diff --git a/js/src/dapps/gavcoin/Loading/loading.js b/js/src/dapps/gavcoin/Loading/loading.js deleted file mode 100644 index 78aaa882885..00000000000 --- a/js/src/dapps/gavcoin/Loading/loading.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import React, { Component } from 'react'; - -import { CircularProgress } from 'material-ui'; - -import styles from './loading.css'; - -export default class Loading extends Component { - render () { - return ( -
    - -
    - ); - } -} diff --git a/js/src/dapps/gavcoin/Status/index.js b/js/src/dapps/gavcoin/Status/index.js deleted file mode 100644 index 44079b22485..00000000000 --- a/js/src/dapps/gavcoin/Status/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -export default from './status'; diff --git a/js/src/dapps/gavcoin/Status/status.css b/js/src/dapps/gavcoin/Status/status.css deleted file mode 100644 index cda91eed45d..00000000000 --- a/js/src/dapps/gavcoin/Status/status.css +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright 2015, 2016 Ethcore (UK) Ltd. -/* This file is part of Parity. -/* -/* Parity is free software: you can redistribute it and/or modify -/* it under the terms of the GNU General Public License as published by -/* the Free Software Foundation, either version 3 of the License, or -/* (at your option) any later version. -/* -/* Parity is distributed in the hope that it will be useful, -/* but WITHOUT ANY WARRANTY; without even the implied warranty of -/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -/* GNU General Public License for more details. -/* -/* You should have received a copy of the GNU General Public License -/* along with Parity. If not, see . -*/ -.status { - background: rgba(255, 175, 0, 0.25); - color: #430; - padding: 4em 0 2em 0; - display: flex; - flex-wrap: wrap; - justify-content: space-around; -} - -.title { - margin-top: 0; - font-weight: 300; - font-size: 2.5rem; - text-transform: uppercase; -} - -.item { - flex: 1; - margin: 1.5rem 1rem; - text-align: center; -} - -.byline { - font-size: 1.25em; - color: #430; - opacity: 0.75; -} - -.heading { - text-transform: uppercase; - letter-spacing: 0.25em; - font-size: 1.5em; - color: #430; - opacity: 0.75; -} - -.hero { - font-size: 4em; -} diff --git a/js/src/dapps/gavcoin/Status/status.js b/js/src/dapps/gavcoin/Status/status.js deleted file mode 100644 index 81dd0cb1694..00000000000 --- a/js/src/dapps/gavcoin/Status/status.js +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import React, { Component, PropTypes } from 'react'; - -import { formatBlockNumber, formatCoins, formatEth } from '../format'; - -import styles from './status.css'; - -export default class Status extends Component { - static propTypes = { - address: PropTypes.string, - gavBalance: PropTypes.object, - blockNumber: PropTypes.object, - totalSupply: PropTypes.object, - remaining: PropTypes.object, - price: PropTypes.object, - children: PropTypes.node - } - - render () { - const { blockNumber, gavBalance, totalSupply, remaining, price } = this.props; - - if (!totalSupply) { - return null; - } - - return ( -
    -
    -
     
    -
    - { formatCoins(remaining, -1) } -
    -
    - available for { formatEth(price) }ETH -
    -
    -
    -
    GAVcoin
    -
    - { formatCoins(totalSupply, -1) } -
    -
    - total at { formatBlockNumber(blockNumber) } -
    -
    -
    -
     
    -
    - { formatCoins(gavBalance, -1) } -
    -
    - coin balance -
    -
    - { this.props.children } -
    - ); - } -} diff --git a/js/src/dapps/gavcoin/format/index.js b/js/src/dapps/gavcoin/format/index.js deleted file mode 100644 index ee554bb60ad..00000000000 --- a/js/src/dapps/gavcoin/format/index.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -import BigNumber from 'bignumber.js'; - -import { api } from '../parity'; - -const DIVISOR = 10 ** 6; -const ZERO = new BigNumber(0); - -export function formatBlockNumber (blockNumber) { - return ZERO.eq(blockNumber || 0) - ? 'Pending' - : `#${blockNumber.toFormat()}`; -} - -export function formatCoins (amount, decimals = 6) { - const adjusted = amount.div(DIVISOR); - - if (decimals === -1) { - if (adjusted.gte(10000)) { - decimals = 0; - } else if (adjusted.gte(1000)) { - decimals = 1; - } else if (adjusted.gte(100)) { - decimals = 2; - } else if (adjusted.gte(10)) { - decimals = 3; - } else { - decimals = 4; - } - } - - return adjusted.toFormat(decimals); -} - -export function formatEth (eth, decimals = 3) { - return api.util.fromWei(eth).toFormat(decimals); -} - -export function formatHash (hash) { - return `${hash.substr(0, 10)}...${hash.substr(-8)}`; -} diff --git a/js/src/dapps/gavcoin/parity.js b/js/src/dapps/gavcoin/parity.js deleted file mode 100644 index f6d59f44d57..00000000000 --- a/js/src/dapps/gavcoin/parity.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -const { api } = window.parity; - -export { - api -}; diff --git a/js/webpack.config.js b/js/webpack.config.js index a4bc49aaa28..bd39d0a9ffa 100644 --- a/js/webpack.config.js +++ b/js/webpack.config.js @@ -37,7 +37,6 @@ module.exports = { entry: { // dapps 'basiccoin': ['./dapps/basiccoin.js'], - 'gavcoin': ['./dapps/gavcoin.js'], 'githubhint': ['./dapps/githubhint.js'], 'registry': ['./dapps/registry.js'], 'signaturereg': ['./dapps/signaturereg.js'],