{"version":3,"file":"bundle.min.js","sources":["scripts/bundle.min.js"],"sourcesContent":["/******************************************************************************\n * Copyright © 2017 XIN Community *\n * *\n * See the DEVELOPER-AGREEMENT.txt and LICENSE.txt files at the top-level *\n * directory of this distribution for the individual copyright holder *\n * information and the developer policies on copyright and licensing. *\n * *\n * Unless otherwise agreed in a custom licensing agreement, no part of the *\n * XIN software, including this file, may be copied, modified, propagated, *\n * or distributed except according to the terms contained in the LICENSE.txt *\n * file. *\n * *\n * Removal or modification of this copyright notice is prohibited. *\n * *\n ******************************************************************************/\n\nangular.module('peers',\n ['restangular', 'datatables', 'datatables.bootstrap', 'ui.bootstrap', 'ui.router', 'nvd3', 'ngSanitize','cc.autorefresh', 'ng-countryflags']);\n\nangular.module('peers').constant('peerConfig', {\n 'apiUrl': window.getEnvConfig(\"PEER_EXPLORER_API_URL\") || 'http://185.103.75.217:8888/',\n //Replace IP with your own VPS\n 'peerEndPoint': 'api/nodes'\n});\n\nangular.module('peers').constant('PEER_CONSTANTS', {\n 'REFRESH_INTERVAL_MILLI_SECONDS': window.getEnvConfig(\"CONSTANTS_REFRESH_INTERVAL\") || 60000,\n 'VERSION': window.getEnvConfig(\"RELEASE_VERSION\") || '0.4.1',\n 'NETWORK_ENVIRONMENT': window.getEnvConfig(\"NETWORK_ENVIRONMENT\"),\n});\n\nangular.module('peers').config(['RestangularProvider', 'peerConfig', '$stateProvider', '$urlRouterProvider',\n function (RestangularProvider, peerConfig, $stateProvider, $urlRouterProvider) {\n\n RestangularProvider.setBaseUrl(peerConfig.apiUrl);\n\n $stateProvider.state('peerExplorer.peers', {\n url: '^/peers',\n templateUrl: './peers/peers.html',\n controller: 'PeersCtrl'\n\n });\n\n }]);\n\nangular.module('peers').filter('searchTerm', ['$sce', function ($sce) {\n return function (val) {\n if (val) {\n return '' + val + '';\n } else {\n return '';\n }\n };\n}]);\n\nangular.module('peers').directive('compile', ['$compile', function ($compile) {\n return function (scope, element, attrs) {\n scope.$watch(\n function (scope) {\n // watch the 'compile' expression for changes\n return scope.$eval(attrs.compile);\n },\n function (value) {\n // when the 'compile' expression changes\n // assign it into the current DOM\n element.html(value);\n\n // compile the new DOM and link it to the current\n // scope.\n // NOTE: we only compile .childNodes so that\n // we don't get into infinite loop compiling ourselves\n $compile(element.contents())(scope);\n }\n );\n };\n}]);\n\n/******************************************************************************\n * Copyright © 2017 XIN Community *\n * *\n * See the DEVELOPER-AGREEMENT.txt and LICENSE.txt files at the top-level *\n * directory of this distribution for the individual copyright holder *\n * information and the developer policies on copyright and licensing. *\n * *\n * Unless otherwise agreed in a custom licensing agreement, no part of the *\n * XIN software, including this file, may be copied, modified, propagated, *\n * or distributed except according to the terms contained in the LICENSE.txt *\n * file. *\n * *\n * Removal or modification of this copyright notice is prohibited. *\n * *\n ******************************************************************************/\n\nangular.module('peers')\n .service('PeerService', ['Restangular', 'peerConfig', '$q', function (Restangular, peerConfig, $q) {\n this.getPeers = function (page, results) {\n var params = {\n 'page': page,\n 'results': results,\n 'filter': 'numberOfActivePeers',\n 'order': 'desc'\n };\n\n return Restangular.all(peerConfig.peerEndPoint).customGET('', params);\n };\n\n this.getStats = function () {\n return Restangular.all('api').one('getStats').customGET('', '');\n };\n\n }]);\n\n/******************************************************************************\n * Copyright © 2017 XIN Community *\n * *\n * See the DEVELOPER-AGREEMENT.txt and LICENSE.txt files at the top-level *\n * directory of this distribution for the individual copyright holder *\n * information and the developer policies on copyright and licensing. *\n * *\n * Unless otherwise agreed in a custom licensing agreement, no part of the *\n * XIN software, including this file, may be copied, modified, propagated, *\n * or distributed except according to the terms contained in the LICENSE.txt *\n * file. *\n * *\n * Removal or modification of this copyright notice is prohibited. *\n * *\n ******************************************************************************/\n\nangular.module('peers').controller('PeersCtrl',\n ['$scope', 'PeerService', 'DTOptionsBuilder', 'DTColumnBuilder', '$interval', '$uibModal', '$compile',\n function ($scope, PeerService, DTOptionsBuilder, DTColumnBuilder, $interval, $uibModal, $compile) {\n\n $scope.chartOptions = {\n chart: {\n type: 'discreteBarChart',\n height: 20,\n margin: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n },\n x: function (d) {\n return d.label;\n },\n y: function (d) {\n return d.value;\n },\n showValues: false,\n duration: 500,\n xAxis: {\n axisLabel: '',\n axisLabelDistance: 0,\n ticks: 0\n },\n yAxis: {\n axisLabel: '',\n axisLabelDistance: 0,\n ticks: 0\n },\n\n color: function () {\n return '#666';\n },\n\n\n },\n\n };\n\n $scope.dtOptions = DTOptionsBuilder.newOptions()\n .withPaginationType('numbers')\n .withDOM('frtip')\n .withDataProp('data')\n .withOption('responsive', true)\n .withOption('paging', true)\n .withOption('ordering', false)\n .withOption('info', false)\n .withOption('serverSide', true)\n .withDataProp('peers')\n .withOption('processing', true)\n .withOption('bFilter', false)\n .withOption('stateSave', true)\n .withOption('fnRowCallback',\n function (nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n $compile(nRow)($scope);\n })\n .withOption('ajax', function (data, callback, settings) {\n var pageNum = (data.start / data.length) + 1;\n var totalNumberOfNodes = 0;\n PeerService.getStats().then(function (success) {\n totalNumberOfNodes = success.totalNodes;\n PeerService.getPeers(pageNum, data.length).then(function (response) {\n var data = {'peers': response};\n callback({\n 'iTotalRecords': totalNumberOfNodes,\n 'iTotalDisplayRecords': totalNumberOfNodes,\n 'peers': data.peers\n });\n });\n }, function (error) {\n\n });\n })\n .withDisplayLength(10).withBootstrap()\n .withOption('rank', [1, 'desc'])\n .withOption('rowReordering', true);\n\n $scope.dtColumns = [\n DTColumnBuilder.newColumn('connected').withTitle('Connected').notSortable()\n .renderWith(function (data, type, row, meta) {\n return getConnectedUiModel(row.active) + '
' + formatDate(row.lastConnected, true) + '';\n }),\n\n DTColumnBuilder.newColumn('state').withTitle('State').notSortable()\n .renderWith(function (data, type, row, meta) {\n if (!row.peerState) {\n return \"n/a\";\n }\n\n if (row.peerState.isDownloading) {\n return iconToolTip('
', \"Node is syncing (not ready)\");\n } else if (row.peerState.isScanning) {\n return iconToolTip('
', \"Node is searching nodes (not ready)\");\n } else {\n return iconToolTip('
', \"Node is in sync (ready)\");\n }\n }\n ),\n\n DTColumnBuilder.newColumn('rank').withTitle('Rank').notSortable()\n .renderWith(function (data, type, row, meta) {\n if (!row.peerState) {\n return \"n/a\";\n }\n return (row.peerState.rank).toFixed(2);\n }),\n\n DTColumnBuilder.newColumn('_id').withTitle('IP').notSortable()\n .renderWith(function (data, type, row, meta) {\n if (!row.peerState) {\n return data;\n }\n\n return '' + data + '';\n }),\n\n DTColumnBuilder.newColumn('numberOfActivePeers').withTitle('Active Peers').notSortable()\n .renderWith(function (data, type, row, meta) {\n if (!row.peerState) {\n return \"n/a\";\n }\n\n return '' + row.peerState.numberOfActivePeers + '';\n }),\n\n DTColumnBuilder.newColumn('SystemLoadAverage').withTitle('CPU').notSortable()\n .renderWith(function (data, type, row, meta) {\n\n if (!row.peerState) {\n return \"n/a\";\n }\n\n var numCPU = parseInt(row.peerState.availableProcessors);\n var loadAvg = parseFloat(row.peerState.SystemLoadAverage);\n var loadPct = (loadAvg * 100 / (numCPU * 100) ) * 100;\n\n return (loadPct.toFixed(2) + ' %');\n\n }),\n\n DTColumnBuilder.newColumn('history_SystemLoadAverage').withTitle('CPU Load History').notSortable()\n .renderWith(function (data, type, row, meta) {\n\n if (!row.peerState) {\n return \"n/a\";\n }\n\n var tmpArr = [];\n\n var field = row.peerState.history_SystemLoadAverage;\n\n for (var i = 0; i < field.length - 30; i++) {\n\n var loadAvg = parseFloat(field[i]);\n var loadPct = (loadAvg * 100 / (1 * 100) ) * 100;\n\n tmpArr.push({label: i, value: loadPct});\n\n }\n\n var dd = [{values: []}];\n dd[0].values = tmpArr;\n\n return '';\n\n }),\n\n DTColumnBuilder.newColumn('lastBlockchainFeeder').withTitle('Last Feeder').notSortable()\n .renderWith(function (data, type, row, meta) {\n if (!row.peerState) {\n return \"n/a\";\n }\n\n return '' + row.peerState.lastBlockchainFeeder + '';\n }),\n\n DTColumnBuilder.newColumn('numberOfBlocks').withTitle('Height').notSortable()\n .renderWith(function (data, type, row, meta) {\n if (!row.peerState) {\n return \"n/a\";\n }\n\n return row.peerState.lastBlockchainFeederHeight;\n }),\n\n DTColumnBuilder.newColumn('version').withTitle('Version').notSortable()\n .renderWith(function (data, type, row, meta) {\n return row.version;\n }),\n\n DTColumnBuilder.newColumn('enableHallmarkProtection').withTitle('Marked').notSortable()\n .renderWith(function (data, type, row, meta) {\n\n const tick = row.peerState && row.peerState.enableHallmarkProtection\n return getTickMarkUiModel(tick, 'Hallmark Protected');\n }),\n\n DTColumnBuilder.newColumn('apiServerEnable').withTitle('API').notSortable()\n .renderWith(function (data, type, row, meta) {\n\n return getTickMarkUiModel(row.services.includes(\"API\"), 'API Enabled on Port ' + row.apiPort);\n }),\n\n DTColumnBuilder.newColumn('geoip').withTitle('Country').notSortable()\n .renderWith(function (data, type, row, meta) {\n if (row.geoip) {\n var toolTipText = row.geoip.countryName;\n return '';\n }\n return \"n/a\";\n }),\n\n\n ];\n\n function getTickMarkUiModel(value, toolTipText) {\n if (value === true) {\n return '';\n } else {\n return '';\n }\n }\n\n function getConnectedUiModel(value) {\n if (value) {\n return '';\n } else {\n return '
';\n }\n }\n\n function formatDate(d, withTime) {\n if (!d || typeof d === \"undefined\") {\n return \"n/a\";\n }\n if (typeof withTime === \"undefined\") {\n withTime = false;\n }\n\n var browserLocale = navigator.language || navigator.userLanguage || \"en-US\";\n\n var date = new Date(d);\n\n return date.toLocaleDateString(browserLocale) + (withTime ? \" \" + date.toLocaleTimeString(browserLocale) : \"\");\n }\n\n function iconToolTip(icon, toolTipText) {\n return''+icon+'';\n }\n\n $scope.dtInstanceCallback= function (_dtInstance) {\n $scope.dtInstance = _dtInstance;\n };\n $scope.reloadPeers = function () {\n if ($scope.dtInstance) {\n $scope.dtInstance._renderer.rerender();\n }\n };\n\n\n }]);\n\nangular.module('peers').controller('StatsCtrl',\n ['$scope', 'PeerService', 'DTOptionsBuilder', 'DTColumnBuilder', '$interval', '$uibModal', '$compile',\n function ($scope, PeerService, DTOptionsBuilder, DTColumnBuilder, $interval, $uibModal, $compile) {\n\n $scope.getStats = function () {\n PeerService.getStats().then(function (success) {\n\n $scope.stats = success;\n\n }, function (error) {\n\n });\n };\n }]);\n\n/******************************************************************************\n * Copyright © 2017 XIN Community *\n * *\n * See the DEVELOPER-AGREEMENT.txt and LICENSE.txt files at the top-level *\n * directory of this distribution for the individual copyright holder *\n * information and the developer policies on copyright and licensing. *\n * *\n * Unless otherwise agreed in a custom licensing agreement, no part of the *\n * XIN software, including this file, may be copied, modified, propagated, *\n * or distributed except according to the terms contained in the LICENSE.txt *\n * file. *\n * *\n * Removal or modification of this copyright notice is prohibited. *\n * *\n ******************************************************************************/\n\nangular.module('search',\n ['restangular', 'datatables', 'datatables.bootstrap', 'ui.bootstrap', 'ui.router','nvd3','ngSanitize']);\n\nangular.module('search').constant('searchConfig', {\n 'searchEndPoint': 'api/nodes',\n});\n\nangular.module('search').config(['RestangularProvider', 'searchConfig', '$stateProvider', '$urlRouterProvider', 'peerConfig',\n function (RestangularProvider, searchConfig, $stateProvider, $urlRouterProvider, peerConfig) {\n RestangularProvider.setBaseUrl(peerConfig.apiUrl);\n\n $stateProvider.state('peerExplorer.search', {\n url: '^/search',\n templateUrl: './search/search.html',\n controller: 'SearchCtrl'\n\n });\n }]);\n\nangular.module('search').filter('html', ['$sce', function ($sce) {\n return function (val) {\n return $sce.trustAsHtml(val);\n };\n}]);\n\n/******************************************************************************\n * Copyright © 2017 XIN Community *\n * *\n * See the DEVELOPER-AGREEMENT.txt and LICENSE.txt files at the top-level *\n * directory of this distribution for the individual copyright holder *\n * information and the developer policies on copyright and licensing. *\n * *\n * Unless otherwise agreed in a custom licensing agreement, no part of the *\n * XIN software, including this file, may be copied, modified, propagated, *\n * or distributed except according to the terms contained in the LICENSE.txt *\n * file. *\n * *\n * Removal or modification of this copyright notice is prohibited. *\n * *\n ******************************************************************************/\n\nangular.module('search').service('SearchService', ['Restangular', 'searchConfig', function (Restangular, searchConfig) {\n\n this.searchIp = function (ip) {\n var params = {\n 'ip': ip\n };\n return Restangular.all(searchConfig.searchEndPoint).customGET('', params);\n };\n\n}]);\n\n/******************************************************************************\n * Copyright © 2017 XIN Community *\n * *\n * See the DEVELOPER-AGREEMENT.txt and LICENSE.txt files at the top-level *\n * directory of this distribution for the individual copyright holder *\n * information and the developer policies on copyright and licensing. *\n * *\n * Unless otherwise agreed in a custom licensing agreement, no part of the *\n * XIN software, including this file, may be copied, modified, propagated, *\n * or distributed except according to the terms contained in the LICENSE.txt *\n * file. *\n * *\n * Removal or modification of this copyright notice is prohibited. *\n * *\n ******************************************************************************/\n\nangular.module('search').controller('SearchCtrl',\n ['$scope', 'SearchService', 'DTOptionsBuilder', 'DTColumnBuilder', '$interval', '$uibModal', '$compile',\n 'searchConfig', 'peerConfig',\n function ($scope, SearchService, DTOptionsBuilder, DTColumnBuilder, $interval, $uibModal, $compile,\n searchConfig, peerConfig) {\n\n $scope.showSearchBar = false;\n\n var errorHandler = function (errorMessage) {\n $uibModal.open({\n animation: true,\n templateUrl: 'search/search-error.html',\n size: 'sm',\n controller: 'ErrorSearchCtrl',\n\n resolve: {\n params: function () {\n return {\n message: errorMessage\n };\n }\n }\n });\n };\n\n function validateIPaddress(ipaddress) {\n if (/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(\n ipaddress)) {\n return true;\n }\n return (false);\n }\n\n $scope.search = function (searchTerm) {\n searchTerm = searchTerm||$scope.searchTerm;\n if (searchTerm) {\n if (validateIPaddress(searchTerm)) {\n SearchService.searchIp(searchTerm).then(function (response) {\n if (response._id) {\n $uibModal.open({\n animation: true,\n templateUrl: 'search/search-peer.html',\n size: 'lg',\n controller: 'SearchIpCtrl',\n windowClass: 'block-modal-window',\n resolve: {\n params: function () {\n return {\n node: response\n };\n }\n }\n });\n } else {\n errorHandler(searchTerm + ' ip doesn\\'t exists ');\n }\n });\n } else {\n errorHandler('Please enter valid ip address');\n }\n }\n\n };\n\n $scope.searchIP = function (searchTerm) {\n\n if (searchTerm) {\n if (validateIPaddress(searchTerm)) {\n SearchService.searchIp(searchTerm).then(function (response) {\n if (response._id) {\n $uibModal.open({\n animation: true,\n templateUrl: 'search/search-peer.html',\n size: 'lg',\n controller: 'SearchIpCtrl',\n windowClass: 'block-modal-window',\n resolve: {\n params: function () {\n return {\n node: response\n };\n }\n }\n });\n } else {\n errorHandler(searchTerm + ' ip doesn\\'t exists ');\n }\n }\n );\n } else {\n errorHandler('Please enter valid ip address');\n }\n }\n\n };\n\n }]);\n\nangular.module('search')\n .controller('SearchIpCtrl',\n ['$scope', 'DTOptionsBuilder', 'DTColumnBuilder', '$compile', '$uibModalInstance', '$q', 'params',\n function ($scope, DTOptionsBuilder, DTColumnBuilder, $compile, $uibModalInstance, $q, params) {\n\n $scope.chartOptions = {\n chart: {\n type: 'discreteBarChart',\n height: 100,\n margin : {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n },\n x: function(d){return d.label;},\n y: function(d){return d.value;},\n showValues: false,\n valueFormat: function(d){\n return d3.format(',.2f')(d);\n },\n duration: 500,\n xAxis: {\n axisLabel: '',\n ticks: 8\n },\n yAxis: {\n axisLabel: '',\n axisLabelDistance: 0,\n ticks: 8\n },\n\n color: function(){\n return '#9e9e9e';\n },\n\n\n },\n\n };\n\n function buildChartDataArray(data){\n var obj = {\n key: 'SystemLoad',\n values: []\n };\n\n for (var i = 0; i < data.length; i++) {\n obj.values.push( { label: i, value: data[i] } );\n }\n return [obj];\n }\n\n function buildChartSystemLoadAverage(data){\n var obj = {\n key: 'SystemLoad',\n values: []\n };\n\n for (var i = 0; i < data.length; i++) {\n\n var loadAvg = parseFloat( data[i] );\n var loadPct = (loadAvg * 100 / (1 * 100) ) * 100;\n obj.values.push( { label: i, value: loadPct } );\n\n }\n\n return [obj];\n\n }\n\n $scope.cancel = function () {\n $uibModalInstance.close();\n };\n\n $scope.showResult = function () {\n\n $scope.node = params.node;\n\n $scope.chartOptions = $scope.chartOptions;\n $scope.chartData1 = buildChartSystemLoadAverage( params.node.peerState.history_SystemLoadAverage );\n $scope.chartData2 = buildChartDataArray( params.node.peerState.history_freeMemory );\n $scope.chartData3 = buildChartDataArray( params.node.peerState.history_requestProcessingTime );\n $scope.chartData4 = buildChartDataArray( params.node.peerState.history_numberOfActivePeers );\n };\n\n\n }]);\n\nangular.module('search').controller('ErrorSearchCtrl', ['$scope', '$uibModalInstance', '$q', 'params',\n function ($scope, $uibModalInstance, $q, params) {\n $scope.cancel = function () {\n $uibModalInstance.close('cancel');\n };\n\n $scope.showResult = function () {\n $scope.message = params.message;\n };\n }]);\n\n/******************************************************************************\n * Copyright © 2017 XIN Community *\n * *\n * See the DEVELOPER-AGREEMENT.txt and LICENSE.txt files at the top-level *\n * directory of this distribution for the individual copyright holder *\n * information and the developer policies on copyright and licensing. *\n * *\n * Unless otherwise agreed in a custom licensing agreement, no part of the *\n * XIN software, including this file, may be copied, modified, propagated, *\n * or distributed except according to the terms contained in the LICENSE.txt *\n * file. *\n * *\n * Removal or modification of this copyright notice is prohibited. *\n * *\n ******************************************************************************/\n\nangular.module('peerExplorer', ['peers', 'search', 'ui.router']);\n\nangular.module('peerExplorer')\n .config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {\n angular.lowercase = function (text) {\n return text.toLowerCase(text);\n };\n\n $stateProvider.state('peerExplorer', {\n abstract: true,\n url: '/',\n template: '
',\n });\n\n $urlRouterProvider.otherwise('/peers');\n\n document.title = \"CPCoin - New Peer Explorer | \" + window.getEnvConfig(\"NETWORK_ENVIRONMENT\");\n }]);\n\nangular.module('peerExplorer').filter('isEnabled', ['$sce', function ($sce) {\n return function (val) {\n switch (val) {\n case true:\n return '';\n case false:\n return '';\n default:\n return '';\n }\n };\n}]);\n\nangular.module('peerExplorer').filter('isEnabledSmall', ['$sce', function ($sce) {\n return function (val) {\n switch (val) {\n case true:\n return '';\n case false:\n return '';\n default:\n return '';\n }\n };\n}]);\n\nangular.module('peerExplorer').run(['$rootScope', 'PEER_CONSTANTS', function ($rootScope, PEER_CONSTANTS) {\n $rootScope.options = PEER_CONSTANTS;\n}]);\n\nangular.module('peerExplorer').filter('gateways', ['$sce', function ($sce) {\n return function (toolTip, val) {\n switch (toolTip) {\n case 'TenderMint':\n\n if (val) {\n return ' TM ';\n } else {\n return ' TM ';\n }\n break;\n\n case 'ZeroNet':\n\n if (val) {\n return ' ZN ';\n } else {\n return ' ZN ';\n }\n break;\n case 'IPFS':\n\n if (val) {\n return ' IPFS ';\n } else {\n return ' IPFS ';\n }\n break;\n\n default:\n return ' ';\n }\n };\n}]);\n\nangular.module('peerExplorer').filter('proxies', ['$sce', function ($sce) {\n return function (toolTip, val) {\n\n switch (toolTip) {\n case 'BTC':\n\n if (val) {\n return ' BTC ';\n } else {\n return ' BTC ';\n }\n break;\n\n case 'ETH':\n\n if (val) {\n return ' ETH ';\n } else {\n return ' ETH ';\n }\n break;\n case 'LTC':\n\n if (val) {\n return ' LTC ';\n } else {\n return ' LTC ';\n }\n break;\n\n case 'XRP':\n\n if (val) {\n return ' XRP ';\n } else {\n return ' XRP ';\n }\n break;\n\n case 'MKT':\n\n if (val) {\n return ' MKT ';\n } else {\n return ' MKT ';\n }\n break;\n\n default:\n return ' ';\n }\n\n\n };\n}]);\n\nangular.module('peerExplorer').filter('storage', ['$sce', function ($sce) {\n return function (toolTip, val) {\n\n switch (toolTip) {\n case 'PostgreSQL':\n\n if (val) {\n return ' PS ';\n } else {\n return ' PS ';\n }\n break;\n\n case 'RethinkDB':\n\n if (val) {\n return ' RT ';\n } else {\n return ' RT ';\n }\n break;\n case 'MySQL':\n\n if (val) {\n return ' MY ';\n } else {\n return ' MY ';\n }\n break;\n\n case 'Mongodb':\n\n if (val) {\n return ' MO ';\n } else {\n return ' MO ';\n }\n break;\n\n\n default:\n return ' ';\n }\n\n\n };\n}]);\n\nangular.module('peerExplorer').filter('numericalString', ['$sce', function ($sce) {\n return function (val) {\n if (!val) {\n val = 0;\n }\n return val.toLocaleString('en-US', {minimumFractionDigits: 2});\n };\n}]);\n\nangular.module('peerExplorer').filter('bytesToMB', ['$sce', function ($sce) {\n return function (val) {\n if (!val) {\n val = 0;\n } else {\n val = Math.floor(val / 1024 / 1024);\n }\n return val + \" MB\";\n };\n}]);\n\n/******************************************************************************\n * Copyright © 2017 XIN Community *\n * *\n * See the DEVELOPER-AGREEMENT.txt and LICENSE.txt files at the top-level *\n * directory of this distribution for the individual copyright holder *\n * information and the developer policies on copyright and licensing. *\n * *\n * Unless otherwise agreed in a custom licensing agreement, no part of the *\n * XIN software, including this file, may be copied, modified, propagated, *\n * or distributed except according to the terms contained in the LICENSE.txt *\n * file. *\n * *\n * Removal or modification of this copyright notice is prohibited. *\n * *\n ******************************************************************************/\n\nangular.module('peerExplorer').controller('FooterController', ['PeerService', '$scope', '$rootScope','peerConfig',\n function (PeerService, $scope, $rootScope,peerConfig) {\n\n $scope.init = function () {\n PeerService.getPeers(1,2).then(function (success) {\n\n $scope.topNode=success[0]||{};\n });\n $scope.connectedURL=peerConfig.apiUrl;\n };\n\n }]);\n"],"names":["angular","module","constant","apiUrl","window","getEnvConfig","peerEndPoint","REFRESH_INTERVAL_MILLI_SECONDS","VERSION","NETWORK_ENVIRONMENT","config","RestangularProvider","peerConfig","$stateProvider","$urlRouterProvider","setBaseUrl","state","url","templateUrl","controller","filter","$sce","val","directive","$compile","scope","element","attrs","$watch","$eval","compile","value","html","contents","service","Restangular","$q","this","getPeers","page","results","params","order","all","customGET","getStats","one","$scope","PeerService","DTOptionsBuilder","DTColumnBuilder","$interval","$uibModal","getTickMarkUiModel","toolTipText","iconToolTip","icon","chartOptions","chart","type","height","margin","top","right","bottom","left","x","d","label","y","showValues","duration","xAxis","axisLabel","axisLabelDistance","ticks","yAxis","color","dtOptions","newOptions","withPaginationType","withDOM","withDataProp","withOption","nRow","aData","iDisplayIndex","iDisplayIndexFull","data","callback","settings","totalNumberOfNodes","pageNum","start","length","then","success","totalNodes","response","iTotalRecords","iTotalDisplayRecords","peers","error","withDisplayLength","withBootstrap","dtColumns","newColumn","withTitle","notSortable","renderWith","row","meta","active","withTime","browserLocale","navigator","language","userLanguage","date","Date","toLocaleDateString","toLocaleTimeString","lastConnected","peerState","isDownloading","isScanning","toFixed","_id","numberOfPeers","numberOfActivePeers","numCPU","parseInt","availableProcessors","parseFloat","SystemLoadAverage","tmpArr","field","history_SystemLoadAverage","i","loadAvg","push","dd","values","JSON","stringify","lastBlockchainFeeder","lastBlockchainFeederHeight","version","enableHallmarkProtection","services","includes","apiPort","geoip","countryName","country","toLowerCase","dtInstanceCallback","_dtInstance","dtInstance","reloadPeers","_renderer","rerender","stats","searchEndPoint","searchConfig","trustAsHtml","searchIp","ip","SearchService","showSearchBar","errorHandler","errorMessage","open","animation","size","resolve","message","validateIPaddress","ipaddress","test","search","searchTerm","windowClass","node","searchIP","$uibModalInstance","buildChartDataArray","obj","key","valueFormat","d3","format","cancel","close","showResult","chartData1","chartData2","history_freeMemory","chartData3","history_requestProcessingTime","chartData4","history_numberOfActivePeers","lowercase","text","abstract","template","otherwise","document","title","run","$rootScope","PEER_CONSTANTS","options","toolTip","toLocaleString","minimumFractionDigits","Math","floor","init","topNode","connectedURL"],"mappings":"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"}