Merge pull request #2663 from cmgustavo/feat/slide
Modals animation (slide up/down)
This commit is contained in:
commit
9f620d127e
19 changed files with 532 additions and 470 deletions
19
Gruntfile.js
19
Gruntfile.js
|
|
@ -84,9 +84,7 @@ module.exports = function(grunt) {
|
||||||
'bower_components/moment/min/moment-with-locales.js',
|
'bower_components/moment/min/moment-with-locales.js',
|
||||||
'bower_components/angular/angular.js',
|
'bower_components/angular/angular.js',
|
||||||
'bower_components/angular-ui-router/release/angular-ui-router.js',
|
'bower_components/angular-ui-router/release/angular-ui-router.js',
|
||||||
'bower_components/angular-foundation/mm-foundation.js',
|
|
||||||
'bower_components/angular-foundation/mm-foundation-tpls.js',
|
'bower_components/angular-foundation/mm-foundation-tpls.js',
|
||||||
'bower_components/angular-animate/angular-animate.js',
|
|
||||||
'bower_components/angular-moment/angular-moment.js',
|
'bower_components/angular-moment/angular-moment.js',
|
||||||
'bower_components/ng-lodash/build/ng-lodash.js',
|
'bower_components/ng-lodash/build/ng-lodash.js',
|
||||||
'bower_components/angular-qrcode/qrcode.js',
|
'bower_components/angular-qrcode/qrcode.js',
|
||||||
|
|
@ -126,22 +124,6 @@ module.exports = function(grunt) {
|
||||||
dest: 'public/css/foundation.css',
|
dest: 'public/css/foundation.css',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
cssmin: {
|
|
||||||
copay: {
|
|
||||||
files: {
|
|
||||||
'public/css/copay.css': ['src/css/*.css'],
|
|
||||||
}
|
|
||||||
},
|
|
||||||
foundation: {
|
|
||||||
files: {
|
|
||||||
'public/css/foundation.css': [
|
|
||||||
'bower_components/angular/angular-csp.css',
|
|
||||||
'bower_components/foundation/css/foundation.css',
|
|
||||||
'bower_components/animate.css/animate.css'
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
uglify: {
|
uglify: {
|
||||||
options: {
|
options: {
|
||||||
mangle: false
|
mangle: false
|
||||||
|
|
@ -209,7 +191,6 @@ module.exports = function(grunt) {
|
||||||
grunt.loadNpmTasks('grunt-contrib-copy');
|
grunt.loadNpmTasks('grunt-contrib-copy');
|
||||||
grunt.loadNpmTasks('grunt-contrib-watch');
|
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||||
grunt.loadNpmTasks('grunt-contrib-uglify');
|
grunt.loadNpmTasks('grunt-contrib-uglify');
|
||||||
grunt.loadNpmTasks('grunt-contrib-cssmin');
|
|
||||||
grunt.loadNpmTasks('grunt-angular-gettext');
|
grunt.loadNpmTasks('grunt-angular-gettext');
|
||||||
grunt.loadNpmTasks('grunt-markdown');
|
grunt.loadNpmTasks('grunt-markdown');
|
||||||
grunt.loadNpmTasks('grunt-release');
|
grunt.loadNpmTasks('grunt-release');
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"angular": "~1.3.13",
|
"angular": "~1.3.13",
|
||||||
"angular-foundation": "*",
|
"angular-foundation": "*",
|
||||||
"angular-animate": "~1.3.13",
|
|
||||||
"angular-qrcode": "~5.1.0",
|
"angular-qrcode": "~5.1.0",
|
||||||
"angular-gettext": "~2.0.5",
|
"angular-gettext": "~2.0.5",
|
||||||
"animate.css": "~3.2.0",
|
"animate.css": "~3.2.0",
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@
|
||||||
"grunt-cli": "^0.1.13",
|
"grunt-cli": "^0.1.13",
|
||||||
"grunt-contrib-concat": "^0.5.1",
|
"grunt-contrib-concat": "^0.5.1",
|
||||||
"grunt-contrib-copy": "^0.8.0",
|
"grunt-contrib-copy": "^0.8.0",
|
||||||
"grunt-contrib-cssmin": "^0.12.2",
|
|
||||||
"grunt-contrib-uglify": "^0.8.0",
|
"grunt-contrib-uglify": "^0.8.0",
|
||||||
"grunt-contrib-watch": "^0.5.3",
|
"grunt-contrib-watch": "^0.5.3",
|
||||||
"grunt-exec": "^0.4.6",
|
"grunt-exec": "^0.4.6",
|
||||||
|
|
|
||||||
|
|
@ -31,8 +31,15 @@
|
||||||
|
|
||||||
|
|
||||||
<section
|
<section
|
||||||
ng-class="{'main': index.hasProfile, 'main-dark': mainDark, 'animation-left': index.swipeLeft,
|
class="animation-slide"
|
||||||
'animation-right': index.swipeRight}"
|
ng-class="{
|
||||||
|
'main': index.hasProfile,
|
||||||
|
'main-dark': mainDark,
|
||||||
|
'animation-left': index.slideLeft,
|
||||||
|
'animation-right': index.slideRight,
|
||||||
|
'animation-up': index.slideUp,
|
||||||
|
'animation-down': index.slideDown
|
||||||
|
}"
|
||||||
ui-view="main"></section>
|
ui-view="main"></section>
|
||||||
<div ui-view="menu" ng-if="!index.noFocusedWallet && !$root.hideMenuBar"></div>
|
<div ui-view="menu" ng-if="!index.noFocusedWallet && !$root.hideMenuBar"></div>
|
||||||
<a class="close-menu" ng-click="index.closeMenu()"></a>
|
<a class="close-menu" ng-click="index.closeMenu()"></a>
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@
|
||||||
<label for="username">
|
<label for="username">
|
||||||
{{importLegacy.fromCloud ? 'Email': 'Username'}}
|
{{importLegacy.fromCloud ? 'Email': 'Username'}}
|
||||||
<input type="text" class="form-control" placeholder="{{importLegacy.fromCloud ? 'Email': 'Username'}}"
|
<input type="text" class="form-control" placeholder="{{importLegacy.fromCloud ? 'Email': 'Username'}}"
|
||||||
name="username" ng-model="importLegacy.username" required>
|
name="username" ng-model="importLegacy.username" autocapitalize="off" required>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<label for="password">
|
<label for="password">
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<nav ng-controller="topbarController as topbar" class="tab-bar">
|
<nav ng-controller="topbarController as topbar" class="tab-bar">
|
||||||
<section class="left-small">
|
<section class="left-small">
|
||||||
<a id="hamburger" class="p10 ng-animate-disabled" ng-show="!goBackToState && !closeToHome && !index.noFocusedWallet"
|
<a id="hamburger" class="p10" ng-show="!goBackToState && !closeToHome && !index.noFocusedWallet"
|
||||||
ng-click="index.openMenu()"><i class="fi-list size-24"></i>
|
ng-click="index.openMenu()"><i class="fi-list size-24"></i>
|
||||||
</a>
|
</a>
|
||||||
<a ng-show="goBackToState" class="ng-animate-disabled"
|
<a ng-show="goBackToState"
|
||||||
ng-click="$root.go(goBackToState); goBackToState = null"><i class="icon-arrow-left3 icon-back"></i>
|
ng-click="$root.go(goBackToState); goBackToState = null"><i class="icon-arrow-left3 icon-back"></i>
|
||||||
<span class="text-back">{{'Back'|translate}}</span>
|
<span class="text-back">{{'Back'|translate}}</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
<section class="right-small" ng-show="!goBackToState">
|
<section class="right-small" ng-show="!goBackToState">
|
||||||
<a id="camera-icon" ng-show="!closeToHome && index.isComplete" class="p10"
|
<a id="camera-icon" ng-show="!closeToHome && index.isComplete" class="p10"
|
||||||
ng-click="topbar.openScanner()"><i class="icon-scan size-21"></i></a>
|
ng-click="topbar.openScanner()"><i class="icon-scan size-21"></i></a>
|
||||||
<a ng-show="closeToHome" class="p10 ng-animate-disabled"
|
<a ng-show="closeToHome" class="p10"
|
||||||
ng-click="topbar.goHome(); closeToHome = null">
|
ng-click="topbar.goHome(); closeToHome = null">
|
||||||
<span class="text-close">{{'Close'|translate}}</span>
|
<span class="text-close">{{'Close'|translate}}</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<div class="ng-animate-disabled row collapse last-transactions-content line-b"
|
<div class="ng-animate-disabled row collapse last-transactions-content line-b"
|
||||||
ng-class="{'text-gray':!tx.pendingForUs}"
|
ng-class="{'text-gray':!tx.pendingForUs}"
|
||||||
ng-click="openTxModal(tx, index.copayers)">
|
ng-click="home.openTxpModal(tx, index.copayers)">
|
||||||
<div class="small-1 columns text-center" >
|
<div class="small-1 columns text-center" >
|
||||||
<i class="icon-circle-active size-10" ng-show="tx.pendingForUs" ng-style="{'color':index.backgroundColor}" style="margin-top:8px;"></i>
|
<i class="icon-circle-active size-10" ng-show="tx.pendingForUs" ng-style="{'color':index.backgroundColor}" style="margin-top:8px;"></i>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<nav class="tab-bar">
|
<nav class="tab-bar">
|
||||||
<section class="right-small">
|
<section class="left-small">
|
||||||
<a ng-click="cancel()" class="p10">
|
<a ng-click="cancel()" class="p10">
|
||||||
<span class="text-close" translate>Close</span>
|
<span class="text-close" translate>Close</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<nav class="tab-bar">
|
<nav class="tab-bar">
|
||||||
<section class="right-small">
|
<section class="left-small">
|
||||||
<a ng-click="cancel()" class="p10">
|
<a ng-click="cancel()" class="p10">
|
||||||
<span class="text-close" translate>Close</span>
|
<span class="text-close" translate>Close</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<nav class="tab-bar">
|
<nav class="tab-bar">
|
||||||
<section class="right-small">
|
<section class="left-small">
|
||||||
<a ng-click="cancel()" class="p10">
|
<a ng-click="cancel()" class="p10">
|
||||||
<span class="text-close" translate>Close</span>
|
<span class="text-close" translate>Close</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<nav class="tab-bar">
|
<nav class="tab-bar">
|
||||||
<section class="right-small">
|
<section class="left-small">
|
||||||
<a ng-click="cancel()" class="p10 ng-animate-disabled">
|
<a ng-click="cancel()" class="p10">
|
||||||
<span class="text-close" translate>Close</span>
|
<span class="text-close" translate>Close</span>
|
||||||
</a>
|
</a>
|
||||||
</section>
|
</section>
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
<h4 class="title m0" translate>Information</h4>
|
<h4 class="title m0" translate>Information</h4>
|
||||||
<ul class="no-bullet size-14 m0">
|
<ul class="no-bullet size-14 m0">
|
||||||
<li ng-if="btx.addressTo" class="line-b p10 oh" ng-click="copyAddress(btx.addressTo)">
|
<li ng-if="btx.addressTo && btx.addressTo != 'N/A'" class="line-b p10 oh" ng-click="copyAddress(btx.addressTo)">
|
||||||
<span class="text-gray" translate>To</span>:
|
<span class="text-gray" translate>To</span>:
|
||||||
<span class="right">
|
<span class="right">
|
||||||
<span ng-if="btx.merchant">
|
<span ng-if="btx.merchant">
|
||||||
|
|
@ -35,7 +35,7 @@
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<li ng-if="btx.time" class="line-b p10">
|
<li ng-if="btx.time" class="line-b p10 oh">
|
||||||
<span class="text-gray" translate>Date</span>:
|
<span class="text-gray" translate>Date</span>:
|
||||||
<span class="right">
|
<span class="right">
|
||||||
<time>{{ btx.time * 1000 | amCalendar}}</time>
|
<time>{{ btx.time * 1000 | amCalendar}}</time>
|
||||||
|
|
@ -53,7 +53,7 @@
|
||||||
{{btx.merchant.pr.pd.memo}}
|
{{btx.merchant.pr.pd.memo}}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<li ng-if="btx.time" class="line-b p10">
|
<li ng-if="btx.time" class="line-b p10 oh">
|
||||||
<span class="text-gray" translate>Confirmations</span>:
|
<span class="text-gray" translate>Confirmations</span>:
|
||||||
<span class="right" >
|
<span class="right" >
|
||||||
<span class="text-warning" ng-show="!btx.confirmations || btx.confirmations == 0" translate>
|
<span class="text-warning" ng-show="!btx.confirmations || btx.confirmations == 0" translate>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<nav class="tab-bar">
|
<nav class="tab-bar">
|
||||||
<section class="right-small">
|
<section class="left-small">
|
||||||
<a ng-click="cancel()" class="p10 ng-animate-disabled">
|
<a ng-click="cancel()" class="p10">
|
||||||
<span class="text-close" translate>Close</span>
|
<span class="text-close" translate>Close</span>
|
||||||
</a>
|
</a>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
||||||
|
|
@ -9,436 +9,442 @@
|
||||||
|
|
||||||
<div class="onGoingProcess" ng-show="index.isOffline">
|
<div class="onGoingProcess" ng-show="index.isOffline">
|
||||||
<div class="onGoingProcess-content" ng-style="{'background-color':'#222'}">
|
<div class="onGoingProcess-content" ng-style="{'background-color':'#222'}">
|
||||||
<div class="spinner">
|
<div class="spinner">
|
||||||
<div class="rect1"></div>
|
|
||||||
<div class="rect2"></div>
|
|
||||||
<div class="rect3"></div>
|
|
||||||
<div class="rect4"></div>
|
|
||||||
<div class="rect5"></div>
|
|
||||||
</div>
|
|
||||||
<span translate>Reconnecting to Wallet Service...</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="onGoingProcess" ng-show="index.anyOnGoingProcess && !index.isOffline">
|
|
||||||
<div class="onGoingProcess-content" ng-style="{'background-color':index.backgroundColor}">
|
|
||||||
<div class="spinner">
|
|
||||||
<div class="rect1"></div>
|
|
||||||
<div class="rect2"></div>
|
|
||||||
<div class="rect3"></div>
|
|
||||||
<div class="rect4"></div>
|
|
||||||
<div class="rect5"></div>
|
|
||||||
</div>
|
|
||||||
<span translate ng-show="
|
|
||||||
index.onGoingProcessName == 'openingWallet'
|
|
||||||
|| index.onGoingProcessName == 'updatingStatus'
|
|
||||||
|| index.onGoingProcessName == 'updatingBalance'
|
|
||||||
"> Updating Wallet... </span>
|
|
||||||
<span translate ng-show="index.onGoingProcessName == 'scanning'">Scanning Wallet funds...</span>
|
|
||||||
<span translate ng-show="index.onGoingProcessName == 'recreating'">Recreating Wallet...</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="onGoingProcess" ng-show="home.onGoingProcess && !index.anyOnGoingProces && !index.isOffline">
|
|
||||||
<div class="onGoingProcess-content" ng-style="{'background-color':index.backgroundColor}">
|
|
||||||
<div class="spinner">
|
|
||||||
<div class="rect1"></div>
|
|
||||||
<div class="rect2"></div>
|
|
||||||
<div class="rect3"></div>
|
|
||||||
<div class="rect4"></div>
|
|
||||||
<div class="rect5"></div>
|
|
||||||
</div>
|
|
||||||
{{home.onGoingProcess|translate}}...
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="oh" ng-show="!index.noFocusedWallet">
|
|
||||||
|
|
||||||
<div id="walletHome" class="walletHome tab-view tab-in">
|
|
||||||
<div class="oh">
|
|
||||||
<div class="amount" ng-style="{'background-color':index.backgroundColor}">
|
|
||||||
<div ng-if="!index.anyOnGoingProcess && !index.notAuthorized">
|
|
||||||
<div ng-show="index.updateError" ng-click='index.openWallet()'>
|
|
||||||
<span translate>Could not update Wallet</span>
|
|
||||||
<br><span translate>Tap to retry</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-show="index.walletScanStatus == 'error'" ng-click='index.retryScan()'>
|
|
||||||
<span translate>Scan status finished with error</span>
|
|
||||||
<br><span translate>Tap to retry</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-show="!index.updateError && index.walletScanStatus != 'error'">
|
|
||||||
<strong class="size-36">{{index.totalBalanceStr}}</strong>
|
|
||||||
<div class="size-14"
|
|
||||||
ng-if="index.totalBalanceAlternative">
|
|
||||||
{{index.totalBalanceAlternative}} {{index.alternativeIsoCode}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-if="index.anyOnGoingProcess">
|
|
||||||
<div class="size-36">
|
|
||||||
<strong>...</strong>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div> <!-- amount -->
|
|
||||||
|
|
||||||
<div class="pr columns line-b">
|
|
||||||
<div class="avatar-wallet left"
|
|
||||||
ng-style="{'background-color':index.backgroundColor}">{{index.walletName | limitTo: 1}}
|
|
||||||
</div>
|
|
||||||
<div class="right">
|
|
||||||
<a ng-click="$root.go('preferences')" class="button outline light-gray tiny m0">
|
|
||||||
<i class="fi-widget size-18 vm"></i>
|
|
||||||
<span class="show-for-medium-up" translate>Preferences</span>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="wallet-info" ng-click="openCopayersModal(index.copayers, index.copayerId)">
|
|
||||||
<p class="m0">
|
|
||||||
{{index.m}} <span translate>of</span> {{index.n}}
|
|
||||||
</p>
|
|
||||||
<div class="size-12 text-gray">
|
|
||||||
<span ng-if="index.n > 1" translate>Multisignature wallet </span>
|
|
||||||
<span ng-if="index.n == 1" translate>Personal Wallet</span>
|
|
||||||
<span ng-if="index.network != 'livenet'"> - Testnet</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div> <!-- oh -->
|
|
||||||
|
|
||||||
|
|
||||||
<div class="m20t" ng-show="index.notAuthorized && ! index.anyOnGoingProcess">
|
|
||||||
<div class="text-center text-warning">
|
|
||||||
<i class="fi-alert"></i>
|
|
||||||
<span translate>
|
|
||||||
WARNING: Wallet not registered
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div class="text-center text-gray m15r m15l" translate>
|
|
||||||
This wallet is not registered at the given Bitcore Wallet Service (BWS). You can recreate it from the local information.
|
|
||||||
</div>
|
|
||||||
<div class="text-center m10t ">
|
|
||||||
<span class="button outline dark-gray tiny"
|
|
||||||
ng-click="index.recreate()">
|
|
||||||
<span translate>Recreate</span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-if="index.txps[0]">
|
|
||||||
<div ng-show="index.requiresMultipleSignatures">
|
|
||||||
<h4 class="title m0" translate>Spend proposals</h4>
|
|
||||||
<div class="last-transactions pr" ng-repeat="tx in index.txps"
|
|
||||||
ng-include="'views/includes/transaction.html'">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="text-gray text-center size-12 p10t"
|
|
||||||
ng-show="index.lockedBalance && !index.updatingStatus">
|
|
||||||
<span translate>Total Locked Balance</span>:
|
|
||||||
<b>{{index.lockedBalance}} {{index.unitName}} </b>
|
|
||||||
<span> {{index.lockedBalanceAlternative}}
|
|
||||||
{{index.alternativeIsoCode}} </span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-show="!index.requiresMultipleSignatures">
|
|
||||||
<h4 class="title m0" translate>Unsent transactions</h4>
|
|
||||||
<div class="last-transactions pr" ng-repeat="tx in index.txps"
|
|
||||||
ng-include="'views/includes/transaction.html'">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
|
|
||||||
receive
|
|
||||||
|
|
||||||
-->
|
|
||||||
<div id="receive" class="receive tab-view">
|
|
||||||
|
|
||||||
<div ng-show="index.needsBackup && !home.skipBackup" class="p60t row text-center">
|
|
||||||
<div class="text-warning text-bold m15b">
|
|
||||||
<i class="fi-alert"></i>
|
|
||||||
<span translate>
|
|
||||||
WARNING: Backup needed
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div class="text-gray m15h" translate>
|
|
||||||
Before receiving funds, it is highly recommended you backup your wallet keys.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="small-6 columns m20t">
|
|
||||||
<span class="button expand outline dark-gray tiny"
|
|
||||||
ng-click="home.skipBackup = true">
|
|
||||||
<span translate>SKIP BACKUP</span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div class="small-6 columns m20t">
|
|
||||||
<span class="button black expand radius tiny"
|
|
||||||
ng-click="$root.go('backup')" ng-style="{'background-color':index.backgroundColor}" >
|
|
||||||
<span translate>Backup now</span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div ng-show="!index.needsBackup || home.skipBackup">
|
|
||||||
<div class="row">
|
|
||||||
<!-- Address-->
|
|
||||||
<div class="large-12 columns">
|
|
||||||
<h2 class="text-center m10t" translate>My Bitcoin address</h2>
|
|
||||||
<div >
|
|
||||||
<div class="text-center" ng-click="home.copyAddress(home.addr)">
|
|
||||||
<qrcode size="220" data="bitcoin:{{home.addr}}"></qrcode>
|
|
||||||
<div ng-show="home.generatingAddress" style="position:relative; top:-226px; height:0px">
|
|
||||||
<div style="height:220px; width:220px; margin:auto; background: url(img/qr.png) white">
|
|
||||||
<div class="spinner" style="margin-top:80px">
|
|
||||||
<div class="rect1"></div>
|
|
||||||
<div class="rect2"></div>
|
|
||||||
<div class="rect3"></div>
|
|
||||||
<div class="rect4"></div>
|
|
||||||
<div class="rect5"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="m10t" >
|
|
||||||
<h4 ng-class="{'enable_text_select': !index.isCordova}" class="size-12">
|
|
||||||
{{home.generatingAddress ? '...' : home.addr}}
|
|
||||||
|
|
||||||
</h4>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="m10t text-center" ng-show="index.isCordova">
|
|
||||||
<span class="button outline dark-gray tiny"
|
|
||||||
ng-click="home.shareAddress(home.addr)">
|
|
||||||
<i class="fi-share"></i>
|
|
||||||
<span translate>Share address</span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div class="line-t size-12" translate>
|
|
||||||
Share this with anyone to have them send you payments. To protect your privacy, new addresses are generated automatically once you use them.
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row m20t">
|
|
||||||
<div class="large-12 columns">
|
|
||||||
<button class="button black expand radius" ng-click="home.setNewAddress()"
|
|
||||||
ng-style="{'background-color':index.backgroundColor}" ng-disabled="home.blockUx || index.isOffline ||home.generatingAddress" translate>
|
|
||||||
Generate new address
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<!--
|
|
||||||
|
|
||||||
send
|
|
||||||
|
|
||||||
-->
|
|
||||||
<div id="send" class="send tab-view">
|
|
||||||
<div ng-show="index.lockedBalance">
|
|
||||||
<h4 class="title m0">
|
|
||||||
<div class="left">
|
|
||||||
<i class="fi-info size-36 m10r lh"></i>
|
|
||||||
</div>
|
|
||||||
<div class="size-12">
|
|
||||||
<span class="db text-bold">
|
|
||||||
<span translate>Available Balance</span>:
|
|
||||||
{{index.availableBalanceStr }}
|
|
||||||
</span>
|
|
||||||
<span class="text-gray">
|
|
||||||
{{index.lockedBalanceStr}}
|
|
||||||
<span translate>in pending transactions</span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</h4>
|
|
||||||
</div>
|
|
||||||
<div class="row m20t">
|
|
||||||
<div class="large-12 large-centered columns">
|
|
||||||
<form name="sendForm" ng-submit="home.submitForm()" ng-disabled="home.blockUx || home.onGoingProcess" novalidate>
|
|
||||||
<div class="box-notification" ng-show="home.error" ng-click="home.resetError()">
|
|
||||||
<span class="text-warning">
|
|
||||||
{{home.error|translate}}
|
|
||||||
</span>
|
|
||||||
<a class="close-notification text-warning">×</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-hide="home._paypro || home.hideAddress">
|
|
||||||
<div class="row collapse">
|
|
||||||
|
|
||||||
<label for="address" class="left" >
|
|
||||||
<span translate>To</span>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<span ng-hide="sendForm.address.$pristine">
|
|
||||||
<span class="has-error right size-12" ng-show="sendForm.address.$invalid && _address">
|
|
||||||
<i class="icon-close-circle size-14"></i>
|
|
||||||
<span class="vm" translate>Not valid</span>
|
|
||||||
</span>
|
|
||||||
<small class="right text-primary" ng-show="!sendForm.address.$invalid">
|
|
||||||
<i class="icon-checkmark-circle size-14"></i>
|
|
||||||
</small>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="input">
|
|
||||||
<input type="text" id="address" name="address" ng-disabled="home.blockUx || home.lockAddress" ng-attr-placeholder="{{'Bitcoin address'|translate}}" ng-model="_address" valid-address required ng-focus="home.formFocus('address')" ng-blur="home.formFocus(false)">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div ng-show="home._paypro && !home.hideAddress">
|
|
||||||
<div class="row collapse" ng-click="home.openPPModal(home._paypro)">
|
|
||||||
|
|
||||||
<label for="domain">
|
|
||||||
<span translate>Payment to</span>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<div class="input block">
|
|
||||||
<input class="p45li" type="text" id="domain" name="domain" ng-model="home._paypro.domain" ng-disabled="1">
|
|
||||||
<i ng-show="home._paypro.verified" class="fi-lock color-greeni"></i>
|
|
||||||
<i ng-show="!home._paypro.verified" class="fi-unlock color-yellowi"></i>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row" ng-init="home.hideAlternative()" ng-hide="home.hideAmount">
|
|
||||||
<div class="large-12 medium-12 columns">
|
|
||||||
<div class="right" ng-hide="sendForm.amount.$pristine && !sendForm.amount.$modelValue ">
|
|
||||||
<span class="has-error right size-12" ng-if="sendForm.amount.$invalid">
|
|
||||||
<i class="icon-close-circle size-14"></i>
|
|
||||||
<span clas="vm" translate>Not valid</span>
|
|
||||||
</span>
|
|
||||||
<small class="text-primary right" ng-if="!sendForm.amount.$invalid">
|
|
||||||
<i class="icon-checkmark-circle size-14"></i>
|
|
||||||
</small>
|
|
||||||
</div>
|
|
||||||
<div ng-if="!home.canShowAlternative()">
|
|
||||||
<label for="amount">
|
|
||||||
<span translate>Amount</span>
|
|
||||||
</label>
|
|
||||||
<div class="input">
|
|
||||||
<input type="number" id="amount" ng-disabled="home.blockUx || home.lockAmount" name="amount" ng-attr-placeholder="{{'Amount'|translate}}" ng-minlength="0.00000001" ng-maxlength="10000000000" ng-model="_amount" valid-amount required autocomplete="off" ng-focus="home.formFocus('amount')" ng-blur="home.formFocus(false)">
|
|
||||||
<input type="number" id="alternative" name="alternative" ng-model="_alternative" style="display:none">
|
|
||||||
<a class="postfix" ng-click="home.showAlternative()">{{home.unitName}}</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div ng-if="home.canShowAlternative()">
|
|
||||||
<label for="alternative"><span translate>Amount in</span> {{ home.alternativeName }}
|
|
||||||
</label>
|
|
||||||
<div class="input">
|
|
||||||
<input type="number" id="alternative" ng-disabled="home.blockUx || !home.isRateAvailable || home.lockAmount" name="alternative" ng-attr-placeholder="{{'Amount'|translate}}" ng-model="_alternative" requiredautocomplete="off" ng-focus="home.formFocus('amount')" ng-blur="home.formFocus(false)">
|
|
||||||
<input type="number" id="amount" name="amount" ng-model="_amount" style="display:none">
|
|
||||||
<a class="postfix" ng-click="home.hideAlternative()"> {{ home.alternativeIsoCode }}</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="large-12 columns">
|
|
||||||
<label for="comment"><span translate>Note</span>
|
|
||||||
<small translate ng-hide="!sendForm.comment.$pristine">optional</small>
|
|
||||||
<small translate class="has-error" ng-show="sendForm.comment.$invalid && !sendForm.comment.$pristine">too long!</small>
|
|
||||||
</label>
|
|
||||||
<div class="input">
|
|
||||||
<textarea id="comment" ng-disabled="home.blockUx" name="comment"
|
|
||||||
ng-maxlength="100" ng-model="_comment" ng-focus="home.formFocus('msg')"
|
|
||||||
ng-blur="home.formFocus(false)"></textarea>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row" ng-show="!home.onGoingProcess">
|
|
||||||
<div class="large-6 medium-6 small-6 columns" ng-show="!home.blockUx && (home._paypro || home.lockAddress)">
|
|
||||||
<a ng-click="home.resetForm(sendForm)" class="button expand outline dark-gray" translate>Cancel</a>
|
|
||||||
</div>
|
|
||||||
<div class="columns" ng-class="{'small-6 medium-6 large-6':(home._paypro || home.lockAddress)}">
|
|
||||||
<button type="submit" class="button black radius expand" ng-disabled="sendForm.$invalid || home.blockUx || index.isOffline"
|
|
||||||
ng-style="{'background-color':index.backgroundColor}" translate>
|
|
||||||
Send
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- end of row -->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
|
|
||||||
history
|
|
||||||
|
|
||||||
-->
|
|
||||||
<div id="history" class="history tab-view">
|
|
||||||
<div class="row m20t" ng-show="!index.txHistory[0] && !index.updatingTxHistory">
|
|
||||||
<div class="large-12 columns">
|
|
||||||
<div class="oh text-center">
|
|
||||||
<span ng-show="index.txHistoryError && !index.notAuthorized" ng-click='index.updateTxHistory()'>
|
|
||||||
<span translate>Could not fetch transaction history</span>
|
|
||||||
<br> <span translate>Tap to retry</span>
|
|
||||||
</span>
|
|
||||||
<span ng-if="!index.txHistoryError" translate>
|
|
||||||
No transactions yet
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div ng-show="index.txHistory[0]" class="scroll">
|
|
||||||
<div ng-repeat="btx in index.txHistory"
|
|
||||||
ng-click="home.openTxModal(btx)"
|
|
||||||
class="row collapse last-transactions-content">
|
|
||||||
<div class="large-3 medium-3 small-3 columns">
|
|
||||||
<span class="label tu radius" ng-show="btx.action == 'received'"
|
|
||||||
ng-style="{'background-color':index.backgroundColor}" translate>Received</span>
|
|
||||||
<span class="label tu gray radius" ng-show="btx.action == 'sent'" translate>Sent</span>
|
|
||||||
<span class="label tu gray radius" ng-show="btx.action == 'moved'" translate>Moved</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="large-5 medium-5 small-5 columns">
|
|
||||||
<span class="size-16">
|
|
||||||
<span ng-if="btx.action == 'received'">+</span>
|
|
||||||
<span ng-if="btx.action == 'sent'">-</span>
|
|
||||||
{{btx.amountStr}}
|
|
||||||
{{home.getUnitName()}}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div class="large-4 medium-4 small-4 columns text-right">
|
|
||||||
<div class="m5t size-12 text-gray">
|
|
||||||
<time ng-if="btx.time">{{btx.time * 1000 | amTimeAgo}}</time>
|
|
||||||
<span translate class="text-warning"
|
|
||||||
ng-show="!btx.time && (!btx.confirmations || btx.confirmations == 0)">
|
|
||||||
Unconfirmed
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="size-14 text-gray columns m5t" ng-if="btx.message || btx.addressTo">
|
|
||||||
{{btx.message || btx.addressTo}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="m20t columns text-center" ng-show="index.txHistoryPaging || index.updatingTxHistory">
|
|
||||||
<button class="outline light-gray small expand m0"
|
|
||||||
ng-click="index.updateTxHistory(index.skipHistory)"
|
|
||||||
ng-if="!index.updatingTxHistory">
|
|
||||||
<span translate>More</span> <i class="icon-arrow-down4 ng-scope"></i>
|
|
||||||
</button>
|
|
||||||
<div class="spinner" ng-if="index.updatingTxHistory">
|
|
||||||
<div class="rect1"></div>
|
<div class="rect1"></div>
|
||||||
<div class="rect2"></div>
|
<div class="rect2"></div>
|
||||||
<div class="rect3"></div>
|
<div class="rect3"></div>
|
||||||
<div class="rect4"></div>
|
<div class="rect4"></div>
|
||||||
<div class="rect5"></div>
|
<div class="rect5"></div>
|
||||||
</div>
|
</div>
|
||||||
|
<span translate>Reconnecting to Wallet Service...</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
<div class="onGoingProcess" ng-show="index.anyOnGoingProcess && !index.isOffline">
|
||||||
|
<div class="onGoingProcess-content" ng-style="{'background-color':index.backgroundColor}">
|
||||||
|
<div class="spinner">
|
||||||
|
<div class="rect1"></div>
|
||||||
|
<div class="rect2"></div>
|
||||||
|
<div class="rect3"></div>
|
||||||
|
<div class="rect4"></div>
|
||||||
|
<div class="rect5"></div>
|
||||||
|
</div>
|
||||||
|
<span translate ng-show="
|
||||||
|
index.onGoingProcessName == 'openingWallet'
|
||||||
|
|| index.onGoingProcessName == 'updatingStatus'
|
||||||
|
|| index.onGoingProcessName == 'updatingBalance'
|
||||||
|
|| index.onGoingProcessName == 'updatingPendingTxps'
|
||||||
|
"> Updating Wallet... </span>
|
||||||
|
<span translate ng-show="index.onGoingProcessName == 'scanning'">Scanning Wallet funds...</span>
|
||||||
|
<span translate ng-show="index.onGoingProcessName == 'recreating'">Recreating Wallet...</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="onGoingProcess" ng-show="home.onGoingProcess && !index.anyOnGoingProces && !index.isOffline">
|
||||||
|
<div class="onGoingProcess-content" ng-style="{'background-color':index.backgroundColor}">
|
||||||
|
<div class="spinner">
|
||||||
|
<div class="rect1"></div>
|
||||||
|
<div class="rect2"></div>
|
||||||
|
<div class="rect3"></div>
|
||||||
|
<div class="rect4"></div>
|
||||||
|
<div class="rect5"></div>
|
||||||
|
</div>
|
||||||
|
{{home.onGoingProcess|translate}}...
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="oh" ng-show="!index.noFocusedWallet">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
WalletHome
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<div id="walletHome" class="walletHome tab-view tab-in">
|
||||||
|
<div class="oh">
|
||||||
|
<div class="amount" ng-style="{'background-color':index.backgroundColor}">
|
||||||
|
<div ng-if="!index.anyOnGoingProcess && !index.notAuthorized">
|
||||||
|
<div ng-show="index.updateError" ng-click='index.openWallet()'>
|
||||||
|
<span translate>Could not update Wallet</span>
|
||||||
|
<br><span translate>Tap to retry</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-show="index.walletScanStatus == 'error'" ng-click='index.retryScan()'>
|
||||||
|
<span translate>Scan status finished with error</span>
|
||||||
|
<br><span translate>Tap to retry</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-show="!index.updateError && index.walletScanStatus != 'error'">
|
||||||
|
<strong class="size-36">{{index.totalBalanceStr}}</strong>
|
||||||
|
<div class="size-14"
|
||||||
|
ng-if="index.totalBalanceAlternative">
|
||||||
|
{{index.totalBalanceAlternative}} {{index.alternativeIsoCode}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-if="index.anyOnGoingProcess">
|
||||||
|
<div class="size-36">
|
||||||
|
<strong>...</strong>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div> <!-- amount -->
|
||||||
|
|
||||||
|
<div class="pr columns line-b">
|
||||||
|
<div class="avatar-wallet left"
|
||||||
|
ng-style="{'background-color':index.backgroundColor}">{{index.walletName | limitTo: 1}}
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<a ng-click="$root.go('preferences')" class="button outline light-gray tiny m0">
|
||||||
|
<i class="fi-widget size-18 vm"></i>
|
||||||
|
<span class="show-for-medium-up" translate>Preferences</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="wallet-info" ng-click="openCopayersModal(index.copayers, index.copayerId)">
|
||||||
|
<p class="m0">
|
||||||
|
{{index.m}} <span translate>of</span> {{index.n}}
|
||||||
|
</p>
|
||||||
|
<div class="size-12 text-gray">
|
||||||
|
<span ng-if="index.n > 1" translate>Multisignature wallet </span>
|
||||||
|
<span ng-if="index.n == 1" translate>Personal Wallet</span>
|
||||||
|
<span ng-if="index.network != 'livenet'"> - Testnet</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div> <!-- oh -->
|
||||||
|
|
||||||
|
|
||||||
|
<div class="m20t" ng-show="index.notAuthorized && ! index.anyOnGoingProcess">
|
||||||
|
<div class="text-center text-warning">
|
||||||
|
<i class="fi-alert"></i>
|
||||||
|
<span translate>
|
||||||
|
WARNING: Wallet not registered
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="text-center text-gray m15r m15l" translate>
|
||||||
|
This wallet is not registered at the given Bitcore Wallet Service (BWS). You can recreate it from the local information.
|
||||||
|
</div>
|
||||||
|
<div class="text-center m10t ">
|
||||||
|
<span class="button outline dark-gray tiny"
|
||||||
|
ng-click="index.recreate()">
|
||||||
|
<span translate>Recreate</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-if="index.txps[0]">
|
||||||
|
<div ng-show="index.requiresMultipleSignatures">
|
||||||
|
<h4 class="title m0" translate>Spend proposals</h4>
|
||||||
|
<div class="last-transactions pr" ng-repeat="tx in index.txps"
|
||||||
|
ng-include="'views/includes/transaction.html'">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="text-gray text-center size-12 p10t"
|
||||||
|
ng-show="index.lockedBalance && !index.updatingStatus">
|
||||||
|
<span translate>Total Locked Balance</span>:
|
||||||
|
<b>{{index.lockedBalance}} {{index.unitName}} </b>
|
||||||
|
<span> {{index.lockedBalanceAlternative}}
|
||||||
|
{{index.alternativeIsoCode}} </span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-show="!index.requiresMultipleSignatures">
|
||||||
|
<h4 class="title m0" translate>Unsent transactions</h4>
|
||||||
|
<div class="last-transactions pr" ng-repeat="tx in index.txps"
|
||||||
|
ng-include="'views/includes/transaction.html'">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="extra-margin-bottom"></div>
|
||||||
|
</div> <!-- END WalletHome -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
receive
|
||||||
|
|
||||||
|
-->
|
||||||
|
<div id="receive" class="receive tab-view">
|
||||||
|
|
||||||
|
<div ng-show="index.needsBackup && !home.skipBackup" class="p60t row text-center">
|
||||||
|
<div class="text-warning text-bold m15b">
|
||||||
|
<i class="fi-alert"></i>
|
||||||
|
<span translate>
|
||||||
|
WARNING: Backup needed
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="text-gray m15h" translate>
|
||||||
|
Before receiving funds, it is highly recommended you backup your wallet keys.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="small-6 columns m20t">
|
||||||
|
<span class="button expand outline dark-gray tiny"
|
||||||
|
ng-click="home.skipBackup = true">
|
||||||
|
<span translate>SKIP BACKUP</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="small-6 columns m20t">
|
||||||
|
<span class="button black expand radius tiny"
|
||||||
|
ng-click="$root.go('backup')" ng-style="{'background-color':index.backgroundColor}" >
|
||||||
|
<span translate>Backup now</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div ng-show="!index.needsBackup || home.skipBackup">
|
||||||
|
<div class="row">
|
||||||
|
<!-- Address-->
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h2 class="text-center m10t" translate>My Bitcoin address</h2>
|
||||||
|
<div >
|
||||||
|
<div class="text-center" ng-click="home.copyAddress(home.addr)">
|
||||||
|
<qrcode size="220" data="bitcoin:{{home.addr}}"></qrcode>
|
||||||
|
<div ng-show="home.generatingAddress" style="position:relative; top:-226px; height:0px">
|
||||||
|
<div style="height:220px; width:220px; margin:auto; background: url(img/qr.png) white">
|
||||||
|
<div class="spinner" style="margin-top:80px">
|
||||||
|
<div class="rect1"></div>
|
||||||
|
<div class="rect2"></div>
|
||||||
|
<div class="rect3"></div>
|
||||||
|
<div class="rect4"></div>
|
||||||
|
<div class="rect5"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="m10t" >
|
||||||
|
<h4 ng-class="{'enable_text_select': !index.isCordova}" class="size-12">
|
||||||
|
{{home.generatingAddress ? '...' : home.addr}}
|
||||||
|
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="m10t text-center" ng-show="index.isCordova">
|
||||||
|
<span class="button outline dark-gray tiny"
|
||||||
|
ng-click="home.shareAddress(home.addr)">
|
||||||
|
<i class="fi-share"></i>
|
||||||
|
<span translate>Share address</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="line-t size-12" translate>
|
||||||
|
Share this with anyone to have them send you payments. To protect your privacy, new addresses are generated automatically once you use them.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row m20t">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<button class="button black expand radius" ng-click="home.setNewAddress()"
|
||||||
|
ng-style="{'background-color':index.backgroundColor}" ng-disabled="home.blockUx || index.isOffline ||home.generatingAddress" translate>
|
||||||
|
Generate new address
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="extra-margin-bottom"></div>
|
||||||
|
</div> <!-- END Receive -->
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
send
|
||||||
|
|
||||||
|
-->
|
||||||
|
<div id="send" class="send tab-view">
|
||||||
|
<div ng-show="index.lockedBalance">
|
||||||
|
<h4 class="title m0">
|
||||||
|
<div class="left">
|
||||||
|
<i class="fi-info size-36 m10r lh"></i>
|
||||||
|
</div>
|
||||||
|
<div class="size-12">
|
||||||
|
<span class="db text-bold">
|
||||||
|
<span translate>Available Balance</span>:
|
||||||
|
{{index.availableBalanceStr }}
|
||||||
|
</span>
|
||||||
|
<span class="text-gray">
|
||||||
|
{{index.lockedBalanceStr}}
|
||||||
|
<span translate>in pending transactions</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div class="row m20t">
|
||||||
|
<div class="large-12 large-centered columns">
|
||||||
|
<form name="sendForm" ng-submit="home.submitForm()" ng-disabled="home.blockUx || home.onGoingProcess" novalidate>
|
||||||
|
<div class="box-notification" ng-show="home.error" ng-click="home.resetError()">
|
||||||
|
<span class="text-warning">
|
||||||
|
{{home.error|translate}}
|
||||||
|
</span>
|
||||||
|
<a class="close-notification text-warning">×</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-hide="home._paypro || home.hideAddress">
|
||||||
|
<div class="row collapse">
|
||||||
|
|
||||||
|
<label for="address" class="left" >
|
||||||
|
<span translate>To</span>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<span ng-hide="sendForm.address.$pristine">
|
||||||
|
<span class="has-error right size-12" ng-show="sendForm.address.$invalid && _address">
|
||||||
|
<i class="icon-close-circle size-14"></i>
|
||||||
|
<span class="vm" translate>Not valid</span>
|
||||||
|
</span>
|
||||||
|
<small class="right text-primary" ng-show="!sendForm.address.$invalid">
|
||||||
|
<i class="icon-checkmark-circle size-14"></i>
|
||||||
|
</small>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="input">
|
||||||
|
<input type="text" id="address" name="address" ng-disabled="home.blockUx || home.lockAddress" ng-attr-placeholder="{{'Bitcoin address'|translate}}" ng-model="_address" valid-address required ng-focus="home.formFocus('address')" ng-blur="home.formFocus(false)">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div ng-show="home._paypro && !home.hideAddress">
|
||||||
|
<div class="row collapse" ng-click="home.openPPModal(home._paypro)">
|
||||||
|
|
||||||
|
<label for="domain">
|
||||||
|
<span translate>Payment to</span>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<div class="input block">
|
||||||
|
<input class="p45li" type="text" id="domain" name="domain" ng-model="home._paypro.domain" ng-disabled="1">
|
||||||
|
<i ng-show="home._paypro.verified" class="fi-lock color-greeni"></i>
|
||||||
|
<i ng-show="!home._paypro.verified" class="fi-unlock color-yellowi"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row" ng-init="home.hideAlternative()" ng-hide="home.hideAmount">
|
||||||
|
<div class="large-12 medium-12 columns">
|
||||||
|
<div class="right" ng-hide="sendForm.amount.$pristine && !sendForm.amount.$modelValue ">
|
||||||
|
<span class="has-error right size-12" ng-if="sendForm.amount.$invalid">
|
||||||
|
<i class="icon-close-circle size-14"></i>
|
||||||
|
<span clas="vm" translate>Not valid</span>
|
||||||
|
</span>
|
||||||
|
<small class="text-primary right" ng-if="!sendForm.amount.$invalid">
|
||||||
|
<i class="icon-checkmark-circle size-14"></i>
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
|
<div ng-if="!home.canShowAlternative()">
|
||||||
|
<label for="amount">
|
||||||
|
<span translate>Amount</span>
|
||||||
|
</label>
|
||||||
|
<div class="input">
|
||||||
|
<input type="number" id="amount" ng-disabled="home.blockUx || home.lockAmount" name="amount" ng-attr-placeholder="{{'Amount'|translate}}" ng-minlength="0.00000001" ng-maxlength="10000000000" ng-model="_amount" valid-amount required autocomplete="off" ng-focus="home.formFocus('amount')" ng-blur="home.formFocus(false)">
|
||||||
|
<input type="number" id="alternative" name="alternative" ng-model="_alternative" style="display:none">
|
||||||
|
<a class="postfix" ng-click="home.showAlternative()">{{home.unitName}}</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div ng-if="home.canShowAlternative()">
|
||||||
|
<label for="alternative"><span translate>Amount in</span> {{ home.alternativeName }}
|
||||||
|
</label>
|
||||||
|
<div class="input">
|
||||||
|
<input type="number" id="alternative" ng-disabled="home.blockUx || !home.isRateAvailable || home.lockAmount" name="alternative" ng-attr-placeholder="{{'Amount'|translate}}" ng-model="_alternative" requiredautocomplete="off" ng-focus="home.formFocus('amount')" ng-blur="home.formFocus(false)">
|
||||||
|
<input type="number" id="amount" name="amount" ng-model="_amount" style="display:none">
|
||||||
|
<a class="postfix" ng-click="home.hideAlternative()"> {{ home.alternativeIsoCode }}</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<label for="comment"><span translate>Note</span>
|
||||||
|
<small translate ng-hide="!sendForm.comment.$pristine">optional</small>
|
||||||
|
<small translate class="has-error" ng-show="sendForm.comment.$invalid && !sendForm.comment.$pristine">too long!</small>
|
||||||
|
</label>
|
||||||
|
<div class="input">
|
||||||
|
<textarea id="comment" ng-disabled="home.blockUx" name="comment"
|
||||||
|
ng-maxlength="500" ng-model="_comment" ng-focus="home.formFocus('msg')"
|
||||||
|
ng-blur="home.formFocus(false)"></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row" ng-show="!home.onGoingProcess">
|
||||||
|
<div class="large-6 medium-6 small-6 columns" ng-show="!home.blockUx && (home._paypro || home.lockAddress)">
|
||||||
|
<a ng-click="home.resetForm(sendForm)" class="button expand outline dark-gray" translate>Cancel</a>
|
||||||
|
</div>
|
||||||
|
<div class="columns" ng-class="{'small-6 medium-6 large-6':(home._paypro || home.lockAddress)}">
|
||||||
|
<button type="submit" class="button black radius expand" ng-disabled="sendForm.$invalid || home.blockUx || index.isOffline"
|
||||||
|
ng-style="{'background-color':index.backgroundColor}" translate>
|
||||||
|
Send
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="extra-margin-bottom"></div>
|
||||||
|
</div> <!-- END Send -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
history
|
||||||
|
|
||||||
|
-->
|
||||||
|
<div id="history" class="history tab-view">
|
||||||
|
<div class="row m20t" ng-show="!index.txHistory[0] && !index.updatingTxHistory">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<div class="oh text-center">
|
||||||
|
<span ng-show="index.txHistoryError && !index.notAuthorized" ng-click='index.updateTxHistory()'>
|
||||||
|
<span translate>Could not fetch transaction history</span>
|
||||||
|
<br> <span translate>Tap to retry</span>
|
||||||
|
</span>
|
||||||
|
<span ng-if="!index.txHistoryError" translate>
|
||||||
|
No transactions yet
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div ng-show="index.txHistory[0]" class="scroll">
|
||||||
|
<div ng-repeat="btx in index.txHistory"
|
||||||
|
ng-click="home.openTxModal(btx)"
|
||||||
|
class="row collapse last-transactions-content">
|
||||||
|
<div class="large-3 medium-3 small-3 columns">
|
||||||
|
<span class="label tu radius" ng-show="btx.action == 'received'"
|
||||||
|
ng-style="{'background-color':index.backgroundColor}" translate>Received</span>
|
||||||
|
<span class="label tu gray radius" ng-show="btx.action == 'sent'" translate>Sent</span>
|
||||||
|
<span class="label tu gray radius" ng-show="btx.action == 'moved'" translate>Moved</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="large-5 medium-5 small-5 columns">
|
||||||
|
<span class="size-16">
|
||||||
|
<span ng-if="btx.action == 'received'">+</span>
|
||||||
|
<span ng-if="btx.action == 'sent'">-</span>
|
||||||
|
{{btx.amountStr}}
|
||||||
|
{{home.getUnitName()}}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="large-4 medium-4 small-4 columns text-right">
|
||||||
|
<div class="m5t size-12 text-gray">
|
||||||
|
<time ng-if="btx.time">{{btx.time * 1000 | amTimeAgo}}</time>
|
||||||
|
<span translate class="text-warning"
|
||||||
|
ng-show="!btx.time && (!btx.confirmations || btx.confirmations == 0)">
|
||||||
|
Unconfirmed
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="size-14 text-gray columns m5t" ng-if="btx.message || btx.addressTo">
|
||||||
|
{{btx.message || btx.addressTo}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="m20t columns text-center" ng-show="index.txHistoryPaging || index.updatingTxHistory">
|
||||||
|
<button class="outline light-gray small expand m0"
|
||||||
|
ng-click="index.updateTxHistory(index.skipHistory)"
|
||||||
|
ng-if="!index.updatingTxHistory">
|
||||||
|
<span translate>More</span> <i class="icon-arrow-down4 ng-scope"></i>
|
||||||
|
</button>
|
||||||
|
<div class="spinner" ng-if="index.updatingTxHistory">
|
||||||
|
<div class="rect1"></div>
|
||||||
|
<div class="rect2"></div>
|
||||||
|
<div class="rect3"></div>
|
||||||
|
<div class="rect4"></div>
|
||||||
|
<div class="rect5"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="extra-margin-bottom"></div>
|
||||||
|
</div> <!-- END History -->
|
||||||
|
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="extra-margin-bottom"></div>
|
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,7 @@ _:-ms-fullscreen, :root .main {
|
||||||
@-moz-document url-prefix() {
|
@-moz-document url-prefix() {
|
||||||
.extra-margin-bottom {
|
.extra-margin-bottom {
|
||||||
display: block;
|
display: block;
|
||||||
height: 75px;
|
height: 45px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
clear: both;
|
clear: both;
|
||||||
}
|
}
|
||||||
|
|
@ -359,7 +359,7 @@ ul.off-canvas-list li a:hover {
|
||||||
background: none;
|
background: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
a, button, .button, input, textarea, select, .reveal-modal {
|
a, button, .button, input, textarea, select {
|
||||||
-webkit-box-shadow: none !important;
|
-webkit-box-shadow: none !important;
|
||||||
-moz-box-shadow: none !important;
|
-moz-box-shadow: none !important;
|
||||||
box-shadow: none !important;
|
box-shadow: none !important;
|
||||||
|
|
@ -555,23 +555,17 @@ a.pin-button:active {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
top: 0;
|
overflow-y: auto;
|
||||||
height: 100%;
|
|
||||||
overflow: auto;
|
|
||||||
padding-bottom: 20px;
|
padding-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.modal.fade .modal-dialog,
|
.reveal-modal.animated.fadeOutUp,
|
||||||
.modal.in .modal-dialog,
|
.reveal-modal.animated.slideInUp,
|
||||||
.reveal-modal-bg,
|
.reveal-modal.animated.slideInDown {
|
||||||
.reveal-modal-bg .fade .in,
|
-webkit-animation-duration: 0.3s;
|
||||||
.reveal-modal,
|
animation-duration: 0.3s;
|
||||||
.reveal-modal .fade,
|
}
|
||||||
.reveal-modal .fade .out,
|
|
||||||
.reveal-modal .fade .in,
|
|
||||||
.reveal-modal.fade.full.in,
|
|
||||||
.reveal-modal.fade.full.out,
|
|
||||||
.reveal-modal.fade.full,
|
|
||||||
input[type="color"],
|
input[type="color"],
|
||||||
input[type="date"],
|
input[type="date"],
|
||||||
input[type="datetime-local"],
|
input[type="datetime-local"],
|
||||||
|
|
@ -691,7 +685,7 @@ textarea:focus
|
||||||
color: #B7C2CD;
|
color: #B7C2CD;
|
||||||
}
|
}
|
||||||
|
|
||||||
.animation-left, .animation-right {
|
.animation-slide {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
display: block;
|
display: block;
|
||||||
|
|
@ -704,52 +698,80 @@ textarea:focus
|
||||||
transform: translate3d(0, 0, 0);
|
transform: translate3d(0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
.animation-left.ng-enter, .animation-left.ng-leave,
|
.animation-slide.ng-enter,
|
||||||
.animation-right.ng-enter, .animation-right.ng-leave {
|
.animation-slide.ng-leave {
|
||||||
-webkit-transition: all ease 300ms;
|
-webkit-transition: 0.25s ease all;
|
||||||
transition: all ease 300ms;
|
transition: 0.25s ease all;
|
||||||
|
}
|
||||||
|
|
||||||
|
.animation-slide.ng-enter.ng-enter-active {
|
||||||
|
-webkit-transform: translate3d(0, 0, 0);
|
||||||
|
transform: translate3d(0, 0, 0);
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.animation-slide.ng-leave {
|
||||||
|
-webkit-transform: translate3d(0, 0, 0);
|
||||||
|
transform: translate3d(0, 0, 0);
|
||||||
|
visibility: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.animation-left.ng-enter {
|
.animation-left.ng-enter {
|
||||||
-webkit-transform: translate3d(100%, 0, 0);
|
-webkit-transform: translate3d(100%, 0, 0);
|
||||||
transform: translate3d(100%, 0, 0);
|
transform: translate3d(100%, 0, 0);
|
||||||
-webkit-transition-delay: 0.01s;
|
-webkit-transition-delay: 0.1s;
|
||||||
transition-delay: 0.01s;
|
transition-delay: 0.1s;
|
||||||
opacity: 0;
|
visibility: hidden;
|
||||||
}
|
}
|
||||||
.animation-right.ng-enter {
|
.animation-right.ng-enter {
|
||||||
-webkit-transform: translate3d(-100%, 0, 0);
|
-webkit-transform: translate3d(-100%, 0, 0);
|
||||||
transform: translate3d(-100%, 0, 0);
|
transform: translate3d(-100%, 0, 0);
|
||||||
-webkit-transition-delay: 0.01s;
|
-webkit-transition-delay: 0.1s;
|
||||||
transition-delay: 0.01s;
|
transition-delay: 0.1s;
|
||||||
opacity: 0;
|
visibility: hidden;
|
||||||
}
|
|
||||||
.animation-left.ng-enter.ng-enter-active,
|
|
||||||
.animation-right.ng-enter.ng-enter-active {
|
|
||||||
-webkit-transform: translate3d(0, 0, 0);
|
|
||||||
transform: translate3d(0, 0, 0);
|
|
||||||
opacity: 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.animation-left.ng-leave,
|
.animation-up.ng-enter {
|
||||||
.animation-right.ng-leave {
|
-webkit-transform: translate3d(0, 100%, 0);
|
||||||
-webkit-transform: translate3d(0, 0, 0);
|
transform: translate3d(0, 100%, 0);
|
||||||
transform: translate3d(0, 0, 0);
|
-webkit-transition-delay: 0.1s;
|
||||||
opacity: 0;
|
transition-delay: 0.1s;
|
||||||
}
|
}
|
||||||
|
.animation-down.ng-enter {
|
||||||
|
-webkit-transform: translate3d(0, -100%, 0);
|
||||||
|
transform: translate3d(0, -100%, 0);
|
||||||
|
-webkit-transition-delay: 0.1s;
|
||||||
|
transition-delay: 0.1s;
|
||||||
|
}
|
||||||
|
|
||||||
.animation-left.ng-leave.animation-left.ng-leave-active {
|
.animation-left.ng-leave.animation-left.ng-leave-active {
|
||||||
-webkit-transform: translate3d(-100%, 0, 0);
|
-webkit-transform: translate3d(-100%, 0, 0);
|
||||||
transform: translate3d(-100%, 0, 0);
|
transform: translate3d(-100%, 0, 0);
|
||||||
-webkit-transition-delay: 0.01s;
|
-webkit-transition-delay: 0.1s;
|
||||||
transition-delay: 0.01s;
|
transition-delay: 0.1s;
|
||||||
opacity: 0;
|
visibility: hidden;
|
||||||
}
|
}
|
||||||
.animation-right.ng-leave.animation-right.ng-leave-active {
|
.animation-right.ng-leave.animation-right.ng-leave-active {
|
||||||
-webkit-transform: translate3d(100%, 0, 0);
|
-webkit-transform: translate3d(100%, 0, 0);
|
||||||
transform: translate3d(100%, 0, 0);
|
transform: translate3d(100%, 0, 0);
|
||||||
-webkit-transition-delay: 0.01s;
|
-webkit-transition-delay: 0.1s;
|
||||||
transition-delay: 0.01s;
|
transition-delay: 0.1s;
|
||||||
opacity: 0;
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.animation-up.ng-leave.animation-up.ng-leave-active {
|
||||||
|
-webkit-transform: translate3d(0, -100%, 0);
|
||||||
|
transform: translate3d(0, -100%, 0);
|
||||||
|
-webkit-transition-delay: 0.1s;
|
||||||
|
transition-delay: 0.1s;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.animation-down.ng-leave.animation-down.ng-leave-active {
|
||||||
|
-webkit-transform: translate3d(0, 100%, 0);
|
||||||
|
transform: translate3d(0, 100%, 0);
|
||||||
|
-webkit-transition-delay: 0.1s;
|
||||||
|
transition-delay: 0.1s;
|
||||||
|
visibility: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab-view {
|
.tab-view {
|
||||||
|
|
@ -760,7 +782,7 @@ textarea:focus
|
||||||
top: 46px;
|
top: 46px;
|
||||||
bottom: 37px;
|
bottom: 37px;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
padding-bottom: 20px;
|
padding-bottom: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab-in {
|
.tab-in {
|
||||||
|
|
@ -773,6 +795,14 @@ textarea:focus
|
||||||
transform: translate3d(-100%, 0, 0) !important;
|
transform: translate3d(-100%, 0, 0) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.animated.slideInRight,
|
||||||
|
.animated.slideInLeft,
|
||||||
|
.animated.slideInUp,
|
||||||
|
.animated.slideInDown {
|
||||||
|
-webkit-animation-duration: 0.3s;
|
||||||
|
animation-duration: 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
/* removes 300ms in IE */
|
/* removes 300ms in IE */
|
||||||
-ms-touch-action: manipulation; /* IE10 /
|
-ms-touch-action: manipulation; /* IE10 /
|
||||||
touch-action: manipulation; /* IE11+ */
|
touch-action: manipulation; /* IE11+ */
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ var modules = [
|
||||||
'mm.foundation',
|
'mm.foundation',
|
||||||
'monospaced.qrcode',
|
'monospaced.qrcode',
|
||||||
'gettext',
|
'gettext',
|
||||||
'ngAnimate',
|
|
||||||
'ngLodash',
|
'ngLodash',
|
||||||
'uiSwitch',
|
'uiSwitch',
|
||||||
'bwcModule',
|
'bwcModule',
|
||||||
|
|
|
||||||
|
|
@ -652,19 +652,28 @@ angular.module('copayApp.controllers').controller('indexController', function($r
|
||||||
|
|
||||||
$rootScope.$on('Animation/Disable', function(event) {
|
$rootScope.$on('Animation/Disable', function(event) {
|
||||||
$timeout(function() {
|
$timeout(function() {
|
||||||
self.swipeLeft = false;
|
self.slideLeft = false;
|
||||||
self.swipeRight = false;
|
self.slideRight = false;
|
||||||
}, 370);
|
self.slideUp = false;
|
||||||
|
self.slideDown = false;
|
||||||
|
}, 400);
|
||||||
});
|
});
|
||||||
|
|
||||||
$rootScope.$on('Animation/SwipeLeft', function(event) {
|
$rootScope.$on('Animation/SlideLeft', function(event) {
|
||||||
self.swipeLeft = true;
|
self.slideLeft = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
$rootScope.$on('Animation/SwipeRight', function(event) {
|
$rootScope.$on('Animation/SlideRight', function(event) {
|
||||||
self.swipeRight = true;
|
self.slideRight = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$rootScope.$on('Animation/SlideUp', function(event) {
|
||||||
|
self.slideUp = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
$rootScope.$on('Animation/SlideDown', function(event) {
|
||||||
|
self.slideDown = true;
|
||||||
|
});
|
||||||
|
|
||||||
$rootScope.$on('NewIncomingTx', function() {
|
$rootScope.$on('NewIncomingTx', function() {
|
||||||
self.updateBalance();
|
self.updateBalance();
|
||||||
|
|
|
||||||
|
|
@ -91,6 +91,7 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi
|
||||||
|
|
||||||
$scope.openCopayersModal = function(copayers, copayerId) {
|
$scope.openCopayersModal = function(copayers, copayerId) {
|
||||||
var fc = profileService.focusedClient;
|
var fc = profileService.focusedClient;
|
||||||
|
|
||||||
var ModalInstanceCtrl = function($scope, $modalInstance) {
|
var ModalInstanceCtrl = function($scope, $modalInstance) {
|
||||||
$scope.copayers = copayers;
|
$scope.copayers = copayers;
|
||||||
$scope.copayerId = copayerId;
|
$scope.copayerId = copayerId;
|
||||||
|
|
@ -99,15 +100,19 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi
|
||||||
$modalInstance.dismiss('cancel');
|
$modalInstance.dismiss('cancel');
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
$modal.open({
|
var modalInstance = $modal.open({
|
||||||
animation: false,
|
|
||||||
templateUrl: 'views/modals/copayers.html',
|
templateUrl: 'views/modals/copayers.html',
|
||||||
windowClass: 'full',
|
windowClass: 'full animated slideInUp',
|
||||||
controller: ModalInstanceCtrl,
|
controller: ModalInstanceCtrl,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modalInstance.result.finally(function() {
|
||||||
|
var m = angular.element(document.getElementsByClassName('reveal-modal'));
|
||||||
|
m.addClass('slideOutDown');
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.openTxModal = function(tx, copayers) {
|
this.openTxpModal = function(tx, copayers) {
|
||||||
var fc = profileService.focusedClient;
|
var fc = profileService.focusedClient;
|
||||||
var ModalInstanceCtrl = function($scope, $modalInstance) {
|
var ModalInstanceCtrl = function($scope, $modalInstance) {
|
||||||
$scope.error = null;
|
$scope.error = null;
|
||||||
|
|
@ -277,12 +282,16 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi
|
||||||
};
|
};
|
||||||
|
|
||||||
var modalInstance = $modal.open({
|
var modalInstance = $modal.open({
|
||||||
animation: false,
|
|
||||||
templateUrl: 'views/modals/txp-details.html',
|
templateUrl: 'views/modals/txp-details.html',
|
||||||
windowClass: 'full',
|
windowClass: 'full animated slideInUp',
|
||||||
controller: ModalInstanceCtrl,
|
controller: ModalInstanceCtrl,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modalInstance.result.finally(function() {
|
||||||
|
var m = angular.element(document.getElementsByClassName('reveal-modal'));
|
||||||
|
m.addClass('slideOutDown');
|
||||||
|
});
|
||||||
|
|
||||||
modalInstance.result.then(function(txp) {
|
modalInstance.result.then(function(txp) {
|
||||||
$scope.$emit('Local/TxProposalAction');
|
$scope.$emit('Local/TxProposalAction');
|
||||||
if (txp) {
|
if (txp) {
|
||||||
|
|
@ -675,11 +684,16 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi
|
||||||
$modalInstance.dismiss('cancel');
|
$modalInstance.dismiss('cancel');
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
$modal.open({
|
var modalInstance = $modal.open({
|
||||||
templateUrl: 'views/modals/paypro.html',
|
templateUrl: 'views/modals/paypro.html',
|
||||||
windowClass: 'full',
|
windowClass: 'full animated slideInUp',
|
||||||
controller: ModalInstanceCtrl,
|
controller: ModalInstanceCtrl,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modalInstance.result.finally(function() {
|
||||||
|
var m = angular.element(document.getElementsByClassName('reveal-modal'));
|
||||||
|
m.addClass('slideOutDown');
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
this.setFromPayPro = function(uri) {
|
this.setFromPayPro = function(uri) {
|
||||||
|
|
@ -829,12 +843,16 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
$modal.open({
|
var modalInstance = $modal.open({
|
||||||
animation: false,
|
|
||||||
templateUrl: 'views/modals/tx-details.html',
|
templateUrl: 'views/modals/tx-details.html',
|
||||||
windowClass: 'full',
|
windowClass: 'full animated slideInUp',
|
||||||
controller: ModalInstanceCtrl,
|
controller: ModalInstanceCtrl,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modalInstance.result.finally(function() {
|
||||||
|
var m = angular.element(document.getElementsByClassName('reveal-modal'));
|
||||||
|
m.addClass('slideOutDown');
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
this.hasAction = function(actions, action) {
|
this.hasAction = function(actions, action) {
|
||||||
|
|
|
||||||
|
|
@ -16,11 +16,9 @@ if (window && window.navigator) {
|
||||||
//Setting up route
|
//Setting up route
|
||||||
angular
|
angular
|
||||||
.module('copayApp')
|
.module('copayApp')
|
||||||
.config(function(historicLogProvider, $provide, $logProvider, $stateProvider, $urlRouterProvider, $animateProvider) {
|
.config(function(historicLogProvider, $provide, $logProvider, $stateProvider, $urlRouterProvider) {
|
||||||
$urlRouterProvider.otherwise('/');
|
$urlRouterProvider.otherwise('/');
|
||||||
|
|
||||||
$animateProvider.classNameFilter(/^(?:(?!ng-animate-disabled).)*$/);
|
|
||||||
|
|
||||||
$logProvider.debugEnabled(true);
|
$logProvider.debugEnabled(true);
|
||||||
$provide.decorator('$log', ['$delegate',
|
$provide.decorator('$log', ['$delegate',
|
||||||
function($delegate) {
|
function($delegate) {
|
||||||
|
|
@ -506,7 +504,7 @@ angular
|
||||||
receive: 0,
|
receive: 0,
|
||||||
send: 0,
|
send: 0,
|
||||||
history: 0,
|
history: 0,
|
||||||
preferences: 0,
|
preferences: 11,
|
||||||
preferencesColor: 12,
|
preferencesColor: 12,
|
||||||
backup: 12,
|
backup: 12,
|
||||||
preferencesAdvanced: 12,
|
preferencesAdvanced: 12,
|
||||||
|
|
@ -517,7 +515,7 @@ angular
|
||||||
preferencesBwsUrl: 12,
|
preferencesBwsUrl: 12,
|
||||||
about: 12,
|
about: 12,
|
||||||
logs: 13,
|
logs: 13,
|
||||||
add: 0,
|
add: 11,
|
||||||
create: 12,
|
create: 12,
|
||||||
join: 12,
|
join: 12,
|
||||||
import: 12,
|
import: 12,
|
||||||
|
|
@ -530,10 +528,21 @@ angular
|
||||||
});
|
});
|
||||||
|
|
||||||
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
|
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
|
||||||
|
|
||||||
if (pageWeight[fromState.name] > pageWeight[toState.name]) {
|
if (pageWeight[fromState.name] > pageWeight[toState.name]) {
|
||||||
$rootScope.$emit('Animation/SwipeRight');
|
if (pageWeight[fromState.name] == 11) {
|
||||||
|
$rootScope.$emit('Animation/SlideDown');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$rootScope.$emit('Animation/SlideRight');
|
||||||
|
}
|
||||||
} else if (pageWeight[fromState.name] < pageWeight[toState.name]) {
|
} else if (pageWeight[fromState.name] < pageWeight[toState.name]) {
|
||||||
$rootScope.$emit('Animation/SwipeLeft');
|
if (pageWeight[toState.name] < 12) {
|
||||||
|
$rootScope.$emit('Animation/SlideUp');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$rootScope.$emit('Animation/SlideLeft');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!profileService.profile && toState.needProfile) {
|
if (!profileService.profile && toState.needProfile) {
|
||||||
|
|
|
||||||
|
|
@ -35,11 +35,16 @@ angular.module('copayApp.services').factory('txStatus', function($modal, lodash,
|
||||||
};
|
};
|
||||||
if (cb) $timeout(cb, 100);
|
if (cb) $timeout(cb, 100);
|
||||||
};
|
};
|
||||||
$modal.open({
|
var modalInstance = $modal.open({
|
||||||
templateUrl: 'views/modals/tx-status.html',
|
templateUrl: 'views/modals/tx-status.html',
|
||||||
windowClass: 'full popup-tx-status',
|
windowClass: 'full popup-tx-status closeModalAnimation',
|
||||||
controller: ModalInstanceCtrl,
|
controller: ModalInstanceCtrl,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modalInstance.result.finally(function() {
|
||||||
|
var m = angular.element(document.getElementsByClassName('reveal-modal'));
|
||||||
|
m.addClass('animated fadeOutUp');
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
return root;
|
return root;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue