TONS of work in shapeshift integration
This commit is contained in:
parent
8e2263cc9a
commit
b16a4215d2
14 changed files with 267 additions and 58 deletions
|
|
@ -206,3 +206,17 @@ div.onboarding-topic {
|
||||||
.light-green {
|
.light-green {
|
||||||
color:#26B03C;
|
color:#26B03C;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.shapeshift-banner {
|
||||||
|
background: url(../img/shapeshiftbg.jpg) center center no-repeat #28394d;
|
||||||
|
padding: 10px;
|
||||||
|
box-shadow: 0px 5px 10px 0px #cccccc;
|
||||||
|
height: 5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.shapeshift-logo {
|
||||||
|
display: block;
|
||||||
|
float: left;
|
||||||
|
max-height: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
'use strict';
|
'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, $ionicScrollDelegate, $ionicHistory, gettextCatalog, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, txFormatService, ongoingProcess, popupService, bwcError, payproService, profileService, bitcore, amazonService, nodeWebkitService) {
|
||||||
|
|
||||||
var _id;
|
var _id;
|
||||||
var unitToSatoshi;
|
var unitToSatoshi;
|
||||||
var satToUnit;
|
var satToUnit;
|
||||||
|
|
@ -24,6 +25,12 @@ angular.module('copayApp.controllers').controller('amountController', function($
|
||||||
});
|
});
|
||||||
|
|
||||||
$scope.$on("$ionicView.beforeEnter", function(event, data) {
|
$scope.$on("$ionicView.beforeEnter", function(event, data) {
|
||||||
|
|
||||||
|
if (data.stateParams.minShapeshiftAmount.length > 0 && data.stateParams.maxShapeshiftAmount.length > 0) {
|
||||||
|
$scope.minShapeshiftAmount = parseFloat(data.stateParams.minShapeshiftAmount);
|
||||||
|
$scope.maxShapeshiftAmount = parseFloat(data.stateParams.maxShapeshiftAmount);
|
||||||
|
}
|
||||||
|
|
||||||
var config = configService.getSync().wallet.settings;
|
var config = configService.getSync().wallet.settings;
|
||||||
|
|
||||||
function setAvailableUnits() {
|
function setAvailableUnits() {
|
||||||
|
|
@ -297,7 +304,11 @@ angular.module('copayApp.controllers').controller('amountController', function($
|
||||||
function processAmount() {
|
function processAmount() {
|
||||||
var formatedValue = format($scope.amount);
|
var formatedValue = format($scope.amount);
|
||||||
var result = evaluate(formatedValue);
|
var result = evaluate(formatedValue);
|
||||||
$scope.allowSend = lodash.isNumber(result) && +result > 0;
|
$scope.allowSend = lodash.isNumber(result) && +result > 0
|
||||||
|
&& ((!$scope.minShapeshiftAmount && !$scope.maxShapeshiftAmount)
|
||||||
|
|| ($scope.minShapeshiftAmount && $scope.maxShapeshiftAmount
|
||||||
|
&& result >= $scope.minShapeshiftAmount && result <= $scope.maxShapeshiftAmount));
|
||||||
|
|
||||||
if (lodash.isNumber(result)) {
|
if (lodash.isNumber(result)) {
|
||||||
$scope.globalResult = isExpression($scope.amount) ? '= ' + processResult(result) : '';
|
$scope.globalResult = isExpression($scope.amount) ? '= ' + processResult(result) : '';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,80 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('copayApp.controllers').controller('shapeshiftController', function($scope, $interval){ });
|
angular.module('copayApp.controllers').controller('shapeshiftController', function($scope, $interval, profileService, walletService, popupService) {
|
||||||
|
|
||||||
|
var walletsBtc = [];
|
||||||
|
var walletsBch = [];
|
||||||
|
|
||||||
|
function generateAddress(wallet, cb) {
|
||||||
|
if (!wallet) return;
|
||||||
|
walletService.getAddress(wallet, false, function(err, addr) {
|
||||||
|
if (err) {
|
||||||
|
popupService.showAlert(err);
|
||||||
|
}
|
||||||
|
return cb(addr);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function showToWallets() {
|
||||||
|
$scope.toWallets = $scope.fromWallet.coin == 'btc' ? walletsBch : walletsBtc;
|
||||||
|
$scope.onToWalletSelect($scope.toWallets[0]);
|
||||||
|
$scope.singleToWallet = $scope.toWallets.length == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$scope.onFromWalletSelect = function(wallet) {
|
||||||
|
$scope.fromWallet = wallet;
|
||||||
|
showToWallets();
|
||||||
|
generateAddress(wallet, function(addr) {
|
||||||
|
$scope.fromWalletAddress = addr;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.onToWalletSelect = function(wallet) {
|
||||||
|
$scope.toWallet = wallet;
|
||||||
|
generateAddress(wallet, function(addr) {
|
||||||
|
$scope.toWalletAddress = addr;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$scope.$on("$ionicView.beforeEnter", function(event, data) {
|
||||||
|
walletsBtc = profileService.getWallets({coin: 'btc'});
|
||||||
|
walletsBch = profileService.getWallets({coin: 'bch'});
|
||||||
|
$scope.fromWallets = walletsBtc.concat(walletsBch);
|
||||||
|
$scope.toWallets = walletsBch;
|
||||||
|
if ($scope.fromWallets.length == 0 || $scope.toWallets.length == 0) return;
|
||||||
|
$scope.onFromWalletSelect($scope.fromWallets[0]);
|
||||||
|
$scope.onToWalletSelect($scope.toWallets[0]);
|
||||||
|
$scope.singleFromWallet = $scope.fromWallets.length == 1;
|
||||||
|
$scope.singleToWallet = $scope.toWallets.length == 1;
|
||||||
|
$scope.toWalletSelectorTitle = 'To';
|
||||||
|
$scope.showFromWallets = false;
|
||||||
|
$scope.showToWallets = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
$scope.showFromWalletSelector = function() {
|
||||||
|
$scope.showFromWallets = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$scope.showToWalletSelector = function() {
|
||||||
|
$scope.showToWallets = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*var setAddress = function(newAddr) {
|
||||||
|
$scope.addr = null;
|
||||||
|
if (!$scope.wallet || $scope.generatingAddress || !$scope.wallet.isComplete()) return;
|
||||||
|
$scope.generatingAddress = true;
|
||||||
|
walletService.getAddress($scope.wallet, newAddr, function(err, addr) {
|
||||||
|
$scope.generatingAddress = false;
|
||||||
|
|
||||||
|
if (err) {
|
||||||
|
//Error is already formated
|
||||||
|
popupService.showAlert(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
$scope.addr = addr;
|
||||||
|
$timeout(function() {
|
||||||
|
$scope.$apply();
|
||||||
|
}, 10);
|
||||||
|
});
|
||||||
|
};*/
|
||||||
|
});
|
||||||
|
|
|
||||||
|
|
@ -22,13 +22,17 @@ angular.module('copayApp.directives').directive('shapeshiftCoinSelector', functi
|
||||||
coin: scope.selectedCoin
|
coin: scope.selectedCoin
|
||||||
}
|
}
|
||||||
|
|
||||||
scope.$watch('coinAddress', function(newVal){
|
scope.$watch('selectedCoin', function(newVal) {
|
||||||
|
scope.getMarketData(newVal);
|
||||||
|
});
|
||||||
|
|
||||||
|
scope.$watch('coinAddress', function(newVal) {
|
||||||
if(scope.direction === 'in')
|
if(scope.direction === 'in')
|
||||||
coinTraderCtrl.returnAddress(newVal);
|
coinTraderCtrl.returnAddress(newVal);
|
||||||
else if(scope.direction === 'out')
|
else if(scope.direction === 'out')
|
||||||
coinTraderCtrl.withdrawalAddress(newVal);
|
coinTraderCtrl.withdrawalAddress(newVal);
|
||||||
});
|
});
|
||||||
scope.$watch('amount', function(newVal){
|
scope.$watch('amount', function(newVal) {
|
||||||
coinTraderCtrl.amount(newVal)
|
coinTraderCtrl.amount(newVal)
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('copayApp.directives').directive('shapeshiftCoinTrader', function($interval, shapeshiftApiService, profileService) {
|
angular.module('copayApp.directives').directive('shapeshiftCoinTrader', function($interval, shapeshiftApiService, profileService, incomingData) {
|
||||||
return {
|
return {
|
||||||
restrict: 'E',
|
restrict: 'E',
|
||||||
transclude: true,
|
transclude: true,
|
||||||
|
|
@ -36,6 +36,7 @@ angular.module('copayApp.directives').directive('shapeshiftCoinTrader', function
|
||||||
.marketInfo($scope.coinIn, $scope.coinOut)
|
.marketInfo($scope.coinIn, $scope.coinOut)
|
||||||
.then(function(marketData){
|
.then(function(marketData){
|
||||||
$scope.marketData = marketData;
|
$scope.marketData = marketData;
|
||||||
|
$scope.rateString = $scope.marketData.rate.toString() + ' ' + coinOut.toUpperCase() + '/' + coinIn.toUpperCase();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -50,9 +51,6 @@ angular.module('copayApp.directives').directive('shapeshiftCoinTrader', function
|
||||||
'BTC': { name: 'Bitcoin', symbol: 'BTC' },
|
'BTC': { name: 'Bitcoin', symbol: 'BTC' },
|
||||||
'BCH': { name: 'Bitcoin Cash', symbol: 'BCH' }
|
'BCH': { name: 'Bitcoin Cash', symbol: 'BCH' }
|
||||||
};
|
};
|
||||||
$scope.coinIn = $scope.coins['BTC'].symbol;
|
|
||||||
$scope.coinOut = $scope.coins['BCH'].symbol;
|
|
||||||
$scope.getMarketData($scope.coinIn, $scope.coinOut);
|
|
||||||
|
|
||||||
function checkForError(data){
|
function checkForError(data){
|
||||||
if(data.error) return true;
|
if(data.error) return true;
|
||||||
|
|
@ -60,22 +58,21 @@ angular.module('copayApp.directives').directive('shapeshiftCoinTrader', function
|
||||||
}
|
}
|
||||||
|
|
||||||
$scope.shiftIt = function(){
|
$scope.shiftIt = function(){
|
||||||
console.log($scope.coinOut)
|
|
||||||
var validate=shapeshiftApiService.ValidateAddress($scope.withdrawalAddress, $scope.coinOut);
|
var validate=shapeshiftApiService.ValidateAddress($scope.withdrawalAddress, $scope.coinOut);
|
||||||
validate.then(function(valid){
|
validate.then(function(valid){
|
||||||
console.log($scope.withdrawalAddress)
|
//console.log($scope.withdrawalAddress)
|
||||||
console.log(valid)
|
//console.log(valid)
|
||||||
var tx = ShapeShift();
|
var tx = ShapeShift();
|
||||||
tx.then(function(txData){
|
tx.then(function(txData){
|
||||||
if(txData['fixedTxData']){
|
if(txData['fixedTxData']){
|
||||||
txData = txData.fixedTxData;
|
txData = txData.fixedTxData;
|
||||||
if(checkForError(txData)) return;
|
if(checkForError(txData)) return;
|
||||||
console.log(txData)
|
//console.log(txData)
|
||||||
var coinPair=txData.pair.split('_');
|
var coinPair=txData.pair.split('_');
|
||||||
txData.depositType = coinPair[0].toUpperCase();
|
txData.depositType = coinPair[0].toUpperCase();
|
||||||
txData.withdrawalType = coinPair[1].toUpperCase();
|
txData.withdrawalType = coinPair[1].toUpperCase();
|
||||||
var coin = $scope.coins[txData.depositType].name.toLowerCase();
|
var coin = $scope.coins[txData.depositType].name.toLowerCase();
|
||||||
console.log(coin)
|
//console.log(coin)
|
||||||
txData.depositQR = coin + ":" + txData.deposit + "?amount=" + txData.depositAmount
|
txData.depositQR = coin + ":" + txData.deposit + "?amount=" + txData.depositAmount
|
||||||
$scope.txFixedPending = true;
|
$scope.txFixedPending = true;
|
||||||
} else if(txData['normalTxData']){
|
} else if(txData['normalTxData']){
|
||||||
|
|
@ -94,7 +91,20 @@ angular.module('copayApp.directives').directive('shapeshiftCoinTrader', function
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$scope.depositInfo = txData;
|
$scope.depositInfo = txData;
|
||||||
console.log($scope.depositInfo)
|
console.log($scope.marketData);
|
||||||
|
console.log($scope.depositInfo);
|
||||||
|
var sendAddress = txData.depositQR;
|
||||||
|
if (sendAddress && sendAddress.indexOf('bitcoin cash') >= 0)
|
||||||
|
sendAddress = sendAddress.replace('bitcoin cash', 'bitcoincash');
|
||||||
|
|
||||||
|
var shapeshiftData = {
|
||||||
|
minAmount: $scope.marketData.minimum,
|
||||||
|
maxAmount: $scope.marketData.maxLimit
|
||||||
|
};
|
||||||
|
|
||||||
|
if (incomingData.redir(sendAddress, shapeshiftData))
|
||||||
|
return;
|
||||||
|
|
||||||
$scope.ShiftState = 'Cancel';
|
$scope.ShiftState = 'Cancel';
|
||||||
$scope.GetStatus();
|
$scope.GetStatus();
|
||||||
$scope.txInterval=$interval($scope.GetStatus, 8000);
|
$scope.txInterval=$interval($scope.GetStatus, 8000);
|
||||||
|
|
@ -119,33 +129,6 @@ angular.module('copayApp.directives').directive('shapeshiftCoinTrader', function
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
$scope.walletsBtc = profileService.getWallets({coin: 'btc'});
|
|
||||||
$scope.walletsBch = profileService.getWallets({coin: 'bch'});
|
|
||||||
$scope.fromWallet = $scope.walletsBtc[0];
|
|
||||||
$scope.toWallet = $scope.walletsBch[0];
|
|
||||||
$scope.fromWalletSelectorTitle = 'From';
|
|
||||||
$scope.toWalletSelectorTitle = 'To';
|
|
||||||
$scope.showFromWallets = false;
|
|
||||||
$scope.showFromWalletSelector = function() {
|
|
||||||
$scope.showFromWallets = true;
|
|
||||||
}
|
|
||||||
$scope.showToWallets = false;
|
|
||||||
$scope.showToWalletSelector = function() {
|
|
||||||
$scope.showToWallets = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
$scope.onFromWalletSelect = function(wallet) {
|
|
||||||
$scope.fromWallet = wallet;
|
|
||||||
//setProtocolHandler();
|
|
||||||
//$scope.setAddress();
|
|
||||||
};
|
|
||||||
|
|
||||||
$scope.onToWalletSelect = function(wallet) {
|
|
||||||
$scope.toWallet = wallet;
|
|
||||||
//setProtocolHandler();
|
|
||||||
//$scope.setAddress();
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
templateUrl: 'views/includes/shapeshift-coin-trader.html'
|
templateUrl: 'views/includes/shapeshift-coin-trader.html'
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -287,7 +287,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.state('tabs.send.amount', {
|
.state('tabs.send.amount', {
|
||||||
url: '/amount/:recipientType/:toAddress/:toName/:toEmail/:toColor/:coin/:fixedUnit',
|
url: '/amount/:recipientType/:toAddress/:toName/:toEmail/:toColor/:coin/:fixedUnit/:minShapeshiftAmount/:maxShapeshiftAmount',
|
||||||
views: {
|
views: {
|
||||||
'tab-send@tabs': {
|
'tab-send@tabs': {
|
||||||
controller: 'amountController',
|
controller: 'amountController',
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ angular.module('copayApp.services').factory('incomingData', function($log, $stat
|
||||||
$rootScope.$broadcast('incomingDataMenu.showMenu', data);
|
$rootScope.$broadcast('incomingDataMenu.showMenu', data);
|
||||||
};
|
};
|
||||||
|
|
||||||
root.redir = function(data) {
|
root.redir = function(data, shapeshiftData) {
|
||||||
$log.debug('Processing incoming data: ' + data);
|
$log.debug('Processing incoming data: ' + data);
|
||||||
|
|
||||||
function sanitizeUri(data) {
|
function sanitizeUri(data) {
|
||||||
|
|
@ -46,7 +46,7 @@ angular.module('copayApp.services').factory('incomingData', function($log, $stat
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function goSend(addr, amount, message, coin) {
|
function goSend(addr, amount, message, coin, shapeshiftData) {
|
||||||
$state.go('tabs.send', {}, {
|
$state.go('tabs.send', {}, {
|
||||||
'reload': true,
|
'reload': true,
|
||||||
'notify': $state.current.name == 'tabs.send' ? false : true
|
'notify': $state.current.name == 'tabs.send' ? false : true
|
||||||
|
|
@ -61,10 +61,12 @@ angular.module('copayApp.services').factory('incomingData', function($log, $stat
|
||||||
coin: coin
|
coin: coin
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
$state.transitionTo('tabs.send.amount', {
|
var params = { toAddress: addr, coin: coin };
|
||||||
toAddress: addr,
|
if (shapeshiftData) {
|
||||||
coin: coin
|
params['minShapeshiftAmount'] = shapeshiftData.minAmount;
|
||||||
});
|
params['maxShapeshiftAmount'] = shapeshiftData.maxAmount;
|
||||||
|
}
|
||||||
|
$state.transitionTo('tabs.send.amount', params);
|
||||||
}
|
}
|
||||||
}, 100);
|
}, 100);
|
||||||
}
|
}
|
||||||
|
|
@ -97,12 +99,12 @@ angular.module('copayApp.services').factory('incomingData', function($log, $stat
|
||||||
if (parsed.r) {
|
if (parsed.r) {
|
||||||
payproService.getPayProDetails(parsed.r, function(err, details) {
|
payproService.getPayProDetails(parsed.r, function(err, details) {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (addr && amount) goSend(addr, amount, message, coin);
|
if (addr && amount) goSend(addr, amount, message, coin, shapeshiftData);
|
||||||
else popupService.showAlert(gettextCatalog.getString('Error'), err);
|
else popupService.showAlert(gettextCatalog.getString('Error'), err);
|
||||||
} else handlePayPro(details);
|
} else handlePayPro(details);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
goSend(addr, amount, message, coin);
|
goSend(addr, amount, message, coin, shapeshiftData);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
// Cash URI
|
// Cash URI
|
||||||
|
|
@ -120,14 +122,14 @@ angular.module('copayApp.services').factory('incomingData', function($log, $stat
|
||||||
payproService.getPayProDetails(parsed.r, function(err, details) {
|
payproService.getPayProDetails(parsed.r, function(err, details) {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (addr && amount)
|
if (addr && amount)
|
||||||
goSend(addr, amount, message, coin);
|
goSend(addr, amount, message, coin, shapeshiftData);
|
||||||
else
|
else
|
||||||
popupService.showAlert(gettextCatalog.getString('Error'), err);
|
popupService.showAlert(gettextCatalog.getString('Error'), err);
|
||||||
}
|
}
|
||||||
handlePayPro(details, coin);
|
handlePayPro(details, coin);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
goSend(addr, amount, message, coin);
|
goSend(addr, amount, message, coin, shapeshiftData);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
@ -163,14 +165,14 @@ angular.module('copayApp.services').factory('incomingData', function($log, $stat
|
||||||
payproService.getPayProDetails(parsed.r, function(err, details) {
|
payproService.getPayProDetails(parsed.r, function(err, details) {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (addr && amount)
|
if (addr && amount)
|
||||||
goSend(addr, amount, message, coin);
|
goSend(addr, amount, message, coin, shapeshiftData);
|
||||||
else
|
else
|
||||||
popupService.showAlert(gettextCatalog.getString('Error'), err);
|
popupService.showAlert(gettextCatalog.getString('Error'), err);
|
||||||
}
|
}
|
||||||
handlePayPro(details, coin);
|
handlePayPro(details, coin);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
goSend(addr, amount, message, coin);
|
goSend(addr, amount, message, coin, shapeshiftData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,11 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div ng-if="minShapeshiftAmount && maxShapeshiftAmount">
|
||||||
|
Minimum amount: {{minShapeshiftAmount}} <br/>
|
||||||
|
Maximum amount: {{maxShapeshiftAmount}}
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="amount">
|
<div class="amount">
|
||||||
<div class="amount__editable" ng-class="{'amount__editable--minimize': smallFont, 'amount__editable--standard': !smallFont, 'amount__editable--placeholder': !amount}">
|
<div class="amount__editable" ng-class="{'amount__editable--minimize': smallFont, 'amount__editable--standard': !smallFont, 'amount__editable--placeholder': !amount}">
|
||||||
<span class="amount__number">{{amount || "0.00" }}</span>
|
<span class="amount__number">{{amount || "0.00" }}</span>
|
||||||
|
|
|
||||||
2
www/views/includes/fromWalletIcon.html
Normal file
2
www/views/includes/fromWalletIcon.html
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
<img ng-if="fromWallet.network == 'testnet'" src="img/icon-wallet-testnet.svg" ng-class="{'wallet-background-color-default': !fromWallet.color}" ng-style="{'background-color': fromWallet.color}" class="bg"/>
|
||||||
|
<img ng-if="fromWallet.network != 'testnet'" src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !fromWallet.color}" ng-style="{'background-color': fromWallet.color}" class="bg"/>
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<div>
|
<div ng-hide="direction=='in' || direction=='out'">
|
||||||
<div>
|
<div>
|
||||||
<select ng-model="selectedCoinModel.coin" ng-change="getMarketData(selectedCoinModel.coin)">
|
<select ng-model="selectedCoinModel.coin" ng-change="getMarketData(selectedCoinModel.coin)">
|
||||||
<option ng-repeat="(k, coin) in coins" value="{{coin.symbol}}">
|
<option ng-repeat="(k, coin) in coins" value="{{coin.symbol}}">
|
||||||
|
|
@ -12,14 +12,14 @@
|
||||||
<label>{{ label }}</label>
|
<label>{{ label }}</label>
|
||||||
<input type="text" ng-model="coinAddress">
|
<input type="text" ng-model="coinAddress">
|
||||||
</div>
|
</div>
|
||||||
<div ng-show="direction=='out'">
|
<div ng-show="direction=='in'">
|
||||||
<label>Amount</label>
|
<label>Amount</label>
|
||||||
<input type="text" ng-model="amount">
|
<input type="text" ng-model="amount">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div ng-if="direction=='in'">
|
<div ng-if="direction=='in'">
|
||||||
<div>Deposit Limit: {{marketData.limit}}</div>
|
|
||||||
<div>Minimum Amount: {{marketData.minimum}}</div>
|
<div>Minimum Amount: {{marketData.minimum}}</div>
|
||||||
|
<div>Maximum Amount: {{marketData.limit}}</div>
|
||||||
<div>MinerFee: {{marketData.minerFee}}</div>
|
<div>MinerFee: {{marketData.minerFee}}</div>
|
||||||
<div>Rate: {{marketData.rate}}</div>
|
<div>Rate: {{marketData.rate}}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<button type="button" ng-click="shiftIt()">{{ShiftState}}</button>
|
<button type="button" class="button button-standard button-primary" ng-click="shiftIt()">
|
||||||
|
{{ShiftState}}
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
2
www/views/includes/toWalletIcon.html
Normal file
2
www/views/includes/toWalletIcon.html
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
<img ng-if="toWallet.network == 'testnet'" src="img/icon-wallet-testnet.svg" ng-class="{'wallet-background-color-default': !toWallet.color}" ng-style="{'background-color': toWallet.color}" class="bg"/>
|
||||||
|
<img ng-if="toWallet.network != 'testnet'" src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !toWallet.color}" ng-style="{'background-color': toWallet.color}" class="bg"/>
|
||||||
104
www/views/shapeshift.html
Normal file
104
www/views/shapeshift.html
Normal file
|
|
@ -0,0 +1,104 @@
|
||||||
|
<ion-view class="settings" show-tabs>
|
||||||
|
<ion-nav-bar class="bar-royal">
|
||||||
|
<ion-nav-title>
|
||||||
|
{{'Shapeshift'|translate}}
|
||||||
|
</ion-nav-title>
|
||||||
|
<ion-nav-back-button>
|
||||||
|
</ion-nav-back-button>
|
||||||
|
</ion-nav-bar>
|
||||||
|
<ion-content>
|
||||||
|
<shapeshift-coin-trader>
|
||||||
|
<div class="send-header-wrapper shapeshift-banner">
|
||||||
|
<img class="shapeshift-logo" src="img/shapeshiftlogo.svg"/>
|
||||||
|
</div>
|
||||||
|
<div class="list card">
|
||||||
|
<div class="item item-heading">
|
||||||
|
<span translate><strong>From</strong></span>
|
||||||
|
</div>
|
||||||
|
<div class="item wallet-selector" ng-click="showFromWalletSelector()" ng-if="fromWallet">
|
||||||
|
<a ng-if="fromWallet" class="item item-sub item-icon-left item-big-icon-left item-icon-right">
|
||||||
|
<i class="icon big-icon-svg" ng-include="'views/includes/fromWalletIcon.html'"></i>
|
||||||
|
<span>
|
||||||
|
{{fromWallet.name || fromWallet.id}}
|
||||||
|
</span>
|
||||||
|
<p>
|
||||||
|
<span ng-if="!fromWallet.balanceHidden"> {{fromWallet.status.totalBalanceStr}} </span>
|
||||||
|
|
||||||
|
<span ng-if="fromWallet.balanceHidden" translate>[Balance Hidden]</span>
|
||||||
|
<span class="tab-home__wallet__multisig-number" ng-if="fromWallet.n > 1">
|
||||||
|
{{fromWallet.m}}-of-{{fromWallet.n}}
|
||||||
|
</span>
|
||||||
|
<span class="assertive" ng-if="fromWallet.error">{{fromWallet.error}}</span>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<i ng-if="!singleFromWallet" class="icon bp-arrow-right"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item item-heading">
|
||||||
|
<span translate><strong>To</strong></span>
|
||||||
|
</div>
|
||||||
|
<div class="item wallet-selector" ng-click="showToWalletSelector()" ng-if="toWallet">
|
||||||
|
<a ng-if="toWallet" class="item item-sub item-icon-left item-big-icon-left item-icon-right">
|
||||||
|
<i class="icon big-icon-svg" ng-include="'views/includes/toWalletIcon.html'"></i>
|
||||||
|
<span>
|
||||||
|
{{toWallet.name || toWallet.id}}
|
||||||
|
</span>
|
||||||
|
<p>
|
||||||
|
<span ng-if="!toWallet.balanceHidden"> {{toWallet.status.totalBalanceStr}} </span>
|
||||||
|
|
||||||
|
<span ng-if="toWallet.balanceHidden" translate>[Balance Hidden]</span>
|
||||||
|
<span class="tab-home__wallet__multisig-number" ng-if="toWallet.n > 1">
|
||||||
|
{{toWallet.m}}-of-{{toWallet.n}}
|
||||||
|
</span>
|
||||||
|
<span class="assertive" ng-if="toWallet.error">{{toWallet.error}}</span>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<i ng-if="!singleToWallet" class="icon bp-arrow-right"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="item item-heading">
|
||||||
|
Rate: {{rateString}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<shapeshift-coin-selector
|
||||||
|
coins="coins"
|
||||||
|
label="'Return Address'"
|
||||||
|
get-market-data="getMarketDataIn"
|
||||||
|
market-data="marketData"
|
||||||
|
selected-coin="fromWallet.coin"
|
||||||
|
coin-address="fromWalletAddress"
|
||||||
|
amount="amount"
|
||||||
|
direction="'in'">
|
||||||
|
</shapeshift-coin-selector>
|
||||||
|
<br/>
|
||||||
|
<shapeshift-coin-selector
|
||||||
|
coins="coins"
|
||||||
|
label="'Withdrawal Address'"
|
||||||
|
get-market-data="getMarketDataOut"
|
||||||
|
selected-coin="toWallet.coin"
|
||||||
|
coin-address="toWalletAddress"
|
||||||
|
direction="'out'">
|
||||||
|
</shapeshift-coin-selector>
|
||||||
|
<shapeshift-coin-error ssError="ssError"></shapeshift-coin-error>
|
||||||
|
<!--<shapeshift-coin-deposit-info deposit-status="DepositStatus" deposit-info="depositInfo"></shapeshift-coin-deposit-info>-->
|
||||||
|
<shapeshift-coin-shift-button shift-it="shiftIt" shift-state="ShiftState"></shapeshift-coin-shift-button>
|
||||||
|
</shapeshift-coin-trader>
|
||||||
|
</ion-content>
|
||||||
|
|
||||||
|
<wallet-selector
|
||||||
|
wallet-selector-wallets="fromWallets"
|
||||||
|
wallet-selector-selected-wallet="fromWallet"
|
||||||
|
wallet-selector-show="showFromWallets"
|
||||||
|
wallet-selector-on-select="onFromWalletSelect">
|
||||||
|
</wallet-selector>
|
||||||
|
|
||||||
|
<wallet-selector
|
||||||
|
wallet-selector-title="toWalletSelectorTitle"
|
||||||
|
wallet-selector-wallets="toWallets"
|
||||||
|
wallet-selector-selected-wallet="toWallet"
|
||||||
|
wallet-selector-show="showToWallets"
|
||||||
|
wallet-selector-on-select="onToWalletSelect">
|
||||||
|
</wallet-selector>
|
||||||
|
</ion-view>
|
||||||
|
|
@ -97,5 +97,8 @@
|
||||||
<div class="ng-hide list card" ng-show="walletsBtc[0] && buyAndSellItems.length>0" ng-include="'views/includes/buyAndSellCard.html'"></div>
|
<div class="ng-hide list card" ng-show="walletsBtc[0] && buyAndSellItems.length>0" ng-include="'views/includes/buyAndSellCard.html'"></div>
|
||||||
<div class="ng-hide list card" ng-show="homeIntegrations.length>0" ng-include="'views/includes/homeIntegrations.html'"></div>
|
<div class="ng-hide list card" ng-show="homeIntegrations.length>0" ng-include="'views/includes/homeIntegrations.html'"></div>
|
||||||
<div class="ng-hide list card" ng-show="nextStepsItems.length>0 && !isWindowsPhoneApp" ng-include="'views/includes/nextSteps.html'"></div>
|
<div class="ng-hide list card" ng-show="nextStepsItems.length>0 && !isWindowsPhoneApp" ng-include="'views/includes/nextSteps.html'"></div>
|
||||||
|
<div class="list card">
|
||||||
|
<a class="item item-icon-right item-heading" ui-sref="tabs.shapeshift">Shapeshift</a>
|
||||||
|
</div>
|
||||||
</ion-content>
|
</ion-content>
|
||||||
</ion-view>
|
</ion-view>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue