Merge branch 'ref/design' of https://github.com/bitpay/bitpay-wallet into feature/onboarding_last_steps
This commit is contained in:
commit
a2c509092d
41 changed files with 473 additions and 658 deletions
10
Gruntfile.js
10
Gruntfile.js
|
|
@ -28,8 +28,11 @@ module.exports = function(grunt) {
|
|||
chrome: {
|
||||
command: 'make -C chrome-app '
|
||||
},
|
||||
wp: {
|
||||
command: 'make -C cordova wp',
|
||||
wpinit: {
|
||||
command: 'make -C cordova wp-init',
|
||||
},
|
||||
wpcopy: {
|
||||
command: 'make -C cordova wp-copy',
|
||||
},
|
||||
ios: {
|
||||
command: 'make -C cordova ios',
|
||||
|
|
@ -254,7 +257,8 @@ module.exports = function(grunt) {
|
|||
grunt.registerTask('osx', ['prod', 'nwjs', 'exec:osx']);
|
||||
grunt.registerTask('chrome', ['exec:chrome']);
|
||||
grunt.registerTask('wp', ['prod', 'exec:wp']);
|
||||
grunt.registerTask('wp-debug', ['default', 'exec:wp']);
|
||||
grunt.registerTask('wp-copy', ['default', 'exec:wpcopy']);
|
||||
grunt.registerTask('wp-init', ['default', 'exec:wpinit']);
|
||||
grunt.registerTask('ios', ['prod', 'exec:ios']);
|
||||
grunt.registerTask('ios-debug', ['default', 'exec:ios']);
|
||||
grunt.registerTask('ios-run', ['exec:xcode']);
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ clean:
|
|||
rm -Rf $(WORKDIR)*
|
||||
|
||||
|
||||
$(WORKDIR)android $(WORKDIR)ios $(WORKDIR)wp: config.xml
|
||||
$(WORKDIR)android $(WORKDIR)ios: config.xml
|
||||
cordova create $@ com.bitpay.*NAMENOSPACE* *NAMECASENOSPACE* || echo "Project Path Existed"
|
||||
cp ProjectMakefile $@/Makefile
|
||||
rm -r $@/www && ln -sF ../../public $@/www
|
||||
|
|
@ -27,16 +27,23 @@ android: project-android
|
|||
cp -R android/res/* $(WORKDIR)android/platforms/android/res
|
||||
make -C $(WORKDIR)android build-android
|
||||
|
||||
wp-init: config.xml
|
||||
cordova create $(WORKDIR)$@ com.bitpay.*NAMENOSPACE* *NAMECASENOSPACE* || echo "Project Path Existed"
|
||||
cp ProjectMakefile $(WORKDIR)$@/Makefile
|
||||
mkdir -p $(WORKDIR)$@/www
|
||||
cp -Rf ../public/* $(WORKDIR)$@/www
|
||||
cp config.xml $(WORKDIR)$@/config.xml
|
||||
make -C $(WORKDIR)$@ $(subst $(WORKDIR),, $(WORKDIR)$@)
|
||||
|
||||
wp: build-wp
|
||||
cp -vf wp/Properties/* $</platforms/wp8/Properties/
|
||||
cp -vf wp/MainPage.xaml $</platforms/wp8/
|
||||
cp -vf wp/Package.appxmanifest $</platforms/wp8/
|
||||
cp -vf wp/Assets/* $</platforms/wp8/Assets/
|
||||
cp -vf wp/SplashScreenImage.jpg $</platforms/wp8/
|
||||
cp -vf wp/ApplicationIcon.png $</platforms/wp8/
|
||||
cp -vf wp/Background.png $</platforms/wp8/
|
||||
cp -af ../public/** $</www
|
||||
wp-copy:
|
||||
cp -rvf wp/Properties/* $(WORKDIR)wp/platforms/wp8/Properties/
|
||||
cp -rvf wp/MainPage.xaml $(WORKDIR)wp/platforms/wp8/
|
||||
cp -rvf wp/Package.appxmanifest $(WORKDIR)wp/platforms/wp8/
|
||||
cp -rvf wp/Assets/* $(WORKDIR)wp/platforms/wp8/Assets/
|
||||
cp -rvf wp/SplashScreenImage.jpg $(WORKDIR)wp/platforms/wp8/
|
||||
cp -rvf wp/ApplicationIcon.png $(WORKDIR)wp/platforms/wp8/
|
||||
cp -rvf wp/Background.png $(WORKDIR)wp/platforms/wp8/
|
||||
cp -rvf ../public/* $(WORKDIR)wp/www
|
||||
wp/fix-svg.sh
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
.PHONY:plugins ios-platform android-platform wp-platform
|
||||
.PHONY:plugins ios-platform android-platform wp8-platform
|
||||
|
||||
plugins:
|
||||
cordova plugin add cordova-plugin-globalization
|
||||
|
|
@ -30,7 +30,7 @@ plugins:
|
|||
|
||||
|
||||
|
||||
ios-platform android-platform wp-platform:
|
||||
ios-platform android-platform wp8-platform:
|
||||
cordova platforms add $(subst -platform,,$@) || echo "Platform already added"
|
||||
|
||||
ios: ios-platform plugins
|
||||
|
|
@ -41,7 +41,7 @@ android: android-platform plugins
|
|||
cordova plugin add https://github.com/jrontend/phonegap-plugin-barcodescanner
|
||||
cordova plugin add phonegap-plugin-push@1.2.3
|
||||
|
||||
wp: wp-platform plugins
|
||||
wp: wp8-platform plugins
|
||||
cordova plugin add https://github.com/jrontend/phonegap-plugin-barcodescanner
|
||||
|
||||
build-ios build-android build-wp8:
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@
|
|||
"xcode": "^0.8.2"
|
||||
},
|
||||
"scripts": {
|
||||
"preinstall": "bower install && cd app-template && ./apply.js",
|
||||
"preinstall": "bower install && cd app-template && node apply.js",
|
||||
"postinstall": "npm run build",
|
||||
"build": "grunt",
|
||||
"start": "node app.js",
|
||||
|
|
|
|||
|
|
@ -12,17 +12,17 @@
|
|||
<ion-list>
|
||||
<a class="item item-remove-animate item-icon-right" type="item-text-wrap" ui-sref="tabs.create">
|
||||
<h2 translate>Create new wallet</h2>
|
||||
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
|
||||
<a class="item item-remove-animate item-icon-right" type="item-text-wrap" ui-sref="tabs.join">
|
||||
<h2 translate>Join shared wallet</h2>
|
||||
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
|
||||
<a class="item item-remove-animate item-icon-right" type="item-text-wrap" ui-sref="tabs.import.phrase">
|
||||
<a class="item item-remove-animate item-icon-right" type="item-text-wrap" ui-sref="tabs.import">
|
||||
<h2 translate>Import wallet</h2>
|
||||
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
</ion-list>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button back-button" ui-sref="tabs.home">
|
||||
<i class="icon ion-ios-arrow-thin-left"></i>
|
||||
<button class="button button-clear" ui-sref="tabs.home">
|
||||
Close
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
<ion-nav-title>Gift cards</ion-nav-title>
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
<div ng-if="!giftCards" class="m20t padding text-center">
|
||||
|
||||
<button class="button" ui-sref="amazon.buy">
|
||||
<button class="button button-block button-positive" ui-sref="amazon.buy">
|
||||
Buy now
|
||||
</button>
|
||||
|
||||
|
|
@ -36,12 +36,12 @@
|
|||
<a class="item item-icon-left item-icon-right" href ui-sref="amazon.buy">
|
||||
<i class="icon ion-bag"></i>
|
||||
Buy Gift Card
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="item item-divider">
|
||||
<div class="item item-heading">
|
||||
Your cards
|
||||
</div>
|
||||
<div ng-repeat="(id, item) in giftCards | orderObjectBy:'date':true track by $index"
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
ng-submit="buy.createTx()"
|
||||
novalidate>
|
||||
|
||||
<div class="list">
|
||||
<div class="card list">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">Amount</span>
|
||||
<input type="number"
|
||||
|
|
@ -53,7 +53,7 @@
|
|||
<wallets ng-if="wallets[0]" wallets="wallets"></wallets>
|
||||
</div>
|
||||
|
||||
<button class="button button-block"
|
||||
<button class="button button-block button-positive"
|
||||
ng-disabled="!fiat"
|
||||
type="submit"
|
||||
value="Buy now">
|
||||
|
|
@ -68,10 +68,8 @@
|
|||
<div class="m10t" ng-show="buy.giftCard">
|
||||
<div class="m10h" ng-show="buy.giftCard.status != 'SUCCESS' && buy.giftCard.status != 'PENDING'">
|
||||
<h1 class="text-center">Gift card could not be created</h1>
|
||||
<div class="box-notification m20b">
|
||||
<span class="text-warning">
|
||||
There was an error when trying to create the Amazon.com Gift Card. Status: {{buy.giftCard.status}}
|
||||
</span>
|
||||
<div class="box-notification error">
|
||||
There was an error when trying to create the Amazon.com Gift Card. Status: {{buy.giftCard.status}}
|
||||
</div>
|
||||
<div class="text-gray size-12 m20t">
|
||||
<span ng-show="buy.giftCard.status == 'RESEND'">
|
||||
|
|
@ -81,7 +79,7 @@
|
|||
<span ng-show="buy.giftCard.status == 'FAILURE'">
|
||||
This failure could not be recoverable. Request your refund from your list of cards
|
||||
</span>
|
||||
<button class="m20t button outline round dark-gray expand" ng-click="$root.go('amazon')">
|
||||
<button class="button button-block button-positive" ng-click="$root.go('amazon')">
|
||||
Back
|
||||
</button>
|
||||
</div>
|
||||
|
|
@ -106,13 +104,13 @@
|
|||
Claim code: <span class="text-bold" copy-to-clipboard="buy.giftCard.claimCode">{{buy.giftCard.claimCode}}</span>
|
||||
</div>
|
||||
<div class="m10t">
|
||||
<button class="button black round tiny"
|
||||
<button class="button button-positive"
|
||||
ng-click="openExternalLink('https://www.amazon.com/gc/redeem?claimCode=' + buy.giftCard.claimCode, '_system')">
|
||||
Redeem Now
|
||||
</button>
|
||||
</div>
|
||||
<div class="size-12 m10t text-center">
|
||||
<a ng-click="openExternalLink(buy.giftCard.invoiceUrl)">See invoice</a>
|
||||
<div class="m10t text-center">
|
||||
<a class="button button-clear button-calm" ng-click="openExternalLink(buy.giftCard.invoiceUrl)">See invoice</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oh m20t p15h size-12">
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
(remaining {{limits.monthlyBuyRemaining|currency:'':2}} {{limits.currency}})
|
||||
</div>
|
||||
|
||||
<div class="box-notification m20b" ng-show="limits.transactDisabledPendingFirstTransaction && !buy.success">
|
||||
<div class="box-notification warning" ng-show="limits.transactDisabledPendingFirstTransaction && !buy.success">
|
||||
<span class="text-warning">
|
||||
This operation was disabled because you have a pending first transaction
|
||||
</span>
|
||||
|
|
@ -35,7 +35,7 @@
|
|||
<form name="buyPriceForm" ng-if="token"
|
||||
ng-submit="buy.get2faCode(token)" novalidate>
|
||||
|
||||
<div class="list">
|
||||
<div class="card list">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">Amount in {{showAlternative ? 'USD' : 'BTC'}}</span>
|
||||
<input ng-show="!showAlternative"
|
||||
|
|
@ -83,7 +83,7 @@
|
|||
...
|
||||
</div>
|
||||
|
||||
<button class="button button-block"
|
||||
<button class="button button-block button-positive"
|
||||
type="submit"
|
||||
ng-disabled="limits.transactDisabledPendingFirstTransaction || !buy.buyPrice.qty || buy.loading">
|
||||
Continue
|
||||
|
|
@ -99,12 +99,12 @@
|
|||
</p>
|
||||
<form name="buyForm"
|
||||
ng-submit="buy.sendRequest(token, permissions, twoFaCode)" novalidate>
|
||||
<div class="list">
|
||||
<div class="card list">
|
||||
<label class="item item-input">
|
||||
<input type="number" ng-model="twoFaCode" placeholder="2FA Code" required ignore-mouse-wheel>
|
||||
</label>
|
||||
</div>
|
||||
<button class="button button-block"
|
||||
<button class="button button-block button-positive"
|
||||
type="submit" ng-disabled="buyForm.$invalid || buy.loading">
|
||||
Buy
|
||||
</button>
|
||||
|
|
@ -120,7 +120,7 @@
|
|||
A transfer has been initiated from your bank account. Your bitcoins should arrive to your wallet in 2-4 business days.
|
||||
</p>
|
||||
|
||||
<button class="button button-block" ui-sref="glidera.main">OK</button>
|
||||
<button class="button button-block button-positive" ui-sref="glidera.main">OK</button>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
|
|
|
|||
|
|
@ -1,15 +1,12 @@
|
|||
|
||||
<ion-view ng-controller="copayersController">
|
||||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{wallet.name}}</ion-nav-title>
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button back-button" ui-sref="tabs.home">
|
||||
<i class="icon ion-ios-arrow-thin-left"></i>
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
<ion-nav-back-button>
|
||||
<i class="icon ion-ios-arrow-thin-left"></i>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content delegate-handle="my-handle" overflow-scroll="true">
|
||||
<ion-content ng-controller="copayersController">
|
||||
<div ng-show="!wallet.notAuthorized">
|
||||
<h1 class="text-center" translate>Share this invitation with your copayers</h1>
|
||||
|
||||
|
|
@ -43,14 +40,14 @@
|
|||
[ <span translate>{{wallet.m}}-of-{{wallet.n}}</span> ]
|
||||
</span>
|
||||
</h4>
|
||||
<div class="white line-b p10" ng-include="'views/includes/copayers.html'"></div>
|
||||
<div ng-include="'views/includes/copayers.html'"></div>
|
||||
<div ng-if="!wallet.isComplete()" class="line-b p10 white size-12">
|
||||
<i class="fi-loop m5r p10l"></i>
|
||||
<i class="icon ion-loop"></i>
|
||||
<span translate>Waiting...</span>
|
||||
</div>
|
||||
|
||||
<div ng-if="wallet.isComplete()" class="line-b p10 white size-12" href>
|
||||
<button class="button" href ui-sref="tabs.home">
|
||||
<button class="button" href ui-sref="tabs.home">
|
||||
<span translate>WALLET COMPLETE!</span>
|
||||
</button>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button back-button" ui-sref="tabs.home">
|
||||
<i class="icon ion-ios-arrow-thin-left"></i>
|
||||
<button class="button button-clear" ui-sref="tabs.home">
|
||||
Close
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
<ion-nav-title>Glidera</ion-nav-title>
|
||||
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
<p class="m20t text-gray size-12">Connect your Glidera account to get started</p>
|
||||
|
||||
<button class="button"
|
||||
<button class="button button-block button-positive"
|
||||
ng-click="openExternalLink(glidera.getAuthenticateUrl(), '_system'); showOauthForm = true">
|
||||
Connect to Glidera
|
||||
</button>
|
||||
|
|
@ -51,7 +51,7 @@
|
|||
</div>
|
||||
<div ng-show="showOauthForm">
|
||||
<form name="oauthCodeForm" ng-submit="glidera.submitOauthCode(code)" novalidate>
|
||||
<div class="list">
|
||||
<div class="card list">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">OAuth Code</span>
|
||||
<input type="text"
|
||||
|
|
@ -63,12 +63,12 @@
|
|||
<div class="col">
|
||||
<input type="button"
|
||||
value="Cancel"
|
||||
class="button button-block"
|
||||
class="button button-block button-light"
|
||||
ng-click="showOauthForm = false">
|
||||
</div>
|
||||
<div class="col">
|
||||
<input
|
||||
class="button button-block"
|
||||
class="button button-block button-positive"
|
||||
type="submit"
|
||||
value="Get started"
|
||||
ng-disabled="oauthCodeForm.$invalid">
|
||||
|
|
@ -90,7 +90,7 @@
|
|||
<span class="item-note" ng-show="email">
|
||||
{{email}}
|
||||
</span>
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
<div class="padding">
|
||||
|
|
@ -113,21 +113,21 @@
|
|||
<a ng-show="status.userCanBuy"
|
||||
class="item item-icon-right"
|
||||
href ui-sref="glidera.buy">
|
||||
<img src="img/buy-bitcoin.svg" alt="buy bitcoin" width="25">
|
||||
<img src="img/buy-bitcoin.svg" alt="buy bitcoin" width="35">
|
||||
Buy Bitcoin
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<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="25">
|
||||
<img src="img/sell-bitcoin.svg" alt="buy bitcoin" width="35">
|
||||
Sell Bitcoin
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="card" ng-show="permissions.transaction_history">
|
||||
<div class="item item-divider">
|
||||
<div class="list card" ng-show="permissions.transaction_history">
|
||||
<div class="item item-heading">
|
||||
Activity
|
||||
</div>
|
||||
<div ng-show="txs.length == 0 "
|
||||
|
|
|
|||
|
|
@ -1,33 +1,26 @@
|
|||
<ion-view ng-controller="tabsController" ng-init="importInit()">
|
||||
<ion-tabs class="tabs-striped tabs-color-positive tabs-color-active-positive tabs-top">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Import Wallet' | translate}}</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
<i class="icon ion-ios-arrow-thin-left"></i>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
|
||||
<div ng-if="!fromOnboarding">
|
||||
<ion-tab title="Recovery Phrase" ui-sref="tabs.import.phrase">
|
||||
<ion-nav-view name="tab-import-phrase"></ion-nav-view>
|
||||
</ion-tab>
|
||||
|
||||
<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="tabs.import.hardware">
|
||||
<ion-nav-view name="tab-import-hardware"></ion-nav-view>
|
||||
</ion-tab>
|
||||
<ion-content ng-controller="importController" ng-init="phrase = true; init()">
|
||||
<div class="row text-center">
|
||||
<div class="col" ng-click="phrase = true; file = hardware = false" ng-style="phrase && {'border-bottom': '2px solid'}">
|
||||
<span translate>Recovery phrase</span>
|
||||
</div>
|
||||
<div class="col" ng-click="file = true; phrase = hardware = false" ng-style="file && {'border-bottom': '2px solid'}">
|
||||
<span translate>File/Text</span>
|
||||
</div>
|
||||
<div class="col" ng-click="hardware = true; phrase = file = false" ng-style="hardware && {'border-bottom': '2px solid'}">
|
||||
<span translate>Hardware wallet</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="fromOnboarding">
|
||||
<ion-tab title="Recovery Phrase" ui-sref="onboarding.import.phrase">
|
||||
<ion-nav-view name="tab-import-phrase"></ion-nav-view>
|
||||
</ion-tab>
|
||||
|
||||
<ion-tab title="File/Text" ui-sref="onboarding.import.file">
|
||||
<ion-nav-view name="tab-import-file"></ion-nav-view>
|
||||
</ion-tab>
|
||||
|
||||
<ion-tab title="Hardware Wallet" ui-sref="onboarding.import.hardware">
|
||||
<ion-nav-view name="tab-import-hardware"></ion-nav-view>
|
||||
</ion-tab>
|
||||
</div>
|
||||
|
||||
</ion-tabs>
|
||||
<div ng-include="'views/tab-import-phrase.html'" ng-if="phrase"></div>
|
||||
<div ng-include="'views/tab-import-file.html'" ng-if="file"></div>
|
||||
<div ng-include="'views/tab-import-hardware.html'" ng-if="hardware"></div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
<ul class="no-bullet m0">
|
||||
<li class="" ng-repeat="copayer in index.copayers">
|
||||
<span class="size-12" ng-show="copayer.id == index.copayerId">
|
||||
<i class="fi-check m5r"></i> {{'Me'|translate}}
|
||||
<div ng-repeat="copayer in copayers">
|
||||
<span class="item size-12" ng-show="copayer.id == wallet.copayerId">
|
||||
<i class="icon ion-checkmark"></i> {{'Me'|translate}}
|
||||
</span>
|
||||
<span class="size-12 text-gray" ng-show="copayer.id != index.copayerId">
|
||||
<i class="fi-check m5r"></i> {{copayer.name}}
|
||||
<span class="item size-12 text-gray" ng-show="copayer.id != wallet.copayerId">
|
||||
<i class="icon ion-checkmark"></i> {{copayer.name}}
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
|
||||
<div class="wallet-activity" ng-class="{'wallet-activity-not-pending':!tx.pendingForUs}">
|
||||
<div class="wallet-activity-amount">
|
||||
{{tx.amountStr}}
|
||||
</div>
|
||||
<span ng-show="!tx.merchant">
|
||||
<span ng-show="addressbook[tx.toAddress] && !tx.message">
|
||||
{{addressbook[tx.toAddress]}}
|
||||
|
|
@ -18,11 +21,6 @@
|
|||
<span>
|
||||
</span>
|
||||
|
||||
<div class="wallet-activity-amount">
|
||||
{{tx.amountStr}}
|
||||
</div>
|
||||
|
||||
|
||||
<p class="wallet-activity-note">
|
||||
<i class="icon ion-record wallet-activity-note-child" ng-style="{'color':tx.wallet.color}"></i>
|
||||
<span class="wallet-activity-note-child">{{tx.wallet.name}}</span>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<ion-modal-view ng-controller="amazonCardDetailsController">
|
||||
<ion-header-bar align-title="center" class="tab-bar">
|
||||
<button class="button button-clear button-positive"
|
||||
ng-click="cancel()">
|
||||
<ion-header-bar align-title="center" class="bar-royal">
|
||||
<button class="button button-clear" ng-click="cancel()">
|
||||
Close
|
||||
</button>
|
||||
<h1 class="title">Details</h1>
|
||||
|
|
@ -23,7 +22,7 @@
|
|||
Claim code: <span class="text-bold" copy-to-clipboard="card.claimCode">{{card.claimCode}}</span>
|
||||
</div>
|
||||
<div class="m10t" ng-show="card.cardStatus == 'Fulfilled'">
|
||||
<button class="button black round tiny"
|
||||
<button class="button button-positive"
|
||||
ng-click="openExternalLink('https://www.amazon.com/gc/redeem?claimCode=' + card.claimCode, '_system')">
|
||||
Redeem Now
|
||||
</button>
|
||||
|
|
@ -48,18 +47,12 @@
|
|||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="size-12 m10t text-center">
|
||||
<a ng-click="openExternalLink(card.invoiceUrl)">See invoice</a>
|
||||
<div class="m10t text-center">
|
||||
<a class="button button-clear button-calm" ng-click="openExternalLink(card.invoiceUrl)">See invoice</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="box-notification m20b" ng-show="error" ng-click="error = null">
|
||||
<span class="text-warning">
|
||||
{{error}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="text-center size-12 text-warning m10" ng-show="card.status == 'FAILURE' || card.status == 'RESEND'">
|
||||
<div class="box-notification warning" ng-show="card.status == 'FAILURE' || card.status == 'RESEND'">
|
||||
There was a failure to the create gift card. Please, contact BitPay support.
|
||||
</div>
|
||||
|
||||
|
|
@ -86,7 +79,7 @@
|
|||
|
||||
</div>
|
||||
|
||||
<div class="size-12 white p15 m30v">
|
||||
<div class="size-12 p15 m30v">
|
||||
* <a ng-click="openExternalLink('http://amazon.com')">Amazon.com</a> is not a sponsor of this promotion.
|
||||
Except as required by law, <a ng-click="openExternalLink('http://amazon.com')">Amazon.com</a>
|
||||
Gift Cards ("GCs") cannot be transferred for value or redeemed for cash. GCs may be used only for purchases of
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<ion-modal-view ng-controller="glideraTxDetailsController">
|
||||
<ion-header-bar align-title="center" class="bar-royal">
|
||||
<button class="button button-clear button-positive"
|
||||
<button class="button button-clear"
|
||||
ng-click="cancel()">
|
||||
Close
|
||||
</button>
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
<ion-content ng-controller="termsController" ng-init="accept = false;">
|
||||
<div ng-include="'views/includes/terms.html'"></div>
|
||||
<div class="padding-vertical" ng-show="lang != 'en'">
|
||||
<a ng-click="openExternalLink('https://copay.io/disclaimer')" translate>Official English Disclaimer</a>
|
||||
<a ng-click="openExternalLink(disclaimerUrl)" translate>Official English Disclaimer</a>
|
||||
</div>
|
||||
<div id="agree-to-terms">
|
||||
<ion-checkbox ng-model="accept"></ion-checkbox>
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
<button class="button button-block get-started col col-75" href ui-sref="onboarding.tour" translate>Get started</button>
|
||||
</div>
|
||||
<div class="row">
|
||||
<button class="button button-block restore col col-75" translate href ui-sref="onboarding.import.phrase({'fromOnboarding':true})">Restore</button>
|
||||
<button class="button button-block restore col col-75" translate href ui-sref="onboarding.import({'fromOnboarding':true})">Restore</button>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
|
|
|
|||
|
|
@ -7,41 +7,41 @@
|
|||
<ion-content ng-controller="preferencesController" ng-init="init()">
|
||||
<div class="list">
|
||||
<div class="item item-divider"></div>
|
||||
<div class="item item-icon-right" href ui-sref="tabs.preferences.preferencesAlias">
|
||||
<a class="item item-icon-right" ui-sref="tabs.preferences.preferencesAlias">
|
||||
<span translate>Name</span>
|
||||
<span class="item-note">
|
||||
{{wallet.name}}
|
||||
</span>
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
</div>
|
||||
<div class="item" ng-show="wallet.isPrivKeyExternal()">
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item" ng-show="wallet.isPrivKeyExternal()">
|
||||
<span translate>Hardware Wallet</span>
|
||||
<span class="item-note">
|
||||
{{wallet.externalSource}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="item item-icon-right" href ui-sref="tabs.preferences.preferencesColor">
|
||||
<a class="item item-icon-right" ui-sref="tabs.preferences.preferencesColor">
|
||||
<span translate>Color</span>
|
||||
<span class="item-note" ng-style="{'color': wallet.color}">
|
||||
█
|
||||
</span>
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
</div>
|
||||
<div class="item item-icon-right" href ui-sref="tabs.preferences.preferencesEmail">
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item item-icon-right" ui-sref="tabs.preferences.preferencesEmail">
|
||||
<span translate>Email Notifications</span>
|
||||
<span class="item-note">
|
||||
<span ng-if="!wallet.email" translate>Disabled</span>
|
||||
<span ng-if="wallet.email">{{wallet.email}}</span>
|
||||
</span>
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
</div>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<div class="item item-divider" translate>
|
||||
Security
|
||||
</div>
|
||||
<div class="item item-icon-right" href ui-sref="tabs.preferences.backup" ng-hide="wallet.isPrivKeyExternal()">
|
||||
<a class="item item-icon-right" ui-sref="tabs.preferences.backup" ng-hide="wallet.isPrivKeyExternal()">
|
||||
<span translate>Backup</span>
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
</div>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<div ng-show="wallet.canSign()">
|
||||
<ion-toggle ng-model="encryptEnabled" toggle-class="toggle-balanced" ng-change="encryptChange()">
|
||||
<span class="toggle-label" translate>Request Spending Password</span>
|
||||
|
|
@ -52,15 +52,15 @@
|
|||
<span class="toggle-label" translate>Request Fingerprint</span>
|
||||
</ion-toggle>
|
||||
</div>
|
||||
<div class="item item-icon-right" href ui-sref="tabs.preferences.deleteWords" ng-show ="!deleted">
|
||||
<a class="item item-icon-right" ui-sref="tabs.preferences.deleteWords" ng-show ="!deleted">
|
||||
<span translate>Delete recovery phrase</span>
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
</div>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<div class="item item-divider"></div>
|
||||
<div class="item item-icon-right" href ui-sref="tabs.preferences.preferencesAdvanced">
|
||||
<a class="item item-icon-right" ui-sref="tabs.preferences.preferencesAdvanced">
|
||||
<span translate>Advanced</span>
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
</div>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
|
|
|
|||
|
|
@ -27,21 +27,21 @@
|
|||
</div>
|
||||
<div class="item item-divider">
|
||||
</div>
|
||||
<div class="item item-icon-left item-icon-right" href ui-sref="tabs.termsOfUse">
|
||||
<a class="item item-icon-left item-icon-right" ui-sref="tabs.termsOfUse">
|
||||
<i class="icon ion-ios-list-outline"></i>
|
||||
<span translate>Terms of Use</span>
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
</div>
|
||||
<div class="item item-icon-left item-icon-right" href ui-sref="tabs.translators">
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item item-icon-left item-icon-right" ui-sref="tabs.translators">
|
||||
<i class="icon ion-ios-people-outline"></i>
|
||||
<span translate>Translators</span>
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
</div>
|
||||
<div class="item item-icon-left item-icon-right" href ui-sref="tabs.logs">
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item item-icon-left item-icon-right" ui-sref="tabs.logs">
|
||||
<i class="icon ion-ios-copy-outline"></i>
|
||||
<span translate>Session log</span>
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
</div>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
|
|
|
|||
|
|
@ -9,30 +9,30 @@
|
|||
<div class="list">
|
||||
<div class="item item-divider">
|
||||
</div>
|
||||
<div class="item item-icon-right" href ui-sref="tabs.preferences.information">
|
||||
<a class="item item-icon-right" 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="tabs.preferences.paperWallet">
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item item-icon-right" ng-show="index.network == 'livenet'" 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="tabs.preferences.export.file">
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item item-icon-right" 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="tabs.preferences.preferencesBwsUrl">
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item item-icon-right" 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="tabs.preferences.preferencesHistory">
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item item-icon-right" 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="tabs.preferences.delete">
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item item-icon-right" ui-sref="tabs.preferences.delete">
|
||||
<span translate>Delete Wallet</span>
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
</div>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
|
|
|
|||
|
|
@ -10,7 +10,8 @@
|
|||
|
||||
<ion-content ng-controller="preferencesGlideraController" ng-init="init()">
|
||||
|
||||
<ul ng-if="token" class="list">
|
||||
<ul class="list">
|
||||
<div ng-if="token">
|
||||
<div class="item item-divider">
|
||||
Permissions
|
||||
</div>
|
||||
|
|
@ -38,10 +39,9 @@
|
|||
{{permissions.transaction_history}}
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<ul ng-if="permissions.view_email_address"
|
||||
class="list">
|
||||
<div ng-if="permissions.view_email_address">
|
||||
<div class="item item-divider">
|
||||
Email
|
||||
</div>
|
||||
|
|
@ -57,10 +57,9 @@
|
|||
{{email.userEmailIsSetup}}
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<ul ng-if="permissions.personal_info"
|
||||
class="list">
|
||||
<div ng-if="permissions.personal_info">
|
||||
<div class="item item-divider">
|
||||
Personal Information
|
||||
</div>
|
||||
|
|
@ -137,10 +136,9 @@
|
|||
{{personalInfo.basicInfoState}}
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<ul ng-if="token"
|
||||
class="list">
|
||||
<div ng-if="token">
|
||||
<div class="item item-divider">
|
||||
Status
|
||||
</div>
|
||||
|
|
@ -200,10 +198,9 @@
|
|||
{{status.country}}
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<ul ng-if="token"
|
||||
class="list">
|
||||
<div ng-if="token">
|
||||
<div class="item item-divider">
|
||||
Limits
|
||||
</div>
|
||||
|
|
@ -262,9 +259,8 @@
|
|||
{{limits.transactDisabledPendingFirstTransaction}}
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<ul class="list">
|
||||
<div class="item item-divider">
|
||||
Account
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
<form name="sellPriceForm" ng-if="token"
|
||||
ng-submit="sell.get2faCode(token)" novalidate>
|
||||
|
||||
<div class="list">
|
||||
<div class="card list">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label"><span>Amount in</span> {{showAlternative ? 'USD' : 'BTC'}}</span>
|
||||
<input ng-show="!showAlternative"
|
||||
|
|
@ -83,7 +83,7 @@
|
|||
...
|
||||
</div>
|
||||
|
||||
<button class="button button-block"
|
||||
<button class="button button-block button-positive"
|
||||
type="submit"
|
||||
ng-disabled="limits.transactDisabledPendingFirstTransaction || !sell.sellPrice.qty">
|
||||
Continue
|
||||
|
|
@ -99,12 +99,12 @@
|
|||
</p>
|
||||
<form name="sellForm"
|
||||
ng-submit="sell.createTx(token, permissions, twoFaCode)" novalidate>
|
||||
<div class="list">
|
||||
<div class="card list">
|
||||
<label class="item item-input">
|
||||
<input type="number" ng-model="twoFaCode" placeholder="2FA Code" required ignore-mouse-wheel>
|
||||
</label>
|
||||
</div>
|
||||
<button class="button button-block"
|
||||
<button class="button button-block button-positive"
|
||||
type="submit"
|
||||
ng-disabled="sellForm.$invalid ">
|
||||
Sell
|
||||
|
|
@ -121,7 +121,7 @@
|
|||
A transfer has been initiated to your bank account and should arrive in 4-6 business days.
|
||||
</p>
|
||||
|
||||
<button class="button button-block" ui-sref="glidera.main">OK</button>
|
||||
<button class="button button-block button-positive" ui-sref="glidera.main">OK</button>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
<div class="list card" ng-hide="!txps[0]">
|
||||
<a class="item item-icon-right item-heading" ui-sref="tabs.proposals" translate>
|
||||
Payment Proposals
|
||||
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
|
||||
<span class="badge badge-assertive" ng-show="txpsN>3" translate> {{txpsN}}</span>
|
||||
</a>
|
||||
|
|
@ -22,7 +22,7 @@
|
|||
<div class="list card">
|
||||
<a class="item item-icon-right item-heading" ui-sref="tabs.activity" translate>
|
||||
Recent Activity
|
||||
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<span ng-if="fetchingNotifications" class="item text-center">
|
||||
<ion-spinner icon="lines"></ion-spinner>
|
||||
|
|
@ -40,7 +40,7 @@
|
|||
</div>
|
||||
<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})">
|
||||
ng-click="openWallet(wallet)">
|
||||
<i class="icon big-icon-svg">
|
||||
<img src="img/icon-wallet.svg" ng-style="{'background-color': wallet.color}"/>
|
||||
</i>
|
||||
|
|
@ -57,7 +57,7 @@
|
|||
<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>
|
||||
<i class="icon 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>
|
||||
|
|
@ -73,9 +73,8 @@
|
|||
<div class="item item-heading" translate>
|
||||
Buy & Sell Bitcoin
|
||||
</div>
|
||||
<a ng-show="glideraEnabled" ui-sref="glidera.main" class="item item-icon-right">
|
||||
<a ng-show="glideraEnabled" ui-sref="glidera.main" class="item">
|
||||
<img src="img/glidera-logo.png" width="90"/>
|
||||
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<!-- disable coinbase for this release -->
|
||||
<!-- <a ng-show="coinbaseEnabled" ui-sref="exchange.coinbase" class="item">
|
||||
|
|
@ -93,28 +92,28 @@
|
|||
<img class="icon-create-wallet"/>
|
||||
</i>
|
||||
<span translate>Create a bitcoin wallet</span>
|
||||
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<a ng-show="!externalServices.BuyAndSell" ui-sref="buyandsell" class="item item-icon-left item-big-icon-left item-icon-right">
|
||||
<i class="icon big-icon-svg">
|
||||
<img class="icon-buy-bitcoin"/>
|
||||
</i>
|
||||
<span translate>Buy Bitcoin</span>
|
||||
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<a ui-sref="bitpayCard.main" ng-show="!externalServices.BitpayCard" class="item item-icon-left item-big-icon-left item-icon-right">
|
||||
<i class="icon big-icon-svg">
|
||||
<img class="icon-bitpay-card"/>
|
||||
</i>
|
||||
<span translate>Add BitPay Card</span>
|
||||
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
|
||||
<i class="icon 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 translate>Add Amazon Gift Card</span>
|
||||
<i class="icon ion-ios-arrow-right nav-item-arrow-right"></i>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,61 +1,40 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal" ng-controller="backController">
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button back-button" ng-click="importGoBack()">
|
||||
<i class="icon ion-ios-arrow-thin-left"></i>
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
<ion-nav-title>{{'Import wallet' | translate}}</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content ng-controller="importController" ng-init="type='file'">
|
||||
|
||||
<form name="importForm" ng-submit="importBlob(importForm)" novalidate>
|
||||
|
||||
<div class="list card">
|
||||
|
||||
<label class="item item-input item-stacked-label no-border" ng-show="!isSafari && !isCordova">
|
||||
<div class="input-label" translate>Choose a backup file from your computer</div>
|
||||
<div>
|
||||
<input type="file"
|
||||
placeholder="{{'Select a backup file'|translate}}"
|
||||
name="backupFile"
|
||||
ng-model="backupFile" ng-file-select>
|
||||
</div>
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label" ng-show="isSafari || isCordova">
|
||||
<span class="input-label" translate>Paste the backup plain text code</span>
|
||||
<textarea name="backupText" ng-model="backupText" rows="5"></textarea>
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" translate>Password</span>
|
||||
<input type="password"
|
||||
placeholder="{{'Your password'|translate}}"
|
||||
name="password"
|
||||
ng-model="password">
|
||||
</label>
|
||||
|
||||
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable">
|
||||
<span translate ng-show="!showAdv">Show advanced options</span>
|
||||
<span translate ng-show="showAdv">Hide advanced options</span>
|
||||
</ion-toggle>
|
||||
|
||||
<div ng-show="showAdv">
|
||||
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">Wallet Service URL</span>
|
||||
<input type="text" id="bwsurl" name="bwsurl" ng-model="bwsurl">
|
||||
</label>
|
||||
|
||||
</div>
|
||||
<form name="importForm" ng-submit="importBlob(importForm)" novalidate>
|
||||
<div class="list card">
|
||||
<label class="item item-input item-stacked-label no-border" ng-show="!isSafari && !isCordova">
|
||||
<div class="input-label" translate>Choose a backup file from your computer</div>
|
||||
<div>
|
||||
<input type="file"
|
||||
placeholder="{{'Select a backup file'|translate}}"
|
||||
ng-model="formData.backupFile" ng-file-select>
|
||||
</div>
|
||||
</label>
|
||||
|
||||
<button type="submit" class="button button-block button-positive" ng-disabled="importForm.$invalid || !password " translate>
|
||||
Import backup
|
||||
</button>
|
||||
</form>
|
||||
<label class="item item-input item-stacked-label" ng-show="isSafari || isCordova">
|
||||
<span class="input-label" translate>Paste the backup plain text code</span>
|
||||
<textarea ng-model="formData.backupText" rows="5"></textarea>
|
||||
</label>
|
||||
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" translate>Password</span>
|
||||
<input type="password"
|
||||
placeholder="{{'Your password'|translate}}"
|
||||
ng-model="formData.password">
|
||||
</label>
|
||||
|
||||
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable">
|
||||
<span translate ng-show="!showAdv">Show advanced options</span>
|
||||
<span translate ng-show="showAdv">Hide advanced options</span>
|
||||
</ion-toggle>
|
||||
|
||||
<div ng-show="showAdv">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">Wallet Service URL</span>
|
||||
<input type="text" ng-model="formData.bwsurl">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="button button-block button-positive" ng-disabled="importForm.$invalid || !formData.password" translate>
|
||||
Import backup
|
||||
</button>
|
||||
</form>
|
||||
|
|
|
|||
|
|
@ -1,69 +1,44 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal" ng-controller="backController">
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button back-button" ng-click="importGoBack()">
|
||||
<i class="icon ion-ios-arrow-thin-left"></i>
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
<ion-nav-title>{{'Import wallet' | translate}}</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
<form name="importForm3" ng-submit="importHW(importForm3)" novalidate>
|
||||
<div class="card" ng-show="!seedOptions[0]">
|
||||
<div class="item item-text-wrap" translate>
|
||||
No hardware wallets supported on this device
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ion-content ng-controller="importController" ng-init="type='hwWallet'">
|
||||
|
||||
<form name="importForm3" ng-submit="importHW(importForm3)" novalidate>
|
||||
|
||||
<div class="card" ng-show="!seedOptions[0]">
|
||||
<div class="item item-text-wrap" translate>
|
||||
No hardware wallets supported on this device
|
||||
<div ng-show="seedOptions[0]">
|
||||
<div class="card list">
|
||||
<label class="item item-input item-select">
|
||||
<div class="input-label" translate>
|
||||
Wallet Type
|
||||
</div>
|
||||
|
||||
<select ng-model="seedSource" ng-options="seed as seed.label for seed in seedOptions"></select>
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label" ng-show="seedSource.id == 'trezor' || seedSource.id == 'ledger'">
|
||||
<span class="input-label" translate>Account Number</span>
|
||||
<input type="number" ng-model="formData.account" ignore-mouse-wheel>
|
||||
</label>
|
||||
|
||||
<ion-toggle ng-show="seedSource.id == 'trezor'" ng-model="formData.isMultisig" toggle-class="toggle-positive">
|
||||
<span translate>Shared Wallet</span>
|
||||
</ion-toggle>
|
||||
|
||||
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable">
|
||||
<span translate ng-show="!showAdv">Show advanced options</span>
|
||||
<span translate ng-show="showAdv">Hide advanced options</span>
|
||||
</ion-toggle>
|
||||
|
||||
<div ng-show="showAdv">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">Wallet Service URL</span>
|
||||
<input type="text" ng-model="formData.bwsurl">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="seedOptions[0]">
|
||||
<div class="card list">
|
||||
|
||||
<label class="item item-input item-select">
|
||||
<div class="input-label" translate>
|
||||
Wallet Type
|
||||
</div>
|
||||
<select ng-model="seedSource"
|
||||
ng-options="seed as seed.label for seed in seedOptions"
|
||||
ng-change="setSeedSource()">
|
||||
</select>
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label"
|
||||
ng-show="seedSourceId == 'trezor' || seedSourceId == 'ledger'">
|
||||
<span class="input-label" translate>Account Number</span>
|
||||
<input type="number" id="account" ng-model="account" ignore-mouse-wheel>
|
||||
</label>
|
||||
|
||||
<ion-toggle ng-show="seedSourceId == 'trezor'"
|
||||
ng-model="isMultisig"
|
||||
toggle-class="toggle-positive">
|
||||
<span translate>Shared Wallet</span>
|
||||
</ion-toggle>
|
||||
|
||||
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable">
|
||||
<span translate ng-show="!showAdv">Show advanced options</span>
|
||||
<span translate ng-show="showAdv">Hide advanced options</span>
|
||||
</ion-toggle>
|
||||
|
||||
<div ng-show="showAdv">
|
||||
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">Wallet Service URL</span>
|
||||
<input type="text" id="bwsurl" name="bwsurl" ng-model="bwsurl">
|
||||
</label>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button translate type="submit" class="button button-block button-positive">
|
||||
Import
|
||||
</button>
|
||||
</div> <!-- seedoptions show -->
|
||||
|
||||
</form>
|
||||
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
<button translate type="submit" class="button button-block button-positive">
|
||||
Import
|
||||
</button>
|
||||
</div> <!-- seedoptions show -->
|
||||
</form>
|
||||
|
|
|
|||
|
|
@ -1,84 +1,66 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal" ng-controller="backController">
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button back-button" ng-click="importGoBack()">
|
||||
<i class="icon ion-ios-arrow-thin-left"></i>
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
<ion-nav-title>Import wallet</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
<div ng-show="importErr" class="padding assertive" ng-click="importErr = null">
|
||||
<div translate>Could not access the wallet at the server. Please check:</div>
|
||||
<ul>
|
||||
<li translate>The password of the recovery phrase (if set)</li>
|
||||
<li translate>The derivation path</li>
|
||||
<li translate>The wallet service URL</li>
|
||||
</ul>
|
||||
<div translate>
|
||||
NOTE: To import a wallet from a 3rd party software, please go to Add Wallet > Create Wallet, and specify the Recovery Phrase there.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ion-content ng-controller="importController" ng-init="type='12'">
|
||||
|
||||
<div ng-show="importErr" class="padding assertive" ng-click="importErr = null">
|
||||
<div translate>Could not access the wallet at the server. Please check:</div>
|
||||
<ul>
|
||||
<li translate>The password of the recovery phrase (if set)</li>
|
||||
<li translate>The derivation path</li>
|
||||
<li translate>The wallet service URL</li>
|
||||
</ul>
|
||||
<div translate>
|
||||
NOTE: To import a wallet from a 3rd party software, please go to Add Wallet > Create Wallet, and specify the Recovery Phrase there.
|
||||
<form name="importForm12" ng-submit="importMnemonic(importForm12)" novalidate>
|
||||
<div class="list card">
|
||||
<div class="row">
|
||||
<div class="col col-90">
|
||||
<label class="item item-input item-stacked-label no-border">
|
||||
<span class="input-label" translate>Type the Recovery Phrase (usually 12 words)</span>
|
||||
<textarea ng-model="formData.words"
|
||||
rows="3"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"></textarea>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
<qr-scanner class="qr-icon size-24" on-scan="processWalletInfo(data)"></qr-scanner>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form name="importForm12" ng-submit="importMnemonic(importForm12)" novalidate>
|
||||
<div class="list card">
|
||||
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable">
|
||||
<span translate ng-show="!showAdv">Show advanced options</span>
|
||||
<span translate ng-show="showAdv">Hide advanced options</span>
|
||||
</ion-toggle>
|
||||
|
||||
<div class="row">
|
||||
<div class="col col-90">
|
||||
<label class="item item-input item-stacked-label no-border">
|
||||
<span class="input-label" translate>Type the Recovery Phrase (usually 12 words)</span>
|
||||
<textarea name="words"
|
||||
ng-model="words"
|
||||
rows="3"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"></textarea>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
<qr-scanner class="qr-icon size-24" on-scan="processWalletInfo(data)"></qr-scanner>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-show="showAdv">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" translate>Password</span>
|
||||
<input type="text"
|
||||
placeholder="{{'The recovery phrase could require a password to be imported'|translate}}"
|
||||
autocapitalize="off"
|
||||
ng-model="formData.passphrase">
|
||||
</label>
|
||||
|
||||
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable">
|
||||
<span translate ng-show="!showAdv">Show advanced options</span>
|
||||
<span translate ng-show="showAdv">Hide advanced options</span>
|
||||
</ion-toggle>
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" translate>Derivation Path</span>
|
||||
<input type="text"
|
||||
placeholder="{{'BIP32 path for address derivation'|translate}}"
|
||||
ng-model="formData.derivationPath">
|
||||
</label>
|
||||
|
||||
<div ng-show="showAdv">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">Wallet Service URL</span>
|
||||
<input type="text" ng-model="formData.bwsurl">
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">Wallet Service URL</span>
|
||||
<input type="text" id="bwsurl" name="bwsurl" ng-model="bwsurl">
|
||||
</label>
|
||||
<ion-toggle ng-model="formData.testnetEnabled" ng-change="setDerivationPath()" toggle-class="toggle-positive">
|
||||
Testnet
|
||||
</ion-toggle>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" translate>Password</span>
|
||||
<input type="text"
|
||||
placeholder="{{'The recovery phrase could require a password to be imported'|translate}}"
|
||||
autocapitalize="off"
|
||||
name="passphrase"
|
||||
ng-model="passphrase">
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" translate>Derivation Path</span>
|
||||
<input type="text"
|
||||
placeholder="{{'BIP32 path for address derivation'|translate}}"
|
||||
name="derivationPath"
|
||||
ng-model="derivationPath">
|
||||
</label>
|
||||
|
||||
<ion-toggle ng-model="testnetEnabled" ng-change="setDerivationPath(testnetEnabled)" toggle-class="toggle-positive">
|
||||
Testnet
|
||||
</ion-toggle>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit"
|
||||
class="button button-block button-positive"
|
||||
ng-disabled="importForm12.$invalid" translate>Import</button>
|
||||
</form>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
<button type="submit"
|
||||
class="button button-block button-positive"
|
||||
ng-disabled="importForm12.$invalid" translate>Import
|
||||
</button>
|
||||
</form>
|
||||
|
|
|
|||
|
|
@ -6,48 +6,49 @@
|
|||
<ion-content ng-controller="tabSettingsController" ng-init="init()">
|
||||
<div class="list">
|
||||
<div class="item item-divider"></div>
|
||||
<div class="item item-icon-left" ng-click="openAddressbookModal()">
|
||||
<a class="item item-icon-left item-icon-right" ng-click="openAddressbookModal()">
|
||||
<i class="icon ion-ios-book-outline"></i>
|
||||
<span translate>Address Book</span>
|
||||
</div>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
|
||||
<div class="item item-divider" translate>Preferences</div>
|
||||
|
||||
<div class="item item-icon-left item-icon-right" ui-sref="tabs.language">
|
||||
<a class="item item-icon-left item-icon-right" ui-sref="tabs.language">
|
||||
<i class="icon ion-ios-chatbubble-outline"></i>
|
||||
<span translate>Language</span>
|
||||
<span class="item-note">
|
||||
{{currentLanguageName|translate}}
|
||||
</span>
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
</div>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
|
||||
<div class="item item-icon-left item-icon-right" ui-sref="tabs.unit">
|
||||
<a class="item item-icon-left item-icon-right" ui-sref="tabs.unit">
|
||||
<i class="icon ion-ios-calculator-outline"></i>
|
||||
<span translate>Unit</span>
|
||||
<span class="item-note">
|
||||
{{unitName}}
|
||||
</span>
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
</div>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
|
||||
<div class="item item-icon-left item-icon-right" ui-sref="tabs.altCurrency">
|
||||
<a class="item item-icon-left item-icon-right" ui-sref="tabs.altCurrency">
|
||||
<i class="icon ion-social-usd-outline"></i>
|
||||
<span translate>Alternative Currency</span>
|
||||
<span class="item-note">
|
||||
{{selectedAlternative.name}}
|
||||
</span>
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
</div>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
|
||||
<div class="item item-icon-left item-icon-right" ui-sref="tabs.fee">
|
||||
<a class="item item-icon-left item-icon-right" ui-sref="tabs.fee">
|
||||
<i class="icon ion-social-bitcoin-outline"></i>
|
||||
<span translate>Bitcoin Network Fee Policy</span>
|
||||
<span class="item-note">
|
||||
{{feeOpts[currentFeeLevel]|translate}}
|
||||
</span>
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
</div>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
|
||||
<div ng-show="usePushNotifications && PNEnabledByUser">
|
||||
<div class="item item-divider" translate>Notifications</div>
|
||||
|
|
@ -84,7 +85,7 @@
|
|||
</ion-toggle>
|
||||
|
||||
<div class="item item-divider" translate>Wallets Preferences</div>
|
||||
<div class="item item-icon-left item-icon-right" href
|
||||
<a class="item item-icon-left item-icon-right" href
|
||||
ui-sref="tabs.preferences.main({'walletId': item.id})"
|
||||
ng-repeat="item in wallets track by $index">
|
||||
<i class="icon ion-briefcase size-21" ng-style="{'color':item.color}"></i>
|
||||
|
|
@ -95,15 +96,15 @@
|
|||
<span class="badge badge-assertive" ng-show="!item.isComplete()" translate>
|
||||
Incomplete
|
||||
</span>
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
</div>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
|
||||
<div class="item item-divider"></div>
|
||||
<div class="item item-icon-left item-icon-right" href ui-sref="tabs.about">
|
||||
<a class="item item-icon-left item-icon-right" href ui-sref="tabs.about">
|
||||
<i class="icon ion-ios-information-outline"></i>
|
||||
<span translate>About</span> {{appName}}
|
||||
<i class="icon ion-ios-arrow-right"></i>
|
||||
</div>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
|
|
|
|||
|
|
@ -10,22 +10,7 @@
|
|||
</ion-header-bar>
|
||||
|
||||
<ion-content delegate-handle="my-handle">
|
||||
<div ng-show="!wallet" translate>
|
||||
No Wallet
|
||||
<a href ui-sref="tabs.home" class="button" translate>
|
||||
Go home
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div ng-show="!wallet.isComplete()">
|
||||
<a class="button button-block button-assertive" href ui-sref="wallet.copayers" class="button" translate>
|
||||
Wallet Incomplete
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="oh pr" ng-show="wallet && wallet.isComplete()">
|
||||
<div class="oh pr" ng-show="wallet && wallet.isComplete()">
|
||||
<div ng-style="{'background-color':wallet.color}" class="amount">
|
||||
<div ng-if="!notAuthorized && !updatingStatus">
|
||||
|
||||
|
|
|
|||
|
|
@ -1,13 +1,15 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copayApp.controllers').controller('copayersController',
|
||||
function($scope, $log, $ionicPopup, profileService, platformInfo, gettextCatalog, $stateParams, ongoingProcess, $state) {
|
||||
function($scope, $log, $ionicNavBarDelegate, $stateParams, $state, profileService, popupService, platformInfo, gettextCatalog, ongoingProcess) {
|
||||
if (!$stateParams.walletId) {
|
||||
$log.debug('No wallet provided...back to home');
|
||||
return $state.transitionTo('tabs.home');
|
||||
return $state.go('tabs.home');
|
||||
}
|
||||
|
||||
var wallet = profileService.getWallet($stateParams.walletId);
|
||||
$ionicNavBarDelegate.title(wallet.name);
|
||||
|
||||
var secret;
|
||||
try {
|
||||
secret = wallet.status.wallet.secret;
|
||||
|
|
@ -15,28 +17,12 @@ angular.module('copayApp.controllers').controller('copayersController',
|
|||
|
||||
$scope.wallet = wallet;
|
||||
$scope.secret = secret;
|
||||
$scope.copayers = wallet.status.wallet.copayers;
|
||||
$scope.isCordova = platformInfo.isCordova;
|
||||
|
||||
$scope.showDeletePopup = function() {
|
||||
var popup = $ionicPopup.show({
|
||||
template: '<span>' + gettextCatalog.getString('Are you sure you want to delete this wallet?') + '</span>',
|
||||
title: gettextCatalog.getString('Confirm'),
|
||||
buttons: [
|
||||
{
|
||||
text: gettextCatalog.getString('Cancel'),
|
||||
onTap: function(e) {
|
||||
popup.close();
|
||||
}
|
||||
},
|
||||
{
|
||||
text: gettextCatalog.getString('Accept'),
|
||||
type: 'button-positive',
|
||||
onTap: function(e) {
|
||||
deleteWallet();
|
||||
popup.close();
|
||||
}
|
||||
}
|
||||
]
|
||||
popupService.showConfirm(gettextCatalog.getString('Confirm'), gettextCatalog.getString('Are you sure you want to delete this wallet?'), function(res) {
|
||||
if (res) deleteWallet();
|
||||
});
|
||||
};
|
||||
|
||||
|
|
@ -47,7 +33,7 @@ angular.module('copayApp.controllers').controller('copayersController',
|
|||
if (err) {
|
||||
popupService.showAlert(gettextCatalog.getString('Error'), err.message || err);
|
||||
} else {
|
||||
$state.transitionTo('tabs.home');
|
||||
$state.go('tabs.home');
|
||||
}
|
||||
});
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,21 +1,26 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copayApp.controllers').controller('importController',
|
||||
function($scope, $rootScope, $timeout, $log, $state, $stateParams, $ionicHistory, profileService, configService, sjcl, gettext, ledger, trezor, derivationPathHelper, platformInfo, bwcService, ongoingProcess, walletService, popupService, gettextCatalog) {
|
||||
function($scope, $timeout, $log, $state, $stateParams, profileService, configService, sjcl, ledger, trezor, derivationPathHelper, platformInfo, bwcService, ongoingProcess, walletService, popupService, gettextCatalog) {
|
||||
|
||||
var isChromeApp = platformInfo.isChromeApp;
|
||||
var isDevel = platformInfo.isDevel;
|
||||
var reader = new FileReader();
|
||||
var defaults = configService.getDefaults();
|
||||
var errors = bwcService.getErrors();
|
||||
$scope.isSafari = platformInfo.isSafari;
|
||||
$scope.isCordova = platformInfo.isCordova;
|
||||
$scope.bwsurl = defaults.bws.url;
|
||||
$scope.derivationPath = derivationPathHelper.default;
|
||||
$scope.account = 1;
|
||||
$scope.importErr = false;
|
||||
|
||||
var updateSeedSourceSelect = function() {
|
||||
$scope.init = function() {
|
||||
$scope.isSafari = platformInfo.isSafari;
|
||||
$scope.isCordova = platformInfo.isCordova;
|
||||
$scope.formData = {};
|
||||
$scope.formData.bwsurl = defaults.bws.url;
|
||||
$scope.formData.derivationPath = derivationPathHelper.default;
|
||||
$scope.formData.account = 1;
|
||||
$scope.importErr = false;
|
||||
|
||||
if ($stateParams.code)
|
||||
$scope.processWalletInfo($stateParams.code);
|
||||
|
||||
$scope.seedOptions = [];
|
||||
|
||||
if (isChromeApp) {
|
||||
|
|
@ -36,6 +41,7 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
|
||||
$scope.processWalletInfo = function(code) {
|
||||
if (!code) return;
|
||||
|
||||
$scope.importErr = false;
|
||||
var parsedCode = code.split('|');
|
||||
|
||||
|
|
@ -56,26 +62,19 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
if (info.type == 1 && info.hasPassphrase)
|
||||
popupService.showAlert(gettextCatalog.getString('Password required. Make sure to enter your password in advanced options'));
|
||||
|
||||
$scope.derivationPath = info.derivationPath;
|
||||
$scope.testnetEnabled = info.network == 'testnet' ? true : false;
|
||||
$scope.formData.derivationPath = info.derivationPath;
|
||||
$scope.formData.testnetEnabled = info.network == 'testnet' ? true : false;
|
||||
|
||||
$timeout(function() {
|
||||
$scope.words = info.data;
|
||||
$rootScope.$apply();
|
||||
}, 1);
|
||||
};
|
||||
|
||||
$scope.setType = function(type) {
|
||||
$scope.type = type;
|
||||
$timeout(function() {
|
||||
$rootScope.$apply();
|
||||
$scope.formData.words = info.data;
|
||||
$scope.$apply();
|
||||
}, 1);
|
||||
};
|
||||
|
||||
var _importBlob = function(str, opts) {
|
||||
var str2, err;
|
||||
try {
|
||||
str2 = sjcl.decrypt($scope.password, str);
|
||||
str2 = sjcl.decrypt($scope.formData.password, str);
|
||||
} catch (e) {
|
||||
err = gettextCatalog.getString('Could not decrypt file, check your password');
|
||||
$log.warn(e);
|
||||
|
|
@ -83,9 +82,6 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
|
||||
if (err) {
|
||||
popupService.showAlert(gettextCatalog.getString('Error'), err);
|
||||
$timeout(function() {
|
||||
$rootScope.$apply();
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -147,7 +143,7 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
if (err) $log.error(err);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
$state.go('tabs.home');
|
||||
});
|
||||
}, 100);
|
||||
|
|
@ -176,11 +172,8 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
}, 100);
|
||||
};
|
||||
|
||||
$scope.setDerivationPath = function(testnetEnabled) {
|
||||
if (testnetEnabled)
|
||||
$scope.derivationPath = derivationPathHelper.defaultTestnet;
|
||||
else
|
||||
$scope.derivationPath = derivationPathHelper.default;
|
||||
$scope.setDerivationPath = function() {
|
||||
$scope.formData.derivationPath = $scope.formData.testnetEnabled ? derivationPathHelper.defaultTestnet : derivationPathHelper.default;
|
||||
};
|
||||
|
||||
$scope.getFile = function() {
|
||||
|
|
@ -188,7 +181,7 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
reader.onloadend = function(evt) {
|
||||
if (evt.target.readyState == FileReader.DONE) { // DONE == 2
|
||||
var opts = {};
|
||||
opts.bwsurl = $scope.bwsurl;
|
||||
opts.bwsurl = $scope.formData.bwsurl;
|
||||
_importBlob(evt.target.result, opts);
|
||||
}
|
||||
}
|
||||
|
|
@ -200,9 +193,9 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
return;
|
||||
}
|
||||
|
||||
var backupFile = $scope.file;
|
||||
var backupText = form.backupText.$modelValue;
|
||||
var password = form.password.$modelValue;
|
||||
var backupFile = $scope.formData.file;
|
||||
var backupText = $scope.formData.backupText;
|
||||
var password = $scope.formData.password;
|
||||
|
||||
if (!backupFile && !backupText) {
|
||||
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Please, select your backup file'));
|
||||
|
|
@ -213,7 +206,7 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
reader.readAsBinaryString(backupFile);
|
||||
} else {
|
||||
var opts = {};
|
||||
opts.bwsurl = $scope.bwsurl;
|
||||
opts.bwsurl = $scope.formData.bwsurl;
|
||||
_importBlob(backupText, opts);
|
||||
}
|
||||
};
|
||||
|
|
@ -225,19 +218,22 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
}
|
||||
|
||||
var opts = {};
|
||||
if ($scope.bwsurl)
|
||||
opts.bwsurl = $scope.bwsurl;
|
||||
|
||||
var pathData = derivationPathHelper.parse($scope.derivationPath);
|
||||
if ($scope.formData.bwsurl)
|
||||
opts.bwsurl = $scope.formData.bwsurl;
|
||||
|
||||
var pathData = derivationPathHelper.parse($scope.formData.derivationPath);
|
||||
|
||||
if (!pathData) {
|
||||
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Invalid derivation path'));
|
||||
return;
|
||||
}
|
||||
|
||||
opts.account = pathData.account;
|
||||
opts.networkName = pathData.networkName;
|
||||
opts.derivationStrategy = pathData.derivationStrategy;
|
||||
|
||||
var words = form.words.$modelValue || null;
|
||||
var words = $scope.formData.words || null;
|
||||
|
||||
if (!words) {
|
||||
popupService.showAlert(gettextCatalog.getString('Please enter the recovery phrase'));
|
||||
|
|
@ -254,9 +250,7 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
}
|
||||
}
|
||||
|
||||
var passphrase = form.passphrase.$modelValue;
|
||||
opts.passphrase = form.passphrase.$modelValue || null;
|
||||
|
||||
opts.passphrase = $scope.formData.passphrase || null;
|
||||
_importMnemonic(words, opts);
|
||||
};
|
||||
|
||||
|
|
@ -269,7 +263,7 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
}
|
||||
|
||||
lopts.externalSource = 'trezor';
|
||||
lopts.bwsurl = $scope.bwsurl;
|
||||
lopts.bwsurl = $scope.formData.bwsurl;
|
||||
ongoingProcess.set('importingWallet', true);
|
||||
$log.debug('Import opts', lopts);
|
||||
|
||||
|
|
@ -285,45 +279,37 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
};
|
||||
|
||||
$scope.importHW = function(form) {
|
||||
if (form.$invalid || $scope.account < 0) {
|
||||
if (form.$invalid || $scope.formData.ccount < 0) {
|
||||
popupService.showAlert(gettextCatalog.getString('There is an error in the form'));
|
||||
return;
|
||||
}
|
||||
|
||||
$scope.importErr = false;
|
||||
|
||||
var account = +$scope.account;
|
||||
var account = $scope.formData.ccount;
|
||||
|
||||
if ($scope.seedSourceId == 'trezor') {
|
||||
if ($scope.seedSource.id == 'trezor') {
|
||||
if (account < 1) {
|
||||
$scope.error = gettext('Invalid account number');
|
||||
popupService.showAlert(gettextCatalog.getString('Invalid account number'));
|
||||
return;
|
||||
}
|
||||
account = account - 1;
|
||||
}
|
||||
|
||||
switch ($scope.seedSourceId) {
|
||||
switch ($scope.seedSource.id) {
|
||||
case ('ledger'):
|
||||
ongoingProcess.set('connectingledger', true);
|
||||
$scope.importLedger(account);
|
||||
break;
|
||||
case ('trezor'):
|
||||
ongoingProcess.set('connectingtrezor', true);
|
||||
$scope.importTrezor(account, $scope.isMultisig);
|
||||
$scope.importTrezor(account, $scope.formData.isMultisig);
|
||||
break;
|
||||
default:
|
||||
throw ('Error: bad source id');
|
||||
};
|
||||
};
|
||||
|
||||
$scope.setSeedSource = function() {
|
||||
|
||||
if (!$scope.seedSource) return;
|
||||
$scope.seedSourceId = $scope.seedSource.id;
|
||||
$timeout(function() {
|
||||
$rootScope.$apply();
|
||||
});
|
||||
};
|
||||
|
||||
$scope.importLedger = function(account) {
|
||||
ledger.getInfoForNewWallet(true, account, function(err, lopts) {
|
||||
ongoingProcess.clear();
|
||||
|
|
@ -333,7 +319,7 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
}
|
||||
|
||||
lopts.externalSource = 'ledger';
|
||||
lopts.bwsurl = $scope.bwsurl;
|
||||
lopts.bwsurl = $scope.formData.bwsurl;
|
||||
ongoingProcess.set('importingWallet', true);
|
||||
$log.debug('Import opts', lopts);
|
||||
|
||||
|
|
@ -349,7 +335,6 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
};
|
||||
|
||||
var finish = function(wallet) {
|
||||
|
||||
walletService.updateRemotePreferences(wallet, {}, function() {
|
||||
$log.debug('Remote preferences saved for:' + wallet.credentials.walletId)
|
||||
});
|
||||
|
|
@ -362,8 +347,4 @@ angular.module('copayApp.controllers').controller('importController',
|
|||
}
|
||||
$state.go('tabs.home');
|
||||
};
|
||||
|
||||
updateSeedSourceSelect();
|
||||
$scope.setSeedSource();
|
||||
if ($stateParams.code) $scope.processWalletInfo($stateParams.code);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi
|
|||
var tx = $scope.tx;
|
||||
var copayers = $scope.copayers;
|
||||
var isGlidera = $scope.isGlidera;
|
||||
var GLIDERA_LOCK_TIME = 6 * 60 * 60;
|
||||
var now = Math.floor(Date.now() / 1000);
|
||||
$scope.loading = null;
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
angular.module('copayApp.controllers').controller('termsController', function($scope, $log, $state, uxLanguage, profileService, externalLinkService) {
|
||||
$scope.lang = uxLanguage.currentLanguage;
|
||||
$scope.disclaimerUrl = $window.appConfig.disclaimerUrl;
|
||||
|
||||
$scope.confirm = function() {
|
||||
profileService.setDisclaimerAccepted(function(err) {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
angular.module('copayApp.controllers').controller('welcomeController', function($scope, $state, $timeout, $log, $ionicPopup, profileService) {
|
||||
|
||||
$scope.goImport = function(code) {
|
||||
$state.go('onboarding.import.phrase', {
|
||||
$state.go('onboarding.import', {
|
||||
fromOnboarding: true,
|
||||
code: code
|
||||
});
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ angular.module('copayApp.controllers').controller('preferencesGlideraController'
|
|||
|
||||
if (permissions.view_email_address && opts.fullUpdate) {
|
||||
glideraService.getEmail(accessToken, function(err, data) {
|
||||
$scope.email = data.email;
|
||||
$scope.email = data;
|
||||
});
|
||||
}
|
||||
if (permissions.personal_info && opts.fullUpdate) {
|
||||
|
|
|
|||
|
|
@ -1,19 +1,37 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copayApp.controllers').controller('tabHomeController',
|
||||
function($rootScope, $timeout, $scope, $state, $ionicScrollDelegate, lodash, profileService, walletService, configService, txFormatService, $ionicModal, $log, platformInfo, storageService, txpModalService, $window) {
|
||||
|
||||
function($rootScope, $timeout, $scope, $state, $ionicScrollDelegate, lodash, profileService, walletService, configService, $log, platformInfo, storageService, txpModalService, $window) {
|
||||
$scope.externalServices = {};
|
||||
$scope.bitpayCardEnabled = true; // TODO
|
||||
$scope.openTxpModal = txpModalService.open;
|
||||
$scope.version = $window.version;
|
||||
$scope.name = $window.appConfig.nameCase;
|
||||
|
||||
configService.whenAvailable(function() {
|
||||
var config = configService.getSync();
|
||||
var isWindowsPhoneApp = platformInfo.isWP && platformInfo.isCordova;
|
||||
$scope.glideraEnabled = config.glidera.enabled && !isWindowsPhoneApp;
|
||||
$scope.coinbaseEnabled = config.coinbase.enabled && !isWindowsPhoneApp;
|
||||
});
|
||||
|
||||
$scope.openWallet = function(wallet) {
|
||||
if (!wallet.isComplete()) {
|
||||
return $state.go('tabs.copayers', {
|
||||
walletId: wallet.credentials.walletId
|
||||
});
|
||||
}
|
||||
|
||||
$state.go('tabs.details', {
|
||||
walletId: wallet.credentials.walletId
|
||||
});
|
||||
};
|
||||
|
||||
function updateTxps() {
|
||||
profileService.getTxps({
|
||||
limit: 3
|
||||
}, function(err, txps, n) {
|
||||
if (err) {
|
||||
console.log('[tab-home.js.35:err:]', $log.error(err)); //TODO
|
||||
}
|
||||
if (err) $log.error(err);
|
||||
$scope.txps = txps;
|
||||
$scope.txpsN = n;
|
||||
$ionicScrollDelegate.resize();
|
||||
|
|
@ -24,7 +42,6 @@ angular.module('copayApp.controllers').controller('tabHomeController',
|
|||
})
|
||||
};
|
||||
|
||||
|
||||
$scope.updateAllWallets = function() {
|
||||
$scope.wallets = profileService.getWallets();
|
||||
if (lodash.isEmpty($scope.wallets)) return;
|
||||
|
|
@ -41,7 +58,7 @@ angular.module('copayApp.controllers').controller('tabHomeController',
|
|||
} else {
|
||||
wallet.status = status;
|
||||
}
|
||||
if (++j==i) {
|
||||
if (++j == i) {
|
||||
updateTxps();
|
||||
}
|
||||
});
|
||||
|
|
@ -106,7 +123,7 @@ angular.module('copayApp.controllers').controller('tabHomeController',
|
|||
$scope.updateWallet(wallet);
|
||||
}),
|
||||
$rootScope.$on('Local/TxAction', function(e, walletId) {
|
||||
$log.debug('Got action for wallet '+ walletId);
|
||||
$log.debug('Got action for wallet ' + walletId);
|
||||
var wallet = profileService.getWallet(walletId);
|
||||
$scope.updateWallet(wallet);
|
||||
}),
|
||||
|
|
@ -117,19 +134,4 @@ angular.module('copayApp.controllers').controller('tabHomeController',
|
|||
x();
|
||||
});
|
||||
});
|
||||
|
||||
configService.whenAvailable(function() {
|
||||
var config = configService.getSync();
|
||||
var isWindowsPhoneApp = platformInfo.isWP && isCordova;
|
||||
$scope.glideraEnabled = config.glidera.enabled && !isWindowsPhoneApp;
|
||||
$scope.coinbaseEnabled = config.coinbase.enabled && !isWindowsPhoneApp;
|
||||
});
|
||||
|
||||
$scope.openTxpModal = txpModalService.open;
|
||||
|
||||
$scope.version = $window.version;
|
||||
$scope.name = $window.appConfig.nameCase;
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,21 +1,58 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copayApp.controllers').controller('walletDetailsController', function($scope, $rootScope, $interval, $timeout, $filter, $log, $ionicModal, $ionicPopover, $ionicNavBarDelegate, $state, $stateParams, bwcError, profileService, lodash, configService, gettext, gettextCatalog, platformInfo, walletService, $ionicPopup, txpModalService, externalLinkService) {
|
||||
|
||||
var isCordova = platformInfo.isCordova;
|
||||
var isWP = platformInfo.isWP;
|
||||
var isAndroid = platformInfo.isAndroid;
|
||||
var isChromeApp = platformInfo.isChromeApp;
|
||||
|
||||
var errorPopup;
|
||||
|
||||
var HISTORY_SHOW_LIMIT = 10;
|
||||
var currentTxHistoryPage;
|
||||
var wallet;
|
||||
$scope.txps = [];
|
||||
|
||||
$scope.openExternalLink = function(url, target) {
|
||||
externalLinkService.open(url, target);
|
||||
};
|
||||
|
||||
$scope.init = function() {
|
||||
currentTxHistoryPage = 0;
|
||||
$scope.completeTxHistory = [];
|
||||
|
||||
wallet = profileService.getWallet($stateParams.walletId);
|
||||
|
||||
/* Set color for header bar */
|
||||
$rootScope.walletDetailsColor = wallet.color;
|
||||
$rootScope.walletDetailsName = wallet.name;
|
||||
$scope.wallet = wallet;
|
||||
|
||||
$scope.requiresMultipleSignatures = wallet.credentials.m > 1;
|
||||
$scope.newTx = false;
|
||||
|
||||
$ionicNavBarDelegate.title(wallet.name);
|
||||
|
||||
$scope.updateAll(function() {
|
||||
if ($stateParams.txid) {
|
||||
var tx = lodash.find($scope.completeTxHistory, {
|
||||
txid: $stateParams.txid
|
||||
});
|
||||
if (tx) {
|
||||
$scope.openTxModal(tx);
|
||||
} else {
|
||||
$ionicPopup.alert({
|
||||
title: gettext('TX not available'),
|
||||
});
|
||||
}
|
||||
} else if ($stateParams.txpId) {
|
||||
var txp = lodash.find($scope.txps, {
|
||||
id: $stateParams.txpId
|
||||
});
|
||||
if (txp) {
|
||||
$scope.openTxpModal(txp);
|
||||
} else {
|
||||
$ionicPopup.alert({
|
||||
title: gettext('Proposal not longer available'),
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var setPendingTxps = function(txps) {
|
||||
if (!txps) {
|
||||
$scope.txps = [];
|
||||
|
|
@ -169,54 +206,4 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
|
|||
if (err) $log.error(err);
|
||||
});
|
||||
}
|
||||
|
||||
var currentTxHistoryPage;
|
||||
var wallet;
|
||||
|
||||
$scope.init = function() {
|
||||
currentTxHistoryPage = 0;
|
||||
$scope.completeTxHistory = [];
|
||||
|
||||
wallet = profileService.getWallet($stateParams.walletId);
|
||||
|
||||
if (!wallet.isComplete()) {
|
||||
return $state.go('wallet.copayers');
|
||||
};
|
||||
|
||||
/* Set color for header bar */
|
||||
$rootScope.walletDetailsColor = wallet.color;
|
||||
$rootScope.walletDetailsName = wallet.name;
|
||||
|
||||
$scope.wallet = wallet;
|
||||
$scope.requiresMultipleSignatures = wallet.credentials.m > 1;
|
||||
$scope.newTx = false;
|
||||
|
||||
$ionicNavBarDelegate.title(wallet.name);
|
||||
|
||||
$scope.updateAll(function() {
|
||||
if ($stateParams.txid) {
|
||||
var tx = lodash.find($scope.completeTxHistory, {
|
||||
txid: $stateParams.txid
|
||||
});
|
||||
if (tx) {
|
||||
$scope.openTxModal(tx);
|
||||
} else {
|
||||
$ionicPopup.alert({
|
||||
title: gettext('TX not available'),
|
||||
});
|
||||
}
|
||||
} else if ($stateParams.txpId) {
|
||||
var txp = lodash.find($scope.txps, {
|
||||
id: $stateParams.txpId
|
||||
});
|
||||
if (txp) {
|
||||
$scope.openTxpModal(txp);
|
||||
} else {
|
||||
$ionicPopup.alert({
|
||||
title: gettext('Proposal not longer available'),
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ angular.module('copayApp.directives')
|
|||
return {
|
||||
link: function($scope, el) {
|
||||
el.bind('change', function(e) {
|
||||
$scope.file = (e.srcElement || e.target).files[0];
|
||||
$scope.formData.file = (e.srcElement || e.target).files[0];
|
||||
$scope.getFile();
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -276,37 +276,12 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
|
|||
})
|
||||
.state('tabs.import', {
|
||||
url: '/import',
|
||||
// abstract: true,
|
||||
views: {
|
||||
'tab-home': {
|
||||
templateUrl: 'views/import.html'
|
||||
},
|
||||
},
|
||||
})
|
||||
.state('tabs.import.phrase', {
|
||||
url: '/tab-import-phrase',
|
||||
views: {
|
||||
'tab-import-phrase': {
|
||||
templateUrl: 'views/tab-import-phrase.html',
|
||||
},
|
||||
}
|
||||
})
|
||||
.state('tabs.import.file', {
|
||||
url: '/tab-import-file',
|
||||
views: {
|
||||
'tab-import-file': {
|
||||
templateUrl: 'views/tab-import-file.html',
|
||||
},
|
||||
}
|
||||
})
|
||||
.state('tabs.import.hardware', {
|
||||
url: '/tab-import-hardware',
|
||||
views: {
|
||||
'tab-import-hardware': {
|
||||
templateUrl: 'views/tab-import-hardware.html',
|
||||
},
|
||||
}
|
||||
})
|
||||
.state('tabs.create', {
|
||||
url: '/create',
|
||||
views: {
|
||||
|
|
@ -533,9 +508,9 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
|
|||
*/
|
||||
|
||||
.state('tabs.copayers', {
|
||||
url: '/copayers',
|
||||
url: '/copayers/:walletId',
|
||||
views: {
|
||||
'wallet': {
|
||||
'tab-home': {
|
||||
templateUrl: 'views/copayers.html'
|
||||
}
|
||||
}
|
||||
|
|
@ -626,7 +601,6 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
|
|||
})
|
||||
.state('onboarding.import', {
|
||||
url: '/import',
|
||||
abstract: true,
|
||||
views: {
|
||||
'onboarding': {
|
||||
templateUrl: 'views/import.html'
|
||||
|
|
@ -637,30 +611,6 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
|
|||
fromOnboarding: null
|
||||
},
|
||||
})
|
||||
.state('onboarding.import.phrase', {
|
||||
url: '/tab-import-phrase',
|
||||
views: {
|
||||
'tab-import-phrase': {
|
||||
templateUrl: 'views/tab-import-phrase.html',
|
||||
},
|
||||
}
|
||||
})
|
||||
.state('onboarding.import.file', {
|
||||
url: '/tab-import-file',
|
||||
views: {
|
||||
'tab-import-file': {
|
||||
templateUrl: 'views/tab-import-file.html',
|
||||
},
|
||||
}
|
||||
})
|
||||
.state('onboarding.import.hardware', {
|
||||
url: '/tab-import-hardware',
|
||||
views: {
|
||||
'tab-import-hardware': {
|
||||
templateUrl: 'views/tab-import-hardware.html',
|
||||
},
|
||||
}
|
||||
})
|
||||
|
||||
/*
|
||||
*
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
.icon.nav-item-arrow-right {
|
||||
color: #666;
|
||||
font-size: 26px;
|
||||
@extend .ion-ios-arrow-right;
|
||||
}
|
||||
|
||||
.item.item-heading {
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ h3.title {
|
|||
.box-notification {
|
||||
padding: 0.5rem;
|
||||
border: 1px solid;
|
||||
margin-bottom: 20px;
|
||||
margin: 10px;
|
||||
a {
|
||||
color: #fff;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
.wallet-activity {
|
||||
|
||||
&-not-pending {
|
||||
background-color:#eee;
|
||||
opacity: 0.6;
|
||||
filter: alpha(opacity=60); /* For IE8 and earlier */
|
||||
}
|
||||
|
||||
&-amount {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue