├── .env
├── .eslintrc
├── .gitignore
├── Dockerfile
├── Dockerrun.aws.json
├── LICENSE.md
├── README.md
├── build
├── asset-manifest.json
├── assets
│ ├── MetaX_Loading_Logo.png
│ ├── adChain_Publisher_Registry_Logo.png
│ ├── ad_chain.png
│ ├── ad_chain.svg
│ ├── diagrams
│ │ └── adchain-registry-webapp-containers-view.png
│ └── metax.png
├── favicon.ico
├── fonts
│ ├── avenirnext
│ │ ├── AvenirNextLTW01RegularRegular.eot
│ │ ├── AvenirNextLTW01RegularRegular.ttf
│ │ ├── AvenirNextLTW01RegularRegular.woff
│ │ ├── demo.html
│ │ └── stylesheet.css
│ └── avenirnextbold
│ │ ├── AvenirNextLTW01BoldRegular.eot
│ │ ├── AvenirNextLTW01BoldRegular.ttf
│ │ ├── AvenirNextLTW01BoldRegular.woff
│ │ ├── demo.html
│ │ └── stylesheet.css
├── humans.txt
├── index.html
├── manifest.json
├── service-worker.js
├── style.css
└── vendor
│ ├── README.md
│ ├── fab.min.js
│ ├── highlight_solarized_dark.min.css
│ ├── mailchimp_horizontal-slim-10_7.css
│ ├── semantic.min.css
│ ├── semantic.min.js
│ ├── themes
│ ├── basic
│ │ └── assets
│ │ │ └── fonts
│ │ │ ├── icons.eot
│ │ │ ├── icons.svg
│ │ │ ├── icons.ttf
│ │ │ └── icons.woff
│ ├── default
│ │ └── assets
│ │ │ ├── fonts
│ │ │ ├── icons.eot
│ │ │ ├── icons.otf
│ │ │ ├── icons.svg
│ │ │ ├── icons.ttf
│ │ │ ├── icons.woff
│ │ │ └── icons.woff2
│ │ │ └── images
│ │ │ └── flags.png
│ ├── github
│ │ └── assets
│ │ │ └── fonts
│ │ │ ├── octicons-local.ttf
│ │ │ ├── octicons.svg
│ │ │ ├── octicons.ttf
│ │ │ └── octicons.woff
│ └── material
│ │ └── assets
│ │ └── fonts
│ │ ├── icons.eot
│ │ ├── icons.svg
│ │ ├── icons.ttf
│ │ └── icons.woff
│ ├── toastr.css
│ ├── web3-1.0.min.js
│ └── web3.min.js
├── package-lock.json
├── package.json
├── public
├── assets
│ ├── MetaX_Loading_Logo.png
│ ├── adChain_Publisher_Registry_Logo.png
│ ├── ad_chain.png
│ ├── ad_chain.svg
│ ├── diagrams
│ │ └── adchain-registry-webapp-containers-view.png
│ └── metax.png
├── favicon.ico
├── fonts
│ ├── avenirnext
│ │ ├── AvenirNextLTW01RegularRegular.eot
│ │ ├── AvenirNextLTW01RegularRegular.ttf
│ │ ├── AvenirNextLTW01RegularRegular.woff
│ │ ├── demo.html
│ │ └── stylesheet.css
│ └── avenirnextbold
│ │ ├── AvenirNextLTW01BoldRegular.eot
│ │ ├── AvenirNextLTW01BoldRegular.ttf
│ │ ├── AvenirNextLTW01BoldRegular.woff
│ │ ├── demo.html
│ │ └── stylesheet.css
├── humans.txt
├── index.html
├── manifest.json
├── style.css
└── vendor
│ ├── README.md
│ ├── fab.min.js
│ ├── highlight_solarized_dark.min.css
│ ├── mailchimp_horizontal-slim-10_7.css
│ ├── semantic.min.css
│ ├── semantic.min.js
│ ├── themes
│ ├── basic
│ │ └── assets
│ │ │ └── fonts
│ │ │ ├── icons.eot
│ │ │ ├── icons.svg
│ │ │ ├── icons.ttf
│ │ │ └── icons.woff
│ ├── default
│ │ └── assets
│ │ │ ├── fonts
│ │ │ ├── icons.eot
│ │ │ ├── icons.otf
│ │ │ ├── icons.svg
│ │ │ ├── icons.ttf
│ │ │ ├── icons.woff
│ │ │ └── icons.woff2
│ │ │ └── images
│ │ │ └── flags.png
│ ├── github
│ │ └── assets
│ │ │ └── fonts
│ │ │ ├── octicons-local.ttf
│ │ │ ├── octicons.svg
│ │ │ ├── octicons.ttf
│ │ │ └── octicons.woff
│ └── material
│ │ └── assets
│ │ └── fonts
│ │ ├── icons.eot
│ │ ├── icons.svg
│ │ ├── icons.ttf
│ │ └── icons.woff
│ ├── toastr.css
│ ├── web3-1.0.min.js
│ └── web3.min.js
├── src
├── App.js
├── App.test.js
├── components
│ ├── AdChainList.js
│ ├── AdtCalculator.css
│ ├── AdtCalculator.js
│ ├── CountdownSnapshot.css
│ ├── CountdownSnapshot.js
│ ├── CountdownText.css
│ ├── CountdownText.js
│ ├── DocumentLoadingComponent.css
│ ├── DocumentLoadingComponent.js
│ ├── EmailConfirmationModal.css
│ ├── EmailConfirmationModal.js
│ ├── Identicon.css
│ ├── Identicon.js
│ ├── MainContainer.css
│ ├── MainContainer.js
│ ├── RefreshInProgressContainer.css
│ ├── RefreshInProgressContainer.js
│ ├── RocketChat.js
│ ├── StatProgressBar.css
│ ├── StatProgressBar.js
│ ├── Tooltip.js
│ ├── TransactionProgressModal.css
│ ├── TransactionProgressModal.js
│ ├── WelcomeModal.css
│ ├── WelcomeModal.js
│ ├── adblock
│ │ ├── AdBlockAlert.css
│ │ └── AdBlockAlert.js
│ ├── airswap
│ │ └── AirSwap.js
│ ├── assets
│ │ ├── DASHBOARD.svg
│ │ ├── HELP.svg
│ │ ├── PARAMETERS.svg
│ │ ├── SOCIALS (OPEN).svg
│ │ ├── SOCIALS.svg
│ │ ├── TOOLS.svg
│ │ ├── WWW.svg
│ │ ├── ad_chain.png
│ │ ├── ad_chain_logo_white_text.png
│ │ ├── adchain_publisher_logo.svg
│ │ ├── adtoken_icon.svg
│ │ ├── adtoken_logo.png
│ │ ├── adtoken_logo_white.png
│ │ ├── apply_icon.svg
│ │ ├── certificate_blue.png
│ │ ├── certificate_blue_circle.png
│ │ ├── cylinder_blue_lock_circle.png
│ │ ├── cylinder_lock_blue.png
│ │ ├── dollar_blue_circle.png
│ │ ├── dollar_circle_blue.png
│ │ ├── domains_icon.svg
│ │ ├── domainstable_inapplication.png
│ │ ├── domainstable_incommit.png
│ │ ├── domainstable_inreveal.png
│ │ ├── ethereum_purple_logo.png
│ │ ├── expand_blue_circle.png
│ │ ├── expand_circle_blue.png
│ │ ├── filter_icon.svg
│ │ ├── get_toshi_button.png
│ │ ├── governance_icon.svg
│ │ ├── governx_logo.svg
│ │ ├── green_check.svg
│ │ ├── info_blue.svg
│ │ ├── info_gray.svg
│ │ ├── info_white.svg
│ │ ├── metax_logo_white_text.png
│ │ ├── node_links_blue.png
│ │ ├── player_check_circle_blue.png
│ │ ├── red_x.svg
│ │ ├── reddit_icon_orange.svg
│ │ ├── reddit_icon_white.svg
│ │ ├── right_caret.png
│ │ ├── stage_maps
│ │ │ ├── map_application.svg
│ │ │ ├── map_commit.svg
│ │ │ ├── map_in_application_pending.svg
│ │ │ ├── map_in_registry_challenge_id.svg
│ │ │ ├── map_in_registry_challenge_id_commit.svg
│ │ │ ├── map_in_registry_no_id.svg
│ │ │ ├── map_in_registry_no_id_rejected.svg
│ │ │ ├── map_in_registry_no_id_reveal.svg
│ │ │ ├── map_in_registry_no_id_reveal_pending.svg
│ │ │ ├── map_registry_challenge_id_registry.svg
│ │ │ ├── map_registry_challenge_id_rejected.svg
│ │ │ ├── map_registry_challenge_id_reveal.svg
│ │ │ ├── map_registry_challenge_id_reveal_pending.svg
│ │ │ ├── map_registry_no_id_registry.svg
│ │ │ ├── map_registry_no_id_voting.svg
│ │ │ ├── map_rejected.svg
│ │ │ ├── map_reveal.svg
│ │ │ ├── map_reveal_pending.svg
│ │ │ ├── map_withdraw_challenge_id.svg
│ │ │ ├── map_withdraw_no_id.svg
│ │ │ ├── map_withdrawn_challenge_id.svg
│ │ │ └── map_withdrawn_no_id.svg
│ │ ├── white_text_adchain_logo.svg
│ │ ├── white_text_adtoken_logo.svg
│ │ └── white_text_metax_logo.svg
│ ├── dashboard
│ │ ├── AccountDashboard.css
│ │ ├── AccountDashboard.js
│ │ ├── AccountDashboardLoadingInProgress.css
│ │ ├── AccountDashboardLoadingInProgress.js
│ │ ├── AccountStatsbar.css
│ │ ├── AccountStatsbar.js
│ │ ├── ClaimRewardContainer.js
│ │ ├── DomainClaimRewardInProgressContainer.js
│ │ ├── ExpiredVotingADT.js
│ │ ├── RequestTokenApprovalContainer.css
│ │ ├── RequestTokenApprovalContainer.js
│ │ ├── RequestVotingRightsContainer.css
│ │ ├── RequestVotingRightsContainer.js
│ │ ├── UserAppliedDomains.css
│ │ ├── UserAppliedDomains.js
│ │ ├── UserChallengedDomains.css
│ │ ├── UserChallengedDomains.js
│ │ ├── UserCommitsToReveal.css
│ │ ├── UserCommitsToReveal.js
│ │ ├── UserRewardsToClaim.css
│ │ ├── UserRewardsToClaim.js
│ │ ├── WithdrawVotingRightsContainer.css
│ │ └── WithdrawVotingRightsContainer.js
│ ├── domains
│ │ ├── DomainEmailNotifications.css
│ │ ├── DomainEmailNotifications.js
│ │ ├── DomainsContainer.css
│ │ ├── DomainsContainer.js
│ │ ├── DomainsFilterPanel.css
│ │ ├── DomainsFilterPanel.js
│ │ ├── DomainsTable.css
│ │ └── DomainsTable.js
│ ├── governance
│ │ ├── CreateProposal.css
│ │ ├── CreateProposal.js
│ │ ├── GovernanceAndCoreParameters.css
│ │ ├── GovernanceAndCoreParameters.js
│ │ ├── GovernanceChallengeContainer.js
│ │ ├── GovernanceContainer.js
│ │ ├── GovernanceRewardsTable.js
│ │ ├── GovernanceVoteCommitContainer.js
│ │ ├── GovernanceVoteRevealContainer.js
│ │ ├── OpenProposalsTable.css
│ │ └── OpenProposalsTable.js
│ ├── mobile_nav
│ │ ├── MobileApplication.css
│ │ ├── MobileApplication.js
│ │ ├── MobileNavigation.css
│ │ └── MobileNavigation.js
│ ├── reddit
│ │ ├── DomainRedditBox.css
│ │ ├── DomainRedditBox.js
│ │ ├── RedditConfirmationModal.css
│ │ ├── RedditConfirmationModal.js
│ │ ├── RedditReasonModal.css
│ │ └── RedditReasonModal.js
│ ├── registry_guide
│ │ ├── RegistryGuideModal.css
│ │ ├── RegistryGuideModal.js
│ │ ├── RegistryGuideModalAdchainRegistry.css
│ │ ├── RegistryGuideModalAdchainRegistry.js
│ │ ├── RegistryGuideModalChallengeDomain.js
│ │ ├── RegistryGuideModalCommitVote.js
│ │ ├── RegistryGuideModalDomainJourney.css
│ │ ├── RegistryGuideModalDomainJourney.js
│ │ ├── RegistryGuideModalGovernance.css
│ │ ├── RegistryGuideModalGovernance.js
│ │ ├── RegistryGuideModalRevealVote.css
│ │ ├── RegistryGuideModalRevealVote.js
│ │ ├── RegistryGuideStaticChallenge.css
│ │ ├── RegistryGuideStaticChallenge.js
│ │ ├── RegistryGuideStaticDashboard.css
│ │ ├── RegistryGuideStaticDashboard.js
│ │ ├── RegistryGuideStaticDomainJourney.js
│ │ ├── RegistryGuideStaticDomainsTable.css
│ │ ├── RegistryGuideStaticDomainsTable.js
│ │ ├── RegistryGuideStaticInRegistry.css
│ │ ├── RegistryGuideStaticInRegistry.js
│ │ ├── RegistryGuideStaticReveal.css
│ │ ├── RegistryGuideStaticReveal.js
│ │ ├── RegistryGuideStaticVoting.css
│ │ ├── RegistryGuideStaticVoting.js
│ │ ├── RegistryWalkthrough.js
│ │ └── WalkthroughSteps.js
│ ├── sidebar
│ │ ├── MainSidebar.css
│ │ ├── MainSidebar.js
│ │ ├── PublisherApplicationFormInProgress.css
│ │ ├── PublisherApplicationFormInProgress.js
│ │ ├── SideBarApplicationContainer.css
│ │ └── SideBarApplicationContainer.js
│ ├── single_domain
│ │ ├── DomainChallengeContainer.css
│ │ ├── DomainChallengeContainer.js
│ │ ├── DomainHistory.js
│ │ ├── DomainInRegistryContainer.css
│ │ ├── DomainInRegistryContainer.js
│ │ ├── DomainNeverAppliedContainer.js
│ │ ├── DomainNotInRegistryContainer.css
│ │ ├── DomainNotInRegistryContainer.js
│ │ ├── DomainPendingContainer.css
│ │ ├── DomainPendingContainer.js
│ │ ├── DomainProfile.css
│ │ ├── DomainProfile.js
│ │ ├── DomainProfileActionContainer.css
│ │ ├── DomainProfileActionContainer.js
│ │ ├── DomainProfileComments.css
│ │ ├── DomainProfileComments.js
│ │ ├── DomainProfileHeader.css
│ │ ├── DomainProfileHeader.js
│ │ ├── DomainProfileStageMap.css
│ │ ├── DomainProfileStageMap.js
│ │ ├── DomainRejectedContainer.css
│ │ ├── DomainRejectedContainer.js
│ │ ├── DomainScamReport.css
│ │ ├── DomainScamReport.js
│ │ ├── DomainStatsbar.css
│ │ ├── DomainStatsbar.js
│ │ ├── DomainVoteCommitContainer.css
│ │ ├── DomainVoteCommitContainer.js
│ │ ├── DomainVoteRevealContainer.css
│ │ ├── DomainVoteRevealContainer.js
│ │ ├── DomainVoteTokenDistribution.css
│ │ ├── DomainVoteTokenDistribution.js
│ │ ├── IndividualGuideModal.css
│ │ └── IndividualGuideModal.js
│ └── topbar
│ │ ├── MainTopbar.css
│ │ └── MainTopbar.js
├── config
│ └── index.js
├── index.css
├── index.js
├── models
│ ├── mobileNav.js
│ ├── network.js
│ ├── parameters.js
│ └── urls.js
├── polyfills
│ ├── dotenv
│ │ └── main.js
│ └── pify
│ │ └── index.js
├── registerServiceWorker.js
├── services
│ ├── ipfs.js
│ ├── parameterizer.js
│ ├── plcr.js
│ ├── priceStats.js
│ ├── provider.js
│ ├── redditActions.js
│ ├── registry.js
│ ├── token.js
│ └── web3.js
├── store.js
└── utils
│ ├── calculateGas.js
│ ├── detectNetwork.js
│ ├── estimatedTxTime.js
│ ├── getDomainHistory.js
│ ├── getDomainState.js
│ ├── getTxReceiptMined.js
│ ├── isExpired.js
│ ├── normalizeQueryObj.js
│ ├── postJson.js
│ ├── randomSalt.js
│ ├── renderAirSwap.js
│ ├── saltHashVote.js
│ ├── saveFile.js
│ └── toCurrency.js
└── yarn.lock
/.env:
--------------------------------------------------------------------------------
1 | # PROD
2 |
3 | REACT_APP_UTILITY_API_URL=https://utility.adchain.com
4 | REACT_APP_REGISTRY_API_URL=https://pub-registry-api.metax.io
5 | REACT_APP_CONTRACTS_URL=https://s3-us-west-2.amazonaws.com/tcr-contracts/
6 |
7 | REACT_APP_NETWORK=main
8 | REACT_APP_ORGANIZATION=0x5e2eb68a31229b469e34999c467b017222677183
9 | REACT_APP_GOVERNX_URL=https://publisher.adchain.com/gx
10 |
11 | REACT_APP_WEBSOCKET_NETWORK=mainnet
12 |
13 | # DEV
14 |
15 | #REACT_APP_UTILITY_API_URL=https://utility-staging.adchain.com
16 | #REACT_APP_REGISTRY_API_URL=https://pub-registry-api-staging.metax.io
17 | #REACT_APP_CONTRACTS_URL=https://s3-us-west-2.amazonaws.com/tcr-contracts-rinkeby/
18 |
19 | #REACT_APP_NETWORK=rinkeby
20 | #REACT_APP_ORGANIZATION=0x5a7e9046edadc58bb94f8c18c68856ff83f7ec4d
21 | #REACT_APP_GOVERNX_URL=https://publisher.adchain.com/gx
22 |
23 | #REACT_APP_WEBSOCKET_NETWORK=rinkeby
24 |
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["standard", "standard-react"],
3 | "plugins": [
4 | "standard",
5 | "promise"
6 | ],
7 | "rules": {
8 | "react/jsx-uses-vars": [2]
9 | }
10 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 |
6 | # testing
7 | /coverage
8 |
9 | # production
10 | /build
11 | build
12 |
13 | # misc
14 | .DS_Store
15 |
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 | .git
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
25 | *.zip
26 |
27 | # Elastic Beanstalk Files
28 | # DO NOT COMMIT THESE!
29 | .ebextensions
30 | .elasticbeanstalk
31 |
32 | .vscode
33 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:8
2 |
3 | EXPOSE 5002
4 |
5 | ENV PORT 5002
6 |
7 | RUN mkdir -p /usr/src/app
8 | WORKDIR /usr/src/app
9 | COPY . /usr/src/app
10 |
11 | RUN rm -rf node_modules/
12 | RUN rm -rf build/
13 |
14 | RUN npm install --update-binary --no-shrinkwrap
15 | RUN npm install serve -g
16 | RUN npm run build
17 |
18 | ENTRYPOINT [ "npm" ]
19 | CMD ["run", "start"]
20 |
--------------------------------------------------------------------------------
/Dockerrun.aws.json:
--------------------------------------------------------------------------------
1 | {
2 | "AWSEBDockerrunVersion": 1
3 | }
4 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT license
2 |
3 | Copyright (C) 2017 MetaXchain
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
9 | of the Software, and to permit persons to whom the Software is furnished to do
10 | so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # adChain Registry Web App
2 |
3 | > Interface for applying, voting, and challenging domain entries into the adChain Registry.
4 |
5 | [](https://standardjs.com)
6 |
7 | [ ](https://app.codeship.com/projects/256831)
8 |
9 | # Live
10 |
11 | [https://publisher.adchain.com](https://publisher.adchain.com)
12 |
13 | # Install
14 |
15 | ```bash
16 | npm install
17 | ```
18 |
19 | # Development
20 |
21 | ```bash
22 | npm run start:dev
23 | ```
24 |
25 | Then head over to [http://localhost:3000/](http://localhost:3000/)
26 |
27 | Lint and test
28 |
29 | ```bash
30 | npm run lint:fix && npm test
31 | ```
32 |
33 | ## Docker Development
34 |
35 | To test build locally:
36 | - install Docker
37 | - ```cd ``` into the project root
38 | - run ```docker build ./```
39 | - copy the **container id**
40 |
41 | To see your container on host environment:
42 | - run ```docker run -it --expose 8000 -p 8000:8000``` **put container id here**
43 | - Open browser and navigate to [http://localhost:8000](http://localhost:8000/)
44 |
45 |
46 | # License
47 |
48 | MIT
49 |
--------------------------------------------------------------------------------
/build/asset-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "main.css": "static/css/main.99b7691a.css",
3 | "main.css.map": "static/css/main.99b7691a.css.map",
4 | "main.js": "static/js/main.cf9ae1bd.js",
5 | "main.js.map": "static/js/main.cf9ae1bd.js.map",
6 | "static/media/DASHBOARD.svg": "static/media/DASHBOARD.31c7bd80.svg",
7 | "static/media/HELP.svg": "static/media/HELP.7639f299.svg",
8 | "static/media/PARAMETERS.svg": "static/media/PARAMETERS.00dcd7a8.svg",
9 | "static/media/SOCIALS (OPEN).svg": "static/media/SOCIALS (OPEN).50f0b58a.svg",
10 | "static/media/TOOLS.svg": "static/media/TOOLS.ca6dbe6d.svg",
11 | "static/media/WWW.svg": "static/media/WWW.4e7ac200.svg",
12 | "static/media/ad_chain_logo_white_text.png": "static/media/ad_chain_logo_white_text.2be8e5a4.png",
13 | "static/media/adchain_publisher_logo.svg": "static/media/adchain_publisher_logo.0aef5db6.svg",
14 | "static/media/adtoken_icon.svg": "static/media/adtoken_icon.4fc47c0f.svg",
15 | "static/media/adtoken_logo_white.png": "static/media/adtoken_logo_white.e208f95e.png",
16 | "static/media/apply_icon.svg": "static/media/apply_icon.8e9092b0.svg",
17 | "static/media/domains_icon.svg": "static/media/domains_icon.c191223a.svg",
18 | "static/media/domainstable_inapplication.png": "static/media/domainstable_inapplication.59c68a81.png",
19 | "static/media/domainstable_incommit.png": "static/media/domainstable_incommit.6febb757.png",
20 | "static/media/domainstable_inreveal.png": "static/media/domainstable_inreveal.e40b9ce1.png",
21 | "static/media/filter_icon.svg": "static/media/filter_icon.fee71c08.svg",
22 | "static/media/governance_icon.svg": "static/media/governance_icon.d38dd0ce.svg",
23 | "static/media/governx_logo.svg": "static/media/governx_logo.41559390.svg",
24 | "static/media/info_gray.svg": "static/media/info_gray.d2d87cd2.svg",
25 | "static/media/info_white.svg": "static/media/info_white.ab4611b7.svg",
26 | "static/media/map_application.svg": "static/media/map_application.93de73b9.svg",
27 | "static/media/map_commit.svg": "static/media/map_commit.4426372c.svg",
28 | "static/media/map_in_application_pending.svg": "static/media/map_in_application_pending.13696be6.svg",
29 | "static/media/map_in_registry_challenge_id.svg": "static/media/map_in_registry_challenge_id.3a3ea281.svg",
30 | "static/media/map_in_registry_challenge_id_commit.svg": "static/media/map_in_registry_challenge_id_commit.e2ac53ee.svg",
31 | "static/media/map_in_registry_no_id.svg": "static/media/map_in_registry_no_id.816f6495.svg",
32 | "static/media/map_in_registry_no_id_reveal.svg": "static/media/map_in_registry_no_id_reveal.01c81aeb.svg",
33 | "static/media/map_in_registry_no_id_reveal_pending.svg": "static/media/map_in_registry_no_id_reveal_pending.ddaf7f21.svg",
34 | "static/media/map_rejected.svg": "static/media/map_rejected.ce15c361.svg",
35 | "static/media/map_reveal.svg": "static/media/map_reveal.096ff4b2.svg",
36 | "static/media/map_reveal_pending.svg": "static/media/map_reveal_pending.3bd45adb.svg",
37 | "static/media/map_withdrawn_challenge_id.svg": "static/media/map_withdrawn_challenge_id.7c0fbd14.svg",
38 | "static/media/map_withdrawn_no_id.svg": "static/media/map_withdrawn_no_id.96f229ff.svg",
39 | "static/media/white_text_metax_logo.svg": "static/media/white_text_metax_logo.5cf388ba.svg"
40 | }
--------------------------------------------------------------------------------
/build/assets/MetaX_Loading_Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/assets/MetaX_Loading_Logo.png
--------------------------------------------------------------------------------
/build/assets/adChain_Publisher_Registry_Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/assets/adChain_Publisher_Registry_Logo.png
--------------------------------------------------------------------------------
/build/assets/ad_chain.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/assets/ad_chain.png
--------------------------------------------------------------------------------
/build/assets/diagrams/adchain-registry-webapp-containers-view.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/assets/diagrams/adchain-registry-webapp-containers-view.png
--------------------------------------------------------------------------------
/build/assets/metax.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/assets/metax.png
--------------------------------------------------------------------------------
/build/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/favicon.ico
--------------------------------------------------------------------------------
/build/fonts/avenirnext/AvenirNextLTW01RegularRegular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/fonts/avenirnext/AvenirNextLTW01RegularRegular.eot
--------------------------------------------------------------------------------
/build/fonts/avenirnext/AvenirNextLTW01RegularRegular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/fonts/avenirnext/AvenirNextLTW01RegularRegular.ttf
--------------------------------------------------------------------------------
/build/fonts/avenirnext/AvenirNextLTW01RegularRegular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/fonts/avenirnext/AvenirNextLTW01RegularRegular.woff
--------------------------------------------------------------------------------
/build/fonts/avenirnext/stylesheet.css:
--------------------------------------------------------------------------------
1 | /* This stylesheet generated by Transfonter (https://transfonter.org) on May 19, 2017 12:26 AM */
2 |
3 | @font-face {
4 | font-family: 'AvenirNextLTW01RegularRegular';
5 | src: url('AvenirNextLTW01RegularRegular.eot');
6 | src: url('AvenirNextLTW01RegularRegular.eot?#iefix') format('embedded-opentype'),
7 | url('AvenirNextLTW01RegularRegular.woff') format('woff'),
8 | url('AvenirNextLTW01RegularRegular.ttf') format('truetype');
9 | font-weight: normal;
10 | font-style: normal;
11 | }
12 |
--------------------------------------------------------------------------------
/build/fonts/avenirnextbold/AvenirNextLTW01BoldRegular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/fonts/avenirnextbold/AvenirNextLTW01BoldRegular.eot
--------------------------------------------------------------------------------
/build/fonts/avenirnextbold/AvenirNextLTW01BoldRegular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/fonts/avenirnextbold/AvenirNextLTW01BoldRegular.ttf
--------------------------------------------------------------------------------
/build/fonts/avenirnextbold/AvenirNextLTW01BoldRegular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/fonts/avenirnextbold/AvenirNextLTW01BoldRegular.woff
--------------------------------------------------------------------------------
/build/fonts/avenirnextbold/stylesheet.css:
--------------------------------------------------------------------------------
1 | /* This stylesheet generated by Transfonter (https://transfonter.org) on May 19, 2017 12:40 AM */
2 |
3 | @font-face {
4 | font-family: 'AvenirNextLTW01BoldRegular';
5 | src: url('AvenirNextLTW01BoldRegular.eot');
6 | src: url('AvenirNextLTW01BoldRegular.eot?#iefix') format('embedded-opentype'),
7 | url('AvenirNextLTW01BoldRegular.woff') format('woff'),
8 | url('AvenirNextLTW01BoldRegular.ttf') format('truetype');
9 | font-weight: bold;
10 | font-style: normal;
11 | }
12 |
--------------------------------------------------------------------------------
/build/humans.txt:
--------------------------------------------------------------------------------
1 | /* TEAM */
2 |
3 | Software Engineer: Miguel Mota
4 | Contact: miguel@metax.io
5 | Github: https://github.com/miguelmota
6 |
7 |
8 | Software Engineer: Nicholas Porter
9 | Contact: nicholas@metax.io
10 | Github: https://github.com/mnoster
--------------------------------------------------------------------------------
/build/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | }
10 | ],
11 | "start_url": "./index.html",
12 | "display": "standalone",
13 | "theme_color": "#000000",
14 | "background_color": "#ffffff"
15 | }
16 |
--------------------------------------------------------------------------------
/build/style.css:
--------------------------------------------------------------------------------
1 | :root:root .intro-adchain {
2 | position: absolute;
3 | bottom: 10px;
4 | left: 10px;
5 | }
6 |
7 | :root:root .intro-text {
8 | font-family: 'arial';
9 |
10 | font-size: 18px;
11 | color: white;
12 | font-weight: 100;
13 | padding: 10px 0;
14 | margin-top: 10px;
15 | }
16 |
17 | :root:root .metax-img {
18 | position: fixed;
19 | top: 33%;
20 | left: 50%;
21 | transform: translate(-50%, -50%);
22 | text-align: center;
23 | font-size: 25px;
24 | color: white;
25 | font-weight: 100;
26 | }
27 |
28 | :root:root .RootLoader {
29 | position: fixed;
30 | top: 50%;
31 | left: 50%;
32 | transform: translate(-50%, -50%);
33 | }
34 |
35 | :root:root .intro-page {
36 | background: linear-gradient(45deg, #0E0E39 0%, #3434CE 100%);
37 | height: 100vh;
38 | width: 100vw;
39 | }
40 |
41 | #google_translate_element {
42 | z-index: 103;
43 | /* position: absolute;
44 | bottom: 100px;
45 | left: 26px; */
46 | text-align: center;
47 | margin-bottom: 7px;
48 | }
49 |
50 | #google_translate_element .goog-te-gadget-simple {
51 | border-left: none;
52 | border-top: none;
53 | border-bottom: none;
54 | border-right: none;
55 | border-radius: 4px;
56 | background-color: #3434CE;
57 | }
58 |
59 | .goog-te-gadget-icon {
60 | background-image: none !important;
61 | }
62 |
63 | .goog-te-gadget-simple .goog-te-menu-value span {
64 | color: #FFF !important;
65 | font-family: 'Open Sans', sans-serif;
66 | border-left: none !important;
67 | text-transform: uppercase;
68 | }
69 |
70 | .goog-te-gadget-simple .goog-te-menu-value span:last-child {
71 | visibility: hidden;
72 | }
73 |
74 | .goog-te-gadget-simple .goog-te-menu-value span:last-child:before {
75 | content: "\f0d7";
76 | visibility: visible;
77 | font-family: FontAwesome;
78 | }
--------------------------------------------------------------------------------
/build/vendor/README.md:
--------------------------------------------------------------------------------
1 | `themes/` contains semantic ui fonts
2 |
--------------------------------------------------------------------------------
/build/vendor/highlight_solarized_dark.min.css:
--------------------------------------------------------------------------------
1 | .hljs{display:block;overflow-x:auto;padding:0.5em;background:#002b36;color:#839496;-webkit-text-size-adjust:none}.hljs-comment,.diff .hljs-header,.hljs-doctype,.hljs-pi,.lisp .hljs-string,.hljs-javadoc{color:#586e75}.hljs-keyword,.hljs-winutils,.method,.hljs-addition,.css .hljs-tag,.hljs-request,.hljs-status,.nginx .hljs-title{color:#859900}.hljs-number,.hljs-command,.hljs-string,.hljs-tag .hljs-value,.hljs-rules .hljs-value,.hljs-phpdoc,.hljs-dartdoc,.tex .hljs-formula,.hljs-regexp,.hljs-hexcolor,.hljs-link_url{color:#2aa198}.hljs-title,.hljs-localvars,.hljs-chunk,.hljs-decorator,.hljs-built_in,.hljs-identifier,.vhdl .hljs-literal,.hljs-id,.css .hljs-function{color:#268bd2}.hljs-attribute,.hljs-variable,.lisp .hljs-body,.smalltalk .hljs-number,.hljs-constant,.hljs-class .hljs-title,.hljs-parent,.hljs-type,.hljs-link_reference{color:#b58900}.hljs-preprocessor,.hljs-preprocessor .hljs-keyword,.hljs-pragma,.hljs-shebang,.hljs-symbol,.hljs-symbol .hljs-string,.diff .hljs-change,.hljs-special,.hljs-attr_selector,.hljs-subst,.hljs-cdata,.css .hljs-pseudo,.hljs-header{color:#cb4b16}.hljs-deletion,.hljs-important{color:#dc322f}.hljs-link_label{color:#6c71c4}.tex .hljs-formula{background:#073642}
--------------------------------------------------------------------------------
/build/vendor/mailchimp_horizontal-slim-10_7.css:
--------------------------------------------------------------------------------
1 | /* MailChimp Form Embed Code - Horizontal Super Slim - 12/16/2015 v10.7
2 | Adapted from: http://blog.heyimcat.com/universal-signup-form/ */
3 |
4 | #mc_embed_signup form {text-align:center; padding:10px 0 10px 0;}
5 | .mc-field-group { display: inline-block; } /* positions input field horizontally */
6 | #mc_embed_signup input.email {font-family:"Open Sans","Helvetica Neue",Arial,Helvetica,Verdana,sans-serif; font-size: 15px; border: 1px solid #ABB0B2; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; color: #343434; background-color: #fff; box-sizing:border-box; height:32px; padding: 0px 0.4em; display: inline-block; margin: 0; width:350px; vertical-align:top;}
7 | #mc_embed_signup label {display:block; font-size:16px; padding-bottom:10px; font-weight:bold;}
8 | #mc_embed_signup .clear {display: inline-block;} /* positions button horizontally in line with input */
9 | #mc_embed_signup .button {font-size: 13px; border: none; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; letter-spacing: .03em; color: #fff; background-color: #aaa; box-sizing:border-box; height:32px; line-height:32px; padding:0 18px; display: inline-block; margin: 0; transition: all 0.23s ease-in-out 0s;}
10 | #mc_embed_signup .button:hover {background-color:#777; cursor:pointer;}
11 | #mc_embed_signup div#mce-responses {float:left; top:-1.4em; padding:0em .5em 0em .5em; overflow:hidden; width:90%;margin: 0 5%; clear: both;}
12 | #mc_embed_signup div.response {margin:1em 0; padding:1em .5em .5em 0; font-weight:bold; float:left; top:-1.5em; z-index:1; width:80%;}
13 | #mc_embed_signup #mce-error-response {display:none;}
14 | #mc_embed_signup #mce-success-response {color:#529214; display:none;}
15 | #mc_embed_signup label.error {display:block; float:none; width:auto; margin-left:1.05em; text-align:left; padding:.5em 0;}
16 | @media (max-width: 768px) {
17 | #mc_embed_signup input.email {width:100%; margin-bottom:5px;}
18 | #mc_embed_signup .clear {display: block; width: 100% }
19 | #mc_embed_signup .button {width: 100%; margin:0; }
20 | }
--------------------------------------------------------------------------------
/build/vendor/themes/basic/assets/fonts/icons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/vendor/themes/basic/assets/fonts/icons.eot
--------------------------------------------------------------------------------
/build/vendor/themes/basic/assets/fonts/icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/vendor/themes/basic/assets/fonts/icons.ttf
--------------------------------------------------------------------------------
/build/vendor/themes/basic/assets/fonts/icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/vendor/themes/basic/assets/fonts/icons.woff
--------------------------------------------------------------------------------
/build/vendor/themes/default/assets/fonts/icons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/vendor/themes/default/assets/fonts/icons.eot
--------------------------------------------------------------------------------
/build/vendor/themes/default/assets/fonts/icons.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/vendor/themes/default/assets/fonts/icons.otf
--------------------------------------------------------------------------------
/build/vendor/themes/default/assets/fonts/icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/vendor/themes/default/assets/fonts/icons.ttf
--------------------------------------------------------------------------------
/build/vendor/themes/default/assets/fonts/icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/vendor/themes/default/assets/fonts/icons.woff
--------------------------------------------------------------------------------
/build/vendor/themes/default/assets/fonts/icons.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/vendor/themes/default/assets/fonts/icons.woff2
--------------------------------------------------------------------------------
/build/vendor/themes/default/assets/images/flags.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/vendor/themes/default/assets/images/flags.png
--------------------------------------------------------------------------------
/build/vendor/themes/github/assets/fonts/octicons-local.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/vendor/themes/github/assets/fonts/octicons-local.ttf
--------------------------------------------------------------------------------
/build/vendor/themes/github/assets/fonts/octicons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/vendor/themes/github/assets/fonts/octicons.ttf
--------------------------------------------------------------------------------
/build/vendor/themes/github/assets/fonts/octicons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/vendor/themes/github/assets/fonts/octicons.woff
--------------------------------------------------------------------------------
/build/vendor/themes/material/assets/fonts/icons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/vendor/themes/material/assets/fonts/icons.eot
--------------------------------------------------------------------------------
/build/vendor/themes/material/assets/fonts/icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/vendor/themes/material/assets/fonts/icons.ttf
--------------------------------------------------------------------------------
/build/vendor/themes/material/assets/fonts/icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/build/vendor/themes/material/assets/fonts/icons.woff
--------------------------------------------------------------------------------
/public/assets/MetaX_Loading_Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/assets/MetaX_Loading_Logo.png
--------------------------------------------------------------------------------
/public/assets/adChain_Publisher_Registry_Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/assets/adChain_Publisher_Registry_Logo.png
--------------------------------------------------------------------------------
/public/assets/ad_chain.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/assets/ad_chain.png
--------------------------------------------------------------------------------
/public/assets/diagrams/adchain-registry-webapp-containers-view.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/assets/diagrams/adchain-registry-webapp-containers-view.png
--------------------------------------------------------------------------------
/public/assets/metax.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/assets/metax.png
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/favicon.ico
--------------------------------------------------------------------------------
/public/fonts/avenirnext/AvenirNextLTW01RegularRegular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/fonts/avenirnext/AvenirNextLTW01RegularRegular.eot
--------------------------------------------------------------------------------
/public/fonts/avenirnext/AvenirNextLTW01RegularRegular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/fonts/avenirnext/AvenirNextLTW01RegularRegular.ttf
--------------------------------------------------------------------------------
/public/fonts/avenirnext/AvenirNextLTW01RegularRegular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/fonts/avenirnext/AvenirNextLTW01RegularRegular.woff
--------------------------------------------------------------------------------
/public/fonts/avenirnext/stylesheet.css:
--------------------------------------------------------------------------------
1 | /* This stylesheet generated by Transfonter (https://transfonter.org) on May 19, 2017 12:26 AM */
2 |
3 | @font-face {
4 | font-family: 'AvenirNextLTW01RegularRegular';
5 | src: url('AvenirNextLTW01RegularRegular.eot');
6 | src: url('AvenirNextLTW01RegularRegular.eot?#iefix') format('embedded-opentype'),
7 | url('AvenirNextLTW01RegularRegular.woff') format('woff'),
8 | url('AvenirNextLTW01RegularRegular.ttf') format('truetype');
9 | font-weight: normal;
10 | font-style: normal;
11 | }
12 |
--------------------------------------------------------------------------------
/public/fonts/avenirnextbold/AvenirNextLTW01BoldRegular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/fonts/avenirnextbold/AvenirNextLTW01BoldRegular.eot
--------------------------------------------------------------------------------
/public/fonts/avenirnextbold/AvenirNextLTW01BoldRegular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/fonts/avenirnextbold/AvenirNextLTW01BoldRegular.ttf
--------------------------------------------------------------------------------
/public/fonts/avenirnextbold/AvenirNextLTW01BoldRegular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/fonts/avenirnextbold/AvenirNextLTW01BoldRegular.woff
--------------------------------------------------------------------------------
/public/fonts/avenirnextbold/stylesheet.css:
--------------------------------------------------------------------------------
1 | /* This stylesheet generated by Transfonter (https://transfonter.org) on May 19, 2017 12:40 AM */
2 |
3 | @font-face {
4 | font-family: 'AvenirNextLTW01BoldRegular';
5 | src: url('AvenirNextLTW01BoldRegular.eot');
6 | src: url('AvenirNextLTW01BoldRegular.eot?#iefix') format('embedded-opentype'),
7 | url('AvenirNextLTW01BoldRegular.woff') format('woff'),
8 | url('AvenirNextLTW01BoldRegular.ttf') format('truetype');
9 | font-weight: bold;
10 | font-style: normal;
11 | }
12 |
--------------------------------------------------------------------------------
/public/humans.txt:
--------------------------------------------------------------------------------
1 | /* TEAM */
2 |
3 | Software Engineer: Miguel Mota
4 | Contact: miguel@metax.io
5 | Github: https://github.com/miguelmota
6 |
7 |
8 | Software Engineer: Nicholas Porter
9 | Contact: nicholas@metax.io
10 | Github: https://github.com/mnoster
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | }
10 | ],
11 | "start_url": "./index.html",
12 | "display": "standalone",
13 | "theme_color": "#000000",
14 | "background_color": "#ffffff"
15 | }
16 |
--------------------------------------------------------------------------------
/public/style.css:
--------------------------------------------------------------------------------
1 | :root:root .intro-adchain {
2 | position: absolute;
3 | bottom: 10px;
4 | left: 10px;
5 | }
6 |
7 | :root:root .intro-text {
8 | font-family: 'arial';
9 |
10 | font-size: 18px;
11 | color: white;
12 | font-weight: 100;
13 | padding: 10px 0;
14 | margin-top: 10px;
15 | }
16 |
17 | :root:root .metax-img {
18 | position: fixed;
19 | top: 33%;
20 | left: 50%;
21 | transform: translate(-50%, -50%);
22 | text-align: center;
23 | font-size: 25px;
24 | color: white;
25 | font-weight: 100;
26 | }
27 |
28 | :root:root .RootLoader {
29 | position: fixed;
30 | top: 50%;
31 | left: 50%;
32 | transform: translate(-50%, -50%);
33 | }
34 |
35 | :root:root .intro-page {
36 | background: linear-gradient(45deg, #0E0E39 0%, #3434CE 100%);
37 | height: 100vh;
38 | width: 100vw;
39 | }
40 |
41 | #google_translate_element {
42 | z-index: 103;
43 | /* position: absolute;
44 | bottom: 100px;
45 | left: 26px; */
46 | text-align: center;
47 | margin-bottom: 7px;
48 | }
49 |
50 | #google_translate_element .goog-te-gadget-simple {
51 | border-left: none;
52 | border-top: none;
53 | border-bottom: none;
54 | border-right: none;
55 | border-radius: 4px;
56 | background-color: #3434CE;
57 | }
58 |
59 | .goog-te-gadget-icon {
60 | background-image: none !important;
61 | }
62 |
63 | .goog-te-gadget-simple .goog-te-menu-value span {
64 | color: #FFF !important;
65 | font-family: 'Open Sans', sans-serif;
66 | border-left: none !important;
67 | text-transform: uppercase;
68 | }
69 |
70 | .goog-te-gadget-simple .goog-te-menu-value span:last-child {
71 | visibility: hidden;
72 | }
73 |
74 | .goog-te-gadget-simple .goog-te-menu-value span:last-child:before {
75 | content: "\f0d7";
76 | visibility: visible;
77 | font-family: FontAwesome;
78 | }
--------------------------------------------------------------------------------
/public/vendor/README.md:
--------------------------------------------------------------------------------
1 | `themes/` contains semantic ui fonts
2 |
--------------------------------------------------------------------------------
/public/vendor/highlight_solarized_dark.min.css:
--------------------------------------------------------------------------------
1 | .hljs{display:block;overflow-x:auto;padding:0.5em;background:#002b36;color:#839496;-webkit-text-size-adjust:none}.hljs-comment,.diff .hljs-header,.hljs-doctype,.hljs-pi,.lisp .hljs-string,.hljs-javadoc{color:#586e75}.hljs-keyword,.hljs-winutils,.method,.hljs-addition,.css .hljs-tag,.hljs-request,.hljs-status,.nginx .hljs-title{color:#859900}.hljs-number,.hljs-command,.hljs-string,.hljs-tag .hljs-value,.hljs-rules .hljs-value,.hljs-phpdoc,.hljs-dartdoc,.tex .hljs-formula,.hljs-regexp,.hljs-hexcolor,.hljs-link_url{color:#2aa198}.hljs-title,.hljs-localvars,.hljs-chunk,.hljs-decorator,.hljs-built_in,.hljs-identifier,.vhdl .hljs-literal,.hljs-id,.css .hljs-function{color:#268bd2}.hljs-attribute,.hljs-variable,.lisp .hljs-body,.smalltalk .hljs-number,.hljs-constant,.hljs-class .hljs-title,.hljs-parent,.hljs-type,.hljs-link_reference{color:#b58900}.hljs-preprocessor,.hljs-preprocessor .hljs-keyword,.hljs-pragma,.hljs-shebang,.hljs-symbol,.hljs-symbol .hljs-string,.diff .hljs-change,.hljs-special,.hljs-attr_selector,.hljs-subst,.hljs-cdata,.css .hljs-pseudo,.hljs-header{color:#cb4b16}.hljs-deletion,.hljs-important{color:#dc322f}.hljs-link_label{color:#6c71c4}.tex .hljs-formula{background:#073642}
--------------------------------------------------------------------------------
/public/vendor/mailchimp_horizontal-slim-10_7.css:
--------------------------------------------------------------------------------
1 | /* MailChimp Form Embed Code - Horizontal Super Slim - 12/16/2015 v10.7
2 | Adapted from: http://blog.heyimcat.com/universal-signup-form/ */
3 |
4 | #mc_embed_signup form {text-align:center; padding:10px 0 10px 0;}
5 | .mc-field-group { display: inline-block; } /* positions input field horizontally */
6 | #mc_embed_signup input.email {font-family:"Open Sans","Helvetica Neue",Arial,Helvetica,Verdana,sans-serif; font-size: 15px; border: 1px solid #ABB0B2; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; color: #343434; background-color: #fff; box-sizing:border-box; height:32px; padding: 0px 0.4em; display: inline-block; margin: 0; width:350px; vertical-align:top;}
7 | #mc_embed_signup label {display:block; font-size:16px; padding-bottom:10px; font-weight:bold;}
8 | #mc_embed_signup .clear {display: inline-block;} /* positions button horizontally in line with input */
9 | #mc_embed_signup .button {font-size: 13px; border: none; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; letter-spacing: .03em; color: #fff; background-color: #aaa; box-sizing:border-box; height:32px; line-height:32px; padding:0 18px; display: inline-block; margin: 0; transition: all 0.23s ease-in-out 0s;}
10 | #mc_embed_signup .button:hover {background-color:#777; cursor:pointer;}
11 | #mc_embed_signup div#mce-responses {float:left; top:-1.4em; padding:0em .5em 0em .5em; overflow:hidden; width:90%;margin: 0 5%; clear: both;}
12 | #mc_embed_signup div.response {margin:1em 0; padding:1em .5em .5em 0; font-weight:bold; float:left; top:-1.5em; z-index:1; width:80%;}
13 | #mc_embed_signup #mce-error-response {display:none;}
14 | #mc_embed_signup #mce-success-response {color:#529214; display:none;}
15 | #mc_embed_signup label.error {display:block; float:none; width:auto; margin-left:1.05em; text-align:left; padding:.5em 0;}
16 | @media (max-width: 768px) {
17 | #mc_embed_signup input.email {width:100%; margin-bottom:5px;}
18 | #mc_embed_signup .clear {display: block; width: 100% }
19 | #mc_embed_signup .button {width: 100%; margin:0; }
20 | }
--------------------------------------------------------------------------------
/public/vendor/themes/basic/assets/fonts/icons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/vendor/themes/basic/assets/fonts/icons.eot
--------------------------------------------------------------------------------
/public/vendor/themes/basic/assets/fonts/icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/vendor/themes/basic/assets/fonts/icons.ttf
--------------------------------------------------------------------------------
/public/vendor/themes/basic/assets/fonts/icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/vendor/themes/basic/assets/fonts/icons.woff
--------------------------------------------------------------------------------
/public/vendor/themes/default/assets/fonts/icons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/vendor/themes/default/assets/fonts/icons.eot
--------------------------------------------------------------------------------
/public/vendor/themes/default/assets/fonts/icons.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/vendor/themes/default/assets/fonts/icons.otf
--------------------------------------------------------------------------------
/public/vendor/themes/default/assets/fonts/icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/vendor/themes/default/assets/fonts/icons.ttf
--------------------------------------------------------------------------------
/public/vendor/themes/default/assets/fonts/icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/vendor/themes/default/assets/fonts/icons.woff
--------------------------------------------------------------------------------
/public/vendor/themes/default/assets/fonts/icons.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/vendor/themes/default/assets/fonts/icons.woff2
--------------------------------------------------------------------------------
/public/vendor/themes/default/assets/images/flags.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/vendor/themes/default/assets/images/flags.png
--------------------------------------------------------------------------------
/public/vendor/themes/github/assets/fonts/octicons-local.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/vendor/themes/github/assets/fonts/octicons-local.ttf
--------------------------------------------------------------------------------
/public/vendor/themes/github/assets/fonts/octicons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/vendor/themes/github/assets/fonts/octicons.ttf
--------------------------------------------------------------------------------
/public/vendor/themes/github/assets/fonts/octicons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/vendor/themes/github/assets/fonts/octicons.woff
--------------------------------------------------------------------------------
/public/vendor/themes/material/assets/fonts/icons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/vendor/themes/material/assets/fonts/icons.eot
--------------------------------------------------------------------------------
/public/vendor/themes/material/assets/fonts/icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/vendor/themes/material/assets/fonts/icons.ttf
--------------------------------------------------------------------------------
/public/vendor/themes/material/assets/fonts/icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/public/vendor/themes/material/assets/fonts/icons.woff
--------------------------------------------------------------------------------
/src/App.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import isMobile from 'is-mobile'
3 | import {
4 | BrowserRouter as Router,
5 | Route,
6 | NavLink as Link,
7 | Switch,
8 | Redirect
9 | } from 'react-router-dom'
10 |
11 | import CSSTransitionGroup from 'react-addons-css-transition-group'
12 | import MainSidebar from './components/sidebar/MainSidebar'
13 | import MainContainer from './components/MainContainer'
14 | import RegistryWalkthrough from './components/registry_guide/RegistryWalkthrough'
15 | import TransactionProgressModal from './components/TransactionProgressModal'
16 | import { MobileNavigation } from './components/mobile_nav/MobileNavigation';
17 | import MobileApplication from './components/mobile_nav/MobileApplication';
18 |
19 | class App extends Component {
20 | render () {
21 | return (
22 |
23 | (
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
41 |
42 |
43 |
44 |
45 |
46 | )} />
47 |
48 | )
49 | }
50 | }
51 |
52 | export default App
53 |
--------------------------------------------------------------------------------
/src/App.test.js:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import ReactDOM from 'react-dom'
3 | import assert from 'assert'
4 | // import App from './App'
5 |
6 | it('renders without crashing', () => {
7 | // const div = document.createElement('div')
8 | // ReactDOM.render( , div)
9 | assert.ok(true)
10 | })
11 |
--------------------------------------------------------------------------------
/src/components/AdChainList.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 |
3 | class AdChainList extends Component {
4 | constructor (props) {
5 | super()
6 | }
7 |
8 | render () {
9 | return (
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | )
18 | }
19 | }
20 |
21 | export default AdChainList
22 |
--------------------------------------------------------------------------------
/src/components/AdtCalculator.css:
--------------------------------------------------------------------------------
1 | :root:root:root .AdtCalculator {
2 | position: relative;
3 | min-height: 100px;
4 | font-size: 0.8em;
5 | font-family: "Open sans", sans-serif;
6 | }
7 |
8 | :root:root:root .AdtCalculator .row {
9 | margin: 0;
10 | padding: 5px 0;
11 | }
12 |
13 | :root:root:root .AdtCalculator .input {
14 | width: 80px;
15 | }
16 |
17 | :root:root:root .AdtCalculator .column {
18 | position: relative;
19 | }
20 |
21 | :root:root:root .AdtCalculator .row:nth-child(2) .column:first-child:after {
22 | content: '';
23 | display: block;
24 | position: absolute;
25 | top: 0;
26 | right: 1em;
27 | height: 100%;
28 | width: 1px;
29 | /*border-right: 1px solid #ddd;*/
30 | }
31 |
32 | :root:root:root .AdtCalculator .Source {
33 | position: absolute;
34 | bottom: 0;
35 | right: 0;
36 | font-size: 0.7em;
37 | color: #999;
38 | }
39 | .AdtCalculator .seven .InfoIcon {
40 | margin-top:-2px;
41 | padding-left: 3px;
42 | }
43 |
44 | :root:root .AdtCalculator .AdtCalcDropdown {
45 | background-color: #3434CE;
46 | color: #FFF;
47 | }
48 |
49 | :root:root:root .AdtCalculator .Source:hover {
50 | text-decoration: underline;
51 | }
52 |
53 | @media only screen and (max-width: 767px) {
54 | :root:root:root .AdtCalculator .row:nth-child(2) .column:first-child:after {
55 | border-right: none;
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/src/components/CountdownSnapshot.css:
--------------------------------------------------------------------------------
1 | .StageEndsCountdownContainer .StageEndsTime {
2 | margin-left: 2px;
3 | font-size: 14px;
4 | font-weight: 600 !important;
5 | }
6 |
7 | .StageEndsCountdownContainer .StageEndsLabel {
8 | margin-left: 2px;
9 | font-size: 12px;
10 | opacity: .50;
11 | }
12 |
13 | .StageEndsCountdownContainer .StageEndsTimeSeparator {
14 | margin: 0 4px;
15 | color: #B3B3B3;
16 | font-weight: 400;
17 | }
18 |
--------------------------------------------------------------------------------
/src/components/CountdownSnapshot.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import moment from 'moment'
3 | import pad from 'left-pad'
4 |
5 | import './CountdownSnapshot.css'
6 |
7 | class CountdownSnapshot extends Component {
8 | render () {
9 | const endDate = moment.unix(this.props.endDate)
10 | const now = moment()
11 | const diff = endDate.diff(now, 'seconds')
12 | const dur = moment.duration(diff, 'seconds')
13 | const days = `${pad(dur.days(), 2, 0)}`
14 | const hours = `${pad(dur.hours(), 2, 0)}`
15 | const minutes = `${pad(dur.minutes(), 2, 0)}`
16 |
17 | return (
18 |
19 |
20 | {days <= 0 ? '00' : days}
21 | D
22 |
23 |
24 |
25 | {hours <= 0 ? '00' : hours}
26 | H
27 |
28 | :
29 |
30 | {minutes <= 0 ? '00' : minutes}
31 | M
32 |
33 |
34 | )
35 | }
36 | }
37 |
38 | export default CountdownSnapshot
39 |
--------------------------------------------------------------------------------
/src/components/CountdownText.css:
--------------------------------------------------------------------------------
1 | .CountdownText {
2 |
3 | }
4 |
5 | .CountdownText.expired {
6 | color: #b10000;
7 | }
8 |
9 | .CountdownText .CountdownUnit {
10 | margin: 15px;
11 | width: 40px;
12 | border-radius: 3px;
13 | background-color: #F4F7FA;
14 | color: #424242;
15 | font-family: "Open Sans", sans-serif;
16 | font-size: 18px;
17 | font-weight: 600;
18 | line-height: 40px;
19 | text-align: center;
20 | display: inline-block;
21 | }
22 |
23 | .CountdownText .CountdownUnit .CountdownLabel {
24 | display: flow-root;
25 | color: #424242;
26 | font-family: "Open Sans", sans-serif;
27 | font-size: 8px;
28 | line-height: 11px;
29 | text-align: center;
30 | background-color: #FFF;
31 | padding-top: 5px
32 | }
33 |
--------------------------------------------------------------------------------
/src/components/DocumentLoadingComponent.css:
--------------------------------------------------------------------------------
1 | .MobileDeviceAlert{
2 | text-align: center;
3 | padding-top: 60px;
4 | font-size: 18px;
5 | height: 100vh;
6 | /* background:url("./assets/nebula_background.jpg") no-repeat center center fixed; */
7 | background:#000079;
8 | background: linear-gradient(45deg, #0E0E39 0%, #3434CE 100%);
9 | color:white;
10 | /* text-shadow: 1px 1px black; */
11 | }
12 | .GreyDivider{
13 | border-color: #7886a0;
14 | }
--------------------------------------------------------------------------------
/src/components/EmailConfirmationModal.css:
--------------------------------------------------------------------------------
1 | .EmailConfirmationContainer .ButtonContainer {
2 | text-align: center;
3 | padding-top: 20px;
4 | }
5 |
6 | :root:root:root .EmailConfirmationContainer .ButtonContainer button {
7 | color: #424242 !important;
8 | text-transform: uppercase;
9 | box-shadow: unset;
10 | font-size: 10px;
11 | border: 1px solid #424242;
12 | }
13 |
14 | :root:root:root .EmailConfirmationContainer .ButtonContainer button:hover {
15 | background-color: #424242 !important;
16 | color: #FFF !important;
17 | }
18 |
19 | .EmailConfirmationContainer .GovernXLogo {
20 | position: absolute;
21 | bottom: 10px;
22 | }
23 |
24 | .EmailConfirmationContainer .content {
25 | padding-left: 50px !important;
26 | padding-right: 50px !important;
27 | font-family: 'Open Sans', sans-serif;
28 | font-size: 12px !important;
29 | }
30 |
31 | .EmailConfirmationContainer .WelcomeHeaderUnderline {
32 | text-transform: uppercase;
33 | }
--------------------------------------------------------------------------------
/src/components/Identicon.css:
--------------------------------------------------------------------------------
1 | .Identicon {
2 | display: inline-block;
3 | overflow: hidden;
4 | }
5 |
--------------------------------------------------------------------------------
/src/components/Identicon.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PropTypes from 'prop-types'
3 | import blockies from 'blockies'
4 |
5 | import './Identicon.css'
6 |
7 | function Identicon (props) {
8 | const address = props.address || ''
9 | const size = props.size || 8
10 | const scale = props.scale || 8
11 |
12 | const dataUrl = blockies({
13 | // lowercase it in case it's a checksummed address
14 | seed: address.toLowerCase(),
15 | size,
16 | scale
17 | }).toDataURL()
18 |
19 | return (
20 |
21 |
22 |
23 | )
24 | }
25 |
26 | Identicon.propTypes = {
27 | address: PropTypes.string,
28 | size: PropTypes.number,
29 | scale: PropTypes.number
30 | }
31 |
32 | export default Identicon
33 |
--------------------------------------------------------------------------------
/src/components/MainContainer.css:
--------------------------------------------------------------------------------
1 | @keyframes fadeInLeft {
2 | from {
3 | opacity: 0;
4 | transform: translate3d(-100%, 0, 0);
5 | }
6 |
7 | to {
8 | opacity: 1;
9 | transform: none;
10 | }
11 | }
12 |
13 | @keyframes fadeInRight {
14 | from {
15 | opacity: 0;
16 | transform: translate3d(100%, 0, 0);
17 | }
18 |
19 | to {
20 | opacity: 1;
21 | transform: none;
22 | }
23 | }
24 |
25 |
26 | .MainContainerFade-enter.MainContainerFade-enter-active {
27 | animation-name: fadeInLeft;
28 | animation-duration: 0.4s;
29 | animation-timing-function: ease-out;
30 | animation-fill-mode: both;
31 | }
32 |
33 |
34 |
35 | .joyride {
36 | z-index: 500;
37 | }
--------------------------------------------------------------------------------
/src/components/MainContainer.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import PropTypes from 'prop-types'
3 |
4 | import MainTopbar from './topbar/MainTopbar'
5 | import AdChainList from './AdChainList'
6 | import DomainsContainer from './domains/DomainsContainer'
7 | import DomainProfile from './single_domain/DomainProfile'
8 | import AccountDashboard from './dashboard/AccountDashboard'
9 | import GovernanceContainer from './governance/GovernanceContainer'
10 | import './MainContainer.css'
11 |
12 | class MainContainer extends Component {
13 | render () {
14 | const Route = this.props.Route
15 | const Switch = this.props.Switch
16 | const Redirect = this.props.Redirect
17 | const location = this.props.location
18 | const key = location.pathname
19 | const CSSTransitionGroup = this.props.CSSTransitionGroup
20 |
21 | return (
22 |
23 |
24 |
25 |
29 |
30 |
31 |
32 |
33 | } />
34 | } />
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | )
46 | }
47 | }
48 |
49 | MainContainer.propTypes = {
50 | location: PropTypes.object
51 | }
52 |
53 | export default MainContainer
54 |
--------------------------------------------------------------------------------
/src/components/RefreshInProgressContainer.css:
--------------------------------------------------------------------------------
1 | .RefreshInProgressContainer {
2 | background: rgba(255,255,255,0.9);
3 | position: absolute;
4 | top: 14px;
5 | left: 14px;
6 | width: 100%;
7 | height: 100%;
8 | display: flex;
9 | justify-content: center;
10 | align-items: center;
11 | padding: 2em;
12 | overflow-y: auto;
13 | z-index: 105;
14 | }
--------------------------------------------------------------------------------
/src/components/RefreshInProgressContainer.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import { Loader } from 'semantic-ui-react'
3 |
4 | import './RefreshInProgressContainer.css'
5 |
6 | class RefreshInProgressContainer extends Component {
7 | constructor (props) {
8 | super()
9 | }
10 |
11 | render () {
12 | return (
13 |
14 |
15 |
Refresh in progress.
16 |
17 |
18 |
You will receive one MetaMask prompt:
19 |
Allow adChain Registry contract to transfer adToken deposit from your account.
20 |
21 |
22 | )
23 | }
24 | }
25 |
26 | export default RefreshInProgressContainer
27 |
--------------------------------------------------------------------------------
/src/components/RocketChat.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 |
3 | class RocketChat extends Component {
4 | constructor (props) {
5 | super()
6 | }
7 |
8 | render () {
9 | return (
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | )
18 | }
19 | }
20 |
21 | export default RocketChat
22 |
--------------------------------------------------------------------------------
/src/components/StatProgressBar.css:
--------------------------------------------------------------------------------
1 | .StatProgressBar {
2 |
3 | }
4 |
5 | .StatProgressBar .StatBarContainer {
6 | width: 100%;
7 | height: 1.3em;
8 | border: none;
9 | position: relative;
10 | border-radius: 15px;
11 | overflow: hidden;
12 | display: flex;
13 | justify-content: center;
14 | }
15 |
16 | .StatProgressBar .StatBarFillContainer {
17 | display: inline-flex;
18 | justify-content: center;
19 | align-items: center;
20 | float: left;
21 | height: 100%;
22 | background: #10C903;
23 | text-align: center;
24 | color: #FFFFFF;
25 | font-size: 0.6em;
26 | }
27 |
28 | .StatProgressBar .StatBarFillContainer:first-child {
29 | border-top-left-radius: 15px;
30 | border-bottom-left-radius: 15px;
31 | }
32 |
33 | .StatProgressBar .StatBarFillContainer:nth-child(2) {
34 | background: #CE3434;
35 | border-top-right-radius: 15px;
36 | border-bottom-right-radius: 15px;
37 | }
38 |
39 | .StatProgressBar .StatBarFillContainer.Round {
40 | border-radius: 15px;
41 | }
42 |
43 | .StatProgressBar .StatBarLegend {
44 | width: 100%;
45 | display: flex;
46 | align-items: center;
47 | justify-content: space-between;
48 | padding: 1px 10px;
49 | }
50 |
51 | .StatProgressBar .FillLabel {
52 | font-size: 0.8em;
53 | color: #10C903;
54 | }
55 |
56 | .StatProgressBar .FillLabel:nth-child(2) {
57 | color: #CE3434;
58 | }
59 |
--------------------------------------------------------------------------------
/src/components/StatProgressBar.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import PropTypes from 'prop-types'
3 |
4 | import './StatProgressBar.css'
5 |
6 | class StatProgressBar extends Component {
7 | constructor (props) {
8 | super()
9 |
10 | this.state = {
11 | fills: props.fills,
12 | fill: props.fill,
13 | showFillLabels: props.showFillLabels,
14 | showLegend: props.showLegend,
15 | fillLabels: props.fillLabels
16 | }
17 | }
18 |
19 | componentWillReceiveProps (props) {
20 | this.setState({
21 | fills: props.fills,
22 | fill: props.fill,
23 | showFillLabels: props.showFillLabels,
24 | showLegend: props.showLegend,
25 | fillLabels: props.fillLabels
26 | })
27 | }
28 |
29 | render () {
30 | const {
31 | fills,
32 | fill,
33 | showFillLabels,
34 | showLegend,
35 | fillLabels
36 | } = this.state
37 |
38 | return (
39 |
40 |
41 | {fills
42 | ? [
47 | {showFillLabels ? `${fills[0]}%` : null}
48 |
,
49 |
54 | {showFillLabels ? `${fills[1]}%` : null}
55 |
]
56 | :
59 | {showFillLabels ? `${fill}%` : null}
60 |
61 | }
62 |
63 | {showLegend
64 | ?
65 |
66 | {fillLabels[0]}
67 |
68 |
69 | {fillLabels[1]}
70 |
71 |
72 | : null}
73 |
74 | )
75 | }
76 | }
77 |
78 | StatProgressBar.propTypes = {
79 | fills: PropTypes.array,
80 | fill: PropTypes.number,
81 | showFillLabels: PropTypes.bool,
82 | showLegend: PropTypes.bool,
83 | fillLabels: PropTypes.array
84 | }
85 |
86 | export default StatProgressBar
87 |
--------------------------------------------------------------------------------
/src/components/Tooltip.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import infoIcon from './assets/info_gray.svg'
3 | import whiteIcon from './assets/info_white.svg'
4 | import { Popup } from 'semantic-ui-react'
5 |
6 | /*
7 | * This is the tooltip that is used throughout the app
8 | * when you hover over the grey info icons
9 | */
10 | const Tooltip = (props) => {
11 | return (
12 | }
14 | content={props.info} />
15 | )
16 | }
17 | export default Tooltip
18 |
--------------------------------------------------------------------------------
/src/components/adblock/AdBlockAlert.css:
--------------------------------------------------------------------------------
1 | .AdBlockAlert {
2 | display: flex;
3 | align-items: center;
4 | justify-content: center;
5 | position: fixed;
6 | top: 0;
7 | left: 0;
8 | width: 100%;
9 | height: 100%;
10 | padding: 0.5em;
11 | padding: 1em;
12 | font-size: 2em;
13 | background: #fff;
14 | color: #d24a76;
15 | text-align: center;
16 | line-height: 1.6em;
17 | }
18 |
19 | .AdBlockAlert p {
20 | max-width: 700px;
21 | margin: auto;
22 | }
23 |
--------------------------------------------------------------------------------
/src/components/adblock/AdBlockAlert.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | import './AdBlockAlert.css'
4 |
5 | function AdBlockAlert () {
6 | return (
7 |
8 |
Please disable your AdBlocker in order for the adChain registry web application to properly function. Thanks.
9 |
10 | )
11 | }
12 |
13 | export default AdBlockAlert
14 |
--------------------------------------------------------------------------------
/src/components/airswap/AirSwap.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import Tooltip from '../Tooltip'
3 | import {renderAirSwap} from '../../utils/renderAirSwap'
4 |
5 | export const AirSwap = () => {
6 | return (
7 |
8 |
9 |
10 |
BUY ADTOKEN
11 |
12 |
ADT is required to use the adChain Registry. Purchase ADT below with AirSwap.
13 |
{ renderAirSwap() }}>PURCHASE ADTOKEN
14 |
15 |
16 |
17 |
18 | )
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/src/components/assets/DASHBOARD.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | DASHBOARD
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/components/assets/HELP.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | HELP
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 | ?
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/components/assets/PARAMETERS.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | PARAMETERS
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/src/components/assets/SOCIALS (OPEN).svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | SOCIALS (OPEN)
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/components/assets/SOCIALS.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | SOCIALS
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/components/assets/TOOLS.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | TOOLS
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/components/assets/WWW.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | WWW
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/src/components/assets/ad_chain.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/ad_chain.png
--------------------------------------------------------------------------------
/src/components/assets/ad_chain_logo_white_text.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/ad_chain_logo_white_text.png
--------------------------------------------------------------------------------
/src/components/assets/adtoken_icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ADTOKEN
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/components/assets/adtoken_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/adtoken_logo.png
--------------------------------------------------------------------------------
/src/components/assets/adtoken_logo_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/adtoken_logo_white.png
--------------------------------------------------------------------------------
/src/components/assets/apply_icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | APPLY
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/components/assets/certificate_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/certificate_blue.png
--------------------------------------------------------------------------------
/src/components/assets/certificate_blue_circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/certificate_blue_circle.png
--------------------------------------------------------------------------------
/src/components/assets/cylinder_blue_lock_circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/cylinder_blue_lock_circle.png
--------------------------------------------------------------------------------
/src/components/assets/cylinder_lock_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/cylinder_lock_blue.png
--------------------------------------------------------------------------------
/src/components/assets/dollar_blue_circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/dollar_blue_circle.png
--------------------------------------------------------------------------------
/src/components/assets/dollar_circle_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/dollar_circle_blue.png
--------------------------------------------------------------------------------
/src/components/assets/domains_icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | DOMAINS
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/src/components/assets/domainstable_inapplication.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/domainstable_inapplication.png
--------------------------------------------------------------------------------
/src/components/assets/domainstable_incommit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/domainstable_incommit.png
--------------------------------------------------------------------------------
/src/components/assets/domainstable_inreveal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/domainstable_inreveal.png
--------------------------------------------------------------------------------
/src/components/assets/ethereum_purple_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/ethereum_purple_logo.png
--------------------------------------------------------------------------------
/src/components/assets/expand_blue_circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/expand_blue_circle.png
--------------------------------------------------------------------------------
/src/components/assets/expand_circle_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/expand_circle_blue.png
--------------------------------------------------------------------------------
/src/components/assets/filter_icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Filters
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/components/assets/get_toshi_button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/get_toshi_button.png
--------------------------------------------------------------------------------
/src/components/assets/governance_icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | PARAMETERS
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/src/components/assets/green_check.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Green Check
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/components/assets/info_blue.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Info Blue
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 | i
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/components/assets/info_gray.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Info Gray
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 | i
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/components/assets/info_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Info White
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 | i
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/components/assets/metax_logo_white_text.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/metax_logo_white_text.png
--------------------------------------------------------------------------------
/src/components/assets/node_links_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/node_links_blue.png
--------------------------------------------------------------------------------
/src/components/assets/player_check_circle_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/player_check_circle_blue.png
--------------------------------------------------------------------------------
/src/components/assets/red_x.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Red X
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/components/assets/reddit_icon_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | reddit_icon_white
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/components/assets/right_caret.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/assets/right_caret.png
--------------------------------------------------------------------------------
/src/components/assets/stage_maps/map_application.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | map_application
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | IN APPLICATION
22 |
23 |
24 | VOTING COMMIT
25 |
26 |
27 | VOTING REVEAL
28 |
29 |
30 | IN REGISTRY
31 |
32 |
33 | WITHDRAWN
34 |
35 |
36 | REJECTED
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/src/components/dashboard/AccountDashboard.css:
--------------------------------------------------------------------------------
1 | .AccountDashboard {
2 | width: 100%;
3 | font-family: "Open Sans", sans-serif !important;
4 | }
5 |
6 | .UserAppliedDomainsContainer {
7 | width: 22% !important;
8 | }
9 | .UserChallengedDomainsContainer {
10 | width: 22% !important;
11 | }
12 | .UserCommitsToRevealContainer {
13 | width: 22% !important;
14 | }
15 | .UserRewardsToClaimContainer {
16 | width: 34% !important;
17 | }
18 |
19 | .AccountDashboard > .grid > .row:first-child,
20 | :root:root:root .AccountDashboard .NoPaddingBottom {
21 | padding-bottom: 0;
22 | }
23 |
24 | :root:root:root .AccountDashboard .NoPaddingRight {
25 | padding-right: 0;
26 | }
27 |
28 | .AccountDashboard > .grid > .row:first-child {
29 | padding-bottom: 0;
30 | }
31 |
32 | .AccountDashboard > .grid > .row > .column:not(.sixteen):first-child {
33 | padding-right: 0;
34 | }
35 |
36 | .DashboardColumn {
37 | font-family: "Open Sans", sans-serif;
38 | min-height: 100%;
39 | max-height: 500px;
40 | overflow: scroll;
41 | }
42 |
43 | .DashboardColumn table {
44 | width: 100%;
45 | }
46 |
47 | .DashboardColumn table td {
48 | word-break: break-all;
49 | }
50 |
51 | .DashboardTitle {
52 | text-align: left;
53 | font-size: 14px;
54 | }
55 | .DashboardRow:last-of-type{
56 | border:none;
57 | }
58 | .DashboardFirstCell {
59 | /* padding-right: 2em; */
60 | font-weight: 600;
61 | max-width: 150px;
62 | text-overflow: ellipsis;
63 | overflow: hidden;
64 | white-space: nowrap;
65 | }
66 |
67 | .DashboardSecondCell {
68 | text-align: left;
69 | }
70 |
71 | .DashboardRow {
72 | height: 3em;
73 | border-bottom: 1px solid #F4F7FA;
74 | font-size: 12px;
75 | }
76 | .AccountDashboard .ui.input.action.mini{
77 | max-height: 26px !important;
78 | }
79 |
80 | .NoDataMessage {
81 | color: #909090;
82 | font-family: "Open Sans", sans-serif;
83 | font-size: 12px;
84 | line-height: 18px;
85 | text-align: center;
86 | padding-top: 180px;
87 | min-height: 500px;
88 | display: flex;
89 | max-height: 500px;
90 | align-items: flex-start;
91 | }
92 |
93 | :root:root:root .DashboardTable {
94 | border-style: none;
95 | }
96 | :root:root:root .DashboardTable thead th {
97 | background-color: #FFF;
98 | padding-top: 0px;
99 | border-bottom: none;
100 | }
101 |
102 | :root:root:root .VotingUtilitiesRow {
103 | display: flex;
104 | flex-direction: row;
105 | flex-wrap: wrap;
106 | justify-content: space-evenly;
107 | }
108 |
109 | :root:root:root .ExpiredVotingAdtContainer {
110 | display: flex;
111 | flex-direction: column;
112 | align-items: center;
113 | }
114 |
115 | @media only screen and (max-width: 1280px) {
116 | .DashboardRow {
117 | font-size: 10px;
118 | }
119 | }
--------------------------------------------------------------------------------
/src/components/dashboard/AccountDashboardLoadingInProgress.css:
--------------------------------------------------------------------------------
1 | .AccountDashboardLoadingInProgress {
2 | background: rgba(255,255,255,1);
3 | width: 100%;
4 | height: 500px;
5 | margin-top: 10px;
6 | padding: 2em;
7 | overflow-y: auto;
8 | z-index: 102;
9 | text-align: center;
10 | }
--------------------------------------------------------------------------------
/src/components/dashboard/AccountDashboardLoadingInProgress.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import { Loader } from 'semantic-ui-react'
3 |
4 | import './AccountDashboardLoadingInProgress.css'
5 |
6 | class AccountDashboardLoadingInProgress extends Component {
7 | constructor (props) {
8 | super()
9 | }
10 |
11 | render () {
12 | return (
13 |
14 |
15 |
16 |
17 |
18 |
19 | Loading your Dashboard
20 |
21 |
22 |
23 | )
24 | }
25 | }
26 |
27 | export default AccountDashboardLoadingInProgress
28 |
--------------------------------------------------------------------------------
/src/components/dashboard/AccountStatsbar.css:
--------------------------------------------------------------------------------
1 | :root:root:root .AccountStatsbar {
2 | position: relative;
3 | }
4 |
5 | :root:root:root .AccountStatsbar .row {
6 | margin: 0;
7 | }
8 |
9 | :root:root:root .AccountStatsbar .input {
10 | width: 80px;
11 | }
12 |
13 | :root:root:root .AccountStatsbar .column {
14 | position: relative;
15 | }
16 |
17 | :root:root:root .AccountStatsbar .row:nth-child(2) .column:first-child:after {
18 | content: '';
19 | display: block;
20 | position: absolute;
21 | top: 0;
22 | right: 1em;
23 | height: 100%;
24 | width: 1px;
25 | /*border-right: 1px solid #ddd;*/
26 | }
27 | :root:root:root .AccountStatsbar .InfoIcon{
28 | height: 14px;
29 | padding-left: 7px;
30 | margin-top: -1px;
31 | z-index: 101;
32 | position: relative;
33 | }
34 |
35 | @media only screen and (max-width: 767px) {
36 | :root:root:root .AccountStatsbar .row:nth-child(2) .column:first-child:after {
37 | border-right: none;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/components/dashboard/DomainClaimRewardInProgressContainer.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import { Loader } from 'semantic-ui-react'
3 |
4 | import './DomainClaimRewardInProgressContainer.css'
5 |
6 | // I think this component can be deleted
7 |
8 | class DomainClaimRewardInProgressContainer extends Component {
9 | constructor (props) {
10 | super()
11 | }
12 |
13 | render () {
14 | return (
15 |
16 |
17 |
Reward claim in progress.
18 |
19 |
20 |
You will receive one MetaMask prompts:
21 |
First prompt: Claim reward from adChain Registry contract.
22 |
23 |
24 | )
25 | }
26 | }
27 |
28 | export default DomainClaimRewardInProgressContainer
29 |
--------------------------------------------------------------------------------
/src/components/dashboard/RequestTokenApprovalContainer.css:
--------------------------------------------------------------------------------
1 | .RequestTokenApprovalContainer {
2 | position: relative;
3 | }
4 |
5 | :root:root .RequestTokenApprovalContainer input {
6 | max-width: 70px;
7 | }
8 |
9 | :root:root .RequestTokenApprovalContainer input:focus {
10 | border-color: #3434CE;
11 | border-right: none;
12 | }
13 |
14 |
15 | .RequestTokenApprovalContainer .Header {
16 | text-transform: uppercase;
17 | color: #909090;
18 | font-size: 12px;
19 | font-weight: 600;
20 | line-height: 14px;
21 | min-height: 13px;
22 | font-family: 'Open Sans', sans-serif;
23 | }
24 |
25 | :root:root .RequestTokenApprovalContainer .ApprovedAdt {
26 | padding-top: 0;
27 | }
28 |
29 | :root:root .RequestTokenApprovalContainer .ApprovedAdtText {
30 | padding-bottom: 1em;
31 | }
32 |
--------------------------------------------------------------------------------
/src/components/dashboard/RequestVotingRightsContainer.css:
--------------------------------------------------------------------------------
1 | .RequestVotingRightsContainer {
2 | position: relative;
3 | }
4 |
5 | :root:root .RequestVotingRightsContainer input {
6 | max-width: 70px;
7 | }
8 |
9 | :root:root .VotingRights input:focus {
10 | max-width: 70px;
11 | border-color: #3434CE !important;
12 | border-right-style: none;
13 | }
14 |
15 | :root:root .RequestVotingRightsContainer .VotingRights {
16 | padding-top: 0;
17 | }
18 |
19 | :root:root .RequestVotingRightsContainer .VotingRightsText {
20 | padding-bottom: 1em;
21 | }
22 | .RequestVotingRightsContainerInput {
23 | max-width: 90px !important;
24 | }
25 |
26 | :root:root:root .VotingRights {
27 | display: flex;
28 | flex-direction: column;
29 | align-items: center;
30 | }
--------------------------------------------------------------------------------
/src/components/dashboard/UserAppliedDomains.css:
--------------------------------------------------------------------------------
1 | .DashboardFirstCell:hover{
2 | cursor: pointer;
3 | text-decoration:underline;
4 | }
--------------------------------------------------------------------------------
/src/components/dashboard/UserAppliedDomains.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import Tooltip from '../Tooltip'
3 | import { Table } from 'semantic-ui-react'
4 | import './UserAppliedDomains.css'
5 |
6 | class UserAppliedDomains extends Component {
7 | constructor (props) {
8 | super()
9 |
10 | this.state = {
11 | appliedDomains: props.appliedDomains
12 | }
13 | this.history = props.history
14 | }
15 |
16 | componentDidMount () {
17 | this._isMounted = true
18 | }
19 | componentWillReceiveProps (nextProps) {
20 | if (nextProps.appliedDomains !== this.props.appliedDomains) {
21 | this.setState({
22 | appliedDomains: nextProps.appliedDomains
23 | })
24 | }
25 | }
26 |
27 | componentWillUnmount () {
28 | this._isMounted = false
29 | }
30 |
31 | render () {
32 | const { appliedDomains } = this.state
33 | const data = appliedDomains.length !== 0
34 | ? appliedDomains.map((domain, idx) =>
35 |
36 | { event.preventDefault(); this.history.push(`/domains/${domain.domain}`) }}>{domain.domain}
37 | {domain.stage}
38 | ) : null
39 |
40 | return (
41 |
42 |
DOMAINS APPLIED
43 |
44 |
45 | {data
46 | ?
47 |
48 |
49 |
50 | Domain
51 |
52 |
53 | Stage
54 |
55 |
56 |
57 |
58 | {data}
59 |
60 |
61 | :
The domains here are recorded as domains applied by your wallet address. The domain's status is shown to its right.
62 | }
63 |
64 |
65 |
66 | )
67 | }
68 | }
69 |
70 | export default UserAppliedDomains
71 |
--------------------------------------------------------------------------------
/src/components/dashboard/UserChallengedDomains.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/dashboard/UserChallengedDomains.css
--------------------------------------------------------------------------------
/src/components/dashboard/UserChallengedDomains.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import './UserChallengedDomains.css'
3 | import Tooltip from '../Tooltip'
4 | import { Table } from 'semantic-ui-react'
5 |
6 | class UserChallengedDomains extends Component {
7 | constructor (props) {
8 | super()
9 |
10 | this.state = {
11 | challengedDomains: props.challengedDomains
12 | }
13 | this.history = props.history
14 | }
15 |
16 | componentDidMount () {
17 | this._isMounted = true
18 | }
19 | componentWillReceiveProps (nextProps) {
20 | if (nextProps.challengedDomains !== this.props.challengedDomains) {
21 | this.setState({
22 | challengedDomains: nextProps.challengedDomains
23 | })
24 | }
25 | }
26 |
27 | componentWillUnmount () {
28 | this._isMounted = false
29 | }
30 |
31 | render () {
32 | let data
33 | try {
34 | const { challengedDomains } = this.state
35 | data = challengedDomains.length !== 0 ? challengedDomains.map((domain, idx) =>
36 |
37 | { event.preventDefault(); this.history.push(`/domains/${domain.domain}`) }}>{domain.domain}
38 | {domain.stage}
39 | ) : null
40 | } catch (error) {
41 | console.log(error)
42 | data = []
43 | }
44 |
45 | return (
46 |
47 |
DOMAINS CHALLENGED
48 |
49 |
50 | {data
51 | ?
52 |
53 |
54 |
55 | Domain
56 |
57 |
58 | Stage
59 |
60 |
61 |
62 |
63 | {data}
64 |
65 |
66 | :
The domains In Application that you challenged are recorded here. The domain's status is shown to its right.
}
67 |
68 |
69 |
70 | )
71 | }
72 | }
73 |
74 | export default UserChallengedDomains
75 |
--------------------------------------------------------------------------------
/src/components/dashboard/UserCommitsToReveal.css:
--------------------------------------------------------------------------------
1 | :root:root:root .DashboardColumn .RevealButton {
2 | border: 1px solid #10C903;
3 | border-radius: 3px;
4 | color: #3ECE34 !important;
5 | font-family: "Open Sans", sans-serif !important;
6 | font-size: 10px;
7 | font-weight: bold;
8 | line-height: 9px;
9 | text-align: center;
10 | text-transform: uppercase;
11 | box-shadow: unset;
12 | width: 100%;
13 | }
--------------------------------------------------------------------------------
/src/components/dashboard/UserCommitsToReveal.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import { Button, Table } from 'semantic-ui-react'
3 | import Tooltip from '../Tooltip'
4 | import './UserCommitsToReveal.css'
5 |
6 | class UserCommitsToReveal extends Component {
7 | constructor (props) {
8 | super()
9 |
10 | this.state = {
11 | commitsToReveal: props.commitsToReveal,
12 | history: props.history
13 | }
14 |
15 | this.goToReveal = this.goToReveal.bind(this)
16 | }
17 |
18 | componentDidMount () {
19 | this._isMounted = true
20 | }
21 | componentWillReceiveProps (nextProps) {
22 | if (nextProps.commitsToReveal !== this.props.commitsToReveal) {
23 | this.setState({
24 | commitsToReveal: nextProps.commitsToReveal
25 | })
26 | }
27 | }
28 |
29 | componentWillUnmount () {
30 | this._isMounted = false
31 | }
32 |
33 | render () {
34 | let data
35 | try {
36 | const { commitsToReveal } = this.state
37 |
38 | data = commitsToReveal.length !== 0 ? commitsToReveal.map((domain, idx) =>
39 |
40 | { event.preventDefault(); this.state.history.push(`/domains/${domain.domain}`) }}>{domain.domain}
41 | this.goToReveal(domain.domain)}>Reveal
42 |
43 | ) : null
44 | } catch (error) {
45 | console.log(error)
46 | data = []
47 | }
48 |
49 | return (
50 |
51 |
DOMAINS TO REVEAL
52 |
53 |
54 | {data
55 | ?
56 |
57 |
58 |
59 | Domain
60 |
61 |
62 | Action
63 |
64 |
65 |
66 |
67 | {data}
68 |
69 |
70 | :
The domains listed here are domains for which you have committed votes to. They are listed here to remind you to reveal your votes. The domains listed here are still in their Voting Reveal phase.
71 | }
72 |
73 |
74 |
75 | )
76 | }
77 |
78 | goToReveal (domain) {
79 | const { history } = this.state
80 | history.push(`/domains/${domain}`)
81 | }
82 | }
83 |
84 | export default UserCommitsToReveal
85 |
--------------------------------------------------------------------------------
/src/components/dashboard/UserRewardsToClaim.css:
--------------------------------------------------------------------------------
1 | .ValueTitle {
2 | /* padding-left: 2em; */
3 | padding-right: 2em;
4 | font-size: 14px;
5 | }
6 |
7 | .RewardValueCell {
8 | text-align: left;
9 | }
10 |
11 | :root:root:root .DashboardColumn .RewardClaimButton {
12 | border: 1px solid #10C903;
13 | border-radius: 3px;
14 | color: #3ECE34 !important;
15 | font-family: "Open Sans", sans-serif !important;
16 | font-size: 10px;
17 | font-weight: bold;
18 | line-height: 9px;
19 | text-align: center;
20 | text-transform: uppercase;
21 | box-shadow: unset;
22 | }
--------------------------------------------------------------------------------
/src/components/dashboard/WithdrawVotingRightsContainer.css:
--------------------------------------------------------------------------------
1 | :root:root:root .WithdrawVotingRightsContainer {
2 | display: flex;
3 | flex-direction: column;
4 | align-items: center;
5 | }
6 |
7 | :root:root .WithdrawVotingRightsContainer .UnlockedAdt {
8 | padding-top: 0;
9 | }
10 |
11 | :root:root .WithdrawVotingRightsContainer .UnlockedAdtText {
12 | padding-bottom: 1em;
13 | }
14 |
15 | #WithdrawVotingRightsContainerInput {
16 | max-width: 90px !important;
17 | }
18 |
--------------------------------------------------------------------------------
/src/components/domains/DomainsContainer.css:
--------------------------------------------------------------------------------
1 | .DomainsContainer {
2 | width: 100%;
3 | }
4 |
5 | .DomainsContainer > .grid > .row:first-child,
6 | :root:root:root .DomainsContainer .NoPaddingBottom {
7 | padding-bottom: 0;
8 | }
9 |
10 | .DomainsContainer > .grid > .row > .column:first-child,
11 | :root:root:root .DomainsContainer .NoPaddingRight {
12 | padding-right: 0;
13 | }
14 |
15 | .DomainsContainer .GlobalTrollbox {
16 | margin-top: 1rem;
17 | }
18 |
19 | .DomainsContainer .GlobalTrollbox .Header {
20 | margin-bottom: 0.4em;
21 | }
22 |
--------------------------------------------------------------------------------
/src/components/governance/CreateProposal.css:
--------------------------------------------------------------------------------
1 | .CreateProposal{
2 | font-family: "Open Sans", sans-serif;
3 | font-weight:600;
4 | font-size: 12px;
5 | }
6 | .CreateProposal .header{
7 | padding:10px 0;
8 | }
9 | .CreateProposal .header:first-of-type{
10 | padding-top: 0;
11 | }
12 | .CreateProposal .header:last-of-type{
13 | margin-bottom: 20px;
14 | }
15 | .BlueDropdown{
16 | border: none;
17 | background: white;
18 | border-radius: 0;
19 | box-shadow: none;
20 | -webkit-appearance: none;
21 | -moz-appearance: none;
22 | appearance: none;
23 | /* Add some styling */
24 | color: #111042;
25 | font-weight: 600;
26 | display: block;
27 | width: 100%;
28 | max-width: 320px;
29 | line-height: 1.75;
30 | color: #333;
31 | background-color: none;
32 | background-image: none;
33 | -ms-word-break: normal;
34 | word-break: normal;
35 | padding: 2px;
36 | }
37 | .selectdiv{
38 | margin-bottom: 10px;
39 | border-bottom: 2px solid;
40 | border-bottom-color: rgb(244, 247, 250);
41 | padding-bottom: 5px;
42 | }
43 | .selectdiv:after {
44 | content: '\f078';
45 | font: normal normal normal 17px/1 FontAwesome;
46 | color: #3434CE;
47 | right: 20px;
48 | top: 32px;
49 | height: 25px;
50 | padding: 15px 0px 0px 8px;
51 | position: absolute;
52 | pointer-events: none;
53 | }
54 |
55 | .BlueDropdown option{
56 | color:blue;
57 | }
58 |
59 | .ProposalInput{
60 | border: none;
61 | display: inline-block;
62 | width: 76%;
63 | }
64 |
65 | .ProposalInputWrapper {
66 | padding: 2px;
67 | padding-left: 0px;
68 | border-bottom:2px solid;
69 | border-bottom-color: rgb(244, 247, 250);
70 | margin-bottom:10px;
71 | }
72 |
73 | .ProposalInputWrapper:focus-within {
74 | border-bottom-color: #3434CE;
75 | }
76 | /* .ProposalInputWrapper focus{
77 | border-bottom-color: #3434CE;
78 | } */
79 |
80 | .InProgressProposal{
81 | position: absolute;
82 | height: 45%;
83 | background: rgba(255,255,255,0.9);
84 | width: 91%;
85 | border-radius: 5px;
86 | z-index: 105;
87 | padding:14px 9px;
88 | }
89 | .CreateProposal .Content > div > strong {
90 | padding-right: 8px;
91 | }
92 |
93 | .Content .icon.check.circle{
94 | font-size: 2em;
95 | }
96 |
97 | /*.ProposalInputWrapper::after{
98 | content: "ADT";
99 | }*/
100 |
--------------------------------------------------------------------------------
/src/components/governance/GovernanceAndCoreParameters.css:
--------------------------------------------------------------------------------
1 | .ParameterRow{
2 | padding:11px 0;
3 | border-bottom:1px solid #f5f5f5;
4 | }
5 | .ParameterRow span:last-of-type {
6 | position: absolute;
7 | right: 20px;
8 | }
9 | .ValuesTitle{
10 | position: absolute;
11 | right: 26px;
12 | }
13 | .AllParameters{
14 | font-family: "Open Sans", sans-serif;
15 | font-weight:600;
16 | font-size: 12px;
17 | }
18 | .ParameterRow:last-of-type{
19 | border-bottom:none;
20 | }
21 |
22 | .ParameterRow span.ui.button{
23 | right: 13px;
24 | }
25 |
--------------------------------------------------------------------------------
/src/components/governance/OpenProposalsTable.css:
--------------------------------------------------------------------------------
1 | .OpenProposalsTable{
2 | width:100%;
3 | font-size:12px;
4 | }
5 | .OpenProposalsTable th{
6 | text-align: left;
7 | }
8 | .OpenProposalsTable .table-row{
9 | font-family: "Open Sans", sans-serif;
10 | border-bottom: 1px solid #f5f5f5;
11 | }
12 | .OpenProposalsTable .table-row:last-of-type{
13 | border-bottom: none;
14 | }
15 | .OpenProposalsTable .table-row td{
16 | padding:8px 0;
17 | font-weight: 600;
18 | }
19 | .OpenProposalsTable .ui.mini.button{
20 | font-size: 9.8px;
21 | background-color: transparent;
22 | padding: 6px 15px;
23 | }
24 | .OpenProposalsTable .table-row td:last-of-type,
25 | .OpenProposalsTable tr th:last-of-type{
26 | text-align: center;
27 | }
28 | .OpenProposalsTable th{
29 | font-family: "Open Sans", sans-serif;
30 | padding-top: 4px;
31 | }
32 | .RegistryGuideOpenProposals{
33 | height: 95%;
34 | }
35 |
--------------------------------------------------------------------------------
/src/components/mobile_nav/MobileApplication.css:
--------------------------------------------------------------------------------
1 | .MobileApplication{
2 | margin-top: 100px;
3 | font-family: 'Open Sans', sans-serif;
4 | }
5 | .MobileApplication input{
6 | border: none;
7 | border-bottom: 1px solid #ddd;
8 | width: 85%;
9 | background: transparent;
10 | margin-bottom: 5px;
11 | }
12 | .MobileApplication span{
13 | padding:16px 0 4px 0;
14 | display: inline-block;
15 | }
16 | .MobileApplicationContainer{
17 | background: #3634ce;
18 | color: white;
19 | padding-bottom: 25px;
20 | border-bottom-left-radius: 5px;
21 | border-bottom-right-radius: 5px;
22 | }
--------------------------------------------------------------------------------
/src/components/mobile_nav/MobileNavigation.css:
--------------------------------------------------------------------------------
1 | .MobileNavigation{
2 | position: fixed;
3 | bottom:0;
4 | border-top: 1px solid rgb(233, 233, 233);
5 | z-index:1000;
6 | background: white;
7 | width:100%;
8 | display: none;
9 | /* margin-bottom: 25px; */
10 | }
11 | .MobileNavigation a, .MobileNavigation div{
12 | text-align: center;
13 | font-family: 'Open Sans', sans-serif;
14 | color:#a2a2a2;
15 | padding: 17px 12px;
16 | display: inline-block;
17 | width:25%;
18 | font-size: 11px !important;
19 | }
20 | .MobileNavigation span{
21 | padding-top:4px;
22 | display:inline-block;
23 | }
24 |
--------------------------------------------------------------------------------
/src/components/mobile_nav/MobileNavigation.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import './MobileNavigation.css'
3 | import { mobileNavData } from '../../models/mobileNav'
4 |
5 | export const MobileNavigation = (props) => {
6 | const Link = props.Link
7 |
8 | let view = mobileNavData.map((x,i) => {
9 | if (x.type === 'Link') {
10 | return (
11 |
12 |
13 |
14 | {x.name}
15 |
16 | )
17 | } else {
18 | return (
19 |
20 |
21 |
22 |
{x.name}
23 |
24 | )
25 | }
26 | })
27 |
28 | return (
29 |
30 | {view}
31 |
32 | )
33 | }
34 |
35 |
--------------------------------------------------------------------------------
/src/components/reddit/RedditConfirmationModal.css:
--------------------------------------------------------------------------------
1 | .RedditConfirmationModal {
2 | display: flex;
3 | flex-direction: column;
4 | font-family: 'Open Sans', sans-serif;
5 | }
6 |
7 | .DomainInput, .ADTInput {
8 | display: flex;
9 | flex-direction: row;
10 | /* justify-content: center; */
11 | padding-top: 15px;
12 | padding-bottom: 15px;
13 | font-size: 14px;
14 | line-height: 19px;
15 | align-items: center;
16 | margin: 0 auto;
17 | width: 60%;
18 | }
19 |
20 | .DomainInput .ApplyLabel {
21 | color: #10C903;
22 | }
23 |
24 | .DomainInput .ChallengeLabel {
25 | color: #CE3434;
26 | }
27 |
28 | .ReasonInput {
29 | display: flex;
30 | flex-direction: column;
31 | align-items: center;
32 | }
33 |
34 | .ReasonInput .ErrorMessage {
35 | color: #CE3434;
36 | padding-top: 5px;
37 | }
38 |
39 | :root:root:root .ui.loader:after {
40 | border-color: #000 transparent transparent !important;
41 | }
42 |
43 | .LoadingIconContainer {
44 | text-align: center;
45 | padding-bottom: 10px;
46 | }
47 |
48 | .PopulatedSpan {
49 | background-color: #F4F7FA;
50 | border-radius: 3px;
51 | width: 30%;
52 | text-align: center;
53 | margin-left: 10px;
54 | padding-bottom: 10px;
55 | padding-top: 10px;
56 | flex-grow: 1;
57 | font-weight: 600;
58 | }
59 |
60 | :root:root .ReasonInputTextArea {
61 | min-height: 200px;
62 | width: 60%;
63 | border-style: none;
64 | background-color: #F4F7FA;
65 | border-radius: 3px;
66 | padding: 10px;
67 | }
68 |
69 | .ReasonInputLabel {
70 | font-size: 10px;
71 | font-weight: 600;
72 | line-height: 14px;
73 | opacity: .8;
74 | text-transform: uppercase;
75 | width: 60%;
76 | padding-bottom: 5px;
77 | }
78 |
79 | .ReasonInput textarea::-webkit-input-placeholder {
80 | padding: 5px;
81 | opacity: .5;
82 | }
83 |
84 | .ReasonInput textarea:-moz-placeholder { /* Firefox 18- */
85 | padding: 5px;
86 | opacity: .5;
87 | }
88 |
89 | .ReasonInput textarea::-moz-placeholder { /* Firefox 19+ */
90 | padding: 5px;
91 | opacity: .5;
92 | }
93 |
94 | .ReasonInput textarea:-ms-input-placeholder {
95 | padding: 5px;
96 | opacity: .4;
97 | }
98 |
99 | .RedditConfirmationModal .ButtonsContainer {
100 | display: flex;
101 | flex-direction: row;
102 | justify-content: space-evenly;
103 | width: 60%;
104 | margin: 0 auto;
105 | padding-top: 15px;
106 | padding-bottom: 15px;
107 | }
108 |
109 | :root:root .RedditConfirmationModal .ButtonsContainer .CancelButton {
110 | border: 1px solid #3434CE !important;
111 | box-shadow: unset;
112 | text-transform: uppercase;
113 | color: #3434CE !important;
114 | font-weight: 700;
115 | font-size: 9.5px
116 | }
117 |
118 | :root:root .RedditConfirmationModal .ButtonsContainer .ApplyButton {
119 | border: 1px solid #10C930 !important;
120 | box-shadow: unset;
121 | text-transform: uppercase;
122 | color: #10C930 !important;
123 | font-weight: 700;
124 | font-size: 9.5px;
125 | }
126 |
127 | :root:root .RedditConfirmationModal .ButtonsContainer .ChallengeButton {
128 | border: 1px solid #CE3434 !important;
129 | box-shadow: unset;
130 | text-transform: uppercase;
131 | color: #CE3434 !important;
132 | font-weight: 700;
133 | font-size: 9.5px;
134 | }
135 |
--------------------------------------------------------------------------------
/src/components/reddit/RedditReasonModal.css:
--------------------------------------------------------------------------------
1 | .RedditReasonModal {
2 | font-family: 'Open Sans', sans-serif;
3 | width: 500px !important;
4 | margin: 0 !important;
5 | top: 30% !important;
6 | left: 37% !important;
7 | }
8 | .RedditReasonHeader {
9 | font-size: 18px;
10 | font-weight: 600;
11 | line-height: 24px;
12 | color: #10C903;
13 | text-transform: uppercase;
14 | padding-top: 15px;
15 | padding-left: 20px;
16 | }
17 |
18 | .RedditTitles {
19 | font-size: 10px;
20 | opacity: .8;
21 | color: #424242;
22 | font-weight: 600;
23 | line-height: 14px;
24 | text-transform: uppercase;
25 | padding: 10px;
26 | padding-left: 20px;
27 | }
28 |
29 | .RedditDomainName {
30 | color: #424242;
31 | font-size: 14px;
32 | font-weight: 600;
33 | line-height: 19px;
34 | padding-left: 20px;
35 | }
36 |
37 | .RedditReason {
38 | color: #424242;
39 | font-size: 14px;
40 | line-height: 19px;
41 | padding-left: 20px;
42 | }
43 |
44 | .RedditReasonModal .ButtonsContainer {
45 | display: flex;
46 | flex-direction: row;
47 | justify-content: space-evenly;
48 | flex-wrap: wrap;
49 | padding-top: 20px;
50 | padding-bottom: 20px;
51 | }
52 |
53 | :root:root:root .RedditReasonModal .ButtonsContainer .CancelButton {
54 | font-size: 10px;
55 | text-transform: uppercase;
56 | color: #3434CE !important;
57 | font-weight: bold;
58 | box-shadow: unset;
59 | border: 1px solid #3434CE;
60 | }
61 |
62 | :root:root:root .RedditReasonModal .ButtonsContainer .ViewButton {
63 | font-size: 10px;
64 | text-transform: uppercase;
65 | color: #FF5700 !important;
66 | font-weight: bold;
67 | box-shadow: unset;
68 | border: 1px solid #FF5700;
69 | display: flex;
70 | align-items: center;
71 | }
72 |
73 | :root:root:root .RedditReasonModal .ButtonsContainer .CancelButton:hover {
74 | font-size: 10px;
75 | text-transform: uppercase;
76 | color: #FFF !important;
77 | background-color: #3434CE !important;
78 | font-weight: bold;
79 | box-shadow: unset;
80 | border: 1px solid #3434CE;
81 | }
82 |
83 | :root:root:root .RedditReasonModal .ButtonsContainer .ViewButton:hover {
84 | font-size: 10px;
85 | text-transform: uppercase;
86 | color: #FFF !important;
87 | background-color: #FF5700 !important;
88 | font-weight: bold;
89 | box-shadow: unset;
90 | border: 1px solid #FF5700;
91 | }
92 |
93 | :root:root:root .RedditReasonModal .ButtonsContainer .ViewButton:hover .redditPath {
94 | fill: #FFF;
95 | }
96 | :root:root:root .RedditReasonModal .ButtonsContainer .ViewButton:hover .redditG {
97 | fill: #FF5700;
98 | }
99 |
100 | .RedditReasonModal .redditSvg {
101 | margin-left: 4px;
102 | }
103 |
104 | .RedditReasonModal a {
105 | color: inherit !important;
106 | transition: unset;
107 | display: flex;
108 | align-items: center;
109 | }
110 |
111 | .RedditReasonModal a:focus {
112 | text-decoration: none;
113 | }
--------------------------------------------------------------------------------
/src/components/registry_guide/RegistryGuideModalAdchainRegistry.css:
--------------------------------------------------------------------------------
1 | .GuideDescList {
2 | font-weight: bold;
3 | padding-left: 30px;
4 | }
--------------------------------------------------------------------------------
/src/components/registry_guide/RegistryGuideModalAdchainRegistry.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import { Modal, Button } from 'semantic-ui-react'
3 | import './RegistryGuideModalAdchainRegistry.css'
4 |
5 | class RegistryGuideModalAdchainRegistry extends Component {
6 | constructor (props) {
7 | super(props)
8 | this.state = {
9 | section: props.section
10 | }
11 | }
12 |
13 | render () {
14 | const { section } = this.state
15 | return (
16 |
17 |
What is the adChain Registry?
18 |
19 |
20 |
21 | The adChain Registry is a community-curated registry of ad-supported websites. Curation is executed via a network specific cryptocurrency called adToken (ADT). Community members are rationally incentivized to include or reject websites from the registry based on the merits of ad performance and inventory quality.
22 |
23 |
24 |
27 |
28 |
29 | this.props.returnToMenu(section)} content='Return to Guide' />
30 | this.props.close()} content='Exit to Dapp' />
31 |
32 |
33 | Can’t find what you’re looking for? Click
here to visit the help center.
34 |
35 |
36 |
37 | )
38 | }
39 | }
40 |
41 | export default RegistryGuideModalAdchainRegistry
42 |
--------------------------------------------------------------------------------
/src/components/registry_guide/RegistryGuideModalChallengeDomain.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import { Modal, Button } from 'semantic-ui-react'
3 | import { ChallengeSteps } from './WalkthroughSteps'
4 | import PubSub from 'pubsub-js'
5 |
6 | class RegistryGuideModalChallengeDomain extends Component {
7 | constructor (props) {
8 | super(props)
9 | this.state = {
10 | section: props.section
11 | }
12 | }
13 |
14 | render () {
15 | const { section } = this.state
16 |
17 | return (
18 |
19 |
How Do I Challenge a Domain?
20 |
21 |
22 |
23 | Challenging a domain is the universal right of every adToken holder. Challenges may be issued at any point during a domain’s lifecycle, that is to say, a challenge may be issued when a domain is In-Application or In-Registry.
24 |
25 |
26 |
27 | Challenges help maintain quality in the adChain Registry. You should Challenge a domain if you want to see it removed from the adChain Registry.
28 |
29 |
30 |
31 | For a step-by-step guide on how to challenge your domain, please click on the “CONTINUE” button below:
32 |
33 |
34 |
35 | this.props.returnToMenu(section)} content='Return to Guide' />
36 | PubSub.publish('RegistryGuideModal.startRegistryWalkthrough', ChallengeSteps)} />
37 |
38 |
39 | Can’t find what you’re looking for? Click
here to visit the help center.
40 |
41 |
42 |
43 | )
44 | }
45 | }
46 |
47 | export default RegistryGuideModalChallengeDomain
48 |
--------------------------------------------------------------------------------
/src/components/registry_guide/RegistryGuideModalCommitVote.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import { Modal, Button } from 'semantic-ui-react'
3 | import { CommitSteps } from './WalkthroughSteps'
4 | import PubSub from 'pubsub-js'
5 |
6 | class RegistryGuideModalCommitVote extends Component {
7 | constructor (props) {
8 | super(props)
9 | this.state = {
10 | section: props.section
11 | }
12 | }
13 |
14 | render () {
15 | const { section } = this.state
16 |
17 | return (
18 |
19 |
How Do I Commit a Vote?
20 |
21 |
22 |
23 | Once a domain in application has been challenged, it immediately goes into vote. The first step in the voting stage is Voting Commit, where ADT holders commit ADT as their votes.
24 |
25 |
26 |
27 | In the Voting Commit stage, adToken holders can vote to either Support or Oppose the domain’s eligibility to be included in the adChain Registry.
28 |
29 |
30 |
31 | For a step-by-step guide on how to commit a vote, please click on the “CONTINUE” button below:
32 |
33 |
34 |
35 | this.props.returnToMenu(section)} content='Return to Guide' />
36 | PubSub.publish('RegistryGuideModal.startRegistryWalkthrough', CommitSteps)} />
37 |
38 |
39 | Can’t find what you’re looking for? Click
here to visit the help center.
40 |
41 |
42 |
43 | )
44 | }
45 | }
46 |
47 | export default RegistryGuideModalCommitVote
48 |
--------------------------------------------------------------------------------
/src/components/registry_guide/RegistryGuideModalDomainJourney.css:
--------------------------------------------------------------------------------
1 | .joyride {
2 | z-index: 5000 !important;
3 | }
4 |
5 | .RegistryGuideModalDomainJourney .GuideText object {
6 | width: 50%;
7 | height: auto;
8 | }
--------------------------------------------------------------------------------
/src/components/registry_guide/RegistryGuideModalDomainJourney.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import { Modal } from 'semantic-ui-react'
3 | import './RegistryGuideModalDomainJourney.css'
4 | import RegistryGuideStaticDomainJourney from './RegistryGuideStaticDomainJourney'
5 |
6 | class RegistryGuideModalDomainJourney extends Component {
7 | render () {
8 | return (
9 |
10 | What is a Domain's Journey in the adChain Registry?
11 |
12 |
13 |
14 |
15 | )
16 | }
17 | }
18 |
19 | export default RegistryGuideModalDomainJourney
20 |
--------------------------------------------------------------------------------
/src/components/registry_guide/RegistryGuideModalGovernance.css:
--------------------------------------------------------------------------------
1 | .RegistryGuideModalGovernance .GuideText {
2 | display: flex;
3 | flex-direction: row;
4 | flex-wrap: wrap;
5 | justify-content: space-evenly;
6 | }
--------------------------------------------------------------------------------
/src/components/registry_guide/RegistryGuideModalRevealVote.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/registry_guide/RegistryGuideModalRevealVote.css
--------------------------------------------------------------------------------
/src/components/registry_guide/RegistryGuideModalRevealVote.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import { Modal, Button } from 'semantic-ui-react'
3 | import './RegistryGuideModalRevealVote.css'
4 | import { RevealSteps } from './WalkthroughSteps'
5 | import PubSub from 'pubsub-js'
6 |
7 | class RegistryGuideModalRevealVote extends Component {
8 | constructor (props) {
9 | super(props)
10 | this.state = {
11 | section: props.section
12 | }
13 | }
14 |
15 | render () {
16 | const { section } = this.state
17 |
18 | return (
19 |
20 |
How Do I Reveal a Vote?
21 |
22 |
23 |
24 | Once the Voting Commit stage ends, the Voting Reveal stage begins. The Voting Reveal stage is when you will reveal your vote to the public. Only previously committed votes can be revealed.
25 |
26 |
27 |
28 | Votes revealed during this stage will be tallied up and counted to determine whether the domain Applicant or Challenger has won the vote, and therefore whether or not the domain is admitted to the adChain Registry.
29 |
30 |
31 |
32 | For a step-by-step guide on how to reveal a vote, please click on the “CONTINUE” button below:
33 |
34 |
35 |
36 | this.props.returnToMenu(section)} content='Return to Guide' />
37 | PubSub.publish('RegistryGuideModal.startRegistryWalkthrough', RevealSteps)} />
38 |
39 |
40 | Can’t find what you’re looking for? Click
here to visit the help center.
41 |
42 |
43 |
44 | )
45 | }
46 | }
47 |
48 | export default RegistryGuideModalRevealVote
49 |
--------------------------------------------------------------------------------
/src/components/registry_guide/RegistryGuideStaticChallenge.css:
--------------------------------------------------------------------------------
1 | .RegistryGuideStaticChallenge {
2 | position: relative;
3 | }
4 |
5 | .RegistryGuideStaticChallenge .header {
6 | display: inline-block;
7 | font-size: 17px !important;
8 | }
9 |
10 | :root:root:root .RegistryGuideStaticChallenge .refresh {
11 | float: right;
12 | border: 1px solid #3434CE;
13 | border-radius: 3px;
14 | color: #3434CE !important;
15 | font-family: "Open Sans", sans-serif;
16 | font-size: 9.5px;
17 | font-weight: bold;
18 | line-height: 11px;
19 | text-transform: uppercase;
20 | box-shadow: unset;
21 | }
22 |
23 | .RegistryGuideStaticChallenge .HeaderColumn {
24 | padding-bottom: 0px !important;
25 | }
26 |
27 | .RegistryGuideStaticChallenge .HeaderRow {
28 | padding-top: 10px;
29 | }
30 |
31 | .RegistryGuideStaticChallenge .NumberCircle {
32 | border-radius: 10px;
33 | display: inline-block;
34 | float: left;
35 | font-size:8px;
36 | color: #F4F7FA;
37 | font-weight: bold;
38 | line-height: 13px;
39 | font-family: 'Open Sans', sans-serif;
40 | text-align:center;
41 | border: 1px solid #BEC0C2;
42 | padding: 2px;
43 | background: #BEC0C2 content-box;
44 | width: 21px;
45 | height: 21px;
46 | }
47 |
48 | :root:root:root .ChallengeButton {
49 | color: #CE3434 !important;
50 | font-family: "Open Sans", sans-serif;
51 | font-size: 9.5px;
52 | font-weight: bold;
53 | text-align: center;
54 | border: 1px solid #CE3434;
55 | border-radius: 3px;
56 | text-transform: uppercase;
57 | box-shadow: unset;
58 | }
59 |
60 | :root:root:root .ChallengeButton:hover {
61 | background-color: #CE3434 !important;
62 | color: #FFF !important;
63 | }
64 |
65 | .CountdownText .CountdownUnit {
66 | margin: 15px;
67 | width: 40px;
68 | border-radius: 3px;
69 | background-color: #F4F7FA;
70 | color: #424242;
71 | font-family: "Open Sans", sans-serif;
72 | font-size: 18px;
73 | font-weight: 600;
74 | line-height: 40px;
75 | text-align: center;
76 | display: inline-block;
77 | }
78 |
79 | .CountdownText .CountdownUnit .CountdownLabel {
80 | display: flow-root;
81 | color: #424242;
82 | font-family: "Open Sans", sans-serif;
83 | font-size: 8px;
84 | line-height: 11px;
85 | text-align: center;
86 | background-color: #FFF;
87 | padding-top: 5px
88 | }
89 |
--------------------------------------------------------------------------------
/src/components/registry_guide/RegistryGuideStaticChallenge.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import { Button } from 'semantic-ui-react'
3 | import Tooltip from '../Tooltip'
4 |
5 | import './RegistryGuideStaticChallenge.css'
6 |
7 | class RegistryGuideStaticChallenge extends Component {
8 | render () {
9 | return (
10 |
11 |
12 |
13 |
14 |
15 | Stage: In Application
16 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
Challenge stage ends
26 |
February 2nd, 2018 @ 02:13:40 PST
27 |
Remaining time:
28 |
29 |
30 | 02
31 | days
32 |
33 |
34 | 13
35 | hours
36 |
37 |
38 | 26
39 | minutes
40 |
41 |
42 | 10
43 | seconds
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
ADT Required to Challenge
53 |
54 | 150 ADT
55 |
56 |
1
57 |
58 |
59 |
Your Percentage Payout if Successful:
50%
60 |
61 |
62 |
Challenge
63 |
64 |
65 |
66 | )
67 | }
68 | }
69 |
70 | export default RegistryGuideStaticChallenge
71 |
--------------------------------------------------------------------------------
/src/components/registry_guide/RegistryGuideStaticDashboard.css:
--------------------------------------------------------------------------------
1 |
2 | .DashboardColumn {
3 | font-family: "Open Sans", sans-serif;
4 | min-height:155px;
5 | }
6 |
7 | .DashboardColumn table {
8 | width: 100%;
9 | }
10 |
11 | .DashboardColumn table td {
12 | word-break: break-all;
13 | }
14 |
15 | .DashboardTitle {
16 | text-align: left;
17 | font-size: 14px;
18 | }
19 | .DashboardRow:last-of-type{
20 | border:none;
21 | }
22 | .DashboardFirstCell {
23 | /* padding-right: 2em; */
24 | font-weight: 600;
25 | }
26 |
27 | .DashboardSecondCell {
28 | text-align: left;
29 | }
30 |
31 | .DashboardRow {
32 | height: 3em;
33 | border-bottom: 1px solid #F4F7FA;
34 | font-size: 12px;
35 | }
36 |
--------------------------------------------------------------------------------
/src/components/registry_guide/RegistryGuideStaticDashboard.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import './RegistryGuideStaticDashboard.css'
3 |
4 | class RegistryGuideStaticDashboard extends Component {
5 | constructor (props) {
6 | super()
7 |
8 | this.state = {
9 | }
10 | }
11 |
12 | render () {
13 | return (
14 |
15 |
DOMAINS YOU APPLIED
16 |
17 |
18 |
19 |
20 |
21 | Domain
22 | Stage
23 |
24 |
25 | foo.net
26 | In Application
27 |
28 |
29 |
30 |
31 |
32 |
33 | )
34 | }
35 | }
36 |
37 | export default RegistryGuideStaticDashboard
38 |
--------------------------------------------------------------------------------
/src/components/registry_guide/RegistryGuideStaticDomainJourney.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import MapVoting from '../assets/stage_maps/map_commit.svg'
3 | import MapApplication from '../assets/stage_maps/map_application.svg'
4 | import MapRegistryChallenge from '../assets/stage_maps/map_in_registry_challenge_id.svg'
5 | import MapRegistryNoChallenge from '../assets/stage_maps/map_in_registry_no_id.svg'
6 | import MapReveal from '../assets/stage_maps/map_reveal.svg'
7 | import MapRejected from '../assets/stage_maps/map_rejected.svg'
8 | import { DomainJourneySteps } from './WalkthroughSteps'
9 |
10 | import PubSub from 'pubsub-js'
11 |
12 | class RegistryGuideStaticDomainJourney extends Component {
13 | constructor (props) {
14 | super(props)
15 | this.state = {
16 | domainJourney: 'application'
17 | }
18 | this.updateDomainJourney = this.updateDomainJourney.bind(this)
19 | }
20 |
21 | componentWillMount () {
22 | PubSub.publish('RegistryWalkthrough.toggleOverlay')
23 | this.updateJourneyEvent = PubSub.subscribe('RegistryGuideStaticDomainJourney.updateDomainJourney', this.updateDomainJourney)
24 | }
25 |
26 | componentDidMount () {
27 | this._isMounted = true
28 | PubSub.publish('RegistryGuideModal.startRegistryWalkthrough', DomainJourneySteps)
29 | }
30 |
31 | // componentWillReceiveProps (nextProps) {
32 | // if (nextProps.domainJourney !== this.state.domainJourney) {
33 | // this.setState({
34 | // domainJourney: nextProps.domainJourney
35 | // })
36 | // }
37 | // }
38 |
39 | componentDidUpdate (prevProps, prevState) {
40 | if (this.state.domainJourney !== prevState.domainJourney) {
41 | PubSub.publish('RegistryWalkthrough.resumeJoyride')
42 | }
43 | }
44 |
45 | componentWillUnmount () {
46 | PubSub.publish('RegistryWalkthrough.toggleOverlay')
47 | this._isMounted = false
48 | }
49 |
50 | updateDomainJourney (topic, domainJourney) {
51 | if (this._isMounted) {
52 | this.setState({
53 | domainJourney: domainJourney
54 | })
55 | }
56 | }
57 |
58 | render () {
59 | const { domainJourney } = this.state
60 |
61 | let domainMapSrc = MapApplication
62 | let domainClass = 'MapApplication'
63 |
64 | if (domainJourney === 'registryNoChallenge') {
65 | domainMapSrc = MapRegistryNoChallenge
66 | domainClass = 'MapRegistryNoChallenge'
67 | } else if (domainJourney === 'voting') {
68 | domainMapSrc = MapVoting
69 | domainClass = 'MapVoting'
70 | } else if (domainJourney === 'reveal') {
71 | domainMapSrc = MapReveal
72 | domainClass = 'MapReveal'
73 | } else if (domainJourney === 'registryChallenge') {
74 | domainMapSrc = MapRegistryChallenge
75 | domainClass = 'MapRegistryChallenge'
76 | } else if (domainJourney === 'rejected') {
77 | domainMapSrc = MapRejected
78 | domainClass = 'MapRejected'
79 | }
80 |
81 | return (
82 |
83 |
84 |
85 | )
86 | }
87 | }
88 |
89 | export default RegistryGuideStaticDomainJourney
90 |
--------------------------------------------------------------------------------
/src/components/registry_guide/RegistryGuideStaticDomainsTable.css:
--------------------------------------------------------------------------------
1 | .RegistryGuideStaticDomainsTable img {
2 | width: 100%;
3 | }
--------------------------------------------------------------------------------
/src/components/registry_guide/RegistryGuideStaticDomainsTable.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import DomainsTableInApplication from '../assets/domainstable_inapplication.png'
3 | import DomainsTableInCommit from '../assets/domainstable_incommit.png'
4 | import DomainsTableInReveal from '../assets/domainstable_inreveal.png'
5 | import './RegistryGuideStaticDomainsTable.css'
6 |
7 | const domainTables = {
8 | DomainsTableInApplication,
9 | DomainsTableInCommit,
10 | DomainsTableInReveal
11 | }
12 |
13 | class RegistryGuideStaticDomainsTable extends Component {
14 | constructor (props) {
15 | super()
16 | this.state = {
17 | source: props.source
18 | }
19 | }
20 |
21 | render () {
22 | const { source } = this.state
23 | let imgSrc
24 |
25 | switch (source) {
26 | case 'application':
27 | imgSrc = domainTables.DomainsTableInApplication
28 | break
29 | case 'commit':
30 | imgSrc = domainTables.DomainsTableInCommit
31 | break
32 | case 'reveal':
33 | imgSrc = domainTables.DomainsTableInReveal
34 | break
35 | default:
36 | imgSrc = domainTables.DomainsTableInApplication
37 | break
38 | }
39 |
40 | return (
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | )
49 | }
50 | }
51 |
52 | export default RegistryGuideStaticDomainsTable
53 |
--------------------------------------------------------------------------------
/src/components/registry_guide/RegistryGuideStaticInRegistry.css:
--------------------------------------------------------------------------------
1 | .RegistryGuideStaticInRegistry {
2 | position: relative;
3 | }
4 |
5 | .RegistryGuideStaticInRegistry .header {
6 | display: inline-block;
7 | font-size: 17px !important;
8 | }
9 |
10 | :root:root:root .RegistryGuideStaticInRegistry .refresh {
11 | float: right;
12 | border: 1px solid #3434CE;
13 | border-radius: 3px;
14 | color: #3434CE !important;
15 | font-family: "Open Sans", sans-serif;
16 | font-size: 9.5px;
17 | font-weight: bold;
18 | line-height: 11px;
19 | text-transform: uppercase;
20 | box-shadow: unset;
21 | }
22 |
23 | .RegistryGuideStaticInRegistry .HeaderColumn {
24 | padding-bottom: 0px !important;
25 | }
26 |
27 | .RegistryGuideStaticInRegistry .HeaderRow {
28 | padding-top: 10px;
29 | }
30 |
31 | :root:root:root .RegistryGuideStaticInRegistry .SegmentOne {
32 | padding-left: 4em;
33 | padding-right: 4em;
34 | /* padding-top: 3em; */
35 | }
36 |
37 | :root:root:root .RegistryGuideStaticInRegistry .SegmentOne p,
38 | :root:root:root .RegistryGuideStaticInRegistry .SegmentTwo p,
39 | :root:root:root .RegistryGuideStaticInRegistry .SegmentThree p {
40 | color: #424242;
41 | font-family: "Open Sans", sans-serif;
42 | font-size: 11px;
43 | line-height: 14px;
44 | }
45 |
46 | :root:root:root .RegistryGuideStaticInRegistry .SegmentTwo {
47 | border-top: none !important;
48 | }
49 |
50 | :root:root:root .RegistryGuideStaticInRegistry .SegmentTwo p {
51 | padding-left: 6em;
52 | padding-right: 3em;
53 | text-align: left;
54 | }
55 |
56 | :root:root:root .RegistryGuideStaticInRegistry .SegmentFour {
57 | border-top: none !important;
58 | padding-left: 4em;
59 | padding-right: 4em;
60 | /* padding-bottom: 3em; */
61 | }
62 |
63 | :root:root:root .RegistryGuideStaticInRegistry .SegmentThree {
64 | border-top: none !important;
65 | padding-left: 4em;
66 | padding-right: 4em;
67 | }
68 |
69 | :root:root:root .ChallengeButton {
70 | color: #CE3434 !important;
71 | font-family: "Open Sans", sans-serif;
72 | font-size: 9.5px;
73 | font-weight: bold;
74 | text-align: center;
75 | border: 1px solid #CE3434;
76 | border-radius: 3px;
77 | text-transform: uppercase;
78 | box-shadow: unset;
79 | }
80 |
81 | :root:root:root .ChallengeButton:hover {
82 | background-color: #CE3434 !important;
83 | color: #FFF !important;
84 | }
85 |
86 | /*
87 | Proposal Modal Style Overrides
88 | */
89 | :root:root:root .ProposalChallengeContainer .SegmentOne p,
90 | :root:root:root .ProposalChallengeContainer .SegmentTwo p,
91 | :root:root:root .ProposalChallengeContainer .SegmentThree p {
92 | color: #424242;
93 | font-family: "Open Sans", sans-serif;
94 | font-size: 12px;
95 | line-height: 1.6;
96 | }
97 | :root:root:root .ProposalChallengeContainer p,
98 | :root:root:root .ProposalChallengeContainer .ui.large.header{
99 | font-family: "Open Sans", sans-serif !important;
100 | color:rgb(66, 66, 66);
101 | }
102 | :root:root:root .ProposalChallengeContainer .SegmentTwo p {
103 | padding-left: 4em;
104 | padding-right: 3em;
105 | text-align: left;
106 | }
107 |
108 |
--------------------------------------------------------------------------------
/src/components/registry_guide/RegistryGuideStaticInRegistry.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import { Popup, Button, Segment } from 'semantic-ui-react'
3 |
4 | import './RegistryGuideStaticInRegistry.css'
5 |
6 | class RegistryGuideStaticInRegistry extends Component {
7 | render () {
8 | return (
9 |
10 |
11 |
12 |
13 |
14 | Stage: In Registry
15 |
}
17 | content='The first phase of the voting process is the commit phase where the ADT holder stakes a hidden amount of votes to SUPPORT or OPPOSE the domain application. The second phase is the reveal phase where the ADT holder reveals the staked amount of votes to either the SUPPORT or OPPOSE side.'
18 | />
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | You should challenge domain.com’s application
28 | if you don’t believe it should be in the adChain Registry.
29 | Clicking the “CHALLENGE” button below will
30 | initiate domain.com’s Voting stage.
31 |
32 |
33 |
34 |
35 | ADT required to challenge: 100 ADT
36 |
37 | Your percentage payout if your challenge is successful: 50%
38 |
39 |
40 |
41 |
42 | If your challenge is successful once the Reveal stage ends, you will have your ADT reimbursed and be awarded the payout.
43 |
44 |
45 |
46 | Challenge
47 |
48 |
49 |
50 |
51 |
52 | )
53 | }
54 | }
55 |
56 | export default RegistryGuideStaticInRegistry
57 |
--------------------------------------------------------------------------------
/src/components/sidebar/PublisherApplicationFormInProgress.css:
--------------------------------------------------------------------------------
1 | .PublisherApplicationFormInProgress {
2 | background: rgba(255,255,255,1);
3 | position: absolute;
4 | top: 0;
5 | left: 0;
6 | width: 100%;
7 | height: 100%;
8 | display: flex;
9 | justify-content: center;
10 | align-items: center;
11 | padding: 2em;
12 | }
13 |
14 | .PublisherApplicationFormInProgress .Content {
15 | }
16 |
17 | :root:root:root .PublisherApplicationFormInProgress .ui.loader:after {
18 | border-color: #000 transparent transparent !important;
19 | }
--------------------------------------------------------------------------------
/src/components/sidebar/PublisherApplicationFormInProgress.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import { Loader } from 'semantic-ui-react'
3 |
4 | import './PublisherApplicationFormInProgress.css'
5 |
6 | class PublisherApplicationFormInProgress extends Component {
7 | constructor (props) {
8 | super()
9 | }
10 |
11 | render () {
12 | return (
13 |
14 |
15 |
16 | Submission in progress.
17 |
18 |
19 |
You will receive a maximum of two MetaMask prompts:
20 |
First prompt: Allow adChain Registry contract to transfer adToken deposit from your account (if not done so already).
21 |
Second prompt: Submit domain application to the adChain Registry contract.
22 |
23 |
24 | )
25 | }
26 | }
27 |
28 | export default PublisherApplicationFormInProgress
29 |
--------------------------------------------------------------------------------
/src/components/sidebar/SideBarApplicationContainer.css:
--------------------------------------------------------------------------------
1 |
2 | :root:root:root .ApplicationContainer .field {
3 | margin-left: 1em;
4 | }
5 |
6 | .ApplicationContainer {
7 | border: 2px solid #3434CE;
8 | border-radius: 10px;
9 | box-shadow: 0 2px 10px 0 rgba(13,6,62,0.5);
10 | margin-left: 8%;
11 | margin-right: 8%;
12 | margin-top: 2em;
13 | margin-bottom: auto;
14 | background-color: #3434CE;
15 | }
16 |
17 | .ApplicationLabelRow {
18 | display: flex;
19 | flex-flow: row wrap;
20 | justify-content: space-between;
21 | }
22 |
23 | .ApplicationLabelRow .InfoIcon {
24 | margin-right: 10px;
25 | }
26 |
27 | :root:root:root:root .ApplicationButton {
28 | color: #FFF !important;
29 | border-radius: 3px;
30 | display: block;
31 | margin: 0 auto !important;
32 | text-transform: uppercase;
33 | height: 24px;
34 | font-size: 8px;
35 | font-weight: bold;
36 | background-color: #10c903 !important;
37 | }
38 |
39 | :root:root:root .ApplicationButton:hover,
40 | :root:root:root .ApplicationButton:focus {
41 | border: none;
42 | box-shadow: unset;
43 | }
44 |
45 | .ApplicationContainer .ActiveForm {
46 | background-color: #3434CE;
47 | }
48 |
49 | :root:root:root .ApplicationContainer .ApplicationLabel {
50 | color: #FFF;
51 | font-size: 13px;
52 | font-weight: 600;
53 | font-family: 'Open Sans', sans-serif;
54 | }
55 |
56 | /* :root:root:root .ApplicationContainer .DomainUrlLabel::after {
57 | content: url(../assets/info_white.svg);
58 | -webkit-transform: scale(1.2) translateY(1.2px);
59 | -ms-transform: scale(1.2) translateY(1.2px);
60 | transform: scale(1.2) translateY(1.2px);
61 | float: right;
62 | padding-right: 1em;
63 | }
64 |
65 | :root:root:root .ApplicationContainer .ActiveForm .DomainUrlLabel::after {
66 | content: url(../assets/info_white.svg);
67 | -webkit-transform: scale(1.2) translateY(1.2px);
68 | -ms-transform: scale(1.2) translateY(1.2px);
69 | transform: scale(1.2) translateY(1.2px);
70 | float: right;
71 | padding-right: 1em;
72 | } */
73 |
74 | :root:root:root .ApplicationContainer .ActiveForm .ApplicationButton {
75 | background-color: #10C903 !important;
76 | color: #FFF !important;
77 | border-style: none;
78 | }
79 |
80 |
81 | .ApplicationContainer form {
82 | font-size: 12px !important;
83 | padding-top: 10px;
84 | padding-bottom: 10px;
85 | }
86 |
87 | :root:root:root .ApplicationInput {
88 | border-top: none;
89 | border-right: none;
90 | border-left: none;
91 | border-radius: 0;
92 | background: transparent;
93 | border-bottom: 2px solid rgba(255,255,255,0.5);
94 | width: 90%;
95 | color: #FFF !important;
96 | padding-left: 0px;
97 | height: 30px;
98 | }
99 |
100 | :root:root:root .ApplicationInput:focus{
101 | background: transparent;
102 | border-radius: 0;
103 | border-bottom: 2px solid rgba(255,255,255,0.5);
104 | }
105 |
106 | .ADTStakedMessage {
107 | color: #FFF !important;
108 | opacity: .6;
109 | font-size: 10px;
110 | }
111 |
112 | @media(max-width:768px){
113 | .ApplicationContainer{
114 | display: none
115 | }
116 | }
117 |
--------------------------------------------------------------------------------
/src/components/single_domain/DomainNeverAppliedContainer.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import PropTypes from 'prop-types'
3 | // import { Button } from 'semantic-ui-react'
4 | import Tooltip from '../Tooltip'
5 | // import './DomainNeverAppliedContainer.css'
6 | // import registry from '../../services/registry'
7 | // import toastr from 'toastr'
8 |
9 | class DomainNeverAppliedContainer extends Component {
10 | constructor (props) {
11 | super()
12 |
13 | this.state = {
14 | domain: props.domain
15 | }
16 | }
17 |
18 | render () {
19 | const {
20 | domain
21 | } = this.state
22 |
23 | return (
24 |
25 |
26 |
27 |
28 |
29 | Stage: Never Applied
30 |
33 |
34 |
35 |
36 |
37 |
38 |
39 | You can apply {domain} into the
40 | adChain Registry within the application modal
41 | on the left navigation column.
42 |
43 |
44 |
45 |
46 | )
47 | }
48 | }
49 |
50 | DomainNeverAppliedContainer.propTypes = {
51 | domain: PropTypes.string
52 | }
53 |
54 | export default DomainNeverAppliedContainer
55 |
--------------------------------------------------------------------------------
/src/components/single_domain/DomainNotInRegistryContainer.css:
--------------------------------------------------------------------------------
1 | .DomainNotInRegistryContainer {
2 | position: relative;
3 | height: 100%;
4 | }
5 |
6 |
7 | .DomainNotInRegistryContainer .header {
8 | display: inline-block;
9 | }
10 |
11 | :root:root:root .DomainNotInRegistryContainer .refresh {
12 | float: right;
13 | border: 1px solid #3434CE;
14 | border-radius: 3px;
15 | color: #3434CE !important;
16 | font-family: "Open Sans", sans-serif;
17 | font-size: 9.5px;
18 | font-weight: bold;
19 | line-height: 11px;
20 | text-transform: uppercase;
21 | box-shadow: unset;
22 | }
23 |
24 | .DomainNotInRegistryContainer .HeaderColumn {
25 | padding-bottom: 0px !important;
26 | }
27 |
28 | .DomainNotInRegistryContainer .HeaderRow {
29 | padding-top: 10px;
30 | }
31 |
32 | .DomainNotInRegistryContainer .DomainNotInRegistryBody {
33 | height: 100%;
34 | }
35 |
36 | .NotInRegistryMessage {
37 | padding-left: 20px;
38 | padding-right: 20px;
39 | }
40 |
--------------------------------------------------------------------------------
/src/components/single_domain/DomainNotInRegistryContainer.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import PropTypes from 'prop-types'
3 | // import { Button } from 'semantic-ui-react'
4 | import Tooltip from '../Tooltip'
5 | import './DomainNotInRegistryContainer.css'
6 | // import registry from '../../services/registry'
7 | // import toastr from 'toastr'
8 |
9 | class DomainNotInRegistryContainer extends Component {
10 | constructor (props) {
11 | super()
12 |
13 | this.state = {
14 | domain: props.domain
15 | }
16 | }
17 |
18 | render () {
19 | const {
20 | domain
21 | } = this.state
22 |
23 | return (
24 |
25 |
26 |
27 |
28 |
29 | Stage: Not in Registry
30 |
33 |
34 | {
35 | //
this.updateStatus(domain)}
39 | // >
40 | // Refresh
41 | //
42 | }
43 |
44 |
45 |
46 |
47 |
48 | You can apply {domain} into the
49 | adChain Registry within the application modal
50 | on the left navigation column.
51 |
52 |
53 |
54 |
55 | )
56 | }
57 |
58 | // async updateStatus (domain) {
59 | // try {
60 | // await registry.updateStatus(domain)
61 | // } catch (error) {
62 | // try {
63 | // console.log(error)
64 | // } catch (err) {
65 | // console.log(err)
66 | // }
67 | // }
68 | // }
69 | }
70 |
71 | DomainNotInRegistryContainer.propTypes = {
72 | domain: PropTypes.string
73 | }
74 |
75 | export default DomainNotInRegistryContainer
76 |
--------------------------------------------------------------------------------
/src/components/single_domain/DomainPendingContainer.css:
--------------------------------------------------------------------------------
1 | .DomainPendingContainer {
2 | position: relative;
3 | height: 100%;
4 | }
5 |
6 |
7 | .DomainPendingContainer .header {
8 | display: inline-block;
9 | }
10 |
11 | :root:root:root .DomainPendingContainer .refresh {
12 | border: 1px solid #3434CE;
13 | border-radius: 3px;
14 | color: #3434CE !important;
15 | font-family: "Open Sans", sans-serif;
16 | font-size: 9.5px;
17 | font-weight: bold;
18 | line-height: 11px;
19 | text-transform: uppercase;
20 | box-shadow: unset;
21 | height: 33px;
22 | }
23 |
24 | :root:root:root .DomainPendingContainer .refresh:hover {
25 | background-color: #3434CE !important;
26 | color: #FFF !important;
27 | }
28 |
29 | .DomainPendingContainer .HeaderColumn {
30 | padding-bottom: 0px !important;
31 | }
32 |
33 | .DomainPendingContainer .HeaderRow {
34 | display: flex;
35 | flex-flow: row wrap;
36 | justify-content: space-between;
37 | }
38 |
39 | .DomainPendingContainer .DomainPendingBody {
40 | height: 100%;
41 | }
42 |
43 | .PendingMessage {
44 | padding-left: 20px;
45 | padding-right: 20px;
46 | }
47 |
--------------------------------------------------------------------------------
/src/components/single_domain/DomainPendingContainer.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import PropTypes from 'prop-types'
3 | import { Button } from 'semantic-ui-react'
4 | import Tooltip from '../Tooltip'
5 | import './DomainPendingContainer.css'
6 | import registry from '../../services/registry'
7 | // import toastr from 'toastr'
8 | import PubSub from 'pubsub-js'
9 |
10 | class DomainPendingContainer extends Component {
11 | constructor (props) {
12 | super()
13 |
14 | this.state = {
15 | domain: props.domain
16 | }
17 | }
18 |
19 | render () {
20 | const {
21 | domain
22 | } = this.state
23 |
24 | return (
25 |
26 |
27 |
28 |
29 |
30 | Stage: Pending
31 |
34 |
35 |
this.updateStatus(this.props.domainData.listingHash)}
39 | >
40 | Refresh Status
41 |
42 |
43 |
44 |
45 |
46 |
47 | Please click on the REFRESH STATUS button above to refresh the correct stage for {domain}
48 |
49 |
50 |
51 |
52 | )
53 | }
54 |
55 | async updateStatus (listingHash) {
56 | try {
57 | await registry.updateStatus(listingHash)
58 | // This re-renders the page so user doesn't need to manually refresh the page to see the new stage.
59 | await PubSub.publish('DomainProfile.fetchSiteData')
60 | } catch (error) {
61 | console.error(error)
62 | }
63 | }
64 | }
65 |
66 | DomainPendingContainer.propTypes = {
67 | domain: PropTypes.string
68 | }
69 |
70 | export default DomainPendingContainer
71 |
--------------------------------------------------------------------------------
/src/components/single_domain/DomainProfile.css:
--------------------------------------------------------------------------------
1 | .DomainProfile {
2 | width: 100%;
3 | }
4 |
5 | .DomainProfile > .grid > .row:first-child {
6 | padding-bottom: 0;
7 | }
8 |
9 | .DomainProfile > .grid > .row > .column:first-child,
10 | .DomainProfile > .grid > .row > .column:nth-child(2) {
11 | padding-right: 0;
12 | }
13 |
14 | .NeverAppliedContainer .HeaderRow {
15 | text-align: center;
16 | }
17 | .TabList{
18 | display: inline-flex;
19 | list-style-type: none;
20 | border-bottom: 2px solid #f4f7fa;
21 | width: 100%;
22 | padding: 10px;
23 | }
24 | .TabContainer{
25 | border-radius:5px;
26 | background: #fff;
27 | }
28 | .TabList li{
29 | padding:0 12px;
30 | color: #a5a5a5;
31 | font-size: 15px;
32 | text-transform: uppercase;
33 | }
34 | .TabList li:hover{
35 | cursor:pointer;
36 | }
37 | .DomainHistoryTableContainer{
38 | max-height: 534px;
39 | overflow: scroll;
40 | }
41 | .DomainHistoryTable td{
42 | padding: 9px 0;
43 | border-bottom: 2px solid #f4f7fa;
44 |
45 | }
46 | .ActiveTab{
47 | color: #3434ce;
48 | border-bottom: 2px solid #3434ce;
49 | padding-bottom: 13px;
50 | }
--------------------------------------------------------------------------------
/src/components/single_domain/DomainProfileActionContainer.css:
--------------------------------------------------------------------------------
1 | .DomainProfileActionContainer {
2 | height: 100%;
3 | }
4 |
5 | .DomainProfileActionContainer .ui.divider {
6 | width: 90%;
7 | margin-left: auto;
8 | margin-right: auto;
9 | }
10 |
11 | :root .DomainProfileActionContainer .form .input input {
12 | max-width: 220px;
13 | margin: 0 auto;
14 | text-align: center;
15 | }
16 |
17 | :root .DomainProfileActionContainer .VoteOptions {
18 | max-width: 220px;
19 | margin-left: auto;
20 | margin-right: auto;
21 | }
22 |
23 | :root .DomainProfileActionContainer .VoteOptions .field:first-child .checkbox {
24 | margin-right: 0.3em;
25 | }
26 |
27 | :root .DomainProfileActionContainer .VoteOptions .checkbox {
28 | border: 1px solid #ececec;
29 | padding: 0.3em;
30 | border-radius: 5px;
31 | }
32 |
33 | :root .DomainProfileActionContainer .Salt {
34 | max-width: 220px;
35 | margin-left: auto;
36 | margin-right: auto;
37 | box-shadow: none;
38 | border: none;
39 | letter-spacing: 0.1em;
40 | }
41 |
42 | .DomainProfileActionContainer .header .info {
43 | font-size: 0.8em;
44 | vertical-align: top;
45 | margin-left: 0.6em;
46 | }
47 |
48 | .OuterDomainProfileActionContainer {
49 | height: 100%;
50 | }
51 |
--------------------------------------------------------------------------------
/src/components/single_domain/DomainProfileComments.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdChain/AdChainRegistryDapp/c563897812fcfd38a58941e9fd1634fb47b8fa12/src/components/single_domain/DomainProfileComments.css
--------------------------------------------------------------------------------
/src/components/single_domain/DomainProfileComments.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PropTypes from 'prop-types'
3 | import Disqus from 'react-disqus-comments'
4 |
5 | import './DomainProfileComments.css'
6 |
7 | function DomainProfileComments (props) {
8 | const {domain} = props
9 |
10 | const comments = (
11 |
16 |
)
17 |
18 | return (comments)
19 | }
20 |
21 | DomainProfileComments.propTypes = {
22 | domain: PropTypes.string
23 | }
24 |
25 | export default DomainProfileComments
26 |
--------------------------------------------------------------------------------
/src/components/single_domain/DomainProfileHeader.css:
--------------------------------------------------------------------------------
1 | .DomainProfileHeader {
2 | display: flex;
3 | min-height: 151px;
4 | overflow: auto;
5 | max-height: 128px;
6 | }
7 |
8 | .DomainProfileHeader .image {
9 | width: 60px;
10 | height: 60px;
11 | background: #ddd;
12 | margin-right: 10px;
13 | }
14 |
15 | .DomainProfileHeader .Content {
16 | display: flex;
17 | flex-direction: column;
18 | justify-content: space-between;
19 | padding: 0.1em 0;
20 | font-family:"Open Sans", sans-serif;
21 | }
22 | .DomainProfileHeader .InfoIcon{
23 | margin-top: -1px;
24 | padding-left: 6px;
25 | }
26 | .DomainProfileHeader .Header {
27 | font-size: 1.4em;
28 | font-weight: bold;
29 | margin-bottom: 0.2em;
30 | }
31 |
32 | .DomainProfileHeader .Header img {
33 | margin-right: 0.2em;
34 | vertical-align: middle;
35 | }
36 |
37 | .DomainProfileHeader .Header a {
38 | color: #000;
39 | text-decoration: none;
40 | /* text-transform: uppercase; */
41 | white-space: nowrap;
42 | }
43 |
44 | .DomainProfileHeader .Header a i {
45 | vertical-align: top;
46 | margin-left: 0.2em;
47 | }
48 |
49 | .DomainProfileHeader .Header a:hover {
50 | text-decoration: underline;
51 | }
52 |
53 | .DomainProfileHeader .SubHeader {
54 | font-size: 0.9em;
55 | padding-bottom:23px;
56 | }
57 |
58 | .DomainProfileHeader .SubHeader .Name {
59 | display: block;
60 | margin-right: 10px;
61 | margin-bottom: 0.2em;
62 | font-weight: bold;
63 | white-space: nowrap;
64 | margin-left: 1.5em;
65 | }
66 |
67 | .DomainProfileHeader .SubHeader .Description {
68 | display: inline-block;
69 | margin-right: 10px;
70 | /* border-left: 5px solid #f4f7fa; */
71 | /* padding-left: 0.5em; */
72 | margin-left: 1.5em;
73 | max-height: 35px;
74 | overflow: scroll;
75 | }
76 |
77 | /* :root:root:root .DomainProfileHeader .SubHeader .Description ::-webkit-scrollbar {
78 | width: 5px;
79 | height: 5px;
80 | color: #000;
81 | } */
82 |
83 | .DomainProfileHeader .SubHeader .Country {
84 | display: block;
85 | }
86 |
--------------------------------------------------------------------------------
/src/components/single_domain/DomainProfileHeader.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PropTypes from 'prop-types'
3 | import Tooltip from '../Tooltip'
4 | import './DomainProfileHeader.css'
5 |
6 | function DomainProfileHeader (props) {
7 | const {
8 | domain,
9 | name,
10 | description,
11 | country
12 | } = props
13 |
14 | return (
15 |
16 |
17 |
31 |
32 |
33 | {name || (no title) }
34 |
37 |
38 |
39 | {description || (no description) }
40 |
43 |
44 | {country
45 | ?
46 | {country}
47 |
48 | : null}
49 |
50 |
51 |
52 | )
53 | }
54 |
55 | DomainProfileHeader.propTypes = {
56 | domain: PropTypes.string,
57 | name: PropTypes.string,
58 | country: PropTypes.string
59 | // image: PropTypes.string
60 | }
61 |
62 | export default DomainProfileHeader
63 |
--------------------------------------------------------------------------------
/src/components/single_domain/DomainRejectedContainer.css:
--------------------------------------------------------------------------------
1 | .DomainRejectedContainer {
2 | position: relative;
3 | height: 100%;
4 | }
5 |
6 |
7 | .DomainRejectedContainer .header {
8 | display: inline-block;
9 | }
10 |
11 | :root:root:root .DomainRejectedContainer .refresh {
12 | float: right;
13 | border: 1px solid #3434CE;
14 | border-radius: 3px;
15 | color: #3434CE !important;
16 | font-family: "Open Sans", sans-serif;
17 | font-size: 9.5px;
18 | font-weight: bold;
19 | line-height: 11px;
20 | text-transform: uppercase;
21 | box-shadow: unset;
22 | }
23 |
24 | .DomainRejectedContainer .HeaderColumn {
25 | padding-bottom: 0px !important;
26 | }
27 |
28 | .DomainRejectedContainer .HeaderRow {
29 | padding-top: 10px;
30 | }
31 |
32 | .DomainRejectedContainer .DomainRejectedBody {
33 | height: 100%;
34 | }
35 |
36 | .RejectedMessage {
37 | padding-left: 20px;
38 | padding-right: 20px;
39 | }
40 |
41 | .RejectedMessage .DomainName {
42 | display: block;
43 | max-width: 200px;
44 | text-overflow: ellipsis;
45 | overflow: hidden;
46 | white-space: nowrap;
47 | padding-right: 0px;
48 | margin: 0 auto;
49 | }
--------------------------------------------------------------------------------
/src/components/single_domain/DomainRejectedContainer.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import PropTypes from 'prop-types'
3 | import Tooltip from '../Tooltip'
4 | import './DomainRejectedContainer.css'
5 | // import registry from '../../services/registry'
6 | // import toastr from 'toastr'
7 |
8 | class DomainRejectedContainer extends Component {
9 | constructor (props) {
10 | super()
11 |
12 | this.state = {
13 | domain: props.domain,
14 | stage: props.stage
15 | }
16 | }
17 |
18 | render () {
19 | const {
20 | domain
21 | } = this.state
22 |
23 | return (
24 |
25 |
26 |
27 |
28 |
29 | Stage: {this.props.stage}
30 |
33 |
34 |
35 |
36 |
37 |
38 |
39 | You can apply {domain} into the
40 | adChain Registry within the application modal
41 | on the left navigation column.
42 |
43 |
44 |
45 |
46 | )
47 | }
48 | }
49 |
50 | DomainRejectedContainer.propTypes = {
51 | domain: PropTypes.string
52 | }
53 |
54 | export default DomainRejectedContainer
55 |
--------------------------------------------------------------------------------
/src/components/single_domain/DomainScamReport.css:
--------------------------------------------------------------------------------
1 | .DomainScamReport {
2 | position: relative;
3 | }
4 |
5 | .DomainScamReport .unknown,
6 | .DomainScamReport .unknown a {
7 | color: #333;
8 | }
9 |
10 | .DomainScamReport .safe,
11 | .DomainScamReport .safe a {
12 | color: green;
13 | }
14 |
15 | .DomainScamReport .unsafe,
16 | .DomainScamReport .unsafe a {
17 | color: red;
18 | }
19 |
20 | .DomainScamReport .warning:not(.icon),
21 | .DomainScamReport .warning a {
22 | color: orange;
23 | }
24 |
25 | .DomainScamReportList {
26 | }
27 |
28 | .DomainScamReportListItem {
29 | width: 100%;
30 | margin-bottom: 0.5em;
31 | }
32 |
33 | .DomainScamReportListItem label {
34 | display: block;
35 | font-size: 0.8em;
36 | }
37 |
38 | .DomainScamReportListItem span {
39 | display: block;
40 | }
41 |
42 | .DomainScamReportListItem span a:hover {
43 | text-decoration: underline;
44 | }
45 |
46 | .DomainScamReportListItem span a i {
47 | vertical-align: top;
48 | }
49 |
50 | .DomainScamReportList .ListSubSection {
51 | border-left: 5px solid #f4f7fa;
52 | padding-left: 0.5em;
53 | }
54 |
55 | :root:root:root .DomainScamReport .Source {
56 | position: absolute;
57 | bottom: 0;
58 | right: 0;
59 | font-size: 0.7em;
60 | color: #999;
61 | }
62 |
63 | :root:root:root .DomainScamReport .Source a {
64 | color: #999;
65 | }
66 |
67 | :root:root:root .DomainScamReport .Source a:hover {
68 | text-decoration: underline;
69 | }
70 |
--------------------------------------------------------------------------------
/src/components/single_domain/DomainStatsbar.css:
--------------------------------------------------------------------------------
1 | :root:root:root .DomainStatsbar {
2 | position: relative;
3 | min-height: 105px;
4 | font-size: 16px;
5 | font-family: "Open Sans", sans-serif;
6 | margin-top: 40px;
7 | }
8 |
9 | :root:root:root .DomainStatsbar .row {
10 | margin: 0;
11 | padding:0;
12 | height: 100px
13 | }
14 |
15 | :root:root:root .DomainStatsbar .input {
16 | width: 80px;
17 | }
18 |
19 | :root:root:root .DomainStatsbar .column {
20 | position: relative;
21 | }
22 |
23 | :root:root:root .DomainStatsbar .row:nth-child(2) .column:first-child:after {
24 | content: '';
25 | display: block;
26 | position: absolute;
27 | top: 0;
28 | right: 1em;
29 | height: 100%;
30 | width: 1px;
31 | /*border-right: 1px solid #ddd;*/
32 | }
33 |
34 | :root:root:root .DomainStatsbar .Header {
35 | text-transform: uppercase;
36 | color: #909090;
37 | font-size: 12px;
38 | font-weight: 600;
39 | line-height: 14px;
40 | min-height: 13px;
41 | font-family: 'Open Sans',sans-serif;
42 | }
43 |
44 |
45 | :root:root:root .DomainStatsbar .Category ::-webkit-scrollbar {
46 | width: 137px;
47 | height: 3px;
48 | color: #F4F7FA;
49 | }
50 |
51 |
52 | :root:root:root .DomainStatsbar .Source {
53 | position: absolute;
54 | bottom: 0;
55 | right: 0;
56 | font-size: 0.7em;
57 | color: #999;
58 | }
59 |
60 | :root:root:root .DomainStatsbar .Source a {
61 | color: #999;
62 | }
63 |
64 | :root:root:root .DomainStatsbar .Source a:hover {
65 | text-decoration: underline;
66 | }
67 |
68 | @media only screen and (max-width: 767px) {
69 | :root:root:root .DomainStatsbar .row:nth-child(2) .column:first-child:after {
70 | border-right: none;
71 | }
72 | }
73 | :root:root:root .DomainStatsbar .Category strong{
74 | font-size: 12px;
75 | }
76 |
77 | :root:root:root .DomainStatsbar strong {
78 | font-weight: bolder;
79 | font-size: 14px;
80 | text-align: center;
81 | display: block;
82 | }
83 |
84 | :root:root:root .DomainStatsbar h4 {
85 | text-align: center;
86 | padding-top:23px;
87 | }
88 | :root:root:root .column.eight.wide:nth-child(even) {
89 | border-left:2px solid #f4f7fa;
90 | }
91 | :root:root:root .column.eight.wide {
92 | border-bottom:2px solid #f4f7fa;
93 | }
94 | :root:root:root .column.eight.wide:nth-child(5) {
95 | border-bottom:none;
96 | }
--------------------------------------------------------------------------------
/src/components/single_domain/DomainVoteTokenDistribution.css:
--------------------------------------------------------------------------------
1 | :root:root:root .DomainVoteTokenDistribution .ProgressContainer .divider {
2 | padding-bottom: 1rem;
3 | }
4 |
5 | :root:root:root .DomainVoteTokenDistribution .ProgressContainer p {
6 | color: #424242;
7 | font-family: "Open Sans", sans-serif;
8 | font-size: 10px;
9 | line-height: 20px;
10 | text-align: center;
11 | }
12 |
13 | .DomainVoteTokenDistribution .BarContainer {
14 | max-width: 300px;
15 | margin: 0 auto;
16 | }
17 |
18 | .DomainVoteTokenDistribution .Breakdown {
19 | display: flex;
20 | max-width: 250px;
21 | margin: 0 auto;
22 | padding-top: 0.6em;
23 | }
24 |
25 | .DomainVoteTokenDistribution .BreakdownItem {
26 | display: inline-flex;
27 | width: 50%;
28 | justify-content: center;
29 | align-items: center;
30 | position: relative;
31 | }
32 |
33 | .DomainVoteTokenDistribution .BreakdownItem:nth-child(2):after {
34 | content: '';
35 | display: block;
36 | position: absolute;
37 | left: -1px;
38 | top: 0;
39 | width: 1px;
40 | height: 100%;
41 | background: #ddd;
42 | }
43 |
44 | .DomainVoteTokenDistribution .BreakdownItemBox {
45 | display: inline-block;
46 | width: 10px;
47 | height: 10px;
48 | background: #10C903;
49 | margin-right: 0.5em;
50 | }
51 |
52 | .DomainVoteTokenDistribution .BreakdownItem:nth-child(2) .BreakdownItemBox {
53 | background: #CE3434;
54 | }
55 |
56 | .DomainVoteTokenDistribution .BreakdownItemLabel {
57 | color: #10C903;
58 | font-size: 10px;
59 | font-weight: bold;
60 | font-family: 'Open Sans', sans-serif;
61 | line-height: 8px;
62 | }
63 |
64 | .DomainVoteTokenDistribution .BreakdownItem:nth-child(2) .BreakdownItemLabel {
65 | color: #CE3434;
66 | }
67 |
--------------------------------------------------------------------------------
/src/components/single_domain/DomainVoteTokenDistribution.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import PropTypes from 'prop-types'
3 | import commafy from 'commafy'
4 | import toastr from 'toastr'
5 |
6 | import registry from '../../services/registry'
7 | import StatProgressBar from '../StatProgressBar'
8 | import PubSub from 'pubsub-js'
9 |
10 | import './DomainVoteTokenDistribution.css'
11 |
12 | class DomainVoteTokenDistribution extends Component {
13 | constructor (props) {
14 | super()
15 |
16 | this.state = {
17 | domain: props.domain,
18 | votesFor: 0,
19 | votesAgainst: 0
20 | }
21 | this.getPoll = this.getPoll.bind(this)
22 | }
23 |
24 | componentDidMount () {
25 | this._isMounted = true
26 | this.subEvent = PubSub.subscribe('DomainVoteTokenDistribution.getPoll', this.getPoll)
27 | if (this.props.domainData) {
28 | this.getPoll()
29 | }
30 | }
31 |
32 | componentWillUnmount () {
33 | this._isMounted = false
34 | PubSub.unsubscribe(this.subEvent)
35 | }
36 |
37 | async getPoll () {
38 | let listingHash
39 |
40 | if (this.props.domainData) {
41 | listingHash = this.props.domainData.listingHash
42 | }
43 |
44 | try {
45 | const {
46 | votesFor,
47 | votesAgainst
48 | } = await registry.getChallengePoll(listingHash)
49 |
50 | if (this._isMounted) {
51 | this.setState({
52 | votesFor,
53 | votesAgainst,
54 | listingHash
55 | })
56 | }
57 | } catch (error) {
58 | console.log(error)
59 | toastr.error('There was an error getting poll ')
60 | }
61 | }
62 |
63 | render () {
64 | const {
65 | votesFor,
66 | votesAgainst
67 | } = this.state
68 |
69 | // "N | 0" coerces to int or to 0 if NaN
70 | const totalVotes = ((votesFor + votesAgainst) | 0)
71 | const supportFill = Math.round((votesFor / totalVotes) * 100) | 0
72 | const opposeFill = Math.round((votesAgainst / totalVotes) * 100) | 0
73 |
74 | return (
75 |
76 |
77 |
78 | ADT holders have revealed their vote to show:
79 |
80 |
81 |
87 |
88 |
89 |
90 |
91 |
= {commafy(votesFor)} Votes
92 |
93 |
94 |
95 |
= {commafy(votesAgainst)} Votes
96 |
97 |
98 |
99 |
100 | )
101 | }
102 | }
103 |
104 | DomainVoteTokenDistribution.propTypes = {
105 | domain: PropTypes.string
106 | }
107 |
108 | export default DomainVoteTokenDistribution
109 |
--------------------------------------------------------------------------------
/src/components/single_domain/IndividualGuideModal.css:
--------------------------------------------------------------------------------
1 | :root:root:root .IndividualGuideModal .ContinueButton {
2 | border: 1px solid #3434CE !important;
3 | color: #3434CE !important;
4 | }
5 |
6 | :root:root:root .IndividualGuideModal .ContinueButton:hover {
7 | border: 1px solid #3434CE !important;
8 | color: #FFF !important;
9 | background-color: #3434CE !important;
10 | }
11 |
12 | .IndividualGuideModal .ButtonContainer {
13 | display: flex;
14 | justify-content: center;
15 | margin-top: 10px;
16 | }
17 |
18 | .IndividualGuideModal .GuideText {
19 | display: flex;
20 | flex-direction: row;
21 | flex-wrap: wrap;
22 | justify-content: space-between;
23 | }
--------------------------------------------------------------------------------
/src/config/index.js:
--------------------------------------------------------------------------------
1 | import contract from 'truffle-contract'
2 | import { getProvider } from '../services/provider'
3 | import { contractsURL } from '../models/urls'
4 |
5 | export const getAbi = async (contract) => {
6 | const storageKey = `adchain:abi:${contract}`
7 | const cached = window.sessionStorage.getItem(storageKey)
8 |
9 | try {
10 | if (cached) {
11 | return JSON.parse(cached)
12 | }
13 | } catch (error) {
14 | console.error(error)
15 | }
16 |
17 | const data = await window.fetch(`${contractsURL}${contract}.json`)
18 | const json = await data.json()
19 |
20 | try {
21 | window.sessionStorage.setItem(storageKey, JSON.stringify(json))
22 | } catch (error) {
23 | console.error(error)
24 | }
25 |
26 | return json
27 | }
28 |
29 | export const getRegistry = async (account, provider) => {
30 | const registryArtifact = await getAbi('Registry')
31 | const Registry = contract(registryArtifact)
32 | Registry.defaults({from: account})
33 | Registry.setProvider(provider || getProvider())
34 |
35 | return Registry.deployed()
36 | }
37 |
38 | export const getToken = async (account) => {
39 | const registry = await getRegistry()
40 | const tokenAddress = await registry.token.call()
41 | const tokenArtifact = await getAbi('HumanStandardToken')
42 | const Token = contract(tokenArtifact)
43 | Token.defaults({from: account})
44 | Token.setProvider(getProvider())
45 |
46 | return Token.at(tokenAddress)
47 | }
48 |
49 | export const getPLCR = async (account) => {
50 | const registry = await getRegistry()
51 | const plcrAddress = await registry.voting.call()
52 | const plcrArtifact = await getAbi('PLCRVoting')
53 | const PLCRVoting = contract(plcrArtifact)
54 | PLCRVoting.defaults({from: account})
55 | PLCRVoting.setProvider(getProvider())
56 |
57 | return PLCRVoting.at(plcrAddress)
58 | }
59 |
60 | export const getParameterizer = async (account) => {
61 | const registry = await getRegistry()
62 | const pAddress = await registry.parameterizer.call()
63 | const pArtifact = await getAbi('Parameterizer')
64 | const Parameterizer = contract(pArtifact)
65 | Parameterizer.defaults({from: account})
66 | Parameterizer.setProvider(getProvider())
67 |
68 | return Parameterizer.at(pAddress)
69 | }
70 |
71 | // sendTransaction
72 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDOM from 'react-dom'
3 | import registerServiceWorker from './registerServiceWorker'
4 | import App from './App'
5 | import registry from './services/registry'
6 | import plcr from './services/plcr'
7 | import DocumentLoadingComponent from './components/DocumentLoadingComponent'
8 | import parameterizer from './services/parameterizer'
9 | import token from './services/token'
10 | import store from 'store'
11 | import isMobile from 'is-mobile'
12 | import { getPermissions } from './services/provider'
13 |
14 | import './index.css'
15 | require('dotenv').config()
16 |
17 | async function init() {
18 |
19 | let hasAcceptedMobile
20 | try {
21 | hasAcceptedMobile = store.get('hasAcceptedMobile')
22 | } catch (error) {
23 | console.log(error)
24 | }
25 | if (isMobile() && !hasAcceptedMobile && !window.web3) {
26 | ReactDOM.render( , document.getElementById('root'))
27 | return
28 | }
29 |
30 | try {
31 | await Promise.all([
32 | getPermissions(),
33 | registry.init(),
34 | plcr.init(),
35 | parameterizer.init(),
36 | token.init()
37 | ])
38 |
39 | } catch (error) {
40 | console.error(error)
41 | }
42 | ReactDOM.render( , document.getElementById('root'))
43 | registerServiceWorker()
44 | // unregister()
45 | }
46 |
47 | document.addEventListener('DOMContentLoaded', () => {
48 | if (window.web3) {
49 | init()
50 | } else {
51 | // wait for metamask web3 to be injected
52 | setTimeout(() => {
53 | init()
54 | }, 1e3)
55 | }
56 | }, false
57 | )
58 |
--------------------------------------------------------------------------------
/src/models/mobileNav.js:
--------------------------------------------------------------------------------
1 | import PubSub from 'pubsub-js'
2 | import { renderAirSwap } from '../utils/renderAirSwap'
3 | import governanceIcon from '../components/assets/governance_icon.svg'
4 | import applyIcon from '../components/assets/apply_icon.svg'
5 | import domainsIcon from '../components/assets/domains_icon.svg'
6 | import adtokenIcon from '../components/assets/adtoken_icon.svg'
7 |
8 | export const mobileNavData = [
9 | {
10 | name: 'DOMAINS',
11 | img: domainsIcon,
12 | alt: 'www',
13 | link: '/domains',
14 | type: 'Link'
15 | },
16 | {
17 | name: 'APPLY',
18 | img: applyIcon,
19 | alt: 'apply',
20 | action: () => {
21 | PubSub.publish('MobileApplication.show')
22 | PubSub.publish('DomainsFilterPanel.toggle')
23 | setTimeout(() => {
24 | window.scrollTo(0, -1)
25 | }, 200)
26 | },
27 | type: 'div'
28 | },
29 | {
30 | name: 'ADTOKEN',
31 | img: adtokenIcon,
32 | alt: 'adtoken',
33 | link: '/domains',
34 | action: () => { renderAirSwap() },
35 | type: 'div'
36 | },
37 | {
38 | name: 'GOVERNANCE',
39 | img: governanceIcon,
40 | alt: 'governance',
41 | link: '/governance',
42 | type: 'Link'
43 | }
44 | ]
45 |
--------------------------------------------------------------------------------
/src/models/network.js:
--------------------------------------------------------------------------------
1 | export const network = process.env.REACT_APP_NETWORK
2 |
3 | export const organization = process.env.REACT_APP_ORGANIZATION
4 |
5 | export const governxUrl = process.env.REACT_APP_GOVERNX_URL
6 |
7 | export const websocketNetwork = process.env.REACT_APP_WEBSOCKET_NETWORK
8 |
--------------------------------------------------------------------------------
/src/models/urls.js:
--------------------------------------------------------------------------------
1 | export const utilityApiURL = process.env.REACT_APP_UTILITY_API_URL
2 | // export const utilityApiURL = 'http://localhost:8000'
3 |
4 | export const registryApiURL = process.env.REACT_APP_REGISTRY_API_URL
5 |
6 | export const contractsURL = process.env.REACT_APP_CONTRACTS_URL
7 |
--------------------------------------------------------------------------------
/src/polyfills/dotenv/main.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var fs = require("fs"),
3 | path = require("path");function parse(a) {
4 | var d = {};return a.toString().split("\n").forEach(function (a) {
5 | var e = a.match(/^\s*([\w\.\-]+)\s*=\s*(.*)?\s*$/);if (null != e) {
6 | var f = e[1];var b = e[2] || "";var _a = b ? b.length : 0;0 < _a && "\"" === b.charAt(0) && "\"" === b.charAt(_a - 1) && (b = b.replace(/\\n/gm, "\n")), b = b.replace(/(^['"]|['"]$)/g, "").trim(), d[f] = b;
7 | }
8 | }), d;
9 | }function config(a) {
10 | var d = path.resolve(process.cwd(), ".env"),
11 | e = "utf8";a && (a.path && (d = a.path), a.encoding && (e = a.encoding));try {
12 | var b = parse(fs.readFileSync(d, { encoding: e }));return Object.keys(b).forEach(function (c) {
13 | process.env.hasOwnProperty(c) || (process.env[c] = b[c]);
14 | }), { parsed: b };
15 | } catch (a) {
16 | return { error: a };
17 | }
18 | }module.exports.config = config, module.exports.load = config, module.exports.parse = parse;
--------------------------------------------------------------------------------
/src/polyfills/pify/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var processFn = function processFn(fn, opts) {
4 | return function () {
5 | var _this = this;
6 |
7 | var P = opts.promiseModule;
8 | var args = new Array(arguments.length);
9 |
10 | for (var i = 0; i < arguments.length; i++) {
11 | args[i] = arguments[i];
12 | }
13 |
14 | return new P(function (resolve, reject) {
15 | if (opts.errorFirst) {
16 | args.push(function (err, result) {
17 | if (opts.multiArgs) {
18 | var results = new Array(arguments.length - 1);
19 |
20 | for (var _i = 1; _i < arguments.length; _i++) {
21 | results[_i - 1] = arguments[_i];
22 | }
23 |
24 | if (err) {
25 | results.unshift(err);
26 | reject(results);
27 | } else {
28 | resolve(results);
29 | }
30 | } else if (err) {
31 | reject(err);
32 | } else {
33 | resolve(result);
34 | }
35 | });
36 | } else {
37 | args.push(function (result) {
38 | if (opts.multiArgs) {
39 | var results = new Array(arguments.length - 1);
40 |
41 | for (var _i2 = 0; _i2 < arguments.length; _i2++) {
42 | results[_i2] = arguments[_i2];
43 | }
44 |
45 | resolve(results);
46 | } else {
47 | resolve(result);
48 | }
49 | });
50 | }
51 |
52 | fn.apply(_this, args);
53 | });
54 | };
55 | };
56 |
57 | module.exports = function (obj, opts) {
58 | opts = Object.assign({
59 | exclude: [/.+(Sync|Stream)$/],
60 | errorFirst: true,
61 | promiseModule: Promise
62 | }, opts);
63 |
64 | var filter = function filter(key) {
65 | var match = function match(pattern) {
66 | return typeof pattern === 'string' ? key === pattern : pattern.test(key);
67 | };
68 | return opts.include ? opts.include.some(match) : !opts.exclude.some(match);
69 | };
70 |
71 | var ret = void 0;
72 | if (typeof obj === 'function') {
73 | ret = function ret() {
74 | if (opts.excludeMain) {
75 | return obj.apply(this, arguments);
76 | }
77 |
78 | return processFn(obj, opts).apply(this, arguments);
79 | };
80 | } else {
81 | ret = Object.create(Object.getPrototypeOf(obj));
82 | }
83 |
84 | for (var key in obj) {
85 | // eslint-disable-line guard-for-in
86 | var x = obj[key];
87 | ret[key] = typeof x === 'function' && filter(key) ? processFn(x, opts) : x;
88 | }
89 |
90 | return ret;
91 | };
--------------------------------------------------------------------------------
/src/services/ipfs.js:
--------------------------------------------------------------------------------
1 | import IPFS from 'ipfs-mini'
2 | import isString from 'lodash/fp/isString'
3 |
4 | const ipfs = new IPFS({ host: 'ipfs.infura.io', port: 5001, protocol: 'https' })
5 |
6 | export async function ipfsGetData (multihash) {
7 | if (!isString(multihash)) {
8 | return new Error('multihash must be String')
9 | } else if (!multihash.startsWith('Qm')) {
10 | return new Error('multihash must start with "Qm"')
11 | }
12 |
13 | return new Promise((resolve, reject) => {
14 | ipfs.catJSON(multihash, (err, result) => {
15 | if (err) reject(new Error(err))
16 | resolve(result)
17 | })
18 | })
19 | }
20 |
21 | export async function ipfsAddObject (obj) {
22 | const CID = await new Promise((resolve, reject) => {
23 | ipfs.addJSON(obj, (err, result) => {
24 | if (err) reject(new Error(err))
25 | resolve(result)
26 | })
27 | })
28 | console.log('CID:', CID)
29 | return CID
30 | }
31 |
--------------------------------------------------------------------------------
/src/services/priceStats.js:
--------------------------------------------------------------------------------
1 | function url (ticker) {
2 | return `https://api.coinmarketcap.com/v1/ticker/${ticker}/?convert=USD`
3 | }
4 |
5 | async function priceStats () {
6 | const result = await Promise.all([
7 | window.fetch(url('ethereum')),
8 | window.fetch(url('adtoken'))
9 | ])
10 |
11 | const result1 = await result[0].json()
12 | const result2 = await result[1].json()
13 |
14 | const ethUsd = parseFloat(result1[0].price_usd, 10)
15 | const adtUsd = parseFloat(result2[0].price_usd, 10)
16 |
17 | return Promise.resolve({ethUsd, adtUsd})
18 | }
19 |
20 | export default priceStats
21 |
--------------------------------------------------------------------------------
/src/services/provider.js:
--------------------------------------------------------------------------------
1 | import Eth from 'ethjs'
2 | import { network, websocketNetwork } from '../models/network'
3 |
4 | export const getProviderUrl = () => {
5 | if (network === 'testrpc') {
6 | return 'http://localhost:8545'
7 | } else {
8 | return `https://${websocketNetwork}.infura.io:443`
9 | }
10 | }
11 |
12 | export const getPermissions = async () => {
13 | if (window.ethereum) {
14 | window.web3 = new window.Web3(window.ethereum)
15 | try {
16 | await window.ethereum.enable()
17 | } catch (error) {
18 | console.log('User denied account access...')
19 | }
20 | }
21 | }
22 |
23 | export const getProvider = () => {
24 | if (typeof window.web3 !== 'undefined' && typeof window.web3.currentProvider !== 'undefined') {
25 | return window.web3.currentProvider
26 | } else {
27 | return new Eth.HttpProvider(getProviderUrl())
28 | }
29 | }
30 |
31 | export const getWebsocketProvider = () => {
32 | // https://github.com/ethereum/web3.js/issues/1119
33 | if (!window.Web3.providers.WebsocketProvider.prototype.sendAsync) {
34 | window.Web3.providers.WebsocketProvider.prototype.sendAsync = window.Web3.providers.WebsocketProvider.prototype.send
35 | }
36 | return new window.Web3.providers.WebsocketProvider(`wss://${websocketNetwork}.infura.io/_ws`)
37 | }
38 |
--------------------------------------------------------------------------------
/src/services/redditActions.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios'
2 | import { soliditySHA3 } from 'ethereumjs-abi'
3 | import { utilityApiURL } from '../models/urls'
4 |
5 | // const url = 'https://utility.adchain.com/'
6 | // second server = https://utility2.adchain.com/
7 |
8 | export async function getPosts (domain) {
9 | let res
10 | try {
11 | res = await axios.post(`${utilityApiURL}/get/post`, {
12 | domain: domain.toLowerCase()
13 | })
14 | return res
15 | } catch (error) {
16 | console.error(error)
17 | }
18 | }
19 |
20 | export async function createPostApplication (domain, reason) {
21 | let res
22 | try {
23 | res = await axios.post(`${utilityApiURL}/create/post/application`, {
24 | domain: domain.toLowerCase(),
25 | reason: reason
26 | })
27 | return res
28 | } catch (error) {
29 | console.error(error)
30 | }
31 | }
32 |
33 | export async function createPostChallenge (domain, reason) {
34 | let res
35 | try {
36 | res = await axios.post(`${utilityApiURL}/create/post/challenge`, {
37 | domain: domain.toLowerCase(),
38 | reason: reason
39 | })
40 | return res
41 | } catch (error) {
42 | console.error(error)
43 | }
44 | }
45 |
46 | export async function createComment (id, comment, address) {
47 | let res
48 | let userHash = `0x${soliditySHA3(['string'], [address]).toString('hex')}`
49 | let user = address === 'anonymous' ? address : userHash.substr(2, 7)
50 |
51 | try {
52 | res = await axios.post(`${utilityApiURL}/create/comment`, {
53 | id: id,
54 | comment: comment,
55 | address: user
56 | })
57 | return res
58 | } catch (error) {
59 | console.error(error)
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/src/store.js:
--------------------------------------------------------------------------------
1 | import { createStore } from 'redux'
2 |
3 | /**
4 | * This is a reducer, a pure function with (state, action) => state signature.
5 | * It describes how an action transforms the state into the next state.
6 | *
7 | * The shape of the state is up to you: it can be a primitive, an array, an object,
8 | * or even an Immutable.js data structure. The only important part is that you should
9 | * not mutate the state object, but return a new object if the state changes.
10 | *
11 | * In this example, we use a `switch` statement and strings, but you can use a helper that
12 | * follows a different convention (such as function maps) if it makes sense for your
13 | * project.
14 | */
15 | function reducer (state = -1, action) {
16 | switch (action.type) {
17 | case 'WEB3_RECEIVE_ACCOUNT':
18 | case 'WEB3_FETCH_ACCOUNT_ERROR':
19 | case 'WEB3_CHANGE_ACCOUNT':
20 | case 'WEB3_CHANGE_NETWORK':
21 | case 'WEB3_FETCH_NETWORK_ERROR':
22 | case 'TOKEN_CONTRACT_INIT':
23 | case 'TOKEN_EVENT':
24 | case 'TOKEN_APPROVE':
25 | case 'REGISTRY_CONTRACT_INIT':
26 | case 'REGISTRY_DOMAIN_APPLY':
27 | case 'REGISTRY_DOMAIN_CHALLENGE':
28 | case 'REGISTRY_DOMAIN_VOTE_COMMIT':
29 | case 'REGISTRY_DOMAIN_VOTE_REVEAL':
30 | case 'REGISTRY_DOMAIN_UPDATE_STATUS':
31 | case 'REGISTRY_CLAIM_REWARD':
32 | case 'REGISTRY_EVENT':
33 | case 'PLCR_CONTRACT_INIT':
34 | case 'PLCR_VOTE_COMMIT':
35 | case 'PLCR_VOTE_REVEAL':
36 | case 'PLCR_EVENT':
37 | case 'PLCR_REQUEST_VOTING_RIGHTS':
38 | case 'PLCR_WITHDRAW_VOTING_RIGHTS':
39 | case 'PARAMETERIZER_CONTRACT_INIT':
40 | case 'PARAMETERIZER_EVENT':
41 | case 'FETCH_WITHDRAWN':
42 | return state + 1
43 | default:
44 | return state
45 | }
46 | }
47 |
48 | // Create a Redux store holding the state of your app.
49 | // Its API is { subscribe, dispatch, getState }.
50 | let store = createStore(reducer)
51 |
52 | // You can use subscribe() to update the UI in response to state changes.
53 | // Normally you'd use a view binding library (e.g. React Redux) rather than subscribe() directly.
54 | // However it can also be handy to persist the current state in the localStorage.
55 |
56 |
57 | // store.subscribe(() =>
58 | // console.log(store.getState())
59 | // )
60 |
61 |
62 | export default store
63 |
--------------------------------------------------------------------------------
/src/utils/calculateGas.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios'
2 |
3 | import { utilityApiURL } from '../models/urls'
4 |
5 | import token from '../services/token'
6 | import moment from 'moment'
7 | import registry from '../services/registry'
8 | import priceStats from '../services/priceStats'
9 |
10 | const calculateGas = async (x) => {
11 | const web3 = window.web3
12 | const account = registry.getAccount()
13 |
14 | if (web3 && account) {
15 | var network = await registry.getNetwork()
16 | var adtBalance = await token.getBalance()
17 | var ethBalance = await registry.getEthBalance()
18 | var minDeposit = await registry.getMinDeposit()
19 | }
20 |
21 | const {ethUsd, adtUsd} = await priceStats()
22 |
23 | let data = {
24 | 'action': x.action || 'null',
25 | 'address': account || 'null',
26 | 'web3': !!web3,
27 | 'adt_balance': (adtBalance | 0) || 0,
28 | 'contract': x.contract || 'null',
29 | 'contract_event': x.contract_event,
30 | 'parameter': x.parameter || 'null',
31 | 'proposal_value': x.proposal_value || 0,
32 | 'min_deposit': minDeposit || 0,
33 | 'domain': x.domain || 'null',
34 | 'eth_balance': ethBalance || 0,
35 | 'event_success': x.event_success,
36 | 'timestamp': Date.now(),
37 | 'event': x.event || 'null',
38 | 'timezone': moment.tz(moment.tz.guess()).zoneAbbr(),
39 | 'value_staked': x.value_staked || 0,
40 | 'eth_price': ethUsd || 0,
41 | 'adt_price': adtUsd || 0,
42 | 'network': network ? network.type : 'null'
43 | }
44 |
45 | try {
46 | let res = await axios.post(`${utilityApiURL}/calculate/gas`, data)
47 | return res
48 | } catch (error) {
49 | console.log('catch: calculating gas')
50 | }
51 | }
52 |
53 | export default calculateGas
54 |
--------------------------------------------------------------------------------
/src/utils/detectNetwork.js:
--------------------------------------------------------------------------------
1 |
2 | const networksTypes = {
3 | 1: 'main',
4 | 2: 'morden',
5 | 3: 'ropsten',
6 | 42: 'kovan',
7 | 4: 'rinkeby'
8 | }
9 |
10 | export const detectNetwork = (provider) => {
11 | var type = null
12 | var netId
13 | try {
14 | return new Promise(async (resolve, reject) => {
15 | if (!window.web3) {
16 | console.log('No MetaMask/web3')
17 | return null
18 | }
19 | window.web3.version.getNetwork((err, _netId) => {
20 | if (_netId === undefined) {
21 | netId = null
22 | }
23 | if (err) {
24 | console.log(err)
25 | return null
26 | }
27 |
28 | netId = _netId
29 | type = networksTypes[netId] || 'unknown'
30 |
31 | resolve({
32 | id: netId,
33 | type: type
34 | })
35 | })
36 | })
37 | } catch (error) {
38 | console.log(error)
39 | return {
40 | id: netId || 'unknown',
41 | type: ''
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/utils/getDomainHistory.js:
--------------------------------------------------------------------------------
1 | import {registryApiURL} from '../models/urls'
2 | /*
3 | * Get Domain's History Request
4 | * Param: listing hash of domain
5 | * Return domain's history data
6 | */
7 | export const getDomainHistory = async (listingHash) => {
8 | let res
9 | try {
10 | res = await (await window.fetch(`${registryApiURL}/registry/domain/history?listing_hash=${listingHash}`)).json()
11 | return res.history
12 | } catch (error) {
13 | res = []
14 | console.log(error)
15 | }
16 | return res
17 | }
18 |
--------------------------------------------------------------------------------
/src/utils/getTxReceiptMined.js:
--------------------------------------------------------------------------------
1 | /**
2 | * This function was created because web3.eth.sendTransaction returns the hash immediately, which results in the dApp transactions not completing correctly.
3 | * This waits for the transaction to be mined successfully
4 | */
5 |
6 | export const getTxReceiptMined = (web3, txHash, options) => {
7 | let interval = options && options.interval ? options.interval : 500
8 | const transactionReceiptAsync = function (resolve, reject) {
9 | web3.eth.getTransactionReceipt(txHash, (error, receipt) => {
10 | if (error) {
11 | reject(error)
12 | } else if (receipt == null) {
13 | setTimeout(
14 | () => transactionReceiptAsync(resolve, reject),
15 | interval)
16 | } else {
17 | resolve(receipt)
18 | }
19 | })
20 | }
21 |
22 | if (Array.isArray(txHash)) {
23 | return Promise.all(txHash.map(
24 | oneTxHash => getTxReceiptMined(web3, oneTxHash, interval)))
25 | } else if (typeof txHash === 'string') {
26 | return new Promise(transactionReceiptAsync)
27 | } else {
28 | throw new Error('Invalid Type: ' + txHash)
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/utils/isExpired.js:
--------------------------------------------------------------------------------
1 | import moment from 'moment'
2 |
3 | export const isExpired = (end) => {
4 | if (end === null) {
5 | console.log('No time supplied to isExpired function')
6 | return true
7 | }
8 | const now = moment().unix()
9 | if (!end) return false
10 | return end < now
11 | }
12 |
--------------------------------------------------------------------------------
/src/utils/normalizeQueryObj.js:
--------------------------------------------------------------------------------
1 | function string2Bool (obj) {
2 | if (typeof obj !== 'object') {
3 | return {}
4 | }
5 |
6 | for (let k in obj) {
7 | if (obj[k] === true ||
8 | obj[k] === 'true' ||
9 | obj[k] === 1 ||
10 | obj[k] === 'yes' ||
11 | obj[k] === 'y'
12 | ) {
13 | obj[k] = true
14 | } else if (
15 | obj[k] === false ||
16 | obj[k] === 'false' ||
17 | obj[k] === 0 ||
18 | obj[k] === 'no' ||
19 | obj[k] === 'n' ||
20 | obj[k] === undefined ||
21 | obj[k] === null
22 | ) {
23 | obj[k] = false
24 | }
25 | }
26 |
27 | return obj
28 | }
29 |
30 | function normalizeQueryObj (obj) {
31 | return string2Bool(obj)
32 | }
33 |
34 | export default normalizeQueryObj
35 |
--------------------------------------------------------------------------------
/src/utils/postJson.js:
--------------------------------------------------------------------------------
1 | async function postJson (url, data) {
2 | return new Promise((resolve, reject) => {
3 | const http = new window.XMLHttpRequest()
4 | http.open('POST', url, true)
5 |
6 | http.onreadystatechange = () => {
7 | if (http.readyState === 4 && http.status === 200) {
8 | resolve(http.responseText)
9 | } else if (http.status !== 200) {
10 | reject(new Error(http.responseText))
11 | }
12 | }
13 |
14 | http.setRequestHeader('Content-Type', 'application/json')
15 | http.send(JSON.stringify(data))
16 | })
17 | }
18 |
19 | export default postJson
20 |
--------------------------------------------------------------------------------
/src/utils/randomSalt.js:
--------------------------------------------------------------------------------
1 | import { randomBytes } from 'crypto'
2 | import BN from 'bn.js'
3 |
4 | export function randomSalt () {
5 | const salt = new BN(`0x${randomBytes(32).toString('hex')}`)
6 | // console.log('salt.toString(10):', salt.toString(10))
7 | return salt.toString(10)
8 | }
9 |
--------------------------------------------------------------------------------
/src/utils/renderAirSwap.js:
--------------------------------------------------------------------------------
1 |
2 | export const renderAirSwap = () => {
3 | try {
4 | window.AirSwap.Trader.render({
5 | mode: 'buy',
6 | amount: '',
7 | env: 'production',
8 | token: '0xd0d6d6c5fe4a677d343cc433536bb717bae167dd',
9 | onCancel: function () {
10 | console.info('Trade was cancelled.')
11 | },
12 | onComplete: function (transactionId, makerAmount, makerToken, takerAmount, takerToken) {
13 | window.alert('Trade complete. Thank you, come again.')
14 | }
15 | }, 'body')
16 | } catch (error) {
17 | console.log(error)
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/utils/saltHashVote.js:
--------------------------------------------------------------------------------
1 | import {soliditySHA3} from 'ethereumjs-abi'
2 |
3 | function saltHashVote (vote, salt) {
4 | return `0x${soliditySHA3(['uint', 'uint'],
5 | [vote, salt]).toString('hex')}`
6 | }
7 |
8 | export default saltHashVote
9 |
--------------------------------------------------------------------------------
/src/utils/saveFile.js:
--------------------------------------------------------------------------------
1 | import FileSaver from 'file-saver'
2 |
3 | function saveFile (data = '', filename = 'download.txt') {
4 | if (typeof data === 'object') {
5 | data = JSON.stringify(data)
6 | }
7 |
8 | const blob = new window.Blob([data], {type: 'text/plain;charset=utf-8'})
9 |
10 | FileSaver.saveAs(blob, filename)
11 | }
12 |
13 | export default saveFile
14 |
--------------------------------------------------------------------------------
/src/utils/toCurrency.js:
--------------------------------------------------------------------------------
1 | import commafy from 'commafy'
2 |
3 | /*
4 | const currencyFormatter = new Intl.NumberFormat('en-US', {
5 | style: 'currency',
6 | currency: 'USD'
7 | })
8 | */
9 |
10 | function toCurrency (value) {
11 | // return currencyFormatter.format(value)
12 | return `$${commafy(value)}`
13 | }
14 |
15 | export default toCurrency
16 |
--------------------------------------------------------------------------------