Merge pull request #1928 from bechi/tx-prososal-01

Style 01 proposal
This commit is contained in:
Gustavo Maximiliano Cortez 2014-12-03 16:27:01 -03:00
commit fa9c6b0524
6 changed files with 165 additions and 153 deletions

View File

@ -404,26 +404,64 @@ a:hover {
background-color: #C0392A;
}
.panel.last-transactions {
padding: 0;
margin-bottom: 2.25rem;
border-radius: 3px 3px 0 3px;
}
.last-transactions {
margin-bottom: 2rem;
background-color: #E8EAEF;
a.missing-copayers {
background: #7A8C9E;
position: absolute;
display: block;
right: -1px;
bottom: -18px;
padding: 0.2rem 0.5rem;
font-size: 10px;
border-radius: 0 0 3px 3px;
text-transform: uppercase;
color: #fff;
font-weight: 700;
}
ul.tx-copayers {
background: #E4E8EC;
padding: 0.3rem 0.8rem;
margin-left: 0;
box-shadow: inset 0 1px 1px 0 rgba(10,19,28,.12);
border-radius: 0 0 3px 3px;
}
.tx-copayers li {
list-style: none;
padding: 0.3rem;
font-size: 12px;
}
.tx-copayers li.bottom-line-copayers {
border-bottom: 1px solid #CAD2DA;
}
.last-transactions-header {
padding: 0.5rem;
border-radius: 3px 3px 0 0;
background: #2C3E50;
padding: 0.6rem;
color: #fff;
box-shadow: 1.5px 0px 0 0 rgba(32,48,64,1);
-moz-box-shadow: 1.5px 0px 0 0 rgba(32,48,64,1);
-o-box-shadow: 1.5px 0px 0 0 rgba(32,48,64,1);
}
.last-transactions-content {
padding: 0.8rem 0.8rem 0;
color: #7A8C9E;
}
.last-transactions-footer {
padding: 0.5rem;
padding: 0.8rem;
overflow: hidden;
}
table.last-transactions-content {
background-color: #F8F8FB;
margin-bottom: 10px;
}
.last-transactions-content .box-status {
font-size: 13px;
width: 30px;
@ -446,36 +484,27 @@ table.last-transactions-content {
color: #fff;
}
.last-transactions-content .icon-active-check {
.icon-sign {
padding: 0.2rem 0.3rem;
border-radius: 100%;
color: #fff;
margin-right: 7px;
}
.icon-sign.check {
background-color: #3FBC9C;
color: #fff;
}
.last-transactions-content .icon-active-x {
.icon-sign.x {
background-color: #C0392B;
color: #fff;
}
.private-message {
margin-bottom: 10px;
padding-bottom: 10px;
border-bottom: 1px solid #fff;
}
.header-message {
background-color: #F8F8FB;
height: 18px;
}
.date-message {
background-color: #3C4E60;
color: #fff;
background-color: #213140;
border-radius: 3px;
font-size: 12px;
padding: 2px 5px;
-webkit-border-radius: 0 5px 0 0;
-moz-border-radius: 0 5px 0 0;
-ms-border-radius: 0 5px 0 0;
border-radius: 0 5px 0 0;
padding: 0.2rem 0.4rem;
color: #7A8C9E;
}
.input-note {
@ -485,18 +514,14 @@ table.last-transactions-content {
}
.send-note {
background-color: #EDEDF5;
background-color: #F8F8FB;
padding: 10px;
margin-bottom: 10px;
}
.send-note p {
.send-note span {
margin-bottom: 5px;
font-size: 12px;
}
.send-note b {
color: #000;
color: #2C3E50;
}
a.button-setup.add-wallet {
@ -610,12 +635,12 @@ a.button-setup {
}
.line-t {
border-top: 1px solid #F8F8FB;
border-top: 1px solid #E9E9EC;
padding-top: 0.5rem;
}
.line-b {
border-bottom: 1px solid #F8F8FB;
border-bottom: 1px solid #E9E9EC;
padding-bottom: 0.5rem;
}
@ -998,8 +1023,8 @@ button[disabled].secondary:focus,
.button.disabled.secondary:focus,
.button[disabled].secondary:hover,
.button[disabled].secondary:focus {
background-color: #95a5a6;
color: #E6E6E6;
background-color: #E4E8EC;
color: #A5B2BF;
}
/* PRIMARY */
@ -1374,15 +1399,6 @@ a:hover .photo-container {
float: right;
}
.icon-status {
background-color: #34495E;
color: #7A8C9E;
border-radius: 100%;
padding: 0.17rem 0.3rem;
float: left;
margin-bottom: 0.2rem;
}
.has-error {
color: #C0392A;
}
@ -1456,9 +1472,9 @@ a.text-warning:hover {color: #FD7262;}
.panel {
border-radius: 3px;
background: #FFFFFF;
-moz-box-shadow: 1.5px 1.5px 0px 0px rgba(32,48,64,0.10);
box-shadow: 1.5px 1.5px 0px 0px rgba(32,48,64,0.10);
-o-box-shadow: 1.5px 1.5px 0px 0px rgba(32,48,64,0.10);
-moz-box-shadow: 1.5px 1.5px 0px 0px rgba(32,48,64,0.20);
box-shadow: 1.5px 1.5px 0px 0px rgba(32,48,64,0.20);
-o-box-shadow: 1.5px 1.5px 0px 0px rgba(32,48,64,0.20);
border: none;
}

View File

@ -173,6 +173,10 @@
padding: 0.5rem;
}
.panel.last-transactions {
margin-bottom: 3.25rem;
}
.addresses .list-addr contact {
margin-left: 0;
font-size: 14px;
@ -183,10 +187,11 @@
padding: 0 5px;
}
table.last-transactions-content .icon-status {
border-radius: 0;
padding: 0.1rem 0.3rem;
margin-bottom: 0;
a.missing-copayers {
bottom: -34px;
text-align: center;
padding: .7rem;
width: 100%;
}
.button, button {
@ -221,10 +226,6 @@
padding: 0.15rem 0.2rem;
}
.line-t {
border-top: 1px solid #3C5269;
}
}
@media (max-width: 640px) {

View File

@ -91,15 +91,14 @@ angular.module('copayApp.directives')
])
.directive('validAmount', ['$rootScope', '$locale',
function($rootScope, locale) {
var w = $rootScope.wallet;
preconditions.checkState(w);
preconditions.checkState(w.settings.unitToSatoshi);
var formats = locale.NUMBER_FORMATS;
return {
require: 'ngModel',
link: function(scope, element, attrs, ctrl) {
var val = function(value) {
var w = $rootScope.wallet;
preconditions.checkState(w);
var vNum = Number((value * w.settings.unitToSatoshi).toFixed(0));
if (typeof value == 'undefined') {

View File

@ -97,20 +97,14 @@
<table class="last-transactions-content" ng-if="btx.actionList[0]">
<tbody>
<tr ng-repeat="c in btx.actionList">
<td class="copayer-name text-gray" width="100%">{{c.cId === $root.wallet.getMyCopayerId() ? 'Me' : $root.wallet.publicKeyRing.nicknameForCopayer(c.cId)}}
</td>
<td>
<i ng-if="c.actions.create" class="fi-crown icon-status icon-active"></i>
<i ng-if="!c.actions.create" class="fi-crown icon-status"></i>
</td>
<td>
<i ng-if="c.actions.seen" class="fi-eye icon-status icon-active"></i>
<i ng-if="!c.actions.seen" class="fi-eye icon-status"></i>
</td>
<td>
<i ng-if="c.actions.rejected" class="fi-x icon-status icon-active-x"></i>
<i ng-if="c.actions.sign" class="fi-check icon-status icon-active-check"></i>
<i ng-if="!c.actions.sign && !c.actions.rejected && tx.missingSignatures" class="fi-loop icon-rotate"></i>
</td>
<td>
<i ng-if="c.actions.create" class="fi-crown icon-status icon-active"></i>
</td>
<td class="copayer-name text-gray" width="100%">{{c.cId === $root.wallet.getMyCopayerId() ? 'Me' : $root.wallet.publicKeyRing.nicknameForCopayer(c.cId)}}
</td>
</tr>
</tbody>

View File

@ -1,114 +1,116 @@
<div class="header-message">
<span class="date-message">{{tx.createdTs | amCalendar}}</span>
</div>
<div class="last-transactions-header" ng-init="txIndex = $index">
<div class="private-message" ng-show="tx.comment">
<i class="fi-comment-quotes"></i>
<div class="last-transactions-header row collapse" ng-init="txIndex = $index">
<div class="large-9 small-7 columns size-14">
<div ng-show="tx.comment">
<i class="fi-comment-quotes size-18 vm"></i>
<span class="text-light">{{tx.comment}}</span>
</div>
</div>
<div class="large-3 small-5 columns text-right">
<span class="date-message">{{tx.createdTs | amCalendar}}</span>
</div>
</div>
<div class="last-transactions-content">
<div class="row" ng-repeat="out in tx.outs">
<div class="large-3 medium-3 small-4 columns">
<div class="size-12">
<div class="large-3 medium-3 small-4 columns size-14">
<b>{{out.value}} {{$root.wallet.settings.unitName}}</b>
<span class="alt-currency gray">
{{out.alternativeAmount}} {{out.alternativeIsoCode}}
</span>
</div>
</div>
<div class="large-1 medium-1 small-1 columns fi-arrow-right"></div>
<div class="large-8 medium-8 small-7 columns ellipsis">
<div class="large-8 medium-8 small-7 columns ellipsis size-12">
<contact address="{{out.address}}" tooltip-popup-delay="500" tooltip tooltip-placement="right" />
</div>
</div>
<div class="line-t m5t" ng-show="!!tx.merchant">
<div class="m10t" ng-show="!!tx.merchant">
<div class="send-note">
<p>
<b>{{tx.merchant.pr.pd.memo}}</b>
<p>
Expires {{tx.merchant.pr.pd.expires * 1000 | amTimeAgo }}
<span><b>{{tx.merchant.pr.pd.memo}}</b></span> <br>
<span>Expires {{tx.merchant.pr.pd.expires * 1000 | amTimeAgo }} </span>
<span ng-show="tx.merchant.domain">[{{tx.merchant.domain}}]</span>
<span ng-show="!!tx.merchant.pr.ca"><i class="fi-lock"></i> {{tx.merchant.pr.ca}}</span>
<span ng-show="!!tx.merchant.pr.ca"><i class="icon-locked size-14"></i> {{tx.merchant.pr.ca}}</span>
<span ng-show="!tx.merchant.pr.ca" style="color:red;weight:bold;"><i class="fi-unlock"></i> Untrusted</span>
</div>
</div>
<div class="line-b"></div>
</div>
<table class="last-transactions-content">
<tbody>
<tr ng-repeat="c in tx.actionList">
<td width="100%">{{c.cId === $root.wallet.getMyCopayerId() ? 'Me' : $root.wallet.publicKeyRing.nicknameForCopayer(c.cId)}}
</td>
<td>
<i ng-if="c.actions.create" class="fi-crown icon-status icon-active"></i>
<i ng-if="!c.actions.create" class="fi-crown icon-status"></i>
</td>
<td>
<i ng-if="c.actions.seen" class="fi-eye icon-status icon-active"></i>
<i ng-if="!c.actions.seen" class="fi-eye icon-status"></i>
</td>
<td>
<i ng-if="c.actions.rejected" class="fi-x icon-status icon-active-x"></i>
<i ng-if="c.actions.sign" class="fi-check icon-status icon-active-check"></i>
<i ng-if="!c.actions.sign && !c.actions.rejected && tx.missingSignatures" class="fi-loop icon-rotate"></i>
</td>
</tr>
</tbody>
</table>
<div class="last-transactions-footer">
<div class="row collapse">
<div class="large-5 medium-7 small-12 columns" ng-show="!tx.sentTs">
<div class="large-6 medium-12 small-12 columns" ng-show="!tx.sentTs">
<div ng-show="tx.signedBy[myId]">
<button class="secondary left m10r tiny m0 radius" ng-disabled="true"> <i class="fi-check icon-sign check"></i>
<span translate>I signed</span>
</button>
</div>
<div ng-show="tx.rejectedBy[myId]">
<button class="warning left m10r tiny m0 radius" ng-disabled="true"> <i class="fi-x icon-sign x"></i>
<span translate>I rejected</span>
</button>
</div>
<div ng-show="!tx.signedBy[myId] && !tx.rejectedBy[myId]">
<div class="hide-for-small-only">
<button class="primary tiny m0 m15r" ng-click="sign(tx.ntxid)" ng-disabled="loading">
<i class="fi-check"></i> <span translate>Sign</span>
<i class="fi-check icon-sign check"></i> <span translate>Sign</span>
</button>
<button class="warning tiny m0" ng-click="reject(tx.ntxid)" ng-disabled="loading">
<i class="fi-x" ></i> <span translate>Reject</span>
<i class="fi-x icon-sign x" ></i> <span translate>Reject</span>
</button>
</div>
<div class="show-for-small-only row">
<button class="primary tiny small-5 columns m10b" ng-click="sign(tx.ntxid)" ng-disabled="loading">
<i class="fi-check"></i> <span translate>Sign</span>
<i class="fi-check icon-sign check"></i> <span translate>Sign</span>
</button>
<button class="warning tiny small-5 columns m10b" ng-click="reject(tx.ntxid)" ng-disabled="loading">
<i class="fi-x" ></i> <span translate>Reject</span>
<i class="fi-x icon-sign x" ></i> <span translate>Reject</span>
</button>
</div>
</div>
<div ng-show="!tx.missingSignatures && !tx.sentTs">
<button class="primary tiny m0" ng-click="send(tx.ntxid)" ng-disabled="loading"> <i class=".fi-upload-cloud"></i>
<button class="primary tiny m0" ng-click="send(tx.ntxid)" ng-disabled="loading"> <i class="fi-upload-cloud"></i>
<span translate>Broadcast Transaction</span>
</button>
</div>
</div>
<div class="large-7 medium-5 small-12 columns text-right">
<div translate ng-show="tx.finallyRejected" class="has-error">
Transaction finally rejected
</div>
<div ng-show="!tx.missingSignatures && tx.sentTs">
<div class="is-valid">
<strong translate>Sent</strong> <span class="text-gray" am-time-ago="tx.sentTs"></span>
</div>
<div class="ellipsis small m10t">
<span translate>Transaction ID</span>:
<a href="http://{{getShortNetworkName()}}.insight.is/tx/{{tx.sentTxid}}" target="_blank">
{{tx.sentTxid}}
</a>
</div>
</div>
<div translate class="text-gray" ng-show="!tx.finallyRejected && tx.missingSignatures==1">
One signature missing
</div>
<div translate class="text-gray" ng-show="!tx.finallyRejected && tx.missingSignatures>1">
{{tx.missingSignatures}} signatures missing
</div>
<div class="ellipsis small text-gray show-for-large-up m5t">
<div class="large-6 columns small text-gray show-for-large-up text-right">
<div>
<strong translate>Fee</strong>: {{tx.fee}} {{$root.wallet.settings.unitName}}
</div>
<div class="m5t">
<strong translate>Proposal ID</strong>: {{tx.ntxid}}
</div>
</div>
</div>
</div>
<a class="missing-copayers" ng-click="tx.showDetails = !tx.showDetails">
<span ng-show="!tx.finallyRejected && tx.missingSignatures==1">
<i class="fi-torso"></i>
One signature missing
</span>
<span ng-show="!tx.finallyRejected && tx.missingSignatures>1">
<i class="icon-people"></i>
{{tx.missingSignatures}} signatures missing
</span>
<span ng-show="!tx.finallyRejected && tx.missingSignatures==0">
Copayers
</span>
<i ng-class="{'icon-arrow-up2':tx.showDetails, 'icon-arrow-down2':!tx.showDetails}"></i>
</a>
<ul class="tx-copayers" ng-show="tx.showDetails">
<li ng-repeat="c in tx.actionList" ng-class="{'bottom-line-copayers':!$last}">
<span>
<i ng-if="c.actions.rejected" class="fi-x icon-sign x"></i>
<i ng-if="c.actions.sign" class="fi-check icon-sign check"></i>
<i ng-if="!c.actions.sign && !c.actions.rejected && tx.missingSignatures" class="m10r fi-loop icon-rotate"></i>
</span>
<span>
<i ng-if="c.actions.create" class="fi-crown icon-status icon-active m10r"></i>
</span>
<span>{{c.cId === $root.wallet.getMyCopayerId() ? 'Me' : $root.wallet.publicKeyRing.nicknameForCopayer(c.cId)}}</span>
</li>
</ul>

View File

@ -2,7 +2,7 @@
<div class="row" ng-show="txps.length != 0">
<div class="large-12 columns">
<h2 translate>Pending Transactions Proposals</h2>
<div class="last-transactions"
<div class="panel last-transactions pr"
ng-repeat="tx in txps | paged"
ng-include="'views/includes/transaction.html'"></div>
</div>
@ -88,7 +88,7 @@
<input type="number" id="amount"
ng-disabled="loading || ($root.merchant && +$root.merchant.total > 0) || isPayUri"
name="amount" placeholder="{{'Amount'|translate}}" ng-model="amount"
min="0.00000001" max="10000000000" valid-amount required
ng-minlength="0.00000001" ng-maxlength="10000000000" valid-amount required
autocomplete="off">
<i class="icon-bitcoin"></i>
</div>