Migration to virtual keyboard

This commit is contained in:
Jean-Baptiste Dominguez 2018-05-08 00:28:44 +09:00
commit f4c0cc2bad
4 changed files with 449 additions and 208 deletions

View file

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

View file

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