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/angular/angular.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-animate/angular-animate.js',
|
||||
'bower_components/angular-moment/angular-moment.js',
|
||||
'bower_components/ng-lodash/build/ng-lodash.js',
|
||||
'bower_components/angular-qrcode/qrcode.js',
|
||||
|
|
@ -126,22 +124,6 @@ module.exports = function(grunt) {
|
|||
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: {
|
||||
options: {
|
||||
mangle: false
|
||||
|
|
@ -209,7 +191,6 @@ module.exports = function(grunt) {
|
|||
grunt.loadNpmTasks('grunt-contrib-copy');
|
||||
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||
grunt.loadNpmTasks('grunt-contrib-uglify');
|
||||
grunt.loadNpmTasks('grunt-contrib-cssmin');
|
||||
grunt.loadNpmTasks('grunt-angular-gettext');
|
||||
grunt.loadNpmTasks('grunt-markdown');
|
||||
grunt.loadNpmTasks('grunt-release');
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@
|
|||
"dependencies": {
|
||||
"angular": "~1.3.13",
|
||||
"angular-foundation": "*",
|
||||
"angular-animate": "~1.3.13",
|
||||
"angular-qrcode": "~5.1.0",
|
||||
"angular-gettext": "~2.0.5",
|
||||
"animate.css": "~3.2.0",
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@
|
|||
"grunt-cli": "^0.1.13",
|
||||
"grunt-contrib-concat": "^0.5.1",
|
||||
"grunt-contrib-copy": "^0.8.0",
|
||||
"grunt-contrib-cssmin": "^0.12.2",
|
||||
"grunt-contrib-uglify": "^0.8.0",
|
||||
"grunt-contrib-watch": "^0.5.3",
|
||||
"grunt-exec": "^0.4.6",
|
||||
|
|
|
|||
|
|
@ -31,8 +31,15 @@
|
|||
|
||||
|
||||
<section
|
||||
ng-class="{'main': index.hasProfile, 'main-dark': mainDark, 'animation-left': index.swipeLeft,
|
||||
'animation-right': index.swipeRight}"
|
||||
class="animation-slide"
|
||||
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>
|
||||
<div ui-view="menu" ng-if="!index.noFocusedWallet && !$root.hideMenuBar"></div>
|
||||
<a class="close-menu" ng-click="index.closeMenu()"></a>
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
<label for="username">
|
||||
{{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 for="password">
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
<nav ng-controller="topbarController as topbar" class="tab-bar">
|
||||
<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>
|
||||
</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>
|
||||
<span class="text-back">{{'Back'|translate}}</span>
|
||||
</a>
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
<section class="right-small" ng-show="!goBackToState">
|
||||
<a id="camera-icon" ng-show="!closeToHome && index.isComplete" class="p10"
|
||||
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">
|
||||
<span class="text-close">{{'Close'|translate}}</span>
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<div class="ng-animate-disabled row collapse last-transactions-content line-b"
|
||||
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" >
|
||||
<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">
|
||||
<section class="right-small">
|
||||
<section class="left-small">
|
||||
<a ng-click="cancel()" class="p10">
|
||||
<span class="text-close" translate>Close</span>
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<nav class="tab-bar">
|
||||
<section class="right-small">
|
||||
<section class="left-small">
|
||||
<a ng-click="cancel()" class="p10">
|
||||
<span class="text-close" translate>Close</span>
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<nav class="tab-bar">
|
||||
<section class="right-small">
|
||||
<section class="left-small">
|
||||
<a ng-click="cancel()" class="p10">
|
||||
<span class="text-close" translate>Close</span>
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<nav class="tab-bar">
|
||||
<section class="right-small">
|
||||
<a ng-click="cancel()" class="p10 ng-animate-disabled">
|
||||
<section class="left-small">
|
||||
<a ng-click="cancel()" class="p10">
|
||||
<span class="text-close" translate>Close</span>
|
||||
</a>
|
||||
</section>
|
||||
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
<h4 class="title m0" translate>Information</h4>
|
||||
<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="right">
|
||||
<span ng-if="btx.merchant">
|
||||
|
|
@ -35,7 +35,7 @@
|
|||
</span>
|
||||
</span>
|
||||
</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="right">
|
||||
<time>{{ btx.time * 1000 | amCalendar}}</time>
|
||||
|
|
@ -53,7 +53,7 @@
|
|||
{{btx.merchant.pr.pd.memo}}
|
||||
</span>
|
||||
</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="right" >
|
||||
<span class="text-warning" ng-show="!btx.confirmations || btx.confirmations == 0" translate>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<nav class="tab-bar">
|
||||
<section class="right-small">
|
||||
<a ng-click="cancel()" class="p10 ng-animate-disabled">
|
||||
<section class="left-small">
|
||||
<a ng-click="cancel()" class="p10">
|
||||
<span class="text-close" translate>Close</span>
|
||||
</a>
|
||||
</section>
|
||||
|
|
|
|||
|
|
@ -9,436 +9,442 @@
|
|||
|
||||
<div class="onGoingProcess" ng-show="index.isOffline">
|
||||
<div class="onGoingProcess-content" ng-style="{'background-color':'#222'}">
|
||||
<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="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>
|
||||
<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 class="extra-margin-bottom"></div>
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ _:-ms-fullscreen, :root .main {
|
|||
@-moz-document url-prefix() {
|
||||
.extra-margin-bottom {
|
||||
display: block;
|
||||
height: 75px;
|
||||
height: 45px;
|
||||
overflow: hidden;
|
||||
clear: both;
|
||||
}
|
||||
|
|
@ -359,7 +359,7 @@ ul.off-canvas-list li a:hover {
|
|||
background: none;
|
||||
}
|
||||
|
||||
a, button, .button, input, textarea, select, .reveal-modal {
|
||||
a, button, .button, input, textarea, select {
|
||||
-webkit-box-shadow: none !important;
|
||||
-moz-box-shadow: none !important;
|
||||
box-shadow: none !important;
|
||||
|
|
@ -555,23 +555,17 @@ a.pin-button:active {
|
|||
padding: 0;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
overflow-y: auto;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
.modal.fade .modal-dialog,
|
||||
.modal.in .modal-dialog,
|
||||
.reveal-modal-bg,
|
||||
.reveal-modal-bg .fade .in,
|
||||
.reveal-modal,
|
||||
.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,
|
||||
.reveal-modal.animated.fadeOutUp,
|
||||
.reveal-modal.animated.slideInUp,
|
||||
.reveal-modal.animated.slideInDown {
|
||||
-webkit-animation-duration: 0.3s;
|
||||
animation-duration: 0.3s;
|
||||
}
|
||||
|
||||
input[type="color"],
|
||||
input[type="date"],
|
||||
input[type="datetime-local"],
|
||||
|
|
@ -691,7 +685,7 @@ textarea:focus
|
|||
color: #B7C2CD;
|
||||
}
|
||||
|
||||
.animation-left, .animation-right {
|
||||
.animation-slide {
|
||||
position: absolute;
|
||||
background: #fff;
|
||||
display: block;
|
||||
|
|
@ -704,52 +698,80 @@ textarea:focus
|
|||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
.animation-left.ng-enter, .animation-left.ng-leave,
|
||||
.animation-right.ng-enter, .animation-right.ng-leave {
|
||||
-webkit-transition: all ease 300ms;
|
||||
transition: all ease 300ms;
|
||||
.animation-slide.ng-enter,
|
||||
.animation-slide.ng-leave {
|
||||
-webkit-transition: 0.25s ease all;
|
||||
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 {
|
||||
-webkit-transform: translate3d(100%, 0, 0);
|
||||
transform: translate3d(100%, 0, 0);
|
||||
-webkit-transition-delay: 0.01s;
|
||||
transition-delay: 0.01s;
|
||||
opacity: 0;
|
||||
-webkit-transition-delay: 0.1s;
|
||||
transition-delay: 0.1s;
|
||||
visibility: hidden;
|
||||
}
|
||||
.animation-right.ng-enter {
|
||||
-webkit-transform: translate3d(-100%, 0, 0);
|
||||
transform: translate3d(-100%, 0, 0);
|
||||
-webkit-transition-delay: 0.01s;
|
||||
transition-delay: 0.01s;
|
||||
opacity: 0;
|
||||
}
|
||||
.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;
|
||||
-webkit-transition-delay: 0.1s;
|
||||
transition-delay: 0.1s;
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.animation-left.ng-leave,
|
||||
.animation-right.ng-leave {
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
opacity: 0;
|
||||
.animation-up.ng-enter {
|
||||
-webkit-transform: translate3d(0, 100%, 0);
|
||||
transform: translate3d(0, 100%, 0);
|
||||
-webkit-transition-delay: 0.1s;
|
||||
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 {
|
||||
-webkit-transform: translate3d(-100%, 0, 0);
|
||||
transform: translate3d(-100%, 0, 0);
|
||||
-webkit-transition-delay: 0.01s;
|
||||
transition-delay: 0.01s;
|
||||
opacity: 0;
|
||||
-webkit-transition-delay: 0.1s;
|
||||
transition-delay: 0.1s;
|
||||
visibility: hidden;
|
||||
}
|
||||
.animation-right.ng-leave.animation-right.ng-leave-active {
|
||||
-webkit-transform: translate3d(100%, 0, 0);
|
||||
transform: translate3d(100%, 0, 0);
|
||||
-webkit-transition-delay: 0.01s;
|
||||
transition-delay: 0.01s;
|
||||
opacity: 0;
|
||||
-webkit-transition-delay: 0.1s;
|
||||
transition-delay: 0.1s;
|
||||
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 {
|
||||
|
|
@ -760,7 +782,7 @@ textarea:focus
|
|||
top: 46px;
|
||||
bottom: 37px;
|
||||
overflow: auto;
|
||||
padding-bottom: 20px;
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
|
||||
.tab-in {
|
||||
|
|
@ -773,6 +795,14 @@ textarea:focus
|
|||
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 */
|
||||
-ms-touch-action: manipulation; /* IE10 /
|
||||
touch-action: manipulation; /* IE11+ */
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ var modules = [
|
|||
'mm.foundation',
|
||||
'monospaced.qrcode',
|
||||
'gettext',
|
||||
'ngAnimate',
|
||||
'ngLodash',
|
||||
'uiSwitch',
|
||||
'bwcModule',
|
||||
|
|
|
|||
|
|
@ -652,19 +652,28 @@ angular.module('copayApp.controllers').controller('indexController', function($r
|
|||
|
||||
$rootScope.$on('Animation/Disable', function(event) {
|
||||
$timeout(function() {
|
||||
self.swipeLeft = false;
|
||||
self.swipeRight = false;
|
||||
}, 370);
|
||||
self.slideLeft = false;
|
||||
self.slideRight = false;
|
||||
self.slideUp = false;
|
||||
self.slideDown = false;
|
||||
}, 400);
|
||||
});
|
||||
|
||||
$rootScope.$on('Animation/SwipeLeft', function(event) {
|
||||
self.swipeLeft = true;
|
||||
$rootScope.$on('Animation/SlideLeft', function(event) {
|
||||
self.slideLeft = true;
|
||||
});
|
||||
|
||||
$rootScope.$on('Animation/SwipeRight', function(event) {
|
||||
self.swipeRight = true;
|
||||
$rootScope.$on('Animation/SlideRight', function(event) {
|
||||
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() {
|
||||
self.updateBalance();
|
||||
|
|
|
|||
|
|
@ -91,23 +91,28 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi
|
|||
|
||||
$scope.openCopayersModal = function(copayers, copayerId) {
|
||||
var fc = profileService.focusedClient;
|
||||
|
||||
var ModalInstanceCtrl = function($scope, $modalInstance) {
|
||||
$scope.copayers = copayers;
|
||||
$scope.copayerId = copayerId;
|
||||
$scope.color = fc.backgroundColor;
|
||||
$scope.cancel = function() {
|
||||
$scope.cancel = function() {
|
||||
$modalInstance.dismiss('cancel');
|
||||
};
|
||||
};
|
||||
$modal.open({
|
||||
animation: false,
|
||||
var modalInstance = $modal.open({
|
||||
templateUrl: 'views/modals/copayers.html',
|
||||
windowClass: 'full',
|
||||
windowClass: 'full animated slideInUp',
|
||||
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 ModalInstanceCtrl = function($scope, $modalInstance) {
|
||||
$scope.error = null;
|
||||
|
|
@ -277,12 +282,16 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi
|
|||
};
|
||||
|
||||
var modalInstance = $modal.open({
|
||||
animation: false,
|
||||
templateUrl: 'views/modals/txp-details.html',
|
||||
windowClass: 'full',
|
||||
windowClass: 'full animated slideInUp',
|
||||
controller: ModalInstanceCtrl,
|
||||
});
|
||||
|
||||
modalInstance.result.finally(function() {
|
||||
var m = angular.element(document.getElementsByClassName('reveal-modal'));
|
||||
m.addClass('slideOutDown');
|
||||
});
|
||||
|
||||
modalInstance.result.then(function(txp) {
|
||||
$scope.$emit('Local/TxProposalAction');
|
||||
if (txp) {
|
||||
|
|
@ -675,11 +684,16 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi
|
|||
$modalInstance.dismiss('cancel');
|
||||
};
|
||||
};
|
||||
$modal.open({
|
||||
var modalInstance = $modal.open({
|
||||
templateUrl: 'views/modals/paypro.html',
|
||||
windowClass: 'full',
|
||||
windowClass: 'full animated slideInUp',
|
||||
controller: ModalInstanceCtrl,
|
||||
});
|
||||
|
||||
modalInstance.result.finally(function() {
|
||||
var m = angular.element(document.getElementsByClassName('reveal-modal'));
|
||||
m.addClass('slideOutDown');
|
||||
});
|
||||
};
|
||||
|
||||
this.setFromPayPro = function(uri) {
|
||||
|
|
@ -829,12 +843,16 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi
|
|||
};
|
||||
};
|
||||
|
||||
$modal.open({
|
||||
animation: false,
|
||||
var modalInstance = $modal.open({
|
||||
templateUrl: 'views/modals/tx-details.html',
|
||||
windowClass: 'full',
|
||||
windowClass: 'full animated slideInUp',
|
||||
controller: ModalInstanceCtrl,
|
||||
});
|
||||
|
||||
modalInstance.result.finally(function() {
|
||||
var m = angular.element(document.getElementsByClassName('reveal-modal'));
|
||||
m.addClass('slideOutDown');
|
||||
});
|
||||
};
|
||||
|
||||
this.hasAction = function(actions, action) {
|
||||
|
|
|
|||
|
|
@ -16,11 +16,9 @@ if (window && window.navigator) {
|
|||
//Setting up route
|
||||
angular
|
||||
.module('copayApp')
|
||||
.config(function(historicLogProvider, $provide, $logProvider, $stateProvider, $urlRouterProvider, $animateProvider) {
|
||||
.config(function(historicLogProvider, $provide, $logProvider, $stateProvider, $urlRouterProvider) {
|
||||
$urlRouterProvider.otherwise('/');
|
||||
|
||||
$animateProvider.classNameFilter(/^(?:(?!ng-animate-disabled).)*$/);
|
||||
|
||||
$logProvider.debugEnabled(true);
|
||||
$provide.decorator('$log', ['$delegate',
|
||||
function($delegate) {
|
||||
|
|
@ -506,7 +504,7 @@ angular
|
|||
receive: 0,
|
||||
send: 0,
|
||||
history: 0,
|
||||
preferences: 0,
|
||||
preferences: 11,
|
||||
preferencesColor: 12,
|
||||
backup: 12,
|
||||
preferencesAdvanced: 12,
|
||||
|
|
@ -517,7 +515,7 @@ angular
|
|||
preferencesBwsUrl: 12,
|
||||
about: 12,
|
||||
logs: 13,
|
||||
add: 0,
|
||||
add: 11,
|
||||
create: 12,
|
||||
join: 12,
|
||||
import: 12,
|
||||
|
|
@ -530,10 +528,21 @@ angular
|
|||
});
|
||||
|
||||
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
|
||||
|
||||
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]) {
|
||||
$rootScope.$emit('Animation/SwipeLeft');
|
||||
if (pageWeight[toState.name] < 12) {
|
||||
$rootScope.$emit('Animation/SlideUp');
|
||||
}
|
||||
else {
|
||||
$rootScope.$emit('Animation/SlideLeft');
|
||||
}
|
||||
}
|
||||
|
||||
if (!profileService.profile && toState.needProfile) {
|
||||
|
|
|
|||
|
|
@ -35,11 +35,16 @@ angular.module('copayApp.services').factory('txStatus', function($modal, lodash,
|
|||
};
|
||||
if (cb) $timeout(cb, 100);
|
||||
};
|
||||
$modal.open({
|
||||
var modalInstance = $modal.open({
|
||||
templateUrl: 'views/modals/tx-status.html',
|
||||
windowClass: 'full popup-tx-status',
|
||||
windowClass: 'full popup-tx-status closeModalAnimation',
|
||||
controller: ModalInstanceCtrl,
|
||||
});
|
||||
|
||||
modalInstance.result.finally(function() {
|
||||
var m = angular.element(document.getElementsByClassName('reveal-modal'));
|
||||
m.addClass('animated fadeOutUp');
|
||||
});
|
||||
};
|
||||
|
||||
return root;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue