pulled in latest commits from yesterday, merged and handled conflicts
This commit is contained in:
commit
f15d597b25
123 changed files with 1686 additions and 1291 deletions
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
"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",
|
||||
|
|
|
|||
28
public/img/icon-backup.svg
Executable file
28
public/img/icon-backup.svg
Executable file
|
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="51px" height="51px" viewBox="0 0 51 51" 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>item-ico-backup</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs>
|
||||
<path d="M25.1597034,50.388592 C39.0550239,50.388592 50.3194068,39.1087215 50.3194068,25.194296 C50.3194068,11.2798705 39.0550239,0 25.1597034,0 C11.2643829,0 0,11.2798705 0,25.194296 C0,39.1087215 11.2643829,50.388592 25.1597034,50.388592 Z" id="path-1"></path>
|
||||
</defs>
|
||||
<g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="Wallet/Icon/Backup" transform="translate(-1.000000, -1.000000)">
|
||||
<g id="item-ico-backup" transform="translate(1.000000, 1.000000)">
|
||||
<mask id="mask-2" fill="white">
|
||||
<use xlink:href="#path-1"></use>
|
||||
</mask>
|
||||
<use id="Mask" fill="#647CE8" xlink:href="#path-1"></use>
|
||||
<g id="arrows-24px-outline-4_restore" mask="url(#mask-2)">
|
||||
<g transform="translate(13.000000, 14.000000)" id="Group">
|
||||
<g>
|
||||
<polyline id="Shape" stroke="#FFFFFF" points="12 6 12 12 16.8 16.8"></polyline>
|
||||
<path d="M0,12 C0,18.6 5.4,24 12,24 C18.6,24 24,18.6 24,12 C24,5.4 18.6,0 12,0 C7.32,0 3.24,2.64 1.32,6.6" id="Shape" stroke="#FFFFFF"></path>
|
||||
<polyline id="Shape" stroke="#FFFFFF" points="0.3168 0.684 1.32 6.6 7.236 5.5968"></polyline>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
24
public/img/icon-bitcoin.svg
Executable file
24
public/img/icon-bitcoin.svg
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="51px" height="51px" viewBox="0 0 51 51" 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>item-ico-bitcoin</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs>
|
||||
<linearGradient x1="63.5606697%" y1="66.5486774%" x2="29.0167968%" y2="6.87818453%" id="linearGradient-1">
|
||||
<stop stop-color="#FFA24B" offset="0%"></stop>
|
||||
<stop stop-color="#F7891C" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
<path d="M25.1597034,50.388592 C39.0550239,50.388592 50.3194068,39.1087215 50.3194068,25.194296 C50.3194068,11.2798705 39.0550239,0 25.1597034,0 C11.2643829,0 0,11.2798705 0,25.194296 C0,39.1087215 11.2643829,50.388592 25.1597034,50.388592 Z" id="path-2"></path>
|
||||
</defs>
|
||||
<g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="Wallet/Icon/Bitcoin" transform="translate(-1.000000, -1.000000)">
|
||||
<g id="item-ico-bitcoin" transform="translate(1.000000, 1.000000)">
|
||||
<mask id="mask-3" fill="white">
|
||||
<use xlink:href="#path-2"></use>
|
||||
</mask>
|
||||
<use id="Mask" fill="url(#linearGradient-1)" xlink:href="#path-2"></use>
|
||||
<path d="M32.5251708,19.1369572 C31.8948853,16.0886456 29.257137,15.2921976 26.0055297,15.2593441 L25.5453174,11 L23.0555529,11.2090294 L23.5134657,15.373126 C22.8550964,15.4317519 22.1899109,15.4927249 21.5389325,15.5728157 L21.0810197,11.4087191 L18.5639908,11.6271364 L19.0242031,15.8864805 C18.491562,15.9338279 17.9619595,16.0121421 17.4293184,16.0594894 L17.4293184,16.0594894 L14,16.3519349 L14.3001563,19.1057521 C14.3001563,19.1057521 16.1464976,18.9101859 16.097471,18.9670835 C17.1082244,18.8911646 17.5047081,19.4669358 17.6381561,19.9652087 L18.1721961,24.815384 C18.2433956,24.8228812 18.3251888,24.7947176 18.4359709,24.8286017 C18.337507,24.8304924 18.2829782,24.8492682 18.1845144,24.8511589 L18.9620463,31.6263154 C18.9496461,31.9667227 18.8043732,32.4969407 18.1187395,32.5649545 C18.1558585,32.5841865 16.2873443,32.7153579 16.2873443,32.7153579 L16.1570191,35.8575 L19.3937622,35.5593341 C19.9976027,35.5194839 20.5915887,35.4510138 21.1638124,35.4300534 L21.636343,39.7251724 L24.1261075,39.516143 L23.6658952,35.2567989 C24.3681996,35.2150579 25.0290326,35.163587 25.6601376,35.1143489 L26.1104953,39.3450731 L28.6002598,39.1360437 L28.1277292,34.8409248 C32.2914614,34.2235708 35.0997752,32.8804369 34.9972849,28.7300142 C34.9241947,25.4178154 33.2949822,24.0740188 30.8224629,23.6688612 C32.2236222,22.7782364 32.9706,21.3605564 32.5251708,19.1369572 L32.5251708,19.1369572 Z M30.0403391,28.6601004 C30.3997054,31.8737265 25.0597443,31.9757118 23.3838054,32.1126037 L22.7467022,26.4095523 C24.4523691,26.2704275 29.6589641,25.2939871 30.0403391,28.6601004 L30.0403391,28.6601004 Z M22.4636273,23.7939125 L21.9147231,18.6127177 C23.3026612,18.5029629 27.6736684,17.6461697 28.0060987,20.6929985 C28.3307274,23.6064579 23.8812935,23.6819248 22.4636273,23.7939125 Z" id="Bitcoin_Symbol" fill="#FFFFFF" mask="url(#mask-3)"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
15
public/img/icon-bitpay.svg
Normal file
15
public/img/icon-bitpay.svg
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="51px" height="51px" viewBox="0 0 51 51" 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>Oval 87 + bitpay-logo-grayscale</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="Wallet/Icon/BitPay">
|
||||
<g id="Oval-87-+-bitpay-logo-grayscale" transform="translate(0.255973, 0.209302)">
|
||||
<ellipse id="Oval-87" fill="#2F2EAA" cx="25.1597034" cy="25.194296" rx="25.1597034" ry="25.194296"></ellipse>
|
||||
<path d="M28.4160311,19.6561996 C29.5705304,19.6561996 30.5875893,19.8806427 31.4397197,20.3014735 C32.2918501,20.7223043 32.979052,21.283412 33.5563016,22.0128521 C34.1060632,22.7422921 34.5183844,23.5839537 34.7932651,24.5378368 C35.0681459,25.4917199 35.2055863,26.5297692 35.2055863,27.6519847 C35.2055863,29.3633632 34.9032175,30.9625202 34.2709917,32.5055664 C33.6387659,34.0205573 32.8141235,35.3672158 31.7420885,36.4894312 C30.6700535,37.6116467 29.4056019,38.509419 27.9487338,39.1546929 C26.4918657,39.7999668 24.9250453,40.1366314 23.2207844,40.1366314 C23.0008798,40.1366314 22.6160467,40.1366314 22.0662852,40.108576 C21.5165236,40.108576 20.8842978,40.0524653 20.1970959,39.9402437 C19.4824059,39.8280222 18.7402278,39.6877452 17.9705616,39.4913575 C17.1734073,39.2949698 16.4312292,39.014416 15.7440273,38.6777513 L22.0387971,11.68847 L27.673853,10.7906977 L25.4473187,20.3575843 C25.9421041,20.1331412 26.3819134,19.9648089 26.8766988,19.8525873 C27.3439961,19.7123104 27.8662696,19.6561996 28.4160311,19.6561996 L28.4160311,19.6561996 Z M23.6880818,35.5355481 C24.5402122,35.5355481 25.3373664,35.3391604 26.0795445,34.8902742 C26.8217226,34.4694435 27.4814365,33.9083357 28.031198,33.2069511 C28.5809596,32.5055664 29.0207688,31.6919602 29.3231377,30.8222433 C29.6255065,29.9244709 29.790435,28.9986432 29.790435,28.0447601 C29.790435,26.8664338 29.5980185,25.9406061 29.2131854,25.2672768 C28.8283523,24.5939476 28.031198,24.2853383 26.9866511,24.2853383 C26.6567941,24.2853383 26.2994491,24.3133937 25.7496876,24.4536707 C25.199926,24.5658922 24.7326287,24.8464461 24.2928195,25.2392215 L21.9288448,35.4233266 C22.6435348,35.5355481 22.8634394,35.5636035 23.055856,35.5636035 C23.1932964,35.5355481 23.413201,35.5355481 23.6880818,35.5355481 L23.6880818,35.5355481 Z" id="b_2_" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
30
public/img/icon-gift.svg
Executable file
30
public/img/icon-gift.svg
Executable file
|
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="51px" height="51px" viewBox="0 0 51 51" 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>item-ico-gift</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs>
|
||||
<linearGradient x1="0%" y1="0%" x2="101.999998%" y2="100.999999%" id="linearGradient-1">
|
||||
<stop stop-color="#3023AE" offset="0%"></stop>
|
||||
<stop stop-color="#C96DD8" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
<ellipse id="path-2" cx="25.1597034" cy="25.194296" rx="25.1597034" ry="25.194296"></ellipse>
|
||||
</defs>
|
||||
<g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="Wallet/Icon/Gifts" transform="translate(-1.000000, -1.000000)">
|
||||
<g id="item-ico-gift" transform="translate(1.000000, 1.000000)">
|
||||
<g id="Group">
|
||||
<mask id="mask-3" fill="white">
|
||||
<use xlink:href="#path-2"></use>
|
||||
</mask>
|
||||
<use id="Mask" fill="url(#linearGradient-1)" xlink:href="#path-2"></use>
|
||||
<polyline id="Shape" stroke="#FFFFFF" mask="url(#mask-3)" points="34.9090909 22.3636364 34.9090909 37 16.0909091 37 16.0909091 22.3636364"></polyline>
|
||||
<rect id="Rectangle-path" stroke="#FFFFFF" mask="url(#mask-3)" x="14" y="18.1818182" width="23" height="4.18181818"></rect>
|
||||
<path d="M19.2272727,16.0909091 C19.2272727,14.9356818 20.1629545,14 21.3181818,14 C24.4106364,14 25.5,18.1818182 25.5,18.1818182 L21.3181818,18.1818182 C20.1629545,18.1818182 19.2272727,17.2461364 19.2272727,16.0909091 L19.2272727,16.0909091 Z" id="Shape" stroke="#FFFFFF" mask="url(#mask-3)"></path>
|
||||
<path d="M31.7727273,16.0909091 C31.7727273,14.9356818 30.8370455,14 29.6818182,14 C26.5893636,14 25.5,18.1818182 25.5,18.1818182 L29.6818182,18.1818182 C30.8370455,18.1818182 31.7727273,17.2461364 31.7727273,16.0909091 L31.7727273,16.0909091 Z" id="Shape" stroke="#FFFFFF" mask="url(#mask-3)"></path>
|
||||
<polyline id="Shape" stroke="#FFFFFF" mask="url(#mask-3)" points="27.5909091 18.1818182 27.5909091 37 23.4090909 37 23.4090909 18.1818182"></polyline>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
|
|
@ -1,21 +1,28 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Capa_1" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns"
|
||||
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="-285 410.9 25 20"
|
||||
style="enable-background:new -285 410.9 25 20;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;}
|
||||
</style>
|
||||
<title>Wallet-Copy</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<g id="Page-1" sketch:type="MSPage">
|
||||
<g id="Navigation-13-Copy-2" transform="translate(-25.000000, -285.000000)" sketch:type="MSArtboardGroup">
|
||||
<g id="wallet-ico-copy-2" transform="translate(26.042969, 286.000000)" sketch:type="MSLayerGroup">
|
||||
<path class="st0" d="M-261.8,428.9h-23.5l0-18.2l18-0.1v2.8h5.5V428.9z M-284.7,428.3h22.4V414h-4.9l-0.3,0.1h-17.1V428.3z
|
||||
M-284.7,413.4h16.8v-2.2l-16.8,0.1V413.4z M-266.4,424c-1,0-1.7-0.8-1.7-1.7s0.8-1.7,1.7-1.7s1.7,0.8,1.7,1.7
|
||||
S-265.4,424-266.4,424z M-266.4,421.1c-0.6,0-1.2,0.5-1.2,1.1s0.5,1.1,1.2,1.1c0.6,0,1.2-0.5,1.2-1.1S-265.8,421.1-266.4,421.1z"
|
||||
/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="44px" height="38px" viewBox="0 0 44 38" 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>Wallet Copy</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs>
|
||||
<path d="M12.2206319,33.5295725 C12.2206319,35.1887012 13.5540503,36.5336907 15.221911,36.5336908 L35.3827914,36.5336913 C37.040352,36.5336913 38.3840705,35.1979548 38.3840705,33.529573 L38.3840709,19.5110705 L12.2206319,19.5110706 L12.2206319,33.5295725 Z M31.7761235,19.4691743 L31.776124,16.3165791 L12.2255864,16.3165791 C12.2255864,16.3165791 12.2255864,19.5085877 12.2255864,19.5085877 L31.7761235,19.4691743 Z M33.423217,30.9126651 C34.3328814,30.9126651 35.07031,30.1815053 35.07031,29.279574 C35.07031,28.3776426 34.3328814,27.6464828 33.423217,27.6464828 C32.5135527,27.6464828 31.776124,28.3776426 31.776124,29.279574 C31.776124,30.1815053 32.5135527,30.9126651 33.423217,30.9126651 Z" id="path-1"></path>
|
||||
<filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-2">
|
||||
<feMorphology radius="0.5" operator="dilate" in="SourceAlpha" result="shadowSpreadOuter1"></feMorphology>
|
||||
<feOffset dx="0" dy="2" in="shadowSpreadOuter1" result="shadowOffsetOuter1"></feOffset>
|
||||
<feMorphology radius="1" operator="erode" in="SourceAlpha" result="shadowInner"></feMorphology>
|
||||
<feOffset dx="0" dy="2" in="shadowInner" result="shadowInner"></feOffset>
|
||||
<feComposite in="shadowOffsetOuter1" in2="shadowInner" operator="out" result="shadowOffsetOuter1"></feComposite>
|
||||
<feGaussianBlur stdDeviation="4" 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.307518116 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
|
||||
</filter>
|
||||
</defs>
|
||||
<g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="Wallet/Icon/Blue" transform="translate(-3.000000, -10.000000)">
|
||||
<g id="Oval-87-+-bitpay-logo-grayscale" transform="translate(0.000000, 1.000000)">
|
||||
<g id="Wallet-Copy">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-2)" xlink:href="#path-1"></use>
|
||||
<use stroke="#FFFFFF" stroke-width="1" xlink:href="#path-1"></use>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 2.5 KiB |
202
public/roboto-font/LICENSE.txt
Executable file
202
public/roboto-font/LICENSE.txt
Executable file
|
|
@ -0,0 +1,202 @@
|
|||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
BIN
public/roboto-font/Roboto-Black.ttf
Executable file
BIN
public/roboto-font/Roboto-Black.ttf
Executable file
Binary file not shown.
BIN
public/roboto-font/Roboto-Black.woff
Normal file
BIN
public/roboto-font/Roboto-Black.woff
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-Black.woff2
Normal file
BIN
public/roboto-font/Roboto-Black.woff2
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-BlackItalic.ttf
Executable file
BIN
public/roboto-font/Roboto-BlackItalic.ttf
Executable file
Binary file not shown.
BIN
public/roboto-font/Roboto-BlackItalic.woff
Normal file
BIN
public/roboto-font/Roboto-BlackItalic.woff
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-BlackItalic.woff2
Normal file
BIN
public/roboto-font/Roboto-BlackItalic.woff2
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-Bold.ttf
Executable file
BIN
public/roboto-font/Roboto-Bold.ttf
Executable file
Binary file not shown.
BIN
public/roboto-font/Roboto-Bold.woff
Normal file
BIN
public/roboto-font/Roboto-Bold.woff
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-Bold.woff2
Normal file
BIN
public/roboto-font/Roboto-Bold.woff2
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-BoldItalic.ttf
Executable file
BIN
public/roboto-font/Roboto-BoldItalic.ttf
Executable file
Binary file not shown.
BIN
public/roboto-font/Roboto-BoldItalic.woff
Normal file
BIN
public/roboto-font/Roboto-BoldItalic.woff
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-BoldItalic.woff2
Normal file
BIN
public/roboto-font/Roboto-BoldItalic.woff2
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-Italic.ttf
Executable file
BIN
public/roboto-font/Roboto-Italic.ttf
Executable file
Binary file not shown.
BIN
public/roboto-font/Roboto-Italic.woff
Normal file
BIN
public/roboto-font/Roboto-Italic.woff
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-Italic.woff2
Normal file
BIN
public/roboto-font/Roboto-Italic.woff2
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-Light.ttf
Executable file
BIN
public/roboto-font/Roboto-Light.ttf
Executable file
Binary file not shown.
BIN
public/roboto-font/Roboto-Light.woff
Normal file
BIN
public/roboto-font/Roboto-Light.woff
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-Light.woff2
Normal file
BIN
public/roboto-font/Roboto-Light.woff2
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-LightItalic.ttf
Executable file
BIN
public/roboto-font/Roboto-LightItalic.ttf
Executable file
Binary file not shown.
BIN
public/roboto-font/Roboto-LightItalic.woff
Normal file
BIN
public/roboto-font/Roboto-LightItalic.woff
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-LightItalic.woff2
Normal file
BIN
public/roboto-font/Roboto-LightItalic.woff2
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-Medium.ttf
Executable file
BIN
public/roboto-font/Roboto-Medium.ttf
Executable file
Binary file not shown.
BIN
public/roboto-font/Roboto-Medium.woff
Normal file
BIN
public/roboto-font/Roboto-Medium.woff
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-Medium.woff2
Normal file
BIN
public/roboto-font/Roboto-Medium.woff2
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-MediumItalic.ttf
Executable file
BIN
public/roboto-font/Roboto-MediumItalic.ttf
Executable file
Binary file not shown.
BIN
public/roboto-font/Roboto-MediumItalic.woff
Normal file
BIN
public/roboto-font/Roboto-MediumItalic.woff
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-MediumItalic.woff2
Normal file
BIN
public/roboto-font/Roboto-MediumItalic.woff2
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-Regular.ttf
Executable file
BIN
public/roboto-font/Roboto-Regular.ttf
Executable file
Binary file not shown.
BIN
public/roboto-font/Roboto-Regular.woff
Normal file
BIN
public/roboto-font/Roboto-Regular.woff
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-Regular.woff2
Normal file
BIN
public/roboto-font/Roboto-Regular.woff2
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-Thin.ttf
Executable file
BIN
public/roboto-font/Roboto-Thin.ttf
Executable file
Binary file not shown.
BIN
public/roboto-font/Roboto-Thin.woff
Normal file
BIN
public/roboto-font/Roboto-Thin.woff
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-Thin.woff2
Normal file
BIN
public/roboto-font/Roboto-Thin.woff2
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-ThinItalic.ttf
Executable file
BIN
public/roboto-font/Roboto-ThinItalic.ttf
Executable file
Binary file not shown.
BIN
public/roboto-font/Roboto-ThinItalic.woff
Normal file
BIN
public/roboto-font/Roboto-ThinItalic.woff
Normal file
Binary file not shown.
BIN
public/roboto-font/Roboto-ThinItalic.woff2
Normal file
BIN
public/roboto-font/Roboto-ThinItalic.woff2
Normal file
Binary file not shown.
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,26 +1,26 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-stable">
|
||||
<ion-nav-bar>
|
||||
<ion-nav-title>{{'Add wallet' | translate}}</ion-nav-title>
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button no-border" ui-sref="tabs.home">
|
||||
Close
|
||||
<i class="icon ion-chevron-left"></i> {{'Back' | translate}}
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
<ion-nav-title>Add wallet</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content>
|
||||
<ion-list>
|
||||
<ion-item class="item-remove-animate item-icon-right" type="item-text-wrap" ui-sref="add.create.personal">
|
||||
<ion-item class="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-chevron-right icon-accessory"></i>
|
||||
</ion-item>
|
||||
|
||||
<ion-item class="item-remove-animate item-icon-right" type="item-text-wrap" ui-sref="add.join">
|
||||
<ion-item class="item-remove-animate item-icon-right" type="item-text-wrap" ui-sref="tabs.join">
|
||||
<h2 translate>Join shared wallet</h2>
|
||||
<i class="icon ion-chevron-right icon-accessory"></i>
|
||||
</ion-item>
|
||||
|
||||
<ion-item class="item-remove-animate item-icon-right" type="item-text-wrap" ui-sref="add.import.phrase">
|
||||
<ion-item class="item-remove-animate item-icon-right" type="item-text-wrap" ui-sref="tabs.import.phrase">
|
||||
<h2 translate>Import wallet</h2>
|
||||
<i class="icon ion-chevron-right icon-accessory"></i>
|
||||
</ion-item>
|
||||
|
|
|
|||
|
|
@ -1,22 +1,16 @@
|
|||
<ion-view>
|
||||
|
||||
<ion-nav-bar class="bar-stable">
|
||||
<ion-nav-title>Enter Amount</ion-nav-title>
|
||||
<ion-nav-bar>
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button no-border" ui-sref="tabs.send">
|
||||
<i class="icon ion-chevron-left"></i> Back
|
||||
<button class="button no-border" ng-click="$ionicGoBack()">
|
||||
<i class="icon ion-chevron-left"></i> {{'Back' | translate}}
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-pane>
|
||||
<ion-content class="calculator" scroll="false" class="amount" ng-controller="amountController" ng-init="init()">
|
||||
<ion-content class="calculator" scroll="false" class="amount" ng-controller="amountController" ng-init="init()">
|
||||
|
||||
<div class="card">
|
||||
|
||||
<div class="item item-divider">
|
||||
Recipient
|
||||
</div>
|
||||
<div class="item item-divider" translate>Recipient</div>
|
||||
|
||||
<div class="item item-text-wrap item-icon-left">
|
||||
<i class="icon ion-ios-person-outline"></i>
|
||||
|
|
@ -25,24 +19,20 @@
|
|||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="item item-divider">
|
||||
Amount
|
||||
</div>
|
||||
|
||||
<div class="item item-divider" translate>Amount</div>
|
||||
|
||||
<div class="item item-text-wrap item-button-right">
|
||||
<a class="postfix" ng-click="toggleAlternative()" ng-show="showAlternativeAmount">{{alternativeIsoCode}}</a>
|
||||
<a class="postfix" ng-click="toggleAlternative()" ng-show="!showAlternativeAmount">{{unitName}}</a>
|
||||
|
||||
<a class="postfix" ng-click="toggleAlternative()" ng-show="showAlternativeAmount">{{alternativeIsoCode}}</a>
|
||||
<a class="postfix" ng-click="toggleAlternative()" ng-show="!showAlternativeAmount">{{unitName}}</a>
|
||||
|
||||
<div class="text-light text-black m15b" ng-class="{'size-28': smallFont, 'size-36': !smallFont}"> <span> {{amount || "0.00" }}</div>
|
||||
<div class="text-light text-black" ng-class="{'size-16': smallFont, 'size-17': !smallFont}" ng-show="!showAlternativeAmount">
|
||||
{{globalResult}} <span class="label gray text-white radius">{{amountResult || '0.00'}} {{alternativeIsoCode}}</span>
|
||||
</div>
|
||||
<div class="text-light text-black size-17" ng-show="showAlternativeAmount">
|
||||
{{globalResult}} <span class="label gray text-white radius">{{alternativeResult || '0.00'}} {{unitName}}</span>
|
||||
</div>
|
||||
<div class="text-light text-black m15b" ng-class="{'size-28': smallFont, 'size-36': !smallFont}"><span> {{amount || "0.00" }}</div>
|
||||
<div class="text-light text-black" ng-class="{'size-16': smallFont, 'size-17': !smallFont}" ng-show="!showAlternativeAmount">
|
||||
{{globalResult}} <span class="label gray text-white radius">{{amountResult || '0.00'}} {{alternativeIsoCode}}</span>
|
||||
</div>
|
||||
<div class="text-light text-black size-17" ng-show="showAlternativeAmount">
|
||||
{{globalResult}} <span class="label gray text-white radius">{{alternativeResult || '0.00'}} {{unitName}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="button-calc">
|
||||
|
|
@ -84,6 +74,5 @@
|
|||
<div class="col columns operator" ng-click="pushOperator('-')">-</div>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-pane>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -12,18 +12,15 @@
|
|||
|
||||
<div ng-show="!buy.giftCard">
|
||||
|
||||
<div class="box-notification error" ng-show="buy.error" ng-click="buy.error = null">
|
||||
{{buy.error}}
|
||||
<div ng-show="buy.errorInfo">
|
||||
There was an error when trying to buy gift card, but the funds were sent to BitPay Invoice. Please, contact
|
||||
BitPay to refund your bitcoin
|
||||
<div>
|
||||
Amount: {{buy.errorInfo.amount}} {{buy.errorInfo.currency}}<br>
|
||||
BitPay Invoice ID: {{buy.errorInfo.invoiceId}}.
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<a ng-click="openExternalLink(buy.errorInfo.invoiceUrl)">Open invoice</a>
|
||||
</div>
|
||||
<div class="box-notification error" ng-show="buy.errorInfo" ng-click="buy.errorInfo = null">
|
||||
There was an error when trying to buy gift card, but the funds were sent to BitPay Invoice. Please, contact
|
||||
BitPay to refund your bitcoin
|
||||
<div>
|
||||
Amount: {{buy.errorInfo.amount}} {{buy.errorInfo.currency}}<br>
|
||||
BitPay Invoice ID: {{buy.errorInfo.invoiceId}}.
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<a ng-click="openExternalLink(buy.errorInfo.invoiceUrl)">Open invoice</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -12,9 +12,6 @@
|
|||
<ion-item class="item" ui-sref="glidera.main">
|
||||
<img src="img/glidera-logo.png" width="100">
|
||||
</ion-item>
|
||||
<ion-item class="item" ui-sref="coinbase.main">
|
||||
<img src="img/coinbase-logo.png" width="100"> TODO
|
||||
</ion-item>
|
||||
</ion-list>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
|
|
|
|||
|
|
@ -1,61 +1,56 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar>
|
||||
<ion-nav-back-button>
|
||||
{{'Back' | translate}}
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-pane>
|
||||
<ion-nav-bar class="bar-stable">
|
||||
<ion-nav-title>Confirm</ion-nav-title>
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button no-border" ui-sref="tabs.send">
|
||||
<i class="icon ion-chevron-left"></i> Back
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
<ion-content scroll="false" ng-controller="confirmController" ng-init="init()">
|
||||
|
||||
<ion-content scroll="false" ng-controller="confirmController" ng-init="init()">
|
||||
<div class="card">
|
||||
<div class="item item-text-wrap">
|
||||
<i class="icon ion-arrow-up-c"></i> <span class="text-bold size-16">Sending</span>
|
||||
<div class="text-bold size-28 m15t">{{amountStr}} </div>
|
||||
<div class="text-light size-20 m5t">{{alternativeAmountStr}} </div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="item item-text-wrap">
|
||||
<i class="icon ion-arrow-up-c"></i> <span class="text-bold size-16">Sending</span>
|
||||
<div class="text-bold size-28 m15t">{{amountStr}} </div>
|
||||
<div class="text-light size-20 m5t">{{alternativeAmountStr}} </div>
|
||||
<div class="list card">
|
||||
<div class="item">Fee: {{feeLevel}}
|
||||
<span class="item-note">
|
||||
{{fee || '...'}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="item item-icon-left">
|
||||
<i class="icon ion-ios-person-outline"></i>
|
||||
<label translate>To</label> {{toAddress}}
|
||||
<p ng-show="toName">{{toName}}</p>
|
||||
|
||||
<div ng-show="_paypro" ng-click="openPPModal(_paypro)">
|
||||
<i ng-show="_paypro.verified && _paypro.caTrusted" class="ion-locked" style="color:green"></i>
|
||||
<i ng-show="!_paypro.caTrusted" class="ion-unlocked" style="color:red"></i>
|
||||
{{_paypro.domain}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="list card">
|
||||
<div class="item">Fee: {{feeLevel}}
|
||||
<span class="item-note">
|
||||
{{fee || '...'}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="item item-icon-left">
|
||||
<i class="icon ion-ios-person-outline"></i>
|
||||
<label translate>To</label> {{toAddress}}
|
||||
<p ng-show="toName">{{toName}}</p>
|
||||
|
||||
<div ng-show="_paypro" ng-click="openPPModal(_paypro)">
|
||||
<i ng-show="_paypro.verified && _paypro.caTrusted" class="ion-locked" style="color:green"></i>
|
||||
<i ng-show="!_paypro.caTrusted" class="ion-unlocked" style="color:red"></i>
|
||||
{{_paypro.domain}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<label translate>From</label>
|
||||
<span class="badge badge-assertive" ng-show="notAvailable" translate>No wallet with enough funds</span>
|
||||
</div>
|
||||
|
||||
<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">{{description}}</span>
|
||||
<i class="icon ion-ios-chatbubble-outline size-21"></i>
|
||||
<i class="icon ion-ios-plus-empty size-21"></i>
|
||||
</div>
|
||||
<div class="item">
|
||||
<label translate>From</label>
|
||||
<span class="badge badge-assertive" ng-show="notAvailable" translate>No wallet with enough funds</span>
|
||||
</div>
|
||||
|
||||
<button class="item button button-block button-balanced" ng-click="approve()" ng-disabled="!txp">
|
||||
<span translate>Send</span>
|
||||
</button>
|
||||
</ion-content>
|
||||
<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">{{description}}</span>
|
||||
<i class="icon ion-ios-chatbubble-outline size-21"></i>
|
||||
<i class="icon ion-ios-plus-empty size-21"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button class="item button button-block button-balanced" ng-click="approve()" ng-disabled="!txp">
|
||||
<span translate>Send</span>
|
||||
</button>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<div>
|
||||
<h1 translate>Without a backup, you could lose money</h1>
|
||||
<span translate>If something happens to this device, this app is deleted, or your password forgotten, neither you nor Bitpay can revoer your funds.</span>
|
||||
<button ng-click="goBack()" class="button button-block button-light">
|
||||
<button ng-click="goBack()" class="button button-block button-light" translate>
|
||||
Go back
|
||||
</button>
|
||||
<button ng-click="continue()" class="button button-block button-light">
|
||||
<button ng-click="continue()" class="button button-block button-light" translate>
|
||||
I understand
|
||||
</button>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<div>
|
||||
<h1 translate>Screenshots are not secure</h1>
|
||||
<span translate>if you take a screenshot, your backup may be viewed by others apps. You can make a safe backup with paper and a pen.</span>
|
||||
<button ng-click="close()" class="button button-block button-light">
|
||||
<button ng-click="close()" class="button button-block button-light" translate>
|
||||
Got it
|
||||
</button>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,41 +1,58 @@
|
|||
<span class="wallet-activity">
|
||||
|
||||
<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>Payment Sent </span>
|
||||
<div class="wallet-activity-amount">
|
||||
{{x.amountStr}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<span ng-if="x.types.indexOf('NewIncomingTx')>=0">
|
||||
<i class="icon ion-arrow-down-c size-21" ng-style="{'color':x.wallet.color}"></i>
|
||||
{{x.amountStr}}
|
||||
|
||||
<div ng-if="x.types.indexOf('NewIncomingTx')>=0">
|
||||
<span>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
|
||||
</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
|
||||
</div>
|
||||
|
||||
<div ng-if="x.types.indexOf('TxProposalRemoved') == -1 && x.types.indexOf('TxProposalRejected') == -1">
|
||||
<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 && x.types.indexOf('NewOutgoingTx')==-1">
|
||||
<i class="icon ion-checkmark-round size-21" ng-style="{'color':x.wallet.color}"></i>
|
||||
Proposal Accepted
|
||||
</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>
|
||||
|
||||
|
||||
<span 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>
|
||||
|
||||
<span 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>
|
||||
|
||||
<span ng-if="x.types.indexOf('TxProposalRemoved') == -1 && x.types.indexOf('TxProposalRejected') == -1">
|
||||
<span ng-if="x.types.indexOf('NewTxProposal')>=0 ">
|
||||
<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 ">
|
||||
<i class="icon ion-checkmark-round size-21" ng-style="{'color':x.wallet.color}"></i>
|
||||
Proposal Accepted
|
||||
</span>
|
||||
</span>
|
||||
|
||||
|
||||
<div class="item-note">
|
||||
|
||||
<!-- {{x.types}} -->
|
||||
<time>{{ x.createdOn * 1000 | amTimeAgo}}</time>
|
||||
·
|
||||
<i class="ion-briefcase" ng-style="{'color':x.wallet.color}"></i>
|
||||
<span ng-if="x.creatorName">{{ x.creatorName}}@</span>{{x.wallet.name}}
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<div class="wallets" ng-show="wallets[0]">
|
||||
<ion-slides class="slides" slider="data.slider">
|
||||
<ion-slide-page ng-repeat="wallet in wallets track by $index">
|
||||
<div class="item item-icon-left">
|
||||
<div class="item item-icon-left item-icon-right">
|
||||
<i class="icon ion-briefcase size-21" ng-style="{'color':wallet.color}"></i>
|
||||
{{wallet.name || wallet.id}}
|
||||
<span class="item-note" ng-show="wallet.n > 1 && wallet.isComplete()">
|
||||
|
|
@ -10,6 +10,7 @@
|
|||
<span class="badge badge-assertive" ng-show="!wallet.isComplete()" translate>
|
||||
Incomplete
|
||||
</span>
|
||||
<i ng-show="wallet.needsBackup" class="icon ion-android-warning assertive"></i>
|
||||
</div>
|
||||
</ion-slide-page>
|
||||
</ion-slides>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-stable">
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button no-border" ui-sref="add.main">
|
||||
<button class="button no-border" ui-sref="tabs.add">
|
||||
<i class="icon ion-chevron-left"></i> Back
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
|
|
@ -133,4 +133,3 @@
|
|||
</form>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<ion-nav-bar class="bar-stable">
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button no-border" href ui-sref="onboarding.backupRequest">
|
||||
<i class="icon ion-chevron-left"></i> Back
|
||||
<i class="icon ion-chevron-left"></i> {{'Back' | translate}}
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
<ion-view ng-controller="collectEmailController">
|
||||
<ion-nav-bar class="bar-stable">
|
||||
<ion-view>
|
||||
<ion-nav-bar class="bar-stable" ng-controller="backController">
|
||||
<ion-nav-buttons side="secondary">
|
||||
<button class="button no-border" ng-click="skip()">
|
||||
Skip
|
||||
<button class="button no-border" ng-click="onboardingMailSkip()">
|
||||
{{'Skip' | translate}}
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
<ion-content >
|
||||
Wallet Created
|
||||
Where would you like to receive email notifications about payments
|
||||
<ion-content ng-controller="collectEmailController">
|
||||
<span translate>Wallet Created </span>
|
||||
<span translate>Where would you like to receive email notifications about payments </span>
|
||||
<form name="emailForm" ng-submit="save(emailForm)" novalidate>
|
||||
<input type="email" id="email" name="email" ng-model="email" required></input>
|
||||
<input type="submit" class="button button-block button-positive" value="{{'Save'|translate}}" ng-disabled="emailForm.$invalid">
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<ion-view id="terms-of-use">
|
||||
<ion-nav-bar class="bar-light">
|
||||
<ion-nav-title>Terms of Use</ion-nav-title>
|
||||
<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-arrow-left-c"></i>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<ion-view ng-controller="tourController" ng-init="init()" class="onboarding" id="onboard-tour">
|
||||
<ion-nav-bar>
|
||||
<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()">
|
||||
|
|
@ -7,8 +7,8 @@
|
|||
</button>
|
||||
</ion-nav-buttons>
|
||||
<ion-nav-buttons side="secondary">
|
||||
<button class="button no-border" ng-show="data.index == 0" ng-click="createProfile()">
|
||||
Skip
|
||||
<button class="button no-border" ng-show="data.index == 0" ng-click="createDefaultWallet()">
|
||||
{{'Skip' | translate}}
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<ion-view id="onboard-welcome" class="onboarding">
|
||||
<ion-content>
|
||||
<ion-content ng-controller="welcomeController" ng-init="createProfile()">
|
||||
<img src="../img/onboarding-welcome-shopping24.png" id="shopping-24" />
|
||||
<div class="text-center">
|
||||
<div class="row">
|
||||
|
|
@ -16,6 +16,5 @@
|
|||
<div class="row">
|
||||
<button class="button button-block restore col col-75" translate>Restore</button>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
|
|
|
|||
|
|
@ -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}">█</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>
|
||||
|
|
@ -47,7 +47,7 @@
|
|||
<div class="item item-divider">
|
||||
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">
|
||||
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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-stable">
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button no-border" ui-sref="add.main">
|
||||
<button class="button no-border" ui-sref="tabs.add">
|
||||
<i class="icon ion-chevron-left"></i> Back
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<ion-nav-bar class="bar-stable">
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button no-border" ui-sref="add.main">
|
||||
<button class="button no-border" ui-sref="tabs.add">
|
||||
<i class="icon ion-chevron-left"></i> Back
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
</select>
|
||||
</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>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<ion-nav-bar class="bar-stable">
|
||||
<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>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<ion-nav-bar class="bar-stable">
|
||||
<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>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
|
||||
<ion-view>
|
||||
<ion-view id="tab-home">
|
||||
<ion-nav-bar class="bar-stable">
|
||||
<ion-nav-title>Home</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
|
|
@ -7,85 +6,106 @@
|
|||
<ion-content class="padding" ng-controller="tabHomeController" ng-init="updateAllWallets(); nextStep()">
|
||||
|
||||
<div class="card">
|
||||
<div class="item item-divider">
|
||||
<div class="item item-divider item-icon-right">
|
||||
Recent Activity
|
||||
<i class="icon ion-ios-arrow-right" ui-sref="activity"></i>
|
||||
</div>
|
||||
<div 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 item-icon-left" ng-repeat="x in notifications" ng-click="x.action()">
|
||||
<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 class="item" ng-show="!notifications[0]">
|
||||
<span translate>Nothing to show here.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="item item-divider item-icon-right">
|
||||
<div class="list card" ng-hide="!wallets[0]">
|
||||
<div class="item item-icon-right item-heading">
|
||||
Wallets
|
||||
<i class="icon ion-ios-plus-empty" ui-sref="add.main"></i>
|
||||
<a ui-sref="tabs.add"><i class="icon ion-ios-plus-empty list-add-button"></i></a>
|
||||
</div>
|
||||
<div class="item" ng-if="!wallets[0]">
|
||||
<span translate>No Wallet</span>
|
||||
</div>
|
||||
<a ng-repeat="item in wallets track by $index"
|
||||
class="item item-icon-left"
|
||||
ui-sref="wallet.details({'walletId': item.id})">
|
||||
<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}}
|
||||
<a ng-repeat="wallet in wallets track by $index"
|
||||
class="item item-icon-left item-big-icon-left item-icon-right"
|
||||
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>
|
||||
<h2>{{wallet.name || wallet.id}}</h2>
|
||||
<span ng-show="wallet.n > 1" class="text-light">
|
||||
{{wallet.m}}-of-{{wallet.n}}
|
||||
</span>
|
||||
<span class="badge badge-assertive" ng-show="!item.isComplete()" translate>
|
||||
<span class="badge badge-assertive" ng-show="!wallet.isComplete()" translate>
|
||||
Incomplete
|
||||
</span>
|
||||
<span class="item-note" ng-show="item.isComplete()">
|
||||
{{item.status.availableBalanceStr}}
|
||||
</span>
|
||||
<p ng-show="wallet.isComplete() && !wallet.balanceHidden">
|
||||
{{wallet.status.availableBalanceStr}}
|
||||
</p>
|
||||
<p ng-show="wallet.isComplete() && wallet.balanceHidden">
|
||||
<strong class="size-12" translate>[Balance Hidden]</strong>
|
||||
</p>
|
||||
<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">
|
||||
<i class="icon ion-card"></i>BitPay Card
|
||||
<i class="icon ion-card"></i>
|
||||
<h2>BitPay Card</h2>
|
||||
</a>
|
||||
<a ui-sref="amazon.main" ng-show="externalServices.AmazonGiftCards" class="item item-icon-left">
|
||||
<i class="icon ion-ios-cart"></i>Gift Cards
|
||||
<i class="icon ion-ios-cart"></i>
|
||||
<h2>Gift Cards</h2>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="card" ng-show="externalServices.BuyAndSell && (glideraEnabled || coinbaseEnabled)">
|
||||
<div class="item item-divider">
|
||||
<div class="list card" ng-show="externalServices.BuyAndSell && (glideraEnabled || coinbaseEnabled)">
|
||||
<div class="item item-heading">
|
||||
Buy & Sell Bitcoin
|
||||
</div>
|
||||
<a ng-show="glideraEnabled" ui-sref="glidera.main" class="item">
|
||||
<img src="img/glidera-logo.png" width="90">
|
||||
<a ng-show="glideraEnabled" ui-sref="glidera.main" class="item item-icon-right">
|
||||
<img src="img/glidera-logo.png" width="90"/>
|
||||
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<a ng-show="coinbaseEnabled" ui-sref="exchange.coinbase" class="item">
|
||||
<!-- disable coinbase for this release -->
|
||||
<!-- <a ng-show="coinbaseEnabled" ui-sref="exchange.coinbase" class="item">
|
||||
<img src="img/coinbase-logo.png" width="90"> TODO
|
||||
</a>
|
||||
</a> -->
|
||||
</div>
|
||||
|
||||
<div class="card" ng-show="!externalServices.AmazonGiftCards || !externalServices.BitpayCard || !externalServices.BuyAndSell">
|
||||
<div class="item item-divider">
|
||||
<div class="list card"
|
||||
ng-show="!externalServices.AmazonGiftCards || !externalServices.BitpayCard || !externalServices.BuyAndSell || !wallets[1]">
|
||||
<div class="item item-heading">
|
||||
Next steps
|
||||
</div>
|
||||
<a ui-sref="bitpayCard.main" ng-show="!externalServices.BitpayCard" class="item item-icon-left">
|
||||
<i class="icon ion-card"></i>Add BitPay Card
|
||||
<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>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">
|
||||
<i class="icon ion-bag"></i>Buy and Sell Bitcoin
|
||||
<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>
|
||||
<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">
|
||||
<i class="icon ion-ios-cart"></i>Buy a Gift Cards
|
||||
<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>
|
||||
<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>
|
||||
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<ion-nav-bar class="bar-stable">
|
||||
<ion-nav-bar class="bar-stable" ng-controller="backController">
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button no-border" ui-sref="add.main">
|
||||
<button class="button no-border" ng-click="importGoBack()">
|
||||
<i class="icon ion-chevron-left"></i> Back
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<ion-nav-bar class="bar-stable">
|
||||
<ion-nav-bar class="bar-stable" ng-controller="backController">
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button no-border" ui-sref="add.main">
|
||||
<button class="button no-border" ng-click="importGoBack()">
|
||||
<i class="icon ion-chevron-left"></i> Back
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<ion-nav-bar class="bar-stable">
|
||||
<ion-nav-bar class="bar-stable" ng-controller="backController">
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button no-border" ui-sref="add.main">
|
||||
<button class="button no-border" ng-click="importGoBack()">
|
||||
<i class="icon ion-chevron-left"></i> Back
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
|
|
|
|||
|
|
@ -1,42 +1,37 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-stable">
|
||||
<ion-nav-title>Receive</ion-nav-title>
|
||||
<ion-nav-bar>
|
||||
<ion-nav-title>{{'Receive' | translate}}</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content ng-controller="tabReceiveController" ng-init="init()">
|
||||
<div class="text-center m30v" copy-to-clipboard="addr" ng-show="addr">
|
||||
<qrcode size="220" data="bitcoin:{{addr}}" ng-show="addr"></qrcode>
|
||||
<div class="m30v text-center" copy-to-clipboard="addr">
|
||||
<qrcode size="220" data="bitcoin:{{addr}}"></qrcode>
|
||||
<div ng-if="wallet.needsBackup" class="assertive" translate>
|
||||
Before receiving funds, you must backup your wallet. If this device is lost, it is impossible to access your funds without a backup.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="padding assertive" ng-show="error">
|
||||
{{error|translate}}
|
||||
</div>
|
||||
|
||||
<div ng-show="generatingAddress" class="m30v">
|
||||
<div style="height:220px; width:220px; margin:auto; background: #eee; text-align:center">
|
||||
<div class="padding-top">
|
||||
<ion-spinner class="spinner-dark" icon="lines"></ion-spinner>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="list card padding text-center" ng-if="!wallets[0]">
|
||||
<span translate>No Wallet</span>
|
||||
</div>
|
||||
|
||||
<div class="list" ng-if="wallets[0]">
|
||||
<div class="item item-icon-left" ng-click="shareAddress(addr)" ng-show="isCordova && addr" ng-disabled="generatingAddress">
|
||||
<div class="item item-icon-left" ng-click="shareAddress(addr)" ng-show="isCordova && addr">
|
||||
<i class="icon ion-ios-upload-outline"></i>
|
||||
<span translate>Share address</span>
|
||||
</div>
|
||||
<div class="item item-icon-left" ng-click="setAddress(null, true)" ng-disabled="">
|
||||
<div class="item item-icon-left" ng-click="setAddress(null, true)">
|
||||
<i class="icon ion-ios-loop"></i>
|
||||
<span translate>Next Address</span>
|
||||
</div>
|
||||
<div class="item item-icon-left">
|
||||
<i class="icon ion-social-bitcoin-outline"></i>
|
||||
<span ng-show="generatingAddress">...</span>
|
||||
<span ng-show="!generatingAddress" copy-to-clipboard="addr">{{addr}}</span>
|
||||
<span ng-if="generatingAddress">...</span>
|
||||
<span ng-if="!generatingAddress" copy-to-clipboard="addr">{{addr}}</span>
|
||||
</div>
|
||||
|
||||
<wallets ng-if="wallets[0]" wallets="wallets"></wallets>
|
||||
|
|
|
|||
|
|
@ -1,16 +1,12 @@
|
|||
<ion-view>
|
||||
|
||||
<ion-nav-bar class="bar-stable">
|
||||
<ion-nav-title>Send</ion-nav-title>
|
||||
<ion-nav-bar>
|
||||
<ion-nav-title>{{'Send' | translate}}</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content ng-controller="tabSendController" ng-init="init()">
|
||||
|
||||
|
||||
<div class="card">
|
||||
<div class="item item-divider">
|
||||
Recipient
|
||||
</div>
|
||||
<div class="item item-divider" translate>Recipient</div>
|
||||
|
||||
<div class="list list-inset">
|
||||
<label class="item item-input">
|
||||
<i class="icon ion-search placeholder-icon"></i>
|
||||
|
|
@ -25,7 +21,7 @@
|
|||
|
||||
<div class="card" ng-if="list[0]">
|
||||
<div class="item item-divider item-icon-right">
|
||||
Contacts & Wallets
|
||||
<span translate>Contacts & Wallets</span>
|
||||
<i class="icon ion-person-add" ng-click="openAddressbookModal()"></i>
|
||||
</div>
|
||||
<div class="item text-center" ng-show="!list[0]" translate>No Wallet - Contact</div>
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
<div class="item item-divider">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">
|
||||
|
|
@ -77,9 +77,26 @@
|
|||
<span class="toggle-label" translate>Use Unconfirmed Funds</span>
|
||||
</ion-toggle>
|
||||
|
||||
<div class="item item-icon-left" href ui-sref="settings.about">
|
||||
<div class="list">
|
||||
<div class="item item-divider">Wallets Settings</div>
|
||||
<div ng-repeat="item in wallets track by $index">
|
||||
<div class="item item-icon-left" href ui-sref="tabs.preferences.main({'walletId': item.id})">
|
||||
<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>
|
||||
</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 Copay</span>
|
||||
<span translate>About Bitpay Wallet</span>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
|
|
|
|||
|
|
@ -3,14 +3,9 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-stable">
|
||||
<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">
|
||||
|
|
@ -44,7 +39,7 @@
|
|||
</div>
|
||||
|
||||
|
||||
<div ng-click='updateAll()' ng-show="!updateStatusError && wallet.walletScanStatus != 'error' && !shouldHideBalance" on-hold="hideToggle()">
|
||||
<div ng-click='updateAll()' ng-show="!updateStatusError && wallet.walletScanStatus != 'error' && !wallet.balanceHidden" on-hold="hideToggle()">
|
||||
<strong class="size-36">{{status.totalBalanceStr}}</strong>
|
||||
<div class="size-14" ng-if="status.totalBalanceAlternative">{{status.totalBalanceAlternative}} {{status.alternativeIsoCode}}</div>
|
||||
<div class="size-14" ng-if="status.pendingAmount">
|
||||
|
|
@ -52,7 +47,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="!updateStatusError && wallet.walletScanStatus != 'error' && shouldHideBalance" on-hold="hideToggle()">
|
||||
<div ng-show="!updateStatusError && wallet.walletScanStatus != 'error' && wallet.balanceHidden" on-hold="hideToggle()">
|
||||
<strong class="size-24" translate>[Balance Hidden]</strong>
|
||||
<div class="size-14" translate>
|
||||
Tap and hold to show
|
||||
|
|
|
|||
30
src/css/links.css
Normal file
30
src/css/links.css
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
@font-face {
|
||||
font-family: 'roboto-regular';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Roboto Regular'),
|
||||
local('Roboto-Regular'),
|
||||
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-bold';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Roboto Bold'),
|
||||
local('Roboto-Bold'),
|
||||
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-italic';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Roboto Italic'),
|
||||
local('Roboto-Italic'),
|
||||
url(../roboto-font/Roboto-Italic.ttf) format('truetype'),
|
||||
url(../roboto-font/Roboto-Italic.woff) format('woff'),
|
||||
url(../roboto-font/Roboto-Italic.woff2) format('woff2');
|
||||
}
|
||||
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,11 +1,7 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copayApp.controllers').controller('amazonController',
|
||||
function($scope, $timeout, $ionicModal, $log, lodash, bwcError, amazonService, platformInfo, nodeWebkit) {
|
||||
|
||||
if (platformInfo.isCordova && StatusBar.isVisible) {
|
||||
StatusBar.backgroundColorByHexString("#4B6178");
|
||||
}
|
||||
function($scope, $timeout, $ionicModal, $log, lodash, bwcError, amazonService, platformInfo, nodeWebkit, popupService) {
|
||||
|
||||
$scope.openExternalLink = function(url, target) {
|
||||
if (platformInfo.isNW) {
|
||||
|
|
@ -21,7 +17,7 @@ angular.module('copayApp.controllers').controller('amazonController',
|
|||
$scope.network = amazonService.getEnvironment();
|
||||
amazonService.getPendingGiftCards(function(err, gcds) {
|
||||
if (err) {
|
||||
self.error = err;
|
||||
popupService.showAlert(err);
|
||||
return;
|
||||
}
|
||||
$scope.giftCards = lodash.isEmpty(gcds) ? null : gcds;
|
||||
|
|
@ -41,7 +37,7 @@ angular.module('copayApp.controllers').controller('amazonController',
|
|||
$log.debug("creating gift card");
|
||||
amazonService.createGiftCard(dataFromStorage, function(err, giftCard) {
|
||||
if (err) {
|
||||
$log.debug(bwcError.msg(err));
|
||||
popupService.showAlert(bwcError.msg(err));
|
||||
return;
|
||||
}
|
||||
if (giftCard.status != 'PENDING') {
|
||||
|
|
@ -61,7 +57,7 @@ angular.module('copayApp.controllers').controller('amazonController',
|
|||
$log.debug("Saving new gift card");
|
||||
amazonService.getPendingGiftCards(function(err, gcds) {
|
||||
if (err) {
|
||||
self.error = err;
|
||||
popupService.showAlert(err);
|
||||
return;
|
||||
}
|
||||
$scope.giftCards = gcds;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copayApp.controllers').controller('amountController', function($rootScope, $scope, $filter, $timeout, $ionicScrollDelegate, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, txFormatService) {
|
||||
|
||||
angular.module('copayApp.controllers').controller('amountController', function($rootScope, $scope, $filter, $timeout, $ionicHistory, $ionicScrollDelegate, $ionicNavBarDelegate, gettextCatalog, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, txFormatService) {
|
||||
$ionicNavBarDelegate.title(gettextCatalog.getString('Enter Amount'));
|
||||
|
||||
var unitToSatoshi;
|
||||
var satToUnit;
|
||||
|
|
@ -63,7 +63,7 @@ angular.module('copayApp.controllers').controller('amountController', function($
|
|||
|
||||
// in SAT ALWAYS
|
||||
if ($stateParams.toAmount) {
|
||||
$scope.amount = (($stateParams.toAmount) * satToUnit).toFixed(unitDecimals) ;
|
||||
$scope.amount = (($stateParams.toAmount) * satToUnit).toFixed(unitDecimals);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -188,13 +188,9 @@ angular.module('copayApp.controllers').controller('amountController', function($
|
|||
var amount = $scope.showAlternativeAmount ? fromFiat(_amount).toFixed(unitDecimals) : _amount.toFixed(unitDecimals);
|
||||
|
||||
$state.transitionTo('send.confirm', {
|
||||
toAmount:amount * unitToSatoshi,
|
||||
toAmount: amount * unitToSatoshi,
|
||||
toAddress: $scope.toAddress,
|
||||
toName: $scope.toName,
|
||||
});
|
||||
};
|
||||
|
||||
$scope.cancel = function() {
|
||||
$state.transitionTo('tabs.send');
|
||||
};
|
||||
});
|
||||
|
|
|
|||
19
src/js/controllers/backController.js
Normal file
19
src/js/controllers/backController.js
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copayApp.controllers').controller('backController', function($scope, $state, $stateParams, platformInfo) {
|
||||
|
||||
var isCordova = platformInfo.isCordova;
|
||||
var isWP = platformInfo.isWP;
|
||||
var usePushNotifications = isCordova && !isWP;
|
||||
|
||||
$scope.importGoBack = function() {
|
||||
if ($stateParams.fromOnboarding) $state.go('onboarding.welcome');
|
||||
else $state.go('tabs.add');
|
||||
};
|
||||
|
||||
$scope.onboardingMailSkip = function() {
|
||||
if (!usePushNotifications) $state.go('onboarding.backupRequest');
|
||||
else $state.go('onboarding.notifications');
|
||||
}
|
||||
|
||||
});
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copayApp.controllers').controller('backupController',
|
||||
function($rootScope, $scope, $timeout, $log, $state, $stateParams, $ionicPopup, $ionicNavBarDelegate, uxLanguage, lodash, fingerprintService, platformInfo, configService, profileService, bwcService, walletService, ongoingProcess) {
|
||||
function($rootScope, $scope, $timeout, $log, $state, $stateParams, $ionicPopup, $ionicNavBarDelegate, uxLanguage, lodash, fingerprintService, platformInfo, configService, profileService, bwcService, walletService, ongoingProcess, storageService) {
|
||||
var wallet = profileService.getWallet($stateParams.walletId);
|
||||
$ionicNavBarDelegate.title(wallet.credentials.walletName);
|
||||
$scope.n = wallet.n;
|
||||
|
|
@ -136,7 +136,7 @@ angular.module('copayApp.controllers').controller('backupController',
|
|||
}
|
||||
}
|
||||
|
||||
$rootScope.$emit('Local/BackupDone');
|
||||
profileService.setBackupFlag(walletClient.credentials.walletId);
|
||||
return cb();
|
||||
}, 1);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copayApp.controllers').controller('buyAmazonController',
|
||||
function($rootScope, $scope, $ionicModal, $log, $timeout, $state, $ionicPopup, lodash, profileService, bwcError, gettext, configService, walletService, fingerprintService, amazonService, ongoingProcess, platformInfo, nodeWebkit) {
|
||||
function($scope, $log, $timeout, $state, lodash, profileService, bwcError, gettextCatalog, configService, walletService, amazonService, ongoingProcess, platformInfo, nodeWebkit, popupService) {
|
||||
|
||||
var self = this;
|
||||
var wallet;
|
||||
|
|
@ -33,14 +33,13 @@ angular.module('copayApp.controllers').controller('buyAmazonController',
|
|||
};
|
||||
|
||||
this.createTx = function() {
|
||||
self.error = null;
|
||||
self.errorInfo = 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;
|
||||
}
|
||||
|
||||
|
|
@ -60,20 +59,14 @@ angular.module('copayApp.controllers').controller('buyAmazonController',
|
|||
amazonService.createBitPayInvoice(dataSrc, function(err, dataInvoice) {
|
||||
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;
|
||||
}
|
||||
|
||||
amazonService.getBitPayInvoice(dataInvoice.invoiceId, function(err, invoice) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
@ -88,19 +81,16 @@ angular.module('copayApp.controllers').controller('buyAmazonController',
|
|||
$log.warn('Could not fetch payment request:', err);
|
||||
var msg = err.toString();
|
||||
if (msg.match('HTTP')) {
|
||||
msg = gettext('Could not fetch payment information');
|
||||
msg = gettextCatalog.getString('Could not fetch payment information');
|
||||
}
|
||||
self.error = msg;
|
||||
$timeout(function() {
|
||||
$scope.$digest();
|
||||
});
|
||||
popupService.showAlert(gettextCatalog.getString('Error'), msg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!paypro.verified) {
|
||||
ongoingProcess.set('Processing Transaction...', false);
|
||||
$log.warn('Failed to verify payment protocol signatures');
|
||||
self.error = gettext('Payment Protocol Invalid');
|
||||
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Payment Protocol Invalid'));
|
||||
$timeout(function() {
|
||||
$scope.$digest();
|
||||
});
|
||||
|
|
@ -133,16 +123,13 @@ angular.module('copayApp.controllers').controller('buyAmazonController',
|
|||
walletService.createTx(wallet, txp, function(err, createdTxp) {
|
||||
ongoingProcess.set('Processing Transaction...', false);
|
||||
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) {
|
||||
ongoingProcess.set('Processing Transaction...', false);
|
||||
self.error = bwcError.msg(err);
|
||||
popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err));
|
||||
walletService.removeTx(wallet, tx, function(err) {
|
||||
if (err) $log.debug(err);
|
||||
});
|
||||
|
|
@ -182,7 +169,7 @@ angular.module('copayApp.controllers').controller('buyAmazonController',
|
|||
giftCard = {};
|
||||
giftCard.status = 'FAILURE';
|
||||
ongoingProcess.set('Processing Transaction...', false);
|
||||
self.error = bwcError.msg(err);
|
||||
popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err));
|
||||
self.errorInfo = dataSrc;
|
||||
$timeout(function() {
|
||||
$scope.$digest();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copayApp.controllers').controller('confirmController', function($rootScope, $scope, $filter, $timeout, $ionicScrollDelegate, gettextCatalog, walletService, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, profileService, bitcore, $ionicPopup, txStatus, gettext, txFormatService, ongoingProcess, $ionicModal) {
|
||||
|
||||
angular.module('copayApp.controllers').controller('confirmController', function($rootScope, $scope, $filter, $timeout, $ionicScrollDelegate, $ionicNavBarDelegate, gettextCatalog, walletService, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, profileService, bitcore, $ionicPopup, txStatus, gettext, txFormatService, ongoingProcess, $ionicModal) {
|
||||
$ionicNavBarDelegate.title(gettextCatalog.getString('Confirm'));
|
||||
var cachedTxp = {};
|
||||
var isChromeApp = platformInfo.isChromeApp;
|
||||
|
||||
|
|
@ -198,7 +198,7 @@ angular.module('copayApp.controllers').controller('confirmController', function(
|
|||
$scope.$apply();
|
||||
};
|
||||
|
||||
var createTx = function(wallet, cb) {
|
||||
var createTx = function(wallet, cb) {
|
||||
var config = configService.getSync().wallet;
|
||||
var currentSpendUnconfirmed = config.spendUnconfirmed;
|
||||
var outputs = [];
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
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];
|
||||
|
|
@ -183,9 +187,7 @@ angular.module('copayApp.controllers').controller('createController',
|
|||
|
||||
|
||||
if (self.seedSourceId == 'set') {
|
||||
$timeout(function() {
|
||||
$rootScope.$emit('Local/BackupDone');
|
||||
}, 1);
|
||||
profileService.setBackupFlag(client.credentials.walletId);
|
||||
}
|
||||
$state.go('tabs.home')
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,69 +0,0 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copayApp.controllers').controller('disclaimerController',
|
||||
function($scope, $rootScope, $timeout, $log, $ionicSideMenuDelegate, profileService, applicationService, gettextCatalog, uxLanguage, $state, storageService, gettext, platformInfo, ongoingProcess) {
|
||||
var tries = 0;
|
||||
var isCordova = platformInfo.isCordova;
|
||||
|
||||
ongoingProcess.set('creatingWallet', true);
|
||||
|
||||
var create = function(opts) {
|
||||
opts = opts || {};
|
||||
$log.debug('Creating profile');
|
||||
|
||||
profileService.create(opts, function(err) {
|
||||
if (err) {
|
||||
$log.warn(err);
|
||||
$scope.error = err;
|
||||
$scope.$apply();
|
||||
|
||||
return $timeout(function() {
|
||||
$log.warn('Retrying to create profile......');
|
||||
if (tries == 3) {
|
||||
tries == 0;
|
||||
return create({
|
||||
noWallet: true
|
||||
});
|
||||
} else {
|
||||
tries += 1;
|
||||
return create();
|
||||
}
|
||||
}, 3000);
|
||||
};
|
||||
$scope.error = "";
|
||||
ongoingProcess.set('creatingWallet', false);
|
||||
});
|
||||
};
|
||||
|
||||
$scope.init = function(opts) {
|
||||
$ionicSideMenuDelegate.canDragContent(false);
|
||||
$scope.lang = uxLanguage.currentLanguage;
|
||||
|
||||
storageService.getProfile(function(err, profile) {
|
||||
if (!profile) {
|
||||
create(opts);
|
||||
} else {
|
||||
$log.info('There is already a profile');
|
||||
ongoingProcess.set('creatingWallet', false);
|
||||
profileService.bindProfile(profile, function(err) {
|
||||
if (!err || !err.message || !err.message.match('NONAGREEDDISCLAIMER')) {
|
||||
$log.debug('Disclaimer already accepted at #disclaimer. Redirect to Wallet Home.');
|
||||
$ionicSideMenuDelegate.canDragContent(true);
|
||||
$state.go('tabs.home');
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$scope.accept = function() {
|
||||
profileService.setDisclaimerAccepted(function(err) {
|
||||
if (err) $log.error(err);
|
||||
else {
|
||||
$ionicSideMenuDelegate.canDragContent(true);
|
||||
$rootScope.$emit('disclaimerAccepted');
|
||||
$state.go('tabs.home');
|
||||
}
|
||||
});
|
||||
};
|
||||
});
|
||||
|
|
@ -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;
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -15,10 +15,6 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
$scope.account = 1;
|
||||
$scope.importErr = false;
|
||||
|
||||
$scope.goBack = function() {
|
||||
$ionicHistory.goBack();
|
||||
};
|
||||
|
||||
var updateSeedSourceSelect = function() {
|
||||
$scope.seedOptions = [];
|
||||
|
||||
|
|
@ -113,7 +109,12 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
$log.debug('Remote preferences saved for:' + client.credentials.walletId)
|
||||
});
|
||||
|
||||
$rootScope.$emit('Local/WalletImported', client.credentials.walletId);
|
||||
profileService.setBackupFlag(client.credentials.walletId);
|
||||
if ($stateParams.fromOnboarding) {
|
||||
profileService.setDisclaimerAccepted(function(err) {
|
||||
if (err) $log.error(err);
|
||||
});
|
||||
}
|
||||
$state.go('tabs.home');
|
||||
});
|
||||
}, 100);
|
||||
|
|
@ -140,7 +141,12 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
$log.debug('Remote preferences saved for:' + client.credentials.walletId)
|
||||
});
|
||||
|
||||
$rootScope.$emit('Local/WalletImported', client.credentials.walletId);
|
||||
profileService.setBackupFlag(client.credentials.walletId);
|
||||
if ($stateParams.fromOnboarding) {
|
||||
profileService.setDisclaimerAccepted(function(err) {
|
||||
if (err) $log.error(err);
|
||||
});
|
||||
}
|
||||
$state.go('tabs.home');
|
||||
});
|
||||
}, 100);
|
||||
|
|
@ -160,7 +166,13 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
$scope.$apply();
|
||||
});
|
||||
}
|
||||
$rootScope.$emit('Local/WalletImported', walletId);
|
||||
|
||||
profileService.setBackupFlag(walletId);
|
||||
if ($stateParams.fromOnboarding) {
|
||||
profileService.setDisclaimerAccepted(function(err) {
|
||||
if (err) $log.error(err);
|
||||
});
|
||||
}
|
||||
$state.go('tabs.home');
|
||||
});
|
||||
}, 100);
|
||||
|
|
@ -189,7 +201,12 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
$log.debug('Remote preferences saved for:' + client.credentials.walletId)
|
||||
});
|
||||
|
||||
$rootScope.$emit('Local/WalletImported', client.credentials.walletId);
|
||||
profileService.setBackupFlag(client.credentials.walletId);
|
||||
if ($stateParams.fromOnboarding) {
|
||||
profileService.setDisclaimerAccepted(function(err) {
|
||||
if (err) $log.error(err);
|
||||
});
|
||||
}
|
||||
$state.go('tabs.home');
|
||||
});
|
||||
}, 100);
|
||||
|
|
@ -323,7 +340,13 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
walletService.updateRemotePreferences(wallet, {}, function() {
|
||||
$log.debug('Remote preferences saved for:' + wallet.walletId)
|
||||
});
|
||||
$rootScope.$emit('Local/WalletImported', wallet.walletId);
|
||||
|
||||
profileService.setBackupFlag(wallet.walletId);
|
||||
if ($stateParams.fromOnboarding) {
|
||||
profileService.setDisclaimerAccepted(function(err) {
|
||||
if (err) $log.error(err);
|
||||
});
|
||||
}
|
||||
$state.go('tabs.home');
|
||||
});
|
||||
}, 100);
|
||||
|
|
@ -400,7 +423,13 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
walletService.updateRemotePreferences(wallet, {}, function() {
|
||||
$log.debug('Remote preferences saved for:' + wallet.walletId)
|
||||
});
|
||||
$rootScope.$emit('Local/WalletImported', wallet.walletId);
|
||||
|
||||
profileService.setBackupFlag(wallet.walletId);
|
||||
if ($stateParams.fromOnboarding) {
|
||||
profileService.setDisclaimerAccepted(function(err) {
|
||||
if (err) $log.error(err);
|
||||
});
|
||||
}
|
||||
$state.go('tabs.home');
|
||||
});
|
||||
}, 100);
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue