This commit is contained in:
magmahindenburg 2017-07-27 17:00:54 +09:00
commit d1b7cc44b3
110 changed files with 4431 additions and 3044 deletions

View file

@ -2,7 +2,7 @@
<ion-nav-bar class="bar-royal">
<ion-nav-back-button>
</ion-nav-back-button>
<ion-nav-title>Buy</ion-nav-title>
<ion-nav-title>{{'Buy'|translate}}</ion-nav-title>
</ion-nav-bar>
<ion-content class="add-bottom-for-cta">
@ -19,14 +19,14 @@
<div class="amount-label">
<div class="amount">{{amountUnitStr}}</div>
<div class="alternative">
Purchase Amount is limited to USD 1000 per day
{{limitPerDayMessage}}
</div>
</div>
</div>
<div class="info">
<div class="item item-icon-right" ng-click="showWalletSelector()">
<div class="label">From</div>
<div class="label" translate>From</div>
<div class="wallet">
<i class="icon big-icon-svg">
<img src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg">
@ -35,6 +35,36 @@
</div>
<i class="icon bp-arrow-right"></i>
</div>
<div ng-show="totalAmountStr">
<div class="item item-divider" translate>
Details
</div>
<div class="item">
<span translate>Gift card</span>
<span class="item-note">
{{amount | currency:'$ ':2}}<span ng-if="amount"> {{currencyIsoCode}}</span>
</span>
</div>
<div class="item">
<span translate>Invoice Fee</span>
<span class="item-note">
<span>{{invoiceFee | currency:'$ ':2}}<span ng-if="invoiceFee"> {{currencyIsoCode}}</span>
</span>
</div>
<div class="item">
<span translate>Network Fee</span>
<span class="item-note">
<span>{{networkFee | currency:'$ ':2}}<span ng-if="networkFee"> {{currencyIsoCode}}</span>
</span>
</div>
<div class="item">
<span translate>Total</span>
<span class="item-note">
<span ng-if="totalAmount">{{totalAmount | currency:'$ ':2}} {{currencyIsoCode}}</span>
<span ng-if="totalAmountStr">({{totalAmountStr}})</span>
</span>
</div>
</div>
<div class="item item-divider"></div>
<div class="item size-12">
* <a ng-click="openExternalLink('http://amazon.com')">Amazon.com</a> is not a sponsor of this promotion.
@ -56,30 +86,29 @@
ng-click="buyConfirm()"
ng-if="!isCordova"
click-send-status="sendStatus"
is-disabled="!wallet">
Confirm purchase
is-disabled="!wallet || !totalAmountStr">
{{'Confirm purchase'|translate}}
</click-to-accept>
<slide-to-accept
ng-if="isCordova"
ng-if="isCordova && wallet && totalAmountStr"
slide-on-confirm="buyConfirm()"
slide-send-status="sendStatus"
is-disabled="!wallet">
Slide to buy
slide-send-status="sendStatus">
{{'Slide to buy'|translate}}
</slide-to-accept>
<slide-to-accept-success
slide-success-show="sendStatus === 'success'"
slide-success-on-confirm="goBackHome()"
slide-success-hide-on-confirm="true">
<span ng-show="amazonGiftCard.status == 'FAILURE'">
<span ng-show="amazonGiftCard.status == 'FAILURE'" translate>
Your purchase could not be completed
</span>
<span ng-show="amazonGiftCard.status == 'PENDING'">
<span ng-show="amazonGiftCard.status == 'PENDING'" translate>
Your purchase was added to the list of pending
</span>
<span ng-show="amazonGiftCard.status == 'SUCCESS'">
Bought {{amazonGiftCard.amount}} {{amazonGiftCard.currency}}
<span ng-show="amazonGiftCard.status == 'SUCCESS'" translate>
Bought {{amountUnitStr}}
</span>
<div class="m10 size-14" ng-show="amazonGiftCard.status == 'SUCCESS'">
<div class="m10 size-14" ng-show="amazonGiftCard.status == 'SUCCESS'" translate>
Gift card generated and ready to use.
</div>
</slide-to-accept-success>

View file

@ -61,7 +61,7 @@
<span ng-if="tx.toName && showAddress">{{tx.toAddress}}</span>
</div>
</div>
<a class="item item-icon-right" ng-hide="!wallets" ng-click="showWalletSelector()">
<a class="item item-icon-right" ng-hide="!wallet" ng-click="showWalletSelector()">
<span class="label" translate>From</span>
<div class="wallet" ng-if="wallet">
<i class="icon big-icon-svg">
@ -107,7 +107,7 @@
</ion-content>
<click-to-accept
ng-click="approve(tx, wallet, statusChangeHandler)"
ng-if="!isCordova || isWindowsPhoneApp"
ng-if="(!isCordova || isWindowsPhoneApp) && wallet"
click-send-status="sendStatus"
is-disabled="!wallet">
{{buttonText}}

View file

@ -10,9 +10,9 @@
</ion-nav-title>
<ion-nav-buttons side="secondary">
<button class="button-share ng-hide" ng-show="showShareButton" ng-click="shareAddress()">
<i class="icon"
<i class="icon"
ng-class="{
'ion-ios-upload-outline': showShareButton == 'iOS',
'ion-ios-upload-outline': showShareButton == 'iOS',
'ion-android-share-alt': showShareButton != 'iOS'
}"></i>
</button>
@ -23,7 +23,7 @@
<div class="qr-code" copy-to-clipboard="copyToClipboard()">
<qrcode size="220" data="bitcoin:{{address + '?amount=' + amountBtc}}" color="#334"></qrcode>
</div>
<div class="info">
<div class="info">
<div class="item single-line" copy-to-clipboard="address">
<span class="label" translate>Address</span>
<span class="item-note ellipsis">
@ -43,7 +43,7 @@
</i>
{{wallet.name}}
</div>
<div class="label">Receive in</div>
<div class="label" translate>Receive in</div>
</div>
</div>
</div>

View file

@ -8,7 +8,7 @@
<div class="tx-title">
<div class="ellipsis">
<div class="tx-message ellipsis">{{tx.merchant.name || 'Unknown Merchant'}}</div>
<div class="tx-location ellipsis" ng-show="tx.merchant.city && tx.merchant.state">{{tx.merchant.location}}</div>
<div class="tx-location ellipsis">{{tx.merchant.location}}</div>
<div ng-show="tx.pending && tx.transactionId" class="size-12 tx-amount--pending">
<div ng-click="bitpayCard.viewOnBlockchain(tx.transactionId)">View Confirmation Status</div>
</div>
@ -19,8 +19,8 @@
{{tx.price | currency:bitpayCard.currencySymbol:2 }}
</span>
<div>
<time class="tx-time" ng-if="createdWithinPastDay(tx)">{{tx.timestamp | amTimeAgo}}</time>
<time class="tx-time" ng-if="!createdWithinPastDay(tx)">{{tx.timestamp | amDateFormat:'MMM D, YYYY'}}</time>
<time class="tx-time" ng-if="createdWithinPastDay(tx)">{{tx.date | amTimeAgo}}</time>
<time class="tx-time" ng-if="!createdWithinPastDay(tx)">{{tx.date | amDateFormat:'MMM D, YYYY'}}</time>
</div>
</span>
</div>

View file

@ -0,0 +1,10 @@
<div id="check-bar">
<div class="check-bar list">
<div ng-class="fillClass" class="initial-bar-default initial-bar"></div>
<div class="base-bar"></div>
<div class="custom-checkbox" ng-repeat="option in options track by $index" ng-class="{'head': option.head}">
<label>{{option.label}}</label>
<ion-checkbox ng-model="option.selected" ng-change="getFillClass(option.level)"></ion-checkbox>
</div>
</div>
</div>

View file

@ -3,7 +3,7 @@
<div ng-if="type === 'url'">
<div class="incoming-data-menu__item head">
<div class="incoming-data-menu__header">Website</div>
<div class="incoming-data-menu__header" translate>Website</div>
<div class="incoming-data-menu__url">
<div class="incoming-data-menu__url__icon">
<img ng-hide="https" src="img/icon-lock-x.svg" style="height: 22px;">
@ -16,17 +16,17 @@
</div>
<a class="incoming-data-menu__item item item-icon-right" ng-click="goToUrl(data)">
<img src="img/icon-link-external.svg">
<div class="incoming-data-menu__item__text">Open website</div>
<div class="incoming-data-menu__item__text" translate>Open website</div>
<i class="icon bp-arrow-right"></i>
</a>
<a class="incoming-data-menu__cancel item" ng-click="hide()">
<a class="incoming-data-menu__cancel item" ng-click="hide()" translate>
Cancel
</a>
</div>
<div ng-if="type === 'bitcoinAddress'">
<div class="incoming-data-menu__item head">
<div class="incoming-data-menu__header">Bitcoin Address</div>
<div class="incoming-data-menu__header" translate>Bitcoin Address</div>
<div class="incoming-data-menu__url">
<div class="incoming-data-menu__url__icon">
<img src="img/icon-bitcoin-small.svg">
@ -38,27 +38,27 @@
</div>
<a class="incoming-data-menu__item item item-icon-right" ng-click="addToAddressBook(data)">
<img src="img/icon-contacts.svg">
<div class="incoming-data-menu__item__text">Add as a contact</div>
<div class="incoming-data-menu__item__text" translate>Add as a contact</div>
<i class="icon bp-arrow-right"></i>
</a>
<a class="incoming-data-menu__item item item-icon-right" ng-click="sendPaymentToAddress(data)">
<img src="img/icon-send-alt.svg">
<div class="incoming-data-menu__item__text">Send payment to this address</div>
<div class="incoming-data-menu__item__text" translate>Send payment to this address</div>
<i class="icon bp-arrow-right"></i>
</a>
<a class="incoming-data-menu__item item item-icon-right" copy-to-clipboard="data">
<img src="img/icon-paperclip.svg">
<div class="incoming-data-menu__item__text">Copy to clipboard</div>
<div class="incoming-data-menu__item__text" translate>Copy to clipboard</div>
<i class="icon bp-arrow-right"></i>
</a>
<a class="incoming-data-menu__cancel item" ng-click="hide()">
<a class="incoming-data-menu__cancel item" ng-click="hide()" translate>
Cancel
</a>
</div>
<div ng-if="type === 'text'">
<div class="incoming-data-menu__item head">
<div class="incoming-data-menu__header">Text</div>
<div class="incoming-data-menu__header" translate>Text</div>
<div class="incoming-data-menu__url">
<div class="incoming-data-menu__url__text" style="border: 0;">
{{data}}
@ -67,17 +67,17 @@
</div>
<a class="incoming-data-menu__item item item-icon-right" copy-to-clipboard="data">
<img src="img/icon-paperclip.svg">
<div class="incoming-data-menu__item__text">Copy to clipboard</div>
<div class="incoming-data-menu__item__text" translate>Copy to clipboard</div>
<i class="icon bp-arrow-right"></i>
</a>
<a class="incoming-data-menu__cancel item" ng-click="hide()">
<a class="incoming-data-menu__cancel item" ng-click="hide()" translate>
Cancel
</a>
</div>
<div ng-if="type === 'privateKey'">
<div class="incoming-data-menu__item head">
<div class="incoming-data-menu__header">Private Key</div>
<div class="incoming-data-menu__header" translate>Private Key</div>
<div class="incoming-data-menu__url">
<div class="incoming-data-menu__url__text" style="border: 0;">
{{data}}
@ -86,15 +86,15 @@
</div>
<a class="incoming-data-menu__item item item-icon-right" ng-click="scanPaperWallet(data)">
<img src="img/icon-import.svg">
<div class="incoming-data-menu__item__text">Sweep paper wallet</div>
<div class="incoming-data-menu__item__text" translate>Sweep paper wallet</div>
<i class="icon bp-arrow-right"></i>
</a>
<a class="incoming-data-menu__item item item-icon-right" copy-to-clipboard="data">
<img src="img/icon-paperclip.svg">
<div class="incoming-data-menu__item__text">Copy to clipboard</div>
<div class="incoming-data-menu__item__text" translate>Copy to clipboard</div>
<i class="icon bp-arrow-right"></i>
</a>
<a class="incoming-data-menu__cancel item" ng-click="hide()">
<a class="incoming-data-menu__cancel item" ng-click="hide()" translate>
Cancel
</a>
</div>

View file

@ -0,0 +1,21 @@
<action-sheet action-sheet-show="show" class="log-options">
<img class="back-arrow" src="img/icon-back-arrow.svg" ng-click="hide()">
<div class="header" translate="">Log options</div>
<div ng-include="'views/includes/checkBar.html'"></div>
<a class="item item-icon-left entry no-border" copy-to-clipboard="onCopy()" ng-click="hide()">
<i class="icon ion-clipboard"></i>
<div class="entry-inner">
<div class="entry-details">
<div class="entry-name" translate>Copy to clipboard</div>
</div>
</div>
</a>
<a class="item item-icon-left entry no-border" ng-click="onSend(); hide()" ng-show="isCordova">
<i class="icon ion-ios-email-outline"></i>
<div class="entry-inner">
<div class="entry-details">
<div class="entry-name" translate>Send by email</div>
</div>
</div>
</a>
</action-sheet>

View file

@ -1,32 +1,84 @@
<ion-modal-view id="settings-fee" class="settings" ng-controller="preferencesFeeController" >
<ion-modal-view id="choose-fee-level" ng-controller="feeLevelsController">
<ion-header-bar align-title="center" class="bar-royal">
<div class="title">
{{'Bitcoin Network Fee Policy'|translate}}
</div>
<button class="button button-clear" ng-click="chooseNewFee()">
OK
<button
ng-disabled="customFeePerKB && !customSatPerByte.value"
class="button button-clear" ng-click="ok()" translate>
OK
</button>
</ion-header-bar>
<ion-content ng-init="init(network)">
<div class="settings-explanation">
<div class="estimates">
<div>
<span translate>Average confirmation time</span>:
<span class="fee-minutes" ng-if="avgConfirmationTime">{{avgConfirmationTime | amDurationFormat: 'minute'}}</span>
<ion-content>
<div class="box-notification warning" ng-if="network!='livenet'">
Testnet
</div>
<div class="row selected-fee-level" ng-show="feeLevel">
<div class="col time" ng-if="!customFeePerKB">
<div class="value">
<span ng-if="avgConfirmationTime">
{{avgConfirmationTime | amDurationFormat: 'minute'}}
</span>
<span ng-if="loadingFee">...</span>
</div>
<div>
<span translate>Current fee rate for this policy</span>:
<span class="fee-rate" ng-if="feePerSatByte">{{feePerSatByte}} satoshis/byte</span>
<span ng-if="loadingFee">...</span>
<span translate>Average confirmation time</span>
</div>
<div class="col rate" ng-class="{'separator': !customFeePerKB}">
<div ng-if="!customFeePerKB">
<div class="value">
<span ng-if="feePerSatByte && !loadingFee">
{{feePerSatByte}} sat/byte
</span>
<span ng-if="loadingFee">...</span>
</div>
<span translate>Current fee rate for this policy</span>
</div>
<div ng-if="customFeePerKB">
<div class="list">
<label class="item item-input">
<input
type="number"
placeholder="{{'Enter custom fee'|translate}}"
ng-min="minFeeAllowed"
ng-max="maxFeeAllowed"
min="minFeeRecommended"
max="maxFeeRecommended"
ng-change="checkFees(customSatPerByte.value)"
ng-model="customSatPerByte.value"
ng-required="customFeePerKB">
<span class="unit">sat/byte</span>
</label>
</div>
<div class="error-fee">
<div ng-if="showError">
<i class="icon ion-close-circled"></i>
<span translate>
Transactions without fee are not supported.
</span>
</div>
<div ng-if="showMinWarning || showMaxWarning">
<i class="icon ion-alert-circled"></i>
<span ng-if="showMinWarning" translate>
Your fee is lower than recommended.
</span>
<span ng-if="showMaxWarning" translate>
You should not set a fee higher than {{maxFeeRecommended}} satoshis/byte.
</span>
</div>
</div>
</div>
<div ng-if="network!='livenet'">[{{network}}]</span>
</div>
</div>
<div class="fee-policies">
<ion-radio ng-repeat="(fee, level) in feeOpts" ng-value="fee" ng-model="currentFeeLevel" ng-click="save(fee)">
{{level|translate}}
</ion-radio>
<div class="list" ng-show="feeLevel">
<label class="item item-input item-select">
<div class="input-label" translate>
Fee level
</div>
<select ng-options="fee as level for (fee,level) in feeOpts" ng-model="selectedFee.value">
</select>
</label>
</div>
</ion-content>
</ion-modal-view>

View file

@ -11,7 +11,7 @@
</button>
</ion-header-bar>
<ion-content ng-init="updateCopayerList()" ng-class="{'add-bottom-for-cta': tx.pendingForUs && canSign}">
<ion-content ng-init="updateCopayerList()" ng-class="{'add-bottom-for-cta': tx.pendingForUs && canSign && !paymentExpired}">
<div class="list">
<div class="item head">
<div class="sending-label">

View file

@ -20,11 +20,6 @@
</a>
<a ng-if="!isWindowsPhoneApp" class="item item-icon-right" ui-sref="tabs.preferences.preferencesColor">
<span translate>Color</span>
<span class="item-note">
<span class="settings-color-block"
ng-class="{'wallet-background-color-default': !wallet.color, 'wallet-color-default': !wallet.color}"
ng-style="{'background-color': wallet.color, 'color': wallet.color}"></span>
</span>
<i class="icon bp-arrow-right"></i>
</a>

