diff --git a/www/i18n/locale-en.json b/www/i18n/locale-en.json index 16df1439bbb683f417e7d69cdabad10bcbeedb20..66b2e1f2ba7354f18b1e4b07c6f5415601a11182 100644 --- a/www/i18n/locale-en.json +++ b/www/i18n/locale-en.json @@ -77,7 +77,8 @@ "ACCOUNT": "My Account", "TRANSFER": "Transfer", "SCAN": "Scan", - "SETTINGS": "Settings" + "SETTINGS": "Settings", + "NETWORK": "Network" }, "ABOUT": { "TITLE": "About", diff --git a/www/i18n/locale-fr-FR.json b/www/i18n/locale-fr-FR.json index a9ac9f11a0c915ded6256e2966b05b9abb16e1ea..a34b3bc44de708c1816c1396070751e78513a801 100644 --- a/www/i18n/locale-fr-FR.json +++ b/www/i18n/locale-fr-FR.json @@ -77,7 +77,8 @@ "ACCOUNT": "Mon compte", "TRANSFER": "Virement", "SCAN": "Scanner", - "SETTINGS": "Paramètres" + "SETTINGS": "Paramètres", + "NETWORK" : "Réseau" }, "ABOUT": { "TITLE": "A propos", diff --git a/www/index.html b/www/index.html index 0e0c1aa25d60938f58fbf34df302c0e9db476b45..3853187f5176aaf2bd13324efb10adb65a8dfc0a 100644 --- a/www/index.html +++ b/www/index.html @@ -79,6 +79,7 @@ <script src="dist/dist_js/app/controllers/wallet-controllers.js"></script> <script src="dist/dist_js/app/controllers/wot-controllers.js"></script> <script src="dist/dist_js/app/controllers/peer-controllers.js"></script> + <script src="dist/dist_js/app/controllers/network-controllers.js"></script> <script src="dist/dist_js/app/controllers/currency-controllers.js"></script> <script src="dist/dist_js/app/controllers/currency-charts-controllers.js"></script> <script src="dist/dist_js/app/controllers/transfer-controllers.js"></script> diff --git a/www/js/controllers.js b/www/js/controllers.js index 3eb8aef8d71db780315c8f97887557c37b0af6af..fa5f8a80ef40864452360c5a4d879e4b9d462aac 100644 --- a/www/js/controllers.js +++ b/www/js/controllers.js @@ -9,6 +9,7 @@ angular.module('cesium.controllers', [ /*'cesium.currency-charts.controllers',*/ 'cesium.wot.controllers', 'cesium.transfer.controllers', - 'cesium.settings.controllers' + 'cesium.settings.controllers', + 'cesium.network.controllers' ]) ; diff --git a/www/js/controllers/currency-controllers.js b/www/js/controllers/currency-controllers.js index ea8eb66d7f0678d484bc65534bc50995ba221c7a..7706ec7381adabb877803166e844f2644b7caf6e 100644 --- a/www/js/controllers/currency-controllers.js +++ b/www/js/controllers/currency-controllers.js @@ -37,29 +37,13 @@ angular.module('cesium.currency.controllers', ['cesium.services']) controller: 'CurrencyViewCtrl' } } - }) - - .state('app.view_peer', { - url: "/currency/peer/:server", - nativeTransitions: { - "type": "flip", - "direction": "right" - }, - views: { - 'menuContent': { - templateUrl: "templates/currency/view_peer.html", - controller: 'PeerCtrl' - } - } }); + }) .controller('CurrencyLookupCtrl', CurrencyLookupController) .controller('CurrencyViewCtrl', CurrencyViewController) - -.controller('PeerCtrl', PeerController) - ; function CurrencyLookupController($scope, $state, UIUtils, csCurrency) { @@ -90,8 +74,6 @@ function CurrencyLookupController($scope, $state, UIUtils, csCurrency) { } function CurrencyViewController($scope, $q, $translate, $timeout, BMA, UIUtils, csSettings, csCurrency, csNetwork) { - - $scope.loadingPeers = true; $scope.formData = { useRelative: csSettings.data.useRelative }; @@ -117,9 +99,9 @@ function CurrencyViewController($scope, $q, $translate, $timeout, BMA, UIUtils, $scope.xpercent = 0; $scope.$on('$ionicView.enter', function(e, state) { - $translate(['COMMON.DATE_PATTERN']) - .then(function($translations) { - $scope.datePattern = $translations['COMMON.DATE_PATTERN']; + $translate('COMMON.DATE_PATTERN') + .then(function(datePattern) { + $scope.datePattern = datePattern; if (state.stateParams && state.stateParams.name) { // Load by name csCurrency.searchByName(state.stateParams.name) .then(function(currency){ @@ -148,30 +130,6 @@ function CurrencyViewController($scope, $q, $translate, $timeout, BMA, UIUtils, BMA.instance(currency.peer.host, currency.peer.port) : BMA; UIUtils.loading.show(); - if ($scope.loadingPeers){ - csNetwork.start($scope.node); - - // Catch event on new peers - var refreshing = false; - csNetwork.api.data.on.changed($scope, function(data){ - if (!refreshing) { - refreshing = true; - $timeout(function() { // Timeout avoid to quick updates - console.debug("Updating UI Peers"); - $scope.peers = data.peers; - // Update currency params - - $scope.loadingPeers = csNetwork.isBusy(); - refreshing = false; - $scope.loadParameter(); - }, 1100); - } - }); - $scope.$on('$destroy', function(){ - csNetwork.close(); - }); - } - // Load currency parameters $scope.loadParameter(); @@ -266,17 +224,6 @@ function CurrencyViewController($scope, $q, $translate, $timeout, BMA, UIUtils, }); }; - $scope.refresh = function() { - UIUtils.loading.show(); - - $scope.loadParameter() - .then(function(){ - // Network - $scope.loadingPeers = true; - csNetwork.loadPeers(); - }); - }; - $scope.onUseRelativeChanged = function() { if ($scope.loading) return; if ($scope.formData.useRelative) { diff --git a/www/js/controllers/network-controllers.js b/www/js/controllers/network-controllers.js new file mode 100644 index 0000000000000000000000000000000000000000..a2649840eab92ba731a9c00e953f4a79ad68b89e --- /dev/null +++ b/www/js/controllers/network-controllers.js @@ -0,0 +1,117 @@ + +angular.module('cesium.network.controllers', ['cesium.services']) + +.config(function($stateProvider) { + 'ngInject'; + + $stateProvider + + .state('app.network_view', { + url: "/network/view", + views: { + 'menuContent': { + templateUrl: "templates/network/view_network.html", + controller: 'NetworkViewCtrl' + } + }, + }) + + .state('app.view_peer', { + url: "/network/peer/:server", + nativeTransitions: { + "type": "flip", + "direction": "right" + }, + views: { + 'menuContent': { + templateUrl: "templates/network/view_peer.html", + controller: 'PeerCtrl' + } + } + }); +}) + +.controller('NetworkViewCtrl', NetworkViewController) + +.controller('PeerCtrl', PeerController) + +; + +function NetworkViewController($scope, $q, $translate, $timeout, BMA, UIUtils, csSettings, csCurrency, csNetwork) { + $scope.loadingPeers = true; + $scope.formData = { + useRelative: csSettings.data.useRelative + }; + + $scope.screen = UIUtils.screen; + + $scope.$on('$ionicParentView.enter', function(e, state) { + csCurrency.all() + .then(function (currencies) { + if (currencies && currencies.length > 0) { + $scope.load(currencies[0]); + } + + }) + .catch(UIUtils.onError('ERROR.GET_CURRENCY_FAILED')); + }); + + $scope.$on('$ionicParentView.beforeLeave', function(){ + csNetwork.close(); + }); + + $scope.load = function(currency) { + $scope.node = !BMA.node.same(currency.peer.host, currency.peer.port) ? + BMA.instance(currency.peer.host, currency.peer.port) : BMA; + + if ($scope.loadingPeers){ + csNetwork.start($scope.node); + + // Catch event on new peers + var refreshing = false; + csNetwork.api.data.on.changed($scope, function(data){ + if (!refreshing) { + refreshing = true; + $timeout(function() { // Timeout avoid to quick updates + console.debug("Updating UI Peers"); + $scope.peers = data.peers; + // Update currency params + + $scope.loadingPeers = csNetwork.isBusy(); + refreshing = false; + }, 1100); + } + }); + $scope.$on('$destroy', function(){ + csNetwork.close(); + }); + } + + // Show help tip + $scope.showHelpTip(); + }; + + $scope.refresh = function() { + // Network + $scope.loadingPeers = true; + csNetwork.loadPeers(); + }; + + // Show help tip + $scope.showHelpTip = function() { + if (!$scope.isLogin()) return; + index = csSettings.data.helptip.currency; + if (index < 0) return; + + // Create a new scope for the tour controller + var helptipScope = $scope.createHelptipScope(); + if (!helptipScope) return; // could be undefined, if a global tour already is already started + + return helptipScope.startCurrencyTour(index, false) + .then(function(endIndex) { + helptipScope.$destroy(); + csSettings.data.helptip.currency = endIndex; + csSettings.store(); + }); + }; +} diff --git a/www/templates/currency/tabs/view_network.html b/www/templates/currency/tabs/view_network.html index 8f8a80c9389092fb90029af0807fc224043cd45e..bf92feabb4d4e62b1a0068eb20f5e48bed69d423 100644 --- a/www/templates/currency/tabs/view_network.html +++ b/www/templates/currency/tabs/view_network.html @@ -18,36 +18,7 @@ <span class="badge badge-stable">{{difficulty | formatInteger}}</span> </ion-item> - <div id="helptip-currency-peers" - class="item item-divider item-icon-right"> - {{'PEER.PEERS'|translate}} - <ion-spinner class="icon" icon="android" ng-if="loadingPeers"></ion-spinner> - <a class="icon ion-loop gray hidden-xs hidden-sm" ng-if="!loadingPeers" ng-click="refresh()"> - </a> - </div> + <ng-include ng-controller="NetworkViewCtrl" src="'templates/network/tabs/view_nodes.html'" ></ng-include> - <a class="peer-item item item-icon-left" - ng-repeat="peer in peers track by peer.server" - id="helptip-currency-peer-{{$index}}" - ng-class="{ assertive: !peer.online, balanced: (peer.online && peer.hasMainConsensusBlock), energized: (peer.online && !peer.hasMainConsensusBlock)}" - ui-sref="app.view_peer({server: peer.server})"> - <i class="icon ion-android-globe"></i> - <div class="row no-padding"> - <div class="col no-padding"> - <h3><i ng-class="{'ion-person': peer.uid, 'ion-key': !peer.uid}"></i> {{peer.uid || peer.pubkey.substr(0,8)}}</span> <span class="gray">{{peer.dns && ' | ' + peer.dns}}</h3> - <h4>{{peer.server}}</h4> - </div> - <div class="col col-10 no-padding" ng-if="settings.expertMode"> - <h3 class="hidden-sm hidden-xs hidden-md"> - <span ng-if="peer.level"><i class="ion-lock-combination"></i> {{peer.level}}</span> - <span ng-if="!peer.level" translate>PEER.MIRROR</span> - </h3> - <h4 class="hidden-sm hidden-xs hidden-md gray">v{{peer.version}}</h4> - </div> - <div class="col col-20 no-padding"> - <span id="helptip-currency-peer-{{$index}}-block" - class="badge" ng-class="{ 'badge-balanced': peer.hasMainConsensusBlock, 'badge-energized': peer.hasConsensusBlock }">{{peer.currentNumber}}</span> - </div> - </div> - </a> + </div> diff --git a/www/templates/menu.html b/www/templates/menu.html index b759ae387c0460f415075dea49b7338685f7be4b..685f5539b61c025c00470680617ac4779ba7595d 100644 --- a/www/templates/menu.html +++ b/www/templates/menu.html @@ -63,6 +63,16 @@ <span translate>MENU.CURRENCY</span> </ion-item> + <ion-item menu-close + id="helptip-menu-btn-network" + class="item item-icon-left" + active-link="active" + active-link-path-prefix="#/app/network" + href="#/app/network/view"> + <i class="icon ion-android-globe"></i> + <span translate>MENU.NETWORK</span> + </ion-item> + <!-- Allow extension here --> <cs-extension-point name="menu-discover"></cs-extension-point> diff --git a/www/templates/network/tabs/view_nodes.html b/www/templates/network/tabs/view_nodes.html new file mode 100644 index 0000000000000000000000000000000000000000..24ef977b118a8f7d4eda125fb584be9f2bcada1c --- /dev/null +++ b/www/templates/network/tabs/view_nodes.html @@ -0,0 +1,33 @@ +<div class="list"> + <div id="helptip-currency-peers" + class="item item-divider item-icon-right"> + {{'PEER.PEERS'|translate}} + <ion-spinner class="icon" icon="android" ng-if="loadingPeers"></ion-spinner> + <a class="icon ion-loop gray hidden-xs hidden-sm" ng-if="!loadingPeers" ng-click="refresh()"> + </a> + </div> + <a class="peer-item item item-icon-left" + ng-repeat="peer in peers track by peer.server" + id="helptip-currency-peer-{{$index}}" + ng-class="{ assertive: !peer.online, balanced: (peer.online && peer.hasMainConsensusBlock), energized: (peer.online && !peer.hasMainConsensusBlock)}" + ui-sref="app.view_peer({server: peer.server})"> + <i class="icon ion-android-globe"></i> + <div class="row no-padding"> + <div class="col no-padding"> + <h3><i ng-class="{'ion-person': peer.uid, 'ion-key': !peer.uid}"></i> {{peer.uid || peer.pubkey.substr(0,8)}}</span> <span class="gray">{{peer.dns && ' | ' + peer.dns}}</h3> + <h4>{{peer.server}}</h4> + </div> + <div class="col col-10 no-padding" ng-if="settings.expertMode"> + <h3 class="hidden-sm hidden-xs hidden-md"> + <span ng-if="peer.level"><i class="ion-lock-combination"></i> {{peer.level}}</span> + <span ng-if="!peer.level" translate>PEER.MIRROR</span> + </h3> + <h4 class="hidden-sm hidden-xs hidden-md gray">v{{peer.version}}</h4> + </div> + <div class="col col-20 no-padding"> + <span id="helptip-currency-peer-{{$index}}-block" + class="badge" ng-class="{ 'badge-balanced': peer.hasMainConsensusBlock, 'badge-energized': peer.hasConsensusBlock }">{{peer.currentNumber}}</span> + </div> + </div> + </a> +</div> diff --git a/www/templates/network/view_network.html b/www/templates/network/view_network.html new file mode 100644 index 0000000000000000000000000000000000000000..a2251c74b8f36fcc0aaf64be45565a552cf4270c --- /dev/null +++ b/www/templates/network/view_network.html @@ -0,0 +1,22 @@ +<ion-view + left-buttons="leftButtons" class="pane" + cache-view="false" + > + <ion-nav-title> + </ion-nav-title> + + <ion-nav-buttons side="secondary"> + <button class="button button-icon button-clear icon ion-loop visible-xs visible-sm" ng-click="refresh()"> + </button> + </ion-nav-buttons> + + <ion-content> + <div class="row"> + <div class="row responsive-sm"> + <div class="col col-100"> + <ng-include src="'templates/network/tabs/view_nodes.html'"></ng-include> + </div> + </div> + </ion-content> + +</ion-view> diff --git a/www/templates/network/view_peer.html b/www/templates/network/view_peer.html new file mode 100644 index 0000000000000000000000000000000000000000..918789c065760e48b3a4e307dfc2542dd07c9a62 --- /dev/null +++ b/www/templates/network/view_peer.html @@ -0,0 +1,29 @@ +<ion-view> + <ion-nav-title> + <span translate>PEER.TITLE</span> + </ion-nav-title> + + <ion-content class="has-header padding"> + <div class="list"> + + <div class="item item-divider"> + <h2 translate>PEER.KNOWN_PEERS</h2> + </div> + + <div class="item center" ng-if="!loaded"> + <ion-spinner class="icon" icon="android"></ion-spinner> + </div> + + <a class="peer-item item item-icon-left" + collection-repeat="peer in peers" + ng-class="{ assertive: !peer.online, balanced: peer.online }" + target="_blank" + ng-href="{{peer.getURL()}}/blockchain/current"> + <i class="icon ion-android-globe"></i> + <h3><span ng-class="{ positive: peer.uid }">{{peer.uid || peer.pubkey.substr(0,8)}}</span> <span class="gray">{{peer.dns && ' | ' + peer.dns}}</span></h3> + <h4>{{peer.getServer()}} <span class="gray">| {{'PEER.SIGNED_ON_BLOCK' | translate}}</span> #{{peer.blockNumber}}</h4> + <span class="badge" ng-class="{ 'badge-balanced': peer.hasMainConsensusBlock, 'badge-energized': peer.hasConsensusBlock }">{{peer.current.number}}</span> + </a> + </div> + </ion-content> +</ion-view>