diff --git a/nbproject/project.xml b/nbproject/project.xml index 4b8d0ed..42db4a6 100644 --- a/nbproject/project.xml +++ b/nbproject/project.xml @@ -3,7 +3,7 @@ org.netbeans.modules.web.clientproject - scorexplorer + scorex-explorer diff --git a/src/css/style.css b/src/css/style.css index b82115c..9238bc4 100644 --- a/src/css/style.css +++ b/src/css/style.css @@ -16,6 +16,9 @@ footer p { margin-bottom: 0; } +.search-input { + width: 350px; +} .blockDetails th, .blockDetails td { border-top: none !important; diff --git a/src/index.html b/src/index.html index 6e90101..5e787a6 100644 --- a/src/index.html +++ b/src/index.html @@ -27,16 +27,20 @@
  • Peers
  • - + + - @@ -86,8 +90,10 @@ + + \ No newline at end of file diff --git a/src/js/apiMethods.js b/src/js/apiMethods.js index d070993..37bcec4 100644 --- a/src/js/apiMethods.js +++ b/src/js/apiMethods.js @@ -2,7 +2,7 @@ 'use strict'; var URL = 'http://23.94.190.226:9081'; - + angular.module('web').constant('apiMethods', { version: URL + '/scorex/version', status: URL + '/scorex/status', @@ -23,7 +23,7 @@ return URL + '/addresses/balance/' + address; }, generatingBalance: function (address) { - return URL + '/addresses/generatingbalance/' + address + return URL + '/addresses/generatingbalance/' + address; }, validate: function (address) { return URL + '/addresses/validate/' + address; @@ -31,6 +31,9 @@ }, transactions: { unconfirmed: URL + '/transactions/unconfirmed', + info: function (signature) { + return URL + '/transactions/info/' + signature; + }, forAddress: function (address) { return URL + '/transactions/address/' + address + '/limit/50'; } diff --git a/src/js/controllers/block-details-sig.js b/src/js/controllers/block-details-sig.js new file mode 100644 index 0000000..e8d0225 --- /dev/null +++ b/src/js/controllers/block-details-sig.js @@ -0,0 +1,32 @@ +(function () { + 'use strict'; + + function BlocksDetailsSigCtrl($http, apiMethods, $stateParams, $state) { + var ctrl = this; + ctrl.signature = $stateParams.signature; + ctrl.next = nextBlock; + ctrl.prev = prevBlock; + + activate(); + + function activate() { + + $http.get(apiMethods.blocks.bySignature(ctrl.signature)) + .success(function (data) { + ctrl.details = data; + }); + } + + function nextBlock() { + $state.go('block-details', {height: ctrl.height + 1}); + } + + function prevBlock() { + if (ctrl.height > 1) + $state.go('block-details', {height: ctrl.height - 1}); + } + + } + + angular.module('web').controller('BlocksDetailsSigCtrl', BlocksDetailsSigCtrl); +})(); diff --git a/src/js/controllers/block-details.js b/src/js/controllers/block-details.js index 3fece3e..483fd2a 100644 --- a/src/js/controllers/block-details.js +++ b/src/js/controllers/block-details.js @@ -14,7 +14,7 @@ $http.get(apiMethods.blocks.byHeight(ctrl.height)) .success(function (data) { ctrl.details = data; - }) + }); } function nextBlock() { diff --git a/src/js/controllers/general.js b/src/js/controllers/general.js index e27ea35..6143ec4 100644 --- a/src/js/controllers/general.js +++ b/src/js/controllers/general.js @@ -35,7 +35,7 @@ }); $http.get(apiMethods.transactions.unconfirmed) .success(function (data) { - ctrl.unconfirmedTxs = data[0]; + ctrl.unconfirmedTxs = data; }); $http.get(apiMethods.consensus.puz) .success(function (data) { @@ -43,7 +43,7 @@ }); $http.get(apiMethods.consensus.algo) .success(function (data) { - ctrl.consensus.algo = data["consensus-algo"]; + ctrl.consensus.algo = data.consensusAlgo; }); $http.get(apiMethods.consensus.target) .success(function (data) { diff --git a/src/js/controllers/search.js b/src/js/controllers/search.js index e8e3305..eca4845 100644 --- a/src/js/controllers/search.js +++ b/src/js/controllers/search.js @@ -1,15 +1,42 @@ -(function(){ +(function () { 'use strict'; - - function SearchCtrl($scope, $state) { - + + function SearchCtrl($scope, $state, $http, apiMethods) { + $scope.search = search; - + function search() { - $state.go('address-details', {address: $scope.address}); + var q = $scope.searchQuery; + if (!q) + return; + // check address + $http.get(apiMethods.address.validate(q)) + .success(function (data) { + if (data.valid) + $state.go('address-details', {address: q}); + else { + // check block + $http.get(apiMethods.blocks.bySignature(q)) + .success(function (data) { + if (!data.error) { + $state.go('block-details-sig', {signature: q}) + } else { + // check tx + $http.get(apiMethods.transactions.info(q)) + .success(function(data){ + if (!data.error) + $state.go('tx-details', {signature:q}); + }) + } + }); + } + }) + .error(function (data) { + }); + } } - + angular.module('web').controller('SearchCtrl', SearchCtrl); })(); diff --git a/src/js/controllers/tx-details.js b/src/js/controllers/tx-details.js new file mode 100644 index 0000000..86e4f0e --- /dev/null +++ b/src/js/controllers/tx-details.js @@ -0,0 +1,19 @@ +(function(){ + 'use strict'; + + function TxDetailsCtrl($http, $stateParams, apiMethods) { + var ctrl = this; + ctrl.signature = $stateParams.signature; + + activate(); + + function activate() { + $http.get(apiMethods.transactions.info(ctrl.signature)) + .success(function(data){ + ctrl.details = data; + }); + } + } + + angular.module('web').controller('TxDetailsCtrl', TxDetailsCtrl); +})(); \ No newline at end of file diff --git a/src/js/routes.js b/src/js/routes.js index 5a096e0..52c2dbd 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -2,59 +2,77 @@ 'use strict'; angular.module('web') - .config(['$stateProvider', '$locationProvider', '$urlRouterProvider', function ($stateProvider, $locationProvider, $urlRouterProvider) { - $stateProvider - .state('general', { - url: '/', - views: { - "main": { - controller: 'GeneralCtrl as ctrl', - templateUrl: '/js/views/general.html' - } - } - }) - .state('address-details', { - url: '/address/:address', - views: { - "main": { - controller: 'AddressDetailsCtrl as ctrl', - templateUrl: '/js/views/address-details.html' - } - } - }) - .state('blocks', { - url: '/blocks', - views: { - "main": { - controller: 'BlocksCtrl as ctrl', - templateUrl: '/js/views/blocks.html' - } - } - }) - .state('block-details', { - url: '/blocks/:height', - views: { - "main": { - controller: 'BlocksDetailsCtrl as ctrl', - templateUrl: '/js/views/block-details.html' - } - } - }) - .state('peers', { - url: '/peers', - views: { - "main": { - controller: 'PeersCtrl as ctrl', - templateUrl: '/js/views/peers.html' - } - } - }); - - $locationProvider.html5Mode({ - enabled: true, - requireBase: false, - rewriteLinks: false + .config(['$stateProvider', '$locationProvider', '$urlRouterProvider', function ($stateProvider, $locationProvider, $urlRouterProvider) { + $stateProvider + .state('general', { + url: '/', + views: { + "main": { + controller: 'GeneralCtrl as ctrl', + templateUrl: '/js/views/general.html' + } + } + }) + .state('address-details', { + url: '/address/:address', + views: { + "main": { + controller: 'AddressDetailsCtrl as ctrl', + templateUrl: '/js/views/address-details.html' + } + } + }) + .state('blocks', { + url: '/blocks', + views: { + "main": { + controller: 'BlocksCtrl as ctrl', + templateUrl: '/js/views/blocks.html' + } + } + }) + .state('block-details-sig', { + url: '/blocks/s/:signature', + views: { + "main": { + controller: 'BlocksDetailsSigCtrl as ctrl', + templateUrl: '/js/views/block-details-sig.html' + } + } + }) + .state('block-details', { + url: '/blocks/:height', + views: { + "main": { + controller: 'BlocksDetailsCtrl as ctrl', + templateUrl: '/js/views/block-details.html' + } + } + }) + .state('tx-details', { + url: '/tx/:signature', + views: { + "main": { + controller: 'TxDetailsCtrl as ctrl', + templateUrl: '/js/views/tx-details.html' + } + } + }) + .state('peers', { + url: '/peers', + views: { + "main": { + controller: 'PeersCtrl as ctrl', + templateUrl: '/js/views/peers.html' + } + } }); - } - ]); + + $locationProvider.html5Mode({ + enabled: true, + requireBase: false, + rewriteLinks: false + }); + } + ]); })(); \ No newline at end of file diff --git a/src/js/views/address-details.html b/src/js/views/address-details.html index 8483006..517eb9c 100644 --- a/src/js/views/address-details.html +++ b/src/js/views/address-details.html @@ -38,13 +38,13 @@ - - - - - - - + + + + + + + @@ -52,7 +52,7 @@ - + diff --git a/src/js/views/block-details-sig.html b/src/js/views/block-details-sig.html new file mode 100644 index 0000000..f42b30b --- /dev/null +++ b/src/js/views/block-details-sig.html @@ -0,0 +1,92 @@ + +
    +
    +
    +
    + Block {{ctrl.signature}} +
    + +
    + +
    typefeetimestampsignaturesenderrecipientamountTypeFeeTimestampSignatureSenderRecipientAmount
    {{item.type}} {{item.fee}} {{item.timestamp|date:'yyyy-MM-dd HH:mm:ss'}}{{item.signature|limitTo:8}}...{{item.signature|limitTo:8}}... {{item.sender|limitTo:8}}... {{item.recipient|limitTo:8}}... {{item.amount|currency:''}}
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Version{{ctrl.details.version}}
    Timestamp{{ctrl.details.timestamp|date:'yyyy-MM-dd HH:mm:ss'}}
    Transactions + {{ctrl.details.transactions.length}} transactions +
    Parent block + {{ctrl.details.reference}} +
    Generator + {{ctrl.details.generator}} +
    Signature{{ctrl.details.signature}}
    Fee{{ctrl.details.fee|currency:''}}
    Size{{ctrl.details.blocksize}}
    + + +
    +
    + Transactions in #{{ctrl.height}} +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    TypeFeeTimestampSignatureSenderRecipientAmount
    {{item.type}}{{item.fee}}{{item.timestamp|date:'yyyy-MM-dd HH:mm:ss'}}{{item.signature|limitTo:7}}...{{item.sender|limitTo:7}}...{{item.recipient|limitTo:7}}...{{item.amount|currency:''}}
    +
    +
    + + diff --git a/src/js/views/block-details.html b/src/js/views/block-details.html index ad6d9f3..07af22a 100644 --- a/src/js/views/block-details.html +++ b/src/js/views/block-details.html @@ -25,7 +25,7 @@ Transactions - {{ctrl.details.transactions[0].length}} transactions + {{ctrl.details.transactions.length}} transactions @@ -64,21 +64,21 @@ - - - - - - - + + + + + + + - + - + diff --git a/src/js/views/blocks.html b/src/js/views/blocks.html index 5ca549c..f3e6c48 100644 --- a/src/js/views/blocks.html +++ b/src/js/views/blocks.html @@ -35,7 +35,7 @@

    Last block #{{ctrl.height}}

    - + diff --git a/src/js/views/general.html b/src/js/views/general.html index e26a75c..5e191e6 100644 --- a/src/js/views/general.html +++ b/src/js/views/general.html @@ -6,8 +6,8 @@

    General info

    Version: {{ctrl.version}}

    -

    block generator status: {{ctrl.status["block generator status"]}}

    -

    history synchronization status: {{ctrl.status["history synchronization status"]}}

    +

    block generator status: {{ctrl.status.block_generator_status}}

    +

    history synchronization status: {{ctrl.status.history_synchronization_status}}

    @@ -41,7 +41,7 @@

    Last blocks View

    #{{item.height}}

    signature: {{item.signature|limitTo:10}}...

    -

    {{item.transactions[0].length}} transactions. {{item.timestamp|date:'yyyy-MM-dd HH:mm:ss'}}

    +

    {{item.transactions.length}} transactions. {{item.timestamp|date:'yyyy-MM-dd HH:mm:ss'}}

    @@ -62,20 +62,20 @@

    Unconfirmed Transactions

    typefeetimestampsignaturesenderrecipientamountTypeFeeTimestampSignatureSenderRecipientAmount
    {{item.type}} {{item.fee}} {{item.timestamp|date:'yyyy-MM-dd HH:mm:ss'}}{{item.signature|limitTo:7}}...{{item.signature|limitTo:7}}... {{item.sender|limitTo:7}}... {{item.recipient|limitTo:7}}... {{item.amount|currency:''}} {{item.height}} {{item.timestamp|date:'yyyy-MM-dd HH:mm:ss'}} {{item.signature|limitTo:15}}...{{item.transactions[0].length}}{{item.transactions.length}} {{item.fee}}
    - - - - - - - + + + + + + + - + diff --git a/src/js/views/tx-details.html b/src/js/views/tx-details.html new file mode 100644 index 0000000..4cad612 --- /dev/null +++ b/src/js/views/tx-details.html @@ -0,0 +1,53 @@ + +
    +
    +
    +
    + Transaction {{ctrl.signature}} +
    + +
    + +
    typefeetimestampsignaturesenderrecipientamountTypeFeeTimestampSignatureSenderRecipientAmount
    {{item.type}} {{item.fee}} {{item.timestamp|date:'yyyy-MM-dd HH:mm:ss'}}{{item.signature|limitTo:5}}...{{item.signature|limitTo:5}}... {{item.sender|limitTo:6}}... {{item.recipient|limitTo:6}}... {{item.amount|currency:''}}
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Type{{ctrl.details.type}}
    Timestamp{{ctrl.details.timestamp|date:'yyyy-MM-dd HH:mm:ss'}}
    Amount{{ctrl.details.amount|currency:''}}
    Fee{{ctrl.details.fee|currency:''}}
    Sender + {{ctrl.details.sender}} +
    Recipient + {{ctrl.details.recipient}} +
    Signature{{ctrl.details.signature}}
    + + + + +