Compare commits

..

23 commits

Author SHA1 Message Date
Sebastiaan Pasma
3f359f033e
openWalletSettings-function + refactor of addresses-route.. Removed unused paths. 2018-10-02 15:48:50 +02:00
Sebastiaan Pasma
9b7827236c
remove unused goBack function 2018-10-02 15:02:04 +02:00
Sebastiaan Pasma
2cbf6ef50e
Removed some unused previous situation code. 2018-10-02 15:00:11 +02:00
Sebastiaan Pasma
fc5f6cfa65
Remove wallet preferences from App Settings and change the route to be able to use inside wallet Details (within tab-home) 2018-10-02 14:55:31 +02:00
Sebastiaan Pasma
5896dac9b7
Merge branch 'wallet/sprint/21' into wallet/task/497 2018-10-02 14:38:04 +02:00
Sebastiaan Pasma
26674447e1
Merge remote-tracking branch 'origin/wallet/sprint/22' into wallet/task/497 2018-10-02 14:37:51 +02:00
Sebastiaan Pasma
0598a07af7
Merge pull request #354 from Bitcoin-com/wallet/task/593
593 - Bugfix for Confirmation-changes not applied to unconfirmed transactions
2018-09-24 14:06:02 +02:00
Jean-Baptiste Dominguez
9f904bb098
Merge pull request #358 from Bitcoin-com/wallet/sprint/21
android fix
2018-09-24 12:32:56 +02:00
Jean-Baptiste Dominguez
37596c3a25
Merge pull request #355 from Bitcoin-com/wallet/task/595
595 - Get Android build working again
2018-09-24 12:29:24 +02:00
Jean-Baptiste Dominguez
dbe920a67b
Merge pull request #357 from Bitcoin-com/wallet/task/546
546 - Bugfix for crashing when scanning BitPay invoice URL
2018-09-24 11:47:16 +02:00
Brendon Duncan
d2178d670f Fix identification of BitPay. 2018-09-23 21:05:26 -07:00
Brendon Duncan
8f8027d573 Reverse out bugfix. 2018-09-23 20:56:15 -07:00
Brendon Duncan
babdc8a13b Restored production setting for page size. 2018-09-23 20:14:42 -07:00
Brendon Duncan
6452a0c7f4 Handling JSON exception. 2018-09-23 13:06:36 -07:00
Brendon Duncan
1b0541a7b5 Return error from Shapeshift when pairs are unavailable. 2018-09-22 22:22:06 -07:00
Brendon Duncan
c661798cd1 Android Debug and release builds work when Gradle 3.3 is in PATH. 2018-09-22 17:45:19 -07:00
Brendon Duncan
a5a1d3edb6 Remove debug logging. 2018-09-22 11:07:24 -07:00
Brendon Duncan
0ba4db83e0 Handling confirmation updates correctly for early transactions. 2018-09-22 11:03:26 -07:00
Sebastiaan Pasma
33df5044d5
Hardware back button support 2018-09-19 11:37:46 +02:00
Sebastiaan Pasma
f8a65c4932
Merge branch 'wallet/sprint/22' into wallet/task/497 2018-09-19 11:20:52 +02:00
Sebastiaan Pasma
276bce8bc4
disable animation 2018-09-18 15:19:06 +02:00
Sebastiaan Pasma
daf39c2407
Merge remote-tracking branch 'origin/wallet/sprint/22' into wallet/task/497 2018-09-17 13:41:52 +02:00
Sebastiaan Pasma
1615db9890
Wallet Settings button in Wallet Details 2018-09-13 14:49:06 +02:00
23 changed files with 135 additions and 297 deletions

14
.vscode/launch.json vendored
View file

@ -1,14 +0,0 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}/www/index.html"
}
]
}

View file

