Merge pull request #211 from Bitcoin-com/wallet/dev

Wallet/dev
This commit is contained in:
Jean-Baptiste Dominguez 2018-07-04 23:47:17 +09:00 committed by GitHub
commit bc326e84fd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
27 changed files with 3854 additions and 3694 deletions

View file

@ -24,9 +24,9 @@
"windowsAppId": "804636ee-b017-4cad-8719-e58ac97ffa5c",
"pushSenderId": "1036948132229",
"description": "A Secure Bitcoin Wallet",
"version": "4.12.1",
"fullVersion": "4.12-rc2",
"androidVersion": "412100",
"version": "4.12.2",
"fullVersion": "4.12-rc3",
"androidVersion": "412200",
"_extraCSS": "",
"_enabledExtensions": {
"coinbase": false,

View file

@ -1,23 +1,23 @@
Secure bitcoin on your own terms with an open source, multisignature wallet from BitPay.
Copay users can hold funds individually or share finances securely with other users with multisignature wallets, which prevent unauthorized payments by requiring multiple approvals. Here are some ways Copay can be used with others:
To save for vacations or joint purchases with friends
To track family spending and allowances
To manage business, club, or organization funds and expenses
We built the following features into this version of Copay for a bitcoin wallet that doesn't compromise on security or accessibility:
Multiple wallet creation and management in-app
Intuitive multisignature security for personal or shared wallets
Easy spending proposal flow for shared wallets and group payments
Hierarchical deterministic (HD) address generation and wallet backups
Device-based security: all private keys are stored locally, not in the cloud
Support for Bitcoin testnet wallets
Synchronous access across all major mobile and desktop platforms
Payment protocol (BIP70-BIP73) support: easily-identifiable payment requests and verifiably secure bitcoin payments
Support for 150+ currency pricing options and unit denomination in BTC or bits
Email notifications for payments and transfers
Customizable wallet naming and background colors
9 supported languages (EN, CS, FR, DE, IT, ES, JA, PL, RU)
Copay is free and open source software run on non-proprietary servers, so there's no need to rely on any company for continuous support. Anyone can review or contribute to Copay's source code on GitHub (https://github.com/bitpay/copay).
Secure bitcoin on your own terms with an open source, multisignature wallet from BitPay.
Copay users can hold funds individually or share finances securely with other users with multisignature wallets, which prevent unauthorized payments by requiring multiple approvals. Here are some ways Copay can be used with others:
To save for vacations or joint purchases with friends
To track family spending and allowances
To manage business, club, or organization funds and expenses
We built the following features into this version of Copay for a bitcoin wallet that doesn't compromise on security or accessibility:
Multiple wallet creation and management in-app
Intuitive multisignature security for personal or shared wallets
Easy spending proposal flow for shared wallets and group payments
Hierarchical deterministic (HD) address generation and wallet backups
Device-based security: all private keys are stored locally, not in the cloud
Support for Bitcoin testnet wallets
Synchronous access across all major mobile and desktop platforms
Payment protocol (BIP70-BIP73) support: easily-identifiable payment requests and verifiably secure bitcoin payments
Support for 150+ currency pricing options and unit denomination in BTC or bits
Email notifications for payments and transfers
Customizable wallet naming and background colors
9 supported languages (EN, CS, FR, DE, IT, ES, JA, PL, RU)
Copay is free and open source software run on non-proprietary servers, so there's no need to rely on any company for continuous support. Anyone can review or contribute to Copay's source code on GitHub (https://github.com/bitpay/copay).

View file

@ -1 +1 @@

View file

@ -11,7 +11,7 @@ msgstr ""
"Last-Translator: emilold\n"
"Language-Team: Catalan\n"
"Language: ca\n"
"PO-Revision-Date: 2018-06-22T04:02:43+0000\n"
"PO-Revision-Date: 2018-07-04 09:26\n"
#: www/views/modals/paypro.html:34
msgid "(Trusted)"
@ -77,6 +77,10 @@ msgstr "Compte"
msgid "Account Number"
msgstr "Número de compte"
#: www/views/tab-home.html:61
msgid "Instant transactions with low fees"
msgstr "Transaccions instantànies amb comissions baixes"
#: www/views/preferencesBitpayServices.html:23
msgid "Accounts"
msgstr "Comptes"

View file

@ -11,7 +11,7 @@ msgstr ""
"Last-Translator: emilold\n"
"Language-Team: Czech\n"
"Language: cs\n"
"PO-Revision-Date: 2018-06-22T04:02:46+0000\n"
"PO-Revision-Date: 2018-07-04 09:26\n"
#: www/views/modals/paypro.html:34
msgid "(Trusted)"
@ -77,6 +77,10 @@ msgstr "Účet"
msgid "Account Number"
msgstr "Číslo účtu"
#: www/views/tab-home.html:61
msgid "Instant transactions with low fees"
msgstr "Okamžité transakce s nízkou platbou"
#: www/views/preferencesBitpayServices.html:23
msgid "Accounts"
msgstr "Účty"

View file

@ -11,7 +11,7 @@ msgstr ""
"Last-Translator: emilold\n"
"Language-Team: German\n"
"Language: de\n"
"PO-Revision-Date: 2018-06-22T04:02:49+0000\n"
"PO-Revision-Date: 2018-07-04 03:57\n"
#: www/views/modals/paypro.html:34
msgid "(Trusted)"
@ -77,6 +77,10 @@ msgstr "Benutzerkonto"
msgid "Account Number"
msgstr "Kontonummer"
#: www/views/tab-home.html:61
msgid "Instant transactions with low fees"
msgstr ""
#: www/views/preferencesBitpayServices.html:23
msgid "Accounts"
msgstr "Konten"

View file

@ -11,7 +11,7 @@ msgstr ""
"Last-Translator: emilold\n"
"Language-Team: Spanish\n"
"Language: es\n"
"PO-Revision-Date: 2018-06-22T04:02:57+0000\n"
"PO-Revision-Date: 2018-07-04 09:27\n"
#: www/views/modals/paypro.html:34
msgid "(Trusted)"
@ -77,6 +77,10 @@ msgstr "Cuenta"
msgid "Account Number"
msgstr "Número de cuenta"
#: www/views/tab-home.html:61
msgid "Instant transactions with low fees"
msgstr "Transacciones instantáneas con comisiones bajas"
#: www/views/preferencesBitpayServices.html:23
msgid "Accounts"
msgstr "Cuentas"

View file

@ -11,7 +11,7 @@ msgstr ""
"Last-Translator: emilold\n"
"Language-Team: Persian\n"
"Language: fa\n"
"PO-Revision-Date: 2018-06-22T04:02:53+0000\n"
"PO-Revision-Date: 2018-07-04 09:27\n"
#: www/views/modals/paypro.html:34
msgid "(Trusted)"
@ -77,6 +77,10 @@ msgstr "حساب"
msgid "Account Number"
msgstr "شماره حساب"
#: www/views/tab-home.html:61
msgid "Instant transactions with low fees"
msgstr "معاملات فوری با پرداخت کم"
#: www/views/preferencesBitpayServices.html:23
msgid "Accounts"
msgstr "حساب ها"

View file

@ -11,7 +11,7 @@ msgstr ""
"Last-Translator: emilold\n"
"Language-Team: French\n"
"Language: fr\n"
"PO-Revision-Date: 2018-06-22T04:02:48+0000\n"
"PO-Revision-Date: 2018-07-04 09:26\n"
#: www/views/modals/paypro.html:34
msgid "(Trusted)"
@ -77,6 +77,10 @@ msgstr "Compte"
msgid "Account Number"
msgstr "Numéro de compte"
#: www/views/tab-home.html:61
msgid "Instant transactions with low fees"
msgstr "Transactions instantanées à bas frais"
#: www/views/preferencesBitpayServices.html:23
msgid "Accounts"
msgstr "Comptes"

View file

@ -11,7 +11,7 @@ msgstr ""
"Last-Translator: emilold\n"
"Language-Team: Italian\n"
"Language: it\n"
"PO-Revision-Date: 2018-06-22T04:02:50+0000\n"
"PO-Revision-Date: 2018-07-04 09:27\n"
#: www/views/modals/paypro.html:34
msgid "(Trusted)"
@ -77,6 +77,10 @@ msgstr "Conto"
msgid "Account Number"
msgstr "Numero del Conto"
#: www/views/tab-home.html:61
msgid "Instant transactions with low fees"
msgstr "Transazioni istantanee con commissioni basse"
#: www/views/preferencesBitpayServices.html:23
msgid "Accounts"
msgstr "Account"

View file

@ -11,7 +11,7 @@ msgstr ""
"Last-Translator: emilold\n"
"Language-Team: Japanese\n"
"Language: ja\n"
"PO-Revision-Date: 2018-06-22T04:02:51+0000\n"
"PO-Revision-Date: 2018-07-04 09:27\n"
#: www/views/modals/paypro.html:34
msgid "(Trusted)"
@ -77,6 +77,10 @@ msgstr "ポケット"
msgid "Account Number"
msgstr "ポケット番号"
#: www/views/tab-home.html:61
msgid "Instant transactions with low fees"
msgstr "僅かな手数料で即時決済"
#: www/views/preferencesBitpayServices.html:23
msgid "Accounts"
msgstr "アカウント一覧"
@ -631,7 +635,7 @@ msgstr "翻訳に協力"
#: src/js/controllers/confirm.js:130
msgid "Copay only supports Bitcoin Cash using new version numbers addresses"
msgstr "Copay のビットコインキャッシュはビットコインと完全に異なる別通貨なので、アドレスの頭文字が異なります。"
msgstr "のビットコインキャッシュはビットコインと完全に異なる別通貨なので、アドレスの頭文字が異なります。"
#: src/js/services/bwcError.js:62
msgid "Copayer already in this wallet"
@ -2225,7 +2229,7 @@ msgstr "正しい順序で各単語をタップしてください。"
#: src/js/services/bwcError.js:101
msgid "Please upgrade Copay to perform this action"
msgstr "この操作を実行するにはCopayを最新バージョンに更新してください"
msgstr "この操作を実行するにはを最新バージョンに更新してください"
#: www/views/walletDetails.html:142
#: www/views/walletDetails.html:62

View file

@ -11,7 +11,7 @@ msgstr ""
"Last-Translator: emilold\n"
"Language-Team: Korean\n"
"Language: ko\n"
"PO-Revision-Date: 2018-06-22T04:02:52+0000\n"
"PO-Revision-Date: 2018-07-04 09:27\n"
#: www/views/modals/paypro.html:34
msgid "(Trusted)"
@ -77,6 +77,10 @@ msgstr "계정"
msgid "Account Number"
msgstr "계정 번호"
#: www/views/tab-home.html:61
msgid "Instant transactions with low fees"
msgstr "낮은 수수료로 빠른 송금을"
#: www/views/preferencesBitpayServices.html:23
msgid "Accounts"
msgstr "계정들"

View file

@ -11,7 +11,7 @@ msgstr ""
"Last-Translator: emilold\n"
"Language-Team: Dutch\n"
"Language: nl\n"
"PO-Revision-Date: 2018-06-22T04:02:48+0000\n"
"PO-Revision-Date: 2018-07-04 09:26\n"
#: www/views/modals/paypro.html:34
msgid "(Trusted)"
@ -77,6 +77,10 @@ msgstr "Account"
msgid "Account Number"
msgstr "Account Nummer"
#: www/views/tab-home.html:61
msgid "Instant transactions with low fees"
msgstr "Directe transacties tegen lage kosten"
#: www/views/preferencesBitpayServices.html:23
msgid "Accounts"
msgstr "Accounts"

View file

@ -11,7 +11,7 @@ msgstr ""
"Last-Translator: emilold\n"
"Language-Team: Polish\n"
"Language: pl\n"
"PO-Revision-Date: 2018-06-22T04:02:54+0000\n"
"PO-Revision-Date: 2018-07-04 03:58\n"
#: www/views/modals/paypro.html:34
msgid "(Trusted)"
@ -77,6 +77,10 @@ msgstr "Konto"
msgid "Account Number"
msgstr "Numer konta"
#: www/views/tab-home.html:61
msgid "Instant transactions with low fees"
msgstr ""
#: www/views/preferencesBitpayServices.html:23
msgid "Accounts"
msgstr "Konta"

View file

@ -11,7 +11,7 @@ msgstr ""
"Last-Translator: emilold\n"
"Language-Team: Portuguese, Brazilian\n"
"Language: pt\n"
"PO-Revision-Date: 2018-06-22T04:02:55+0000\n"
"PO-Revision-Date: 2018-07-04 09:27\n"
#: www/views/modals/paypro.html:34
msgid "(Trusted)"
@ -77,6 +77,10 @@ msgstr "Conta"
msgid "Account Number"
msgstr "Número de conta"
#: www/views/tab-home.html:61
msgid "Instant transactions with low fees"
msgstr "Transações instantâneas com taxas baixas"
#: www/views/preferencesBitpayServices.html:23
msgid "Accounts"
msgstr "Contas"

View file

@ -11,7 +11,7 @@ msgstr ""
"Last-Translator: emilold\n"
"Language-Team: Russian\n"
"Language: ru\n"
"PO-Revision-Date: 2018-06-22T04:02:56+0000\n"
"PO-Revision-Date: 2018-07-04 09:27\n"
#: www/views/modals/paypro.html:34
msgid "(Trusted)"
@ -77,6 +77,10 @@ msgstr "Учётная запись"
msgid "Account Number"
msgstr "Номер учётной записи"
#: www/views/tab-home.html:61
msgid "Instant transactions with low fees"
msgstr "Мгновенные транзакции с низкой оплатой"
#: www/views/preferencesBitpayServices.html:23
msgid "Accounts"
msgstr "Аккаунты"

View file

@ -11,7 +11,7 @@ msgstr ""
"Last-Translator: emilold\n"
"Language-Team: Swedish\n"
"Language: sv\n"
"PO-Revision-Date: 2018-06-22T04:02:58+0000\n"
"PO-Revision-Date: 2018-07-04 03:58\n"
#: www/views/modals/paypro.html:34
msgid "(Trusted)"
@ -77,6 +77,10 @@ msgstr "Konto"
msgid "Account Number"
msgstr "Kontonummer"
#: www/views/tab-home.html:61
msgid "Instant transactions with low fees"
msgstr ""
#: www/views/preferencesBitpayServices.html:23
msgid "Accounts"
msgstr "Konton"
@ -369,7 +373,7 @@ msgstr ""
#: www/views/tab-home.html:98
#: www/views/tab-settings.html:115
msgid "Bitcoin Cash Wallets"
msgstr ""
msgstr "Bitcoin Cash plånböcker"
#: www/views/modals/chooseFeeLevel.html:4
#: www/views/preferencesFee.html:4

File diff suppressed because it is too large Load diff

View file

@ -11,7 +11,7 @@ msgstr ""
"Last-Translator: emilold\n"
"Language-Team: Vietnamese\n"
"Language: vi\n"
"PO-Revision-Date: 2018-06-22T04:02:59+0000\n"
"PO-Revision-Date: 2018-07-04 03:58\n"
#: www/views/modals/paypro.html:34
msgid "(Trusted)"
@ -54,67 +54,71 @@ msgstr "A total of {{amountAboveMaxSizeStr}} were excluded. The maximum size all
#: src/js/controllers/confirm.js:395
msgid "A total of {{amountBelowFeeStr}} were excluded. These funds come from UTXOs smaller than the network fee provided."
msgstr ""
msgstr "A total of {{amountBelowFeeStr}} were excluded. These funds come from UTXOs smaller than the network fee provided."
#: src/js/controllers/preferencesAbout.js:6
#: www/views/tab-settings.html:156
msgid "About"
msgstr ""
msgstr "About"
#: src/js/controllers/modals/txpDetails.js:62
#: src/js/controllers/tx-details.js:79
msgid "Accepted"
msgstr ""
msgstr "Accepted"
#: www/views/preferencesInformation.html:72
msgid "Account"
msgstr ""
msgstr "Account"
#: www/views/join.html:72
#: www/views/tab-create-personal.html:45
#: www/views/tab-create-shared.html:74
#: www/views/tab-import-hardware.html:19
msgid "Account Number"
msgstr "Account Number"
#: www/views/tab-home.html:61
msgid "Instant transactions with low fees"
msgstr ""
#: www/views/preferencesBitpayServices.html:23
msgid "Accounts"
msgstr ""
msgstr "Accounts"
#: www/views/bitpayCard.html:56
msgid "Activity"
msgstr ""
msgstr "Activity"
#: src/js/services/bitpayAccountService.js:83
msgid "Add Account"
msgstr ""
msgstr "Add Account"
#: src/js/services/bitpayAccountService.js:69
msgid "Add BitPay Account?"
msgstr ""
msgstr "Add BitPay Account?"
#: www/views/addressbook.add.html:4
#: www/views/addressbook.html:22
msgid "Add Contact"
msgstr ""
msgstr "Add Contact"
#: www/views/bitpayCard.html:28
msgid "Add Funds"
msgstr ""
msgstr "Add Funds"
#: www/views/confirm.html:94
msgid "Add Memo"
msgstr ""
msgstr "Add Memo"
#: www/views/join.html:87
#: www/views/tab-create-personal.html:59
#: www/views/tab-create-shared.html:88
msgid "Add a password"
msgstr ""
msgstr "Add a password"
#: www/views/includes/accountSelector.html:27
msgid "Add account"
msgstr ""
msgstr "Add account"
#: www/views/join.html:90
#: www/views/tab-create-personal.html:62

View file

@ -11,7 +11,7 @@ msgstr ""
"Last-Translator: emilold\n"
"Language-Team: Chinese Simplified\n"
"Language: zh\n"
"PO-Revision-Date: 2018-06-22T04:02:44+0000\n"
"PO-Revision-Date: 2018-07-04 03:57\n"
#: www/views/modals/paypro.html:34
msgid "(Trusted)"
@ -77,6 +77,10 @@ msgstr "帐户"
msgid "Account Number"
msgstr "帐号"
#: www/views/tab-home.html:61
msgid "Instant transactions with low fees"
msgstr ""
#: www/views/preferencesBitpayServices.html:23
msgid "Accounts"
msgstr "帐户"

View file

@ -1,7 +1,7 @@
'use strict';
angular.module('copayApp.controllers').controller('tabHomeController',
function($rootScope, $timeout, $scope, $state, $stateParams, $ionicModal, $ionicScrollDelegate, $window, gettextCatalog, lodash, popupService, ongoingProcess, externalLinkService, latestReleaseService, profileService, walletService, configService, $log, platformInfo, storageService, txpModalService, appConfigService, startupService, addressbookService, feedbackService, bwcError, nextStepsService, buyAndSellService, homeIntegrationsService, bitpayCardService, pushNotificationsService, timeService, bitcoincomService, pricechartService, firebaseEventsService, servicesService, shapeshiftService, $ionicNavBarDelegate, signVerifyMessageService) {
function($rootScope, $timeout, $scope, $state, $stateParams, $ionicModal, $ionicScrollDelegate, $window, gettextCatalog, lodash, popupService, ongoingProcess, bannerService, externalLinkService, latestReleaseService, profileService, walletService, configService, $log, platformInfo, storageService, txpModalService, appConfigService, startupService, addressbookService, feedbackService, bwcError, nextStepsService, buyAndSellService, homeIntegrationsService, bitpayCardService, pushNotificationsService, timeService, bitcoincomService, pricechartService, firebaseEventsService, servicesService, shapeshiftService, $ionicNavBarDelegate, signVerifyMessageService) {
var wallet;
var listeners = [];
var notifications = [];
@ -16,9 +16,19 @@ angular.module('copayApp.controllers').controller('tabHomeController',
$scope.isNW = platformInfo.isNW;
$scope.showRateCard = {};
$scope.showServices = false;
$scope.bannerIsLoading = true;
$scope.bannerImageUrl = '';
$scope.bannerUrl = '';
$scope.$on("$ionicView.afterEnter", function() {
startupService.ready();
bannerService.getBanner(function (banner) {
$scope.bannerImageUrl = banner.imageURL;
$scope.bannerUrl = banner.url;
$scope.bannerIsLoading = false;
});
});
$scope.$on("$ionicView.beforeEnter", function(event, data) {
@ -155,8 +165,8 @@ angular.module('copayApp.controllers').controller('tabHomeController',
externalLinkService.open(url, optIn, title, message, okText, cancelText);
};
$scope.openStore = function() {
externalLinkService.open('https://store.bitcoin.com/', false);
$scope.openBannerUrl = function() {
externalLinkService.open($scope.bannerUrl, false);
};
$scope.openNotificationModal = function(n) {

View file

@ -0,0 +1,78 @@
'use strict';
angular.module('copayApp.services').factory('bannerService', function ($http, $log) {
// Export
var root = {};
// Constant
var API_URL = 'https://bwscash.bitcoin.com/bws/api/v1/marketing';
// Variable
var hasFetched = false;
var banners = [];
var defaultBanner = {
id: 'default-banner',
imageURL: 'img/banner-store.png',
url: 'https://store.bitcoin.com/',
isLocal: true
};
// Private methods
var fetchSettings = function (cb) {
var req = {
method: 'GET',
url: API_URL+'/settings',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
};
$http(req).then(function (response) {
$log.info('Get banner settings: SUCCESS');
banners = response.data;
return cb(true);
}, function (error) {
$log.error('Get banner settings: ERROR ' + error.statusText);
return cb(false);
});
};
root.getBanner = function (cb) {
// If not fetch get the banner
if (!hasFetched) {
hasFetched = true;
// If never fetch, lets fetch
fetchSettings(function (isSuccess) {
root.getBanner(cb);
});
// If fetch, and got banners, lets have a look
} else if (banners.length > 0) {
var selectedBanners = [];
for(var i in banners) {
var banner = banners[i];
// Generate the URL for the banner
var fileName = banner.image.substring(0, banner.image.lastIndexOf('.'));
var extension = banner.image.substring(banner.image.lastIndexOf('.')+1);
banner.imageURL = API_URL +'/banners/'+fileName+"/"+extension;
// Add the banner
selectedBanners.push(banners[i]);
}
// If no banner activated, return the default one
if (selectedBanners.length == 0) {
return cb(defaultBanner);
} else {
return cb(selectedBanners[Math.floor(Math.random()*banners.length)]);
}
} else {
return cb(defaultBanner);
}
};
return root;
});

View file

@ -1,14 +1,15 @@
qrcode {
&.qr-icon {
position: relative;
&.qr-overlay {
&::before {
content: "";
background-size: 100% 100%;
display: block;
margin-left: calc(50% - 22px);
left: 88px;
margin-top: 88px;
width: 44px;
height: 44px;
position: absolute;
position:absolute;
}
&--bch::before {
background-image: url('../img/qr-overlay-bch.png');

View file

@ -59,6 +59,9 @@
}
}
&-banner {
svg {
margin: 40px auto 40px;
}
padding: 0;
&__img {
width: 100%;

View file

@ -41,7 +41,6 @@
<div class="subheader" ng-if="walletsBtc[0] && walletsBch[0]" translate>
<div translate>Bitcoin Core (BTC)</div>
<div translate class="subtitle">Slow transactions with high fees</div>
</div>
<a
ng-repeat="wallet in walletsBtc track by $index"

View file

@ -73,7 +73,6 @@
<div class="list card">
<div class="item item-icon-right item-heading">
<div translate>Bitcoin Core (BTC)</div>
<div translate class="subtitle">Slow transactions with high fees</div>
<a ui-sref="tabs.add"><i class="icon ion-ios-plus-empty list-add-button"></i></a>
</div>
<div>
@ -92,9 +91,11 @@
<div class="ng-hide list card" ng-show="showServices && (walletsBch[0] || walletsBtc[0])" ng-include="'views/includes/services.html'"></div>
<div class="list card card-banner">
<a ng-click="openStore()">
<img class="card-banner__img" src="img/banner-store.png"/>
<ion-spinner ng-if="bannerIsLoading"></ion-spinner>
<a ng-if="!bannerIsLoading" ng-click="openBannerUrl()">
<img class="card-banner__img" ng-src="{{bannerImageUrl}}"/>
</a>
</div>
<div class="ng-hide list card" ng-show="nextStepsItems.length>0 && !isWindowsPhoneApp" ng-include="'views/includes/community.html'"></div>

View file

@ -41,7 +41,7 @@
</button>
</span>
<qrcode class="qr-icon qr-icon--{{ wallet.coin }}" ng-if="addr" size="220" data="{{ protocolHandler }}:{{addr}}" color="#334"></qrcode>
<qrcode class="qr-overlay qr-overlay--{{ wallet.coin }}" ng-if="addr" size="220" data="{{ protocolHandler }}:{{addr}}" color="#334"></qrcode>
<div class="address-label">
<span class="ellipsis">{{addr}}</span>
<ion-spinner ng-show="!addr" class="spinner-dark" icon="crescent"></ion-spinner>