diff --git a/scss/ionic.app.scss b/scss/ionic.app.scss index e567a7c30b00a394e4d1a6c43f1c1dfd914d0781..00f73240c8d5373eedf59deef9e723f68abec32a 100644 --- a/scss/ionic.app.scss +++ b/scss/ionic.app.scss @@ -1855,6 +1855,7 @@ $ionicon-var-badge-editable: $ionicon-var-edit + "\00a0"; content: url('../img/logo_tor_32px.png'); } + .row-header{ border-bottom: solid 1px #ccc !important; margin: 0px; diff --git a/www/css/style.css b/www/css/style.css index 493de04a06c8f576e6a9eae269c8207da0c378ab..8c0f1249bb04864e535f65542f2116a84195ee05 100644 --- a/www/css/style.css +++ b/www/css/style.css @@ -149,6 +149,12 @@ color: #fff !important; } +.list .item-peer .badge.badge-secondary, +.list .item-peer .badge .badge-secondary { + top: 31px; + font-size: 10px; +} + .settings .item-divider { background-color: #f5f5f5; } diff --git a/www/js/directives.js b/www/js/directives.js index e8b3dcbfc8a2787d7bbf3bd289e0b1270429b1d7..536b89535aeb178bbc289916857c8cbce7115268 100644 --- a/www/js/directives.js +++ b/www/js/directives.js @@ -339,17 +339,6 @@ angular.module('cesium') }; }) - // Auto remove auth/login data, after some inactivity - // see: https://stackoverflow.com/questions/28197316/javascript-or-angularjs-defer-browser-close-or-tab-close-between-refresh - .directive('cleanAuthIdle', function() { - return { - restrict: 'AE', - link: function(element, attrs){ - - } - }; - }) - // Un-authenticate when window closed // see: https://stackoverflow.com/questions/28197316/javascript-or-angularjs-defer-browser-close-or-tab-close-between-refresh .directive('windowExitUnauth', function($window, csWallet) { diff --git a/www/js/filters.js b/www/js/filters.js index b6c64869c4f58b70507011aa3771db310f759298..08f53727ffd94db5fe64941e7ba0d98b73abe541 100644 --- a/www/js/filters.js +++ b/www/js/filters.js @@ -239,6 +239,18 @@ angular.module('cesium.filters', ['cesium.config', 'cesium.platform', 'pascalpre }; }) + + .filter('formatDurationTime', function() { + return function(input) { + if (!input) return ''; + var sign = input && input < 0 ? '- ' : '+ '; + var hourFloat = Math.abs(input / 60 / 60); + var hour = Math.trunc(hourFloat); + var min = Math.trunc((hourFloat - hour) * 60); + return hour > 0 ? (sign + hour + 'h ' + min + 's') : (sign + min + 's') ; + }; + }) + // Display time in ms or seconds (see i18n label 'COMMON.EXECUTION_TIME') .filter('formatDurationMs', function() { return function(input) { diff --git a/www/js/services/network-services.js b/www/js/services/network-services.js index 70c67dcb7bbfb4b89db9182252225a6ad021d4f5..50678a6cdfb2e174e46aba839e48864b0e9bd750 100644 --- a/www/js/services/network-services.js +++ b/www/js/services/network-services.js @@ -472,6 +472,9 @@ angular.module('cesium.network.services', ['ngApi', 'cesium.bma.services', 'cesi _.forEach(data.peers, function(peer){ peer.hasMainConsensusBlock = peer.buid == mainBlock.buid; peer.hasConsensusBlock = !peer.hasMainConsensusBlock && buids[peer.buid].count > 1; + if (peer.hasConsensusBlock) { + peer.consensusBlockDelta = buids[peer.buid].medianTime - mainBlock.medianTime; + } }); data.peers = _.uniq(data.peers, false, function(peer) { return peer.id; diff --git a/www/templates/network/items_peers.html b/www/templates/network/items_peers.html index 07a76205996be76ef09e594d3dc54c36eb7ccbaf..2dd39b582c83ea4607523d626b30d9a42e03f7af 100644 --- a/www/templates/network/items_peers.html +++ b/www/templates/network/items_peers.html @@ -32,10 +32,10 @@ ng-click="selectPeer(peer)"> <i class="icon ion-android-desktop" - ng-class="{'balanced': peer.online && peer.hasMainConsensusBlock, 'energized': peer.online && peer.hasConsensusBlock, 'gray': peer.online && !peer.hasConsensusBlock && !peer.hasMainConsensusBlock, 'stable': !peer.online}" + ng-class=":rebind:{'balanced': peer.online && peer.hasMainConsensusBlock, 'energized': peer.online && peer.hasConsensusBlock, 'gray': peer.online && !peer.hasConsensusBlock && !peer.hasMainConsensusBlock, 'stable': !peer.online}" ng-if=":rebind:!peer.uid || !peer.avatar"></i> <b class="icon-secondary ion-person" ng-if=":rebind:!peer.avatar && peer.uid" - ng-class="{'balanced': peer.online && peer.hasMainConsensusBlock, 'energized': peer.online && peer.hasConsensusBlock, 'gray': peer.online && !peer.hasConsensusBlock && !peer.hasMainConsensusBlock, 'stable': !peer.online}" + ng-class=":rebind:{'balanced': peer.online && peer.hasMainConsensusBlock, 'energized': peer.online && peer.hasConsensusBlock, 'gray': peer.online && !peer.hasConsensusBlock && !peer.hasMainConsensusBlock, 'stable': !peer.online}" style="left: 26px; top: -3px;"></b> <i class="avatar" ng-if=":rebind:peer.uid && peer.avatar" style="background-image: url('{{:rebind:peer.avatar.src}}')"></i> <b class="icon-secondary assertive ion-close-circled" ng-if=":rebind:!peer.online" style="left: 37px; top: -10px;"></b> @@ -78,7 +78,9 @@ </div> <div class="col col-20 no-padding text-center"> <span id="helptip-network-peer-{{$index}}-block" - class="badge" ng-class="{'badge-balanced': peer.hasMainConsensusBlock, 'badge-energized': peer.hasConsensusBlock }">{{:rebind:peer.currentNumber|formatInteger}}</span> + class="badge" ng-class=":rebind:{'badge-balanced': peer.hasMainConsensusBlock, 'badge-energized': peer.hasConsensusBlock }">{{:rebind:peer.currentNumber|formatInteger}}</span> + <span class="badge badge-secondary" ng-if=":rebind:peer.consensusBlockDelta">{{:rebind:peer.consensusBlockDelta|formatDurationTime}}</span> + </div> </div> </div>