View file

@ -24,7 +24,7 @@
</div>
</div>
<div class="fee-policies">
<ion-radio ng-repeat="(fee, level) in feeOpts" ng-value="fee" ng-model="currentFeeLevel" ng-click="save(fee)">
<ion-radio ng-repeat="(fee, level) in feeOpts" ng-if="fee != 'custom'" ng-value="fee" ng-model="currentFeeLevel" ng-click="save(fee)">
{{level|translate}}
</ion-radio>
</div>

View file

@ -1,23 +1,23 @@
<ion-view class="settings" show-tabs>
<ion-view class="settings" hide-tabs>
<ion-nav-bar class="bar-royal">
<ion-nav-title>{{'Session Log' | translate}}</ion-nav-title>
<ion-nav-back-button>
</ion-nav-back-button>
<ion-nav-buttons side="secondary">
<button class="button back-button" ng-click="showOptionsMenu()">
<i class="icon ion-ios-more"></i>
</button>
</ion-nav-buttons>
</ion-nav-bar>
<ion-content>
<div class="settings-button-group">
<button class="button button-standard button-primary" copy-to-clipboard="prepare()">
<span translate>Copy to clipboard</span>
</button>
<button class="button button-standard button-secondary" ng-show="isCordova" ng-click="sendLogs()">
<span translate>Send by email</span>
</button>
</div>
<ion-content class="log-bg">
<div class="list">
<div class="item item-text-wrap enable_text_select">
<ul>
<li ng-repeat="l in logs">
<span ng-class="{'energized': l.level=='warn', 'dark': l.level=='debug', 'positive': l.level=='info', 'assertive': l.level=='error' }">
<div class="item item-text-wrap enable_text_select log-entry">
<div class="centered" ng-show="filteredLogs.length == 0" translate>No entries for this log level <a ng-click="showOptionsMenu()">filter setting</a>.</div>
<ul ng-show="filteredLogs.length > 0">
<li ng-repeat="l in filteredLogs">
<span ng-class="{'energized': l.level=='warn', 'dark': l.level=='debug', 'positive': l.level=='info', 'assertive': l.level=='error'}">
<span class="log-timestamp">[{{l.timestamp}}]</span>
<span class="log-level">[{{l.level}}]</span>
{{l.msg}}
</span>
</li>
@ -25,4 +25,12 @@
</div>
</div>
</ion-content>
<log-options
log-options-show="showOptions"
log-options="logOptions"
log-options-fill-class="fillClass"
log-options-on-select="setOptionSelected"
log-options-on-copy="prepareLogs"
log-options-on-send="sendLogs">
</log-options>
</ion-view>

View file

@ -19,6 +19,12 @@
</div>
</div>
<div ng-if="usePushNotifications && pushNotifications.value">
<ion-toggle ng-model="confirmedTxsNotifications.value" toggle-class="toggle-balanced" ng-change="confirmedTxsNotificationsChange()">
<span class="toggle-label" translate>Notify me when transactions are confirmed</span>
</ion-toggle>
</div>
<ion-toggle ng-model="emailNotifications.value" toggle-class="toggle-balanced" ng-change="emailNotificationsChange()">
<span class="toggle-label" translate>Enable email notifications</span>
</ion-toggle>
@ -43,6 +49,8 @@
</button>
</form>
</div>
</div>
</ion-content>
</ion-view>

View file

@ -108,13 +108,15 @@ This transaction amount is too small compared to current Bitcoin network fees. S
</span>
</span>
</div>
<ion-toggle ng-show="!btx.confirmations || btx.confirmations == 0"
class="toggle-unconfirmed"
ng-model="txNotification.value"
toggle-class="toggle-balanced"
ng-change="txConfirmNotificationChange()">
<span class="toggle-label" translate>Notify me if confirmed</span>
</ion-toggle>
<div ng-if="txsUnsubscribedForNotifications">
<ion-toggle ng-show="!btx.confirmations || btx.confirmations == 0"
class="toggle-unconfirmed"
ng-model="txNotification.value"
toggle-class="toggle-balanced"
ng-change="txConfirmNotificationChange()">
<span class="toggle-label" translate>Notify me if confirmed</span>
</ion-toggle>
</div>
<div ng-if="actionList[0]">
<div class="item item-divider" translate>Timeline</div>
<div class="item timeline-item" ng-class="{'action-created' : a.type == 'created' || a.type == 'accept', 'action-rejected' : a.type == 'reject'}" ng-repeat="a in actionList track by $index">