Merge branch 'develop' of https://github.com/poanetwork/metamask-extension into tests-fix

This commit is contained in:
Natalia 2018-08-02 08:44:03 -07:00
commit d87213e494
90 changed files with 1353 additions and 866 deletions

View File

@ -3,6 +3,8 @@
## Current Master
- [#55](https://github.com/poanetwork/metamask-extension/pull/55): Tests fix.
- [#52](https://github.com/poanetwork/metamask-extension/pull/52): Nifty Wallet restyling.
- [#54](https://github.com/poanetwork/metamask-extension/pull/54): Fix explorer url for POA network on confirmed transaction.
- [#50](https://github.com/poanetwork/metamask-extension/pull/50): Update sentry links.
- [#45](https://github.com/poanetwork/metamask-extension/pull/45): Automate release publish.

BIN
app/fonts/Nunito/Nunito-Black.ttf Executable file

Binary file not shown.

Binary file not shown.

BIN
app/fonts/Nunito/Nunito-Bold.ttf Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
app/fonts/Nunito/Nunito-Light.ttf Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

93
app/fonts/Nunito/OFL.txt Executable file
View File

@ -0,0 +1,93 @@
Copyright 2014 The Nunito Project Authors (contact@sansoxygen.com)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14">
<path fill="#FFF" fill-rule="evenodd" d="M13 8H3.46l4.256 4.256c.366.367.337.99-.066 1.394-.404.403-1.027.432-1.394.066L.284 7.744a.855.855 0 0 1-.21-.378A.992.992 0 0 1 0 7c0-.13.029-.252.074-.366a.855.855 0 0 1 .21-.378L6.256.284c.367-.366.99-.337 1.394.066.403.404.432 1.027.066 1.394L3.46 6H13a1 1 0 0 1 0 2z"/>
</svg>

After

Width:  |  Height:  |  Size: 391 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14">
<path fill="#FFF" fill-rule="evenodd" d="M13.926 7.366a.855.855 0 0 1-.21.378l-5.972 5.972c-.367.366-.99.337-1.394-.066-.403-.404-.432-1.027-.066-1.394L10.54 8H1a1 1 0 0 1 0-2h9.54L6.284 1.744c-.366-.367-.337-.99.066-1.394.404-.403 1.027-.432 1.394-.066l5.972 5.972c.107.107.17.239.21.378A.992.992 0 0 1 14 7c0 .13-.029.252-.074.366z"/>
</svg>

After

Width:  |  Height:  |  Size: 412 B

3
app/images/close.svg Normal file
View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12">
<path fill="#6729A8" fill-rule="evenodd" d="M11.687 1.708L7.406 6l4.249 4.26a1.01 1.01 0 0 1 0 1.426 1.004 1.004 0 0 1-1.421 0l-4.25-4.261-4.249 4.261a1.004 1.004 0 0 1-1.421 0 1.01 1.01 0 0 1 0-1.426L4.563 6 .282 1.708a1.01 1.01 0 0 1 0-1.425 1.003 1.003 0 0 1 1.422 0l4.28 4.292L10.265.283a1.003 1.003 0 0 1 1.422 0 1.01 1.01 0 0 1 0 1.425z"/>
</svg>

After

Width:  |  Height:  |  Size: 421 B

View File

@ -1,21 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="24.088px" height="24px" viewBox="189.192 0 24.088 24" enable-background="new 189.192 0 24.088 24" xml:space="preserve" fill="#F7861C">
<g>
<g>
<path fill="#F7861C" d="M204.655,7.169h-8.962c-1.1,0-1.991,0.891-1.991,1.991v8.963c0,1.1,0.892,1.99,1.991,1.99h8.962
c1.101,0,1.991-0.891,1.991-1.99V9.16C206.646,8.06,205.756,7.169,204.655,7.169z M205.651,18.123
c0,0.549-0.446,0.994-0.996,0.994h-8.962c-0.549,0-0.995-0.445-0.995-0.994V9.16c0-0.55,0.446-0.996,0.995-0.996h8.962
c0.55,0,0.996,0.446,0.996,0.996V18.123z"/>
</g>
</g>
<path fill="#F7861C" d="M196.689,11.152h6.969v-0.996h-6.969V11.152z"/>
<path fill="#F7861C" d="M196.689,13.144h6.969v-0.996h-6.969V13.144z"/>
<path fill="#F7861C" d="M196.689,15.135h6.969v-0.996h-6.969V15.135z"/>
<path fill="#F7861C" d="M196.689,17.126h3.982v-0.994h-3.982V17.126z"/>
<path fill="#F7861C" d="M207.643,4.182h-8.962c-1.101,0-1.991,0.892-1.991,1.991h0.995c0-0.549,0.446-0.996,0.996-0.996h8.962
c0.549,0,0.995,0.447,0.995,0.996v8.962c0,0.55-0.446,0.997-0.995,0.997v0.994c1.101,0,1.991-0.891,1.991-1.991V6.172
C209.634,5.073,208.743,4.182,207.643,4.182z"/>
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14">
<path fill="#6729A8" fill-rule="evenodd" d="M13 10a1 1 0 0 1-1-1V2H5a1 1 0 0 1 0-2h8a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1zm-3-5v8a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1zM8 6H2v6h6V6z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 277 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="64">
<path fill="#60DB97" fill-rule="evenodd" d="M19.996 32c0 .031 0 .062-.003.093-.003.03-.009.059-.015.089-.007.032-.013.064-.023.095a1.023 1.023 0 0 1-.077.179c-.005.008-.007.017-.012.026l-18 30.061a1.02 1.02 0 0 1-1.366.353.947.947 0 0 1-.366-1.318L17.845 32 .134 2.422A.947.947 0 0 1 .5 1.104a1.02 1.02 0 0 1 1.366.353l18 30.061c.005.009.007.018.012.026a1.023 1.023 0 0 1 .077.179c.01.031.016.063.023.095.006.03.012.059.015.089a.963.963 0 0 1 .003.093z"/>
</svg>

After

Width:  |  Height:  |  Size: 531 B

77
app/images/forward-carrat.svg Normal file → Executable file
View File

@ -1,74 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="4.2333331mm"
height="12.800793mm"
viewBox="0 0 14.999999 45.357139"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="forward-carrat.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6"
inkscape:cx="17.87049"
inkscape:cy="17.678567"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
showguides="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1276"
inkscape:window-height="755"
inkscape:window-x="4"
inkscape:window-y="1"
inkscape:window-maximized="1">
<inkscape:grid
type="xygrid"
id="grid4136"
originx="-180"
originy="-602.14286" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-180,-404.8622)">
<path
style="fill:#f7861c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 180,404.8622 0,7.5 10,15 -10,15 0,7.85714 15,-22.85714 z"
id="path4138"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc" />
</g>
<svg xmlns="http://www.w3.org/2000/svg" width="50" height="64">
<path fill="#60DB97" fill-rule="evenodd" d="M49.996 32c0 .032 0 .064-.003.095-.003.032-.009.062-.015.093-.007.033-.013.065-.023.098-.008.027-.019.053-.03.08a1.07 1.07 0 0 1-.047.104l-.012.027-18 31.001a1.004 1.004 0 0 1-1.366.364.992.992 0 0 1-.366-1.359L47.845 32 30.134 1.497A.992.992 0 0 1 30.5.138a1.004 1.004 0 0 1 1.366.364l18 31.001.012.027c.018.034.033.069.047.104.011.027.022.053.03.08.01.033.016.065.023.098.006.031.012.061.015.093.003.031.003.063.003.095z"/>
<path fill="#60DB97" fill-rule="evenodd" d="M34.996 32c0 .032 0 .064-.003.095-.003.032-.009.062-.015.093-.007.033-.013.065-.023.098-.008.027-.019.053-.03.08a1.07 1.07 0 0 1-.047.104l-.012.027-18 31.001a1.004 1.004 0 0 1-1.366.364.992.992 0 0 1-.366-1.359L32.845 32 15.134 1.497A.992.992 0 0 1 15.5.138a1.004 1.004 0 0 1 1.366.364l18 31.001.012.027c.018.034.033.069.047.104.011.027.022.053.03.08.01.033.016.065.023.098.006.031.012.061.015.093.003.031.003.063.003.095z" opacity=".502"/>
<path fill="#60DB97" fill-rule="evenodd" d="M19.996 32c0 .032 0 .064-.003.096-.003.03-.009.061-.015.092-.007.033-.013.065-.023.098-.008.027-.019.053-.03.08a1.07 1.07 0 0 1-.047.104l-.012.027-18 31.001a1.004 1.004 0 0 1-1.366.364.992.992 0 0 1-.366-1.359L17.845 32 .134 1.497A.992.992 0 0 1 .5.138a1.004 1.004 0 0 1 1.366.364l18 31.001.012.027c.018.034.033.069.047.104.011.027.022.053.03.08.01.033.016.065.023.098.006.031.012.062.015.092.003.032.003.064.003.096z" opacity=".2"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 21 KiB

3
app/images/icon-back.svg Executable file
View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14">
<path fill="#6729A8" fill-rule="evenodd" d="M13 8H3.46l4.256 4.256c.366.367.337.99-.066 1.394-.404.403-1.027.432-1.394.066L.284 7.744a.852.852 0 0 1-.21-.377A.997.997 0 0 1 0 7c0-.13.029-.253.074-.366a.855.855 0 0 1 .21-.378L6.256.284c.367-.366.99-.337 1.394.066.403.404.432 1.027.066 1.394L3.46 6H13a1 1 0 0 1 0 2z"/>
</svg>

After

Width:  |  Height:  |  Size: 394 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="2" height="18">
<path fill="#60DB97" fill-rule="evenodd" d="M1 13a1 1 0 0 1-1-1V1a1 1 0 0 1 2 0v11a1 1 0 0 1-1 1zm0 3a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"/>
</svg>

After

Width:  |  Height:  |  Size: 208 B

View File

@ -1 +1,49 @@
<svg width='120px' height='120px' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="uil-default"><rect x="0" y="0" width="100" height="100" fill="none" class="bk"></rect><rect x='46' y='39' width='8' height='22' rx='5' ry='5' fill='#ffae29' transform='rotate(0 50 50) translate(0 -20)'> <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0s' repeatCount='indefinite'/></rect><rect x='46' y='39' width='8' height='22' rx='5' ry='5' fill='#ffae29' transform='rotate(40 50 50) translate(0 -20)'> <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.1111111111111111s' repeatCount='indefinite'/></rect><rect x='46' y='39' width='8' height='22' rx='5' ry='5' fill='#ffae29' transform='rotate(80 50 50) translate(0 -20)'> <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.2222222222222222s' repeatCount='indefinite'/></rect><rect x='46' y='39' width='8' height='22' rx='5' ry='5' fill='#ffae29' transform='rotate(120 50 50) translate(0 -20)'> <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.3333333333333333s' repeatCount='indefinite'/></rect><rect x='46' y='39' width='8' height='22' rx='5' ry='5' fill='#ffae29' transform='rotate(160 50 50) translate(0 -20)'> <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.4444444444444444s' repeatCount='indefinite'/></rect><rect x='46' y='39' width='8' height='22' rx='5' ry='5' fill='#ffae29' transform='rotate(200 50 50) translate(0 -20)'> <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.5555555555555556s' repeatCount='indefinite'/></rect><rect x='46' y='39' width='8' height='22' rx='5' ry='5' fill='#ffae29' transform='rotate(240 50 50) translate(0 -20)'> <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.6666666666666666s' repeatCount='indefinite'/></rect><rect x='46' y='39' width='8' height='22' rx='5' ry='5' fill='#ffae29' transform='rotate(280 50 50) translate(0 -20)'> <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.7777777777777778s' repeatCount='indefinite'/></rect><rect x='46' y='39' width='8' height='22' rx='5' ry='5' fill='#ffae29' transform='rotate(320 50 50) translate(0 -20)'> <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.8888888888888888s' repeatCount='indefinite'/></rect></svg>
<svg class="lds-spinner" width="200px" height="200px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" style="background: none;"><g transform="rotate(0 50 50)">
<rect x="47" y="22.5" rx="4.7" ry="2.25" width="6" height="15" fill="#6729a8">
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.9166666666666666s" repeatCount="indefinite"></animate>
</rect>
</g><g transform="rotate(30 50 50)">
<rect x="47" y="22.5" rx="4.7" ry="2.25" width="6" height="15" fill="#6729a8">
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.8333333333333334s" repeatCount="indefinite"></animate>
</rect>
</g><g transform="rotate(60 50 50)">
<rect x="47" y="22.5" rx="4.7" ry="2.25" width="6" height="15" fill="#6729a8">
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.75s" repeatCount="indefinite"></animate>
</rect>
</g><g transform="rotate(90 50 50)">
<rect x="47" y="22.5" rx="4.7" ry="2.25" width="6" height="15" fill="#6729a8">
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.6666666666666666s" repeatCount="indefinite"></animate>
</rect>
</g><g transform="rotate(120 50 50)">
<rect x="47" y="22.5" rx="4.7" ry="2.25" width="6" height="15" fill="#6729a8">
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.5833333333333334s" repeatCount="indefinite"></animate>
</rect>
</g><g transform="rotate(150 50 50)">
<rect x="47" y="22.5" rx="4.7" ry="2.25" width="6" height="15" fill="#6729a8">
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.5s" repeatCount="indefinite"></animate>
</rect>
</g><g transform="rotate(180 50 50)">
<rect x="47" y="22.5" rx="4.7" ry="2.25" width="6" height="15" fill="#6729a8">
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.4166666666666667s" repeatCount="indefinite"></animate>
</rect>
</g><g transform="rotate(210 50 50)">
<rect x="47" y="22.5" rx="4.7" ry="2.25" width="6" height="15" fill="#6729a8">
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.3333333333333333s" repeatCount="indefinite"></animate>
</rect>
</g><g transform="rotate(240 50 50)">
<rect x="47" y="22.5" rx="4.7" ry="2.25" width="6" height="15" fill="#6729a8">
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.25s" repeatCount="indefinite"></animate>
</rect>
</g><g transform="rotate(270 50 50)">
<rect x="47" y="22.5" rx="4.7" ry="2.25" width="6" height="15" fill="#6729a8">
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.16666666666666666s" repeatCount="indefinite"></animate>
</rect>
</g><g transform="rotate(300 50 50)">
<rect x="47" y="22.5" rx="4.7" ry="2.25" width="6" height="15" fill="#6729a8">
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.08333333333333333s" repeatCount="indefinite"></animate>
</rect>
</g><g transform="rotate(330 50 50)">
<rect x="47" y="22.5" rx="4.7" ry="2.25" width="6" height="15" fill="#6729a8">
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="0s" repeatCount="indefinite"></animate>
</rect>
</g></svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
app/images/logo-1.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
app/images/logo-1@2x.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
app/images/logo-1@3x.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

3
app/images/logo.svg Executable file
View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="22" height="20">
<image width="22" height="20" xlink:href="data:img/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAUCAYAAACJfM0wAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAEBklEQVQ4y2WVy4tcVRDGf3XOvbd7pmc6k8QHZhKNJgYEMfg2KslCTdwYUHcqIQpKVq78IwT/gKwkCm5dKQgzIrjz/cIEDQRcBEMmM5PJPLpv9z2nPhd9JwlYm+IU1He+qvNVHTv2wPsUVlGEDqH1BR1CKIkUmBWnDT4Elsc+eG2us/fizu4BGh/gcgyjCBXZM1kNhsCMAoEASZgZCGQCQHBGSmcNMAt3J69/zO5vI15FCHhPUi2BwXYOSBQ3I4BowSexd5x8lvbmcd6iU8z2Z8u7Pk8+wuUAj4KeNKMWYNhNgsGw27FBYNhp9+bj7COkxDBfJ1rJ3VOPEMMUyWuE42oeFvrFCB/QMrW2+iBNajIzjIDQqZTH55KPcBJbzSoxdNjTe5wiVIx9EwWRNcbldOPsQ2bxI4mvMQu0WOEW3QDoVFb6NGsCOmhWiFawt/cERegwyutgkHKNKzNb3UURppAywAvIztG+U2hLR/I3kjefJh+SldhqrhFDyb7ZIxShS51vIETjNYpifu0wc8v7yKFGiGABV/N6k4dh7FsUNhHIm1nNZyAMo84rVGGGe2efowhT1GkNzJBnzMUuHuTyC98xThvc89tTUI0Y5FXGeaNnZj8KHSmEXnGNP8MFFhj5OlXosb9/lMqmqdPqpE0CkajyDN3xDvrvLiKH8q2jDHor1LaKUQA8hvGlPb//jCbKCNR+gzL0ODT3Mt04xyjfaHUJGBgie+LOcIhwuCCpJv06Zs0uE0NBILYyNIrk9XrjdT/5kOlyNwd3vEgVZxikFYIZLkeaaNksgIml+De7v7mfTGL1jn+IHpGcjNPq7asiWvVSt9z5PYg9vcfpFH0GzQpmgSYnMOiXe0g+ZDMtU1iFGnF17gLIKHIH2aRNAHJ+MLOTRQjVD7unDhyfq+5bEGJzfI0YItlrBPTLeao4QxmnyEoM0xohBIKVYCDL24AQ7DvDnjWigsnYbK4uLg3/PD72dSAzSptkNfSreTqhT1KNy+lX85SxS/Ia94SUcGWyJ5z0kzw/v70uAkCwgmFaXxzn4YkyTFOFGfrVPrqxT9IIZESr2EpLjPIGYDjegjqu9LPQ02YT+lILDEYRSjAtuPz4ru5BZso7abzGMMo4xVazxEp9iawGJKREVkYa/wF6xsBvXzkBA7PtQ6ROa4vLw79OJI3oxD5V7LHRXGG5vtgWaTgZV8aVf8d4AixtM215TkZaaoUKFKFDna8vLA0unNho/mWlvsTK8BJmgWAR8AlTy+cNHRE0tIBm23q/2YrbzKCK04zz5sLS8PzJtdE/7fiEm30F/wPXUwSG2zlSy1i3Vtr/zOXEUFLQ/SJadQzTt06+7kpXwD9BehJsIE1WJFjrb/0i/wGwOlXnXcFBjwAAAABJRU5ErkJggg=="/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

3
app/images/menu.svg Executable file
View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="12">
<path fill="#6729A8" fill-rule="evenodd" d="M13 7H1a1 1 0 0 1 0-2h12a1 1 0 0 1 0 2zm0-5H1a1 1 0 0 1 0-2h12a1 1 0 0 1 0 2zM1 10h12a1 1 0 0 1 0 2H1a1 1 0 0 1 0-2z"/>
</svg>

After

Width:  |  Height:  |  Size: 239 B

3
app/images/more.svg Normal file
View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="4" height="24">
<path fill="#60DB97" fill-rule="evenodd" d="M2 14a2 2 0 1 1-.001-3.999A2 2 0 0 1 2 14zM2 4A2 2 0 1 1 1.999.001 2 2 0 0 1 2 4zm0 16a2 2 0 1 1 .001 3.999A2 2 0 0 1 2 20z"/>
</svg>

After

Width:  |  Height:  |  Size: 245 B

30
app/images/switch_acc.svg Normal file → Executable file
View File

@ -1,29 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="29.477px" height="24px" viewBox="78.469 0 29.477 24" enable-background="new 78.469 0 29.477 24" xml:space="preserve" fill="#F7861C">
<g>
<path d="M90.437,9.087c0,1.669,1.423,4.766,3.177,4.766c1.755,0,3.177-3.097,3.177-4.766c0-1.668-1.422-3.021-3.177-3.021
C91.859,6.066,90.437,7.418,90.437,9.087z"/>
<path d="M93.613,17.091h4.042c1.108,0,1.503-0.249,1.503-0.84c0-1.21-1.158-2.147-2.867-2.62c-0.713,0.861-1.619,1.467-2.678,1.467
c-1.057,0-1.964-0.605-2.676-1.467c-1.709,0.473-2.867,1.41-2.867,2.62c0,0.591,0.395,0.84,1.502,0.84H93.613z"/>
<path d="M86.392,4.841c0.979-0.98,2.122-1.738,3.398-2.255c1.231-0.499,2.533-0.751,3.87-0.751c1.47,0,2.892,0.304,4.225,0.902
c0.166,0.075,0.36,0.039,0.488-0.09l0.558-0.556c0.101-0.101,0.146-0.244,0.122-0.384c-0.024-0.14-0.115-0.26-0.243-0.321
C97.218,0.624,95.437,0.22,93.66,0.22c-1.545,0-3.052,0.292-4.478,0.869c-1.477,0.598-2.8,1.476-3.933,2.609
c-1.775,1.774-2.924,4.021-3.325,6.495c-0.192,1.19-0.205,2.4-0.036,3.595c0.052,0.366,0.121,0.729,0.206,1.089l-0.732-0.497
c-0.199-0.136-0.472-0.083-0.608,0.117l-0.45,0.664c-0.065,0.097-0.089,0.214-0.067,0.329c0.021,0.114,0.088,0.214,0.184,0.28
l2.638,1.787l0.259,0.177c0.056,0.037,0.117,0.061,0.182,0.07c0.021,0.003,0.043,0.005,0.064,0.005
c0.028,0,0.056-0.002,0.083-0.008c0.006-0.001,0.011-0.002,0.016-0.004c0.107-0.024,0.202-0.089,0.264-0.18l1.965-2.897
c0.065-0.096,0.09-0.214,0.067-0.328s-0.088-0.215-0.185-0.28l-0.665-0.45c-0.199-0.136-0.472-0.084-0.607,0.116l-0.741,1.093
c-0.408-1.469-0.485-3.014-0.22-4.541C83.903,8.242,84.89,6.343,86.392,4.841z"/>
<path d="M106.979,8.028c-0.039-0.109-0.121-0.198-0.226-0.248l-2.443-1.142l0,0l-0.727-0.34c-0.22-0.102-0.48-0.007-0.583,0.211
l-1.482,3.17c-0.102,0.219-0.008,0.48,0.212,0.582l0.728,0.34c0.059,0.027,0.121,0.041,0.186,0.041c0.05,0,0.101-0.009,0.149-0.026
c0.108-0.039,0.198-0.121,0.247-0.226l0.509-1.087c0.43,1.52,0.505,3.12,0.213,4.694c-0.379,2.047-1.358,3.907-2.832,5.382
c-0.979,0.979-2.123,1.737-3.398,2.253c-1.231,0.499-2.534,0.752-3.87,0.752c-1.393,0-2.743-0.273-4.018-0.812
c-0.164-0.068-0.354-0.031-0.48,0.095l-0.561,0.561c-0.103,0.102-0.147,0.247-0.122,0.389c0.026,0.141,0.119,0.26,0.251,0.32
C90.264,23.632,91.968,24,93.661,24c1.545,0,3.053-0.292,4.478-0.87c1.477-0.598,2.8-1.475,3.934-2.608
c1.743-1.744,2.887-3.949,3.304-6.378c0.307-1.777,0.211-3.574-0.273-5.281l0.939,0.439c0.061,0.028,0.124,0.042,0.187,0.042
c0.164,0,0.322-0.094,0.396-0.253l0.34-0.727C107.015,8.258,107.021,8.138,106.979,8.028z"/>
</g>
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14">
<path fill="#6729A8" fill-rule="evenodd" d="M0 14v-1.75c0-2.362 4.638-3.5 7-3.5 2.363 0 7 1.138 7 3.5V14H0zm7-8a3 3 0 1 1 0-6 3 3 0 0 1 0 6z"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 219 B

View File

@ -1,7 +1,7 @@
{
"name": "__MSG_appName__",
"short_name": "__MSG_appName__",
"version": "4.8.2",
"version": "4.8.3",
"manifest_version": 2,
"author": "https://metamask.io",
"description": "__MSG_appDescription__",

View File

@ -56,11 +56,11 @@ class ExtensionPlatform {
this._subscribeToNotificationClicked()
const url = explorerLink(txMeta.hash, parseInt(txMeta.metamaskNetworkId))
const { url, explorerName } = this._getExplorer(txMeta.hash, parseInt(txMeta.metamaskNetworkId))
const nonce = parseInt(txMeta.txParams.nonce, 16)
const title = 'Confirmed transaction'
const message = `Transaction ${nonce} confirmed! View on EtherScan`
const message = `Transaction ${nonce} confirmed! View on ${explorerName}`
this._showNotification(title, message, url)
}
@ -90,10 +90,30 @@ class ExtensionPlatform {
}
_viewOnEtherScan (txId) {
if (txId.startsWith('http://')) {
if (txId.startsWith('http://') || txId.startsWith('https://')) {
global.metamaskController.platform.openWindow({ url: txId })
}
}
_getExplorer (hash, networkId) {
if (networkId === 99) {
return {
explorerName: 'POA explorer',
url: `https://poaexplorer.com/txid/search/${hash}`,
}
} else if (networkId === 77) {
return {
explorerName: 'POA explorer',
url: `https://sokol.poaexplorer.com/txid/search/${hash}`,
}
} else {
return {
explorerName: 'Etherscan',
url: explorerLink(hash, networkId),
}
}
}
}
module.exports = ExtensionPlatform

View File

@ -1,55 +1,55 @@
const GITHUB_TOKEN = process.env.GITHUB_TOKEN;
const request = require('request-promise');
const VERSION = require('../dist/chrome/manifest.json').version;
const fs = require('fs');
const GITHUB_TOKEN = process.env.GITHUB_TOKEN
const request = require('request-promise')
const VERSION = require('../dist/chrome/manifest.json').version
const fs = require('fs')
publishRelease().then(function () {
console.log("Published");
});
console.log('Published')
})
/**
* Creates release. Adds tag from the current commit, current version is used as part of the tag name.
* Then uploads assets that were created while building.
* @returns {Promise.<void>}
*/
async function publishRelease() {
async function publishRelease () {
const CIRCLE_SHA1 = process.env.CIRCLE_SHA1
console.log(`VERSION: ${VERSION}, CIRCLE_SHA1: ${CIRCLE_SHA1}`);
let releaseId;
const CREATE_RELEASE_URI = `https://api.github.com/repos/poanetwork/metamask-extension/releases`;
console.log(`VERSION: ${VERSION}, CIRCLE_SHA1: ${CIRCLE_SHA1}`)
let releaseId
const CREATE_RELEASE_URI = `https://api.github.com/repos/poanetwork/metamask-extension/releases`
console.log(`CREATE_RELEASE_URI: ${CREATE_RELEASE_URI}`)
let changelog = "";
let changelog = ''
try {
changelog = fs.readFileSync('./CHANGELOG.md').toString().split(VERSION)[1].split('##')[0].trim();
changelog = fs.readFileSync('./CHANGELOG.md').toString().split(VERSION)[1].split('##')[0].trim()
} catch (err) {
console.error(`Error in getting changelog: ${err}`)
}
// remove first line with date
let newLineIndex = changelog.indexOf('\n');
let changes = "New release is ready.";
const newLineIndex = changelog.indexOf('\n')
let changes = 'New release is ready.'
if (newLineIndex !== -1) {
changes = changelog.slice(newLineIndex + 1);
changes = changelog.slice(newLineIndex + 1)
}
console.log(`changes: ${changes}`);
console.log(`changes: ${changes}`)
request({
method: 'POST',
uri: CREATE_RELEASE_URI,
headers: {
'User-Agent': 'Nifty Wallet',
'Authorization': `token ${GITHUB_TOKEN}`
'Authorization': `token ${GITHUB_TOKEN}`,
},
body: JSON.stringify({
body: changes,
tag_name: `v${VERSION}`,
name: `Version ${VERSION}`,
target_commitish: CIRCLE_SHA1,
draft: true
})
draft: true,
}),
}).then(async function (response) {
console.log('response: ' + response);
releaseId = JSON.parse(response).id;
console.log(`releaseId: ${releaseId}`);
console.log('response: ' + response)
releaseId = JSON.parse(response).id
console.log(`releaseId: ${releaseId}`)
return uploadAsset(`./builds/metamask-chrome-${VERSION}.zip`, `metamask-chrome-${VERSION}.zip`, releaseId)
.then(() => {
@ -62,9 +62,9 @@ async function publishRelease() {
return uploadAsset(`./builds/metamask-opera-${VERSION}.zip`, `metamask-opera-${VERSION}.zip`, releaseId)
})
}).catch(function (err) {
console.error('error in request:' + err);
throw err;
});
console.error('error in request:' + err)
throw err
})
}
/**
@ -74,17 +74,17 @@ async function publishRelease() {
* @param releaseId - id or the release obtained after release creation
* @returns {Promise.<*>}
*/
async function uploadAsset(path, name, releaseId) {
const UPLOAD_ASSET_URL = `https://uploads.github.com/repos/poanetwork/metamask-extension/releases/${releaseId}/assets?name=${name}&label=${name}`;
console.log(`UPLOAD_ASSET_URL: ${UPLOAD_ASSET_URL}`);
async function uploadAsset (path, name, releaseId) {
const UPLOAD_ASSET_URL = `https://uploads.github.com/repos/poanetwork/metamask-extension/releases/${releaseId}/assets?name=${name}&label=${name}`
console.log(`UPLOAD_ASSET_URL: ${UPLOAD_ASSET_URL}`)
return request({
method: 'POST',
uri: UPLOAD_ASSET_URL,
body: fs.readFileSync(path),
headers: {
'Authorization': `token ${GITHUB_TOKEN}`,
"Content-Type": "application/zip",
'User-Agent': 'Nifty Wallet'
}
'Content-Type': 'application/zip',
'User-Agent': 'Nifty Wallet',
},
})
}

View File

@ -1,7 +1,13 @@
Dear Nifty Wallet Users,
Nifty Wallet is beta software.
When you log in to Nifty Wallet, your current account's address is visible to every new site you visit. This can be used to look up your account balances of Ether and other tokens.
For your privacy, for now, please sign out of Nifty Wallet when you're done using a site.
There have been several instances of high-profile legitimate websites such as BTC Manager and Games Workshop that have had their websites temporarily compromised. This involves showing a fake Nifty Wallet window on the page asking for user's seed phrases. Nifty Wallet will never open itself in this way.
## Related Links ##
**[Terms of Use](https://github.com/poanetwork/metamask-extension/wiki)**
**[Privacy](https://github.com/poanetwork/metamask-extension/wiki)**
**[Attributions](https://github.com/poanetwork/metamask-extension/wiki)**
**[Terms of Service](https://github.com/poanetwork/metamask-extension/wiki/Terms-of-Service)**

View File

@ -10,26 +10,4 @@ module.exports = [
title: 'Terms of Use',
body: fs.readFileSync(path.join(__dirname, '/archive', 'notice_0.md'), 'utf8'),
},
{
id: 2,
read: false,
date: 'Mon May 08 2017',
title: 'Privacy Notice',
body: fs.readFileSync(path.join(__dirname, '/archive', 'notice_2.md'), 'utf8'),
},
{
id: 3,
read: false,
date: 'Tue Nov 28 2017',
title: 'Seed Phrase Alert',
firstVersion: '<=3.12.0',
body: fs.readFileSync(path.join(__dirname, '/archive', 'notice_3.md'), 'utf8'),
},
{
id: 4,
read: false,
date: 'Wed Jun 13 2018',
title: 'Phishing Warning',
body: fs.readFileSync(path.join(__dirname, '/archive', 'notice_4.md'), 'utf8'),
},
]

View File

@ -56,8 +56,9 @@ AccountDetailScreen.prototype.render = function () {
// identicon, label, balance, etc
h('.account-data-subsection', {
style: {
margin: '0 20px',
padding: '0 20px',
flex: '1 0 auto',
background: 'linear-gradient(rgb(84, 36, 147), rgb(104, 45, 182))',
},
}, [
@ -74,7 +75,7 @@ AccountDetailScreen.prototype.render = function () {
// large identicon and addresses
h('.identicon-wrapper.select-none', [
h(Identicon, {
diameter: 62,
diameter: 60,
address: selected,
}),
]),
@ -122,6 +123,7 @@ AccountDetailScreen.prototype.render = function () {
textOverflow: 'ellipsis',
padding: '5px 0px',
lineHeight: '25px',
color: '#ffffff',
},
}, [
identity && identity.name,
@ -132,7 +134,7 @@ AccountDetailScreen.prototype.render = function () {
AccountDropdowns,
{
style: {
marginRight: '8px',
marginRight: '-7px',
marginLeft: 'auto',
cursor: 'pointer',
},
@ -162,16 +164,16 @@ AccountDetailScreen.prototype.render = function () {
paddingTop: '3px',
width: '5em',
height: '15px',
fontSize: '13px',
fontFamily: 'Montserrat Light',
fontSize: '14px',
fontFamily: 'Nunito Bold',
textRendering: 'geometricPrecision',
marginBottom: '15px',
color: '#AEAEAE',
color: 'rgba(255, 255, 255, 0.7)',
},
}, checksumAddress),
]),
// account ballence
// account ballance
]),
]),
@ -198,7 +200,7 @@ AccountDetailScreen.prototype.render = function () {
h('button', {
onClick: () => props.dispatch(actions.buyEthView(selected)),
style: { marginRight: '10px' },
}, 'BUY'),
}, 'Buy'),
h('button', {
onClick: () => props.dispatch(actions.showSendPage()),
@ -206,7 +208,7 @@ AccountDetailScreen.prototype.render = function () {
marginBottom: '20px',
marginRight: '8px',
},
}, 'SEND'),
}, 'Send'),
]),
]),

