Merge pull request #102 from Bitcoin-com/dev-jb

Dev jb
This commit is contained in:
Jean-Baptiste Dominguez 2018-05-08 17:45:56 +09:00 committed by GitHub
commit e28d85ee46
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 644 additions and 216 deletions

View file

@ -60,6 +60,7 @@
"bower": "^1.7.9",
"cordova-custom-config": "^3.0.5",
"cordova-plugin-qrscanner": "^2.5.0",
"cordova-plugin-vibration": "^3.0.1",
"coveralls": "^2.11.9",
"express": "^4.11.2",
"fs": "0.0.2",
@ -126,4 +127,4 @@
"pre-commit": "^1.1.3"
},
"pre-commit": "unstage-package"
}
}

View file

@ -1,6 +1,6 @@
'use strict';
angular.module('copayApp.controllers').controller('amountController', function($scope, $filter, $timeout, $ionicScrollDelegate, $ionicHistory, gettextCatalog, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, txFormatService, ongoingProcess, popupService, bwcError, payproService, profileService, bitcore, amazonService, nodeWebkitService) {
angular.module('copayApp.controllers').controller('amountController', function($scope, $filter, $timeout, $ionicModal, $ionicScrollDelegate, $ionicHistory, storageService, walletService, gettextCatalog, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, txFormatService, ongoingProcess, popupService, bwcError, payproService, profileService, bitcore, amazonService, nodeWebkitService) {
var _id;
var unitToSatoshi;
@ -30,6 +30,8 @@ angular.module('copayApp.controllers').controller('amountController', function($
$scope.$on("$ionicView.beforeEnter", function(event, data) {
initCurrencies();
if (data.stateParams.shapeshiftOrderId && data.stateParams.shapeshiftOrderId.length > 0) {
$scope.minShapeshiftAmount = parseFloat(data.stateParams.minShapeshiftAmount);
$scope.maxShapeshiftAmount = parseFloat(data.stateParams.maxShapeshiftAmount);
@ -39,6 +41,10 @@ angular.module('copayApp.controllers').controller('amountController', function($
if (data.stateParams.noPrefix) {
$scope.showWarningMessage = data.stateParams.noPrefix != 0;
if ($scope.showWarningMessage) {
var message = 'Address doesn\'t contain currency information, please make sure you are sending the correct currency.';
popupService.showAlert('', message, function() {}, 'Ok');
}
}
var config = configService.getSync().wallet.settings;
@ -158,8 +164,10 @@ angular.module('copayApp.controllers').controller('amountController', function($
var disableKeys = angular.element($window).on('keydown', function(e) {
if (!e.key) return;
if (e.which === 8) { // you can add others here inside brackets.
e.preventDefault();
$scope.removeDigit();
if (!$scope.altCurrencyModal) {
e.preventDefault();
$scope.removeDigit();
}
}
if (e.key.match(reNr)) {
@ -245,6 +253,7 @@ angular.module('copayApp.controllers').controller('amountController', function($
};
$scope.changeUnit = function() {
$scope.amountModel.amount = '0';
if ($scope.alternativeAmount == 0) {
$scope.alternativeAmount = null;
@ -293,12 +302,16 @@ angular.module('copayApp.controllers').controller('amountController', function($
$scope.pushDigit = function(digit) {
if ($scope.amountModel.amount && $scope.amountModel.amount.length >= LENGTH_EXPRESSION_LIMIT) return;
if (!$scope.isAndroid && !$scope.isIos && $scope.amountModel.amount.indexOf('.') > -1 && digit == '.') return;
if (($scope.amountModel.amount.indexOf('.') > -1 || $scope.amountModel.amount == '') && digit == '.') return;
if ($scope.amountModel.amount == '0' && digit == '0') return;
if (availableUnits[unitIndex].isFiat && $scope.amountModel.amount.indexOf('.') > -1 && $scope.amountModel.amount[$scope.amountModel.amount.indexOf('.') + 2]) return;
if ($scope.amountModel.amount == '0' && digit != '.') { $scope.amountModel.amount = ''}
$scope.amountModel.amount = ($scope.amountModel.amount + digit).replace('..', '.');
checkFontSize();
$scope.processAmount();
navigator.vibrate(50);
};
$scope.pushOperator = function(operator) {
@ -334,6 +347,22 @@ angular.module('copayApp.controllers').controller('amountController', function($
$scope.amountModel.amount = $scope.alternativeAmount = $scope.globalResult = '';
$scope.allowSend = false;
checkFontSize();
navigator.vibrate(50);
};
$scope.openPopup = function() {
$ionicModal.fromTemplateUrl('views/modals/altCurrency.html', {
scope: $scope
}).then(function(modal) {
$scope.altCurrencyModal = modal;
$scope.altCurrencyModal.show();
});
};
$scope.close = function() {
$scope.altCurrencyModal.remove();
$scope.altCurrencyModal = false;
};
$scope.processAmount = function() {
@ -486,4 +515,109 @@ angular.module('copayApp.controllers').controller('amountController', function($
}
};
// Currency
var next = 10;
var completeAlternativeList = [];
var popularCurrencyList = [
{isoCode: 'USD', order: 0},
{isoCode: 'EUR', order: 1},
{isoCode: 'JPY', order: 2},
{isoCode: 'GBP', order: 3},
{isoCode: 'AUD', order: 4},
{isoCode: 'CAD', order: 5},
{isoCode: 'CHF', order: 6},
{isoCode: 'CNY', order: 7},
{isoCode: 'KRW', order: 8},
{isoCode: 'HKD', order: 9},
]
function initCurrencies() {
var unusedCurrencyList = [{
isoCode: 'LTL'
}, {
isoCode: 'BTC'
}, {
isoCode: 'BCC'
}, {
isoCode: 'BCH_BTC'
}, {
isoCode: 'BCH'
}];
rateService.whenAvailable(function() {
$scope.listComplete = false;
var idx = lodash.indexBy(unusedCurrencyList, 'isoCode');
var idx2 = lodash.indexBy($scope.lastUsedAltCurrencyList, 'isoCode');
var idx3 = lodash.indexBy(popularCurrencyList, 'isoCode');
var alternatives = rateService.listAlternatives(true);
lodash.each(alternatives, function(c) {
if (idx3[c.isoCode]) {
idx3[c.isoCode].name = c.name;
}
if (!idx[c.isoCode] && !idx2[c.isoCode] && !idx3[c.isoCode]) {
completeAlternativeList.push(c);
}
});
$scope.altCurrencyList = completeAlternativeList.slice(0, 10);
$scope.lastUsedPopularList = lodash.unique(lodash.union($scope.lastUsedAltCurrencyList, popularCurrencyList), 'isoCode');
$timeout(function() {
$scope.$apply();
});
});
}
$scope.loadMore = function() {
$timeout(function() {
$scope.altCurrencyList = completeAlternativeList.slice(0, next);
next += 10;
$scope.listComplete = $scope.altCurrencyList.length >= completeAlternativeList.length;
$scope.$broadcast('scroll.infiniteScrollComplete');
}, 100);
};
$scope.findCurrency = function(search) {
if (!search) initCurrencies();
var list = lodash.unique(lodash.union(completeAlternativeList, lodash.union($scope.lastUsedAltCurrencyList, popularCurrencyList)), 'isoCode');
$scope.altCurrencyList = lodash.filter(list, function(item) {
var val = item.name
var val2 = item.isoCode;
return lodash.includes(val.toLowerCase(), search.toLowerCase()) || lodash.includes(val2.toLowerCase(), search.toLowerCase());
});
$timeout(function() {
$scope.$apply();
});
};
$scope.save = function(newAltCurrency) {
var opts = {
wallet: {
settings: {
alternativeName: newAltCurrency.name,
alternativeIsoCode: newAltCurrency.isoCode,
}
}
};
configService.set(opts, function(err) {
if (err) $log.warn(err);
walletService.updateRemotePreferences(profileService.getWallets());
var altUnitIndex = lodash.findIndex(availableUnits, {
isFiat: true
});
availableUnits[altUnitIndex].id = newAltCurrency.isoCode;
availableUnits[altUnitIndex].name = newAltCurrency.isoCode;
availableUnits[altUnitIndex].shortName = newAltCurrency.isoCode;
fiatCode = newAltCurrency.isoCode;
updateUnitUI();
$scope.close();
});
};
});

View file

@ -6,7 +6,9 @@ angular.module('copayApp.controllers').controller('tabSendController', function(
var CONTACTS_SHOW_LIMIT;
var currentContactsPage;
$scope.isChromeApp = platformInfo.isChromeApp;
$scope.sectionDisplay = {
transferToWallet: false
};
var hasWallets = function() {
$scope.wallets = profileService.getWallets({
@ -247,4 +249,12 @@ angular.module('copayApp.controllers').controller('tabSendController', function(
updateList();
});
});
$scope.toggle = function(section) {
$scope.sectionDisplay[section] = !$scope.sectionDisplay[section];
$timeout(function() {
$ionicScrollDelegate.resize();
$scope.$apply();
}, 10);
};
});

View file

@ -233,58 +233,238 @@
}
}
}
.keypad {
text-align: center;
font-size: 24px;
font-weight: lighter;
position: absolute;
bottom: 0;
width: 100%;
color: $v-mid-gray;
.row {
padding: 0 !important;
margin: 0 !important;
}
.scroll-content {
display: flex;
flex-direction: column;
.col {
line-height: 45px;
}
.send-amount {
flex: 1 1 auto;
display: flex;
flex-direction: column;
justify-content: center;
.operator {
background-color: $v-subtle-gray;
font-weight: normal;
cursor: pointer;
.send-amount-tool {
flex: 0 1 auto;
&:active {
background-color: $v-light-gray;
.send-amount-tool-input {
text-align: center;
position: relative;
padding: 10px 30px;
.primary-amount {
input, .unit, .primary-amount-display {
font-size: 1.8em;
@media (min-width: 375px) {
font-size: 2.1em;
}
@media (min-width: 414px) {
font-size: 2.4em;
}
}
&.long {
input, .unit, .primary-amount-display {
font-size: 1.6em;
@media (min-width: 375px) {
font-size: 1.8em;
}
@media (min-width: 414px) {
font-size: 2em;
}
}
}
&.very-long {
input, .unit, .primary-amount-display {
font-size: 0.9em;
@media (min-width: 375px) {
font-size: 1.3em;
}
@media (min-width: 414px) {
font-size: 1.4em;
}
}
}
input {
border:0;
padding:0;
white-space:normal;
background:none;
line-height:1;
box-sizing:content-box;
display: inline-block;
vertical-align: middle;
margin: 0;
height: 1em;
margin-right: 5px;
font-family: 'ProximaNova';
@media (min-width: 375px) {
}
@media (min-width: 414px) {
}
}
.unit,
.primary-amount-display {
display: inline-block;
vertical-align: middle;
line-height: 1em;
}
.unit {
font-weight: bold;
}
.primary-amount-display {
margin-right: 5px;
word-break: break-all;
}
}
.switch-currencies {
position: absolute;
right: 0;
top: 50%;
transform: translate(0, -50%);
padding: 5px;
img {
width: 18px;
}
}
}
.send-amount-actions {
margin-top: 15px;
display: flex;
align-items: center;
justify-content: center;
.button {
flex: 1 1 auto;
line-height: 1.2em;
+ .button {
margin-left: 10px;
}
span {
display: flex;
align-items: center;
justify-content: center;
}
}
}
}
}
.operator-send {
font-weight: bolder;
color: #fff;
background-color: $positive;
font-size: 36px;
cursor: pointer;
&:active {
background-color: #eaeaea;
.button {
&.no-margin {
margin: 0;
}
}
.digit{
cursor: pointer;
border-top: 1px solid $v-subtle-gray;
border-left: 1px solid $v-subtle-gray;
&:active {
background-color: $v-subtle-gray;
}
.notification-warning {
display: block;
padding: .75rem 1.25rem;
color: #856404;
background-color: #fff3cd;
border: 1px solid #ffeeba;
line-height: 1.4em;
margin-bottom: 20px;
}
@media(max-height: 480px) {
font-size: 12px;
.keypad-container {
position: relative;
//flex: 0 1 196px;
@media (min-height: 667px) {
//flex: 0 1 224px;
}
.keypad {
text-align: center;
font-size: 18px;
font-weight: lighter;
position: absolute;
bottom: 0;
width: 100%;
color: $v-mid-gray;
@media (min-height: 667px) {
font-size: 24px;
}
.row {
padding: 0 !important;
margin: 0 !important;
}
.col {
line-height: 38px;
@media (min-height: 667px) {
line-height: 45px;
}
}
.row {
&:last-child {
.col {
padding-bottom: 10px;
}
}
}
.operator {
background-color: $v-subtle-gray;
font-weight: normal;
cursor: pointer;
&:active {
background-color: $v-light-gray;
}
}
.operator-send {
font-weight: bolder;
color: #fff;
background-color: $positive;
font-size: 36px;
cursor: pointer;
&:active {
background-color: #eaeaea;
}
}
.digit{
cursor: pointer;
border-top: 1px solid $v-subtle-gray;
border-left: 1px solid $v-subtle-gray;
transition: all 0.1s ease;
&:active {
background-color: $v-subtle-gray;
}
}
@media(max-height: 480px) {
font-size: 12px;
}
}
}
}
}
}

View file

@ -10425,42 +10425,146 @@ textarea.d-block {
margin-top: 0;
font-size: 16px; } }
#view-amount .keypad {
text-align: center;
font-size: 24px;
font-weight: lighter;
position: absolute;
bottom: 0;
width: 100%;
color: #667; }
#view-amount .keypad .row {
padding: 0 !important;
margin: 0 !important; }
#view-amount .keypad .col {
line-height: 45px; }
#view-amount .keypad .operator {
background-color: #f2f2f2;
font-weight: normal;
cursor: pointer; }
#view-amount .keypad .operator:active {
background-color: #9b9bab; }
#view-amount .keypad .operator-send {
font-weight: bolder;
color: #fff;
background-color: #494949;
font-size: 36px;
cursor: pointer; }
#view-amount .keypad .operator-send:active {
background-color: #eaeaea; }
#view-amount .keypad .digit {
cursor: pointer;
border-top: 1px solid #f2f2f2;
border-left: 1px solid #f2f2f2; }
#view-amount .keypad .digit:active {
background-color: #f2f2f2; }
@media (max-height: 480px) {
#view-amount .keypad {
font-size: 12px; } }
#view-amount .scroll-content {
display: flex;
flex-direction: column; }
#view-amount .scroll-content .send-amount {
flex: 1 1 auto;
display: flex;
flex-direction: column;
justify-content: center; }
#view-amount .scroll-content .send-amount .send-amount-tool {
flex: 0 1 auto; }
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input {
text-align: center;
position: relative;
padding: 10px 30px; }
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount input, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount .unit, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount .primary-amount-display {
font-size: 1.8em; }
@media (min-width: 375px) {
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount input, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount .unit, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount .primary-amount-display {
font-size: 2.1em; } }
@media (min-width: 414px) {
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount input, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount .unit, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount .primary-amount-display {
font-size: 2.4em; } }
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.long input, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.long .unit, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.long .primary-amount-display {
font-size: 1.6em; }
@media (min-width: 375px) {
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.long input, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.long .unit, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.long .primary-amount-display {
font-size: 1.8em; } }
@media (min-width: 414px) {
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.long input, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.long .unit, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.long .primary-amount-display {
font-size: 2em; } }
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.very-long input, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.very-long .unit, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.very-long .primary-amount-display {
font-size: 0.9em; }
@media (min-width: 375px) {
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.very-long input, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.very-long .unit, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.very-long .primary-amount-display {
font-size: 1.3em; } }
@media (min-width: 414px) {
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.very-long input, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.very-long .unit, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.very-long .primary-amount-display {
font-size: 1.4em; } }
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount input {
border: 0;
padding: 0;
white-space: normal;
background: none;
line-height: 1;
box-sizing: content-box;
display: inline-block;
vertical-align: middle;
margin: 0;
height: 1em;
margin-right: 5px;
font-family: 'ProximaNova'; }
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount .unit,
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount .primary-amount-display {
display: inline-block;
vertical-align: middle;
line-height: 1em; }
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount .unit {
font-weight: bold; }
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount .primary-amount-display {
margin-right: 5px;
word-break: break-all; }
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .switch-currencies {
position: absolute;
right: 0;
top: 50%;
transform: translate(0, -50%);
padding: 5px; }
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .switch-currencies img {
width: 18px; }
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-actions {
margin-top: 15px;
display: flex;
align-items: center;
justify-content: center; }
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-actions .button {
flex: 1 1 auto;
line-height: 1.2em; }
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-actions .button + .button {
margin-left: 10px; }
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-actions .button span {
display: flex;
align-items: center;
justify-content: center; }
#view-amount .scroll-content .button.no-margin {
margin: 0; }
#view-amount .scroll-content .notification-warning {
display: block;
padding: .75rem 1.25rem;
color: #856404;
background-color: #fff3cd;
border: 1px solid #ffeeba;
line-height: 1.4em;
margin-bottom: 20px; }
#view-amount .scroll-content .keypad-container {
position: relative; }
#view-amount .scroll-content .keypad-container .keypad {
text-align: center;
font-size: 18px;
font-weight: lighter;
position: absolute;
bottom: 0;
width: 100%;
color: #667; }
@media (min-height: 667px) {
#view-amount .scroll-content .keypad-container .keypad {
font-size: 24px; } }
#view-amount .scroll-content .keypad-container .keypad .row {
padding: 0 !important;
margin: 0 !important; }
#view-amount .scroll-content .keypad-container .keypad .col {
line-height: 38px; }
@media (min-height: 667px) {
#view-amount .scroll-content .keypad-container .keypad .col {
line-height: 45px; } }
#view-amount .scroll-content .keypad-container .keypad .row:last-child .col {
padding-bottom: 10px; }
#view-amount .scroll-content .keypad-container .keypad .operator {
background-color: #f2f2f2;
font-weight: normal;
cursor: pointer; }
#view-amount .scroll-content .keypad-container .keypad .operator:active {
background-color: #9b9bab; }
#view-amount .scroll-content .keypad-container .keypad .operator-send {
font-weight: bolder;
color: #fff;
background-color: #494949;
font-size: 36px;
cursor: pointer; }
#view-amount .scroll-content .keypad-container .keypad .operator-send:active {
background-color: #eaeaea; }
#view-amount .scroll-content .keypad-container .keypad .digit {
cursor: pointer;
border-top: 1px solid #f2f2f2;
border-left: 1px solid #f2f2f2;
transition: all 0.1s ease; }
#view-amount .scroll-content .keypad-container .keypad .digit:active {
background-color: #f2f2f2; }
@media (max-height: 480px) {
#view-amount .scroll-content .keypad-container .keypad {
font-size: 12px; } }
#view-confirm {
background-color: #ffffff; }

15
www/img/icon-convert.svg Normal file
View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<g>
<g>
<g>
<path d="M304.1,32c44.8,0,48,26.9,48,32v393.4l-84.6-84.6l-22.7,22.6l112,112c6.2,6.2,16.3,6.2,22.6,0l112-112l-22.6-22.6
l-84.6,84.6V64c0-22.1-16-64-80-64l-48,0v32H304.1z"/>
<path d="M208.1,480c-44.8,0-48-26.9-48-32V54.6l84.6,84.6l22.6-22.6l-112-112c-6.2-6.2-16.3-6.2-22.6,0l-112,112l22.7,22.7
l84.6-84.8V448c0,22.1,16,64,80,64h48v-32H208.1z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 744 B

View file

@ -1,137 +1,85 @@
<ion-view id="view-amount" hide-tabs>
<ion-nav-bar class="bar-royal">
<ion-nav-title>
{{'Enter amount' | translate}}
</ion-nav-title>
<ion-nav-back-button ng-click="goBack()"></ion-nav-back-button>
</ion-nav-bar>
<ion-content scroll="false">
<div ng-if="!customAmount && !nextStep">
<div class="item item-no-bottom-border recipient-label" translate>Recipient</div>
<div class="item item-text-wrap item-icon-left bitcoin-address">
<i class="icon big-icon-svg" ng-if="recipientType == 'wallet'">
<img src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !toColor}" ng-style="{'background-color': toColor}" class="bg"/>
</i>
<span ng-if="recipientType == 'contact'">
<i class="icon big-icon-svg" ng-if="isChromeApp">
<img src="img/contact-placeholder.svg" class="bg"/>
</i>
<gravatar ng-if="!isChromeApp" class="send-gravatar" name="{{toName}}" height="30" width="30" email="{{toEmail}}"></gravatar>
</span>
<span ng-if="!recipientType">
<i class="icon big-icon-svg">
<img src="img/contact-placeholder.svg" class="bg"/>
</i>
</span>
<span class="m10l" copy-to-clipboard="displayAddress ? ((displayAddress[0] == 'q' || displayAddress[0] == 'p') ? 'bitcoincash:' : '') + displayAddress : toAddress">{{toName || displayAddress || toAddress}}</span>
</div>
</div>
<div ng-show="!isAndroid && !isIos" ng-class="{'amount-pane-recipient': !customAmount && !nextStep,'amount-pane-no-recipient': customAmount || nextStep}">
<span class="recipient-label" ng-if="showWarningMessage" translate>Note: Address doesn't contain currency information, please make sure you are sending the correct currency.</span>
<div class="amount-bar oh">
<div class="title">
<span translate>Amount</span>
<ion-nav-bar class="bar-royal">
<ion-nav-title>
{{'Enter amount' | translate}}
</ion-nav-title>
<ion-nav-back-button ng-click="goBack()"></ion-nav-back-button>
</ion-nav-bar>
<ion-content scroll="false" style="background: #fff;">
<div ng-if="!customAmount && !nextStep" style="order: 0; position: relative;">
<div class="item send-amount">
<div ng-if="shapeshiftOrderId">
Minimum amount: {{minShapeshiftAmount}} <br/>
Maximum amount: {{maxShapeshiftAmount}} <br/>
</div>
<div class="send-amount-tool">
<div class="send-amount-tool-input amount">
<div class="primary-amount"
ng-class="{long: amountModel.amount.length > 5, 'very-long': amountModel.amount.length > 10}">
<span class="primary-amount-display">{{ amountModel.amount || 0 }}</span><span class="unit">{{unit}}</span>
</div>
<span ng-show="globalResult">{{globalResult}} {{unit}}</span>
<div class="alternative-amount">
<span>{{alternativeAmount || '0.00'}} {{alternativeUnit}}</span>
</div>
<div class="switch-currencies" ng-click="changeUnit()"><img src="img/icon-convert.svg"></div>
</div>
<div class="send-amount-actions text-center">
<button class="button button-sendmax" ng-click="sendMax()">
<span>
<i class="icon ion-ios-speedometer-outline"></i>&emsp;
<span translate>Send max amount</span>
</span>
</button>
<button class="button button-sendmax" ng-click="openPopup()">
<span>
<i class="icon ion-social-usd"></i>&emsp;
<span translate>Change currency</span>
</span>
</button>
</div>
</div>
</div>
</div>
<div ng-if="shapeshiftOrderId">
Minimum amount: {{minShapeshiftAmount}} <br/>
Maximum amount: {{maxShapeshiftAmount}} <br/>
</div>
<div class="amount">
<div class="amount__editable" ng-class="{'amount__editable--minimize': smallFont, 'amount__editable--standard': !smallFont, 'amount__editable--placeholder': !amountModel.amount}">
<span class="amount__number">{{amountModel.amount || "0.00" }}</span>
<a class="amount__currency-toggle" ng-click="changeUnit()">{{unit}}</a>
</div>
<div ng-class="{'amount__results--minimize': smallFont, 'amount__results--standard': !smallFont, 'amount__results--placeholder': amountResult}" ng-click="changeAlternativeUnit()">
<div class="amount__result" ng-show="globalResult">{{globalResult}} {{unit}}</div>
<div class="amount__result-equiv">&lt;&gt; {{alternativeAmount || '0.00'}} {{alternativeUnit}}</div>
</div>
<div>
<button ng-if="hasMaxAmount" class="button button-sendmax" ng-click="sendMax()">
<span>
<i class="icon ion-ios-speedometer-outline"></i>&emsp;
<span translate>Send max amount</span>
</span>
</button>
<button class="button button-sendmax" ng-click="changeUnit()">Switch Currencies</button>
<div class="keypad-container" style="background: #fff; position: absolute; bottom: 0; margin-bottom: 57px; width: 100%;">
<div class="keypad" style="background: #f2f2f2; position: relative;">
<div class="row">
<div class="col digit" ng-click="pushDigit('7')">7</div>
<div class="col digit" ng-click="pushDigit('8')">8</div>
<div class="col digit" ng-click="pushDigit('9')">9</div>
</div>
<div class="row">
<div class="col digit" ng-click="pushDigit('4')">4</div>
<div class="col digit" ng-click="pushDigit('5')">5</div>
<div class="col digit" ng-click="pushDigit('6')">6</div>
</div>
<div class="row">
<div class="col digit" ng-click="pushDigit('1')">1</div>
<div class="col digit" ng-click="pushDigit('2')">2</div>
<div class="col digit" ng-click="pushDigit('3')">3</div>
</div>
<div class="row">
<div class="col digit" ng-click="pushDigit('.')">.</div>
<div class="col digit" ng-click="pushDigit('0')">0</div>
<div class="col digit icon ion-backspace-outline" ng-click="removeDigit()"></div>
</div>
</div>
</div>
</div>
<div class="item" ng-show="isAndroid || isIos">
<span class="recipient-label" ng-if="showWarningMessage" translate>Note: Address doesn't contain currency information, please make sure you are sending the correct currency.</span><br/><br/>
<span class="label" translate>Amount</span><br/>
<div ng-if="shapeshiftOrderId">
Minimum amount: {{minShapeshiftAmount}} <br/>
Maximum amount: {{maxShapeshiftAmount}} <br/>
</div>
<div class="amount">
<span>
<input type="number" ng-model="amountModel.amount" ng-change="processAmount()" placeholder="Enter amount" focus-me>
<a class="amount__currency-toggle-mobile" ng-click="changeUnit()">{{unit}}</a>
</span>
<span ng-show="globalResult">{{globalResult}} {{unit}}</span>
<span>&lt;&gt; {{alternativeAmount || '0.00'}} {{alternativeUnit}}</span>
</div>
<div>
<button ng-if="hasMaxAmount" class="button button-sendmax" ng-click="sendMax()">
<span>
<i class="icon ion-ios-speedometer-outline"></i>&emsp;
<span translate>Send max amount</span>
</span>
</button>
<button class="button button-sendmax" ng-click="changeUnit()">
<span>Switch Currencies</span>
</button>
</div>
</div>
<div class="item" ng-show="isAndroid || isIos">
<button class="button button-standard button-primary" ng-disabled="!allowSend" ng-click="finish()">
Confirm
<button
class="button button-full button-primary no-margin"
ng-disabled="!allowSend"
ng-click="finish()"
style="position: absolute; bottom: 0;"
translate>
Next
</button>
</div>
<div ng-show="!isAndroid && !isIos">
<div class="keypad">
<div class="row">
<div class="col col-25 col-offset-75 operator-send"
ng-show="allowSend" ng-click="finish()">
<i class="icon ion-ios-arrow-thin-right"></i>
</div>
</div>
<div class="row">
<div class="col digit" ng-click="pushDigit('7')">7</div>
<div class="col digit" ng-click="pushDigit('8')">8</div>
<div class="col digit" ng-click="pushDigit('9')">9</div>
<div class="col operator" ng-click="pushOperator('/')">&divide;</div>
</div>
<div class="row">
<div class="col digit" ng-click="pushDigit('4')">4</div>
<div class="col digit" ng-click="pushDigit('5')">5</div>
<div class="col digit" ng-click="pushDigit('6')">6</div>
<div class="col operator" ng-click="pushOperator('x')">&times;</div>
</div>
<div class="row">
<div class="col digit" ng-click="pushDigit('1')">1</div>
<div class="col digit" ng-click="pushDigit('2')">2</div>
<div class="col digit" ng-click="pushDigit('3')">3</div>
<div class="col operator" ng-click="pushOperator('+')">&plus;</div>
</div>
<div class="row">
<div class="col digit" ng-click="pushDigit('.')">.</div>
<div class="col digit" ng-click="pushDigit('0')">0</div>
<div class="col digit icon ion-backspace-outline" ng-click="removeDigit()"></div>
<div class="col operator" ng-click="pushOperator('-')">&minus;</div>
</div>
</div>
</ion-content>
</ion-view>
</ion-content>
</ion-view>

View file

@ -0,0 +1,34 @@
<ion-modal-view id="alt-currency">
<ion-header-bar class="bar-royal">
<div class="title">
{{'Alternative Currency'|translate}}
</div>
<button class="button button-clear" ng-click="close()" translate>
{{'Close'|translate}}
</button>
</ion-header-bar>
<ion-content>
<div class="bar bar-header item-input-inset m20b">
<label class="item-input-wrapper">
<i class="icon ion-ios-search placeholder-icon"></i>
<input type="search" ng-init="searchedAltCurrency = ''" ng-model="searchedAltCurrency" ng-change="findCurrency(searchedAltCurrency)"
placeholder="{{'Search your currency' | translate}}">
</label>
</div>
<div class="list" ng-if="lastUsedPopularList[0] && searchedAltCurrency.length == 0">
<ion-radio class="alt-currency-radio" ng-repeat="lastUsedAltCurrency in lastUsedPopularList" ng-value="lastUsedAltCurrency.isoCode" ng-model="currentCurrency"
ng-click="save(lastUsedAltCurrency)">{{lastUsedAltCurrency.name}} <span class="item-note">{{lastUsedAltCurrency.isoCode}}</span>
</ion-radio>
</div>
<div class="list">
<div class="item" ng-repeat="altCurrency in altCurrencyList" ng-value="altCurrency.isoCode" ng-model="currentCurrency"
ng-click="save(altCurrency)">{{altCurrency.name}} <span class="item-note">{{altCurrency.isoCode}}</span>
</div>
</div>
<ion-infinite-scroll
ng-if="!listComplete"
on-infinite="loadMore()"
distance="50%">
</ion-infinite-scroll>
</ion-content>
</ion-modal-view>

View file

@ -66,10 +66,12 @@
</div>
<div class="card" ng-if="showTransferCard && hasFunds">
<div class="item item-heading">
<div class="item item-icon-right item-heading" ng-click="toggle('transferToWallet')">
<span translate>Transfer to Wallet</span>
<i class="icon bp-arrow-up" ng-show="sectionDisplay.transferToWallet"></i>
<i class="icon bp-arrow-down" ng-show="!sectionDisplay.transferToWallet"></i>
</div>
<div class="list">
<div class="list" ng-show="sectionDisplay.transferToWallet">
<a class="item item-icon-left item-icon-right"
ng-repeat="item in list"
ng-if="hasWallets && item.recipientType == 'wallet'"