@ -71,7 +71,7 @@ module.exports = function(grunt) {
sign_android: {
// When the build log outputs "Built the following apk(s):", it seems to need the filename to start with "android-release".
// It looks like it simply lists all apk files starting with "android-release"
command: 'rm -f platforms/android/build/outputs/apk/android-release-signed-*.apk; jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ../bitcoin-com-release-key.jks -signedjar platforms/android/build/outputs/apk/android-release-signed.apk platforms/android/build/outputs/apk/android-release-unsigned.apk bitcoin-com && zipalign -v 4 platforms/android/build/outputs/apk/android-release-signed.apk platforms/android/build/outputs/apk/bitcoin-com-wallet-<%= pkg.fullVersion %>-android-signed-aligned.apk',
command: 'rm -f platforms/android/build/outputs/apk/release/*-android-signed-aligned.apk; jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ../bitcoin-com-release-key.jks -signedjar platforms/android/build/outputs/apk/release/android-release-signed.apk platforms/android/build/outputs/apk/release/android-release-unsigned.apk bitcoin-com && zipalign -v 4 platforms/android/build/outputs/apk/release/android-release-signed.apk platforms/android/build/outputs/apk/release/bitcoin-com-wallet-<%= pkg.fullVersion %>-android-signed-aligned.apk',
stdin: true,
},
sign_desktop_dist: {

View file

@ -1,24 +1,3 @@
This is a fork of the Bitcoin.com wallet to add additional features.
Features included:
- Zero fee transactions (only works for Bitcoin Cash). You will be asked for, if you want to send a transaction as zero fee on the confirmation page.
## Zero fee transactions:
Because most network nodes on the Bitcoin Cash network don't relay zero fee txs, you will experience some strange issues, but don't worry: for me personally the Bitcoin.com pool has included all my zero fee transactions, but please beware that the receiver probably won't see your tx before it has been confirmed and please do also keep in mind, that the transactions coming after it won't confirm or be seen before the zero fee one has been confirmed.
If you do already have a Bitcoin.com wallet, you need to create a new one to use this feature or change the wallet URL to: https://bws.freepages.dk/bws/api
## Disclaimer
Please beware this is my personal experimental project. You are more than welcome to play with it, but I don't take any responsibility of loss of funds due to errors in the code, so please make sure you made a backup before running this software.
## Builds
You can build the software yourself using the instructions below or use prebuilt binaries which can be found here (currently Windows and Linux only): https://ipfs.io/ipfs/QmR1DaS3QsDS48SzAWKUWFfmtMfJc4tgMtkSk3JFmuzewe
##
The Bitcoin.com wallet is a fork of the Copay Wallet (https://github.com/bitpay/copay).
The Bitcoin.com wallet is a secure bitcoin wallet platform for both desktop and mobile devices. It uses [Bitcore Wallet Service](https://github.com/Bitcoin-com/bitcore-wallet-service) (our fork of the [Bitpay Bitcore Wallet Service](https://github.com/bitpay/bitcore-wallet-service)) (BWS) for peer synchronization and network interfacing.

View file

@ -77,7 +77,7 @@
</plugin>
<!-- Supported Platforms -->
<engine name="ios" spec="~4.5.3" />
<engine name="android" spec="~6.3.0" />
<engine name="android" spec="~6.4.0" />
<engine name="windows" spec="~5.0.0" />
<!-- Platform Specific Settings -->

View file

@ -1,5 +1,6 @@
ext {
ANDROID_SUPPORT_V4_VERSION = '26.1.0'
ANDROID_SUPPORT_ANNOTATIONS_VERSION = '26.1.0'
}
configurations.all {

View file

@ -158,14 +158,7 @@ angular.module('copayApp.controllers').controller('addressesController', functio
};
$scope.viewAllAddresses = function() {
var fromView = $ionicHistory.currentStateName();
var path;
if (fromView.indexOf('settings') !== -1) {
path = 'tabs.settings.allAddresses';
} else {
path = 'tabs.wallet.allAddresses';
}
$state.go(path, {
$state.go('tabs.wallet.allAddresses', {
walletId: $scope.wallet.id
});
};
@ -209,7 +202,7 @@ angular.module('copayApp.controllers').controller('addressesController', functio
return '';
}
return dateObj.toJSON();
};
}
ongoingProcess.set('sendingByEmail', true);
$timeout(function() {
@ -240,7 +233,7 @@ angular.module('copayApp.controllers').controller('addressesController', functio
};
$scope.$on("$ionicView.afterEnter", function(event, data) {
$scope.allAddressesView = data.stateName == 'tabs.receive.allAddresses' ? true : false;
$scope.allAddressesView = data.stateName === 'tabs.wallet.allAddresses';
if (!isCachedWallet($stateParams.walletId)) $scope.init();
else $log.debug('Addresses cached for Wallet:', $stateParams.walletId);
});

View file

@ -517,8 +517,7 @@ angular.module('copayApp.controllers').controller('confirmController', function(
if (!lodash.isEmpty(warningMsg))
msg += '\n' + warningMsg;
popupService.showAlert(null, msg, function() {});
popupService.showAlert(null, msg, function() {});
};
$scope.onWalletSelect = function(wallet) {

View file

@ -116,4 +116,4 @@ angular.module('copayApp.controllers').controller('preferencesController',
$scope.$on("$ionicView.enter", function(event, data) {
$ionicNavBarDelegate.showBar(true);
});
});
});

View file

@ -6,7 +6,7 @@ angular.module('copayApp.controllers').controller('preferencesAdvancedController
$scope.wallet = wallet;
$scope.goToAddresses = function() {
$state.go('tabs.settings.addresses', {
$state.go('tabs.preferences.addresses', {
walletId: $stateParams.walletId,
});
};

View file

@ -718,23 +718,14 @@ angular
if (tx.paypro)
startExpirationTimer(tx.paypro.expires);
popupService.showConfirm(null, 'Do you want this transaction to be sent without a fee?', 'Yes', 'No', function(ok) {
if(ok){
tx.feeRate = 0;
// tx.feeLevel = 'free';
usingCustomFee = true;
}
updateTx(tx, vm.originWallet, {
dryRun: true
}, function(err) {
$timeout(function() {
$scope.$apply();
}, 10);
});
});
updateTx(tx, vm.originWallet, {
dryRun: true
}, function(err) {
$timeout(function() {
$scope.$apply();
}, 10);
});
// setWalletSelector(tx.coin, tx.network, tx.amount, function(err) {
// if (err) {
@ -787,7 +778,6 @@ angular
msg += '\n' + warningMsg;
popupService.showAlert(null, msg, function() {});
//popupService.showConfirm(null, msg, null, null, function() {});
};
function statusChangeHandler(processName, showName, isOn) {
@ -865,11 +855,7 @@ angular
}
var msg;
// if (tx.feeLevel == 'free'){
// tx.feeRate = 0;
// }
// else
if (usingCustomFee) {
if (usingCustomFee) {
msg = gettextCatalog.getString('Custom');
tx.feeLevelName = msg;
} else if (usingMerchantFee) {
@ -879,9 +865,7 @@ angular
} else {
tx.feeLevelName = feeService.feeOpts[tx.feeLevel];
tx.feeRate = feeRate;
}
getSendMaxInfo(lodash.clone(tx), wallet, function(err, sendMaxInfo) {
if (err) {

View file

@ -1,6 +1,6 @@
'use strict';
angular.module('copayApp.controllers').controller('servicesController', function(externalLinkService, $scope, $ionicScrollDelegate, $timeout, servicesService, configService) {
angular.module('copayApp.controllers').controller('servicesController', function($scope, $ionicScrollDelegate, $timeout, servicesService, configService) {
$scope.hide = false;
configService.whenAvailable(function(config) {
@ -20,8 +20,4 @@ angular.module('copayApp.controllers').controller('servicesController', function
}, 10);
};
$scope.open = function(url) {
externalLinkService.open(url, false);
}
});

View file

@ -15,7 +15,9 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
updatingTxHistory: false,
fetchedAllTxHistory: false,
//updateTxHistoryError: false
updateTxHistoryFailed: false
updateTxHistoryFailed: false,
openWalletSettings: openWalletSettings
};
// Need flag for when to allow infinite scroll at bottom
@ -115,6 +117,10 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
});
};
function openWalletSettings() {
$state.go('tabs.preferences', {'walletId': $scope.wallet.id, 'backToDetails': true});
}
$scope.openSearchModal = function() {
$scope.color = $scope.wallet.color;
$scope.isSearching = true;

View file

@ -194,16 +194,6 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
}
}
})
.state('tabs.wallet.addresses', {
url: '/addresses/:walletId/:toAddress',
views: {
'tab-home@tabs': {
controller: 'addressesController',
templateUrl: 'views/addresses.html'
}
}
})
.state('tabs.wallet.allAddresses', {
url: '/allAddresses/:walletId',
views: {
@ -528,7 +518,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
.state('tabs.preferences', {
url: '/preferences/:walletId',
views: {
'tab-settings@tabs': {
'tab-home@tabs': {
controller: 'preferencesController',
templateUrl: 'views/preferences.html'
}
@ -537,7 +527,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
.state('tabs.preferences.preferencesAlias', {
url: '/preferencesAlias',
views: {
'tab-settings@tabs': {
'tab-home@tabs': {
controller: 'preferencesAliasController',
templateUrl: 'views/preferencesAlias.html'
}
@ -546,7 +536,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
.state('tabs.preferences.preferencesColor', {
url: '/preferencesColor',
views: {
'tab-settings@tabs': {
'tab-home@tabs': {
controller: 'preferencesColorController',
templateUrl: 'views/preferencesColor.html'
}
@ -555,7 +545,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
.state('tabs.preferences.backupWarning', {
url: '/backupWarning/:from',
views: {
'tab-settings@tabs': {
'tab-home@tabs': {
controller: 'backupWarningController',
templateUrl: 'views/backupWarning.html'
}
@ -564,7 +554,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
.state('tabs.preferences.backup', {
url: '/backup',
views: {
'tab-settings@tabs': {
'tab-home@tabs': {
controller: 'backupController',
templateUrl: 'views/backup.html'
}
@ -573,7 +563,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
.state('tabs.preferences.preferencesAdvanced', {
url: '/preferencesAdvanced',
views: {
'tab-settings@tabs': {
'tab-home@tabs': {
controller: 'preferencesAdvancedController',
templateUrl: 'views/preferencesAdvanced.html'
}
@ -582,16 +572,25 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
.state('tabs.preferences.information', {
url: '/information',
views: {
'tab-settings@tabs': {
'tab-home@tabs': {
controller: 'preferencesInformation',
templateUrl: 'views/preferencesInformation.html'
}
}
})
.state('tabs.preferences.addresses', { /* Addresses */
url: '/addresses/:walletId/:toAddress',
views: {
'tab-home@tabs': {
controller: 'addressesController',
templateUrl: 'views/addresses.html'
}
}
})
.state('tabs.preferences.export', {
url: '/export',
views: {
'tab-settings@tabs': {
'tab-home@tabs': {
controller: 'exportController',
templateUrl: 'views/export.html'
}
@ -600,7 +599,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
.state('tabs.preferences.preferencesBwsUrl', {
url: '/preferencesBwsUrl',
views: {
'tab-settings@tabs': {
'tab-home@tabs': {
controller: 'preferencesBwsUrlController',
templateUrl: 'views/preferencesBwsUrl.html'
}
@ -609,7 +608,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
.state('tabs.preferences.preferencesHistory', {
url: '/preferencesHistory',
views: {
'tab-settings@tabs': {
'tab-home@tabs': {
controller: 'preferencesHistory',
templateUrl: 'views/preferencesHistory.html'
}
@ -618,7 +617,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
.state('tabs.preferences.preferencesExternal', {
url: '/preferencesExternal',
views: {
'tab-settings@tabs': {
'tab-home@tabs': {
controller: 'preferencesExternalController',
templateUrl: 'views/preferencesExternal.html'
}
@ -627,17 +626,16 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
.state('tabs.preferences.delete', {
url: '/delete',
views: {
'tab-settings@tabs': {
'tab-home@tabs': {
controller: 'preferencesDeleteWalletController',
templateUrl: 'views/preferencesDeleteWallet.html'
}
}
})
.state('tabs.preferencesCash.scan', {
url: '/cashScan',
views: {
'tab-settings@tabs': {
'tab-home@tabs': {
controller: 'cashScanController',
templateUrl: 'views/cashScan.html'
}
@ -695,31 +693,6 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
}
})
/*
*
* Addresses
*
*/
.state('tabs.settings.addresses', {
url: '/addresses/:walletId/:toAddress',
views: {
'tab-settings@tabs': {
controller: 'addressesController',
templateUrl: 'views/addresses.html'
}
}
})
.state('tabs.settings.allAddresses', {
url: '/allAddresses/:walletId',
views: {
'tab-settings@tabs': {
controller: 'addressesController',
templateUrl: 'views/allAddresses.html'
}
}
})
/*
*
* Request Specific amount

View file

@ -18,7 +18,7 @@ angular.module('copayApp.services').factory('configService', function(storageSer
},
bwscash: {
url: 'https://bws.freepages.dk/bws/api'
url: 'https://bwscash.bitcoin.com/bws/api'
},
download: {

View file

@ -12,7 +12,6 @@ angular.module('copayApp.services').factory('feeService', function($log, $timeou
normal: gettext('Normal'),
economy: gettext('Economy'),
superEconomy: gettext('Super Economy'),
// free: gettext('No fee (works only for BCH)'),
custom: gettext('Custom')
};
@ -32,7 +31,6 @@ angular.module('copayApp.services').factory('feeService', function($log, $timeou
root.getFeeRate = function(coin, network, feeLevel, cb) {
if (feeLevel == 'custom') return cb();
// if (feeLevel == 'free') return cb(null, 0);
network = network || 'livenet';
@ -50,8 +48,8 @@ angular.module('copayApp.services').factory('feeService', function($log, $timeou
})
});
}
var feeRate = feeLevelRate.feePerKb;
var feeRate = feeLevelRate.feePerKb;
if (!fromCache) $log.debug('Dynamic fee: ' + feeLevel + '/' + network + ' ' + (feeLevelRate.feePerKb / 1000).toFixed() + ' SAT/B');

View file

@ -52,7 +52,7 @@ angular
// Detect some merchant that we know
if (payProData.memo.indexOf('eGifter') > -1) {
name = 'eGifter'
} else if (paymentUrl.indexOf('https://bitpay.com') > -1) {
} else if (payProData.url.indexOf('https://bitpay.com') > -1) {
name = 'BitPay';
}

View file

@ -5,7 +5,7 @@ angular.module('copayApp.services').factory('servicesService', function(configSe
name: 'shapeshift',
title: 'Shapeshift',
icon: 'icon-shapeshift',
href: 'https://shapeshift.io/'
sref: 'tabs.shapeshift',
}];
root.register = function(serviceInfo) {

View file

@ -24,7 +24,7 @@ var ShapeShift = (function() {
var parsedResponse = JP(xmlhttp.responseText);
cb.apply(null, [parsedResponse]);
} else {
cb.apply(null, [new Error('Request Failed')])
cb.apply(null, [new Error('Request Failed')]);
}
}
};

View file

@ -7,8 +7,8 @@
.factory('walletHistoryService', walletHistoryService);
function walletHistoryService(configService, storageService, lodash, $log, txFormatService) {
//var PAGE_SIZE = 50;
var PAGE_SIZE = 20; // For dev only
var PAGE_SIZE = 50;
//var PAGE_SIZE = 20; // For dev only
// How much to overlap on each end of the page, for mitigating inconsistent sort order.
var PAGE_OVERLAP_FRACTION = 0.2;
var PAGE_OVERLAP = Math.floor(PAGE_SIZE * PAGE_OVERLAP_FRACTION);
@ -28,8 +28,8 @@
function addEarlyTransactions(walletId, cachedTxs, newTxs) {
var cachedTxIndexFromId = {};
cachedTxs.forEach(function forCachedTx(tx){
cachedTxIndexFromId[tx.txid] = true;
cachedTxs.forEach(function forCachedTx(tx, txIndex){
cachedTxIndexFromId[tx.txid] = txIndex;
});
var confirmationsUpdated = false;
@ -147,7 +147,6 @@
* @param {function(error, txs)} cb - txs is always an array, may be empty
*/
function getCachedTxHistory(walletId, cb) {
console.log('txhistory updateLocalTxHistoryByPage()');
storageService.getTxHistory(walletId, function onGetTxHistory(err, txHistoryString){
if (err) {
return cb(err, []);
@ -230,7 +229,6 @@
}
function updateLocalTxHistoryByPage(wallet, getLatest, flushCacheOnNew, cb) {
console.log('txhistory updaetLocalTxHistoryByPage()');
if (flushCacheOnNew) {
fetchTxHistoryByPage(wallet, 0, function onFetchTxHistory(err, txs){
if (err) {

View file

@ -10083,7 +10083,7 @@ ion-view.deflash-blue:before, ion-view#view-amount:before, ion-view#view-confirm
.onboarding .button.button-white.button-standard,
.onboarding .button.button-green.button-standard,
.onboarding .button.button-assertive.button-standard, #shapeshift .button-shapeshift {
width: 90%;
width: 85%;
max-width: 300px;
margin-left: auto;
margin-right: auto;
@ -10195,7 +10195,6 @@ ion-view.deflash-blue:before, ion-view#view-amount:before, ion-view#view-confirm
.button {
border-radius: 6px; }
.button.button-full {
border-radius: 0;
display: block; }
.button-green {
border-color: #FFF;
@ -10264,8 +10263,8 @@ ion-view.deflash-blue:before, ion-view#view-amount:before, ion-view#view-confirm
color: #FFFFFF;
text-decoration: none; }
.button-white-outline.active, .button-white-outline.activated {
border-color: #FFFFFF;
background-color: #FFFFFF; }
border-color: #FFF;
background-color: #FAFAFA; }
.button-white-outline.button-outline {
border-color: #FFFFFF;
background: transparent;
@ -10633,7 +10632,7 @@ qrcode {
#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: 1.2em; }
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; } }
@ -10660,8 +10659,7 @@ qrcode {
line-height: 1em; }
#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;
width: 100%; }
word-break: break-all; }
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .alternative-amount {
color: #6F6F70; }
#view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .switch-currencies {
@ -10682,33 +10680,30 @@ qrcode {
justify-content: space-between;
margin: 0 14px; }
#view-amount .scroll-content .send-amount-extras .available-funds {
color: #6F6F70;
text-align: left; }
#view-amount .scroll-content .send-amount-extras .change-currency {
text-align: right; }
color: #6F6F70; }
#view-amount .scroll-content .send-amount-extras .warning {
color: #b7664d; }
#view-amount .scroll-content .send-amount-extras .extra {
flex: 1;
#view-amount .scroll-content .send-amount-extras .extra,
#view-amount .scroll-content .send-amount-extras button.extra {
/*display: flex;*/
flex: 0 1 auto; }
#view-amount .scroll-content .send-amount-extras button.extra {
background: none;
border: none;
color: #000;
font-family: 'ProximaNova';
font-size: 14px;
line-height: normal;
min-height: auto;
min-width: auto;
padding: 0; }
#view-amount .scroll-content .send-amount-extras .button .icon:before {
font-size: 14px;
line-height: normal; }
#view-amount .scroll-content .send-amount-extras .extra .button {
background: none;
border: none;
border-radius: 0;
color: #000;
font-family: 'ProximaNova';
font-size: 14px;
line-height: normal;
min-height: auto;
min-width: auto;
padding: 0; }
#view-amount .scroll-content .send-amount-extras .extra .button .icon:before {
font-size: 14px;
line-height: normal; }
#view-amount .scroll-content .send-amount-extras .extra .button span {
display: flex;
align-items: center;
justify-content: center; }
#view-amount .scroll-content .send-amount-extras .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 {
@ -10944,14 +10939,14 @@ qrcode {
#tab-home .buttons .button {
border: 2px solid;
border-radius: 47px;
padding: 8px 2px 8px 2px;
padding: 0 15px 0 15px;
text-align: center;
width: 100%;
max-width: 300px;
font-size: 19px;
font-weight: bolder;
min-height: 0;
line-height: 19px; }
min-height: auto;
line-height: 36px; }
#tab-home .wallet-coin-logo {
vertical-align: middle;
@ -11018,10 +11013,6 @@ qrcode {
#tab-home .release .title {
font-weight: 700;
color: #444; }
#tab-home .release .release-notes {
white-space: pre;
white-space: pre-line;
text-align: left; }
#tab-home .release .button {
width: 100%;
border: none; }
@ -11034,14 +11025,6 @@ qrcode {
#tab-home .badge {
top: 11px; }
.popup-update .popup-buttons {
display: block; }
.popup-update .popup-buttons .button {
display: block;
min-width: 100% !important;
margin-top: 4px; }
#tab-receive .button-share {
color: #fff;
box-shadow: none;
@ -11118,8 +11101,6 @@ qrcode {
#tab-receive .payment-received-container {
margin: 0 20px; }
#tab-receive .payment-received-container svg {
max-height: 400px; }
#tab-receive .payment-received-container .payment-received-amount {
font-size: 1.8em;
display: block;
@ -11226,7 +11207,7 @@ qrcode {
margin: auto;
margin-top: 18px; }
#tab-send .send-wrapper .buttons .button {
min-height: 65px;
height: 60px;
line-height: 16px;
margin-right: 0px;
width: 95%;
@ -11303,9 +11284,7 @@ qrcode {
margin-top: 18px; }
#tab-send .sendTip .buttons .button {
font-weight: bold;
font-size: 19px;
line-height: 26px;
padding: 8px 6px; }
font-size: 19px; }
#tab-send .sendTip .button-first-contact img {
height: 19px;
width: 19px;
@ -11941,13 +11920,6 @@ qrcode {
#walletDetails .bp-content.status-bar {
margin-top: 20px;
margin-top: env(safe-area-inset-top); }
#walletDetails .bp-content.collapse ion-content {
margin-top: 40px; }
#walletDetails .bp-content.collapse .amount__scale, #walletDetails .bp-content.collapse .amount__error {
-webkit-transform: scale3d(0.5, 0.5, 0.5) translateY(0px);
transform: scale3d(0.5, 0.5, 0.5) translateY(0px); }
#walletDetails .bp-content.collapse .amount-alternative, #walletDetails .bp-content.collapse .send-receive-buttons, #walletDetails .bp-content.collapse .wallet-details-wallet-info {
opacity: 0; }
#walletDetails .bar-header {
border: 0;
background: #eeb640; }
@ -11960,12 +11932,9 @@ qrcode {
#walletDetails ion-content {
padding-top: 0;
top: 0;
transition: all 0.25s ease-in-out;
margin-top: 185px;
margin-bottom: 16px; }
@media only screen and (max-height: 500px) {
#walletDetails ion-content {
margin-top: 165px; } }
#walletDetails ion-content.collapsible {
margin-top: 230px; }
#walletDetails ion-content .scroll {
background: #f8f8f9;
min-height: 300px; }
@ -11996,45 +11965,38 @@ qrcode {
justify-content: space-evenly;
width: 100%;
position: absolute;
bottom: 20px;
transition: all 0.25s ease-in-out; }
bottom: 20px; }
#walletDetails .amount-wrapper .send-receive-buttons > .col {
padding: 5px 10px;
margin-bottom: 0; }
#walletDetails .amount-wrapper .send-receive-buttons .button {
border: 2px solid;
border-radius: 47px;
padding: 6px 2px 6px 2px;
padding: 0 15px 0 15px;
text-align: center;
width: 100%;
max-width: 300px;
font-size: 19px;
font-weight: bolder;
min-height: 0;
line-height: 19px; }
min-height: auto;
line-height: 36px; }
#walletDetails .amount {
align-items: center;
color: #fff;
display: block;
height: 230px;
justify-content: center;
padding-top: 40px;
width: 100%;
text-align: center;
transition: all 0.25s ease-in-out;
width: 100%; }
@media only screen and (max-height: 500px) {
#walletDetails .amount {
height: 210px; } }
color: #fff;
height: 230px;
padding-top: 40px;
display: block;
align-items: center;
justify-content: center; }
#walletDetails .amount__balance {
-webkit-transform: scale3d(1, 1, 1) translateY(45px);
transform: scale3d(1, 1, 1) translateY(45px);
transition: all 0.25s ease-in-out; }
transform: scale3d(1, 1, 1) translateY(45px); }
#walletDetails .amount__updating {
z-index: 999;
margin-top: -2.1rem; }
#walletDetails .amount-alternative {
line-height: 36px;
transition: all 0.25s ease-in-out; }
line-height: 36px; }
#walletDetails .amount__button-balance {
background-color: transparent;
border: 1px solid rgba(255, 255, 255, 0.25);
@ -12044,8 +12006,7 @@ qrcode {
vertical-align: middle; }
#walletDetails .amount__error {
font-size: 14px;
padding: 35px 20px;
opacity: 1; }
padding: 35px 20px; }
#walletDetails .no-alternative {
padding-top: 45px; }
#walletDetails .item.item-footer {
@ -12110,9 +12071,7 @@ a.item {
font-size: 0.9em; }
.loading-wallet svg {
margin-top: 0;
width: 16px;
height: 16px; }
margin-top: 0; }
#advanced-settings .list .item:before {
display: block;
@ -12166,9 +12125,7 @@ a.item {
margin-top: 18px; }
#shapeshift .empty-case .buttons .button {
font-weight: bold;
font-size: 19px;
line-height: 26px;
padding: 8px 6px; }
font-size: 19px; }
#shapeshift .empty-case .button-first-contact img {
height: 19px;
width: 19px;
@ -13855,7 +13812,6 @@ click-to-accept {
height: 92px;
width: 100%; }
click-to-accept .click-to-accept__button.button.button-primary.button-standard {
border-radius: 0;
height: 100%;
max-width: 9999px;
width: 100%; }
@ -13962,8 +13918,6 @@ slide-to-accept {
height: 92px;
width: 100%;
background: #494949; }
slide-to-accept .slide .button {
border-radius: 0; }
slide-to-accept .slide__listener {
height: 100%;
width: 100%;
@ -15395,25 +15349,20 @@ log-options #check-bar .checkbox-icon {
#cash-scan a {
cursor: pointer; }
#view-review slide-to-accept, #view-review slide-to-accept-success {
margin-bottom: constant(safe-area-inset-bottom);
/* iOS 11.0 */
margin-bottom: env(safe-area-inset-bottom);
/* iOS 11.2 */ }
#view-review .fee-summary {
bottom: 92px;
bottom: calc(92px + constant(safe-area-inset-bottom));
/* iOS 11.0 */
bottom: calc(92px + env(safe-area-inset-bottom));
/* iOS 11.2 */
position: absolute; }
#view-review .shapeshift-banner, #view-review .bitpay-banner, #view-review .egifter-banner {
box-shadow: none; }
#view-review .warning {
color: #b7664d; }
#view-review {
background-color: #494949; }
#view-review slide-to-accept, #view-review slide-to-accept-success {
margin-bottom: constant(safe-area-inset-bottom);
/* iOS 11.0 */
margin-bottom: env(safe-area-inset-bottom);
/* iOS 11.2 */ }
#view-review .fee-summary {
position: absolute;
bottom: 92px; }
#view-review .shapeshift-banner, #view-review .bitpay-banner, #view-review .egifter-banner {
box-shadow: none; }
#view-review .warning {
color: #b7664d; }
.gravatar {
border-radius: 3px;
@ -15446,7 +15395,6 @@ log-options #check-bar .checkbox-icon {
left: 13px;
top: 50%;
padding: 0;
-webkit-transform: translate(0, -50%);
transform: translate(0, -50%); }
.item .item-content.item-content-compact {
@ -15515,8 +15463,8 @@ ion-content.padded-bottom-cta-with-summary {
overflow: hidden;
text-overflow: ellipsis; }
.address-frame.expanded {
white-space: normal;
text-overflow: clip; }
white-space: pre-wrap;
word-break: break-all; }
.address-frame .prefix {
color: #000000; }
.address-frame .mid {
@ -15559,13 +15507,13 @@ ion-content.padded-bottom-cta-with-summary {
transform: scale(1, 1); }
.fee-summary {
background-color: #F2F2F2;
box-sizing: border-box;
position: relative;
display: flex;
flex-direction: column;
width: 100%;
padding: 5px 12px 15px;
position: relative;
width: 100%; }
box-sizing: border-box;
background-color: #F2F2F2; }
.fee-summary:before {
content: '';
position: absolute;
@ -15575,16 +15523,16 @@ ion-content.padded-bottom-cta-with-summary {
height: 15px;
background: linear-gradient(to bottom, rgba(242, 242, 242, 0) 0%, #f2f2f2 100%); }
.fee-summary .amount {
display: flex;
flex-direction: row;
justify-content: space-between;
width: 100%; }
.fee-summary .amount .fee-fiat {
display: inline; }
.fee-summary .amount .fee-fiat.positive {
color: #70955F; }
.fee-summary .amount .fee-fiat.negative {
color: #C24633; }
.fee-summary .amount .fee-fiat.positive {
color: #70955F; }
.fee-summary .amount .fee-fiat.negative {
color: #C24633; }
.fee-summary .amount .fee-crypto {
color: #A7A7A7;
float: right; }
color: #A7A7A7; }
.formatted-amount {
display: inline-block; }
@ -15609,9 +15557,6 @@ ion-content.padded-bottom-cta-with-summary {
margin-left: 5px;
text-transform: uppercase; }
.wallet-balance-directive {
display: inline-block; }
/* This is for rules that don't yet have a home.
* Our goal is to delete this file. Search the regex: /class=".*CLASS.*?"/
*/

View file

@ -6,14 +6,7 @@
</div>
<div ng-show="!hide">
<div ng-repeat="service in services track by $index">
<a ng-if="service.sref" ui-sref="{{service.sref}}" id="home_{{service.name}}" title="{{service.title || service.name}}" class="track_link_click_out item item-sub item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg theme-circle theme-circle-services">
<div class="bg {{service.icon}}"></div>
</i>
<span>{{service.title || service.name}}</span>
<i class="icon bp-arrow-right"></i>
</a>
<a ng-if="!service.sref" ng-click="open('{{service.href}}')" id="home_{{service.name}}" title="{{service.title || service.name}}" class="track_link_click_out item item-sub item-icon-left item-big-icon-left item-icon-right next-step">
<a ui-sref="{{service.sref}}" id="home_{{service.name}}" title="{{service.title || service.name}}" class="track_link_click_out item item-sub item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg theme-circle theme-circle-services">
<div class="bg {{service.icon}}"></div>
</i>

View file

@ -100,22 +100,6 @@
<i class="icon bp-arrow-right"></i>
</a>
<div class="item item-divider" ng-show="walletsBch[0]">{{'Bitcoin Cash (BCH)' | translate}}</div>
<a class="item item-icon-left item-icon-right" href
ui-sref="tabs.preferences({'walletId': wallet.id})"
ng-repeat="wallet in walletsBch track by $index">
<span ng-include="'views/includes/walletListSettings.html'"></span>
</a>
<div class="item item-divider" ng-show="walletsBtc[0]">{{'Bitcoin Core (BTC)' | translate}}</div>
<a class="item item-icon-left item-icon-right" href
ui-sref="tabs.preferences({'walletId': wallet.id})"
ng-repeat="wallet in walletsBtc track by $index">
<span ng-include="'views/includes/walletListSettings.html'"></span>
</a>
<div class="item item-divider" ng-show="bitpayAccounts || buyAndSellServices[0]">{{'Integrations' | translate}}</div>
<a class=" item item-icon-left item-icon-right"

View file

@ -8,6 +8,9 @@
<button class="button back-button" ng-click="startSearch(); openSearchModal()" ng-if="txHistory.length > 4">
<i class="icon ion-ios-search-strong tx-search"></i>
</button>
<button class="button" ng-click="vm.openWalletSettings();">
<i class="icon ion-android-settings"></i>
</button>
</ion-nav-buttons>
</ion-nav-bar>
<style type="text/css">