View File

@ -34,12 +34,20 @@ AccountImportSubview.prototype.render = function () {
const { type } = state
return (
h('div', [
h('div', {
style: {
width: '100%',
},
}, [
h('.section-title.flex-row.flex-center', [
h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', {
onClick: (event) => {
props.dispatch(actions.goHome())
},
style: {
position: 'absolute',
left: '30px',
},
}),
h('h2.page-subtitle', 'Import Accounts'),
]),
@ -47,31 +55,18 @@ AccountImportSubview.prototype.render = function () {
style: {
display: 'inline-block',
alignItems: 'center',
padding: '5px 15px 0px 15px',
padding: '5px 30px 0px 30px',
},
}, [
h('span', 'Imported accounts will not be associated with your originally created Nifty Wallet account seedphrase. Learn more about imported accounts '),
h('span', {
style: {
color: 'rgba(247, 134, 28, 1)',
cursor: 'pointer',
textDecoration: 'underline',
},
onClick: () => {
global.platform.openWindow({
url: 'https://metamask.helpscoutdocs.com/article/17-what-are-loose-accounts',
})
},
}, 'here.'),
h('span', 'Imported accounts will not be associated with your originally created Nifty Wallet account seedphrase.'),
]),
h('div', {
style: {
padding: '10px',
color: 'rgb(174, 174, 174)',
padding: '10px 30px',
},
}, [
h('h3', { style: { padding: '3px' } }, 'SELECT TYPE'),
h('h3', { style: { padding: '3px' } }, 'Select Type'),
h('style', `
.has-value.Select--single > .Select-control .Select-value .Select-value-label, .Select-value-label {

View File

@ -5,8 +5,6 @@ const actions = require('../../../../ui/app/actions')
const FileInput = require('react-simple-file-input').default
const PropTypes = require('prop-types')
const HELP_LINK = 'https://github.com/MetaMask/faq/blob/master/README.md#q-i-cant-use-the-import-feature-for-uploading-a-json-file-the-window-keeps-closing-when-i-try-to-select-a-file'
class JsonImportSubview extends Component {
constructor (props) {
super(props)
@ -26,15 +24,11 @@ class JsonImportSubview extends Component {
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
padding: '5px 15px 0px 15px',
padding: '5px 30px 0px 30px',
},
}, [
h('p', 'Used by a variety of different clients'),
h('a.warning', {
href: HELP_LINK,
target: '_blank',
}, 'File import not working? Click here!'),
h(FileInput, {
readAs: 'text',
@ -51,15 +45,16 @@ class JsonImportSubview extends Component {
id: 'json-password-box',
onKeyPress: this.createKeyringOnEnter.bind(this),
style: {
width: 260,
width: '100%',
marginTop: 12,
border: '1px solid #e2e2e2',
},
}),
h('button.primary', {
h('button', {
onClick: this.createNewKeychain.bind(this),
style: {
margin: 12,
margin: 20,
},
}, 'Import'),

View File

@ -26,7 +26,7 @@ PrivateKeyImportView.prototype.render = function () {
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
padding: '5px 15px 0px 15px',
padding: '5px 30px 0px 30px',
},
}, [
h('span', 'Paste your private key string here'),
@ -36,15 +36,16 @@ PrivateKeyImportView.prototype.render = function () {
id: 'private-key-box',
onKeyPress: this.createKeyringOnEnter.bind(this),
style: {
width: 260,
width: '100%',
marginTop: 12,
border: '1px solid #e2e2e2',
},
}),
h('button.primary', {
h('button', {
onClick: this.createNewKeychain.bind(this),
style: {
margin: 12,
margin: 20,
},
}, 'Import'),

View File

@ -46,6 +46,10 @@ AddTokenScreen.prototype.render = function () {
onClick: (event) => {
props.dispatch(actions.goHome())
},
style: {
position: 'absolute',
left: '30px',
},
}),
h('h2.page-subtitle', 'Add Token'),
]),
@ -62,23 +66,16 @@ AddTokenScreen.prototype.render = function () {
h('.flex-column.flex-justify-center.flex-grow.select-none', [
h('.flex-space-around', {
style: {
padding: '20px',
padding: '30px',
},
}, [
h('div', [
h(Tooltip, {
position: 'top',
title: 'The contract of the actual token contract. Click for more info.',
title: 'The contract of the actual token contract.',
}, [
h('a', {
style: { fontWeight: 'bold', paddingRight: '10px'},
href: 'https://support.metamask.io/kb/article/24-what-is-a-token-contract-address',
target: '_blank',
}, [
h('span', 'Token Contract Address '),
h('i.fa.fa-question-circle'),
]),
h('span', 'Token Contract Address '),
]),
]),
@ -91,7 +88,10 @@ AddTokenScreen.prototype.render = function () {
width: 'inherit',
flex: '1 0 auto',
height: '30px',
margin: '8px',
margin: '10px 0',
borderRadius: '3px',
border: '1px solid #e2e2e2',
padding: '10px',
},
}),
]),
@ -110,7 +110,10 @@ AddTokenScreen.prototype.render = function () {
width: 'inherit',
flex: '1 0 auto',
height: '30px',
margin: '8px',
margin: '10px 0',
borderRadius: '3px',
border: '1px solid #e2e2e2',
padding: '10px',
},
onChange: (event) => {
var element = event.target
@ -136,7 +139,10 @@ AddTokenScreen.prototype.render = function () {
width: 'inherit',
flex: '1 0 auto',
height: '30px',
margin: '8px',
margin: '10px 0',
borderRadius: '3px',
border: '1px solid #e2e2e2',
padding: '10px',
},
onChange: (event) => {
var element = event.target
@ -149,6 +155,8 @@ AddTokenScreen.prototype.render = function () {
h('button', {
style: {
alignSelf: 'center',
float: 'right',
marginTop: '10px',
},
onClick: (event) => {
const valid = this.validateInputs()

View File

@ -26,7 +26,6 @@ const RemoveTokenScreen = require('./remove-token')
const Import = require('./accounts/import')
const InfoScreen = require('./info')
const Loading = require('./components/loading')
const SandwichExpando = require('sandwich-expando')
const Dropdown = require('./components/dropdown').Dropdown
const DropdownMenuItem = require('./components/dropdown').DropdownMenuItem
const NetworkIndicator = require('./components/network')
@ -102,6 +101,7 @@ App.prototype.render = function () {
overflow: 'hidden',
position: 'relative',
alignItems: 'center',
background: (props.isUnlocked || props.currentView.name === 'restoreVault' || props.currentView.name === 'config') ? 'white' : 'linear-gradient(rgb(84, 36, 147), rgb(104, 45, 182))',
},
}, [
@ -115,7 +115,7 @@ App.prototype.render = function () {
// panel content
h('.app-primary' + (transForward ? '.from-right' : '.from-left'), {
style: {
width: '100%',
background: (props.isUnlocked || props.currentView.name === 'restoreVault' || props.currentView.name === 'config') ? 'white' : 'transparent',
},
}, [
this.renderPrimary(),
@ -124,6 +124,13 @@ App.prototype.render = function () {
)
}
App.prototype.changeState = function (isMainMenuOpen) {
this.setState({
isMainMenuOpen,
sandwichClass: isMainMenuOpen ? 'sandwich-expando expanded' : 'sandwich-expando',
})
}
App.prototype.renderAppBar = function () {
if (window.METAMASK_UI_TYPE === 'notification') {
return null
@ -154,10 +161,20 @@ App.prototype.renderAppBar = function () {
style: {
alignItems: 'center',
visibility: props.isUnlocked ? 'visible' : 'none',
background: props.isUnlocked ? 'white' : 'none',
background: 'white',
height: '38px',
position: 'relative',
zIndex: 12,
/* borderBottom: (
props.currentView.name === 'config' ||
props.currentView.name === 'add-token' ||
props.currentView.name === 'info' ||
props.currentView.name === 'qr' ||
props.currentView.name === 'reveal-seed-conf' ||
props.currentView.name === 'createVaultComplete' ||
props.currentView.name === 'restoreVault' ||
props.currentView.name === 'import-menu'
) ? '1px solid #e2e2e2' : 'none',*/
},
}, [
@ -206,18 +223,14 @@ App.prototype.renderAppBar = function () {
}, []),
// hamburger
props.isUnlocked && h(SandwichExpando, {
className: 'sandwich-expando',
width: 16,
barHeight: 2,
padding: 0,
isOpen: state.isMainMenuOpen,
color: 'rgb(247,146,30)',
onClick: () => {
this.setState({
isMainMenuOpen: !state.isMainMenuOpen,
})
props.isUnlocked && h('div', {
className: state.sandwichClass || 'sandwich-expando',
style: {
width: 16,
height: 16,
padding: 0,
},
onClick: () => this.changeState(!state.isMainMenuOpen),
}),
]),
]),
@ -266,13 +279,13 @@ App.prototype.renderNetworkDropdown = function () {
closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }),
onClick: () => props.dispatch(actions.setProviderType('poa')),
style: {
fontSize: '18px',
paddingLeft: '20px',
fontSize: '16px',
color: providerType === 'poa' ? 'white' : '',
},
},
[
h('.menu-icon.purple-square'),
[h(providerType === 'poa' ? 'div.selected-network' : ''),
'POA Network',
providerType === 'poa' ? h('.check', '✓') : null,
]
),
@ -283,13 +296,13 @@ App.prototype.renderNetworkDropdown = function () {
closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }),
onClick: () => props.dispatch(actions.setProviderType('sokol')),
style: {
fontSize: '18px',
paddingLeft: '20px',
fontSize: '16px',
color: providerType === 'sokol' ? 'white' : '',
},
},
[
h('.menu-icon.green-square'),
[h(providerType === 'sokol' ? 'div.selected-network' : ''),
'POA Sokol Test Network',
providerType === 'sokol' ? h('.check', '✓') : null,
]
),
@ -300,13 +313,13 @@ App.prototype.renderNetworkDropdown = function () {
closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }),
onClick: () => props.dispatch(actions.setProviderType('mainnet')),
style: {
fontSize: '18px',
paddingLeft: '20px',
fontSize: '16px',
color: providerType === 'mainnet' ? 'white' : '',
},
},
[
h('.menu-icon.diamond'),
[h(providerType === 'mainnet' ? 'div.selected-network' : ''),
'Main Ethereum Network',
providerType === 'mainnet' ? h('.check', '✓') : null,
]
),
@ -317,13 +330,13 @@ App.prototype.renderNetworkDropdown = function () {
closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }),
onClick: () => props.dispatch(actions.setProviderType('ropsten')),
style: {
fontSize: '18px',
paddingLeft: '20px',
fontSize: '16px',
color: providerType === 'ropsten' ? 'white' : '',
},
},
[
h('.menu-icon.red-dot'),
[h(providerType === 'ropsten' ? 'div.selected-network' : ''),
'Ropsten Test Network',
providerType === 'ropsten' ? h('.check', '✓') : null,
]
),
@ -334,13 +347,13 @@ App.prototype.renderNetworkDropdown = function () {
closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }),
onClick: () => props.dispatch(actions.setProviderType('kovan')),
style: {
fontSize: '18px',
paddingLeft: '20px',
fontSize: '16px',
color: providerType === 'kovan' ? 'white' : '',
},
},
[
h('.menu-icon.hollow-diamond'),
[h(providerType === 'kovan' ? 'div.selected-network' : ''),
'Kovan Test Network',
providerType === 'kovan' ? h('.check', '✓') : null,
]
),
@ -351,13 +364,13 @@ App.prototype.renderNetworkDropdown = function () {
closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }),
onClick: () => props.dispatch(actions.setProviderType('rinkeby')),
style: {
fontSize: '18px',
paddingLeft: '20px',
fontSize: '16px',
color: providerType === 'rinkeby' ? 'white' : '',
},
},
[
h('.menu-icon.golden-square'),
[h(providerType === 'rinkeby' ? 'div.selected-network' : ''),
'Rinkeby Test Network',
providerType === 'rinkeby' ? h('.check', '✓') : null,
]
),
@ -368,13 +381,13 @@ App.prototype.renderNetworkDropdown = function () {
closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }),
onClick: () => props.dispatch(actions.setProviderType('localhost')),
style: {
fontSize: '18px',
paddingLeft: '20px',
fontSize: '16px',
color: activeNetwork === 'http://localhost:8545' ? 'white' : '',
},
},
[
h('i.fa.fa-question-circle.fa-lg.menu-icon'),
[h(activeNetwork === 'http://localhost:8545' ? 'div.selected-network' : ''),
'Localhost 8545',
activeNetwork === 'http://localhost:8545' ? h('.check', '✓') : null,
]
),
@ -387,13 +400,13 @@ App.prototype.renderNetworkDropdown = function () {
closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }),
onClick: () => this.props.dispatch(actions.showConfigPage()),
style: {
fontSize: '18px',
paddingLeft: '20px',
fontSize: '16px',
color: '#8fdc97',
},
},
[
h('i.fa.fa-question-circle.fa-lg.menu-icon'),
'Custom RPC',
activeNetwork === 'custom' ? h('.check', '✓') : null,
]
),
@ -403,6 +416,7 @@ App.prototype.renderNetworkDropdown = function () {
App.prototype.renderDropdown = function () {
const state = this.state || {}
const isOpen = state.isMainMenuOpen
const isMainMenuOpen = !isOpen
return h(Dropdown, {
useCssTransition: true,
@ -416,7 +430,10 @@ App.prototype.renderDropdown = function () {
parentClassList.contains('sandwich-expando')
if (isOpen && !isToggleElement) {
this.setState({ isMainMenuOpen: false })
this.setState({
isMainMenuOpen: false,
sandwichClass: 'sandwich-expando',
})
}
},
style: {
@ -427,17 +444,17 @@ App.prototype.renderDropdown = function () {
innerStyle: {},
}, [
h(DropdownMenuItem, {
closeMenu: () => this.setState({ isMainMenuOpen: !isOpen }),
closeMenu: () => this.changeState(isMainMenuOpen),
onClick: () => { this.props.dispatch(actions.showConfigPage()) },
}, 'Settings'),
h(DropdownMenuItem, {
closeMenu: () => this.setState({ isMainMenuOpen: !isOpen }),
closeMenu: () => this.changeState(isMainMenuOpen),
onClick: () => { this.props.dispatch(actions.lockMetamask()) },
}, 'Log Out'),
h(DropdownMenuItem, {
closeMenu: () => this.setState({ isMainMenuOpen: !isOpen }),
closeMenu: () => this.changeState(isMainMenuOpen),
onClick: () => { this.props.dispatch(actions.showInfoPage()) },
}, 'Info/Help'),
])
@ -600,19 +617,31 @@ App.prototype.renderPrimary = function () {
log.debug('rendering show qr screen')
return h('div', {
style: {
position: 'absolute',
height: '100%',
top: '0px',
left: '0px',
width: '100%',
},
}, [
h('i.fa.fa-arrow-left.fa-lg.cursor-pointer.color-orange', {
onClick: () => props.dispatch(actions.backToAccountDetail(props.selectedAddress)),
style: {
marginLeft: '10px',
marginTop: '50px',
},
}),
h('.section-title.flex-row.flex-center', [
h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', {
onClick: () => props.dispatch(actions.backToAccountDetail(props.selectedAddress)),
style: {
marginLeft: '30px',
marginTop: '5px',
position: 'absolute',
left: '0',
},
}),
h('h2.page-subtitle', {
style: {
fontFamily: 'Nunito SemiBold',
marginTop: '10px',
marginBottom: '0px',
textAlign: 'center',
},
}, 'QR Code'),
]),
h('div', {
style: {
position: 'absolute',
@ -669,11 +698,14 @@ App.prototype.renderCustomOption = function (provider) {
key: rpcTarget,
onClick: () => props.dispatch(actions.setRpcTarget(rpcTarget)),
closeMenu: () => this.setState({ isNetworkMenuOpen: false }),
style: {
paddingLeft: '20px',
fontSize: '16px',
color: 'white',
},
},
[
h('i.fa.fa-question-circle.fa-lg.menu-icon'),
[h('div.selected-network'),
label,
h('.check', '✓'),
]
)
}
@ -718,9 +750,12 @@ App.prototype.renderCommonRpc = function (rpcList, provider) {
key: `common${rpc}`,
closeMenu: () => this.setState({ isNetworkMenuOpen: false }),
onClick: () => props.dispatch(actions.setRpcTarget(rpc)),
style: {
paddingLeft: '20px',
fontSize: '16px',
},
},
[
h('i.fa.fa-question-circle.fa-lg.menu-icon'),
rpc,
]
)

View File

@ -18,7 +18,7 @@ class AccountDropdowns extends Component {
optionsMenuActive: false,
}
this.accountSelectorToggleClassName = 'accounts-selector'
this.optionsMenuToggleClassName = 'fa-ellipsis-h'
this.optionsMenuToggleClassName = 'account-dropdown'
}
renderAccounts () {
@ -45,13 +45,23 @@ class AccountDropdowns extends Component {
},
style: {
marginTop: index === 0 ? '5px' : '',
fontSize: '24px',
fontSize: '16px',
},
},
[
isSelected ? h('div', {
style: {
width: '4px',
height: '32px',
background: '#8fdc97',
position: 'absolute',
left: '-25px',
},
}) : null,
h(
Identicon,
{
overflow: 'none',
address: identity.address,
diameter: 32,
style: {
@ -63,14 +73,14 @@ class AccountDropdowns extends Component {
h('span', {
style: {
marginLeft: '20px',
fontSize: '24px',
fontSize: '16px',
maxWidth: '145px',
whiteSpace: 'nowrap',
overflow: 'hidden',
textOverflow: 'ellipsis',
color: isSelected ? 'white' : '',
},
}, identity.name || ''),
h('span', { style: { marginLeft: '20px', fontSize: '24px' } }, isSelected ? h('.check', '✓') : null),
]
)
})
@ -93,12 +103,12 @@ class AccountDropdowns extends Component {
{
useCssTransition: true, // Hardcoded because account selector is temporarily in app-header
style: {
marginLeft: '-238px',
marginTop: '38px',
marginLeft: '-168px',
marginTop: '32px',
minWidth: '180px',
overflowY: 'auto',
maxHeight: '300px',
width: '300px',
width: '220px',
},
innerStyle: {
padding: '8px 25px',
@ -121,16 +131,7 @@ class AccountDropdowns extends Component {
onClick: () => actions.addNewAccount(),
},
[
h(
Identicon,
{
style: {
marginLeft: '10px',
},
diameter: 32,
},
),
h('span', { style: { marginLeft: '20px', fontSize: '24px' } }, 'Create Account'),
h('span', { style: { fontSize: '16px', color: '#8fdc97' } }, 'Create Account'),
],
),
h(
@ -140,20 +141,11 @@ class AccountDropdowns extends Component {
onClick: () => actions.showImportPage(),
},
[
h(
Identicon,
{
style: {
marginLeft: '10px',
},
diameter: 32,
},
),
h('span', {
style: {
marginLeft: '20px',
fontSize: '24px',
fontSize: '16px',
marginBottom: '5px',
color: '#8fdc97',
},
}, 'Import Account'),
]
@ -187,8 +179,9 @@ class AccountDropdowns extends Component {
Dropdown,
{
style: {
marginLeft: '-215px',
marginLeft: '-237px',
minWidth: '180px',
marginTop: '30px',
},
isOpen: optionsMenuActive,
onClickOutside: (event) => {
@ -262,14 +255,13 @@ class AccountDropdowns extends Component {
[
enableAccountsSelector && h(
// 'i.fa.fa-angle-down',
'div.cursor-pointer.color-orange.accounts-selector',
'div.accounts-selector',
{
style: {
// fontSize: '1.8em',
background: 'url(images/switch_acc.svg) white center center no-repeat',
height: '25px',
width: '25px',
transform: 'scale(0.75)',
marginRight: '3px',
},
onClick: (event) => {
@ -283,11 +275,14 @@ class AccountDropdowns extends Component {
this.renderAccountSelector(),
),
enableAccountOptions && h(
'i.fa.fa-ellipsis-h',
'div.account-dropdown',
{
style: {
margin: '0.5em',
fontSize: '1.8em',
backgroundImage: 'url(../images/more.svg)',
width: '30px',
height: '24px',
backgroundRepeat: 'no-repeat',
backgroundPosition: 'center',
},
onClick: (event) => {
event.stopPropagation()

View File

@ -2,10 +2,10 @@ const Component = require('react').Component
const h = require('react-hyperscript')
const inherits = require('util').inherits
const exportAsFile = require('../util').exportAsFile
const copyToClipboard = require('copy-to-clipboard')
const actions = require('../../../ui/app/actions')
const ethUtil = require('ethereumjs-util')
const connect = require('react-redux').connect
const CopyButton = require('./copyButton')
module.exports = connect(mapStateToProps)(ExportAccountView)
@ -35,49 +35,59 @@ ExportAccountView.prototype.render = function () {
if (notExporting) return h('div')
if (exportRequested) {
const warning = `Export private keys at your own risk.`
const warning = `Export private keys at your own risk`
return (
h('div', {
style: {
display: 'inline-block',
textAlign: 'center',
textAlign: 'right',
width: '100%',
},
},
[
h('div', {
key: 'exporting',
style: {
margin: '0 20px',
margin: '0 30px',
},
}, [
h('p.error', warning),
h('p.error', {
style: {
color: '#333333',
marginBottom: '0px',
marginTop: '30px',
textAlign: 'center',
},
}, warning),
h('input#exportAccount.sizing-input', {
type: 'password',
placeholder: 'confirm password',
placeholder: 'Confirm Password',
onKeyPress: this.onExportKeyPress.bind(this),
style: {
position: 'relative',
top: '1.5px',
marginBottom: '7px',
top: '27px',
marginBottom: '20px',
width: '100%',
padding: '10px',
},
}),
]),
h('div', {
key: 'buttons',
style: {
margin: '0 20px',
margin: '25px 30px',
},
},
[
h('button', {
onClick: () => this.onExportKeyPress({ key: 'Enter', preventDefault: () => {} }),
h('button.btn-violet', {
onClick: () => this.props.dispatch(actions.backToAccountDetail(this.props.address)),
style: {
marginRight: '10px',
},
}, 'Submit'),
h('button', {
onClick: () => this.props.dispatch(actions.backToAccountDetail(this.props.address)),
}, 'Cancel'),
h('button', {
onClick: () => this.onExportKeyPress({ key: 'Enter', preventDefault: () => {} }),
}, 'Submit'),
]),
(this.props.warning) && (
h('span.error', {
@ -95,30 +105,54 @@ ExportAccountView.prototype.render = function () {
return h('div.privateKey', {
style: {
margin: '0 20px',
margin: '30px 30px',
width: '100%',
textAlign: 'center',
},
}, [
h('label', 'Your private key (click to copy):'),
h('p.error.cursor-pointer', {
h('label', {
style: {
textOverflow: 'ellipsis',
overflow: 'hidden',
webkitUserSelect: 'text',
maxWidth: '275px',
textAlign: 'center',
},
onClick: function (event) {
copyToClipboard(ethUtil.stripHexPrefix(accountDetail.privateKey))
},
}, plainKey),
h('button', {
onClick: () => this.props.dispatch(actions.backToAccountDetail(this.props.address)),
}, 'Done'),
h('button', {
}, 'Your private key'),
h('div.flex-row', [
h('p.error', {
style: {
paddingTop: '25px',
textOverflow: 'ellipsis',
overflow: 'hidden',
webkitUserSelect: 'text',
maxWidth: '275px',
color: '#333333',
textAlign: 'center',
marginBottom: '0px',
},
}, plainKey),
h('div', {
style: {
paddingTop: '25px',
},
}, h(CopyButton, {
value: accountDetail.privateKey,
})
),
]),
h('div', {
style: {
marginLeft: '10px',
textAlign: 'right',
marginTop: '30px',
},
onClick: () => exportAsFile(`Nifty Wallet ${nickname} Private Key`, plainKey),
}, 'Save as File'),
}, [
h('button.btn-violet', {
onClick: () => exportAsFile(`Nifty Wallet ${nickname} Private Key`, plainKey),
}, 'Save as File'),
h('button', {
style: {
marginLeft: '10px',
},
onClick: () => this.props.dispatch(actions.backToAccountDetail(this.props.address)),
}, 'Done'),
]),
])
}
}

View File

@ -36,6 +36,8 @@ AccountPanel.prototype.render = function () {
h('.identity-panel.flex-row.flex-space-between', {
style: {
background: 'linear-gradient(rgb(84, 36, 147), rgb(104, 45, 182))',
padding: '20px 20px',
flex: '1 0 auto',
cursor: panelState.onClick ? 'pointer' : undefined,
},
@ -48,7 +50,11 @@ AccountPanel.prototype.render = function () {
address: panelState.identiconKey,
imageify: state.imageifyIdenticons,
}),
h('span.font-small', panelState.identiconLabel.substring(0, 7) + '...'),
h('span.font-small', {
style: {
color: '#ffffff',
},
}, panelState.identiconLabel.substring(0, 7) + '...'),
]),
// account address, balance
@ -58,8 +64,16 @@ AccountPanel.prototype.render = function () {
return h('.flex-row.flex-space-between', {
key: '' + Math.round(Math.random() * 1000000),
}, [
h('label.font-small.no-select', attr.key),
h('span.font-small', attr.value),
h('label.font-small.no-select', {
style: {
color: '#ffffff',
},
}, attr.key),
h('span.font-small', {
style: {
color: '#ffffff',
},
}, attr.value),
])
}),
]),

View File

@ -62,8 +62,8 @@ EthBalanceComponent.prototype.renderBalance = function (value) {
h('.flex-row', {
style: {
alignItems: 'flex-end',
lineHeight: '13px',
fontFamily: 'Montserrat Light',
lineHeight: '14px',
fontFamily: 'Nunito Bold',
textRendering: 'geometricPrecision',
},
}, [

View File

@ -41,7 +41,6 @@ BnAsDecimalInput.prototype.render = function () {
style: {
alignItems: 'flex-end',
lineHeight: '13px',
fontFamily: 'Montserrat Light',
textRendering: 'geometricPrecision',
},
}, [
@ -55,8 +54,11 @@ BnAsDecimalInput.prototype.render = function () {
display: 'block',
textAlign: 'right',
backgroundColor: 'transparent',
border: '1px solid #bdbdbd',
height: '32px',
borderRadius: '3px',
border: '1px solid #e2e2e2',
fontFamily: 'Nunito Regular',
fontSize: '14px',
}, style),
value: newValue,
onBlur: (event) => {
@ -83,11 +85,12 @@ BnAsDecimalInput.prototype.render = function () {
}),
h('div', {
style: {
color: ' #AEAEAE',
fontSize: '12px',
color: ' #333333',
fontFamily: 'Nunito Regular',
fontSize: '14px',
marginLeft: '5px',
marginRight: '6px',
width: '20px',
width: '29px',
lineHeight: '32px',
},
}, suffix),
]),

View File

@ -65,18 +65,18 @@ BuyButtonSubview.prototype.headerSubview = function () {
justifyContent: 'center',
},
}, [
h('i.fa.fa-arrow-left.fa-lg.cursor-pointer.color-orange', {
h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', {
onClick: this.backButtonContext.bind(this),
style: {
position: 'absolute',
left: '10px',
left: '30px',
},
}),
h('h2.text-transform-uppercase.flex-center', {
h('h2.flex-center', {
style: {
width: '100vw',
background: 'rgb(235, 235, 235)',
color: 'rgb(174, 174, 174)',
background: '#ffffff',
color: '#333333',
paddingTop: '4px',
paddingBottom: '4px',
},
@ -97,7 +97,7 @@ BuyButtonSubview.prototype.headerSubview = function () {
// account panel
h('div', {
style: {
width: '80%',
width: '100%',
},
}, [
h(AccountPanel, {
@ -114,13 +114,13 @@ BuyButtonSubview.prototype.headerSubview = function () {
justifyContent: 'center',
},
}, [
h('h3.text-transform-uppercase.flex-center', {
h('h3.flex-center', {
style: {
paddingLeft: '15px',
width: '100vw',
background: 'rgb(235, 235, 235)',
color: 'rgb(174, 174, 174)',
paddingTop: '4px',
background: '#ffffff',
color: '#333333',
paddingTop: '30px',
paddingBottom: '4px',
},
}, 'Select Service'),
@ -158,25 +158,25 @@ BuyButtonSubview.prototype.primarySubview = function () {
margin: '20px 50px',
},
}, [
network !== '99' ? h('button.text-transform-uppercase', {
network !== '99' ? h('button', {
onClick: () => this.props.dispatch(actions.buyEth({ network })),
style: {
marginTop: '15px',
},
}, label) : null,
network === '99' ? h('button.text-transform-uppercase', {
network === '99' ? h('button', {
onClick: () => this.props.dispatch(actions.buyEth({ network, exchange: 'binance' })),
style: {
marginTop: '15px',
},
}, 'Binance') : null,
network === '99' ? h('button.text-transform-uppercase', {
network === '99' ? h('button', {
onClick: () => this.props.dispatch(actions.buyEth({ network, exchange: 'bibox' })),
style: {
marginTop: '15px',
},
}, 'BiBox') : null,
network === '99' ? h('button.text-transform-uppercase', {
network === '99' ? h('button', {
onClick: () => this.props.dispatch(actions.buyEth({ network, exchange: 'cex.plus' })),
style: {
marginTop: '15px',
@ -184,7 +184,7 @@ BuyButtonSubview.prototype.primarySubview = function () {
}, 'CEX Plus') : null,
// Kovan only: Dharma loans beta
network === '42' ? (
h('button.text-transform-uppercase', {
h('button', {
onClick: () => this.navigateTo('https://borrow.dharma.io/'),
style: {
marginTop: '15px',
@ -235,13 +235,13 @@ BuyButtonSubview.prototype.mainnetSubview = function () {
}),
]),
h('h3.text-transform-uppercase', {
h('h3', {
style: {
paddingLeft: '15px',
fontFamily: 'Montserrat Light',
fontFamily: 'Nunito Light',
width: '100vw',
background: 'rgb(235, 235, 235)',
color: 'rgb(174, 174, 174)',
background: '#6729a8',
color: '#ffffff',
paddingTop: '4px',
paddingBottom: '4px',
},

View File

@ -23,8 +23,7 @@ CoinbaseForm.prototype.render = function () {
return h('.flex-column', {
style: {
marginTop: '35px',
padding: '25px',
marginTop: '30px',
width: '100%',
},
}, [
@ -37,6 +36,9 @@ CoinbaseForm.prototype.render = function () {
}, [
h('button.btn-green', {
onClick: this.toCoinbase.bind(this),
style: {
marginRight: '10px',
},
}, 'Continue to Coinbase'),
h('button.btn-red', {

View File

@ -34,7 +34,7 @@ CopyButton.prototype.render = function () {
h(Tooltip, {
title: message,
}, [
h('i.fa.fa-clipboard.cursor-pointer.color-orange', {
h('i.fa.fa-clipboard.cursor-pointer.color-violet', {
style: {
margin: '5px',
},

View File

@ -30,6 +30,10 @@ DeleteRpc.prototype.render = function () {
onClick: () => {
this.props.dispatch(actions.showConfigPage())
},
style: {
position: 'absolute',
left: '30px',
},
}),
h('h2.page-subtitle', 'Delete Custom RPC'),
]),

View File

@ -12,8 +12,8 @@ class Dropdown extends Component {
const innerStyleDefaults = extend({
borderRadius: '4px',
padding: '8px 16px',
background: 'rgba(0, 0, 0, 0.8)',
padding: '15px 30px',
background: 'rgba(71, 28, 115, 0.95)',
boxShadow: 'rgba(0, 0, 0, 0.15) 0px 2px 2px 2px',
}, innerStyle)
@ -31,8 +31,8 @@ class Dropdown extends Component {
h(
'style',
`
li.dropdown-menu-item:hover { color:rgb(225, 225, 225); }
li.dropdown-menu-item { color: rgb(185, 185, 185); position: relative }
li.dropdown-menu-item:hover { color:#ffffff; }
li.dropdown-menu-item { color: rgba(255, 255, 255, 0.5); position: relative }
`
),
...children,
@ -70,10 +70,10 @@ class DropdownMenuItem extends Component {
},
style: Object.assign({
listStyle: 'none',
padding: '8px 0px 8px 0px',
fontSize: '18px',
padding: '15px 0px 15px 0px',
fontSize: '16px',
fontStyle: 'normal',
fontFamily: 'Montserrat Regular',
fontFamily: 'Nunito Regular',
cursor: 'pointer',
display: 'flex',
justifyContent: 'flex-start',

View File

@ -54,6 +54,17 @@ EthBalanceComponent.prototype.renderBalance = function (value) {
}
var label = balanceObj.label
const valueStyle = props.valueStyle ? props.valueStyle : {
color: '#ffffff',
width: '100%',
fontSize: props.fontSize || '14px',
textAlign: 'right',
}
const dimStyle = props.dimStyle ? props.dimStyle : {
color: ' #60db97',
fontSize: props.fontSize || '14px',
marginLeft: '5px',
}
return (
h(Tooltip, {
@ -63,27 +74,19 @@ EthBalanceComponent.prototype.renderBalance = function (value) {
h('.flex-row', {
style: {
alignItems: 'flex-end',
lineHeight: '13px',
fontFamily: 'Montserrat Light',
lineHeight: '20px',
textRendering: 'geometricPrecision',
},
}, [
h('div', {
style: {
width: '100%',
textAlign: 'right',
},
style: valueStyle,
}, incoming ? `+${balance}` : balance),
h('div', {
style: {
color: ' #AEAEAE',
fontSize: '12px',
marginLeft: '5px',
},
style: dimStyle,
}, label),
]),
showFiat ? h(FiatValue, { value: props.value, conversionRate, currentCurrency, network: props.network }) : null,
showFiat ? h(FiatValue, { valueStyle, dimStyle, value: props.value, conversionRate, currentCurrency, network: props.network }) : null,
]))
)
}

View File

@ -29,33 +29,37 @@ FiatValue.prototype.render = function () {
fiatTooltipNumber = Number(splitBalance[0]) * conversionRate
fiatDisplayNumber = fiatTooltipNumber.toFixed(2)
return fiatDisplay(fiatDisplayNumber, renderedCurrency.toUpperCase())
const valueStyle = props.valueStyle ? props.valueStyle : {
width: '100%',
textAlign: 'right',
fontSize: '14px',
color: '#ffffff',
}
const dimStyle = props.dimStyle ? props.dimStyle : {
color: '#60db97',
marginLeft: '5px',
fontSize: '14px',
}
return fiatDisplay(fiatDisplayNumber, valueStyle, dimStyle, renderedCurrency.toUpperCase())
}
function fiatDisplay (fiatDisplayNumber, fiatSuffix) {
function fiatDisplay (fiatDisplayNumber, valueStyle, dimStyle, fiatSuffix) {
if (fiatDisplayNumber !== 'N/A') {
return h('.flex-row', {
style: {
alignItems: 'flex-end',
lineHeight: '13px',
fontFamily: 'Montserrat Light',
lineHeight: '14px',
textRendering: 'geometricPrecision',
},
}, [
h('div', {
style: {
width: '100%',
textAlign: 'right',
fontSize: '12px',
color: '#333333',
},
style: valueStyle,
}, fiatDisplayNumber),
h('div', {
style: {
color: '#AEAEAE',
marginLeft: '5px',
fontSize: '12px',
},
style: dimStyle,
}, fiatSuffix),
])
} else {

View File

@ -38,8 +38,8 @@ HexAsDecimalInput.prototype.render = function () {
h('.flex-row', {
style: {
alignItems: 'flex-end',
lineHeight: '13px',
fontFamily: 'Montserrat Light',
lineHeight: '14px',
fontFamily: 'Nunito Bold',
textRendering: 'geometricPrecision',
},
}, [

View File

@ -29,7 +29,7 @@ IdenticonComponent.prototype.render = function () {
height: diameter,
width: diameter,
borderRadius: diameter / 2,
overflow: 'hidden',
overflow: (props.overflow || 'hidden'),
},
})
)

View File

@ -18,7 +18,7 @@ AccountPanel.prototype.render = function () {
return (
h('.identity-panel.flex-row.flex-left', {
h('.identity-panel.flex-row.flex-center.flex-left', {
style: {
cursor: props.onClick ? 'pointer' : undefined,
},
@ -66,6 +66,7 @@ AccountPanel.prototype.genIcon = function (seed, picOrder) {
},
}, [
h(Identicon, {
diameter: 40,
address: seed,
imageify: props.imageifyIdenticons,
}),

View File

@ -76,77 +76,71 @@ Network.prototype.render = function () {
switch (iconName) {
case 'ethereum-network':
return h('.network-indicator', [
h('.menu-icon.diamond'),
h('.network-name', {
style: {
color: '#039396',
paddingLeft: '9px',
color: '#6729a8',
}},
'Main Network'),
props.onClick && h('i.fa.fa-caret-down.fa-lg'),
])
case 'sokol-test-network':
return h('.network-indicator', [
h('.menu-icon.green-square'),
h('.network-name', {
style: {
color: '#62c9ba',
paddingLeft: '9px',
color: '#6729a8',
}},
[ h('div', 'Sokol'),
h('div', 'Test Net') ]),
'Sokol Network'),
props.onClick && h('i.fa.fa-caret-down.fa-lg'),
])
case 'ropsten-test-network':
return h('.network-indicator', [
h('.menu-icon.red-dot'),
h('.network-name', {
style: {
color: '#ff6666',
paddingLeft: '9px',
color: '#6729a8',
}},
'Ropsten Test Net'),
props.onClick && h('i.fa.fa-caret-down.fa-lg'),
])
case 'kovan-test-network':
return h('.network-indicator', [
h('.menu-icon.hollow-diamond'),
h('.network-name', {
style: {
color: '#690496',
paddingLeft: '9px',
color: '#6729a8',
}},
'Kovan Test Net'),
props.onClick && h('i.fa.fa-caret-down.fa-lg'),
])
case 'rinkeby-test-network':
return h('.network-indicator', [
h('.menu-icon.golden-square'),
h('.network-name', {
style: {
color: '#e7a218',
paddingLeft: '9px',
color: '#6729a8',
}},
'Rinkeby Test Net'),
props.onClick && h('i.fa.fa-caret-down.fa-lg'),
])
case 'poa-network':
return h('.network-indicator', [
h('.menu-icon.purple-square'),
h('.network-name', {
style: {
color: '#5c34a2',
paddingLeft: '9px',
color: '#6729a8',
}},
'POA Network'),
props.onClick && h('i.fa.fa-caret-down.fa-lg'),
])
default:
return h('.network-indicator', [
h('i.fa.fa-question-circle.fa-lg', {
style: {
margin: '10px',
color: 'rgb(125, 128, 130)',
},
}),
h('.network-name', {
style: {
color: '#AEAEAE',
paddingLeft: '9px',
color: '#6729a8',
}},
'Private Network'),
props.onClick && h('i.fa.fa-caret-down.fa-lg'),

View File

@ -14,8 +14,8 @@ function Notice () {
Notice.prototype.render = function () {
const { notice, onConfirm } = this.props
const { title, date, body } = notice
const state = this.state || { disclaimerDisabled: false }
const { title, body } = notice
const state = this.state || { disclaimerDisabled: true }
const disabled = state.disclaimerDisabled
return (
@ -24,33 +24,20 @@ Notice.prototype.render = function () {
width: '100%',
},
}, [
h('h3.flex-center.text-transform-uppercase.terms-header', {
h('h3.flex-center.terms-header.section-title', {
style: {
background: '#EBEBEB',
color: '#AEAEAE',
background: '#ffffff',
color: '#333333',
width: '100%',
fontSize: '20px',
fontSize: '16px',
textAlign: 'center',
padding: 6,
marginBottom: 24,
},
}, [
title,
]),
h('h5.flex-center.text-transform-uppercase.terms-header', {
style: {
background: '#EBEBEB',
color: '#AEAEAE',
marginBottom: 24,
width: '100%',
fontSize: '20px',
textAlign: 'center',
padding: 6,
},
}, [
date,
]),
h('style', `
.markdown {
@ -74,7 +61,7 @@ Notice.prototype.render = function () {
}
.markdown a {
color: #df6b0e;
color: #8fdc97;
}
`),
@ -87,12 +74,13 @@ Notice.prototype.render = function () {
}
},
style: {
background: 'rgb(235, 235, 235)',
background: '#ffffff',
height: '310px',
padding: '6px',
width: '90%',
overflowY: 'scroll',
scroll: 'auto',
borderRadius: '3px',
},
}, [
h(ReactMarkdown, {
@ -105,7 +93,7 @@ Notice.prototype.render = function () {
h('button', {
disabled,
onClick: () => {
this.setState({disclaimerDisabled: false})
this.setState({disclaimerDisabled: true})
onConfirm()
},
style: {
@ -120,7 +108,7 @@ Notice.prototype.componentDidMount = function () {
// eslint-disable-next-line react/no-find-dom-node
var node = findDOMNode(this)
linker.setupListener(node)
if (document.getElementsByClassName('notice-box')[0].clientHeight < 310) {
if (document.getElementsByClassName('notice-box')[0].clientHeight < 300) {
this.setState({disclaimerDisabled: false})
}
}

View File

@ -13,13 +13,18 @@ const MiniAccountPanel = require('./mini-account-panel')
const Copyable = require('./copyable')
const EthBalance = require('./eth-balance')
const addressSummary = util.addressSummary
const accountSummary = util.accountSummary
const nameForAddress = require('../../lib/contract-namer')
const BNInput = require('./bn-as-decimal-input')
const { getEnvironmentType } = require('../../../app/scripts/lib/util')
const NetworkIndicator = require('../components/network')
const { ENVIRONMENT_TYPE_NOTIFICATION } = require('../../../app/scripts/lib/enums')
const connect = require('react-redux').connect
const MIN_GAS_PRICE_BN = new BN('0')
const MIN_GAS_LIMIT_BN = new BN('21000')
module.exports = PendingTx
module.exports = connect(mapStateToProps)(PendingTx)
inherits(PendingTx, Component)
function PendingTx () {
Component.call(this)
@ -30,9 +35,29 @@ function PendingTx () {
}
}
function mapStateToProps (state) {
return {
identities: state.metamask.identities,
accounts: state.metamask.accounts,
selectedAddress: state.metamask.selectedAddress,
unapprovedTxs: state.metamask.unapprovedTxs,
unapprovedMsgs: state.metamask.unapprovedMsgs,
unapprovedPersonalMsgs: state.metamask.unapprovedPersonalMsgs,
unapprovedTypedMessages: state.metamask.unapprovedTypedMessages,
index: state.appState.currentView.context,
warning: state.appState.warning,
network: state.metamask.network,
provider: state.metamask.provider,
conversionRate: state.metamask.conversionRate,
currentCurrency: state.metamask.currentCurrency,
blockGasLimit: state.metamask.currentBlockGasLimit,
computedBalances: state.metamask.computedBalances,
}
}
PendingTx.prototype.render = function () {
const props = this.props
const { currentCurrency, blockGasLimit, network } = props
const { currentCurrency, blockGasLimit, network, provider } = props
const conversionRate = props.conversionRate
const txMeta = this.gatherTxMeta()
@ -83,8 +108,26 @@ PendingTx.prototype.render = function () {
const buyDisabled = insufficientBalance || !this.state.valid || !isValidAddress || this.state.submitting
const showRejectAll = props.unconfTxListLength > 1
var isNotification = getEnvironmentType(window.location.href) === ENVIRONMENT_TYPE_NOTIFICATION
this.inputs = []
const valueStyle = {
fontFamily: 'Nunito Bold',
width: '100%',
textAlign: 'right',
fontSize: '14px',
color: '#333333',
}
const dimStyle = {
color: '#333333',
marginLeft: '5px',
fontSize: '14px',
}
const isError = txMeta.simulationFails || !isValidAddress || insufficientBalance || (dangerousGasLimit && !gasLimitSpecified)
return (
h('div', {
@ -102,42 +145,87 @@ PendingTx.prototype.render = function () {
h('.flex-row.flex-center', {
style: {
maxWidth: '100%',
padding: showRejectAll ? '20px 20px 50px 20px' : '20px 20px 20px 20px',
background: 'linear-gradient(rgb(84, 36, 147), rgb(104, 45, 182))',
position: 'relative',
},
}, [
h('div', {
style: {
position: 'absolute',
bottom: '20px',
width: '100%',
textAlign: 'center',
color: '#ffffff',
},
}, [
h('h3', {
style: {
alignSelf: 'center',
display: props.unconfTxListLength > 1 ? 'block' : 'none',
fontSize: '14px',
},
}, [
h('i.fa.white-arrow-left.fa-lg.cursor-pointer', {
style: {
display: props.index === 0 ? 'none' : 'inline-block',
},
onClick: () => props.dispatch(actions.previousTx()),
}),
` ${props.index + 1} of ${props.unconfTxListLength} `,
h('i.fa.white-arrow-right.fa-lg.cursor-pointer', {
style: {
display: props.index + 1 === props.unconfTxListLength ? 'none' : 'inline-block',
},
onClick: () => props.dispatch(actions.nextTx()),
}),
])]
),
h(MiniAccountPanel, {
imageSeed: address,
picOrder: 'right',
picOrder: 'left',
}, [
h('span.font-small', {
h('div', {
style: {
fontFamily: 'Montserrat Bold, Montserrat, sans-serif',
marginLeft: '10px',
},
}, identity.name),
h(Copyable, {
value: ethUtil.toChecksumAddress(address),
}, [
h('div.font-pre-medium', {
style: {
fontFamily: 'Nunito SemiBold',
color: '#ffffff',
whiteSpace: 'nowrap',
},
}, accountSummary(identity.name, 6, 4)),
h(Copyable, {
value: ethUtil.toChecksumAddress(address),
}, [
h('span.font-small', {
style: {
fontFamily: 'Nunito Regular',
color: 'rgba(255, 255, 255, 0.7)',
},
}, addressSummary(address, 6, 4, false)),
]),
h('span.font-small', {
style: {
fontFamily: 'Montserrat Light, Montserrat, sans-serif',
fontFamily: 'Nunito Regular',
},
}, addressSummary(address, 6, 4, false)),
]),
h('span.font-small', {
style: {
fontFamily: 'Montserrat Light, Montserrat, sans-serif',
},
}, [
h(EthBalance, {
value: balance,
conversionRate,
currentCurrency,
network,
inline: true,
labelColor: '#F7861C',
}),
}, [
h(EthBalance, {
fontSize: '12px',
value: balance,
conversionRate,
currentCurrency,
network,
inline: true,
labelColor: '#F7861C',
}),
]),
]),
]),
@ -150,29 +238,93 @@ PendingTx.prototype.render = function () {
.table-box {
margin: 7px 0px 0px 0px;
width: 100%;
position: relative;
}
.table-box .row {
margin: 0px;
background: rgb(236,236,236);
background: #ffffff;
display: flex;
justify-content: space-between;
font-family: Montserrat Light, sans-serif;
font-size: 13px;
padding: 5px 25px;
font-family: Nunito Regular;
font-size: 14px;
padding: 5px 30px;
}
.table-box .row .value {
font-family: Montserrat Regular;
font-family: Nunito Regular;
}
`),
h('.table-box', [
h('.flex-row.flex-center', {
style: {
marginTop: '20px',
marginBottom: '30px',
},
}, [
!isNotification ? h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', {
onClick: this.goHome.bind(this),
style: {
position: 'absolute',
left: '30px',
},
}) : null,
'Confirm Transaction',
isNotification ? h(NetworkIndicator, {
network: network,
provider: provider,
}) : null,
]),
isError ? h('div', {
style: {
textAlign: 'center',
position: 'absolute',
top: '25px',
background: 'rgba(255, 255, 255, 0.85)',
border: '2px solid rgb(226, 2, 2)',
width: '100%',
},
}, [
txMeta.simulationFails ?
h('.error', {
style: {
fontSize: '12px',
},
}, 'Transaction Error. Exception thrown in contract code.')
: null,
!isValidAddress ?
h('.error', {
style: {
fontSize: '12px',
},
}, 'Recipient address is invalid. Sending this transaction will result in a loss of ETH. ')
: null,
insufficientBalance ?
h('span.error', {
style: {
fontSize: '12px',
},
}, 'Insufficient balance for transaction. ')
: null,
(dangerousGasLimit && !gasLimitSpecified) ?
h('span.error', {
style: {
fontSize: '12px',
},
}, 'Gas limit set dangerously high. Approving this transaction is liable to fail. ')
: null,
]) : null,
// Ether Value
// Currently not customizable, but easily modified
// in the way that gas and gasLimit currently are.
h('.row', [
h('.cell.label', 'Amount'),
h(EthBalance, { value: txParams.value, currentCurrency, conversionRate, network }),
h(EthBalance, { valueStyle, dimStyle, value: txParams.value, currentCurrency, conversionRate, network }),
]),
// Gas Limit (customizable)
@ -191,7 +343,6 @@ PendingTx.prototype.render = function () {
suffix: 'UNITS',
style: {
position: 'relative',
top: '5px',
},
onChange: this.gasLimitChanged.bind(this),
@ -214,7 +365,6 @@ PendingTx.prototype.render = function () {
min: forceGasMin || MIN_GAS_PRICE_BN,
style: {
position: 'relative',
top: '5px',
},
onChange: this.gasPriceChanged.bind(this),
ref: (hexInput) => { this.inputs.push(hexInput) },
@ -225,14 +375,12 @@ PendingTx.prototype.render = function () {
// Max Transaction Fee (calculated)
h('.cell.row', [
h('.cell.label', 'Max Transaction Fee'),
h(EthBalance, { value: txFeeBn.toString(16), currentCurrency, conversionRate, network }),
h(EthBalance, { valueStyle, dimStyle, value: txFeeBn.toString(16), currentCurrency, conversionRate, network }),
]),
h('.cell.row', {
style: {
fontFamily: 'Montserrat Regular',
background: 'white',
padding: '10px 25px',
fontFamily: 'Nunito Regular',
},
}, [
h('.cell.label', 'Max Total'),
@ -243,6 +391,8 @@ PendingTx.prototype.render = function () {
},
}, [
h(EthBalance, {
valueStyle,
dimStyle,
value: maxCost.toString(16),
currentCurrency,
conversionRate,
@ -257,15 +407,15 @@ PendingTx.prototype.render = function () {
// Data size row:
h('.cell.row', {
style: {
background: '#f7f7f7',
background: '#ffffff',
paddingBottom: '0px',
},
}, [
h('.cell.label'),
h('.cell.value', {
style: {
fontFamily: 'Montserrat Light',
fontSize: '11px',
fontFamily: 'Nunito Regular',
fontSize: '14px',
},
}, `Data included: ${dataLength} bytes`),
]),
@ -276,57 +426,18 @@ PendingTx.prototype.render = function () {
h('style', `
.conf-buttons button {
margin-left: 10px;
text-transform: uppercase;
}
`),
h('.cell.row', {
style: {
textAlign: 'center',
},
}, [
txMeta.simulationFails ?
h('.error', {
style: {
fontSize: '0.9em',
},
}, 'Transaction Error. Exception thrown in contract code.')
: null,
!isValidAddress ?
h('.error', {
style: {
fontSize: '0.9em',
},
}, 'Recipient address is invalid. Sending this transaction will result in a loss of ETH.')
: null,
insufficientBalance ?
h('span.error', {
style: {
fontSize: '0.9em',
},
}, 'Insufficient balance for transaction')
: null,
(dangerousGasLimit && !gasLimitSpecified) ?
h('span.error', {
style: {
fontSize: '0.9em',
},
}, 'Gas limit set dangerously high. Approving this transaction is liable to fail.')
: null,
]),
// send + cancel
h('.flex-row.flex-space-around.conf-buttons', {
style: {
display: 'flex',
justifyContent: 'flex-end',
margin: '14px 25px',
margin: '14px 30px',
},
}, [
h('button', {
h('button.btn-violet', {
onClick: (event) => {
this.resetGasFields()
event.preventDefault()
@ -335,9 +446,9 @@ PendingTx.prototype.render = function () {
// Accept Button or Buy Button
insufficientBalance ? h('button.btn-green', { onClick: props.buyEth }, 'Buy Ether') :
h('input.confirm.btn-green', {
h('input.confirm', {
type: 'submit',
value: 'SUBMIT',
value: 'Submit',
style: { marginLeft: '10px' },
disabled: buyDisabled,
}),
@ -350,7 +461,7 @@ PendingTx.prototype.render = function () {
style: {
display: 'flex',
justifyContent: 'flex-end',
margin: '14px 25px',
margin: '14px 30px',
},
}, [
h('button.cancel.btn-red', {
@ -371,27 +482,35 @@ PendingTx.prototype.miniAccountPanelForRecipient = function () {
// If it's not a contract deploy, send to the account
if (!isContractDeploy) {
return h(MiniAccountPanel, {
imageSeed: txParams.to,
picOrder: 'left',
}, [
h('span.font-small', {
style: {
fontFamily: 'Montserrat Bold, Montserrat, sans-serif',
},
}, nameForAddress(txParams.to, props.identities)),
h(Copyable, {
value: ethUtil.toChecksumAddress(txParams.to),
imageSeed: txParams.to,
picOrder: 'right',
}, [
h('span.font-small', {
h('div', {
style: {
fontFamily: 'Montserrat Light, Montserrat, sans-serif',
marginRight: '10px',
},
}, addressSummary(txParams.to, 6, 4, false)),
]),
}, [
h('span.font-pre-medium', {
style: {
fontFamily: 'Nunito SemiBold',
color: '#ffffff',
display: 'inline-block',
whiteSpace: 'nowrap',
},
}, accountSummary(nameForAddress(txParams.to, props.identities)), 6, 4),
])
h(Copyable, {
value: ethUtil.toChecksumAddress(txParams.to),
}, [
h('span.font-small', {
style: {
fontFamily: 'Nunito Regular',
color: 'rgba(255, 255, 255, 0.7)',
},
}, addressSummary(txParams.to, 6, 4, false)),
]),
]),
])
} else {
return h(MiniAccountPanel, {
picOrder: 'left',
@ -399,7 +518,8 @@ PendingTx.prototype.miniAccountPanelForRecipient = function () {
h('span.font-small', {
style: {
fontFamily: 'Montserrat Bold, Montserrat, sans-serif',
fontFamily: 'Nunito Bold',
color: '#ffffff',
},
}, 'New Contract'),
@ -500,13 +620,24 @@ PendingTx.prototype.bnMultiplyByFraction = function (targetBN, numerator, denomi
return targetBN.mul(numBN).div(denomBN)
}
PendingTx.prototype.goHome = function (event) {
this.stopPropagation(event)
this.props.dispatch(actions.goHome())
}
PendingTx.prototype.stopPropagation = function (event) {
if (event.stopPropagation) {
event.stopPropagation()
}
}
function forwardCarrat () {
return (
h('img', {
src: 'images/forward-carrat.svg',
src: 'images/forward-carrat-light.svg',
style: {
padding: '5px 6px 0px 10px',
height: '37px',
padding: '5px 30px 0px 30px',
height: '62px',
},
})
)

View File

@ -52,7 +52,7 @@ QrCodeView.prototype.render = function () {
h('#qr-container.flex-column', {
style: {
marginTop: '25px',
marginTop: '15px',
marginBottom: '15px',
},
dangerouslySetInnerHTML: {

View File

@ -16,12 +16,13 @@ TabBar.prototype.render = function () {
const { subview = defaultTab } = state
return (
h('.flex-row.space-around.text-transform-uppercase', {
h('.flex-row.space-around', {
style: {
background: '#EBEBEB',
background: '#60269c',
color: '#AEAEAE',
paddingTop: '4px',
minHeight: '30px',
paddingTop: '10px',
minHeight: '45px',
lineHeight: '45px',
},
}, tabs.map((tab) => {
const { key, content } = tab

View File

@ -17,7 +17,12 @@ TokenCell.prototype.render = function () {
return (
h('li.token-cell', {
style: { cursor: network === '1' ? 'pointer' : 'default' },
style: {
cursor: network === '1' ? 'pointer' : 'default',
borderBottom: props.isLastTokenCell ? 'none' : '1px solid #e2e2e2',
padding: '20px 0',
margin: '0 20px',
},
onClick: this.view.bind(this, address, userAddress, network),
}, [
@ -27,11 +32,16 @@ TokenCell.prototype.render = function () {
network,
}),
h('h3', `${string || 0} ${symbol}`),
h('h3', {
style: {
fontFamily: 'Nunito Bold',
fontSize: '14px',
},
}, `${string || 0} ${symbol}`),
h('span', { style: { flex: '1 0 auto' } }),
h('span.fa.fa-trash', {
h('span.trash', {
style: { cursor: 'pointer' },
onClick: (event) => {
event.stopPropagation()
@ -39,6 +49,8 @@ TokenCell.prototype.render = function () {
},
}, ''),
h('hr'),
/*
h('button', {
onClick: this.send.bind(this, address),

View File

@ -48,11 +48,13 @@ TokenList.prototype.render = function () {
])
}
const tokenViews = tokens.map((tokenData) => {
const tokenViews = tokens.map((tokenData, ind) => {
tokenData.network = network
tokenData.userAddress = userAddress
const isLastTokenCell = ind === (tokens.length - 1)
return h(TokenCell, {
...tokenData,
isLastTokenCell,
removeToken: this.props.removeToken,
})
})
@ -123,13 +125,11 @@ TokenList.prototype.renderTokenStatusBar = function () {
},
style: {
display: 'flex',
height: '40px',
padding: '10px',
justifyContent: 'center',
alignItems: 'center',
},
}, [
'ADD TOKEN',
'Add Token',
]),
])
}

View File

@ -19,18 +19,8 @@ TransactionIcon.prototype.render = function () {
return h(!isMsg ? '.unapproved-tx-icon' : 'i.fa.fa-certificate.fa-lg')
case 'rejected':
return h('i.fa.fa-exclamation-triangle.fa-lg.warning', {
style: {
width: '24px',
},
})
case 'failed':
return h('i.fa.fa-exclamation-triangle.fa-lg.error', {
style: {
width: '24px',
},
})
return h('i.tx-warning')
case 'submitted':
return h(Tooltip, {
@ -48,20 +38,20 @@ TransactionIcon.prototype.render = function () {
if (isMsg) {
return h('i.fa.fa-certificate.fa-lg', {
style: {
width: '24px',
width: '40px',
},
})
}
if (txParams.to) {
return h(Identicon, {
diameter: 24,
diameter: 40,
address: txParams.to || transaction.hash,
})
} else {
return h('i.fa.fa-file-text-o.fa-lg', {
style: {
width: '24px',
width: '40px',
},
})
}

View File

@ -84,6 +84,20 @@ TransactionListItem.prototype.render = function () {
const nonce = txParams.nonce ? numberToBN(txParams.nonce).toString(10) : ''
const isClickable = ('hash' in transaction && isLinkable) || isPending
const valueStyle = {
fontFamily: 'Nunito Bold',
width: '100%',
textAlign: 'right',
fontSize: '14px',
color: '#333333',
}
const dimStyle = {
fontFamily: 'Nunito Regular',
color: '#333333',
marginLeft: '5px',
fontSize: '14px',
}
return (
h('.transaction-list-item.flex-column', {
onClick: (event) => {
@ -122,6 +136,7 @@ TransactionListItem.prototype.render = function () {
}, [
h('span', {
style: {
fontFamily: 'Nunito Bold',
display: 'flex',
cursor: 'normal',
flexDirection: 'column',
@ -132,16 +147,29 @@ TransactionListItem.prototype.render = function () {
}, nonce),
]),
h('.flex-column', {style: {width: '200px', overflow: 'hidden'}}, [
h('.flex-column', {
style: {
overflow: 'hidden',
textAlign: 'left',
},
}, [
domainField(txParams),
h('div', date),
recipientField(txParams, transaction, isTx, isMsg),
h('div.flex-row', [
recipientField(txParams, transaction, isTx, isMsg),
// Places a copy button if tx is successful, else places a placeholder empty div.
transaction.hash ? h(CopyButton, { value: transaction.hash }) : h('div', {style: { display: 'flex', alignItems: 'center', width: '26px' }}),
]),
h('div', {
style: {
fontSize: '12px',
color: '#777777',
},
}, date),
]),
// Places a copy button if tx is successful, else places a placeholder empty div.
transaction.hash ? h(CopyButton, { value: transaction.hash }) : h('div', {style: { display: 'flex', alignItems: 'center', width: '26px' }}),
isTx ? h(EthBalance, {
valueStyle,
dimStyle,
value: txParams.value,
conversionRate,
currentCurrency,
@ -149,7 +177,9 @@ TransactionListItem.prototype.render = function () {
shorten: true,
showFiat: false,
network,
style: {fontSize: '15px'},
style: {
margin: '0 auto',
},
}) : h('.flex-column'),
]),
@ -218,8 +248,8 @@ function recipientField (txParams, transaction, isTx, isMsg) {
return h('div', {
style: {
fontSize: 'x-small',
color: '#ABA9AA',
fontSize: '14px',
color: '#333333',
},
}, [
message,

View File

@ -44,7 +44,7 @@ TransactionList.prototype.render = function () {
style: {
overflowY: 'auto',
height: '100%',
padding: '0 25px 0 15px',
padding: '0 20px 0 20px',
textAlign: 'center',
},
}, [

View File

@ -3,12 +3,9 @@ const Component = require('react').Component
const h = require('react-hyperscript')
const connect = require('react-redux').connect
const actions = require('../../ui/app/actions')
const NetworkIndicator = require('./components/network')
const LoadingIndicator = require('./components/loading')
const txHelper = require('../lib/tx-helper')
const log = require('loglevel')
const { ENVIRONMENT_TYPE_NOTIFICATION } = require('../../app/scripts/lib/enums')
const { getEnvironmentType } = require('../../app/scripts/lib/util')
const PendingTx = require('./components/pending-tx')
const PendingMsg = require('./components/pending-msg')
@ -45,7 +42,7 @@ function ConfirmTxScreen () {
ConfirmTxScreen.prototype.render = function () {
const props = this.props
const { network, provider, unapprovedTxs, currentCurrency, computedBalances,
const { network, unapprovedTxs, currentCurrency, computedBalances,
unapprovedMsgs, unapprovedPersonalMsgs, unapprovedTypedMessages, blockGasLimit } = props
let { conversionRate } = props
@ -58,7 +55,6 @@ ConfirmTxScreen.prototype.render = function () {
var txData = unconfTxList[props.index] || {}
var txParams = txData.params || {}
var isNotification = getEnvironmentType(window.location.href) === ENVIRONMENT_TYPE_NOTIFICATION
log.info(`rendering a combined ${unconfTxList.length} unconf msg & txs`)
if (unconfTxList.length === 0) return h(Loading, { isLoading: true })
@ -67,7 +63,11 @@ ConfirmTxScreen.prototype.render = function () {
return (
h('.flex-column.flex-grow', [
h('.flex-column.flex-grow', {
style: {
width: '100%',
},
}, [
h(LoadingIndicator, {
isLoading: this.state ? !this.state.bypassLoadingScreen : txData.loadingDefaults,
@ -79,37 +79,6 @@ ConfirmTxScreen.prototype.render = function () {
}),
// subtitle and nav
h('.section-title.flex-row.flex-center', [
!isNotification ? h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', {
onClick: this.goHome.bind(this),
}) : null,
h('h2.page-subtitle', 'Confirm Transaction'),
isNotification ? h(NetworkIndicator, {
network: network,
provider: provider,
}) : null,
]),
h('h3', {
style: {
alignSelf: 'center',
display: unconfTxList.length > 1 ? 'block' : 'none',
},
}, [
h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', {
style: {
display: props.index === 0 ? 'none' : 'inline-block',
},
onClick: () => props.dispatch(actions.previousTx()),
}),
` ${props.index + 1} of ${unconfTxList.length} `,
h('i.fa.fa-arrow-right.fa-lg.cursor-pointer', {
style: {
display: props.index + 1 === unconfTxList.length ? 'none' : 'inline-block',
},
onClick: () => props.dispatch(actions.nextTx()),
}),
]),
warningIfExists(props.warning),
@ -236,11 +205,6 @@ ConfirmTxScreen.prototype.cancelTypedMessage = function (msgData, event) {
this.props.dispatch(actions.cancelTypedMsg(msgData))
}
ConfirmTxScreen.prototype.goHome = function (event) {
this.stopPropagation(event)
this.props.dispatch(actions.goHome())
}
function warningIfExists (warning) {
if (warning &&
// Do not display user rejections on this screen:

View File

@ -45,6 +45,10 @@ ConfigScreen.prototype.render = function () {
onClick: () => {
state.dispatch(actions.goHome())
},
style: {
position: 'absolute',
left: '30px',
},
}),
h('h2.page-subtitle', 'Settings'),
]),
@ -61,7 +65,7 @@ ConfigScreen.prototype.render = function () {
h('.flex-column.flex-justify-center.flex-grow.select-none', [
h('.flex-space-around', {
style: {
padding: '20px',
padding: '30px',
overflow: 'auto',
},
}, [
@ -74,8 +78,11 @@ ConfigScreen.prototype.render = function () {
style: {
width: 'inherit',
flex: '1 0 auto',
height: '30px',
margin: '8px',
height: '32px',
margin: '20px 20px 0 0',
borderRadius: '3px',
border: '1px solid #e2e2e2',
padding: '10px',
},
onKeyPress (event) {
if (event.key === 'Enter') {
@ -88,6 +95,7 @@ ConfigScreen.prototype.render = function () {
h('button', {
style: {
alignSelf: 'center',
marginTop: '20px',
},
onClick (event) {
event.preventDefault()
@ -102,7 +110,11 @@ ConfigScreen.prototype.render = function () {
currentConversionInformation(metamaskState, state),
h('hr.horizontal-line'),
h('hr.horizontal-line', {
style: {
marginTop: '20px',
},
}),
h('div', {
style: {
@ -111,8 +123,9 @@ ConfigScreen.prototype.render = function () {
}, [
h('p', {
style: {
fontFamily: 'Montserrat Light',
fontSize: '13px',
fontFamily: 'Nunito Regular',
fontSize: '14px',
lineHeight: '18px',
},
}, `State logs contain your public account addresses and sent transactions.`),
h('br'),
@ -132,7 +145,11 @@ ConfigScreen.prototype.render = function () {
}, 'Download State Logs'),
]),
h('hr.horizontal-line'),
h('hr.horizontal-line', {
style: {
marginTop: '20px',
},
}),
h('div', {
style: {
@ -150,7 +167,11 @@ ConfigScreen.prototype.render = function () {
}, 'Reveal Seed Words'),
]),
h('hr.horizontal-line'),
h('hr.horizontal-line', {
style: {
marginTop: '20px',
},
}),
h('div', {
style: {
@ -160,8 +181,9 @@ ConfigScreen.prototype.render = function () {
h('p', {
style: {
fontFamily: 'Montserrat Light',
fontSize: '13px',
fontFamily: 'Nunito Regular',
fontSize: '14px',
lineHeight: '18px',
},
}, [
'Resetting is for developer use only. ',

View File

@ -370,3 +370,31 @@
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Nunito Regular';
src: url('/fonts/Nunito/Nunito-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Nunito SemiBold';
src: url('/fonts/Nunito/Nunito-SemiBold.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Nunito Bold';
src: url('/fonts/Nunito/Nunito-Bold.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Nunito Light';
src: url('/fonts/Nunito/Nunito-Light.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}

View File

@ -14,8 +14,8 @@ application specific styles
}
html, body {
font-family: 'Montserrat Regular', Arial;
color: #4D4D4D;
font-family: 'Nunito Regular';
color: #333333;
font-weight: 300;
line-height: 1.4em;
background: #F7F7F7;
@ -35,6 +35,8 @@ html {
.app-primary {
display: flex;
background: #ffffff;
width: 100%;
}
input:focus, textarea:focus {
@ -65,30 +67,37 @@ input:focus, textarea:focus {
height: 100%;
display: flex;
flex-direction: column;
background: #ffffff;
}
button, input[type="submit"] {
font-family: 'Montserrat Bold';
font-family: 'Nunito Bold';
outline: none;
cursor: pointer;
padding: 8px 12px;
padding-left: 15px;
padding-right: 15px;
height: 32px;
border: none;
color: white;
transform-origin: center center;
transition: transform 50ms ease-in;
/* default orange */
background: rgba(247, 134, 28, 1);
box-shadow: 0px 3px 6px rgba(247, 134, 28, 0.36);
border-radius: 3px;
font-size: 14px;
/* default green */
background: #8fdc97;
/*box-shadow: 0px 5px 10px 0px rgba(92, 52, 162, 0.3);*/
}
.btn-green, input[type="submit"].btn-green {
background: rgba(106, 195, 96, 1);
box-shadow: 0px 3px 6px rgba(106, 195, 96, 0.36);
background: #8fdc97;
}
.btn-red {
background: rgba(254, 35, 17, 1);
box-shadow: 0px 3px 6px rgba(254, 35, 17, 0.36);
background: #df2265;
}
.btn-violet {
background: #6729a8;
}
button[disabled], input[type="submit"][disabled] {
@ -118,7 +127,7 @@ a {
}
a:hover{
color: #df6b0e;
color: rgba(143, 220, 151, 0.5);
}
/*
@ -135,8 +144,8 @@ button.primary {
box-shadow: 0px 3px 6px rgba(247, 134, 28, 0.36);
color: white;
font-size: 1.1em;
font-family: 'Montserrat Regular';
text-transform: uppercase;
font-family: 'Nunito Regular';
text-transform: none;
}
button.btn-thin {
@ -156,15 +165,15 @@ button.btn-thin {
}
.app-header h1 {
font-family: 'Montserrat Regular';
font-family: 'Nunito Regular';
text-transform: uppercase;
color: #AEAEAE;
background: #ffffff;
}
h2.page-subtitle {
font-family: 'Montserrat Regular';
text-transform: uppercase;
color: #AEAEAE;
font-family: 'Nunito Regular';
color: #333333;
font-size: 1em;
margin: 12px;
}
@ -182,11 +191,17 @@ h2.page-subtitle {
border: 3px solid gray;
}
textarea {
border: 1px solid #e2e2e2;
border-radius: 3px;
}
textarea.twelve-word-phrase {
font-family: 'Nunito Regular';
padding: 12px;
width: 300px;
height: 140px;
font-size: 16px;
font-size: 14px;
background: white;
resize: none;
}
@ -206,7 +221,7 @@ textarea.twelve-word-phrase {
.check {
margin-left: 12px;
color: #F7861C;
color: #8fdc97;
flex: 1 0 auto;
display: flex;
justify-content: flex-end;
@ -239,12 +254,12 @@ app sections
/* unlock */
.error {
color: #f7861c;
color: #db60a4;
margin-bottom: 9px;
}
.warning {
color: #FFAE00;
color: #8fdc97;
}
.dropped {
@ -284,8 +299,71 @@ app sections
background: #c3c3c3;
}
.fa-arrow-left {
content: url('../images/icon-back.svg');
width: 14px;
height: 14px;
}
.fa-clipboard {
content: url('../images/copy.svg');
width: 14px;
height: 14px;
}
.sandwich-expando {
background-image: url('../images/menu.svg');
background-size: 14px 12px;
background-repeat: no-repeat;
background-position: right;
}
.sandwich-expando.expanded {
background-image: url('../images/close.svg');
background-size: 12px 12px;
background-repeat: no-repeat;
background-position: right;
}
@media (min--moz-device-pixel-ratio: 1.3),
(-o-min-device-pixel-ratio: 2.6/2),
(-webkit-min-device-pixel-ratio: 1.3),
(min-device-pixel-ratio: 1.3),
(min-resolution: 1.3dppx) {
.logo {
background-image: url(../images/logo-1@2x.png);
background-size: 146px 134px;
}
}
.logo {
background-image: url(../images/logo-1.png);
background-repeat: no-repeat;
width: 146px;
height: 134px;
margin-top: 30px;
}
.selected-network {
width: 4px;
height: 26px;
background: #8fdc97;
position: absolute;
left: 0;
}
.section-title {
border-top: 1px solid #e2e2e2;
}
.trash {
content: url('../images/close.svg');
width: 12px;
height: 12px;
}
.section-title .fa-arrow-left {
margin: -2px 8px 0px -8px;
/*margin: -2px 8px 0px -8px;*/
}
.unlock-screen #metamask-mascot-container {
@ -298,7 +376,9 @@ app sections
}
.unlock-screen input[type=password] {
width: 260px;
width: 210px;
border-radius: 3px;
border: none;
/*height: 36px;
margin-bottom: 24px;
padding: 8px;*/
@ -306,47 +386,59 @@ app sections
.sizing-input{
font-size: 14px;
height: 30px;
height: 32px;
padding-left: 5px;
border-radius: 3px;
border: 1px solid #e2e2e2;
}
.editable-label{
display: flex;
margin-bottom: 10px;
}
.editable-button{
margin-left: 10px;
}
/* Webkit */
.unlock-screen input::-webkit-input-placeholder {
text-align: center;
font-size: 1.2em;
text-align: left;
font-size: 14px;
}
/* Firefox 18- */
.unlock-screen input:-moz-placeholder {
text-align: center;
font-size: 1.2em;
text-align: left;
font-size: 14pxm;
}
/* Firefox 19+ */
.unlock-screen input::-moz-placeholder {
text-align: center;
font-size: 1.2em;
text-align: left;
font-size: 14px;
}
/* IE */
.unlock-screen input:-ms-input-placeholder {
text-align: center;
font-size: 1.2em;
text-align: left;
font-size: 14px;
}
input.large-input, textarea.large-input {
/*margin-bottom: 24px;*/
padding: 8px;
padding: 10px;
border-radius: 3px;
border: 1px solid #e2e2e2;
font-family: 'Nunito Regular';
font-size: 14px;
}
input.large-input {
height: 36px;
height: 32px;
}
.letter-spacey {
letter-spacing: 0.1em;
}
.in-progress-notification {
color: #db60a4;
}
/* accounts */
@ -355,7 +447,7 @@ input.large-input {
}
.accounts-section .horizontal-line {
margin: 0px 18px;
margin: 0px 20px;
}
.accounts-list-option {
@ -375,6 +467,18 @@ input.large-input {
margin: 0px -8px 0px 8px;
}
.white-arrow-left {
content: url('../images/arrow-left-white.svg');
width: 14px;
height: 14px;
}
.white-arrow-right {
content: url('../images/arrow-right-white.svg');
width: 14px;
height: 14px;
}
/* identity panel */
.identity-panel {
@ -382,8 +486,8 @@ input.large-input {
}
.identity-panel .identicon-wrapper {
margin: 4px;
margin-top: 8px;
margin-bottom: 10px;
margin-top: 10px;
display: flex;
align-items: center;
}
@ -399,7 +503,7 @@ input.large-input {
.identity-panel i {
margin-top: 32px;
margin-right: 6px;
color: #B9B9B9;
color: #ffffff;
}
.identity-panel .arrow-right {
@ -451,10 +555,6 @@ input.large-input {
flex-direction: inherit;
}
.account-detail-section .name-label {
margin-left: 15px;
}
.grow-tenx {
flex-grow: 10;
}
@ -471,6 +571,29 @@ input.large-input {
border-radius: 13px;
}
.tx-warning {
width: 60px;
height: 60px;
border-radius: 30px;
background: #6729a8;
background-image: url('../images/invalid-name.svg');
background-size: 2px 18px;
background-position: center;
background-repeat: no-repeat;
line-height: 60px;
}
.cell.label {
font-family: 'Nunito Regular';
font-size: 14px;
white-space: nowrap;
}
.cell.value {
font-family: 'Nunito Bold';
font-size: 14px;
}
.edit-text {
height: 100%;
visibility: hidden;
@ -482,7 +605,7 @@ input.large-input {
margin-bottom: 2px;
font-size: 11px;
text-rendering: geometricPrecision;
color: #F7861C;
color: #60db97;
}
.name-label:hover .edit-text {
visibility: visible;
@ -506,37 +629,28 @@ input.large-input {
}
.send-screen section {
margin: 8px 16px;
margin: 10px 30px;
}
.send-screen input {
width: 100%;
font-size: 12px;
font-size: 14px;
border: 1px solid #e2e2e2;
border-radius: 3px;
}
/* Ether Balance Widget */
.ether-balance-amount {
color: #F7861C;
}
.ether-balance-label {
color: #ABA9AA;
}
/* Info screen */
.info-gray{
font-family: 'Montserrat Regular';
text-transform: uppercase;
color: #AEAEAE;
}
.icon-size{
width: 20px;
}
.info{
font-family: 'Montserrat Regular', Arial;
font-family: 'Nunito Regular';
padding-bottom: 10px;
display: inline-block;
padding-left: 5px;
@ -556,7 +670,7 @@ input.large-input {
border-style: double;
border-radius: 15px;
border-width: 5px;
background: rgba(247, 134, 28, 1);
background: #8fdc97;
border-color: #F7F7F7;
}
@ -570,7 +684,7 @@ input.large-input {
}
.radio-titles {
color: rgba(247, 134, 28, 1);
color: #8fdc97;
}
.radio-titles-subtext {
@ -598,7 +712,7 @@ input.large-input {
}
.buy-inputs{
font-family: 'Montserrat Light';
font-family: 'Nunito Light';
font-size: 13px;
height: 20px;
background: transparent;
@ -625,25 +739,25 @@ input.large-input {
}
.activeForm {
background: #F7F7F7;
background: #ffffff;
color: #333333;
border: none;
border-radius: 8px 8px 0px 0px;
width: 50%;
text-align: center;
padding-bottom: 4px;
}
.inactiveForm {
background: #60269c;
color: #ffffff;
border: none;
border-radius: 8px 8px 0px 0px;
width: 50%;
text-align: center;
padding-bottom: 4px;
}
.ex-coins {
font-family: 'Montserrat Regular';
font-family: 'Nunito Regular';
text-transform: uppercase;
text-align: center;
font-size: 33px;
@ -654,7 +768,7 @@ input.large-input {
}
.marketinfo{
font-family: 'Montserrat light';
font-family: 'Nunito light';
color: #AEAEAE;
font-size: 15px;
line-height: 17px;
@ -696,13 +810,15 @@ input.large-input {
text-overflow: ellipsis;
width: 5em;
font-size: 14px;
font-family: "Montserrat Light";
font-family: "Nunito Regular";
margin-left: 5px;
color: #777777;
}
.qr-header {
font-size: 25px;
margin-top: 40px;
font-family: "Nunito SemiBold";
font-size: 16px;
margin-top: 30px;
}
.qr-message {

View File

@ -4,6 +4,15 @@
color: #F7861C;
}
.color-green {
color: #8fdc97;
}
.color-violet {
color: #6729a8;
}
.color-forest {
color: #0A5448;
}
@ -158,8 +167,12 @@
font-size: 12px;
}
.font-pre-medium {
font-size: 14px;
}
.font-medium {
font-size: 1.2em;
font-size: 20px;
}
hr.horizontal-line {
@ -253,7 +266,7 @@ hr.horizontal-line {
}
i.fa.fa-question-circle.fa-lg.menu-icon {
font-size: 18px;
font-size: 16px;
}
.ether-icon {

View File

@ -49,12 +49,13 @@ InitializeMenuScreen.prototype.renderMenu = function (state) {
animationEventEmitter: this.animationEventEmitter,
}),*/
h('.logo'),
h('h1', {
style: {
paddingTop: '50px',
fontSize: '1.3em',
textTransform: 'uppercase',
color: '#7F8082',
color: '#ffffff',
marginBottom: 10,
},
}, 'Nifty Wallet'),
@ -64,7 +65,7 @@ InitializeMenuScreen.prototype.renderMenu = function (state) {
h('h3', {
style: {
fontSize: '0.8em',
color: '#7F8082',
color: '#ffffff',
display: 'inline',
},
}, 'Encrypt your new DEN'),
@ -76,7 +77,7 @@ InitializeMenuScreen.prototype.renderMenu = function (state) {
style: {
fontSize: '18px',
position: 'relative',
color: 'rgb(247, 134, 28)',
color: '#8fdc97',
top: '2px',
marginLeft: '4px',
},
@ -95,6 +96,7 @@ InitializeMenuScreen.prototype.renderMenu = function (state) {
style: {
width: 260,
marginTop: 12,
border: 'none',
},
}),
@ -108,11 +110,12 @@ InitializeMenuScreen.prototype.renderMenu = function (state) {
style: {
width: 260,
marginTop: 16,
border: 'none',
},
}),
h('button.primary', {
h('button', {
onClick: this.createNewVaultAndKeychain.bind(this),
style: {
margin: 12,
@ -124,7 +127,7 @@ InitializeMenuScreen.prototype.renderMenu = function (state) {
onClick: this.showRestoreVault.bind(this),
style: {
fontSize: '0.8em',
color: 'rgb(247, 134, 28)',
color: '#8fdc97',
textDecoration: 'underline',
},
}, 'Import Existing DEN'),

View File

@ -32,6 +32,10 @@ InfoScreen.prototype.render = function () {
onClick: (event) => {
state.dispatch(actions.goHome())
},
style: {
position: 'absolute',
left: '30px',
},
}),
h('h2.page-subtitle', 'Info'),
]),
@ -40,12 +44,12 @@ InfoScreen.prototype.render = function () {
h('.flex-column.flex-justify-center.flex-grow.select-none', [
h('.flex-space-around', {
style: {
padding: '20px',
padding: '30px',
},
}, [
// current version number
h('.info.info-gray', [
h('.info', [
h('div', 'Nifty Wallet'),
h('div', {
style: {

View File

@ -32,15 +32,14 @@ CreateVaultCompleteScreen.prototype.render = function () {
// h('h2.page-subtitle', 'Vault Created'),
// ]),
h('h3.flex-center.text-transform-uppercase', {
h('h3.flex-center.section-title', {
style: {
background: '#EBEBEB',
color: '#AEAEAE',
marginTop: 36,
background: '#ffffff',
color: '#333333',
marginBottom: 8,
width: '100%',
fontSize: '20px',
padding: 6,
padding: '30px 6px 6px 6px',
},
}, [
'Vault Created',
@ -49,7 +48,7 @@ CreateVaultCompleteScreen.prototype.render = function () {
h('div', {
style: {
fontSize: '1em',
marginTop: '10px',
margin: '10px 30px',
textAlign: 'center',
},
}, [
@ -61,7 +60,7 @@ CreateVaultCompleteScreen.prototype.render = function () {
value: seed,
}),
h('button.primary', {
h('button', {
onClick: () => this.confirmSeedWords()
.then(account => this.showAccountDetail(account)),
style: {
@ -71,7 +70,7 @@ CreateVaultCompleteScreen.prototype.render = function () {
},
}, 'I\'ve copied it somewhere safe'),
h('button.primary', {
h('button', {
onClick: () => exportAsFile(`Nifty Wallet Seed Words`, seed),
style: {
margin: '10px',

View File

@ -27,24 +27,24 @@ RevealSeedConfirmation.prototype.render = function () {
style: { maxWidth: '420px' },
}, [
h('h3.flex-center.text-transform-uppercase', {
h('h3.flex-center.section-title', {
style: {
background: '#EBEBEB',
color: '#AEAEAE',
marginBottom: 24,
background: '#ffffff',
color: '#333333',
width: '100%',
fontSize: '20px',
fontSize: '16px',
padding: 6,
fontFamily: 'Nunito Semibold',
},
}, [
'Reveal Seed Words',
h('.page-subtitle', 'Reveal Seed Words'),
]),
h('.div', {
style: {
display: 'flex',
flexDirection: 'column',
padding: '20px',
padding: '30px',
justifyContent: 'center',
},
}, [
@ -58,30 +58,10 @@ RevealSeedConfirmation.prototype.render = function () {
placeholder: 'Enter your password to confirm',
onKeyPress: this.checkConfirmation.bind(this),
style: {
width: 260,
marginTop: '12px',
marginTop: '20px',
},
}),
h('.flex-row.flex-start', {
style: {
marginTop: 30,
width: '50%',
},
}, [
// cancel
h('button.primary', {
onClick: this.goHome.bind(this),
}, 'CANCEL'),
// submit
h('button.primary', {
style: { marginLeft: '10px' },
onClick: this.revealSeedWords.bind(this),
}, 'OK'),
]),
(props.warning) && (
h('span.error', {
style: {
@ -93,6 +73,25 @@ RevealSeedConfirmation.prototype.render = function () {
props.inProgress && (
h('span.in-progress-notification', 'Generating Seed...')
),
h('.flex-row.flex-start.flex-right', {
style: {
marginTop: 20,
width: '100%',
},
}, [
// cancel
h('button.btn-violet', {
onClick: this.goHome.bind(this),
}, 'Cancel'),
// submit
h('button', {
style: { marginLeft: '10px' },
onClick: this.revealSeedWords.bind(this),
}, 'Ok'),
]),
]),
])
)

View File

@ -26,21 +26,28 @@ RestoreVaultScreen.prototype.render = function () {
h('.initialize-screen.flex-column.flex-center.flex-grow', [
h('h3.flex-center.text-transform-uppercase', {
h('h3.flex-center.section-title', {
style: {
background: '#EBEBEB',
color: '#AEAEAE',
fontFamily: 'Nunito SemiBold',
background: '#ffffff',
color: '#333333',
marginBottom: 24,
width: '100%',
fontSize: '20px',
fontSize: '16px',
padding: 6,
},
}, [
'Restore Vault',
h('.page-subtitle', 'Restore Vault'),
]),
// wallet seed entry
h('h3', 'Wallet Seed'),
h('h3.flex-left', {
style: {
width: '100%',
marginBottom: '20px',
marginLeft: '60px',
},
}, 'Wallet Seed'),
h('textarea.twelve-word-phrase.letter-spacey', {
placeholder: 'Enter your secret twelve word phrase here to restore your vault.',
}),
@ -54,8 +61,9 @@ RestoreVaultScreen.prototype.render = function () {
persistentFormId: 'password',
},
style: {
width: 260,
marginTop: 12,
width: 300,
marginTop: 20,
border: '1px solid #e2e2e2',
},
}),
@ -69,8 +77,9 @@ RestoreVaultScreen.prototype.render = function () {
persistentFormId: 'password-confirmation',
},
style: {
width: 260,
marginTop: 16,
width: 300,
marginTop: 20,
border: '1px solid #e2e2e2',
},
}),
@ -80,22 +89,26 @@ RestoreVaultScreen.prototype.render = function () {
// submit
h('.flex-row.flex-space-between', {
h('.flex-row.flex-space-between.flex-right', {
style: {
marginTop: 30,
width: '50%',
marginTop: 20,
width: '100%',
marginRight: '60px',
},
}, [
// cancel
h('button.primary', {
h('button.btn-violet', {
onClick: this.showInitializeMenu.bind(this),
}, 'CANCEL'),
style: {
marginRight: '10px',
},
}, 'Cancel'),
// submit
h('button.primary', {
h('button', {
onClick: this.createNewVaultAndRestore.bind(this),
}, 'OK'),
}, 'Ok'),
]),
])

View File

@ -30,6 +30,10 @@ RemoveTokenScreen.prototype.render = function () {
onClick: (event) => {
props.dispatch(actions.goHome())
},
style: {
position: 'absolute',
left: '30px',
},
}),
h('h2.page-subtitle', 'Remove Token'),
]),
@ -44,9 +48,9 @@ RemoveTokenScreen.prototype.render = function () {
]),
h('.flex-column.flex-justify-center.flex-grow.select-none', [
h('.flex-space-around', {
h('.flex-space-around.flex-right', {
style: {
padding: '20px',
padding: '30px',
},
}, [
h('button', {

View File

@ -64,23 +64,20 @@ SendTransactionScreen.prototype.render = function () {
h('.account-data-subsection.flex-row.flex-grow', {
style: {
margin: '0 20px',
background: 'linear-gradient(rgb(84, 36, 147), rgb(104, 45, 182))',
padding: '20px 20px',
},
}, [
// header - identicon + nav
h('.flex-row.flex-space-between', {
style: {
marginTop: '15px',
},
}, [
// back button
h('i.fa.fa-arrow-left.fa-lg.cursor-pointer.color-orange', {
onClick: this.back.bind(this),
}),
h('.flex-row.flex-space-between', [
// large identicon
h('.identicon-wrapper.flex-column.flex-center.select-none', [
h('.identicon-wrapper.flex-column.flex-center.select-none', {
style: {
display: 'inline-block',
},
}, [
h(Identicon, {
diameter: 62,
address: address,
@ -100,12 +97,12 @@ SendTransactionScreen.prototype.render = function () {
h('.flex-column', {
style: {
marginTop: '10px',
alignItems: 'flex-start',
},
}, [
h('h2.font-medium.color-forest.flex-center', {
h('h2.font-medium.flex-center', {
style: {
color: '#ffffff',
paddingTop: '8px',
marginBottom: '8px',
},
@ -114,13 +111,15 @@ SendTransactionScreen.prototype.render = function () {
// address and getter actions
h('.flex-row.flex-center', {
style: {
marginBottom: '8px',
color: 'rgba(255, 255, 255, 0.7)',
marginBottom: '30px',
},
}, [
h('div', {
style: {
lineHeight: '16px',
fontSize: '14px',
},
}, addressSummary(address)),
@ -144,14 +143,21 @@ SendTransactionScreen.prototype.render = function () {
// Required Fields
//
h('h3.flex-center.text-transform-uppercase', {
h('h3.flex-center', {
style: {
background: '#EBEBEB',
color: '#AEAEAE',
marginTop: '15px',
marginBottom: '16px',
color: '#333333',
marginTop: '18px',
marginBottom: '14px',
},
}, [
// back button
h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', {
style: {
position: 'absolute',
left: '30px',
},
onClick: this.back.bind(this),
}),
'Send Transaction',
]),
@ -185,11 +191,8 @@ SendTransactionScreen.prototype.render = function () {
},
}),
h('button.primary', {
h('button', {
onClick: this.onSubmit.bind(this),
style: {
textTransform: 'uppercase',
},
}, 'Next'),
]),
@ -197,10 +200,10 @@ SendTransactionScreen.prototype.render = function () {
//
// Optional Fields
//
h('h3.flex-center.text-transform-uppercase', {
h('h3.flex-center', {
style: {
background: '#EBEBEB',
color: '#AEAEAE',
background: '#ffffff',
color: '#333333',
marginTop: '16px',
marginBottom: '16px',
},

View File

@ -24,6 +24,10 @@ AppSettingsPage.prototype.render = function () {
h('.flex-row.flex-center', [
h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', {
onClick: this.navigateToAccounts.bind(this),
style: {
position: 'absolute',
left: '30px',
},
}),
h('h2.page-subtitle', 'Settings'),
]),

View File

@ -38,49 +38,52 @@ UnlockScreen.prototype.render = function () {
animationEventEmitter: this.animationEventEmitter,
}),*/
h('.logo'),
h('h1', {
style: {
paddingTop: '50px',
fontSize: '1.4em',
textTransform: 'uppercase',
color: '#7F8082',
fontSize: '30px',
color: '#ffffff',
},
}, 'Nifty Wallet'),
h('input.large-input', {
type: 'password',
id: 'password-box',
placeholder: 'enter password',
style: {
h('div', [
h('input.large-input', {
type: 'password',
id: 'password-box',
placeholder: 'Enter password',
style: {
},
onKeyPress: this.onKeyPress.bind(this),
onInput: this.inputChanged.bind(this),
}),
},
onKeyPress: this.onKeyPress.bind(this),
onInput: this.inputChanged.bind(this),
}),
h('.error', {
style: {
display: warning ? 'block' : 'none',
padding: '0 20px',
textAlign: 'center',
},
}, warning),
h('button.cursor-pointer', {
onClick: this.onSubmit.bind(this),
style: {
margin: '10px 0 10px 10px',
},
}, 'Log In'),
h('.error', {
style: {
display: warning ? 'block' : 'none',
padding: '0 20px',
textAlign: 'center',
},
}, warning),
]),
h('button.primary.cursor-pointer', {
onClick: this.onSubmit.bind(this),
style: {
margin: 10,
},
}, 'Log In'),
]),
h('.flex-row.flex-center.flex-grow', [
h('p.pointer', {
onClick: () => this.props.dispatch(actions.forgotPassword()),
style: {
fontSize: '0.8em',
color: 'rgb(247, 134, 28)',
textDecoration: 'underline',
fontSize: '14px',
color: '#8fdc97',
},
}, 'Restore from seed phrase'),
]),

View File

@ -21,6 +21,7 @@ for (var currency in valueTable) {
module.exports = {
valuesFor: valuesFor,
addressSummary: addressSummary,
accountSummary: accountSummary,
miniAddressSummary: miniAddressSummary,
isAllOneCase: isAllOneCase,
isValidAddress: isValidAddress,
@ -55,6 +56,14 @@ function addressSummary (address, firstSegLength = 10, lastSegLength = 4, includ
return checked ? checked.slice(0, firstSegLength) + '...' + checked.slice(checked.length - lastSegLength) : '...'
}
function accountSummary (acc, firstSegLength = 6, lastSegLength = 4) {
if (!acc) return ''
if (acc.length < 12) return acc
let posOfLastPart = acc.length - lastSegLength
if (posOfLastPart < (firstSegLength + 1)) posOfLastPart += (firstSegLength + 1) - posOfLastPart
return acc.slice(0, firstSegLength) + '...' + acc.slice(posOfLastPart)
}
function miniAddressSummary (address) {
if (!address) return ''
var checked = ethUtil.toChecksumAddress(address)