Merge branch 'ref/design' of github.com:bitpay/bitpay-wallet into feature/topBarColor

This commit is contained in:
Nick Cardin 2016-09-01 11:40:43 -04:00
commit 3a771e0e21
116 changed files with 1755 additions and 1394 deletions

View File

@ -42,7 +42,7 @@
"url": "https://github.com/bitpay/copay/issues"
},
"dependencies": {
"bitcore-wallet-client": "4.0.0",
"bitcore-wallet-client": "4.1.0",
"coveralls": "^2.11.9",
"express": "^4.11.2",
"fs": "0.0.2",

View File

@ -1,11 +1,11 @@
{
{
"//":"PLEASE! Do not edit this file directly",
"//":" Modify it at app-template/",
"//":" Modify it at app-template/",
"manifest_version": 2,
"name": "BitPay",
"description": "The BitPay Bitcoin Wallet",
"version": "0.6.0",
"version": "0.7.0",
"permissions": [
"storage",
"unlimitedStorage",

View File

@ -1,12 +1,12 @@
{
{
"//":"PLEASE! Do not edit this file directly",
"//":" Modify it at app-template/",
"//":" Modify it at app-template/",
"name": "bitpay",
"description": "The BitPay Bitcoin Wallet",
"author": "BitPay",
"version": "0.6.0",
"version": "0.7.0",
"keywords": [
"wallet",
"copay",
@ -45,7 +45,7 @@
"url": "https://github.com/bitpay/copay/issues"
},
"dependencies": {
"bitcore-wallet-client": "4.0.0",
"bitcore-wallet-client": "4.1.0",
"coveralls": "^2.11.9",
"express": "^4.11.2",
"fs": "0.0.2",

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="158px" height="157px" viewBox="0 0 158 157" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 39.1 (31720) - http://www.bohemiancoding.com/sketch -->
<title>Group 3</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Onboarding" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="0.2.4---Wallet-Created" transform="translate(-109.000000, -169.000000)">
<g id="Overlay/Success" transform="translate(-1.000000, 0.000000)">
<g id="Group-3" transform="translate(111.592000, 170.431784)">
<g id="ios-checkmark-outline" transform="translate(49.261333, 54.161919)"></g>
<polyline id="Line" stroke="#FFFFFF" stroke-width="3" stroke-linecap="square" points="49.764 82.7473763 67.3573333 100.801349 114.608 54.6634183"></polyline>
<path d="M77.4106667,154.461769 C120.163397,154.461769 154.821333,119.884324 154.821333,77.2308846 C154.821333,34.5774448 120.163397,0 77.4106667,0 C34.657936,0 0,34.5774448 0,77.2308846 C0,119.884324 34.657936,154.461769 77.4106667,154.461769 Z" id="Oval-1" stroke="#FFFFFF" stroke-width="2"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="247px" height="247px" viewBox="0 0 247 247" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 39.1 (31720) - http://www.bohemiancoding.com/sketch -->
<title>bg-3</title>
<desc>Created with Sketch.</desc>
<defs>
<linearGradient x1="50%" y1="0%" x2="50%" y2="89.4673583%" id="linearGradient-1">
<stop stop-color="#3950B5" offset="0%"></stop>
<stop stop-color="#162360" offset="100%"></stop>
</linearGradient>
</defs>
<g id="Onboarding" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="0.2.3---Tour-3" transform="translate(-64.000000, -210.000000)">
<g id="bg-3" transform="translate(64.000000, 210.000000)">
<path d="M123.5,247 C191.707167,247 247,191.707167 247,123.5 C247,55.2928334 191.707167,1.42108547e-14 123.5,1.42108547e-14 C55.2928334,1.42108547e-14 1.42108547e-14,55.2928334 1.42108547e-14,123.5 C1.42108547e-14,191.707167 55.2928334,247 123.5,247 Z" id="Oval-2" fill="url(#linearGradient-1)" opacity="0.300000012"></path>
<rect id="Combined-Shape" stroke="#647CE8" stroke-width="2" fill="#253377" x="63" y="24" width="99.8310062" height="183.875349" rx="8"></rect>
<path d="M63.5199532,180.634556 L162.311053,180.634556" id="Line" stroke="#647CE8" stroke-width="2" stroke-linecap="square"></path>
<path d="M104.076299,194.254952 L122.794613,194.254952" id="Line" stroke="#647CE8" stroke-width="2" stroke-linecap="square"></path>
<g id="Group-4" transform="translate(90.000000, 76.000000)" stroke="#FFFFFF">
<g id="top-up">
<g id="shopping-48px-outline_bitcoin" transform="translate(8.666667, 3.180606)">
<g id="Group" transform="translate(0.619048, 0.627502)">
<path d="M12.3809524,0 L12.3809524,7.5300202" id="Shape"></path>
<path d="M17.3333333,0 L17.3333333,7.5300202" id="Shape"></path>
<path d="M12.3809524,47.6901279 L12.3809524,55.2201481" id="Shape"></path>
<path d="M17.3333333,47.6901279 L17.3333333,55.2201481" id="Shape"></path>
<path d="M0,47.6901279 L7.42857143,47.6901279" id="Shape-Copy"></path>
<path d="M0,7.5300202 L7.42857143,7.5300202" id="Shape-Copy-2"></path>
<path d="M7.42857143,25.1000673 L7.42857143,7.5300202 L21.8042328,7.5300202 C26.9010582,7.5300202 30.952381,11.4205306 30.952381,16.3150438 C30.952381,21.2095569 26.9010582,25.1000673 21.8042328,25.1000673" id="Shape"></path>
<path d="M7.42857143,47.6901279 L7.42857143,25.1000673 L23.6785714,25.1000673 C29.0952381,25.1000673 33.4285714,30.1200808 33.4285714,36.3950976 C33.4285714,42.6701145 29.0952381,47.6901279 23.6785714,47.6901279 L7.42857143,47.6901279 Z" id="Shape"></path>
</g>
</g>
</g>
</g>
<g id="Group-3" transform="translate(125.000000, 122.000000)" stroke="#12E5B6" stroke-width="2">
<rect id="Rectangle-path" fill="#1F2F7B" x="0.00547760651" y="37.6483369" width="74.7600358" height="65.7214967" rx="4"></rect>
<path d="M18.6954866,37.6483369 L18.6954866,18.8707664 C18.6954866,8.54310266 27.1059906,0.0931959432 37.3854955,0.0931959432 L37.3854955,0.0931959432 C47.6650004,0.0931959432 56.0755044,8.54310266 56.0755044,18.8707664 L56.0755044,37.6483369" id="Shape"></path>
<path d="M36.6300769,65.8146926 L36.6300769,75.2034779" id="Shape" fill="#F9F9F9"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="375px" height="257px" viewBox="0 0 375 257" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 39.1 (31720) - http://www.bohemiancoding.com/sketch -->
<title>bitcoin-currency</title>
<desc>Created with Sketch.</desc>
<defs>
<linearGradient x1="50%" y1="0%" x2="50%" y2="83.858817%" id="linearGradient-1">
<stop stop-color="#CDE7FF" offset="0%"></stop>
<stop stop-color="#FFFFFF" offset="100%"></stop>
</linearGradient>
<linearGradient x1="50%" y1="0%" x2="50%" y2="89.4673583%" id="linearGradient-2">
<stop stop-color="#3950B5" offset="0%"></stop>
<stop stop-color="#162360" offset="100%"></stop>
</linearGradient>
<rect id="path-3" x="0" y="0" width="130" height="48" rx="4"></rect>
<filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-4">
<feOffset dx="0" dy="8" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
<feGaussianBlur stdDeviation="7" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.128877944 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
</filter>
</defs>
<g id="Onboarding" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="0.2.2---Tour-2" transform="translate(0.000000, -200.000000)">
<g id="bitcoin-currency" transform="translate(0.000000, 206.000000)">
<g id="bg-2" transform="translate(0.000000, 3.530453)">
<polygon id="Line-Copy" fill="url(#linearGradient-1)" opacity="0.0632579291" points="54.267049 126.565292 98.7558134 99.5675085 139.106088 120.429432 185.506195 82.3871008 222.910505 82.3871008 246.706821 49.2534574 278.7801 65.2066927 324.303487 56.6164892 367.788457 36.8590204 374.999986 185.469547 150.148438 185.469547 0.425715204 185.469547 0.425715204 135.155496"></polygon>
<polyline id="Line" stroke="#13E5B6" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" points="0 133.969547 54.2670471 127.792464 97.7211891 98.3403365 140.140716 120.429432 184.629481 81.1599288 222.910503 81.1599288 247.741449 48.0262854 280.849359 67.6610371 321.199634 56.6164892 375.000006 35.469547"></polyline>
<path d="M137.25,120.469547 L137.25,183.486924" id="Line-Copy-2" stroke="#FFFFFF" stroke-width="0.5" stroke-linecap="square" stroke-dasharray="4" opacity="0.333547108"></path>
<path d="M77.25,110.469547 L77.25,184.266212" id="Line-Copy-3" stroke="#FFFFFF" stroke-width="0.5" stroke-linecap="square" stroke-dasharray="4" opacity="0.333547108"></path>
<path d="M264.25,64.469547 L264.25,183.870892" id="Line-Copy-4" stroke="#FFFFFF" stroke-width="0.5" stroke-linecap="square" stroke-dasharray="4" opacity="0.333547108"></path>
<path d="M330.25,57.469547 L330.25,183.5043" id="Line-Copy-5" stroke="#FFFFFF" stroke-width="0.5" stroke-linecap="square" stroke-dasharray="4" opacity="0.333547108"></path>
<path d="M187.5,247.469547 C255.707167,247.469547 311,192.176714 311,123.969547 C311,55.7623804 255.707167,0.469547015 187.5,0.469547015 C119.292833,0.469547015 64,55.7623804 64,123.969547 C64,192.176714 119.292833,247.469547 187.5,247.469547 Z" id="Oval-2" fill="url(#linearGradient-2)" opacity="0.300000012"></path>
</g>
<g id="price-" transform="translate(122.000000, 0.000000)">
<path d="M67,42.5 L67,188.5" id="Line" stroke="#9012FE" stroke-width="2" stroke-linecap="square" opacity="0.639999986"></path>
<g id="Rectangle-3" opacity="0.699999988">
<use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-3"></use>
<use fill="#647CE8" fill-rule="evenodd" xlink:href="#path-3"></use>
</g>
<text id="1-BTC-=-$650" font-family="Roboto-Regular, Roboto" font-size="16" font-weight="normal" fill="#FFFFFF">
<tspan x="15.1328125" y="28.8046875">1 BTC = $650</tspan>
</text>
<circle id="Oval-5" stroke="#FFFFFF" stroke-width="3" fill="#1A2A71" cx="67.5" cy="83.5" r="4.5"></circle>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -0,0 +1,167 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="375px" height="247px" viewBox="0 0 375 247" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 39.1 (31720) - http://www.bohemiancoding.com/sketch -->
<title>digital-money</title>
<desc>Created with Sketch.</desc>
<defs>
<linearGradient x1="50%" y1="0%" x2="50%" y2="75.2641068%" id="linearGradient-1">
<stop stop-color="#3950B5" offset="0%"></stop>
<stop stop-color="#162360" offset="100%"></stop>
</linearGradient>
<path d="M31.8181818,0 L0,0 L0,31.8181818 L31.8181818,31.8181818 L31.8181818,0 L31.8181818,0 Z M27.2727273,27.2727273 L4.54545455,27.2727273 L4.54545455,4.54545455 L27.2727273,4.54545455 L27.2727273,27.2727273 L27.2727273,27.2727273 Z" id="path-2"></path>
<mask id="mask-3" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="31.8181818" height="31.8181818" fill="white">
<use xlink:href="#path-2"></use>
</mask>
<polygon id="path-4" points="65.9090909 90.9090909 61.3636364 90.9090909 61.3636364 100 100 100 100 95.4545455 65.9090909 95.4545455"></polygon>
<mask id="mask-5" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="38.6363636" height="9.09090909" fill="white">
<use xlink:href="#path-4"></use>
</mask>
<rect id="path-6" x="9.09090909" y="9.09090909" width="13.6363636" height="13.6363636"></rect>
<mask id="mask-7" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="13.6363636" height="13.6363636" fill="white">
<use xlink:href="#path-6"></use>
</mask>
<path d="M0,100 L31.8181818,100 L31.8181818,68.1818182 L0,68.1818182 L0,100 L0,100 Z M4.54545455,72.7272727 L27.2727273,72.7272727 L27.2727273,95.4545455 L4.54545455,95.4545455 L4.54545455,72.7272727 L4.54545455,72.7272727 Z" id="path-8"></path>
<mask id="mask-9" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="31.8181818" height="31.8181818" fill="white">
<use xlink:href="#path-8"></use>
</mask>
<rect id="path-10" x="9.09090909" y="77.2727273" width="13.6363636" height="13.6363636"></rect>
<mask id="mask-11" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="13.6363636" height="13.6363636" fill="white">
<use xlink:href="#path-10"></use>
</mask>
<path d="M68.1818182,0 L68.1818182,31.8181818 L100,31.8181818 L100,0 L68.1818182,0 L68.1818182,0 Z M95.4545455,27.2727273 L72.7272727,27.2727273 L72.7272727,4.54545455 L95.4545455,4.54545455 L95.4545455,27.2727273 L95.4545455,27.2727273 Z" id="path-12"></path>
<mask id="mask-13" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="31.8181818" height="31.8181818" fill="white">
<use xlink:href="#path-12"></use>
</mask>
<rect id="path-14" x="77.2727273" y="9.09090909" width="13.6363636" height="13.6363636"></rect>
<mask id="mask-15" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="13.6363636" height="13.6363636" fill="white">
<use xlink:href="#path-14"></use>
</mask>
<rect id="path-16" x="90.9090909" y="36.3636364" width="9.09090909" height="9.09090909"></rect>
<mask id="mask-17" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="9.09090909" height="9.09090909" fill="white">
<use xlink:href="#path-16"></use>
</mask>
<rect id="path-18" x="0" y="54.5454545" width="9.09090909" height="9.09090909"></rect>
<mask id="mask-19" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="9.09090909" height="9.09090909" fill="white">
<use xlink:href="#path-18"></use>
</mask>
<polygon id="path-20" points="47.7272727 36.3636364 29.5454545 36.3636364 29.5454545 40.9090909 52.2727273 40.9090909 52.2727273 31.8181818 52.2727273 27.2727273 56.8181818 27.2727273 56.8181818 18.1818182 52.2727273 18.1818182 47.7272727 18.1818182 43.1818182 18.1818182 43.1818182 9.09090909 47.7272727 9.09090909 47.7272727 13.6363636 63.6363636 13.6363636 63.6363636 0 59.0909091 0 59.0909091 9.09090909 52.2727273 9.09090909 52.2727273 0 50 0 40.9090909 0 38.6363636 0 38.6363636 22.7272727 47.7272727 22.7272727 47.7272727 27.2727273 38.6363636 27.2727273 38.6363636 31.8181818 47.7272727 31.8181818"></polygon>
<mask id="mask-21" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="34.0909091" height="40.9090909" fill="white">
<use xlink:href="#path-20"></use>
</mask>
<polygon id="path-22" points="6.81818182 50 15.9090909 50 20.4545455 50 22.7272727 50 22.7272727 54.5454545 13.6363636 54.5454545 13.6363636 59.0909091 22.7272727 59.0909091 22.7272727 63.6363636 40.9090909 63.6363636 40.9090909 59.0909091 27.2727273 59.0909091 27.2727273 54.5454545 27.2727273 45.4545455 20.4545455 45.4545455 20.4545455 38.6363636 15.9090909 38.6363636 15.9090909 45.4545455 11.3636364 45.4545455 11.3636364 36.3636364 0 36.3636364 0 40.9090909 6.81818182 40.9090909"></polygon>
<mask id="mask-23" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="40.9090909" height="27.2727273" fill="white">
<use xlink:href="#path-22"></use>
</mask>
<polygon id="path-24" points="50 90.9090909 50 79.5454545 40.9090909 79.5454545 40.9090909 70.4545455 36.3636364 70.4545455 36.3636364 84.0909091 45.4545455 84.0909091 45.4545455 90.9090909 36.3636364 90.9090909 36.3636364 95.4545455 45.4545455 95.4545455 45.4545455 100 56.8181818 100 56.8181818 95.4545455 50 95.4545455"></polygon>
<mask id="mask-25" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="20.4545455" height="29.5454545" fill="white">
<use xlink:href="#path-24"></use>
</mask>
<polygon id="path-26" points="72.7272727 45.4545455 63.6363636 45.4545455 63.6363636 34.0909091 59.0909091 34.0909091 59.0909091 50 81.8181818 50 81.8181818 45.4545455 77.2727273 45.4545455 77.2727273 40.9090909 84.0909091 40.9090909 84.0909091 36.3636364 77.2727273 36.3636364 72.7272727 36.3636364 68.1818182 36.3636364 68.1818182 40.9090909 72.7272727 40.9090909"></polygon>
<mask id="mask-27" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="25" height="15.9090909" fill="white">
<use xlink:href="#path-26"></use>
</mask>
<polygon id="path-28" points="68.1818182 86.3636364 75 86.3636364 75 90.9090909 84.0909091 90.9090909 84.0909091 86.3636364 84.0909091 81.8181818 84.0909091 75 75 75 75 81.8181818 68.1818182 81.8181818 68.1818182 75 63.6363636 75 63.6363636 81.8181818 59.0909091 81.8181818 59.0909091 63.6363636 54.5454545 63.6363636 54.5454545 59.0909091 50 59.0909091 50 45.4545455 34.0909091 45.4545455 34.0909091 54.5454545 38.6363636 54.5454545 38.6363636 50 45.4545455 50 45.4545455 59.0909091 45.4545455 68.1818182 54.5454545 68.1818182 54.5454545 81.8181818 54.5454545 86.3636364 59.0909091 86.3636364 63.6363636 86.3636364"></polygon>
<mask id="mask-29" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="50" height="45.4545455" fill="white">
<use xlink:href="#path-28"></use>
</mask>
<polygon id="path-30" points="95.4545455 56.8181818 88.6363636 56.8181818 84.0909091 56.8181818 72.7272727 56.8181818 72.7272727 65.9090909 68.1818182 65.9090909 68.1818182 56.8181818 63.6363636 56.8181818 63.6363636 70.4545455 77.2727273 70.4545455 77.2727273 61.3636364 84.0909091 61.3636364 84.0909091 68.1818182 88.6363636 68.1818182 88.6363636 61.3636364 95.4545455 61.3636364 95.4545455 75 88.6363636 75 88.6363636 88.6363636 100 88.6363636 100 84.0909091 93.1818182 84.0909091 93.1818182 79.5454545 100 79.5454545 100 61.3636364 100 56.8181818 100 50 95.4545455 50"></polygon>
<mask id="mask-31" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="36.3636364" height="38.6363636" fill="white">
<use xlink:href="#path-30"></use>
</mask>
</defs>
<g id="Onboarding" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="0.2.1---Tour-1" transform="translate(0.000000, -210.000000)">
<g id="digital-money" transform="translate(0.000000, 210.000000)">
<g id="bg-1">
<g id="cityscape" opacity="0.15" transform="translate(0.000000, 54.000000)" stroke-width="2" stroke="#FFFFFF">
<g id="travel-24px-outline_hotel" transform="translate(0.000000, 47.163934)">
<g id="Group">
<polyline id="Shape" points="12.9658816 82.4918033 0 82.4918033 0 48.7451565 12.9658816 48.7451565"></polyline>
<polyline id="Shape" points="58.3464671 82.4918033 71.3123487 82.4918033 71.3123487 48.7451565 58.3464671 48.7451565"></polyline>
<rect id="Rectangle-path" x="12.9658816" y="0" width="45.3805855" height="82.4918033"></rect>
<path d="M25.9317632,14.9985097 L29.1732335,14.9985097" id="Shape"></path>
<path d="M42.1391151,14.9985097 L45.3805855,14.9985097" id="Shape"></path>
<path d="M25.9317632,29.9970194 L29.1732335,29.9970194" id="Shape"></path>
<path d="M42.1391151,29.9970194 L45.3805855,29.9970194" id="Shape"></path>
<path d="M25.9317632,44.9955291 L29.1732335,44.9955291" id="Shape"></path>
<path d="M42.1391151,44.9955291 L45.3805855,44.9955291" id="Shape"></path>
<path d="M25.9317632,59.9940387 L29.1732335,59.9940387" id="Shape"></path>
<path d="M42.1391151,59.9940387 L45.3805855,59.9940387" id="Shape"></path>
<path d="M35.6561743,82.4918033 L35.6561743,74.9925484" id="Shape"></path>
</g>
</g>
<g id="business-24px-outline_building" transform="translate(71.312349, 0.000000)">
<g id="Group">
<polyline id="Shape" points="71.5050847 59.1304348 71.5050847 29.5652174 61.2900726 29.5652174 61.2900726 11.826087 40.8600484 11.826087 40.8600484 29.5652174 30.6450363 29.5652174 30.6450363 76.8695652"></polyline>
<path d="M40.8600484,130.086957 L61.2900726,130.086957" id="Shape"></path>
<path d="M51.0750605,0 L51.0750605,11.826087" id="Shape"></path>
<rect id="Rectangle-path" x="0" y="76.8695652" width="40.8600484" height="53.2173913"></rect>
<rect id="Rectangle-path" x="61.2900726" y="59.1304348" width="40.8600484" height="70.9565217"></rect>
<path d="M76.6125908,76.8695652 L86.8276029,76.8695652" id="Shape"></path>
<path d="M76.6125908,94.6086957 L86.8276029,94.6086957" id="Shape"></path>
<path d="M76.6125908,112.347826 L86.8276029,112.347826" id="Shape"></path>
<path d="M15.3225182,94.6086957 L25.5375303,94.6086957" id="Shape"></path>
<path d="M15.3225182,112.347826 L25.5375303,112.347826" id="Shape"></path>
</g>
</g>
<g id="travel-24px-outline_hotel-copy" transform="translate(224.537530, 50.163934)">
<g id="Group">
<polyline id="Shape" points="12.9658816 82.4918033 0 82.4918033 0 48.7451565 12.9658816 48.7451565"></polyline>
<polyline id="Shape" points="58.3464671 82.4918033 71.3123487 82.4918033 71.3123487 48.7451565 58.3464671 48.7451565"></polyline>
<rect id="Rectangle-path" x="12.9658816" y="0" width="45.3805855" height="82.4918033"></rect>
<path d="M25.9317632,14.9985097 L29.1732335,14.9985097" id="Shape"></path>
<path d="M42.1391151,14.9985097 L45.3805855,14.9985097" id="Shape"></path>
<path d="M25.9317632,29.9970194 L29.1732335,29.9970194" id="Shape"></path>
<path d="M42.1391151,29.9970194 L45.3805855,29.9970194" id="Shape"></path>
<path d="M25.9317632,44.9955291 L29.1732335,44.9955291" id="Shape"></path>
<path d="M42.1391151,44.9955291 L45.3805855,44.9955291" id="Shape"></path>
<path d="M25.9317632,59.9940387 L29.1732335,59.9940387" id="Shape"></path>
<path d="M42.1391151,59.9940387 L45.3805855,59.9940387" id="Shape"></path>
<path d="M35.6561743,82.4918033 L35.6561743,74.9925484" id="Shape"></path>
</g>
</g>
<g id="business-24px-outline_building-copy" transform="translate(295.849879, 3.000000)">
<g id="Group">
<polyline id="Shape" points="71.5050847 59.1304348 71.5050847 29.5652174 61.2900726 29.5652174 61.2900726 11.826087 40.8600484 11.826087 40.8600484 29.5652174 30.6450363 29.5652174 30.6450363 76.8695652"></polyline>
<path d="M40.8600484,130.086957 L61.2900726,130.086957" id="Shape"></path>
<path d="M51.0750605,0 L51.0750605,11.826087" id="Shape"></path>
<rect id="Rectangle-path" x="0" y="76.8695652" width="40.8600484" height="53.2173913"></rect>
<rect id="Rectangle-path" x="61.2900726" y="59.1304348" width="40.8600484" height="70.9565217"></rect>
<path d="M76.6125908,76.8695652 L86.8276029,76.8695652" id="Shape"></path>
<path d="M76.6125908,94.6086957 L86.8276029,94.6086957" id="Shape"></path>
<path d="M76.6125908,112.347826 L86.8276029,112.347826" id="Shape"></path>
<path d="M15.3225182,94.6086957 L25.5375303,94.6086957" id="Shape"></path>
<path d="M15.3225182,112.347826 L25.5375303,112.347826" id="Shape"></path>
</g>
</g>
</g>
<path d="M187.5,247 C255.707167,247 311,191.707167 311,123.5 C311,55.2928334 255.707167,1.42108547e-14 187.5,1.42108547e-14 C119.292833,1.42108547e-14 64,55.2928334 64,123.5 C64,191.707167 119.292833,247 187.5,247 Z" id="Oval-2" fill="url(#linearGradient-1)" opacity="0.300000012"></path>
</g>
<g id="phone" transform="translate(133.000000, 32.000000)" stroke-width="2">
<rect id="Combined-Shape" stroke="#647CE8" fill-opacity="0.65477808" fill="#223483" x="0" y="0" width="99.8310062" height="183.875349" rx="8"></rect>
<path d="M0.519953157,155.972885 L99.311053,155.972885" id="Line" stroke="#647CE8" stroke-linecap="square"></path>
<path d="M44.0762994,170.254952 L62.7946131,170.254952" id="Line" stroke="#647CE8" stroke-linecap="square"></path>
<g id="qr-code" transform="translate(33.000000, 34.000000)" stroke="#1E307E" fill="#12E5B6">
<g id="Group">
<use id="Shape" mask="url(#mask-3)" xlink:href="#path-2"></use>
<use id="Shape" mask="url(#mask-5)" xlink:href="#path-4"></use>
<use id="Rectangle-path" mask="url(#mask-7)" xlink:href="#path-6"></use>
<use id="Shape" mask="url(#mask-9)" xlink:href="#path-8"></use>
<use id="Rectangle-path" mask="url(#mask-11)" xlink:href="#path-10"></use>
<use id="Shape" mask="url(#mask-13)" xlink:href="#path-12"></use>
<use id="Rectangle-path" mask="url(#mask-15)" xlink:href="#path-14"></use>
<use id="Rectangle-path" mask="url(#mask-17)" xlink:href="#path-16"></use>
<use id="Rectangle-path" mask="url(#mask-19)" xlink:href="#path-18"></use>
<use id="Shape" mask="url(#mask-21)" xlink:href="#path-20"></use>
<use id="Shape" mask="url(#mask-23)" xlink:href="#path-22"></use>
<use id="Shape" mask="url(#mask-25)" xlink:href="#path-24"></use>
<use id="Shape" mask="url(#mask-27)" xlink:href="#path-26"></use>
<use id="Shape" mask="url(#mask-29)" xlink:href="#path-28"></use>
<use id="Shape" mask="url(#mask-31)" xlink:href="#path-30"></use>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 713 B

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.

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.

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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -19,7 +19,7 @@
<div ng-if="!fetchingNotifications">
<div class="list card">
<div class="item item-icon-left" ng-repeat="x in notifications" ng-click="x.action()">
<div class="item" ng-repeat="x in notifications" ng-click="x.action()">
<span ng-include="'views/includes/walletActivity.html'"></span>
</div>

View File

@ -2,7 +2,7 @@
<ion-nav-bar class="bar-royal">
<ion-nav-title>{{'Add wallet' | translate}}</ion-nav-title>
<ion-nav-buttons side="primary">
<button class="button back-button" ng-click="$ionicGoBack()">
<button class="button back-button" ui-sref="tabs.home">
<i class="icon ion-ios-arrow-thin-left"></i>
</button>
</ion-nav-buttons>
@ -10,17 +10,17 @@
<ion-content>
<ion-list>
<a class="item item-remove-animate item-icon-right" type="item-text-wrap" ui-sref="add.create.personal">
<a class="item item-remove-animate item-icon-right" type="item-text-wrap" ui-sref="tabs.create.personal">
<h2 translate>Create new wallet</h2>
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
</a>
<a class="item item-remove-animate item-icon-right" type="item-text-wrap" ui-sref="add.join">
<a class="item item-remove-animate item-icon-right" type="item-text-wrap" ui-sref="tabs.join">
<h2 translate>Join shared wallet</h2>
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
</a>
<a class="item item-remove-animate item-icon-right" type="item-text-wrap" ui-sref="add.import.phrase">
<a class="item item-remove-animate item-icon-right" type="item-text-wrap" ui-sref="tabs.import.phrase">
<h2 translate>Import wallet</h2>
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
</a>

View File

@ -1,5 +1,5 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-back-button>
{{'Back' | translate}}
</ion-nav-back-button>

View File

@ -31,11 +31,6 @@
<span ng-show="!bitpayCard.bitpayCardTwoFactorPending">Login to your account</span>
<span ng-show="bitpayCard.bitpayCardTwoFactorPending">2-Step Verification</span>
</h4>
<div class="box-notification error"
ng-show="bitpayCard.error"
ng-click="bitpayCard.error = null">
{{bitpayCard.error}}
</div>
<form
ng-show="!bitpayCard.bitpayCardTwoFactorPending"
@ -121,14 +116,9 @@
<option value="all">All Activity</option>
</select>
<div class="box-notification error"
ng-show="bitpayCard.error">
{{bitpayCard.error}}
</div>
<div
class="oh pr m20t text-gray size-12 text-center"
ng-show="!bitpayCard.error && !bitpayCard.bitpayCardTransactionHistory[0] &&
ng-show="!bitpayCard.bitpayCardTransactionHistory[0] &&
!bitpayCard.bitpayCardInvoiceHistory[0] && !loadingHistory">
No transactions yet
</div>
@ -176,11 +166,6 @@
</div>
<div ng-show="bitpayCard.bitpayCardAuthenticated && !bitpayCard.visaCardActivated && addFunds">
<div class="box-notification error"
ng-show="bitpayCard.error"
ng-click="bitpayCard.error = null">
{{bitpayCard.error}}
</div>
<form
name="createInvoiceForm"
ng-submit="bitpayCard.sendFunds()"
@ -215,7 +200,7 @@
<div class="col">
<button class="button button-block button-stable"
type="button"
ng-click="addFunds = false; bitpayCard.error = null">
ng-click="addFunds = false">
Cancel
</button>
</div>

View File

@ -10,12 +10,11 @@
<ion-content ng-controller="buyGlideraController as buy" ng-init="init()">
<div class="box-notification text-center size-12 text-warning" ng-show="network == 'testnet'">
<i class="fi-info"></i>
<div class="box-notification warning" ng-show="network == 'testnet'">
Testnet wallets only work with Glidera Sandbox Accounts
</div>
<h5 class="padding" ng-show="limits && !buy.show2faCodeInput && !buy.success">
<div class="box-notification notice" ng-show="limits && !buy.show2faCodeInput && !buy.success">
<span class="text-light">Daily buy limit</span>:
{{limits.dailyBuy|currency:'':2}} {{limits.currency}}
(remaining {{limits.dailyBuyRemaining|currency:'':2}} {{limits.currency}})
@ -23,7 +22,7 @@
<span class="text-light">Monthly buy limit</span>:
{{limits.monthlyBuy|currency:'':2}} {{limits.currency}}
(remaining {{limits.monthlyBuyRemaining|currency:'':2}} {{limits.currency}})
</h5>
</div>
<div class="box-notification m20b" ng-show="limits.transactDisabledPendingFirstTransaction && !buy.success">
<span class="text-warning">
@ -37,21 +36,6 @@
ng-submit="buy.get2faCode(token)" novalidate>
<div class="list">
<label class="item item-input item-stacked-label">
<span class="input-label">Wallet</span>
<input type="text"
id="address"
name="address"
ng-disabled="buy.selectedWalletId"
ng-attr-placeholder="{{'Choose your destination wallet'}}"
ng-model="buy.selectedWalletName" required>
<a on-tap="openWalletsModal(buy.allWallets)">
<i class="icon ion-briefcase size-18"></i>
</a>
</label>
<label class="item item-input item-stacked-label">
<span class="input-label">Amount in {{showAlternative ? 'USD' : 'BTC'}}</span>
<input ng-show="!showAlternative"
@ -81,6 +65,8 @@
class="postfix"
on-tap="showAlternative = false; fiat = null; buy.buyPrice = null">USD</a>
</label>
<wallets ng-if="wallets[0]" wallets="wallets"></wallets>
</div>
<div class="text-center text-gray size-12 m20b" ng-show="!buy.gettingBuyPrice && buy.buyPrice.qty">
@ -99,7 +85,7 @@
<button class="button button-block"
type="submit"
ng-disabled="limits.transactDisabledPendingFirstTransaction || !buy.buyPrice.qty || !buy.selectedWalletId || buy.loading">
ng-disabled="limits.transactDisabledPendingFirstTransaction || !buy.buyPrice.qty || buy.loading">
Continue
</button>
</form>
@ -128,11 +114,6 @@
</p>
</div>
</div>
<div class="box-notification m20b" ng-show="buy.error && !buy.success">
<span class="text-warning">
{{buy.error}}
</span>
</div>
<div class="text-center" ng-show="buy.success">
<h1>Purchase initiated</h1>
<p class="text-gray">

View File

@ -1,5 +1,5 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-back-button>
{{'Back' | translate}}
</ion-nav-back-button>
@ -42,7 +42,7 @@
<wallets ng-if="wallets[0]" wallets="wallets"></wallets>
<div class="item item-icon-left item-icon-right" ng-click="showDescriptionPopup()">
<span ng-show="!description">Add Description</span>
<span ng-show="!description" translate>Add Description</span>
<span ng-show="description">{{description}}</span>
<i class="icon ion-ios-chatbubble-outline size-21"></i>
<i class="icon ion-ios-plus-empty size-21"></i>

View File

@ -4,17 +4,11 @@
<ion-nav-title>{{wallet.name}}</ion-nav-title>
<ion-nav-buttons side="primary">
<button class="button" href ui-sref="tabs.home">
<i class="ion-arrow-left-c"></i> Back
<i class="ion-arrow-left-c"></i> {{'Back' | translate}}
</button>
</ion-nav-buttons>
</ion-nav-bar>
<ion-nav-buttons side="primary">
<button class="button" href ui-sref="tabs.home">
<i class="ion-arrow-left-c"></i> Back
</button>
</ion-nav-buttons>
<ion-content delegate-handle="my-handle" overflow-scroll="true">
<div ng-show="!wallet.notAuthorized">
<h1 class="text-center" translate>Share this invitation with your copayers</h1>

View File

@ -1,11 +1,11 @@
<ion-view >
<ion-tabs class="tabs-striped tabs-color-positive tabs-color-active-positive tabs-top">
<ion-tab title="Personal Wallet" ui-sref="add.create.personal">
<ion-tab title="Personal Wallet" ui-sref="tabs.create.personal">
<ion-nav-view name="tab-create-personal"></ion-nav-view>
</ion-tab>
<ion-tab title="Shared Wallet" ui-sref="add.create.shared">
<ion-tab title="Shared Wallet" ui-sref="tabs.create.shared">
<ion-nav-view name="tab-create-shared"></ion-nav-view>
</ion-tab>

View File

@ -1,11 +1,11 @@
<ion-view >
<ion-tabs class="tabs-striped tabs-color-positive tabs-color-active-positive tabs-top">
<ion-tab title="File/Text" ui-sref="wallet.export.file">
<ion-tab title="File/Text" ui-sref="tabs.preferences.export.file">
<ion-nav-view name="tab-export-file"></ion-nav-view>
</ion-tab>
<ion-tab title="QR Code" ui-sref="wallet.export.qrCode">
<ion-tab title="QR Code" ui-sref="tabs.preferences.export.qrCode">
<ion-nav-view name="tab-export-qrCode"></ion-nav-view>
</ion-tab>

View File

@ -10,38 +10,14 @@
<ion-content ng-controller="glideraController as glidera" ng-init="init()">
<div class="box-notification text-center size-12 text-warning" ng-show="network == 'testnet'">
<i class="fi-info"></i>
<div class="box-notification warning" ng-show="network == 'testnet'">
Testnet wallets only work with Glidera Sandbox Accounts
</div>
<div class="m20b box-notification" ng-if="error">
<div class="text-warning">
<span>{{error}}</span>
</div>
</div>
<div class="m10t text-center" ng-show="error">
<button
class="button"
ng-show="error.indexOf('Forbidden') == 40"
ng-click="token = null; error = null">
Request a new token
</button>
<div ng-show="error.indexOf('Forbidden') != 40">
<button
class="button"
ng-click="init(token)">
Retry
</button>
<div class="m20t size-12">
<a class="text-gray" href ui-sref="glidera.preferences">Preferences</a>
</div>
</div>
</div>
<div ng-if="!token && !error">
<div ng-if="!token">
<div ng-init="showOauthForm = false">
<div class="text-center m20b">
<div class="text-center m20v">
<img src="img/glidera-logo.png" ng-click="update(token, permissions)" width="200">
</div>
<div class="text-center small-10 small-centered columns" ng-show="!showOauthForm">
@ -70,9 +46,6 @@
</div>
</div>
<div ng-show="showOauthForm">
<div class="text-left box-notification size-12 text-warning" ng-show="error">
{{error}}
</div>
<form name="oauthCodeForm" ng-submit="glidera.submitOauthCode(code)" novalidate>
<div class="list">
<label class="item item-input item-stacked-label">
@ -87,7 +60,7 @@
<input type="button"
value="Cancel"
class="button button-block"
ng-click="showOauthForm = false; error = null">
ng-click="showOauthForm = false">
</div>
<div class="col">
<input
@ -103,16 +76,17 @@
</div>
<div ng-if="token && permissions">
<div class="p20v text-center">
<img src="img/glidera-logo.png" ng-click="update(token, permissions)" width="100">
<div class="text-center m20v">
<img src="img/glidera-logo.png" ng-click="update(token, permissions)" width="200">
</div>
<div class="list">
<a class="item item-icon-left" href ui-sref="glidera.preferences">
<i class="icon ion-gear-a"></i>
<a class="item item-icon-left item-icon-right" href ui-sref="glidera.preferences">
<i class="icon ion-ios-gear"></i>
<span ng-show="personalInfo">{{personalInfo.firstName}} {{personalInfo.lastName}}</span>
<span class="item-note" ng-show="email">
{{email}}
</span>
<i class="icon ion-ios-arrow-right"></i>
</a>
</div>
<div class="padding">
@ -133,54 +107,56 @@
<div class="list"
ng-show="status && status.userCanTransact">
<a ng-show="status.userCanBuy"
class="item item-avatar"
class="item item-icon-right"
href ui-sref="glidera.buy">
<img src="img/buy-bitcoin.svg" alt="buy bitcoin" width="40">
<img src="img/buy-bitcoin.svg" alt="buy bitcoin" width="25">
Buy Bitcoin
<i class="icon ion-ios-arrow-right"></i>
</a>
<a class="item item-avatar"
<a class="item item-icon-right"
ng-show="status.userCanSell"
href ui-sref="glidera.sell">
<img src="img/sell-bitcoin.svg" alt="buy bitcoin" width="40">
<img src="img/sell-bitcoin.svg" alt="buy bitcoin" width="25">
Sell Bitcoin
<i class="icon ion-ios-arrow-right"></i>
</a>
</div>
<div ng-show="permissions.transaction_history">
<h4>Activity</h4>
<div class="card" ng-show="permissions.transaction_history">
<div class="item item-divider">
Activity
</div>
<div ng-show="txs.length == 0 "
class="size-12 p10 text-center text-gray">
class="item">
No activity in your account
</div>
<div class="list">
<a ng-repeat="tx in txs"
ng-click="glidera.openTxModal(token, tx)"
class="item item-avatar">
<img src="img/bought.svg" alt="bought" width="39" ng-show="tx.type == 'BUY' && tx.status == 'COMPLETE'">
<img src="img/bought-pending.svg" alt="bought" width="33" ng-show="tx.type == 'BUY' && tx.status == 'PROCESSING'">
<img src="img/sold.svg" alt="bought" width="39" ng-show="tx.type == 'SELL' && tx.status == 'COMPLETE'">
<img src="img/sold-pending.svg" alt="bought" width="33" ng-show="tx.type == 'SELL' && tx.status == 'PROCESSING'">
<a ng-repeat="tx in txs"
ng-click="glidera.openTxModal(token, tx)"
class="item">
<h2>
<span ng-show="tx.type == 'BUY'">Bought</span>
<span ng-show="tx.type == 'SELL'">Sold</span>
<b>{{tx.qty}}</b> BTC
</h2>
<p>
{{tx.subtotal|currency:'':2}} {{tx.currency}}
</p>
<div class="right">
<div class="m5t size-12 text-gray">
<div ng-show="tx.status == 'COMPLETE'">
<time ng-if="tx.transactionDate">{{tx.transactionDate | amTimeAgo}}</time>
</div>
<div ng-show="tx.status == 'PROCESSING'">
<span class="label outline gray radius text-gray text-info" ng-if="tx.status == 'PROCESSING'">Processing</span>
</div>
</div>
<span class="item-note">
<div ng-show="tx.status == 'COMPLETE'">
<time ng-if="tx.transactionDate">{{tx.transactionDate | amTimeAgo}}</time>
</div>
</a>
</div>
<div ng-show="tx.status == 'PROCESSING'">
<span ng-if="tx.status == 'PROCESSING'">Processing</span>
</div>
</span>
<img class="left m10r" src="img/bought.svg" alt="bought" width="39" ng-show="tx.type == 'BUY' && tx.status == 'COMPLETE'">
<img class="left m10r" src="img/bought-pending.svg" alt="bought" width="33" ng-show="tx.type == 'BUY' && tx.status == 'PROCESSING'">
<img class="left m10r" src="img/sold.svg" alt="bought" width="39" ng-show="tx.type == 'SELL' && tx.status == 'COMPLETE'">
<img class="left m10r" src="img/sold-pending.svg" alt="bought" width="33" ng-show="tx.type == 'SELL' && tx.status == 'PROCESSING'">
<h2>
<span ng-show="tx.type == 'BUY'">Bought</span>
<span ng-show="tx.type == 'SELL'">Sold</span>
<b>{{tx.qty}}</b> BTC
</h2>
<p>
{{tx.subtotal|currency:'':2}} {{tx.currency}}
</p>
</a>
</div>
</div>
</ion-content>

View File

@ -1,22 +1,24 @@
<div
class="topbar-container"
ng-include="'views/includes/topbar.html'"
ng-init="titleSection='Glidera'; closeToHome = true">
</div>
<ion-view>
<ion-nav-bar class="bar-stable">
<ion-nav-buttons side="primary">
<button class="button no-border" ui-sref="tabs.home">
Close
</button>
</ion-nav-buttons>
<ion-nav-title>Glidera</ion-nav-title>
</ion-nav-bar>
<div class="content glidera" ng-controller="glideraUriController as glidera" ng-init="glidera.checkCode()">
<ion-content ng-controller="glideraUriController" ng-init="checkCode()">
<div class="row m20t">
<div class="large-12 columns">
<div class="text-center">
<img src="img/glidera-logo.png"
ng-click="index.updateGlidera()" width="100">
</div>
<div class="box-notification warning" ng-show="network == 'testnet'">
Testnet wallets only work with Glidera Sandbox Accounts
</div>
<div class="m10t text-center" ng-show="glidera.error">
<div class="notification m10b size-12 text-warning">{{glidera.error}}</div>
<button class="outline dark-gray tiny round" ng-click="glidera.submitOauthCode(glidera.code)">Try again</button>
<div class="text-center">
<img src="img/glidera-logo.png" width="100">
<div class="m20t" translate>
Connecting...
</div>
</div>
</div>
</div>
</ion-content>
</ion-view>

View File

@ -1,15 +1,15 @@
<ion-view >
<ion-tabs class="tabs-striped tabs-color-positive tabs-color-active-positive tabs-top">
<ion-tab title="Recovery Phrare" ui-sref="add.import.phrase">
<ion-tab title="Recovery Phrare" ui-sref="tabs.import.phrase">
<ion-nav-view name="tab-import-phrase"></ion-nav-view>
</ion-tab>
<ion-tab title="File/Text" ui-sref="add.import.file">
<ion-tab title="File/Text" ui-sref="tabs.import.file">
<ion-nav-view name="tab-import-file"></ion-nav-view>
</ion-tab>
<ion-tab title="Hardware Wallet" ui-sref="add.import.hardware">
<ion-tab title="Hardware Wallet" ui-sref="tabs.import.hardware">
<ion-nav-view name="tab-import-hardware"></ion-nav-view>
</ion-tab>

View File

@ -1,14 +1,12 @@
<ul>
<li translate>The software you are about to use functions as a free, open source, and multi-signature digital wallet.</li>
<li translate>The software does not constitute an account where BitPay or other third parties serve as financial intermediaries or custodians of your bitcoin.</li>
<li translate>While the software has undergone beta testing and continues to be improved by feedback from the open-source user and developer community, we cannot guarantee that there will be no bugs in the software.</li>
<li translate>You acknowledge that your use of this software is at your own discretion and in compliance with all applicable laws.</li>
<li translate>You are responsible for safekeeping your passwords, private key pairs, PINs and any other codes you use to access the software.</li>
<li translate><b>IF YOU LOSE ACCESS TO YOUR COPAY WALLET OR YOUR ENCRYPTED PRIVATE KEYS AND YOU HAVE NOT SEPARATELY STORED A BACKUP OF YOUR WALLET AND CORRESPONDING PASSWORD, YOU ACKNOWLEDGE AND AGREE THAT ANY BITCOIN YOU HAVE ASSOCIATED WITH THAT COPAY WALLET WILL BECOME INACCESSIBLE.</b></li>
<li translate>All transaction requests are irreversible.</li>
<li translate>The authors of the software, employees and affiliates of Bitpay, copyright holders, and BitPay, Inc. cannot retrieve your private keys or passwords if you lose or forget them and cannot guarantee transaction confirmation as they do not have control over the Bitcoin network.</li>
<li translate>To the fullest extent permitted by law, this software is provided “as is” and no representations or warranties can be made of any kind, express or implied, including but not limited to the warranties of merchantability, fitness or a particular purpose and noninfringement.</li>
<li translate>You assume any and all risks associated with the use of the software.</li>
<li translate>In no event shall the authors of the software, employees and affiliates of Bitpay, copyright holders, or BitPay, Inc. be held liable for any claim, damages or other liability, whether in an action of contract, tort, or otherwise, arising from, out of or in connection with the software.</li>
<li translate>We reserve the right to modify this disclaimer from time to time.</li>
</ul>
<p translate>
The software you are about to use functions as a free, open source, and multi-signature digital wallet. The software does not constitute an account where BitPay or other third parties serve as financial intermediaries or custodians of your bitcoin.
</p>
<p translate>
While the software has undergone beta testing and continues to be improved by feedback from the open-source user and developer community, we cannot guarantee that there will be no bugs in the software. You acknowledge that your use of this software is at your own discretion and in compliance with all applicable laws. You are responsible for safekeeping your passwords, private key pairs, PINs and any other codes you use to access the software.
</p>
<p translate>
IF YOU LOSE ACCESS TO YOUR COPAY WALLET OR YOUR ENCRYPTED PRIVATE KEYS AND YOU HAVE NOT SEPARATELY STORED A BACKUP OF YOUR WALLET AND CORRESPONDING PASSWORD, YOU ACKNOWLEDGE AND AGREE THAT ANY BITCOIN YOU HAVE ASSOCIATED WITH THAT COPAY WALLET WILL BECOME INACCESSIBLE. All transaction requests are irreversible. The authors of the software, employees and affiliates of Bitpay, copyright holders, and BitPay, Inc. cannot retrieve your private keys or passwords if you lose or forget them and cannot guarantee transaction confirmation as they do not have control over the Bitcoin network.
</p>
<p translate>
To the fullest extent permitted by law, this software is provided “as is” and no representations or warranties can be made of any kind, express or implied, including but not limited to the warranties of merchantability, fitness or a particular purpose and noninfringement. You assume any and all risks associated with the use of the software. In no event shall the authors of the software, employees and affiliates of Bitpay, copyright holders, or BitPay, Inc. be held liable for any claim, damages or other liability, whether in an action of contract, tort, or otherwise, arising from, out of or in connection with the software. We reserve the right to modify this disclaimer from time to time.
</p>

View File

@ -1,42 +1,58 @@
<span class="wallet-activity">
<div ng-if="x.types.indexOf('NewIncomingTx')>=0">
<span>Payment Received</span>
<div ng-if="x.types.indexOf('NewCopayer')>=0 && x.wallet.n>1">
Copayer joined
</div>
<div ng-if="x.types.indexOf('NewCopayer')>=0 && x.wallet.n==1">
Wallet created
</div>
<div ng-if="x.types.indexOf('NewOutgoingTx')>=0">
<span translate>Payment Sent </span>
<div class="wallet-activity-amount">
{{x.amountStr}}
</div>
</div>
<div ng-if="x.types.indexOf('NewIncomingTx')>=0">
<span translate>Payment Received</span>
<div class="wallet-activity-amount">
{{x.amountStr}}
</div>
</div>
<div ng-if="x.types.indexOf('TxProposalRemoved')>=0">
<i class="icon ion-ios-close-empty size-21" ng-style="{'color':x.wallet.color}"></i>
Proposal Deleted
<span translate>Proposal Deleted</span>
</div>
<div ng-if="x.types.indexOf('TxProposalRejected')>=0">
<i class="icon ion-ios-close-empty size-21" ng-style="{'color':x.wallet.color}"></i>
Proposal Rejected
<span translate>Proposal Rejected</span>
</div>
<div ng-if="x.types.indexOf('TxProposalRemoved') == -1 && x.types.indexOf('TxProposalRejected') == -1">
<span ng-if="x.types.indexOf('NewTxProposal')>=0 ">
<span ng-if="x.types.indexOf('NewTxProposal')>=0 && x.types.indexOf('NewOutgoingTx')==-1 ">
<i class="icon ion-arrow-up-c size-21" ng-style="{'color':x.wallet.color}"></i>
{{x.amountStr}}
<i>{{x.message}}</i>
</span>
<span ng-if="x.types.indexOf('TxProposalAcceptedBy')>=0 && x.types.indexOf('NewTxProposal') == -1 ">
<span ng-if="x.types.indexOf('TxProposalAcceptedBy')>=0 && x.types.indexOf('NewTxProposal') == -1 && x.types.indexOf('NewOutgoingTx')==-1">
<i class="icon ion-checkmark-round size-21" ng-style="{'color':x.wallet.color}"></i>
Proposal Accepted
<span translate>Proposal Accepted</span>
</span>
</div>
<p class="wallet-activity-note">
<!-- {{x.types}} -->
<i class="icon ion-record wallet-activity-note-child" ng-style="{'color':x.wallet.color}"></i>
<span ng-if="x.creatorName" class="wallet-activity-note-child">{{ x.creatorName}}@</span>
<span class="wallet-activity-note-child">{{x.wallet.name}}</span>
<time class="wallet-activity-note-child">{{ x.createdOn * 1000 | amTimeAgo}}</time>
</p>
</span>

View File

@ -1,11 +1,11 @@
<ion-view>
<ion-nav-bar class="bar-royal">
<ion-nav-buttons side="primary">
<button class="button no-border" ui-sref="add.main">
<i class="icon ion-chevron-left"></i> Back
<button class="button no-border" ui-sref="tabs.add">
<i class="icon ion-chevron-left"></i> {{'Back' | translate}}
</button>
</ion-nav-buttons>
<ion-nav-title>Join shared wallet</ion-nav-title>
<ion-nav-title>{{'Join shared wallet' | translate}}</ion-nav-title>
</ion-nav-bar>

View File

@ -1,7 +1,7 @@
<ion-modal-view ng-controller="addressbookModalController" ng-init="initAddressbook()">
<ion-header-bar align-title="center" class="bar-royal">
<button class="button button-clear button-positive"
ng-click="closeAddressbookModal()">
ng-click="closeAddressbookModal()" translate>
Close
</button>
<div class="h1 title">
@ -11,7 +11,7 @@
<button class="button button-clear button-positive"
ng-click="toggleAddAddressbookEntry()">
<i ng-show="!addAddressbookEntry" class="icon ion-ios-plus-empty"></i>
<span ng-show="addAddressbookEntry">Cancel</span>
<span ng-show="addAddressbookEntry" translate>Cancel</span>
</button>
</ion-header-bar>
@ -56,7 +56,7 @@
<div class="list">
<label class="item item-input item-stacked-label">
<span class="input-label">Address</span>
<span class="input-label" translate>Address</span>
<div class="input-notification">
<i class="icon ion-checkmark-circled balanced"
ng-show="!addressbookForm.address.$invalid"></i>
@ -74,7 +74,7 @@
</label>
<label class="item item-input item-stacked-label">
<span class="input-label">Label</span>
<span class="input-label" translate>Label</span>
<input type="text"
id="label"
name="label"

View File

@ -1,5 +1,5 @@
<ion-modal-view ng-controller="glideraTxDetailsController">
<ion-header-bar align-title="center" class="tab-bar">
<ion-header-bar align-title="center" class="bar-stable">
<button class="button button-clear button-positive"
ng-click="cancel()">
Close
@ -8,8 +8,7 @@
</ion-header-bar>
<ion-content>
<div class="modal-content fix-modals-touch">
<div class="header-modal bg-gray text-center">
<div class="text-center">
<div class="p20">
<img src="img/bought.svg" alt="bought" width="80" ng-show="tx.type == 'BUY' && tx.status == 'COMPLETE'">
<img src="img/bought-pending.svg" alt="bought" width="65" ng-show="tx.type == 'BUY' && tx.status == 'PROCESSING'">
@ -19,46 +18,46 @@
<span ng-show="tx.type == 'BUY'">Bought</span>
<span ng-show="tx.type == 'SELL'">Sold</span>
<b>{{tx.qty}}</b> BTC
<div class="size-36 m20b">
<div class="size-36 m20v">
{{tx.subtotal|currency:'':2}} {{tx.currency}}
</div>
</div>
<ul class="no-bullet size-14">
<ul class="list">
<li class="line-b p10 oh">
<span class="text-gray">Status</span>
<span class="text-success right" ng-if="tx.status == 'COMPLETE'">Completed</span>
<span class="text-info right" ng-if="tx.status == 'PROCESSING'">Processing</span>
<span class="text-warning right" ng-if="tx.status == 'ERROR'">Error</span>
<li class="item">
Status
<span class="item-note">
<span class="text-success" ng-if="tx.status == 'COMPLETE'">Completed</span>
<span class="text-info" ng-if="tx.status == 'PROCESSING'">Processing</span>
<span class="text-warning" ng-if="tx.status == 'ERROR'">Error</span>
</span>
</li>
<li ng-show="tx.transactionDate" class="line-b p10 oh">
<span class="text-gray">Date</span>
<span class="right">{{tx.transactionDate | amCalendar}}</span>
<li ng-show="tx.transactionDate" class="item">
Date
<span class="item-note">{{tx.transactionDate | amCalendar}}</span>
</li>
<li ng-show="tx.price" class="line-b p10 oh">
<span class="text-gray">Exchange rate</span>
<span class="right">{{tx.price|currency:'':2}} {{tx.currency}}/BTC</span>
<li ng-show="tx.price" class="item">
Exchange rate
<span class="item-note">{{tx.price|currency:'':2}} {{tx.currency}}/BTC</span>
</li>
<li ng-show="tx.subtotal" class="line-b p10 oh">
<span class="text-gray">Subtotal</span>
<span class="right">{{tx.subtotal|currency:'':2}} {{tx.currency}}</span>
<li ng-show="tx.subtotal" class="item">
Subtotal
<span class="item-note">{{tx.subtotal|currency:'':2}} {{tx.currency}}</span>
</li>
<li ng-show="tx.fees" class="line-b p10 oh">
<span class="text-gray">Fees</span>
<span class="right">{{tx.fees|currency:'':2}} {{tx.currency}}</span>
<li ng-show="tx.fees" class="item">
Fees
<span class="item-note">{{tx.fees|currency:'':2}} {{tx.currency}}</span>
</li>
<li ng-show="tx.total" class="line-b p10 oh text-bold">
<span class="text-gray">Total</span>
<span class="right">{{tx.total|currency:'':2}} {{tx.currency}}</span>
<li ng-show="tx.total" class="item">
Total
<span class="item-note">{{tx.total|currency:'':2}} {{tx.currency}}</span>
</li>
</ul>
<div class="extra-margin-bottom"></div>
</div>
</ion-content>
</ion-modal-view>

View File

@ -68,7 +68,7 @@
<p>
<time ng-if="btx.time">{{btx.time * 1000 | amTimeAgo}}</time>
<span translate class="text-warning"
ng-show="!btx.time && (!btx.confirmations || btx.confirmations == 0)">
ng-show="!btx.time && (!btx.confirmations || btx.confirmations == 0)" translate>
Unconfirmed
</span>
</p>

View File

@ -138,7 +138,7 @@
</span>
</li>
<li class="line-b p10">
<span class="text-gray">Merchant Message</span>
<span class="text-gray" translate>Merchant Message</span>
<span class="db">{{tx.paypro.pr.pd.memo}}</span>
</li>
</ul>

View File

@ -2,12 +2,12 @@
<ion-header-bar align-title="center" class="tab-bar">
<div class="left-small">
<a ng-click="cancel()" class="p10">
<span class="text-close">Close</span>
<span class="text-close" translate>Close</span>
</a>
</div>
<h1 class="title ellipsis">
<span ng-show="type == 'BUY' || type == 'RECEIVE'">Choose your destination wallet</span>
<span ng-show="type == 'SELL' || type == 'SEND'">Choose your source wallet</span>
<span ng-show="type == 'BUY' || type == 'RECEIVE'" translate>Choose your destination wallet</span>
<span ng-show="type == 'SELL' || type == 'SEND'" translate>Choose your source wallet</span>
</h1>
</ion-header-bar>
@ -22,7 +22,7 @@
<div class="left">
<i class="fi-info size-18 m10r"></i>
</div>
<div class="size-10 m5t">
<div class="size-10 m5t" translate>
Notice: only 1-1 (single signature) wallets can be used for sell bitcoin
</div>
</h4>

View File

@ -1,14 +1,14 @@
<ion-view>
<ion-nav-bar class="bar-royal">
<ion-view id="terms-of-use">
<ion-nav-bar class="bar-ligt">
<ion-nav-title>{{'Terms of Use' | translate}}</ion-nav-title>
<ion-nav-buttons side="primary">
<button class="button no-border" href ui-sref="onboarding.disclaimer">
<i class="icon ion-chevron-left"></i> {{'Back' | translate}}
<i class="icon ion-arrow-left-c"></i>
</button>
</ion-nav-buttons>
</ion-nav-bar>
<ion-content ng-controller="termsController" ng-init="accept = false;">
<p ng-include="'views/includes/terms.html'"></p>
<div ng-include="'views/includes/terms.html'"></div>
<div class="padding-vertical" ng-show="lang != 'en'">
<a ng-click="$root.openExternalLink('https://copay.io/disclaimer')" translate>Official English Disclaimer</a>
</div>

View File

@ -1,9 +1,9 @@
<ion-view ng-controller="tourController" ng-init="init()">
<ion-nav-bar class="bar-royal">
<ion-nav-title>{{'Get Started' | translate}}</ion-nav-title>
<ion-view ng-controller="tourController" ng-init="init()" class="onboarding" id="onboard-tour">
<ion-nav-bar class="bar-stable">
<ion-nav-title></ion-nav-title>
<ion-nav-buttons side="primary">
<button class="button no-border" ng-click="goBack()">
<i class="icon ion-chevron-left"></i> {{'Back' | translate}}
<i class="icon ion-arrow-left-c"></i>
</button>
</ion-nav-buttons>
<ion-nav-buttons side="secondary">
@ -14,48 +14,72 @@
</ion-nav-bar>
<ion-slides class="slides" options="options" slider="data.slider">
<ion-slide-page>
<ion-content >
<div class="text-center">
<h2 translate>Bitcoin is digital money</h2>
<p translate>
<ion-content id="onboard-tour-secure">
<div class="text-center row">
<h2 class="col col-60" translate>Bitcoin is secure, digital money</h2>
</div>
<div class="text-center row">
<p translate class="col col-75 tagline">
You can spend bitcoin at millions of websites and stores worldwide
</p>
<p translate>
</div>
<div id="cta">
</div>
<div class="row text-center">
<p translate class="col">
Just scan the code to pay
</p>
<button class="button icon-right ion-chevron-right button-positive" ng-click="slideNext()" translate>
Got it
</div>
<div class="row">
<button class="button button-positive col col-75 next-slide" ng-click="slideNext()">
Got it <i class="icon ion-arrow-right-c"></i>
</button>
</div>
</ion-content>
</ion-slide-page>
<ion-slide-page>
<ion-content >
<div class="text-center">
<h2 translate>Bitcoin is currency</h2>
<p translate>
<ion-content id="onboard-tour-currency">
<div class="text-center row">
<h2 class="col col-75" translate>Bitcoin is a currency</h2>
</div>
<div class="text-center row">
<p translate class="col col-75 tagline">
You can trade it for other currencies like US Dollars, Euros, or Pounds
</p>
<p translate>
</div>
<div id="cta">
</div>
<div class="row text-center">
<p translate class="col">
The exchange rate changes with the market
</p>
<button class="button icon-right ion-chevron-right button-positive" ng-click="slideNext()" translate>
Makes sense
</div>
<div class="row">
<button class="button button-positive col col-75 next-slide" ng-click="slideNext()">
Makes sense <i class="icon ion-arrow-right-c"></i>
</button>
</div>
</ion-content>
</ion-slide-page>
<ion-slide-page>
<ion-content >
<div class="text-center">
<h2 translate>You control your bitcoin</h2>
<p translate>
<ion-content id="onboard-tour-control">
<div class="text-center row">
<h2 translate class="col col-75">You control your bitcoin</h2>
</div>
<div class="text-center row">
<p translate class="col col-75 tagline">
The BitPay wallet stores your bitcoin with cutting-edge security
</p>
<p translate>
</div>
<div id="cta">
</div>
<div class="row text-center">
<p translate class="col">
Not even BitPay can access it
</p>
<button class="button icon-right button-positive" ng-click="createDefaultWallet()" translate>
</div>
<div class="row">
<button class="button button-positive col col-75 get-started" ng-click="createDefaultWallet()">
Create bitcoin wallet
</button>
</div>

View File

@ -1,12 +1,20 @@
<ion-view>
<ion-view id="onboard-welcome" class="onboarding">
<ion-content ng-controller="welcomeController" ng-init="createProfile()">
<img src="../img/onboarding-welcome-shopping24.png" id="shopping-24" />
<div class="text-center">
<h2>bitpay</h2>
<span translate>
Take control of your money - get started with bitcoin
</span>
<button class="button button-block button-positive" href ui-sref="onboarding.tour" translate>Get started</button>
<button class="button button-block button-light" ng-click="goImport()" translate>Restore</button>
</div>
<div class="row">
<img src='../../img/bitpay-logo.svg' class="logo col col-50" />
</div>
<div class="row">
<p translate class="text-center col col-60">
Take control of your money - get started with bitcoin
</p>
</div>
<div class="row">
<button class="button button-block get-started col col-75" href ui-sref="onboarding.tour" translate>Get started</button>
</div>
<div class="row">
<button class="button button-block restore col col-75" translate href ui-sref="tabs.import({'fromOnboarding':true})">Restore</button>
</div>
</ion-content>
</ion-view>

View File

@ -1,5 +1,5 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-back-button>
{{'Back' | translate}}
</ion-nav-back-button>
@ -9,7 +9,7 @@
<div class="item item-divider">
Preferences
</div>
<div class="item item-icon-right" href ui-sref="wallet.preferencesAlias">
<div class="item item-icon-right" href ui-sref="tabs.preferences.preferencesAlias">
<span translate>Wallet Name</span>
<span class="item-note">
{{alias||wallet.walletName}}
@ -28,7 +28,7 @@
{{wallet.externalSource}}
</span>
</div>
<div class="item item-icon-right" href ui-sref="wallet.preferencesColor">
<div class="item item-icon-right" href ui-sref="tabs.preferences.preferencesColor">
<span ng-style="{'color': wallet.color}">&block;</span>
<span translate>Wallet Color</span>
<span class="item-note">
@ -36,7 +36,7 @@
</span>
<i class="icon ion-ios-arrow-right"></i>
</div>
<div class="item item-icon-right" href ui-sref="wallet.preferencesEmail">
<div class="item item-icon-right" href ui-sref="tabs.preferences.preferencesEmail">
<span translate>Email Notifications</span>
<span class="item-note">
<span ng-if="!wallet.email" translate>Disabled</span>
@ -44,10 +44,10 @@
</span>
<i class="icon ion-ios-arrow-right"></i>
</div>
<div class="item item-divider">
<div class="item item-divider" translate>
Security
</div>
<div class="item item-icon-right" href ui-sref="wallet.backup" ng-hide="wallet.isPrivKeyExternal()">
<div class="item item-icon-right" href ui-sref="tabs.preferences.backup" ng-hide="wallet.isPrivKeyExternal()">
<span translate>Backup</span>
<i class="icon ion-ios-arrow-right"></i>
</div>
@ -61,14 +61,14 @@
<span class="toggle-label" translate>Request Fingerprint</span>
</ion-toggle>
</div>
<div class="item item-icon-right" href ui-sref="wallet.deleteWords" ng-show ="!deleted">
<div class="item item-icon-right" href ui-sref="tabs.preferences.deleteWords" ng-show ="!deleted">
<span translate>Delete recovery phrase</span>
<i class="icon ion-ios-arrow-right"></i>
</div>
<div class="item item-divider">
<div class="item item-divider" translate>
Advanced
</div>
<div class="item item-icon-right" href ui-sref="wallet.preferencesAdvanced">
<div class="item item-icon-right" href ui-sref="tabs.preferences.preferencesAdvanced">
<span translate>Advanced</span>
<i class="icon ion-ios-arrow-right"></i>
</div>

View File

@ -1,5 +1,5 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-buttons side="primary">
<button class="button button-stable no-border" ui-sref="tabs.settings">
<i class="icon ion-chevron-left"></i> {{'Back' | translate}}
@ -7,7 +7,7 @@
</ion-nav-buttons>
</ion-nav-bar>
<ion-content ng-controller="preferencesAbout">
<div class="item item-divider">
<div class="item item-divider" translate>
Release information
</div>
<div class="item item-icon-left">
@ -26,15 +26,15 @@
</div>
<div class="item item-divider">
</div>
<div class="item item-icon-left" href ui-sref="settings.termsOfUse">
<div class="item item-icon-left" href ui-sref="tabs.termsOfUse">
<i class="icon ion-ios-bell-outline"></i>
<span translate>Terms of Use</span>
</div>
<div class="item item-icon-left" href ui-sref="settings.translators">
<div class="item item-icon-left" href ui-sref="tabs.translators">
<i class="icon ion-ios-bell-outline"></i>
<span translate>Translators</span>
</div>
<div class="item item-icon-left" href ui-sref="settings.logs">
<div class="item item-icon-left" href ui-sref="tabs.logs">
<i class="icon ion-ios-bell-outline"></i>
<span translate>Session log</span>
</div>

View File

@ -1,5 +1,5 @@
<ion-view >
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-title>{{'Advanced Preferences' | translate}}</ion-nav-title>
<ion-nav-back-button>
{{'Back' | translate}}
@ -9,27 +9,27 @@
<div class="list">
<div class="item item-divider">
</div>
<div class="item item-icon-right" href ui-sref="wallet.information">
<div class="item item-icon-right" href ui-sref="tabs.preferences.information">
<span translate>Wallet Information</span>
<i class="icon ion-ios-arrow-right"></i>
</div>
<div class="item item-icon-right" ng-show="index.network == 'livenet'" href ui-sref="wallet.paperWallet">
<div class="item item-icon-right" ng-show="index.network == 'livenet'" href ui-sref="tabs.preferences.paperWallet">
<span translate>Sweep paper wallet</span>
<i class="icon ion-ios-arrow-right"></i>
</div>
<div class="item item-icon-right" href ui-sref="wallet.export.file">
<div class="item item-icon-right" href ui-sref="tabs.preferences.export.file">
<span translate>Export Wallet</span>
<i class="icon ion-ios-arrow-right"></i>
</div>
<div class="item item-icon-right" href ui-sref="wallet.preferencesBwsUrl">
<div class="item item-icon-right" href ui-sref="tabs.preferences.preferencesBwsUrl">
<span translate>Wallet Service URL</span>
<i class="icon ion-ios-arrow-right"></i>
</div>
<div class="item item-icon-right" href ui-sref="wallet.preferencesHistory">
<div class="item item-icon-right" href ui-sref="tabs.preferences.preferencesHistory">
<span translate>Transaction History</span>
<i class="icon ion-ios-arrow-right"></i>
</div>
<div class="item item-icon-right" href ui-sref="wallet.delete">
<div class="item item-icon-right" href ui-sref="tabs.preferences.delete">
<span translate>Delete Wallet</span>
<i class="icon ion-ios-arrow-right"></i>
</div>

View File

@ -1,5 +1,5 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-back-button>
{{'Back' | translate}}
</ion-nav-back-button>

View File

@ -1,5 +1,5 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-back-button>
{{'Back' | translate}}
</ion-nav-back-button>

View File

@ -1,5 +1,5 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-back-button>
{{'Back' | translate}}
</ion-nav-back-button>

View File

@ -1,5 +1,5 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-back-button>
{{'Back' | translate}}
</ion-nav-back-button>

View File

@ -1,5 +1,5 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-back-button>
{{'Back' | translate}}
</ion-nav-back-button>

View File

@ -1,5 +1,5 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-back-button>
{{'Back' | translate}}
</ion-nav-back-button>

View File

@ -1,5 +1,5 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-back-button>
{{'Back' | translate}}
</ion-nav-back-button>

View File

@ -1,5 +1,5 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-back-button>
{{'Back' | translate}}
</ion-nav-back-button>

View File

@ -1,5 +1,5 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-back-button>
{{'Back' | translate}}
</ion-nav-back-button>

View File

@ -1,5 +1,5 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-back-button>
{{'Back' | translate}}
</ion-nav-back-button>

View File

@ -1,5 +1,5 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-back-button>
{{'Back' | translate}}
</ion-nav-back-button>

View File

@ -1,5 +1,5 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-back-button>
{{'Back' | translate}}
</ion-nav-back-button>

View File

@ -1,5 +1,5 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-back-button>
{{'Back' | translate}}
</ion-nav-back-button>

View File

@ -10,7 +10,11 @@
<ion-content ng-controller="sellGlideraController as sell" ng-init="init()">
<h4 class="padding" ng-show="limits && !sell.show2faCodeInput && !sell.success">
<div class="box-notification warning" ng-show="network == 'testnet'">
Testnet wallets only work with Glidera Sandbox Accounts
</div>
<div class="box-notification notice" ng-show="limits && !sell.show2faCodeInput && !sell.success">
<span class="text-light">Daily sell limit</span>:
{{limits.dailySell|currency:'':2}} {{limits.currency}}
(remaining {{limits.dailySellRemaining|currency:'':2}} {{limits.currency}})
@ -18,7 +22,7 @@
<span class="text-light">Monthly sell limit</span>:
{{limits.monthlySell|currency:'':2}} {{limits.currency}}
(remaining {{limits.monthlySellRemaining|currency:'':2}} {{limits.currency}})
</h4>
</div>
<div class="box-notification m20b" ng-show="limits.transactDisabledPendingFirstTransaction">
<span class="text-warning">
@ -31,19 +35,6 @@
ng-submit="sell.get2faCode(token)" novalidate>
<div class="list">
<label class="item item-input item-stacked-label">
<span class="input-label">Wallet</span>
<input type="text"
id="address"
name="address"
ng-disabled="sell.selectedWalletId"
ng-attr-placeholder="{{'Choose your source wallet'}}"
ng-model="sell.selectedWalletName" required>
<a on-tap="openWalletsModal(sell.allWallets)">
<i class="icon ion-briefcase size-18"></i>
</a>
</label>
<label class="item item-input item-stacked-label">
<span class="input-label"><span>Amount in</span> {{showAlternative ? 'USD' : 'BTC'}}</span>
<input ng-show="!showAlternative"
@ -73,6 +64,8 @@
class="postfix"
on-tap="showAlternative = false; fiat = null; sell.sellPrice = null">USD</a>
</label>
<wallets ng-if="wallets[0]" wallets="wallets"></wallets>
</div>
<div class="text-center text-gray size-12 m20b" ng-show="!sell.gettingSellPrice && sell.sellPrice.qty">
@ -92,7 +85,7 @@
<button class="button button-block"
type="submit"
ng-disabled="limits.transactDisabledPendingFirstTransaction || !sell.sellPrice.qty || !sell.selectedWalletId ">
ng-disabled="limits.transactDisabledPendingFirstTransaction || !sell.sellPrice.qty">
Continue
</button>
</form>
@ -122,11 +115,6 @@
</p>
</div>
</div>
<div class="box-notification" ng-show="sell.error && !sell.success">
<span class="text-warning size-14">
{{sell.error}}
</span>
</div>
<div class="text-center" ng-show="sell.success">
<h1>Sale initiated</h1>
<p class="text-gray">
@ -137,4 +125,3 @@
</div>
</ion-content>
</ion-view>

View File

@ -1,11 +1,11 @@
<ion-view>
<ion-nav-bar class="bar-royal">
<ion-nav-buttons side="primary">
<button class="button no-border" ui-sref="add.main">
<i class="icon ion-chevron-left"></i> Back
<button class="button no-border" ui-sref="tabs.add">
<i class="icon ion-chevron-left"></i> {{'Back' | translate}}
</button>
</ion-nav-buttons>
<ion-nav-title>Create new wallet</ion-nav-title>
<ion-nav-title>{{'Create new wallet' | translate}}</ion-nav-title>
</ion-nav-bar>
<ion-content ng-controller="createController as create" ng-init="create.setTotalCopayers(1)">
@ -28,7 +28,7 @@
ng-blur="create.formFocus(false)">
</label>
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable">
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable" ng-change="showAdvChange()">
<span translate ng-show="!showAdv">Show advanced options</span>
<span translate ng-show="showAdv">Hide advanced options</span>
</ion-toggle>

View File

@ -1,161 +1,163 @@
<ion-nav-bar class="bar-royal">
<ion-nav-buttons side="primary">
<button class="button no-border" ui-sref="add.main">
<i class="icon ion-chevron-left"></i> Back
</button>
</ion-nav-buttons>
<ion-nav-title>Create new wallet</ion-nav-title>
</ion-nav-bar>
<ion-view>
<ion-nav-bar class="bar-royal">
<ion-nav-buttons side="primary">
<button class="button no-border" ui-sref="tabs.add">
<i class="icon ion-chevron-left"></i> {{'Back' | translate}}
</button>
</ion-nav-buttons>
<ion-nav-title>{{'Create new wallet' | translate}}</ion-nav-title>
</ion-nav-bar>
<ion-content ng-controller="createController as create" ng-init="create.setTotalCopayers(3)">
<ion-content ng-controller="createController as create" ng-init="create.setTotalCopayers(3)">
<div class="padding assertive" ng-show="create.error">
{{create.error|translate}}
</div>
<div class="padding assertive" ng-show="create.error">
{{create.error|translate}}
</div>
<form name="setupForm" ng-submit="create.create(setupForm)" novalidate>
<form name="setupForm" ng-submit="create.create(setupForm)" novalidate>
<div class="card list">
<label ng-hide="create.hideWalletName" class="item item-input item-stacked-label">
<span class="input-label" translate>Wallet name</span>
<input type="text"
placeholder="{{'Family vacation funds'|translate}}"
name="walletName"
ng-model="walletName"
ng-required="true"
ng-focus="create.formFocus('wallet-name')"
ng-blur="create.formFocus(false)">
</label>
<label ng-show="totalCopayers != 1" class="item item-input item-stacked-label">
<span class="input-label" translate>Your nickname</span>
<input type="text"
placeholder="{{'John'|translate}}"
name="myName"
ng-model="myName"
ng-required="totalCopayers != 1"
ng-disabled="totalCopayers == 1"
ng-focus="create.formFocus('my-name')"
ng-blur="create.formFocus(false)">
</label>
<label ng-show="totalCopayers != 1" class="item item-input item-select">
<div class="input-label" translate>
Total number of copayers
</div>
<select class="m10t"
ng-model="totalCopayers"
ng-options="totalCopayers as totalCopayers for totalCopayers in create.TCValues"
ng-change="create.setTotalCopayers(totalCopayers)">
</select>
</label>
<label ng-show="totalCopayers != 1" class="item item-input item-select">
<div class="input-label" translate>
Required number of signatures
</div>
<select class="m10t"
ng-model="requiredCopayers"
ng-options="requiredCopayers as requiredCopayers for requiredCopayers in create.RCValues"
ng-disabled="totalCopayers == 1">
</select>
</label>
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable">
<span translate ng-show="!showAdv">Show advanced options</span>
<span translate ng-show="showAdv">Hide advanced options</span>
</ion-toggle>
<div ng-show="showAdv">
<label class="item item-input item-stacked-label">
<span class="input-label">Wallet Service URL</span>
<input type="text" id="bwsurl" name="bwsurl" ng-model="bwsurl">
<div class="card list">
<label ng-hide="create.hideWalletName" class="item item-input item-stacked-label">
<span class="input-label" translate>Wallet name</span>
<input type="text"
placeholder="{{'Family vacation funds'|translate}}"
name="walletName"
ng-model="walletName"
ng-required="true"
ng-focus="create.formFocus('wallet-name')"
ng-blur="create.formFocus(false)">
</label>
<label class="item item-input item-select">
<label ng-show="totalCopayers != 1" class="item item-input item-stacked-label">
<span class="input-label" translate>Your nickname</span>
<input type="text"
placeholder="{{'John'|translate}}"
name="myName"
ng-model="myName"
ng-required="totalCopayers != 1"
ng-disabled="totalCopayers == 1"
ng-focus="create.formFocus('my-name')"
ng-blur="create.formFocus(false)">
</label>
<label ng-show="totalCopayers != 1" class="item item-input item-select">
<div class="input-label" translate>
Wallet Key
Total number of copayers
</div>
<select class="m10t"
ng-model="seedSource"
ng-options="seed as seed.label for seed in create.seedOptions"
ng-change="create.setSeedSource()">
ng-model="totalCopayers"
ng-options="totalCopayers as totalCopayers for totalCopayers in create.TCValues"
ng-change="create.setTotalCopayers(totalCopayers)">
</select>
</label>
<label class="item item-input item-stacked-label"
ng-show="create.seedSourceId == 'trezor' || create.seedSourceId == 'ledger'">
<span class="input-label" translate>Account Number</span>
<input type="number" id="account" ng-model="account" ignore-mouse-wheel>
</label>
<div class="card" ng-show="create.seedSourceId=='new' && createPassphrase">
<div class="item item-text-wrap" translate>
WARNING: The password cannot be recovered. <b>Be sure to write it down</b>. The wallet can not be restored without the password.
<label ng-show="totalCopayers != 1" class="item item-input item-select">
<div class="input-label" translate>
Required number of signatures
</div>
</div>
<label class="item item-input item-stacked-label" ng-show="create.seedSourceId=='new'">
<span class="input-label" translate>Add a Password</span>
<input type="text"
placeholder="{{'Add an optional password to secure the recovery phrase'|translate}}"
autocapitalize="off"
name="createPassphrase"
ng-model="createPassphrase">
<select class="m10t"
ng-model="requiredCopayers"
ng-options="requiredCopayers as requiredCopayers for requiredCopayers in create.RCValues"
ng-disabled="totalCopayers == 1">
</select>
</label>
<label class="item item-input item-stacked-label" ng-show="create.seedSourceId=='set'">
<span class="input-label" translate>Wallet Recovery Phrase</span>
<input id="ext-master"
placeholder="{{'Enter the recovery phrase (BIP39)'|translate}}"
autocapitalize="off"
type="text"
name="privateKey"
ng-model="privateKey">
</label>
<label class="item item-input item-stacked-label" ng-show="create.seedSourceId=='set'">
<span class="input-label" translate>Password</span>
<input type="text"
placeholder="{{'The recovery phrase could require a password to be imported'|translate}}"
autocapitalize="off"
name="passphrase"
ng-model="passphrase">
</label>
<label class="item item-input item-stacked-label" ng-show="create.seedSourceId == 'set'">
<span class="input-label" translate>Derivation Path</span>
<input type="text"
placeholder="{{'BIP32 path for address derivation'|translate}}"
name="derivationPath"
ng-model="derivationPath">
</label>
<ion-toggle ng-show="create.seedSourceId == 'new'" ng-model="testnetEnabled" toggle-class="toggle-positive">
Testnet
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable" ng-change="showAdvChange()">
<span translate ng-show="!showAdv">Show advanced options</span>
<span translate ng-show="showAdv">Hide advanced options</span>
</ion-toggle>
<ion-toggle ng-model="singleAddressEnabled" toggle-class="toggle-positive">
<span translate>Single Address Wallet</span>
<small translate>For audit purposes</small>
</ion-toggle>
<div ng-show="showAdv">
</div> <!-- advanced -->
</div> <!-- list -->
<label class="item item-input item-stacked-label">
<span class="input-label">Wallet Service URL</span>
<input type="text" id="bwsurl" name="bwsurl" ng-model="bwsurl">
</label>
<button type="submit"
class="button button-block button-positive"
ng-show="totalCopayers != 1" ng-disabled="setupForm.$invalid">
<span translate>Create {{requiredCopayers}}-of-{{totalCopayers}} wallet</span>
</button>
<label class="item item-input item-select">
<div class="input-label" translate>
Wallet Key
</div>
<select class="m10t"
ng-model="seedSource"
ng-options="seed as seed.label for seed in create.seedOptions"
ng-change="create.setSeedSource()">
</select>
</label>
<button type="submit"
class="button button-block button-positive"
ng-show="totalCopayers == 1" ng-disabled="setupForm.$invalid">
<span translate>Create new wallet</span>
</button>
<label class="item item-input item-stacked-label"
ng-show="create.seedSourceId == 'trezor' || create.seedSourceId == 'ledger'">
<span class="input-label" translate>Account Number</span>
<input type="number" id="account" ng-model="account" ignore-mouse-wheel>
</label>
</form>
</ion-content>
<div class="card" ng-show="create.seedSourceId=='new' && createPassphrase">
<div class="item item-text-wrap" translate>
WARNING: The password cannot be recovered. <b>Be sure to write it down</b>. The wallet can not be restored without the password.
</div>
</div>
<label class="item item-input item-stacked-label" ng-show="create.seedSourceId=='new'">
<span class="input-label" translate>Add a Password</span>
<input type="text"
placeholder="{{'Add an optional password to secure the recovery phrase'|translate}}"
autocapitalize="off"
name="createPassphrase"
ng-model="createPassphrase">
</label>
<label class="item item-input item-stacked-label" ng-show="create.seedSourceId=='set'">
<span class="input-label" translate>Wallet Recovery Phrase</span>
<input id="ext-master"
placeholder="{{'Enter the recovery phrase (BIP39)'|translate}}"
autocapitalize="off"
type="text"
name="privateKey"
ng-model="privateKey">
</label>
<label class="item item-input item-stacked-label" ng-show="create.seedSourceId=='set'">
<span class="input-label" translate>Password</span>
<input type="text"
placeholder="{{'The recovery phrase could require a password to be imported'|translate}}"
autocapitalize="off"
name="passphrase"
ng-model="passphrase">
</label>
<label class="item item-input item-stacked-label" ng-show="create.seedSourceId == 'set'">
<span class="input-label" translate>Derivation Path</span>
<input type="text"
placeholder="{{'BIP32 path for address derivation'|translate}}"
name="derivationPath"
ng-model="derivationPath">
</label>
<ion-toggle ng-show="create.seedSourceId == 'new'" ng-model="testnetEnabled" toggle-class="toggle-positive">
Testnet
</ion-toggle>
<ion-toggle ng-model="singleAddressEnabled" toggle-class="toggle-positive">
<span translate>Single Address Wallet</span>
<small translate>For audit purposes</small>
</ion-toggle>
</div> <!-- advanced -->
</div> <!-- list -->
<button type="submit"
class="button button-block button-positive"
ng-show="totalCopayers != 1" ng-disabled="setupForm.$invalid">
<span translate>Create {{requiredCopayers}}-of-{{totalCopayers}} wallet</span>
</button>
<button type="submit"
class="button button-block button-positive"
ng-show="totalCopayers == 1" ng-disabled="setupForm.$invalid">
<span translate>Create new wallet</span>
</button>
</form>
</ion-content>
</ion-view>

View File

@ -1,102 +1,103 @@
<ion-nav-bar class="bar-royal">
<ion-nav-title>Export Wallet</ion-nav-title>
<ion-nav-buttons side="primary">
<button class="button no-border" ui-sref="wallet.preferencesAdvanced">
<button class="button no-border" ui-sref="tabs.preferences.preferencesAdvanced">
<i class="icon ion-chevron-left"></i> Back
</button>
</ion-nav-buttons>
</ion-nav-bar>
<ion-content ng-controller="exportController" ng-init="init()" cache-view="true">
<ion-content ng-controller="exportController" ng-init="init()" cache-view="true">
<div ng-show="!backupWalletPlainText">
<div class="size-14" ng-show="error">
<i class="ion-alert-circled"></i>
<span translate>Failed to export</span>
</div>
<form name="exportForm" novalidate>
<label class="item item-input item-stacked-label">
<span class="input-label" transalate>Set up a password</span>
<input type="password" placeholder="{{'Your password'|translate}}" name="password" ng-model="password">
</label>
<label class="item item-input item-stacked-label">
<span class="input-label" transalate>Repeat the password</span>
<input type="password" class="form-control" placeholder="{{'Repeat password'|translate}}" name="password" ng-model="repeatpassword">
</label>
</form>
<ion-toggle ng-show="canSign" ng-model="showAdvanced" toggle-class="toggle-balanced">
<span translate ng-show="!showAdvanced">Show advanced options</span>
<span translate ng-show="showAdvanced">Hide advanced options</span>
</ion-toggle>
<ion-toggle ng-model="noSignEnabled" ng-show="showAdvanced" toggle-class="toggle-balanced" class="r0" ng-change="noSignEnabledChange()">
<span class="toggle-label" translate>Do not include private key</span>
</ion-toggle>
<div class="box-notification" ng-show="!canSign">
<span class="size-14">
<div ng-show="!backupWalletPlainText">
<div class="size-14" ng-show="error">
<i class="ion-alert-circled"></i>
<span translate>
WARNING: The private key of this wallet is not available. The export allows to check the wallet balance, transaction history, and create spend proposals from the export. However, does not allow to approve (sign) proposals, so <b>funds will not be accessible from the export</b>.
</span>
</span>
</div>
<div class="box-notification" ng-show="noSignEnabled">
<span class="size-14">
<i class="ion-alert-circled"></i>
<span translate>
WARNING: Not including the private key allows to check the wallet balance, transaction history, and create spend proposals from the export. However, does not allow to approve (sign) proposals, so <b>funds will not be accessible from the export</b>.
</span>
</span>
</div>
<button
ng-click="downloadWalletBackup()"
class="button button-block button-positive"
ng-disabled="(!password || password != repeatpassword)"
ng-style="{'background-color':wallet.color}"
ng-show="!isSafari && !isCordova">
<i class="fi-download"></i>
<span translate>Download</span>
</button>
<button
ng-click="viewWalletBackup()"
class="button button-block button-positive"
ng-disabled="(!password || password != repeatpassword)"
ng-style="{'background-color':wallet.color}"
ng-show="isSafari && !isCordova">
<i class="fi-eye"></i>
<span translate>View</span>
</button>
<div ng-show="isCordova">
<h4 translate>Export options</h4>
<button class="button button-block button-positive"
ng-disabled="(!password || password != repeatpassword)"
ng-style="{'background-color':wallet.color}"
ng-click="copyWalletBackup()">
<i class="fi-clipboard-pencil"></i>
<span translate>Copy to clipboard</span></button>
<button class="button button-block button-positive" ng-disabled="(!password || password != repeatpassword)"
ng-style="{'background-color':wallet.color}"
ng-click="sendWalletBackup()"><i class="fi-mail"></i>
<span translate>Send by email</span></button>
</div>
</div>
<div class="row" ng-show="backupWalletPlainText">
<div class="large-12 columns">
<h3 translate>Wallet Export</h3>
<div class="input">
<textarea rows="12">{{backupWalletPlainText}}</textarea>
<span translate>Failed to export</span>
</div>
<div class="size-12 text-gray text-right">
<i class="icon-compose"></i>
<span translate>Copy this text as it is to a safe place (notepad or email)</span>
<form name="exportForm" novalidate>
<label class="item item-input item-stacked-label">
<span class="input-label" transalate>Set up a password</span>
<input type="password" placeholder="{{'Your password'|translate}}" name="password" ng-model="password">
</label>
<label class="item item-input item-stacked-label">
<span class="input-label" transalate>Repeat the password</span>
<input type="password" class="form-control" placeholder="{{'Repeat password'|translate}}" name="password" ng-model="repeatpassword">
</label>
</form>
<ion-toggle ng-show="canSign" ng-model="showAdvanced" toggle-class="toggle-balanced">
<span translate ng-show="!showAdvanced">Show advanced options</span>
<span translate ng-show="showAdvanced">Hide advanced options</span>
</ion-toggle>
<ion-toggle ng-model="noSignEnabled" ng-show="showAdvanced" toggle-class="toggle-balanced" class="r0" ng-change="noSignEnabledChange()">
<span class="toggle-label" translate>Do not include private key</span>
</ion-toggle>
<div class="box-notification" ng-show="!canSign">
<span class="size-14">
<i class="ion-alert-circled"></i>
<span translate>
WARNING: The private key of this wallet is not available. The export allows to check the wallet balance, transaction history, and create spend proposals from the export. However, does not allow to approve (sign) proposals, so <b>funds will not be accessible from the export</b>.
</span>
</span>
</div>
<div class="box-notification" ng-show="noSignEnabled">
<span class="size-14">
<i class="ion-alert-circled"></i>
<span translate>
WARNING: Not including the private key allows to check the wallet balance, transaction history, and create spend proposals from the export. However, does not allow to approve (sign) proposals, so <b>funds will not be accessible from the export</b>.
</span>
</span>
</div>
<button
ng-click="downloadWalletBackup()"
class="button button-block button-positive"
ng-disabled="(!password || password != repeatpassword)"
ng-style="{'background-color':wallet.color}"
ng-show="!isSafari && !isCordova">
<i class="fi-download"></i>
<span translate>Download</span>
</button>
<button
ng-click="viewWalletBackup()"
class="button button-block button-positive"
ng-disabled="(!password || password != repeatpassword)"
ng-style="{'background-color':wallet.color}"
ng-show="isSafari && !isCordova">
<i class="fi-eye"></i>
<span translate>View</span>
</button>
<div ng-show="isCordova">
<h4 translate>Export options</h4>
<button class="button button-block button-positive"
ng-disabled="(!password || password != repeatpassword)"
ng-style="{'background-color':wallet.color}"
ng-click="copyWalletBackup()">
<i class="fi-clipboard-pencil"></i>
<span translate>Copy to clipboard</span></button>
<button class="button button-block button-positive" ng-disabled="(!password || password != repeatpassword)"
ng-style="{'background-color':wallet.color}"
ng-click="sendWalletBackup()"><i class="fi-mail"></i>
<span translate>Send by email</span></button>
</div>
</div>
</div>
</ion-content>
<div class="row" ng-show="backupWalletPlainText">
<div class="large-12 columns">
<h3 translate>Wallet Export</h3>
<div class="input">
<textarea rows="12">{{backupWalletPlainText}}</textarea>
</div>
<div class="size-12 text-gray text-right">
<i class="icon-compose"></i>
<span translate>Copy this text as it is to a safe place (notepad or email)</span>
</div>
</div>
</div>
</ion-content>
</ion-view>

View File

@ -1,23 +1,24 @@
<ion-nav-bar class="bar-royal">
<ion-nav-title>Export Wallet</ion-nav-title>
<ion-nav-buttons side="primary">
<button class="button no-border" ui-sref="wallet.preferencesAdvanced">
<button class="button no-border" ui-sref="tabs.preferences.preferencesAdvanced">
<i class="icon ion-chevron-left"></i> Back
</button>
</ion-nav-buttons>
</ion-nav-bar>
<ion-content ng-controller="exportController" ng-init="init()">
<ion-content ng-controller="exportController" ng-init="init()">
<div class="m20t text-gray" ng-show="supported">
<div class="text-center m20b">
<qrcode size="220" version="8" error-correction-level="M" data="{{exportWalletInfo}}"></qrcode>
<div class="m20t text-gray" ng-show="supported">
<div class="text-center m20b">
<qrcode size="220" version="8" error-correction-level="M" data="{{exportWalletInfo}}"></qrcode>
</div>
<div class="text-center size-12 m10" translate>From the destination device, go to Add wallet &gt; Import wallet and scan this QR code</div>
</div>
<div class="text-center size-12 m10" translate>From the destination device, go to Add wallet &gt; Import wallet and scan this QR code</div>
</div>
<div class="m20t text-gray" ng-show="!supported">
<div class="text-center size-12 m10" translate>Exporting via QR not supported for this wallet</div>
</div>
<div class="m20t text-gray" ng-show="!supported">
<div class="text-center size-12 m10" translate>Exporting via QR not supported for this wallet</div>
</div>
</ion-content>
</ion-content>
</ion-view>

View File

@ -1,39 +1,32 @@
<ion-view id="tab-home">
<ion-nav-bar class="bar-royal">
<ion-nav-title>Home</ion-nav-title>
<ion-nav-title>{{'Home' | translate}}</ion-nav-title>
</ion-nav-bar>
<ion-content class="padding" ng-controller="tabHomeController" ng-init="updateAllWallets(); nextStep()">
<div class="list card" ng-hide="!notifications[0]">
<div class="item item-heading">
<a class="item item-icon-right item-heading" ui-sref="activity" translate>
Recent Activity
</div>
<div ng-if="fetchingNotifications" class="item text-center">
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
</a>
<span ng-if="fetchingNotifications" class="item text-center">
<ion-spinner icon="lines"></ion-spinner>
<div translate>Updating activity. Please stand by</div>
</div>
<div ng-if="!fetchingNotifications">
<a class="item" ng-repeat="x in notifications" ng-click="x.action()">
<span ng-include="'views/includes/walletActivity.html'"></span>
</a>
<a class="item text-center" ui-sref="activity" ng-show="notificationsMore">
<span translate>More</span> ({{notificationsMore}})
<span style="font-size:12px;color:gray">(ToDo: Cache, refresh & seft not. 1-1 no here yet)</span>
</a>
</div>
</span>
<a ng-if="!fetchingNotifications" class="item" ng-repeat="x in notifications" ng-click="x.action()">
<span ng-include="'views/includes/walletActivity.html'"></span>
</a>
</div>
<div class="list card" ng-hide="!wallets[0]">
<div class="item item-icon-right item-heading">
<div class="item item-icon-right item-heading" translate>
Wallets
<a ui-sref="add.main"><i class="icon ion-ios-plus-empty list-add-button"></i></a>
<a ui-sref="tabs.add"><i class="icon ion-ios-plus-empty list-add-button"></i></a>
</div>
<a ng-repeat="wallet in wallets track by $index"
class="item item-icon-left item-big-icon-left item-icon-right"
ui-sref="wallet.details({'walletId': wallet.id})">
ui-sref="tabs.details({'walletId': wallet.id})">
<i class="icon big-icon-svg">
<img src="img/icon-wallet.svg" ng-style="{'background-color': wallet.color}"/>
</i>
@ -63,7 +56,7 @@
</div>
<div class="list card" ng-show="externalServices.BuyAndSell && (glideraEnabled || coinbaseEnabled)">
<div class="item item-heading">
<div class="item item-heading" translate>
Buy & Sell Bitcoin
</div>
<a ng-show="glideraEnabled" ui-sref="glidera.main" class="item item-icon-right">
@ -76,36 +69,37 @@
</a> -->
</div>
<div class="list card" ng-show="!externalServices.AmazonGiftCards || !externalServices.BitpayCard || !externalServices.BuyAndSell">
<div class="item item-heading">
<div class="list card"
ng-show="!externalServices.AmazonGiftCards || !externalServices.BitpayCard || !externalServices.BuyAndSell || !wallets[1]">
<div class="item item-heading" translate>
Next steps
</div>
<a ng-show="!wallets[0]" ui-sref="add.main" class="item item-icon-left item-big-icon-left item-icon-right">
<a ng-show="!wallets[1]" ui-sref="tabs.add" class="item item-icon-left item-big-icon-left item-icon-right">
<i class="icon big-icon-svg">
<img class="icon-create-wallet"/>
</i>
<span>Crate a bitcoin wallet</span>
<span translate>Create a bitcoin wallet</span>
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
</a>
<a ng-show="!externalServices.BuyAndSell" ui-sref="buyandsell" class="item item-icon-left item-big-icon-left item-icon-right">
<i class="icon big-icon-svg">
<img class="icon-buy-bitcoin"/>
</i>
<span>Buy Bitcoin</span>
<span translate>Buy Bitcoin</span>
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
</a>
<a ui-sref="bitpayCard.main" ng-show="!externalServices.BitpayCard" class="item item-icon-left item-big-icon-left item-icon-right">
<i class="icon big-icon-svg">
<img class="icon-bitpay-card"/>
</i>
<span>Add BitPay Card</span>
<span translate>Add BitPay Card</span>
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
</a>
<a ui-sref="amazon.main" ng-show="!externalServices.AmazonGiftCards" class="item item-icon-left item-big-icon-left item-icon-right">
<i class="icon big-icon-svg">
<img class="icon-gift"/>
</i>
<span>Add Amazon Gift Card</span>
<span translate>Add Amazon Gift Card</span>
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
</a>
</div>

View File

@ -1,65 +1,65 @@
<ion-nav-bar class="bar-royal" ng-controller="backController">
<ion-nav-buttons side="primary">
<button class="button no-border" ng-click="importGoBack()">
<i class="icon ion-chevron-left"></i> Back
</button>
</ion-nav-buttons>
<ion-nav-title>Import wallet</ion-nav-title>
</ion-nav-bar>
<ion-view>
<ion-nav-bar class="bar-royal" ng-controller="backController">
<ion-nav-buttons side="primary">
<button class="button no-border" ng-click="importGoBack()">
<i class="icon ion-chevron-left"></i> {{'Back' | translate}}
</button>
</ion-nav-buttons>
<ion-nav-title>{{'Import wallet' | translate}}</ion-nav-title>
</ion-nav-bar>
<ion-content ng-controller="importController" ng-init="type='file'">
<ion-content ng-controller="importController" ng-init="type='file'">
<div class="padding assertive" ng-show="error">
{{error|translate}}
</div>
<form name="importForm" ng-submit="importBlob(importForm)" novalidate>
<div class="list card">
<label class="item item-input item-stacked-label no-border" ng-show="!isSafari && !isCordova">
<div class="input-label" translate>Choose a backup file from your computer</div>
<div>
<input type="file"
placeholder="{{'Select a backup file'|translate}}"
name="backupFile"
ng-model="backupFile" ng-file-select>
</div>
</label>
<label class="item item-input item-stacked-label" ng-show="isSafari || isCordova">
<span class="input-label" translate>Paste the backup plain text code</span>
<textarea name="backupText" ng-model="backupText" rows="5"></textarea>
</label>
<label class="item item-input item-stacked-label">
<span class="input-label" translate>Password</span>
<input type="password"
placeholder="{{'Your password'|translate}}"
name="password"
ng-model="password">
</label>
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable">
<span translate ng-show="!showAdv">Show advanced options</span>
<span translate ng-show="showAdv">Hide advanced options</span>
</ion-toggle>
<div ng-show="showAdv">
<label class="item item-input item-stacked-label">
<span class="input-label">Wallet Service URL</span>
<input type="text" id="bwsurl" name="bwsurl" ng-model="bwsurl">
</label>
</div>
<div class="padding assertive" ng-show="error">
{{error|translate}}
</div>
<button type="submit"
class="button button-block button-positive"
ng-disabled="importForm.$invalid || !password " translate>
Import backup
</button>
</form>
<form name="importForm" ng-submit="importBlob(importForm)" novalidate>
</ion-content>
<div class="list card">
<label class="item item-input item-stacked-label no-border" ng-show="!isSafari && !isCordova">
<div class="input-label" translate>Choose a backup file from your computer</div>
<div>
<input type="file"
placeholder="{{'Select a backup file'|translate}}"
name="backupFile"
ng-model="backupFile" ng-file-select>
</div>
</label>
<label class="item item-input item-stacked-label" ng-show="isSafari || isCordova">
<span class="input-label" translate>Paste the backup plain text code</span>
<textarea name="backupText" ng-model="backupText" rows="5"></textarea>
</label>
<label class="item item-input item-stacked-label">
<span class="input-label" translate>Password</span>
<input type="password"
placeholder="{{'Your password'|translate}}"
name="password"
ng-model="password">
</label>
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable">
<span translate ng-show="!showAdv">Show advanced options</span>
<span translate ng-show="showAdv">Hide advanced options</span>
</ion-toggle>
<div ng-show="showAdv">
<label class="item item-input item-stacked-label">
<span class="input-label">Wallet Service URL</span>
<input type="text" id="bwsurl" name="bwsurl" ng-model="bwsurl">
</label>
</div>
</div>
<button type="submit" class="button button-block button-positive" ng-disabled="importForm.$invalid || !password " translate>
Import backup
</button>
</form>
</ion-content>
</ion-view>

View File

@ -1,71 +1,71 @@
<ion-nav-bar class="bar-royal" ng-controller="backController">
<ion-nav-buttons side="primary">
<button class="button no-border" ng-click="importGoBack()">
<i class="icon ion-chevron-left"></i> Back
</button>
</ion-nav-buttons>
<ion-nav-title>Import wallet</ion-nav-title>
</ion-nav-bar>
<ion-view>
<ion-nav-bar class="bar-royal" ng-controller="backController">
<ion-nav-buttons side="primary">
<button class="button no-border" ng-click="importGoBack()">
<i class="icon ion-chevron-left"></i> {{'Back' | translate}}
</button>
</ion-nav-buttons>
<ion-nav-title>{{'Import wallet' | translate}}</ion-nav-title>
</ion-nav-bar>
<ion-content ng-controller="importController" ng-init="type='hwWallet'">
<ion-content ng-controller="importController" ng-init="type='hwWallet'">
<div class="padding assertive" ng-show="error">
{{error|translate}}
</div>
<form name="importForm3" ng-submit="importHW(importForm3)" novalidate>
<div class="card" ng-show="!seedOptions[0]">
<div class="item item-text-wrap" translate>
No hardware wallets supported on this device
</div>
<div class="padding assertive" ng-show="error">
{{error|translate}}
</div>
<div ng-show="seedOptions[0]">
<div class="card list">
<label class="item item-input item-select">
<div class="input-label" translate>
Wallet Type
</div>
<select ng-model="seedSource"
ng-options="seed as seed.label for seed in seedOptions"
ng-change="setSeedSource()">
</select>
</label>
<label class="item item-input item-stacked-label"
ng-show="seedSourceId == 'trezor' || seedSourceId == 'ledger'">
<span class="input-label" translate>Account Number</span>
<input type="number" id="account" ng-model="account" ignore-mouse-wheel>
</label>
<ion-toggle ng-show="seedSourceId == 'trezor'"
ng-model="isMultisig"
toggle-class="toggle-positive">
<span translate>Shared Wallet</span>
</ion-toggle>
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable">
<span translate ng-show="!showAdv">Show advanced options</span>
<span translate ng-show="showAdv">Hide advanced options</span>
</ion-toggle>
<div ng-show="showAdv">
<label class="item item-input item-stacked-label">
<span class="input-label">Wallet Service URL</span>
<input type="text" id="bwsurl" name="bwsurl" ng-model="bwsurl">
</label>
<form name="importForm3" ng-submit="importHW(importForm3)" novalidate>
<div class="card" ng-show="!seedOptions[0]">
<div class="item item-text-wrap" translate>
No hardware wallets supported on this device
</div>
</div>
<button translate type="submit" class="button button-block button-positive">
Import
</button>
</div> <!-- seedoptions show -->
<div ng-show="seedOptions[0]">
<div class="card list">
</form>
<label class="item item-input item-select">
<div class="input-label" translate>
Wallet Type
</div>
<select ng-model="seedSource"
ng-options="seed as seed.label for seed in seedOptions"
ng-change="setSeedSource()">
</select>
</label>
</ion-content>
<label class="item item-input item-stacked-label" ng-show="seedSourceId == 'trezor' || seedSourceId == 'ledger'">
<span class="input-label" translate>Account Number</span>
<input type="number" id="account" ng-model="account" ignore-mouse-wheel>
</label>
<ion-toggle ng-show="seedSourceId == 'trezor'" ng-model="isMultisig" toggle-class="toggle-positive">
<span translate>Shared Wallet</span>
</ion-toggle>
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable">
<span translate ng-show="!showAdv">Show advanced options</span>
<span translate ng-show="showAdv">Hide advanced options</span>
</ion-toggle>
<div ng-show="showAdv">
<label class="item item-input item-stacked-label">
<span class="input-label">Wallet Service URL</span>
<input type="text" id="bwsurl" name="bwsurl" ng-model="bwsurl">
</label>
</div>
</div>
<button translate type="submit" class="button button-block button-positive">
Import
</button>
</div>
<!-- seedoptions show -->
</form>
</ion-content>
</ion-view>

View File

@ -1,88 +1,88 @@
<ion-nav-bar class="bar-royal" ng-controller="backController">
<ion-nav-buttons side="primary">
<button class="button no-border" ng-click="importGoBack()">
<i class="icon ion-chevron-left"></i> Back
</button>
</ion-nav-buttons>
<ion-nav-title>Import wallet</ion-nav-title>
</ion-nav-bar>
<ion-view>
<ion-nav-bar class="bar-royal" ng-controller="backController">
<ion-nav-buttons side="primary">
<button class="button no-border" ng-click="importGoBack()">
<i class="icon ion-chevron-left"></i> {{'Back' | translate}}
</button>
</ion-nav-buttons>
<ion-nav-title>Import wallet</ion-nav-title>
</ion-nav-bar>
<ion-content ng-controller="importController" ng-init="type='12'">
<ion-content ng-controller="importController" ng-init="type='12'">
<div ng-show="importErr || error" class="padding assertive" ng-click="importErr = error = null">
<div ng-show="importErr">
<div translate>Could not access the wallet at the server. Please check:</div>
<ul>
<li translate>The password of the recovery phrase (if set)</li>
<li translate>The derivation path</li>
<li translate>The wallet service URL</li>
</ul>
<div translate>
NOTE: To import a wallet from a 3rd party software, please go to Add Wallet &gt; Create Wallet, and specify the Recovery Phrase there.
</div>
</div>
<div ng-show="error">
{{error|translate}}
</div>
</div>
<form name="importForm12" ng-submit="importMnemonic(importForm12)" novalidate>
<div class="list card">
<div class="row">
<div class="col col-90">
<label class="item item-input item-stacked-label no-border">
<span class="input-label" translate>Type the Recovery Phrase (usually 12 words)</span>
<textarea name="words"
ng-model="words"
rows="3"
autocapitalize="off"
spellcheck="false"></textarea>
</label>
</div>
<div class="col text-center">
<qr-scanner class="qr-icon size-24" on-scan="processWalletInfo(data)"></qr-scanner>
<div ng-show="importErr || error" class="padding assertive" ng-click="importErr = error = null">
<div ng-show="importErr">
<div translate>Could not access the wallet at the server. Please check:</div>
<ul>
<li translate>The password of the recovery phrase (if set)</li>
<li translate>The derivation path</li>
<li translate>The wallet service URL</li>
</ul>
<div translate>
NOTE: To import a wallet from a 3rd party software, please go to Add Wallet &gt; Create Wallet, and specify the Recovery Phrase there.
</div>
</div>
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable">
<span translate ng-show="!showAdv">Show advanced options</span>
<span translate ng-show="showAdv">Hide advanced options</span>
</ion-toggle>
<div ng-show="error">
{{error|translate}}
</div>
</div>
<div ng-show="showAdv">
<form name="importForm12" ng-submit="importMnemonic(importForm12)" novalidate>
<div class="list card">
<label class="item item-input item-stacked-label">
<span class="input-label">Wallet Service URL</span>
<input type="text" id="bwsurl" name="bwsurl" ng-model="bwsurl">
</label>
<div class="row">
<div class="col col-90">
<label class="item item-input item-stacked-label no-border">
<span class="input-label" translate>Type the Recovery Phrase (usually 12 words)</span>
<textarea name="words"
ng-model="words"
rows="3"
autocapitalize="off"
spellcheck="false"></textarea>
</label>
</div>
<div class="col text-center">
<qr-scanner class="qr-icon size-24" on-scan="processWalletInfo(data)"></qr-scanner>
</div>
</div>
<label class="item item-input item-stacked-label">
<span class="input-label" translate>Password</span>
<input type="text"
placeholder="{{'The recovery phrase could require a password to be imported'|translate}}"
autocapitalize="off"
name="passphrase"
ng-model="passphrase">
</label>
<label class="item item-input item-stacked-label">
<span class="input-label" translate>Derivation Path</span>
<input type="text"
placeholder="{{'BIP32 path for address derivation'|translate}}"
name="derivationPath"
ng-model="derivationPath">
</label>
<ion-toggle ng-model="testnetEnabled" ng-change="setDerivationPath(testnetEnabled)" toggle-class="toggle-positive">
Testnet
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable">
<span translate ng-show="!showAdv">Show advanced options</span>
<span translate ng-show="showAdv">Hide advanced options</span>
</ion-toggle>
</div>
</div>
<button type="submit"
class="button button-block button-positive"
ng-disabled="importForm12.$invalid" translate>Import</button>
</form>
</ion-content>
<div ng-show="showAdv">
<label class="item item-input item-stacked-label">
<span class="input-label">Wallet Service URL</span>
<input type="text" id="bwsurl" name="bwsurl" ng-model="bwsurl">
</label>
<label class="item item-input item-stacked-label">
<span class="input-label" translate>Password</span>
<input type="text"
placeholder="{{'The recovery phrase could require a password to be imported'|translate}}"
autocapitalize="off"
name="passphrase"
ng-model="passphrase">
</label>
<label class="item item-input item-stacked-label">
<span class="input-label" translate>Derivation Path</span>
<input type="text"
placeholder="{{'BIP32 path for address derivation'|translate}}"
name="derivationPath"
ng-model="derivationPath">
</label>
<ion-toggle ng-model="testnetEnabled" ng-change="setDerivationPath(testnetEnabled)" toggle-class="toggle-positive">
Testnet
</ion-toggle>
</div>
</div>
<button type="submit" class="button button-block button-positive" ng-disabled="importForm12.$invalid" translate>Import</button>
</form>
</ion-content>
</ion-view>

View File

@ -1,6 +1,6 @@
<ion-view>
<ion-nav-bar class="bar-royal">
<ion-nav-title>Scan</ion-nav-title>
<ion-nav-title>{{'Scan' | translate}}</ion-nav-title>
</ion-nav-bar>
<ion-content class="padding" ng-controller="tabScanController" ng-init="init()">

View File

@ -27,8 +27,7 @@
<div class="item text-center" ng-show="!list[0]" translate>No Wallet - Contact</div>
<a class="item item-icon-left" ng-repeat="item in list" ng-click="goToAmount(item)">
<i ng-show="item.isWallet" class="icon ion-briefcase size-21" ng-style="{'color':item.color}"></i>
<i ng-show="!item.isWallet" class="icon ion-ios-person-outline"></i>
{{item.label}}
<i ng-show="!item.isWallet" class="icon ion-ios-person-outline"></i> {{item.label}}
</a>
</div>
</ion-content>

View File

@ -1,6 +1,6 @@
<ion-view>
<ion-nav-bar class="bar-royal">
<ion-nav-title>Global Settings</ion-nav-title>
<ion-nav-title>{{'Global Settings' | translate}}</ion-nav-title>
</ion-nav-bar>
<ion-content ng-controller="tabSettingsController" ng-init="init()">
@ -12,9 +12,9 @@
<span translate>Address Book</span>
</div>
<div class="item item-divider">Preferences</div>
<div class="item item-divider" translate>Preferences</div>
<div class="item item-icon-left" href ui-sref="settings.language">
<div class="item item-icon-left" href ui-sref="tabs.language">
<i class="icon ion-ios-chatbubble-outline"></i>
<span translate>Language</span>
<span class="item-note">
@ -22,7 +22,7 @@
</span>
</div>
<div class="item item-icon-left" href ui-sref="settings.unit">
<div class="item item-icon-left" href ui-sref="tabs.unit">
<i class="icon ion-ios-calculator-outline"></i>
<span translate>Unit</span>
<span class="item-note">
@ -30,7 +30,7 @@
</span>
</div>
<div class="item item-icon-left" href ui-sref="settings.altCurrency">
<div class="item item-icon-left" href ui-sref="tabs.altCurrency">
<i class="icon ion-social-usd-outline"></i>
<span translate>Alternative Currency</span>
<span class="item-note">
@ -38,7 +38,7 @@
</span>
</div>
<div class="item item-icon-left" href ui-sref="settings.fee">
<div class="item item-icon-left" href ui-sref="tabs.fee">
<i class="icon ion-ios-film-outline"></i>
<span translate>Bitcoin Network Fee Policy</span>
<span class="item-note">
@ -47,7 +47,7 @@
</div>
<div ng-show="usePushNotifications && PNEnabledByUser">
<div class="item item-divider">Notifications</div>
<div class="item item-divider" translate>Notifications</div>
<ion-toggle ng-model="pushNotifications" toggle-class="toggle-balanced" ng-change="pushNotificationsChange()">
<span class="toggle-label" translate>Enable push notifications</span>
@ -61,26 +61,45 @@
</div>
</div>
<div class="item item-divider">Exchanges</div>
<div class="item item-divider" translate>Exchanges</div>
<ion-toggle ng-show="!isWP" ng-model="glideraEnabled" toggle-class="toggle-balanced" ng-change="glideraChange()">
<span class="toggle-label" translate>Enable Glidera Service</span>
</ion-toggle>
<!-- disable coinbase for this release -->
<!--
<ion-toggle ng-show="!isWP" ng-model="coinbaseEnabled" toggle-class="toggle-balanced" ng-change="coinbaseChange()">
<span class="toggle-label" translate>Enable Coinbase Service</span>
</ion-toggle>
-->
<div class="item item-divider">Others</div>
<div class="item item-divider" translate>Others</div>
<ion-toggle ng-model="spendUnconfirmed" toggle-class="toggle-balanced" ng-change="spendUnconfirmedChange()">
<span class="toggle-label" translate>Use Unconfirmed Funds</span>
</ion-toggle>
<div class="item item-icon-left" href ui-sref="settings.about">
<i class="icon ion-ios-film-outline"></i>
<span translate>About Copay</span>
<div class="item item-divider" translate>Wallets Settings</div>
<div class="item item-icon-left" href
ui-sref="tabs.preferences.main({'walletId': item.id})"
ng-repeat="item in wallets track by $index">
<i class="icon ion-briefcase size-21" ng-style="{'color':item.color}"></i>
{{item.name || item.id}}
<span ng-show="item.n > 1" class="text-light">
{{item.m}}-of-{{item.n}}
</span>
<span class="badge badge-assertive" ng-show="!item.isComplete()" translate>
Incomplete
</span>
</div>
<div class="item item-divider"></div>
<div class="item item-icon-left" href ui-sref="tabs.about">
<i class="icon ion-ios-film-outline"></i>
<span translate>About Bitpay Wallet</span>
</div>
<div class="item item-divider"></div>
</div>
</ion-content>
</ion-view>

View File

@ -1,10 +1,10 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-back-button>
{{'Back' | translate}}
</ion-nav-back-button>
</ion-nav-bar>
<ion-content ng-controller="termOfUseController" cache-view="false">
<p>
<div ng-include="'views/includes/terms.html'"></div>

View File

@ -1,5 +1,5 @@
<ion-view>
<ion-nav-bar>
<ion-nav-bar class="bar-stable">
<ion-nav-title>{{'Translators' | translate}}</ion-nav-title>
<ion-nav-back-button>
{{'Back' | translate}}

View File

@ -1,29 +1,22 @@
<ion-view>
<ion-nav-bar class="bar-royal">
<ion-nav-title>{{wallet.name}}</ion-nav-title>
<ion-nav-buttons side="primary">
<button class="button no-border" ui-sref="tabs.home">
Close
</button>
</ion-nav-buttons>
<ion-nav-buttons side="secondary">
<button class="button button-icon icon ion-ios-settings" ui-sref="wallet.preferences"></button>
</ion-nav-buttons>
<ion-nav-back-button>
{{'Back' | translate}}
</ion-nav-back-button>
</ion-nav-bar>
<ion-content ng-controller="walletDetailsController" ng-init="init()" delegate-handle="my-handle">
<div ng-show="!wallet">
<div ng-show="!wallet" translate>
No Wallet
<a href ui-sref="tabs.home" class="button">
<a href ui-sref="tabs.home" class="button" translate>
Go home
</a>
</div>
<div ng-show="!wallet.isComplete()">
<a class="button button-block button-assertive" href ui-sref="wallet.copayers" class="button">
<a class="button button-block button-assertive" href ui-sref="wallet.copayers" class="button" translate>
Wallet Incomplete
</a>
</div>

View File

@ -1,27 +1,30 @@
@font-face {
font-family: 'Roboto';
font-family: 'roboto-regular';
font-style: normal;
font-weight: 400;
src: local('Roboto Regular'),
local('Roboto-Regular'),
url(../roboto-font/Roboto-Regular.ttf)
format('ttf');
url(../roboto-font/Roboto-Regular.ttf) format('truetype'),
url(../roboto-font/Roboto-Regular.woff) format('woff'),
url(../roboto-font/Roboto-Regular.woff2) format('woff2');
}
@font-face {
font-family: 'Roboto';
font-family: 'roboto-bold';
font-style: normal;
font-weight: 700;
src: local('Roboto Bold'),
local('Roboto-Bold'),
url(../roboto-font/Roboto-Bold.ttf)
format('ttf');
url(../roboto-font/Roboto-Bold.ttf) format('truetype'),
url(../roboto-font/Roboto-Bold.woff) format('woff'),
url(../roboto-font/Roboto-Bold.woff2) format('woff2');
}
@font-face {
font-family: 'Roboto';
font-family: 'roboto-italic';
font-style: italic;
font-weight: 400;
src: local('Roboto Italic'),
local('Roboto-Italic'),
url(../roboto-font/Roboto-Italic.ttf)
format('ttf');
url(../roboto-font/Roboto-Italic.ttf) format('truetype'),
url(../roboto-font/Roboto-Italic.woff) format('woff'),
url(../roboto-font/Roboto-Italic.woff2) format('woff2');
}

View File

@ -4,43 +4,19 @@ angular.module('copayApp.controllers').controller('activityController',
function($rootScope, $timeout, $scope, $state, lodash, profileService, walletService, configService, txFormatService, $ionicModal, $log, platformInfo) {
var self = this;
var setNotifications = function(notifications) {
var n = walletService.processNotifications(notifications);
$scope.notifications = n;
$timeout(function() {
$scope.$apply();
}, 1);
};
$scope.init = function() {
$scope.wallets = profileService.getWallets();
var i = $scope.wallets.length,
j = 0;
var timeSpan = 60 * 60 * 24 * 7;
var notifications = [];
$scope.fetchingNotifications = true;
lodash.each($scope.wallets, function(wallet) {
walletService.getNotifications(wallet, {
timeSpan: timeSpan
}, function(err, n) {
if (err) {
console.log('[tab-home.js.35:err:]', $log.error(err)); //TODO
return;
}
notifications.push(n);
if (++j == i) {
$scope.fetchingNotifications = false;
setNotifications(lodash.compact(lodash.flatten(notifications)));
};
});
profileService.getNotifications(50, function(err, n) {
if (err) {
console.log('[tab-home.js.35:err:]', $log.error(err)); //TODO
return;
}
$scope.fetchingNotifications = false;
$scope.notifications = n;
$timeout(function() {
$scope.$apply();
}, 1);
});
}
});

View File

@ -8,7 +8,7 @@ angular.module('copayApp.controllers').controller('backController', function($sc
$scope.importGoBack = function() {
if ($stateParams.fromOnboarding) $state.go('onboarding.welcome');
else $state.go('add.main');
else $state.go('tabs.add');
};
$scope.onboardingMailSkip = function() {

View File

@ -1,14 +1,10 @@
'use strict';
angular.module('copayApp.controllers').controller('bitpayCardController', function($scope, $rootScope, $timeout, $log, $ionicModal, lodash, bitpayCardService, configService, profileService, walletService, ongoingProcess, pbkdf2Service, moment, platformInfo) {
angular.module('copayApp.controllers').controller('bitpayCardController', function($scope, $timeout, $log, lodash, bitpayCardService, configService, profileService, walletService, ongoingProcess, pbkdf2Service, moment, popupService) {
var self = this;
var wallet;
if (platformInfo.isCordova && StatusBar.isVisible) {
StatusBar.backgroundColorByHexString("#293C92");
}
$scope.$on('Wallet/Changed', function(event, w) {
if (lodash.isEmpty(w)) {
$log.debug('No wallet provided');
@ -87,7 +83,7 @@ angular.module('copayApp.controllers').controller('bitpayCardController', functi
bitpayCardService.transactionHistory(dateRange, function(err, history) {
$scope.loadingHistory = false;
if (err) {
self.error = 'Error getting transactions';
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get transactions'));
return;
}
@ -120,13 +116,11 @@ angular.module('copayApp.controllers').controller('bitpayCardController', functi
};
this.sendFunds = function() {
self.error = null;
if (lodash.isEmpty(wallet)) return;
if (!wallet.canSign() && !wallet.isPrivKeyExternal()) {
$log.info('No signing proposal: No private key');
self.error = bwcError.msg('MISSING_PRIVATE_KEY');
popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg('MISSING_PRIVATE_KEY'));
return;
}
@ -146,10 +140,7 @@ angular.module('copayApp.controllers').controller('bitpayCardController', functi
bitpayCardService.topUp(dataSrc, function(err, invoiceId) {
if (err) {
ongoingProcess.set('Processing Transaction...', false);
self.error = bwcError.msg(err);
$timeout(function() {
$scope.$digest();
});
popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err));
return;
}
@ -178,18 +169,12 @@ angular.module('copayApp.controllers').controller('bitpayCardController', functi
walletService.createTx(wallet, txp, function(err, createdTxp) {
if (err) {
self.error = bwcError.msg(err);
$timeout(function() {
$scope.$digest();
});
popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err));
return;
}
walletService.publishAndSign(wallet, createdTxp, function(err, tx) {
if (err) {
self.error = err;
$timeout(function() {
$scope.$digest();
});
popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err));
return;
}
self.update();
@ -205,7 +190,6 @@ angular.module('copayApp.controllers').controller('bitpayCardController', functi
};
this.authenticate = function() {
self.error = null;
var data = {
emailAddress : $scope.email,
@ -219,7 +203,7 @@ angular.module('copayApp.controllers').controller('bitpayCardController', functi
bitpayCardService.authenticate(data, function(err, auth) {
self.authenticating = false;
if (err && err.data && err.data.error && !err.data.error.twoFactorPending) {
self.error = err.statusText || err.data.error || 'Authentiation error';
popupService.showAlert(gettextCatalog.getString('Error'), err.statusText || err.data.error || 'Authentiation error');
return;
}
@ -231,7 +215,6 @@ angular.module('copayApp.controllers').controller('bitpayCardController', functi
};
this.authenticate2FA = function() {
self.error = null;
var data = {
twoFactorCode : $scope.twoFactorCode
@ -241,7 +224,7 @@ angular.module('copayApp.controllers').controller('bitpayCardController', functi
bitpayCardService.authenticate2FA(data, function(err, auth) {
self.authenticating = false;
if (err) {
self.error = 'Authentiation error';
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Authentiation error'));
return;
}

View File

@ -39,7 +39,7 @@ angular.module('copayApp.controllers').controller('buyAmazonController',
if (!wallet.canSign() && !wallet.isPrivKeyExternal()) {
$log.info('No signing proposal: No private key');
popupService.showAler(gettextCatalog.getString('Error'), bwcError.msg('MISSING_PRIVATE_KEY'));
popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg('MISSING_PRIVATE_KEY'));
return;
}
@ -59,7 +59,7 @@ angular.module('copayApp.controllers').controller('buyAmazonController',
amazonService.createBitPayInvoice(dataSrc, function(err, dataInvoice) {
if (err) {
ongoingProcess.set('Processing Transaction...', false);
popupService.showAler(gettextCatalog.getString('Error'), bwcError.msg(err));
popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err));
return;
}

View File

@ -1,19 +1,26 @@
'use strict';
angular.module('copayApp.controllers').controller('buyGlideraController',
function($scope, $timeout, $log, $ionicModal, profileService, walletService, glideraService, bwcError, lodash, ongoingProcess) {
function($scope, $timeout, $log, profileService, walletService, glideraService, bwcError, lodash, ongoingProcess, popupService, gettextCatalog) {
var wallet;
var self = this;
this.show2faCodeInput = null;
this.error = null;
this.success = null;
$scope.$on('Wallet/Changed', function(event, w) {
if (lodash.isEmpty(w)) {
$log.debug('No wallet provided');
return;
}
wallet = w;
$log.debug('Wallet changed: ' + w.name);
});
$scope.init = function(accessToken) {
$scope.network = glideraService.getEnvironment();
$scope.token = accessToken;
$scope.error = null;
$scope.permissions = null;
$scope.email = null;
$scope.personalInfo = null;
@ -25,7 +32,7 @@ angular.module('copayApp.controllers').controller('buyGlideraController',
glideraService.init($scope.token, function(err, glidera) {
ongoingProcess.set('connectingGlidera');
if (err || !glidera) {
$scope.error = err;
if (err) popupService.showAlert(gettextCatalog.getString('Error'), err);
return;
}
$scope.token = glidera.token;
@ -33,21 +40,11 @@ angular.module('copayApp.controllers').controller('buyGlideraController',
$scope.update({fullUpdate: true});
});
self.allWallets = profileService.getWallets({
$scope.wallets = profileService.getWallets({
network: $scope.network,
n: 1,
onlyComplete: true
});
if (lodash.isEmpty(self.allWallets)) return;
wallet = self.allWallets[0];
if (wallet) {
$timeout(function() {
self.selectedWalletId = wallet.credentials.walletId;
self.selectedWalletName = wallet.credentials.walletName;
$scope.$apply();
}, 100);
}
};
$scope.update = function(opts) {
@ -84,33 +81,6 @@ angular.module('copayApp.controllers').controller('buyGlideraController',
}
};
$scope.openWalletsModal = function(wallets) {
self.error = null;
$scope.type = 'BUY';
$scope.wallets = wallets;
$scope.noColor = true;
$scope.self = self;
$ionicModal.fromTemplateUrl('views/modals/wallets.html', {
scope: $scope,
animation: 'slide-in-up'
}).then(function(modal) {
$scope.walletsModal = modal;
$scope.walletsModal.show();
});
$scope.$on('walletSelected', function(ev, walletId) {
$timeout(function() {
wallet = profileService.getClient(walletId);
self.selectedWalletId = walletId;
self.selectedWalletName = wallet.credentials.walletName;
$scope.$apply();
}, 100);
$scope.walletsModal.hide();
});
};
this.getBuyPrice = function(token, price) {
var self = this;
this.error = null;
@ -122,7 +92,7 @@ angular.module('copayApp.controllers').controller('buyGlideraController',
glideraService.buyPrice(token, price, function(err, buyPrice) {
self.gettingBuyPrice = false;
if (err) {
self.error = 'Could not get exchange information. Please, try again.';
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get exchange information. Please, try again'));
return;
}
self.buyPrice = buyPrice;
@ -131,13 +101,12 @@ angular.module('copayApp.controllers').controller('buyGlideraController',
this.get2faCode = function(token) {
var self = this;
self.error = null;
ongoingProcess.set('Sending 2FA code...', true);
$timeout(function() {
glideraService.get2faCode(token, function(err, sent) {
ongoingProcess.set('Sending 2FA code...', false);
if (err) {
self.error = 'Could not send confirmation code to your phone';
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not send confirmation code to your phone'));
return;
}
self.show2faCodeInput = sent;
@ -147,13 +116,12 @@ angular.module('copayApp.controllers').controller('buyGlideraController',
this.sendRequest = function(token, permissions, twoFaCode) {
var self = this;
self.error = null;
ongoingProcess.set('Buying Bitcoin...', true);
$timeout(function() {
walletService.getAddress(wallet, false, function(err, walletAddr) {
if (err) {
ongoingProcess.set('Buying Bitcoin...', false);
self.error = bwcError.cb(err, 'Could not create address');
popupService.showAlert(gettextCatalog.getString('Error'), bwcError.cb(err, 'Could not create address'));
return;
}
var data = {
@ -166,11 +134,13 @@ angular.module('copayApp.controllers').controller('buyGlideraController',
glideraService.buy(token, twoFaCode, data, function(err, data) {
ongoingProcess.set('Buying Bitcoin...', false);
if (err) {
self.error = err;
popupService.showAlert(gettextCatalog.getString('Error'), err);
return;
}
self.success = data;
$scope.$emit('Local/GlideraTx');
$timeout(function() {
$scope.$digest();
});
});
});
}, 100);

View File

@ -1,7 +1,7 @@
'use strict';
angular.module('copayApp.controllers').controller('createController',
function($scope, $rootScope, $timeout, $log, lodash, $state, profileService, configService, gettext, ledger, trezor, platformInfo, derivationPathHelper, ongoingProcess, walletService, storageService) {
function($scope, $rootScope, $timeout, $log, lodash, $state, $ionicScrollDelegate, profileService, configService, gettext, ledger, trezor, platformInfo, derivationPathHelper, ongoingProcess, walletService, storageService) {
var isChromeApp = platformInfo.isChromeApp;
var isCordova = platformInfo.isCordova;
@ -37,6 +37,10 @@ angular.module('copayApp.controllers').controller('createController',
return new Array(num);
}
$scope.showAdvChange = function() {
$ionicScrollDelegate.resize();
};
var updateRCSelect = function(n) {
$scope.totalCopayers = n;
var maxReq = COPAYER_PAIR_LIMITS[n];

View File

@ -1,11 +1,7 @@
'use strict';
angular.module('copayApp.controllers').controller('glideraController',
function($rootScope, $scope, $timeout, $ionicModal, $log, profileService, storageService, glideraService, lodash, ongoingProcess, platformInfo, nodeWebkit) {
if (platformInfo.isCordova && StatusBar.isVisible) {
StatusBar.backgroundColorByHexString("#4B6178");
}
function($scope, $timeout, $ionicModal, $log, storageService, glideraService, ongoingProcess, platformInfo, nodeWebkit, popupService, gettextCatalog) {
$scope.openExternalLink = function(url, target) {
if (platformInfo.isNW) {
@ -20,7 +16,6 @@ angular.module('copayApp.controllers').controller('glideraController',
$scope.network = glideraService.getEnvironment();
$scope.token = null;
$scope.error = null;
$scope.permissions = null;
$scope.email = null;
$scope.personalInfo = null;
@ -32,7 +27,7 @@ angular.module('copayApp.controllers').controller('glideraController',
glideraService.init($scope.token, function(err, glidera) {
ongoingProcess.set('connectingGlidera');
if (err || !glidera) {
$scope.error = err;
if (err) popupService.showAlert(gettextCatalog.getString('Error'), err);
return;
}
$scope.token = glidera.token;
@ -81,15 +76,11 @@ angular.module('copayApp.controllers').controller('glideraController',
this.submitOauthCode = function(code) {
ongoingProcess.set('connectingGlidera', true);
$scope.error = null;
$timeout(function() {
glideraService.getToken(code, function(err, data) {
ongoingProcess.set('connectingGlidera', false);
if (err) {
$scope.error = err;
$timeout(function() {
$scope.$apply();
}, 100);
popupService.showAlert(gettextCatalog.getString('Error'), err);
} else if (data && data.access_token) {
storageService.setGlideraToken($scope.network, data.access_token, function() {
$scope.init(data.access_token);
@ -108,7 +99,11 @@ angular.module('copayApp.controllers').controller('glideraController',
$scope.self = self;
$scope.tx = tx;
glideraService.getTransaction(token, tx.transactionUuid, function(error, tx) {
glideraService.getTransaction(token, tx.transactionUuid, function(err, tx) {
if (err) {
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get transactions'));
return;
}
$scope.tx = tx;
});

View File

@ -1,41 +1,34 @@
'use strict';
angular.module('copayApp.controllers').controller('glideraUriController',
function($scope, $log, $stateParams, $timeout, profileService, configService, glideraService, storageService, $state, ongoingProcess) {
function($scope, $log, $stateParams, $timeout, glideraService, storageService, $state, ongoingProcess, popupService, gettextCatalog) {
this.submitOauthCode = function(code) {
var submitOauthCode = function(code) {
$log.debug('Glidera Oauth Code:' + code);
var self = this;
var glideraTestnet = configService.getSync().glidera.testnet;
var network = glideraTestnet ? 'testnet' : 'livenet';
$scope.network = glideraService.getEnvironment();
ongoingProcess.set('connectingGlidera', true);
this.error = null;
$timeout(function() {
glideraService.getToken(code, function(err, data) {
ongoingProcess.set('connectingGlidera', false);
if (err) {
self.error = err;
$timeout(function() {
$scope.$apply();
}, 100);
popupService.showAlert(gettextCatalog.getString('Error'), err);
} else if (data && data.access_token) {
storageService.setGlideraToken(network, data.access_token, function() {
$scope.$emit('Local/GlideraUpdated', data.access_token);
storageService.setGlideraToken($scope.network, data.access_token, function() {
$timeout(function() {
$state.go('glidera');
$state.go('glidera.main');
$scope.$apply();
}, 100);
}, 500);
});
}
});
}, 100);
};
this.checkCode = function() {
$scope.checkCode = function() {
if ($stateParams.url) {
var match = $stateParams.url.match(/code=(.+)/);
if (match && match[1]) {
this.code = match[1];
return this.submitOauthCode(this.code);
submitOauthCode(match[1]);
return;
}
}
$log.error('Bad state: ' + JSON.stringify($stateParams));

View File

@ -1,13 +1,13 @@
'use strict';
angular.module('copayApp.controllers').controller('amazonCardDetailsController', function($scope, $log, $timeout, bwcError, amazonService, lodash, ongoingProcess) {
angular.module('copayApp.controllers').controller('amazonCardDetailsController', function($scope, $log, $timeout, bwcError, amazonService, lodash, ongoingProcess, popupService, gettextCatalog) {
$scope.cancelGiftCard = function() {
ongoingProcess.set('Canceling gift card...', true);
amazonService.cancelGiftCard($scope.card, function(err, data) {
ongoingProcess.set('Canceling gift card...', false);
if (err) {
$scope.error = bwcError.msg(err);
popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err));
return;
}
$scope.card.cardStatus = data.cardStatus;
@ -29,7 +29,7 @@ angular.module('copayApp.controllers').controller('amazonCardDetailsController',
$scope.refreshGiftCard = function() {
amazonService.getPendingGiftCards(function(err, gcds) {
if (err) {
self.error = err;
popupService.showAlert(gettextCatalog.getString('Error'), err);
return;
}
lodash.forEach(gcds, function(dataFromStorage) {
@ -37,8 +37,7 @@ angular.module('copayApp.controllers').controller('amazonCardDetailsController',
$log.debug("creating gift card");
amazonService.createGiftCard(dataFromStorage, function(err, giftCard) {
if (err) {
self.error = bwcError.msg(err);
$log.debug(bwcError.msg(err));
popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err));
return;
}
if (!lodash.isEmpty(giftCard)) {

View File

@ -2,12 +2,6 @@
angular.module('copayApp.controllers').controller('welcomeController', function($scope, $state, $timeout, $log, $ionicPopup, profileService) {
$scope.goImport = function() {
$state.go('add.import.phrase', {
fromOnboarding: true
});
};
$scope.createProfile = function() {
$log.debug('Creating profile');
profileService.createProfile(function(err) {

View File

@ -1,13 +1,12 @@
'use strict';
angular.module('copayApp.controllers').controller('preferencesGlideraController',
function($scope, $log, $ionicModal, ongoingProcess, glideraService) {
function($scope, $log, $timeout, $state, ongoingProcess, glideraService, popupService, gettextCatalog) {
$scope.init = function(accessToken) {
$scope.network = glideraService.getEnvironment();
$scope.token = accessToken;
$scope.error = null;
$scope.permissions = null;
$scope.email = null;
$scope.personalInfo = null;
@ -19,7 +18,7 @@ angular.module('copayApp.controllers').controller('preferencesGlideraController'
glideraService.init($scope.token, function(err, glidera) {
ongoingProcess.set('connectingGlidera');
if (err || !glidera) {
$scope.error = err;
if (err) popupService.showAlert(gettextCatalog.getString('Error'), err);
return;
}
$scope.token = glidera.token;
@ -63,11 +62,14 @@ angular.module('copayApp.controllers').controller('preferencesGlideraController'
};
$scope.revokeToken = function() {
$ionicModal.fromTemplateUrl('views/modals/glidera-confirmation.html', {
scope: $scope
}).then(function(modal) {
$scope.glideraConfirmationModal = modal;
$scope.glideraConfirmationModal.show();
popupService.showConfirm('Glidera', 'Are you sure you would like to log out of your Glidera account?', function(res) {
if (res) {
glideraService.removeToken(function() {
$timeout(function() {
$state.go('glidera.main');
}, 100);
});
}
});
};

View File

@ -1,28 +1,27 @@
'use strict';
angular.module('copayApp.controllers').controller('sellGlideraController',
function($rootScope, $scope, $timeout, $ionicModal, $log, profileService, glideraService, bwcError, lodash, walletService, fingerprintService, configService, ongoingProcess) {
function($scope, $timeout, $log, profileService, glideraService, bwcError, lodash, walletService, configService, ongoingProcess, popupService, gettextCatalog) {
var self = this;
this.data = {};
this.show2faCodeInput = null;
this.success = null;
this.error = null;
var wallet;
var handleEncryptedWallet = function(wallet, cb) {
if (!walletService.isEncrypted(wallet)) return cb();
$rootScope.$emit('Local/NeedsPassword', false, function(err, password) {
if (err) return cb(err);
return cb(walletService.unlock(wallet, password));
});
};
$scope.$on('Wallet/Changed', function(event, w) {
if (lodash.isEmpty(w)) {
$log.debug('No wallet provided');
return;
}
wallet = w;
$log.debug('Wallet changed: ' + w.name);
});
$scope.init = function(accessToken) {
$scope.network = glideraService.getEnvironment();
$scope.token = accessToken;
$scope.error = null;
$scope.permissions = null;
$scope.email = null;
$scope.personalInfo = null;
@ -34,7 +33,7 @@ angular.module('copayApp.controllers').controller('sellGlideraController',
glideraService.init($scope.token, function(err, glidera) {
ongoingProcess.set('connectingGlidera');
if (err || !glidera) {
$scope.error = err;
if (err) popupService.showAlert(gettextCatalog.getString('Error'), err);
return;
}
$scope.token = glidera.token;
@ -42,21 +41,11 @@ angular.module('copayApp.controllers').controller('sellGlideraController',
$scope.update({fullUpdate: true});
});
self.allWallets = profileService.getWallets({
$scope.wallets = profileService.getWallets({
network: $scope.network,
n: 1,
onlyComplete: true
});
if (lodash.isEmpty(self.allWallets)) return;
wallet = self.allWallets[0];
if (wallet) {
$timeout(function() {
self.selectedWalletId = wallet.credentials.walletId;
self.selectedWalletName = wallet.credentials.walletName;
$scope.$apply();
}, 100);
}
};
$scope.update = function(opts) {
@ -93,36 +82,8 @@ angular.module('copayApp.controllers').controller('sellGlideraController',
}
};
$scope.openWalletsModal = function(wallets) {
self.error = null;
$scope.type = 'SELL';
$scope.wallets = wallets;
$scope.noColor = true;
$scope.self = self;
$ionicModal.fromTemplateUrl('views/modals/wallets.html', {
scope: $scope,
animation: 'slide-in-up'
}).then(function(modal) {
$scope.walletsModal = modal;
$scope.walletsModal.show();
});
$scope.$on('walletSelected', function(ev, walletId) {
$timeout(function() {
wallet = profileService.getClient(walletId);
self.selectedWalletId = walletId;
self.selectedWalletName = wallet.credentials.walletName;
$scope.$apply();
}, 100);
$scope.walletsModal.hide();
});
};
this.getSellPrice = function(token, price) {
var self = this;
self.error = null;
if (!price || (price && !price.qty && !price.fiat)) {
self.sellPrice = null;
return;
@ -131,7 +92,7 @@ angular.module('copayApp.controllers').controller('sellGlideraController',
glideraService.sellPrice(token, price, function(err, sellPrice) {
self.gettingSellPrice = false;
if (err) {
self.error = 'Could not get exchange information. Please, try again.';
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get exchange information. Please, try again'));
return;
}
self.sellPrice = sellPrice;
@ -145,7 +106,7 @@ angular.module('copayApp.controllers').controller('sellGlideraController',
glideraService.get2faCode(token, function(err, sent) {
ongoingProcess.set('Sending 2FA code...', false);
if (err) {
self.error = 'Could not send confirmation code to your phone';
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not send confirmation code to your phone'));
} else {
self.show2faCodeInput = sent;
}
@ -155,29 +116,27 @@ angular.module('copayApp.controllers').controller('sellGlideraController',
this.createTx = function(token, permissions, twoFaCode) {
var self = this;
self.error = null;
var outputs = [];
var config = configService.getSync();
var configWallet = config.wallet;
var walletSettings = configWallet.settings;
if (!wallet) {
self.error = 'No wallet selected';
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('No wallet selected'));
return;
}
ongoingProcess.set('creatingTx', true);
walletService.getAddress(wallet, null, function(err, refundAddress) {
if (!refundAddress) {
ongoingProcess.clear();
self.error = bwcError.msg(err, 'Could not create address');
popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err, 'Could not create address'));
return;
}
glideraService.getSellAddress(token, function(error, sellAddress) {
if (!sellAddress) {
glideraService.getSellAddress(token, function(err, sellAddress) {
if (!sellAddress || err) {
ongoingProcess.clear();
self.error = 'Could not get the destination bitcoin address';
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get the destination bitcoin address'));
return;
}
var amount = parseInt((self.sellPrice.qty * 100000000).toFixed(0));
@ -205,28 +164,30 @@ angular.module('copayApp.controllers').controller('sellGlideraController',
walletService.createTx(wallet, txp, function(err, createdTxp) {
ongoingProcess.clear();
if (err) {
self.error = err.message ||  bwcError.msg(err);
popupService.showAlert(gettextCatalog.getString('Error'), err.message || bwcError.msg(err));
return;
}
walletService.prepare(wallet, txp, function(err, password) {
walletService.prepare(wallet, function(err, password) {
if (err) {
self.error = err.message ||  bwcError.msg(err);
ongoingProcess.clear();
popupService.showAlert(gettextCatalog.getString('Error'), err.message || bwcError.msg(err));
return;
}
ongoingProcess.set('signingTx', true);
walletService.publishTx(wallet, createdTxp, function(err, publishedTxp) {
if (err) {
ongoingProcess.clear();
self.error = err.message ||  bwcError.msg(err);
popupService.showAlert(gettextCatalog.getString('Error'), err.message || bwcError.msg(err));
return;
}
walletService.signTx(wallet, publishedTxp, function(err, password, signedTxp) {
walletService.removeTx(wallet, signedTxp, function(err) {
if (err) $log.debug(err);
});
ongoingProcess.clear();
walletService.signTx(wallet, publishedTxp, password, function(err, signedTxp) {
if (err) {
self.error = err.message ||  bwcError.msg(err);
ongoingProcess.clear();
popupService.showAlert(gettextCatalog.getString('Error'), err.message || bwcError.msg(err));
walletService.removeTx(wallet, signedTxp, function(err) {
if (err) $log.debug(err);
});
return;
}
var rawTx = signedTxp.raw;
@ -237,15 +198,17 @@ angular.module('copayApp.controllers').controller('sellGlideraController',
useCurrentPrice: self.sellPrice.priceUuid ? false : true,
ip: null
};
ongoingProcess.set('Seling Bitcoin', true);
ongoingProcess.set('Selling Bitcoin', true);
glideraService.sell(token, twoFaCode, data, function(err, data) {
ongoingProcess.clear();
if (err) {
self.error = err.message ||  bwcError.msg(err);
popupService.showAlert(gettextCatalog.getString('Error'), err.message || bwcError.msg(err));
return;
}
self.success = data;
$scope.update();
$timeout(function() {
$scope.$digest();
});
});
});
});

Some files were not shown because too many files have changed in this diff Show More