Compare commits
113 Commits
production
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5d768d868a | ||
|
|
3435f825d9 | ||
|
|
51cc30532d | ||
|
|
19c60d111d | ||
|
|
e4775417fc | ||
|
|
c3ca8643ec | ||
|
|
6e3f51fdbd | ||
|
|
7ec226faa2 | ||
|
|
52caae1d59 | ||
|
|
895ba45aec | ||
|
|
c615bb44b2 | ||
|
|
9325a1c103 | ||
|
|
e456052358 | ||
|
|
b00f80b967 | ||
|
|
6c7776904a | ||
|
|
5c070d0e65 | ||
|
|
0c40d113b4 | ||
|
|
be1788b4e3 | ||
|
|
8668e6abb0 | ||
|
|
19e5755ef7 | ||
|
|
bc8dc2e375 | ||
|
|
e83a99ae96 | ||
|
|
c7aa861a3b | ||
|
|
4eba927ded | ||
|
|
beb386535f | ||
|
|
686d775011 | ||
|
|
d5db7a9676 | ||
|
|
f098c4d35d | ||
|
|
135f9dd617 | ||
|
|
b5b7f9af2f | ||
|
|
c319197e64 | ||
|
|
ef3a02540b | ||
|
|
ee303492e3 | ||
|
|
c825504826 | ||
|
|
aef5a88dd2 | ||
|
|
51d3566203 | ||
|
|
24426b7337 | ||
|
|
f41fb29e26 | ||
|
|
271bc416fc | ||
|
|
46821f0c15 | ||
|
|
e13e24d3df | ||
|
|
9559af90ad | ||
|
|
1e431f9140 | ||
|
|
d5d6191dfb | ||
|
|
0852a26312 | ||
|
|
e87ad01707 | ||
|
|
efb275ba99 | ||
|
|
bc49b1ded5 | ||
|
|
55e6427d57 | ||
|
|
96b44e29b5 | ||
|
|
d4bb931f37 | ||
|
|
59c4bf2765 | ||
|
|
8251807292 | ||
|
|
f34006e513 | ||
|
|
3ff0341ad5 | ||
|
|
a69ef92e31 | ||
|
|
81155eb292 | ||
|
|
9c00ac8bc4 | ||
|
|
65f88ef14a | ||
|
|
c52682bb70 | ||
|
|
2cc88a2a15 | ||
|
|
fbc38a731c | ||
|
|
9195c90b74 | ||
|
|
2010f73d81 | ||
|
|
ba31444df5 | ||
|
|
a0ba1efeb8 | ||
|
|
37177c412c | ||
|
|
4931504c1e | ||
|
|
6cbca55bb1 | ||
|
|
7155ff0b91 | ||
|
|
e94154ba4b | ||
|
|
340decd978 | ||
|
|
cc7c6f81d4 | ||
|
|
d0a8b123d2 | ||
|
|
d8fea29125 | ||
|
|
795b5182fc | ||
|
|
62e1225dd3 | ||
|
|
ddcd05cbc2 | ||
|
|
df19530235 | ||
|
|
d7c161d7b6 | ||
|
|
ffed19b8b3 | ||
|
|
0a06f9aba9 | ||
|
|
f50abae460 | ||
|
|
3532cd25a1 | ||
|
|
923c596b74 | ||
|
|
f002131366 | ||
|
|
3ff860c483 | ||
|
|
e3ef214b21 | ||
|
|
653fd60a24 | ||
|
|
d16892d7af | ||
|
|
2e013122db | ||
|
|
840fd0db21 | ||
|
|
7c5a79c80a | ||
|
|
7d68b0cc82 | ||
|
|
e006e5cbcd | ||
|
|
7ec3124d82 | ||
|
|
c45a0edd60 | ||
|
|
933c378a8d | ||
|
|
accff4e43c | ||
|
|
fb43ff70d4 | ||
|
|
19974a7d3d | ||
|
|
4684224a53 | ||
|
|
b5251849a0 | ||
|
|
2105492ff9 | ||
|
|
e45396435b | ||
|
|
fc15f2982f | ||
|
|
af08592d01 | ||
|
|
dd3d590a44 | ||
|
|
e4eb09f87f | ||
|
|
36f5c75880 | ||
|
|
a9828d8539 | ||
|
|
1d70f0196c | ||
|
|
4253de1ed4 |
1
.gitignore
vendored
1
.gitignore
vendored
@ -47,3 +47,4 @@ public/css/main.css
|
|||||||
README.html
|
README.html
|
||||||
po/*
|
po/*
|
||||||
!po/*.po
|
!po/*.po
|
||||||
|
*.codekit3
|
||||||
|
|||||||
5
.travis.yml
Normal file
5
.travis.yml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
language: node_js
|
||||||
|
node_js:
|
||||||
|
- 'v8'
|
||||||
|
install:
|
||||||
|
- npm install
|
||||||
25
Gruntfile.js
25
Gruntfile.js
@ -1,5 +1,7 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
// var config = require('flosight-config.json');
|
||||||
|
|
||||||
module.exports = function(grunt) {
|
module.exports = function(grunt) {
|
||||||
|
|
||||||
//Load NPM tasks
|
//Load NPM tasks
|
||||||
@ -10,10 +12,27 @@ module.exports = function(grunt) {
|
|||||||
grunt.loadNpmTasks('grunt-markdown');
|
grunt.loadNpmTasks('grunt-markdown');
|
||||||
grunt.loadNpmTasks('grunt-macreload');
|
grunt.loadNpmTasks('grunt-macreload');
|
||||||
grunt.loadNpmTasks('grunt-angular-gettext');
|
grunt.loadNpmTasks('grunt-angular-gettext');
|
||||||
|
grunt.loadNpmTasks('grunt-replace');
|
||||||
|
|
||||||
// Project Configuration
|
// Project Configuration
|
||||||
grunt.initConfig({
|
grunt.initConfig({
|
||||||
pkg: grunt.file.readJSON('package.json'),
|
pkg: grunt.file.readJSON('package.json'),
|
||||||
|
replace: {
|
||||||
|
dist: {
|
||||||
|
options: {
|
||||||
|
patterns: [
|
||||||
|
{
|
||||||
|
match: 'INSIGHT_API_PREFIX',
|
||||||
|
replacement: '<%= pkg.flosightConfig.apiPrefix %>'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
usePrefix: false
|
||||||
|
},
|
||||||
|
files: [
|
||||||
|
{src: ['public/src/templates/api.js'], dest: 'public/src/js/services/api.js'}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
concat: {
|
concat: {
|
||||||
options: {
|
options: {
|
||||||
process: function(src, filepath) {
|
process: function(src, filepath) {
|
||||||
@ -104,7 +123,7 @@ module.exports = function(grunt) {
|
|||||||
nggettext_compile: {
|
nggettext_compile: {
|
||||||
all: {
|
all: {
|
||||||
options: {
|
options: {
|
||||||
module: 'insight'
|
module: 'flosight'
|
||||||
},
|
},
|
||||||
files: {
|
files: {
|
||||||
'public/src/js/translations.js': ['po/*.po']
|
'public/src/js/translations.js': ['po/*.po']
|
||||||
@ -117,13 +136,13 @@ module.exports = function(grunt) {
|
|||||||
grunt.option('force', true);
|
grunt.option('force', true);
|
||||||
|
|
||||||
//Default task(s).
|
//Default task(s).
|
||||||
grunt.registerTask('default', ['watch']);
|
grunt.registerTask('default', ['replace', 'watch']);
|
||||||
|
|
||||||
//Update .pot file
|
//Update .pot file
|
||||||
grunt.registerTask('translate', ['nggettext_extract']);
|
grunt.registerTask('translate', ['nggettext_extract']);
|
||||||
|
|
||||||
//Compile task (concat + minify)
|
//Compile task (concat + minify)
|
||||||
grunt.registerTask('compile', ['nggettext_compile', 'concat', 'uglify', 'cssmin']);
|
grunt.registerTask('compile', ['replace', 'nggettext_compile', 'concat', 'uglify', 'cssmin']);
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
122
README.md
122
README.md
@ -1,110 +1,69 @@
|
|||||||
# *insight*
|
# Flosight UI
|
||||||
|
|
||||||
*insight* is an open-source bitcoin blockchain explorer with complete REST
|
A Florincoin blockchain explorer web application service for [Flocore Node](https://github.com/bitpay/flocore-node) using the [Flosight API](https://github.com/bitpay/flosight-api).
|
||||||
and websocket APIs. Insight runs in NodeJS, uses AngularJS for the
|
|
||||||
front-end and LevelDB for storage.
|
|
||||||
|
|
||||||
Check some screenshots and more details at [insight's project homepage](http://insight.is/).
|
## Quick Start
|
||||||
|
|
||||||
*Insight* project is now split into two repositories. One for the [API](https://github.com/bitpay/insight-api) and for the front-end. This repository is for the front-end, which will install the API as a NPM dependency.
|
Please see the guide at [https://flocore.io/guides/full-node](https://flocore.io/guides/full-node) for information about getting a block explorer running. This is only the front-end component of the block explorer, and is packaged together with all of the necessary components in [Flocore](https://github.com/bitpay/flocore).
|
||||||
|
|
||||||
## Prerequisites
|
## Getting Started
|
||||||
|
|
||||||
* **Node.js v0.10.x** - Download and Install [Node.js](http://www.nodejs.org/download/).
|
To manually install all of the necessary components, you can run these commands:
|
||||||
|
|
||||||
* **NPM** - Node.js package manager, should be automatically installed when you get node.js.
|
```bash
|
||||||
|
npm install -g flocore-node
|
||||||
## Quick Install
|
flocore-node create mynode
|
||||||
Check the Prerequisites section above before installing.
|
cd mynode
|
||||||
|
flocore-node install flosight-api
|
||||||
To install Insight, clone the main repository:
|
flocore-node install flosight-ui
|
||||||
|
flocore-node start
|
||||||
$ git clone https://github.com/bitpay/insight.git && cd insight
|
```
|
||||||
|
|
||||||
Install dependencies:
|
|
||||||
|
|
||||||
$ npm install
|
|
||||||
|
|
||||||
Run the main application:
|
|
||||||
|
|
||||||
$ npm start
|
|
||||||
|
|
||||||
Then open a browser and go to:
|
|
||||||
|
|
||||||
http://localhost:3001
|
|
||||||
|
|
||||||
If *insight* reports problems connecting to **bitcoind** please check the CONFIGURATION section of
|
|
||||||
[insight-api README](https://github.com/bitpay/insight-api/blob/master/README.md). To set the
|
|
||||||
environment variables run something like:
|
|
||||||
|
|
||||||
$ INSIGHT_NETWORK=livenet BITCOIND_USER=user BITCOIND_PASS=pass INSIGHT_PUBLIC_PATH=public npm start
|
|
||||||
|
|
||||||
|
|
||||||
Please note that the app will need to sync its internal database
|
|
||||||
with the blockchain state, which may take some time. You can check
|
|
||||||
sync progress from within the web interface. More details about that process
|
|
||||||
on [insight-api README](https://github.com/bitpay/insight-api/blob/master/README.md).
|
|
||||||
|
|
||||||
|
|
||||||
## Nginx Setup
|
|
||||||
|
|
||||||
To use Nginx as a reverse proxy for Insight, use the following base [configuration](https://gist.github.com/matiu/bdd5e55ff0ad90b54261)
|
|
||||||
|
|
||||||
|
Open a web browser to `http://localhost:3001/flosight/`
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
To run insight locally for development mode:
|
To build Flosight UI locally:
|
||||||
|
|
||||||
Install bower dependencies:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
$ bower install
|
$ npm run build
|
||||||
```
|
```
|
||||||
|
|
||||||
To compile and minify the web application's assets:
|
A watch task is also available:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ grunt compile
|
$ npm run watch
|
||||||
```
|
```
|
||||||
|
|
||||||
There is a convinent Gruntfile.js for automation during editing the code
|
## Changing routePrefix and apiPrefix
|
||||||
|
|
||||||
```
|
By default, the `flosightConfig` in `package.json` is:
|
||||||
$ grunt
|
|
||||||
|
```json
|
||||||
|
"flosightConfig": {
|
||||||
|
"apiPrefix": "flosight-api",
|
||||||
|
"routePrefix": "flosight"
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
To change these routes, first make your changes to `package.json`, for example:
|
||||||
|
|
||||||
In case you are developing *insight* and *insight-api* toghether, you can do the following:
|
```json
|
||||||
|
"flosightConfig": {
|
||||||
* Install insight and insight-api on the same path ($IROOT)
|
"apiPrefix": "api",
|
||||||
|
"routePrefix": ""
|
||||||
```
|
}
|
||||||
$ cd $IROOT/insight
|
|
||||||
$ grunt
|
|
||||||
```
|
```
|
||||||
|
|
||||||
in other terminal:
|
Then rebuild the `flosight-ui` service:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ cd $IROOT/insight-api
|
$ npm run build
|
||||||
$ ln -s ../insight/public
|
|
||||||
$ INSIGHT_PUBLIC_PATH=public node insight.js
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
```
|
|
||||||
INSIGHT_PUBLIC_PATH=insight/public grunt
|
|
||||||
```
|
|
||||||
|
|
||||||
at insight-api's home path (edit the path according your setup).
|
|
||||||
|
|
||||||
**also** in the insight-api path. (So you will have two grunt processes running, one for insight and one for insight-api).
|
|
||||||
|
|
||||||
|
|
||||||
## Multilanguage support
|
## Multilanguage support
|
||||||
|
|
||||||
insight use [angular-gettext](http://angular-gettext.rocketeer.be) for
|
Flosight UI uses [angular-gettext](http://angular-gettext.rocketeer.be) for multilanguage support.
|
||||||
multilanguage support.
|
|
||||||
|
|
||||||
To enable a text to be translated, add the ***translate*** directive to html tags. See more details [here](http://angular-gettext.rocketeer.be/dev-guide/annotate/). Then, run:
|
To enable a text to be translated, add the ***translate*** directive to html tags. See more details [here](http://angular-gettext.rocketeer.be/dev-guide/annotate/). Then, run:
|
||||||
|
|
||||||
@ -112,12 +71,11 @@ To enable a text to be translated, add the ***translate*** directive to html tag
|
|||||||
grunt compile
|
grunt compile
|
||||||
```
|
```
|
||||||
|
|
||||||
This action will create a template.pot file in ***po/*** folder. You can open
|
This action will create a template.pot file in ***po/*** folder. You can open it with some PO editor ([Poedit](http://poedit.net)). Read this [guide](http://angular-gettext.rocketeer.be/dev-guide/translate/) to learn how to edit/update/import PO files from a generated POT file. PO file will be generated inside po/ folder.
|
||||||
it with some PO editor ([Poedit](http://poedit.net)). Read this [guide](http://angular-gettext.rocketeer.be/dev-guide/translate/) to learn how to edit/update/import PO files from a generated POT file. PO file will be generated inside po/ folder.
|
|
||||||
|
|
||||||
If you make new changes, simply run **grunt compile** again to generate a new .pot template and the angular javascript ***js/translations.js***. Then (if use Poedit), open .po file and choose ***update from POT File*** from **Catalog** menu.
|
If you make new changes, simply run **grunt compile** again to generate a new .pot template and the angular javascript ***js/translations.js***. Then (if use Poedit), open .po file and choose ***update from POT File*** from **Catalog** menu.
|
||||||
|
|
||||||
Finally changes your default language from ***public/src/js/config***
|
Finally changes your default language from ***public/src/js/config***
|
||||||
|
|
||||||
```
|
```
|
||||||
gettextCatalog.currentLanguage = 'es';
|
gettextCatalog.currentLanguage = 'es';
|
||||||
@ -130,11 +88,11 @@ compile***.
|
|||||||
|
|
||||||
## Note
|
## Note
|
||||||
|
|
||||||
For more details about the *insight API* configs and end-point, just go to [insight API github repository](https://github.com/bitpay/insight-api) or read the [documentation](https://github.com/bitpay/insight-api/blob/master/README.md)
|
For more details about the [Flosight API](https://github.com/bitpay/flosight-api) configuration and end-points, go to [Flosight API GitHub repository](https://github.com/bitpay/flosight-api).
|
||||||
|
|
||||||
## Contribute
|
## Contribute
|
||||||
|
|
||||||
Contributions and suggestions are welcomed at [insight github repository](https://github.com/bitpay/insight).
|
Contributions and suggestions are welcomed at the [Flosight UI GitHub repository](https://github.com/bitpay/flosight-ui).
|
||||||
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "Insight",
|
"name": "Flosight",
|
||||||
"version": "0.0.1",
|
"version": "5.0.0-beta.1",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"angular": "~1.2.13",
|
"angular": "~1.2.13",
|
||||||
"angular-resource": "~1.2.13",
|
"angular-resource": "~1.2.13",
|
||||||
|
|||||||
61
flocore-node/index.js
Normal file
61
flocore-node/index.js
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var BaseService = require('./service');
|
||||||
|
var inherits = require('util').inherits;
|
||||||
|
var fs = require('fs');
|
||||||
|
var exec = require('child_process').exec;
|
||||||
|
var pkg = require('../package.json');
|
||||||
|
|
||||||
|
var FlosightUI = function(options) {
|
||||||
|
BaseService.call(this, options);
|
||||||
|
this.apiPrefix = options.apiPrefix || 'api';
|
||||||
|
this.routePrefix = options.routePrefix || '';
|
||||||
|
};
|
||||||
|
|
||||||
|
FlosightUI.dependencies = ['flosight-api'];
|
||||||
|
|
||||||
|
inherits(FlosightUI, BaseService);
|
||||||
|
|
||||||
|
FlosightUI.prototype.start = function(callback) {
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
pkg.flosightConfig.apiPrefix = self.apiPrefix;
|
||||||
|
pkg.flosightConfig.routePrefix = self.routePrefix;
|
||||||
|
|
||||||
|
// fs.writeFileSync(__dirname + '/../package.json', JSON.stringify(pkg, null, 2));
|
||||||
|
// exec('cd ' + __dirname + '/../;' +
|
||||||
|
// ' npm run install-and-build', function(err) {
|
||||||
|
// if (err) {
|
||||||
|
// return callback(err);
|
||||||
|
// }
|
||||||
|
// self.indexFile = self.filterIndexHTML(fs.readFileSync(__dirname + '/../public/index-template.html', {encoding: 'utf8'}));
|
||||||
|
// callback();
|
||||||
|
// });
|
||||||
|
self.indexFile = self.filterIndexHTML(fs.readFileSync(__dirname + '/../public/index-template.html', {encoding: 'utf8'}));
|
||||||
|
callback();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
FlosightUI.prototype.getRoutePrefix = function() {
|
||||||
|
return this.routePrefix;
|
||||||
|
};
|
||||||
|
|
||||||
|
FlosightUI.prototype.setupRoutes = function(app, express) {
|
||||||
|
var self = this;
|
||||||
|
app.use(express.static(__dirname + '/../public'));
|
||||||
|
// if not in found, fall back to indexFile (404 is handled client-side)
|
||||||
|
app.use(function(req, res) {
|
||||||
|
res.setHeader('Content-Type', 'text/html');
|
||||||
|
res.send(self.indexFile);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
FlosightUI.prototype.filterIndexHTML = function(data) {
|
||||||
|
var transformed = data;
|
||||||
|
if (this.routePrefix !== '') {
|
||||||
|
transformed = transformed.replace('<base href="/"', '<base href="/' + this.routePrefix + '/"');
|
||||||
|
}
|
||||||
|
return transformed;
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = FlosightUI;
|
||||||
91
flocore-node/service.js
Normal file
91
flocore-node/service.js
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var util = require('util');
|
||||||
|
var EventEmitter = require('events').EventEmitter;
|
||||||
|
|
||||||
|
var Service = function(options) {
|
||||||
|
EventEmitter.call(this);
|
||||||
|
|
||||||
|
this.node = options.node;
|
||||||
|
this.name = options.name;
|
||||||
|
};
|
||||||
|
|
||||||
|
util.inherits(Service, EventEmitter);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes the dependencies that should be loaded before this service.
|
||||||
|
*/
|
||||||
|
Service.dependencies = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* blockHandler
|
||||||
|
* @param {Block} block - the block being added or removed from the chain
|
||||||
|
* @param {Boolean} add - whether the block is being added or removed
|
||||||
|
* @param {Function} callback - call with the leveldb database operations to perform
|
||||||
|
*/
|
||||||
|
Service.prototype.blockHandler = function(block, add, callback) {
|
||||||
|
// implement in the child class
|
||||||
|
setImmediate(function() {
|
||||||
|
callback(null, []);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the bus events available for subscription
|
||||||
|
* @return {Array} an array of event info
|
||||||
|
*/
|
||||||
|
Service.prototype.getPublishEvents = function() {
|
||||||
|
// Example:
|
||||||
|
// return [
|
||||||
|
// ['eventname', this, this.subscribeEvent, this.unsubscribeEvent],
|
||||||
|
// ];
|
||||||
|
return [];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the API methods to expose
|
||||||
|
* @return {Array} return array of methods
|
||||||
|
*/
|
||||||
|
Service.prototype.getAPIMethods = function() {
|
||||||
|
// Example:
|
||||||
|
// return [
|
||||||
|
// ['getData', this, this.getData, 1]
|
||||||
|
// ];
|
||||||
|
|
||||||
|
return [];
|
||||||
|
};
|
||||||
|
|
||||||
|
// Example:
|
||||||
|
// Service.prototype.getData = function(arg1, callback) {
|
||||||
|
//
|
||||||
|
// };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function which is called when module is first initialized
|
||||||
|
*/
|
||||||
|
Service.prototype.start = function(done) {
|
||||||
|
setImmediate(done);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to be called when flocore-node is stopped
|
||||||
|
*/
|
||||||
|
Service.prototype.stop = function(done) {
|
||||||
|
setImmediate(done);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setup express routes
|
||||||
|
* @param {Express} app
|
||||||
|
*/
|
||||||
|
Service.prototype.setupRoutes = function(app) {
|
||||||
|
// Setup express routes here
|
||||||
|
};
|
||||||
|
|
||||||
|
Service.prototype.getRoutePrefix = function() {
|
||||||
|
return this.name;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = Service;
|
||||||
1499
package-lock.json
generated
Normal file
1499
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
65
package.json
65
package.json
@ -1,60 +1,47 @@
|
|||||||
{
|
{
|
||||||
"name": "insight-bitcore",
|
"name": "flosight-ui",
|
||||||
"description": "An open-source frontend for the Insight API. The Insight API provides you with a convenient, powerful and simple way to query and broadcast data on the bitcoin network and build your own services with it.",
|
"description": "An open-source frontend for the Flosight API. The Flosight API provides you with a convenient, powerful and simple way to query and broadcast data on the florincoin network and build your own services with it.",
|
||||||
"version": "0.2.7",
|
"version": "5.0.0-beta.72",
|
||||||
"repository": "git://github.com/bitpay/insight.git",
|
"repository": "git://github.com/bitpay/flosight-ui.git",
|
||||||
"contributors": [
|
|
||||||
{
|
|
||||||
"name": "Matias Alejo Garcia",
|
|
||||||
"email": "ematiu@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Manuel Araoz",
|
|
||||||
"email": "manuelaraoz@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Mario Colque",
|
|
||||||
"email": "colquemario@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Gustavo Cortez",
|
|
||||||
"email": "cmgustavo83@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Juan Ignacio Sosa Lopez",
|
|
||||||
"email": "bechilandia@gmail.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/bitpay/insight/issues"
|
"url": "https://github.com/bitpay/flosight-ui/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/bitpay/insight",
|
"homepage": "https://github.com/bitpay/flosight-ui",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"insight",
|
"flosight",
|
||||||
"blockchain",
|
"blockchain",
|
||||||
"blockexplorer",
|
"blockexplorer",
|
||||||
"bitcoin",
|
"florincoin",
|
||||||
"bitcore",
|
"flocore",
|
||||||
"front-end"
|
"front-end"
|
||||||
],
|
],
|
||||||
|
"flocoreNode": "flocore-node",
|
||||||
|
"flosightConfig": {
|
||||||
|
"apiPrefix": "api",
|
||||||
|
"routePrefix": ""
|
||||||
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "INSIGHT_PUBLIC_PATH=public node node_modules/.bin/insight-bitcore-api"
|
"build": "bower install && grunt compile",
|
||||||
},
|
"prepublishOnly": "npm run build",
|
||||||
"dependencies": {
|
"watch": "grunt",
|
||||||
"insight-bitcore-api": ">=0.2.14"
|
"install-and-build": "npm install && npm run build",
|
||||||
|
"test": "mocha test"
|
||||||
},
|
},
|
||||||
|
"dependencies": {},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"bower": "~1.2.8",
|
"mocha": "^2.4.5",
|
||||||
|
"bower": "~1.8.0",
|
||||||
"grunt": "~0.4.2",
|
"grunt": "~0.4.2",
|
||||||
|
"grunt-angular-gettext": "^0.2.15",
|
||||||
"grunt-cli": "~0.1.11",
|
"grunt-cli": "~0.1.11",
|
||||||
"grunt-contrib-jshint": "~0.8.0",
|
|
||||||
"grunt-contrib-concat": "~0.3.0",
|
"grunt-contrib-concat": "~0.3.0",
|
||||||
|
"grunt-contrib-jshint": "~0.8.0",
|
||||||
"grunt-contrib-uglify": "~0.3.2",
|
"grunt-contrib-uglify": "~0.3.2",
|
||||||
"grunt-contrib-watch": "*",
|
"grunt-contrib-watch": "*",
|
||||||
"grunt-macreload": "*",
|
|
||||||
"grunt-css": "~0.5.4",
|
"grunt-css": "~0.5.4",
|
||||||
|
"grunt-macreload": "*",
|
||||||
"grunt-markdown": "~0.5.0",
|
"grunt-markdown": "~0.5.0",
|
||||||
"grunt-angular-gettext": "^0.2.15"
|
"grunt-replace": "^1.0.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
52
po/de_DE.po
52
po/de_DE.po
@ -1,6 +1,6 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Insight\n"
|
"Project-Id-Version: Flosight\n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: \n"
|
"PO-Revision-Date: \n"
|
||||||
"Last-Translator: Sascha Dückers <s.dueckers@gmail.com>\n"
|
"Last-Translator: Sascha Dückers <s.dueckers@gmail.com>\n"
|
||||||
@ -22,35 +22,35 @@ msgstr "404 Seite nicht gefunden :("
|
|||||||
|
|
||||||
#: public/views/index.html
|
#: public/views/index.html
|
||||||
msgid ""
|
msgid ""
|
||||||
"<strong>insight</strong> is an <a href=\"http://live.insight.is/\" target="
|
"<strong>flosight</strong> is an <a href=\"http://flocha.in/\" target="
|
||||||
"\"_blank\">open-source Bitcoin blockchain explorer</a> with complete REST "
|
"\"_blank\">open-source Flo blockchain explorer</a> with complete REST "
|
||||||
"and websocket APIs that can be used for writing web wallets and other apps "
|
"and websocket APIs that can be used for writing web wallets and other apps "
|
||||||
"that need more advanced blockchain queries than provided by bitcoind RPC. "
|
"that need more advanced blockchain queries than provided by Flod RPC. "
|
||||||
"Check out the <a href=\"http://github.com/bitpay/insight\" target=\"_blank"
|
"Check out the <a href=\"https://github.com/oipwg/flosight-ui\" target=\"_blank"
|
||||||
"\">source code</a>."
|
"\">source code</a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<strong>insight</strong> ist ein <a href=\"http://live.insight.is/\" target="
|
"<strong>flosight</strong> ist ein <a href=\"http://flocha.in/\" target="
|
||||||
"\"_blank\">Open Source Bitcoin Blockchain Explorer</a> mit vollständigen "
|
"\"_blank\">Open Source Flo Blockchain Explorer</a> mit vollständigen "
|
||||||
"REST und Websocket APIs um eigene Wallets oder Applikationen zu "
|
"REST und Websocket APIs um eigene Wallets oder Applikationen zu "
|
||||||
"implementieren. Hierbei werden fortschrittlichere Abfragen der Blockchain "
|
"implementieren. Hierbei werden fortschrittlichere Abfragen der Blockchain "
|
||||||
"ermöglicht, bei denen die RPC des Bitcoind nicht mehr ausreichen. Der "
|
"ermöglicht, bei denen die RPC des Flod nicht mehr ausreichen. Der "
|
||||||
"aktuelle <a href=\"http://github.com/bitpay/insight\" target=\"_blank"
|
"aktuelle <a href=\"https://github.com/oipwg/flosight-ui\" target=\"_blank"
|
||||||
"\">Quellcode</a> ist auf Github zu finden."
|
"\">Quellcode</a> ist auf Github zu finden."
|
||||||
|
|
||||||
#: public/views/index.html
|
#: public/views/index.html
|
||||||
msgid ""
|
msgid ""
|
||||||
"<strong>insight</strong> is still in development, so be sure to report any "
|
"<strong>flosight</strong> is still in development, so be sure to report any "
|
||||||
"bugs and provide feedback for improvement at our <a href=\"https://github."
|
"bugs and provide feedback for improvement at our <a href=\"https://github."
|
||||||
"com/bitpay/insight/issues\" target=\"_blank\">github issue tracker</a>."
|
"com/oipwg/flosight-ui/issues\" target=\"_blank\">github issue tracker</a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<strong>insight</strong> befindet sich aktuell noch in der Entwicklung. "
|
"<strong>flosight</strong> befindet sich aktuell noch in der Entwicklung. "
|
||||||
"Bitte sende alle gefundenen Fehler (Bugs) und Feedback zur weiteren "
|
"Bitte sende alle gefundenen Fehler (Bugs) und Feedback zur weiteren "
|
||||||
"Verbesserung an unseren <a href=\"https://github.com/bitpay/insight/issues"
|
"Verbesserung an unseren <a href=\"https://github.com/oipwg/flosight-ui/issues"
|
||||||
"\" target=\"_blank\">Github Issue Tracker</a>."
|
"\" target=\"_blank\">Github Issue Tracker</a>."
|
||||||
|
|
||||||
#: public/views/index.html
|
#: public/views/index.html
|
||||||
msgid "About"
|
msgid "About"
|
||||||
msgstr "Über insight"
|
msgstr "Über flosight"
|
||||||
|
|
||||||
#: public/views/address.html
|
#: public/views/address.html
|
||||||
msgid "Address"
|
msgid "Address"
|
||||||
@ -69,8 +69,8 @@ msgid "Best Block"
|
|||||||
msgstr "Bester Block"
|
msgstr "Bester Block"
|
||||||
|
|
||||||
#: public/views/status.html
|
#: public/views/status.html
|
||||||
msgid "Bitcoin node information"
|
msgid "Flo node information"
|
||||||
msgstr "Bitcoin-Node Info"
|
msgstr "Flo-Node Info"
|
||||||
|
|
||||||
#: public/views/block.html
|
#: public/views/block.html
|
||||||
msgid "Block"
|
msgid "Block"
|
||||||
@ -91,17 +91,17 @@ msgstr "Serialisierte Bytes"
|
|||||||
|
|
||||||
#: public/views/includes/connection.html
|
#: public/views/includes/connection.html
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't connect to bitcoind to get live updates from the p2p network. (Tried "
|
"Can't connect to flod to get live updates from the p2p network. (Tried "
|
||||||
"connecting to bitcoind at {{host}}:{{port}} and failed.)"
|
"connecting to flod at {{host}}:{{port}} and failed.)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Es ist nicht möglich mit Bitcoind zu verbinden um live Aktualisierungen vom "
|
"Es ist nicht möglich mit Flod zu verbinden um live Aktualisierungen vom "
|
||||||
"P2P Netzwerk zu erhalten. (Verbindungsversuch zu bitcoind an {{host}}:"
|
"P2P Netzwerk zu erhalten. (Verbindungsversuch zu flod an {{host}}:"
|
||||||
"{{port}} ist fehlgeschlagen.)"
|
"{{port}} ist fehlgeschlagen.)"
|
||||||
|
|
||||||
#: public/views/includes/connection.html
|
#: public/views/includes/connection.html
|
||||||
msgid "Can't connect to insight server. Attempting to reconnect..."
|
msgid "Can't connect to flosight server. Attempting to reconnect..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Keine Verbindung zum insight-Server möglich. Es wird versucht die "
|
"Keine Verbindung zum flosight-Server möglich. Es wird versucht die "
|
||||||
"Verbindung neu aufzubauen..."
|
"Verbindung neu aufzubauen..."
|
||||||
|
|
||||||
#: public/views/includes/connection.html
|
#: public/views/includes/connection.html
|
||||||
@ -125,8 +125,8 @@ msgid "Connections to other nodes"
|
|||||||
msgstr "Verbindungen zu Nodes"
|
msgstr "Verbindungen zu Nodes"
|
||||||
|
|
||||||
#: public/views/status.html
|
#: public/views/status.html
|
||||||
msgid "Current Blockchain Tip (insight)"
|
msgid "Current Blockchain Tip (flosight)"
|
||||||
msgstr "Aktueller Blockchain Tip (insight)"
|
msgstr "Aktueller Blockchain Tip (flosight)"
|
||||||
|
|
||||||
#: public/views/status.html
|
#: public/views/status.html
|
||||||
msgid "Current Sync Status"
|
msgid "Current Sync Status"
|
||||||
@ -199,8 +199,8 @@ msgid "Last Block"
|
|||||||
msgstr "Letzter Block"
|
msgstr "Letzter Block"
|
||||||
|
|
||||||
#: public/views/status.html
|
#: public/views/status.html
|
||||||
msgid "Last Block Hash (Bitcoind)"
|
msgid "Last Block Hash (Flod)"
|
||||||
msgstr "Letzter Hash (Bitcoind)"
|
msgstr "Letzter Hash (Flod)"
|
||||||
|
|
||||||
#: public/views/index.html
|
#: public/views/index.html
|
||||||
msgid "Latest Blocks"
|
msgid "Latest Blocks"
|
||||||
|
|||||||
50
po/es.po
50
po/es.po
@ -1,6 +1,6 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Insight\n"
|
"Project-Id-Version: Flosight\n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: \n"
|
"PO-Revision-Date: \n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
@ -22,29 +22,29 @@ msgstr "404 Página no encontrada :("
|
|||||||
|
|
||||||
#: public/views/index.html
|
#: public/views/index.html
|
||||||
msgid ""
|
msgid ""
|
||||||
"<strong>insight</strong> is an <a href=\"http://live.insight.is/\" target="
|
"<strong>flosight</strong> is an <a href=\"http://flocha.in/\" target="
|
||||||
"\"_blank\">open-source Bitcoin blockchain explorer</a> with complete REST "
|
"\"_blank\">open-source Flo blockchain explorer</a> with complete REST "
|
||||||
"and websocket APIs that can be used for writing web wallets and other apps "
|
"and websocket APIs that can be used for writing web wallets and other apps "
|
||||||
"that need more advanced blockchain queries than provided by bitcoind RPC. "
|
"that need more advanced blockchain queries than provided by flod RPC. "
|
||||||
"Check out the <a href=\"http://github.com/bitpay/insight\" target=\"_blank"
|
"Check out the <a href=\"https://github.com/oipwg/flosight-api\" target=\"_blank"
|
||||||
"\">source code</a>."
|
"\">source code</a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<strong>insight</strong> es un <a href=\"http://live.insight.is/\" target="
|
"<strong>flosight</strong> es un <a href=\"http://flocha.in/\" target="
|
||||||
"\"_blank\">explorador de bloques de Bitcoin open-source</a> con un completo "
|
"\"_blank\">explorador de bloques de Flo open-source</a> con un completo "
|
||||||
"conjunto de REST y APIs de websockets que pueden ser usadas para escribir "
|
"conjunto de REST y APIs de websockets que pueden ser usadas para escribir "
|
||||||
"monederos de Bitcoins y otras aplicaciones que requieran consultar un "
|
"monederos de Flos y otras aplicaciones que requieran consultar un "
|
||||||
"explorador de bloques. Obtén el código en <a href=\"http://github.com/"
|
"explorador de bloques. Obtén el código en <a href=\"http://github.com/"
|
||||||
"bitpay/insight\" target=\"_blank\">el repositorio abierto de Github</a>."
|
"oipwg/flosight-api\" target=\"_blank\">el repositorio abierto de Github</a>."
|
||||||
|
|
||||||
#: public/views/index.html
|
#: public/views/index.html
|
||||||
msgid ""
|
msgid ""
|
||||||
"<strong>insight</strong> is still in development, so be sure to report any "
|
"<strong>flosight</strong> is still in development, so be sure to report any "
|
||||||
"bugs and provide feedback for improvement at our <a href=\"https://github."
|
"bugs and provide feedback for improvement at our <a href=\"https://github."
|
||||||
"com/bitpay/insight/issues\" target=\"_blank\">github issue tracker</a>."
|
"com/oipwg/flosight-ui/issues\" target=\"_blank\">github issue tracker</a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<strong>insight</strong> esta en desarrollo aún, por ello agradecemos que "
|
"<strong>flosight</strong> esta en desarrollo aún, por ello agradecemos que "
|
||||||
"nos reporten errores o sugerencias para mejorar el software. <a href="
|
"nos reporten errores o sugerencias para mejorar el software. <a href="
|
||||||
"\"https://github.com/bitpay/insight/issues\" target=\"_blank\">Github issue "
|
"\"https://github.com/oipwg/flosight-ui/issues\" target=\"_blank\">Github issue "
|
||||||
"tracker</a>."
|
"tracker</a>."
|
||||||
|
|
||||||
#: public/views/index.html
|
#: public/views/index.html
|
||||||
@ -68,8 +68,8 @@ msgid "Best Block"
|
|||||||
msgstr "Mejor Bloque"
|
msgstr "Mejor Bloque"
|
||||||
|
|
||||||
#: public/views/status.html
|
#: public/views/status.html
|
||||||
msgid "Bitcoin node information"
|
msgid "Flo node information"
|
||||||
msgstr "Información del nodo Bitcoin"
|
msgstr "Información del nodo Flo"
|
||||||
|
|
||||||
#: public/views/block.html
|
#: public/views/block.html
|
||||||
msgid "Block"
|
msgid "Block"
|
||||||
@ -90,15 +90,15 @@ msgstr "Bytes Serializados"
|
|||||||
|
|
||||||
#: public/views/includes/connection.html
|
#: public/views/includes/connection.html
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't connect to bitcoind to get live updates from the p2p network. (Tried "
|
"Can't connect to flod to get live updates from the p2p network. (Tried "
|
||||||
"connecting to bitcoind at {{host}}:{{port}} and failed.)"
|
"connecting to flod at {{host}}:{{port}} and failed.)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"No se pudo conectar a bitcoind para obtener actualizaciones en vivo de la "
|
"No se pudo conectar a flod para obtener actualizaciones en vivo de la "
|
||||||
"red p2p. (Se intentó conectar a bitcoind de {{host}}:{{port}} y falló.)"
|
"red p2p. (Se intentó conectar a flod de {{host}}:{{port}} y falló.)"
|
||||||
|
|
||||||
#: public/views/includes/connection.html
|
#: public/views/includes/connection.html
|
||||||
msgid "Can't connect to insight server. Attempting to reconnect..."
|
msgid "Can't connect to flosight server. Attempting to reconnect..."
|
||||||
msgstr "No se pudo conectar al servidor insight. Intentando re-conectar..."
|
msgstr "No se pudo conectar al servidor flosight. Intentando re-conectar..."
|
||||||
|
|
||||||
#: public/views/includes/connection.html
|
#: public/views/includes/connection.html
|
||||||
msgid "Can't connect to internet. Please, check your connection."
|
msgid "Can't connect to internet. Please, check your connection."
|
||||||
@ -121,8 +121,8 @@ msgid "Connections to other nodes"
|
|||||||
msgstr "Conexiones a otros nodos"
|
msgstr "Conexiones a otros nodos"
|
||||||
|
|
||||||
#: public/views/status.html
|
#: public/views/status.html
|
||||||
msgid "Current Blockchain Tip (insight)"
|
msgid "Current Blockchain Tip (flosight)"
|
||||||
msgstr "Actual Blockchain Tip (insight)"
|
msgstr "Actual Blockchain Tip (flosight)"
|
||||||
|
|
||||||
#: public/views/status.html
|
#: public/views/status.html
|
||||||
msgid "Current Sync Status"
|
msgid "Current Sync Status"
|
||||||
@ -195,8 +195,8 @@ msgid "Last Block"
|
|||||||
msgstr "Último Bloque"
|
msgstr "Último Bloque"
|
||||||
|
|
||||||
#: public/views/status.html
|
#: public/views/status.html
|
||||||
msgid "Last Block Hash (Bitcoind)"
|
msgid "Last Block Hash (Flod)"
|
||||||
msgstr "Último Bloque Hash (Bitcoind)"
|
msgstr "Último Bloque Hash (Flod)"
|
||||||
|
|
||||||
#: public/views/index.html
|
#: public/views/index.html
|
||||||
msgid "Latest Blocks"
|
msgid "Latest Blocks"
|
||||||
|
|||||||
60
po/ja.po
60
po/ja.po
@ -21,28 +21,28 @@ msgstr "404 ページがみつかりません (´・ω・`)"
|
|||||||
|
|
||||||
#: public/views/index.html
|
#: public/views/index.html
|
||||||
msgid ""
|
msgid ""
|
||||||
"<strong>insight</strong> is an <a href=\"http://live.insight.is/\" target="
|
"<strong>flosight</strong> is an <a href=\"http://flocha.in/\" target="
|
||||||
"\"_blank\">open-source Bitcoin blockchain explorer</a> with complete REST "
|
"\"_blank\">open-source Flo blockchain explorer</a> with complete REST "
|
||||||
"and websocket APIs that can be used for writing web wallets and other apps "
|
"and websocket APIs that can be used for writing web wallets and other apps "
|
||||||
"that need more advanced blockchain queries than provided by bitcoind RPC. "
|
"that need more advanced blockchain queries than provided by flod RPC. "
|
||||||
"Check out the <a href=\"http://github.com/bitpay/insight\" target=\"_blank"
|
"Check out the <a href=\"https://github.com/bitpay/flosight-api\" target=\"_blank"
|
||||||
"\">source code</a>."
|
"\">source code</a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<strong>insight</strong>は、bitcoind RPCの提供するものよりも詳細なブロック"
|
"<strong>flosight</strong>は、flod RPCの提供するものよりも詳細なブロック"
|
||||||
"チェインへの問い合わせを必要とするウェブウォレットやその他のアプリを書くのに"
|
"チェインへの問い合わせを必要とするウェブウォレットやその他のアプリを書くのに"
|
||||||
"使える、完全なRESTおよびwebsocket APIを備えた<a href=\"http://live.insight."
|
"使える、完全なRESTおよびwebsocket APIを備えた<a href=\"http://flocha.in"
|
||||||
"is/\" target=\"_blank\">オープンソースのビットコインブロックエクスプローラ</"
|
"/\" target=\"_blank\">オープンソースのビットコインブロックエクスプローラ</"
|
||||||
"a>です。<a href=\"http://github.com/bitpay/insight\" target=\"_blank\">ソース"
|
"a>です。<a href=\"https://github.com/bitpay/flosight-api\" target=\"_blank\">ソース"
|
||||||
"コード</a>を確認"
|
"コード</a>を確認"
|
||||||
|
|
||||||
#: public/views/index.html
|
#: public/views/index.html
|
||||||
msgid ""
|
msgid ""
|
||||||
"<strong>insight</strong> is still in development, so be sure to report any "
|
"<strong>flosight</strong> is still in development, so be sure to report any "
|
||||||
"bugs and provide feedback for improvement at our <a href=\"https://github."
|
"bugs and provide feedback for improvement at our <a href=\"https://github."
|
||||||
"com/bitpay/insight/issues\" target=\"_blank\">github issue tracker</a>."
|
"com/oipwg/flosight-ui/issues\" target=\"_blank\">github issue tracker</a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<strong>insight</strong>は現在開発中です。<a href=\"https://github.com/"
|
"<strong>flosight</strong>は現在開発中です。<a href=\"https://github.com/"
|
||||||
"bitpay/insight/issues\" target=\"_blank\">githubのissueトラッカ</a>にてバグの"
|
"oipwg/flosight-ui/issues\" target=\"_blank\">githubのissueトラッカ</a>にてバグの"
|
||||||
"報告や改善案の提案をお願いします。"
|
"報告や改善案の提案をお願いします。"
|
||||||
|
|
||||||
#: public/views/index.html
|
#: public/views/index.html
|
||||||
@ -74,12 +74,12 @@ msgid "Best Block"
|
|||||||
msgstr "最良ブロック"
|
msgstr "最良ブロック"
|
||||||
|
|
||||||
#: public/views/messages_verify.html
|
#: public/views/messages_verify.html
|
||||||
msgid "Bitcoin comes with a way of signing arbitrary messages."
|
msgid "Flo comes with a way of signing arbitrary messages."
|
||||||
msgstr "Bitcoinには任意のメッセージを署名する昨日が備わっています。"
|
msgstr "Floには任意のメッセージを署名する昨日が備わっています。"
|
||||||
|
|
||||||
#: public/views/status.html
|
#: public/views/status.html
|
||||||
msgid "Bitcoin node information"
|
msgid "Flo node information"
|
||||||
msgstr "Bitcoinノード情報"
|
msgstr "Floノード情報"
|
||||||
|
|
||||||
#: public/views/block.html
|
#: public/views/block.html
|
||||||
msgid "Block"
|
msgid "Block"
|
||||||
@ -104,15 +104,15 @@ msgstr "シリアライズ後の容量 (バイト)"
|
|||||||
|
|
||||||
#: public/views/includes/connection.html
|
#: public/views/includes/connection.html
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't connect to bitcoind to get live updates from the p2p network. (Tried "
|
"Can't connect to flod to get live updates from the p2p network. (Tried "
|
||||||
"connecting to bitcoind at {{host}}:{{port}} and failed.)"
|
"connecting to flod at {{host}}:{{port}} and failed.)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"P2Pネットワークからライブ情報を取得するためにbitcoindへ接続することができませ"
|
"P2Pネットワークからライブ情報を取得するためにflodへ接続することができませ"
|
||||||
"んでした。({{host}}:{{port}} への接続を試みましたが、失敗しました。)"
|
"んでした。({{host}}:{{port}} への接続を試みましたが、失敗しました。)"
|
||||||
|
|
||||||
#: public/views/includes/connection.html
|
#: public/views/includes/connection.html
|
||||||
msgid "Can't connect to insight server. Attempting to reconnect..."
|
msgid "Can't connect to flosight server. Attempting to reconnect..."
|
||||||
msgstr "insight サーバに接続できません。再接続しています..."
|
msgstr "flosight サーバに接続できません。再接続しています..."
|
||||||
|
|
||||||
#: public/views/includes/connection.html
|
#: public/views/includes/connection.html
|
||||||
msgid "Can't connect to internet. Please, check your connection."
|
msgid "Can't connect to internet. Please, check your connection."
|
||||||
@ -135,8 +135,8 @@ msgid "Connections to other nodes"
|
|||||||
msgstr "他ノードへの接続"
|
msgstr "他ノードへの接続"
|
||||||
|
|
||||||
#: public/views/status.html
|
#: public/views/status.html
|
||||||
msgid "Current Blockchain Tip (insight)"
|
msgid "Current Blockchain Tip (flosight)"
|
||||||
msgstr "現在のブロックチェインのTip (insight)"
|
msgstr "現在のブロックチェインのTip (flosight)"
|
||||||
|
|
||||||
#: public/views/status.html
|
#: public/views/status.html
|
||||||
msgid "Current Sync Status"
|
msgid "Current Sync Status"
|
||||||
@ -213,8 +213,8 @@ msgid "Last Block"
|
|||||||
msgstr "直前のブロック"
|
msgstr "直前のブロック"
|
||||||
|
|
||||||
#: public/views/status.html
|
#: public/views/status.html
|
||||||
msgid "Last Block Hash (Bitcoind)"
|
msgid "Last Block Hash (Flod)"
|
||||||
msgstr "直前のブロックのハッシュ値 (Bitcoind)"
|
msgstr "直前のブロックのハッシュ値 (Flod)"
|
||||||
|
|
||||||
#: public/views/index.html
|
#: public/views/index.html
|
||||||
msgid "Latest Blocks"
|
msgid "Latest Blocks"
|
||||||
@ -426,17 +426,17 @@ msgstr "このアドレスに対するトランザクションはありません
|
|||||||
#: public/views/transaction_sendraw.html
|
#: public/views/transaction_sendraw.html
|
||||||
msgid ""
|
msgid ""
|
||||||
"This form can be used to broadcast a raw transaction in hex format over\n"
|
"This form can be used to broadcast a raw transaction in hex format over\n"
|
||||||
" the Bitcoin network."
|
" the Flo network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"このフォームでは、16進数フォーマットの生のトランザクションをBitcoinネットワー"
|
"このフォームでは、16進数フォーマットの生のトランザクションをFloネットワー"
|
||||||
"ク上に配信することができます。"
|
"ク上に配信することができます。"
|
||||||
|
|
||||||
#: public/views/messages_verify.html
|
#: public/views/messages_verify.html
|
||||||
msgid ""
|
msgid ""
|
||||||
"This form can be used to verify that a message comes from\n"
|
"This form can be used to verify that a message comes from\n"
|
||||||
" a specific Bitcoin address."
|
" a specific Flo address."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"このフォームでは、メッセージが特定のBitcoinアドレスから来たかどうかを検証する"
|
"このフォームでは、メッセージが特定のFloアドレスから来たかどうかを検証する"
|
||||||
"ことができます。"
|
"ことができます。"
|
||||||
|
|
||||||
#: public/views/status.html
|
#: public/views/status.html
|
||||||
@ -453,7 +453,7 @@ msgstr "今日"
|
|||||||
|
|
||||||
#: public/views/status.html
|
#: public/views/status.html
|
||||||
msgid "Total Amount"
|
msgid "Total Amount"
|
||||||
msgstr "Bitcoin総量"
|
msgstr "Flo総量"
|
||||||
|
|
||||||
#: public/views/address.html
|
#: public/views/address.html
|
||||||
msgid "Total Received"
|
msgid "Total Received"
|
||||||
|
|||||||
2
public/css/main.min.css
vendored
2
public/css/main.min.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
@ -1,16 +1,17 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en" data-ng-app="insight" data-ng-csp>
|
<html lang="en" data-ng-app="flosight" data-ng-csp>
|
||||||
<head>
|
<head>
|
||||||
|
<base href="/" />
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
<meta name="fragment" content="!">
|
<meta name="fragment" content="!">
|
||||||
<title data-ng-bind="$root.title + $root.titleDetail + ' | Insight'">Insight</title>
|
<title data-ng-bind="$root.title + $root.titleDetail + ' | Flosight'">Flosight</title>
|
||||||
<meta name="keywords" content="bitcoins, transactions, blocks, address, block chain, best block, mining difficulty, hash serialized">
|
<meta name="keywords" content="flo, transactions, blocks, address, block chain, best block, mining difficulty, hash serialized">
|
||||||
<meta name="description" content="Bitcoin Insight. View detailed information on all bitcoin transactions and block. {{ $root.title + $root.titleDetail }}">
|
<meta name="description" content="Flo Chain Explorer. View detailed information on all Flo transactions and blocks.">
|
||||||
<link rel="shortcut icon" href="/img/icons/favicon.ico" type="image/x-icon">
|
<link rel="shortcut icon" href="img/icons/favicon.ico" type="image/x-icon">
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Ubuntu:300,400,500,700,400italic">
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Ubuntu:300,400,500,700,400italic">
|
||||||
<link rel="stylesheet" href="/css/main.min.css">
|
<link rel="stylesheet" href="css/main.min.css">
|
||||||
</head>
|
</head>
|
||||||
<body ng-cloak class="ng-cloak">
|
<body ng-cloak class="ng-cloak">
|
||||||
<div>
|
<div>
|
||||||
@ -39,7 +40,7 @@
|
|||||||
</script>
|
</script>
|
||||||
</div>
|
</div>
|
||||||
<div id="wrap">
|
<div id="wrap">
|
||||||
<div class="navbar navbar-default navbar-fixed-top" data-ng-include="'/views/includes/header.html'" role='navigation'></div>
|
<div class="navbar navbar-default navbar-fixed-top" data-ng-include="'views/includes/header.html'" role='navigation'></div>
|
||||||
<section class="container" data-ng-view></section>
|
<section class="container" data-ng-view></section>
|
||||||
</div>
|
</div>
|
||||||
<div id="footer" role="navigation">
|
<div id="footer" role="navigation">
|
||||||
@ -57,17 +58,37 @@
|
|||||||
</span>
|
</span>
|
||||||
|
|
||||||
[
|
[
|
||||||
<a href="/messages/verify" translate>verify message</a>
|
<a href="messages/verify" translate>verify message</a>
|
||||||
<span> · </span>
|
<span> · </span>
|
||||||
<a href="/tx/send" translate>broadcast transaction</a>
|
<a href="tx/send" translate>broadcast transaction</a>
|
||||||
]
|
]
|
||||||
</div>
|
</div>
|
||||||
<a class="insight m10v pull-right" target="_blank" href="http://insight.is">insight <small>API v{{version}}</small></a>
|
<a class="flosight m10v pull-right" target="_blank" href="http://flosight.is">flosight <small>API v{{version}}</small></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="/socket.io/socket.io.js"></script>
|
<script src="/socket.io/socket.io.js"></script>
|
||||||
<script src="/js/vendors.min.js"></script>
|
<script src="js/vendors.min.js"></script>
|
||||||
<script src="/js/angularjs-all.min.js"></script>
|
<script src="js/angularjs-all.min.js"></script>
|
||||||
<script src="/js/main.min.js"></script>
|
<script src="js/clipboard.min.js"></script>
|
||||||
|
<script src="js/main.min.js"></script>
|
||||||
|
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||||
|
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-119772748-2"></script>
|
||||||
|
<script>
|
||||||
|
window.dataLayer = window.dataLayer || [];
|
||||||
|
function gtag(){dataLayer.push(arguments);}
|
||||||
|
gtag('js', new Date());
|
||||||
|
|
||||||
|
gtag('config', 'UA-119772748-2');
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
var observer = new window.MutationObserver(function(mutations, observer) {
|
||||||
|
var clipboard = new ClipboardJS('.btn-copy');
|
||||||
|
});
|
||||||
|
|
||||||
|
observer.observe(document, {
|
||||||
|
subtree: true,
|
||||||
|
attributes: true
|
||||||
|
})
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
22
public/js/angularjs-all.min.js
vendored
22
public/js/angularjs-all.min.js
vendored
File diff suppressed because one or more lines are too long
7
public/js/clipboard.min.js
vendored
Executable file
7
public/js/clipboard.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
6
public/js/main.min.js
vendored
6
public/js/main.min.js
vendored
File diff suppressed because one or more lines are too long
11
public/js/vendors.min.js
vendored
11
public/js/vendors.min.js
vendored
File diff suppressed because one or more lines are too long
@ -24,7 +24,7 @@ h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
|
|||||||
|
|
||||||
/* Styling for the ngProgress itself */
|
/* Styling for the ngProgress itself */
|
||||||
#ngProgress {
|
#ngProgress {
|
||||||
background-color: #6C9032 !important;
|
background-color: #306d8e !important;
|
||||||
box-shadow: none !important;
|
box-shadow: none !important;
|
||||||
color: #373D42 !important;
|
color: #373D42 !important;
|
||||||
height: 3px !important;
|
height: 3px !important;
|
||||||
@ -103,7 +103,7 @@ margin-left: 0;
|
|||||||
}
|
}
|
||||||
|
|
||||||
.table-hover>tbody>tr:hover>td, .table-hover>tbody>tr:hover>th {
|
.table-hover>tbody>tr:hover>td, .table-hover>tbody>tr:hover>th {
|
||||||
background-color: #F0F7E2;
|
background-color: #e8f6ff;
|
||||||
}
|
}
|
||||||
.navbar { min-height: 64px; }
|
.navbar { min-height: 64px; }
|
||||||
.navbar-default .navbar-toggle {
|
.navbar-default .navbar-toggle {
|
||||||
@ -115,7 +115,7 @@ margin-left: 0;
|
|||||||
.navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {background-color: #373D42;}
|
.navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {background-color: #373D42;}
|
||||||
|
|
||||||
.navbar-default {
|
.navbar-default {
|
||||||
background-color: #8DC429;
|
background-color: #3d7c9f;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
}
|
}
|
||||||
@ -128,7 +128,7 @@ margin-left: 0;
|
|||||||
}
|
}
|
||||||
|
|
||||||
.navbar-default .navbar-nav>.active>a, .navbar-default .navbar-nav>.active>a:focus {
|
.navbar-default .navbar-nav>.active>a, .navbar-default .navbar-nav>.active>a:focus {
|
||||||
background-color: #6C9032;
|
background-color: #406072;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,7 +148,7 @@ margin-left: 0;
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.insight {
|
.flosight {
|
||||||
font-family: 'Ubuntu', sans-serif;
|
font-family: 'Ubuntu', sans-serif;
|
||||||
font-size: 34px;
|
font-size: 34px;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
@ -166,7 +166,7 @@ margin-left: 0;
|
|||||||
}
|
}
|
||||||
|
|
||||||
.navbar-form .form-control {
|
.navbar-form .form-control {
|
||||||
background-color: #7CAD23;
|
background-color: #376177;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
-webkit-border-radius: 3px;
|
-webkit-border-radius: 3px;
|
||||||
-moz-border-radius: 3px;
|
-moz-border-radius: 3px;
|
||||||
@ -184,7 +184,7 @@ margin-left: 0;
|
|||||||
#search-form { color: #fff; }
|
#search-form { color: #fff; }
|
||||||
|
|
||||||
#search.loading {
|
#search.loading {
|
||||||
background-image: url('/img/loading.gif');
|
background-image: url('../img/loading.gif');
|
||||||
background-position: 5px center;
|
background-position: 5px center;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding-left: 25px;
|
padding-left: 25px;
|
||||||
@ -201,14 +201,14 @@ margin-left: 0;
|
|||||||
#search { color: #fff; }
|
#search { color: #fff; }
|
||||||
|
|
||||||
#search::-webkit-input-placeholder {
|
#search::-webkit-input-placeholder {
|
||||||
color: #BCDF7E;
|
color: #87bfdd;
|
||||||
font-family: 'Ubuntu', sans-serif;
|
font-family: 'Ubuntu', sans-serif;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
font-weight: 100;
|
font-weight: 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
#search::-moz-placeholder {
|
#search::-moz-placeholder {
|
||||||
color: #BCDF7E;
|
color: #87bfdd;
|
||||||
font-family: 'Ubuntu', sans-serif;
|
font-family: 'Ubuntu', sans-serif;
|
||||||
font-weight: 100;
|
font-weight: 100;
|
||||||
}
|
}
|
||||||
@ -216,7 +216,7 @@ margin-left: 0;
|
|||||||
.status {
|
.status {
|
||||||
-moz-border-radius: 3px;
|
-moz-border-radius: 3px;
|
||||||
-webkit-border-radius: 3px;
|
-webkit-border-radius: 3px;
|
||||||
background-color: #597338;
|
background-color: #376177;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
margin: 15px 0;
|
margin: 15px 0;
|
||||||
padding: 8px 10px;
|
padding: 8px 10px;
|
||||||
@ -316,8 +316,8 @@ margin-left: 0;
|
|||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
}
|
}
|
||||||
.btn-primary {
|
.btn-primary {
|
||||||
background-color: #8DC429;
|
background-color: #218bc4;
|
||||||
border: 2px solid #76AF0F;
|
border: 2px solid #0b71a8;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-primary:hover, .btn-primary:focus, .btn-primary:active,
|
.btn-primary:hover, .btn-primary:focus, .btn-primary:active,
|
||||||
@ -363,7 +363,7 @@ margin-left: 0;
|
|||||||
}
|
}
|
||||||
|
|
||||||
.txvalues-primary {
|
.txvalues-primary {
|
||||||
background-color: #8DC429;
|
background-color: #2587bc;
|
||||||
}
|
}
|
||||||
|
|
||||||
.txvalues-default {
|
.txvalues-default {
|
||||||
@ -386,7 +386,7 @@ margin-left: 0;
|
|||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
.progress-bar-info { background-color: #8DC429; }
|
.progress-bar-info { background-color: #2587bc; }
|
||||||
|
|
||||||
/* Set the fixed height of the footer here */
|
/* Set the fixed height of the footer here */
|
||||||
#footer {
|
#footer {
|
||||||
@ -396,17 +396,17 @@ margin-left: 0;
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
#footer a.insight {
|
#footer a.flosight {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
#footer a.insight:hover {
|
#footer a.flosight:hover {
|
||||||
color: #fffffe;
|
color: #fffffe;
|
||||||
}
|
}
|
||||||
|
|
||||||
#footer a.insight small { font-size: 11px; }
|
#footer a.flosight small { font-size: 11px; }
|
||||||
.line-footer { border-top: 2px dashed #ccc; }
|
.line-footer { border-top: 2px dashed #ccc; }
|
||||||
|
|
||||||
#footer .links {
|
#footer .links {
|
||||||
@ -535,6 +535,7 @@ margin-left: 0;
|
|||||||
width: 16px;
|
width: 16px;
|
||||||
outline: none;
|
outline: none;
|
||||||
vertical-align: sub;
|
vertical-align: sub;
|
||||||
|
border: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-expand {
|
.btn-expand {
|
||||||
@ -548,7 +549,7 @@ margin-left: 0;
|
|||||||
}
|
}
|
||||||
|
|
||||||
.btn-copy {
|
.btn-copy {
|
||||||
background: transparent url('/img/icons/copy.png') center center no-repeat;
|
background: transparent url('../img/icons/copy.png') center center no-repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-copy .tooltip {
|
.btn-copy .tooltip {
|
||||||
@ -613,23 +614,23 @@ margin-left: 0;
|
|||||||
float: left;
|
float: left;
|
||||||
height: 45px;
|
height: 45px;
|
||||||
}
|
}
|
||||||
#powered a.bitcore {
|
#powered a.flocore {
|
||||||
background-image: url('/img/logo.svg');
|
background-image: url('../img/logo.svg');
|
||||||
background-size: 80px;
|
background-size: 80px;
|
||||||
width: 30%;
|
width: 30%;
|
||||||
}
|
}
|
||||||
#powered a.nodejs {
|
#powered a.nodejs {
|
||||||
background-image: url('/img/nodejs.png');
|
background-image: url('../img/nodejs.png');
|
||||||
background-size: 80px;
|
background-size: 80px;
|
||||||
width: 30%;
|
width: 30%;
|
||||||
}
|
}
|
||||||
#powered a.angularjs {
|
#powered a.angularjs {
|
||||||
background-image: url('/img/angularjs.png');
|
background-image: url('../img/angularjs.png');
|
||||||
background-size: 50px;
|
background-size: 50px;
|
||||||
width: 20%;
|
width: 20%;
|
||||||
}
|
}
|
||||||
#powered a.leveldb {
|
#powered a.leveldb {
|
||||||
background-image: url('/img/leveldb.png');
|
background-image: url('../img/leveldb.png');
|
||||||
background-size: 50px;
|
background-size: 50px;
|
||||||
width: 20%;
|
width: 20%;
|
||||||
}
|
}
|
||||||
@ -753,7 +754,7 @@ a.v_highlight_more {
|
|||||||
h3 {
|
h3 {
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
}
|
}
|
||||||
.insight {
|
.flosight {
|
||||||
font-size: 30px;
|
font-size: 30px;
|
||||||
}
|
}
|
||||||
.navbar-default .navbar-nav>li>a {
|
.navbar-default .navbar-nav>li>a {
|
||||||
@ -787,7 +788,7 @@ a.v_highlight_more {
|
|||||||
.navbar-default .navbar-brand {
|
.navbar-default .navbar-brand {
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
}
|
}
|
||||||
.insight {
|
.flosight {
|
||||||
font-size: 26px;
|
font-size: 26px;
|
||||||
}
|
}
|
||||||
.navbar-nav>li>a {
|
.navbar-nav>li>a {
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var defaultLanguage = localStorage.getItem('insight-language') || 'en';
|
var defaultLanguage = localStorage.getItem('flosight-language') || 'en';
|
||||||
var defaultCurrency = localStorage.getItem('insight-currency') || 'BTC';
|
var defaultCurrency = localStorage.getItem('flosight-currency') || 'FLO';
|
||||||
|
|
||||||
angular.module('insight',[
|
angular.module('flosight',[
|
||||||
'ngAnimate',
|
'ngAnimate',
|
||||||
'ngResource',
|
'ngResource',
|
||||||
'ngRoute',
|
'ngRoute',
|
||||||
@ -13,25 +13,27 @@ angular.module('insight',[
|
|||||||
'monospaced.qrcode',
|
'monospaced.qrcode',
|
||||||
'gettext',
|
'gettext',
|
||||||
'angularMoment',
|
'angularMoment',
|
||||||
'insight.system',
|
'flosight.system',
|
||||||
'insight.socket',
|
'flosight.socket',
|
||||||
'insight.blocks',
|
'flosight.api',
|
||||||
'insight.transactions',
|
'flosight.blocks',
|
||||||
'insight.address',
|
'flosight.transactions',
|
||||||
'insight.search',
|
'flosight.address',
|
||||||
'insight.status',
|
'flosight.search',
|
||||||
'insight.connection',
|
'flosight.status',
|
||||||
'insight.currency',
|
'flosight.connection',
|
||||||
'insight.messages'
|
'flosight.currency',
|
||||||
|
'flosight.messages'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
angular.module('insight.system', []);
|
angular.module('flosight.system', []);
|
||||||
angular.module('insight.socket', []);
|
angular.module('flosight.socket', []);
|
||||||
angular.module('insight.blocks', []);
|
angular.module('flosight.api', []);
|
||||||
angular.module('insight.transactions', []);
|
angular.module('flosight.blocks', []);
|
||||||
angular.module('insight.address', []);
|
angular.module('flosight.transactions', []);
|
||||||
angular.module('insight.search', []);
|
angular.module('flosight.address', []);
|
||||||
angular.module('insight.status', []);
|
angular.module('flosight.search', []);
|
||||||
angular.module('insight.connection', []);
|
angular.module('flosight.status', []);
|
||||||
angular.module('insight.currency', []);
|
angular.module('flosight.connection', []);
|
||||||
angular.module('insight.messages', []);
|
angular.module('flosight.currency', []);
|
||||||
|
angular.module('flosight.messages', []);
|
||||||
|
|||||||
@ -1,56 +1,56 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
//Setting up route
|
//Setting up route
|
||||||
angular.module('insight').config(function($routeProvider) {
|
angular.module('flosight').config(function($routeProvider) {
|
||||||
$routeProvider.
|
$routeProvider.
|
||||||
when('/block/:blockHash', {
|
when('/block/:blockHash', {
|
||||||
templateUrl: '/views/block.html',
|
templateUrl: 'views/block.html',
|
||||||
title: 'Bitcoin Block '
|
title: 'Flo Block '
|
||||||
}).
|
}).
|
||||||
when('/block-index/:blockHeight', {
|
when('/block-index/:blockHeight', {
|
||||||
controller: 'BlocksController',
|
controller: 'BlocksController',
|
||||||
templateUrl: '/views/redirect.html'
|
templateUrl: 'views/redirect.html'
|
||||||
}).
|
}).
|
||||||
when('/tx/send', {
|
when('/tx/send', {
|
||||||
templateUrl: '/views/transaction_sendraw.html',
|
templateUrl: 'views/transaction_sendraw.html',
|
||||||
title: 'Broadcast Raw Transaction'
|
title: 'Broadcast Raw Transaction'
|
||||||
}).
|
}).
|
||||||
when('/tx/:txId/:v_type?/:v_index?', {
|
when('/tx/:txId/:v_type?/:v_index?', {
|
||||||
templateUrl: '/views/transaction.html',
|
templateUrl: 'views/transaction.html',
|
||||||
title: 'Bitcoin Transaction '
|
title: 'Flo Transaction '
|
||||||
}).
|
}).
|
||||||
when('/', {
|
when('/', {
|
||||||
templateUrl: '/views/index.html',
|
templateUrl: 'views/index.html',
|
||||||
title: 'Home'
|
title: 'Home'
|
||||||
}).
|
}).
|
||||||
when('/blocks', {
|
when('/blocks', {
|
||||||
templateUrl: '/views/block_list.html',
|
templateUrl: 'views/block_list.html',
|
||||||
title: 'Bitcoin Blocks solved Today'
|
title: 'Flo Blocks solved Today'
|
||||||
}).
|
}).
|
||||||
when('/blocks-date/:blockDate/:startTimestamp?', {
|
when('/blocks-date/:blockDate/:startTimestamp?', {
|
||||||
templateUrl: '/views/block_list.html',
|
templateUrl: 'views/block_list.html',
|
||||||
title: 'Bitcoin Blocks solved '
|
title: 'Flo Blocks solved '
|
||||||
}).
|
}).
|
||||||
when('/address/:addrStr', {
|
when('/address/:addrStr', {
|
||||||
templateUrl: '/views/address.html',
|
templateUrl: 'views/address.html',
|
||||||
title: 'Bitcoin Address '
|
title: 'Flo Address '
|
||||||
}).
|
}).
|
||||||
when('/status', {
|
when('/status', {
|
||||||
templateUrl: '/views/status.html',
|
templateUrl: 'views/status.html',
|
||||||
title: 'Status'
|
title: 'Status'
|
||||||
}).
|
}).
|
||||||
when('/messages/verify', {
|
when('/messages/verify', {
|
||||||
templateUrl: '/views/messages_verify.html',
|
templateUrl: 'views/messages_verify.html',
|
||||||
title: 'Verify Message'
|
title: 'Verify Message'
|
||||||
})
|
})
|
||||||
.otherwise({
|
.otherwise({
|
||||||
templateUrl: '/views/404.html',
|
templateUrl: 'views/404.html',
|
||||||
title: 'Error'
|
title: 'Error'
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
//Setting HTML5 Location Mode
|
//Setting HTML5 Location Mode
|
||||||
angular.module('insight')
|
angular.module('flosight')
|
||||||
.config(function($locationProvider) {
|
.config(function($locationProvider) {
|
||||||
$locationProvider.html5Mode(true);
|
$locationProvider.html5Mode(true);
|
||||||
$locationProvider.hashPrefix('!');
|
$locationProvider.hashPrefix('!');
|
||||||
|
|||||||
@ -1,27 +1,37 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('insight.address').controller('AddressController',
|
angular.module('flosight.address').controller('AddressController',
|
||||||
function($scope, $rootScope, $routeParams, $location, Global, Address, getSocket) {
|
function($scope, $rootScope, $routeParams, $location, Global, Address, getSocket) {
|
||||||
$scope.global = Global;
|
$scope.global = Global;
|
||||||
|
|
||||||
|
|
||||||
var socket = getSocket($scope);
|
var socket = getSocket($scope);
|
||||||
|
var addrStr = $routeParams.addrStr;
|
||||||
|
|
||||||
var _startSocket = function () {
|
var _startSocket = function() {
|
||||||
socket.emit('subscribe', $routeParams.addrStr);
|
socket.on('florincoind/addresstxid', function(data) {
|
||||||
socket.on($routeParams.addrStr, function(tx) {
|
if (data.address === addrStr) {
|
||||||
$rootScope.$broadcast('tx', tx);
|
$rootScope.$broadcast('tx', data.txid);
|
||||||
var beep = new Audio('/sound/transaction.mp3');
|
var base = document.querySelector('base');
|
||||||
beep.play();
|
var beep = new Audio(base.href + '/sound/transaction.mp3');
|
||||||
|
beep.play();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
socket.emit('subscribe', 'florincoind/addresstxid', [addrStr]);
|
||||||
|
};
|
||||||
|
|
||||||
|
var _stopSocket = function () {
|
||||||
|
socket.emit('unsubscribe', 'florincoind/addresstxid', [addrStr]);
|
||||||
};
|
};
|
||||||
|
|
||||||
socket.on('connect', function() {
|
socket.on('connect', function() {
|
||||||
_startSocket();
|
_startSocket();
|
||||||
});
|
});
|
||||||
|
|
||||||
$scope.params = $routeParams;
|
$scope.$on('$destroy', function(){
|
||||||
|
_stopSocket();
|
||||||
|
});
|
||||||
|
|
||||||
|
$scope.params = $routeParams;
|
||||||
|
|
||||||
$scope.findOne = function() {
|
$scope.findOne = function() {
|
||||||
$rootScope.currentAddr = $routeParams.addrStr;
|
$rootScope.currentAddr = $routeParams.addrStr;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('insight.blocks').controller('BlocksController',
|
angular.module('flosight.blocks').controller('BlocksController',
|
||||||
function($scope, $rootScope, $routeParams, $location, Global, Block, Blocks, BlockByHeight) {
|
function($scope, $rootScope, $routeParams, $location, Global, Block, Blocks, BlockByHeight) {
|
||||||
$scope.global = Global;
|
$scope.global = Global;
|
||||||
$scope.loading = false;
|
$scope.loading = false;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('insight.connection').controller('ConnectionController',
|
angular.module('flosight.connection').controller('ConnectionController',
|
||||||
function($scope, $window, Status, getSocket, PeerSync) {
|
function($scope, $window, Status, getSocket, PeerSync) {
|
||||||
|
|
||||||
// Set initial values
|
// Set initial values
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('insight.currency').controller('CurrencyController',
|
angular.module('flosight.currency').controller('CurrencyController',
|
||||||
function($scope, $rootScope, Currency) {
|
function($scope, $rootScope, Currency) {
|
||||||
$rootScope.currency.symbol = defaultCurrency;
|
$rootScope.currency.symbol = defaultCurrency;
|
||||||
|
|
||||||
@ -19,16 +19,29 @@ angular.module('insight.currency').controller('CurrencyController',
|
|||||||
var response;
|
var response;
|
||||||
|
|
||||||
if (this.symbol === 'USD') {
|
if (this.symbol === 'USD') {
|
||||||
response = _roundFloat((value * this.factor), 2);
|
var USDValue = value * this.factor;
|
||||||
} else if (this.symbol === 'mBTC') {
|
response = USDValue.toFixed(2)
|
||||||
|
|
||||||
|
if (parseFloat(response) === 0)
|
||||||
|
response = USDValue.toFixed(4)
|
||||||
|
|
||||||
|
if (parseFloat(response) === 0)
|
||||||
|
response = USDValue.toFixed(6)
|
||||||
|
|
||||||
|
if (parseFloat(response) === 0)
|
||||||
|
response = USDValue.toFixed(8)
|
||||||
|
|
||||||
|
if (parseFloat(response) === 0)
|
||||||
|
response = 0;
|
||||||
|
} else if (this.symbol === 'mFLO') {
|
||||||
this.factor = 1000;
|
this.factor = 1000;
|
||||||
response = _roundFloat((value * this.factor), 5);
|
response = _roundFloat((value * this.factor), 5);
|
||||||
} else if (this.symbol === 'bits') {
|
} else if (this.symbol === 'bits') {
|
||||||
this.factor = 1000000;
|
this.factor = 1000000;
|
||||||
response = _roundFloat((value * this.factor), 2);
|
response = _roundFloat((value * this.factor), 2);
|
||||||
} else {
|
} else { // assumes symbol is BTC
|
||||||
this.factor = 1;
|
this.factor = 1;
|
||||||
response = value;
|
response = _roundFloat((value * this.factor), 8);
|
||||||
}
|
}
|
||||||
// prevent sci notation
|
// prevent sci notation
|
||||||
if (response < 1e-7) response=response.toFixed(8);
|
if (response < 1e-7) response=response.toFixed(8);
|
||||||
@ -41,13 +54,13 @@ angular.module('insight.currency').controller('CurrencyController',
|
|||||||
|
|
||||||
$scope.setCurrency = function(currency) {
|
$scope.setCurrency = function(currency) {
|
||||||
$rootScope.currency.symbol = currency;
|
$rootScope.currency.symbol = currency;
|
||||||
localStorage.setItem('insight-currency', currency);
|
localStorage.setItem('flosight-currency', currency);
|
||||||
|
|
||||||
if (currency === 'USD') {
|
if (currency === 'USD') {
|
||||||
Currency.get({}, function(res) {
|
Currency.get({}, function(res) {
|
||||||
$rootScope.currency.factor = $rootScope.currency.bitstamp = res.data.bitstamp;
|
$rootScope.currency.factor = $rootScope.currency.bitstamp = res.data.bitstamp;
|
||||||
});
|
});
|
||||||
} else if (currency === 'mBTC') {
|
} else if (currency === 'mFLO') {
|
||||||
$rootScope.currency.factor = 1000;
|
$rootScope.currency.factor = 1000;
|
||||||
} else if (currency === 'bits') {
|
} else if (currency === 'bits') {
|
||||||
$rootScope.currency.factor = 1000000;
|
$rootScope.currency.factor = 1000000;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('insight.system').controller('FooterController',
|
angular.module('flosight.system').controller('FooterController',
|
||||||
function($scope, $route, $templateCache, gettextCatalog, amMoment, Version) {
|
function($scope, $route, $templateCache, gettextCatalog, amMoment, Version) {
|
||||||
|
|
||||||
$scope.defaultLanguage = defaultLanguage;
|
$scope.defaultLanguage = defaultLanguage;
|
||||||
@ -31,7 +31,7 @@ angular.module('insight.system').controller('FooterController',
|
|||||||
$scope.setLanguage = function(isoCode) {
|
$scope.setLanguage = function(isoCode) {
|
||||||
gettextCatalog.currentLanguage = $scope.defaultLanguage = defaultLanguage = isoCode;
|
gettextCatalog.currentLanguage = $scope.defaultLanguage = defaultLanguage = isoCode;
|
||||||
amMoment.changeLocale(isoCode);
|
amMoment.changeLocale(isoCode);
|
||||||
localStorage.setItem('insight-language', isoCode);
|
localStorage.setItem('flosight-language', isoCode);
|
||||||
var currentPageTemplate = $route.current.templateUrl;
|
var currentPageTemplate = $route.current.templateUrl;
|
||||||
$templateCache.remove(currentPageTemplate);
|
$templateCache.remove(currentPageTemplate);
|
||||||
$route.reload();
|
$route.reload();
|
||||||
|
|||||||
@ -1,13 +1,13 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('insight.system').controller('HeaderController',
|
angular.module('flosight.system').controller('HeaderController',
|
||||||
function($scope, $rootScope, $modal, getSocket, Global, Block) {
|
function($scope, $rootScope, $modal, getSocket, Global, Block, Status) {
|
||||||
$scope.global = Global;
|
$scope.global = Global;
|
||||||
|
|
||||||
$rootScope.currency = {
|
$rootScope.currency = {
|
||||||
factor: 1,
|
factor: 1,
|
||||||
bitstamp: 0,
|
bitstamp: 0,
|
||||||
symbol: 'BTC'
|
symbol: 'FLO'
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.menu = [{
|
$scope.menu = [{
|
||||||
@ -25,6 +25,19 @@ angular.module('insight.system').controller('HeaderController',
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$scope.getStatus = function(q) {
|
||||||
|
Status.get({
|
||||||
|
q: 'get' + q
|
||||||
|
},
|
||||||
|
function(d) {
|
||||||
|
$scope.loaded = 1;
|
||||||
|
angular.extend($scope, d);
|
||||||
|
},
|
||||||
|
function(e) {
|
||||||
|
$scope.error = 'API ERROR: ' + e.data;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
var _getBlock = function(hash) {
|
var _getBlock = function(hash) {
|
||||||
Block.get({
|
Block.get({
|
||||||
blockHash: hash
|
blockHash: hash
|
||||||
|
|||||||
@ -3,16 +3,29 @@
|
|||||||
var TRANSACTION_DISPLAYED = 10;
|
var TRANSACTION_DISPLAYED = 10;
|
||||||
var BLOCKS_DISPLAYED = 5;
|
var BLOCKS_DISPLAYED = 5;
|
||||||
|
|
||||||
angular.module('insight.system').controller('IndexController',
|
angular.module('flosight.system').controller('IndexController',
|
||||||
function($scope, Global, getSocket, Blocks) {
|
function($scope, Global, getSocket, Blocks) {
|
||||||
$scope.global = Global;
|
$scope.global = Global;
|
||||||
|
|
||||||
var _getBlocks = function() {
|
var _getBlocks = function(loadTxs) {
|
||||||
Blocks.get({
|
Blocks.get({
|
||||||
limit: BLOCKS_DISPLAYED
|
limit: BLOCKS_DISPLAYED
|
||||||
}, function(res) {
|
}, function(res) {
|
||||||
$scope.blocks = res.blocks;
|
$scope.blocks = res.blocks;
|
||||||
$scope.blocksLength = res.length;
|
$scope.blocksLength = res.length;
|
||||||
|
|
||||||
|
if (loadTxs) {
|
||||||
|
TransactionsByBlock.get({
|
||||||
|
block: res.blocks[0].hash
|
||||||
|
}, function(txs){
|
||||||
|
for (var i = txs.length; i > 0; i--){
|
||||||
|
$scope.txs.unshift(txs[i]);
|
||||||
|
if (parseInt($scope.txs.length, 10) >= parseInt(TRANSACTION_DISPLAYED, 10)) {
|
||||||
|
$scope.txs = $scope.txs.splice(0, TRANSACTION_DISPLAYED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -28,7 +41,7 @@ angular.module('insight.system').controller('IndexController',
|
|||||||
});
|
});
|
||||||
|
|
||||||
socket.on('block', function() {
|
socket.on('block', function() {
|
||||||
_getBlocks();
|
_getBlocks(false);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -36,15 +49,13 @@ angular.module('insight.system').controller('IndexController',
|
|||||||
_startSocket();
|
_startSocket();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$scope.humanSince = function(time) {
|
$scope.humanSince = function(time) {
|
||||||
var m = moment.unix(time);
|
var m = moment.unix(time);
|
||||||
return m.max().fromNow();
|
return m.max().fromNow();
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.index = function() {
|
$scope.index = function() {
|
||||||
_getBlocks();
|
_getBlocks(true);
|
||||||
_startSocket();
|
_startSocket();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('insight.messages').controller('VerifyMessageController',
|
angular.module('flosight.messages').controller('VerifyMessageController',
|
||||||
function($scope, $http) {
|
function($scope, $http, Api) {
|
||||||
$scope.message = {
|
$scope.message = {
|
||||||
address: '',
|
address: '',
|
||||||
signature: '',
|
signature: '',
|
||||||
@ -22,7 +22,7 @@ angular.module('insight.messages').controller('VerifyMessageController',
|
|||||||
$scope.verify = function() {
|
$scope.verify = function() {
|
||||||
$scope.verification.status = 'loading';
|
$scope.verification.status = 'loading';
|
||||||
$scope.verification.address = $scope.message.address;
|
$scope.verification.address = $scope.message.address;
|
||||||
$http.post('/api/messages/verify', $scope.message)
|
$http.post(Api.apiPrefix + '/messages/verify', $scope.message)
|
||||||
.success(function(data, status, headers, config) {
|
.success(function(data, status, headers, config) {
|
||||||
if(typeof(data.result) != 'boolean') {
|
if(typeof(data.result) != 'boolean') {
|
||||||
// API returned 200 but result was not true or false
|
// API returned 200 but result was not true or false
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('insight.system').controller('ScannerController',
|
angular.module('flosight.system').controller('ScannerController',
|
||||||
function($scope, $rootScope, $modalInstance, Global) {
|
function($scope, $rootScope, $modalInstance, Global) {
|
||||||
$scope.global = Global;
|
$scope.global = Global;
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ angular.module('insight.system').controller('ScannerController',
|
|||||||
qrcode.callback = function(data) {
|
qrcode.callback = function(data) {
|
||||||
_scanStop();
|
_scanStop();
|
||||||
|
|
||||||
var str = (data.indexOf('bitcoin:') === 0) ? data.substring(8) : data;
|
var str = (data.indexOf('flo:') === 0) ? data.substring(8) : data;
|
||||||
console.log('QR code detected: ' + str);
|
console.log('QR code detected: ' + str);
|
||||||
$searchInput
|
$searchInput
|
||||||
.val(str)
|
.val(str)
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('insight.search').controller('SearchController',
|
angular.module('flosight.search').controller('SearchController',
|
||||||
function($scope, $routeParams, $location, $timeout, Global, Block, Transaction, Address, BlockByHeight) {
|
function($scope, $routeParams, $location, $timeout, Global, Block, Transaction, Address, BlockByHeight) {
|
||||||
$scope.global = Global;
|
$scope.global = Global;
|
||||||
$scope.loading = false;
|
$scope.loading = false;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('insight.status').controller('StatusController',
|
angular.module('flosight.status').controller('StatusController',
|
||||||
function($scope, $routeParams, $location, Global, Status, Sync, getSocket) {
|
function($scope, $routeParams, $location, Global, Status, Sync, getSocket) {
|
||||||
$scope.global = Global;
|
$scope.global = Global;
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('insight.transactions').controller('transactionsController',
|
angular.module('flosight.transactions').controller('transactionsController',
|
||||||
function($scope, $rootScope, $routeParams, $location, Global, Transaction, TransactionsByBlock, TransactionsByAddress) {
|
function($scope, $rootScope, $routeParams, $location, Global, Transaction, TransactionsByBlock, TransactionsByAddress) {
|
||||||
$scope.global = Global;
|
$scope.global = Global;
|
||||||
$scope.loading = false;
|
$scope.loading = false;
|
||||||
@ -174,8 +174,8 @@ function($scope, $rootScope, $routeParams, $location, Global, Transaction, Trans
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
angular.module('insight.transactions').controller('SendRawTransactionController',
|
angular.module('flosight.transactions').controller('SendRawTransactionController',
|
||||||
function($scope, $http) {
|
function($scope, $http, Api) {
|
||||||
$scope.transaction = '';
|
$scope.transaction = '';
|
||||||
$scope.status = 'ready'; // ready|loading|sent|error
|
$scope.status = 'ready'; // ready|loading|sent|error
|
||||||
$scope.txid = '';
|
$scope.txid = '';
|
||||||
@ -189,7 +189,7 @@ angular.module('insight.transactions').controller('SendRawTransactionController'
|
|||||||
rawtx: $scope.transaction
|
rawtx: $scope.transaction
|
||||||
};
|
};
|
||||||
$scope.status = 'loading';
|
$scope.status = 'loading';
|
||||||
$http.post('/api/tx/send', postData)
|
$http.post(Api.apiPrefix + '/tx/send', postData)
|
||||||
.success(function(data, status, headers, config) {
|
.success(function(data, status, headers, config) {
|
||||||
if(typeof(data.txid) != 'string') {
|
if(typeof(data.txid) != 'string') {
|
||||||
// API returned 200 but the format is not known
|
// API returned 200 but the format is not known
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
var ZeroClipboard = window.ZeroClipboard;
|
var ZeroClipboard = window.ZeroClipboard;
|
||||||
|
|
||||||
angular.module('insight')
|
angular.module('flosight')
|
||||||
.directive('scroll', function ($window) {
|
.directive('scroll', function ($window) {
|
||||||
return function(scope, element, attrs) {
|
return function(scope, element, attrs) {
|
||||||
angular.element($window).bind('scroll', function() {
|
angular.element($window).bind('scroll', function() {
|
||||||
@ -40,36 +40,31 @@ angular.module('insight')
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
.directive('clipCopy', function() {
|
.directive('dataClipboardText', function() {
|
||||||
ZeroClipboard.config({
|
|
||||||
moviePath: '/lib/zeroclipboard/ZeroClipboard.swf',
|
|
||||||
trustedDomains: ['*'],
|
|
||||||
allowScriptAccess: 'always',
|
|
||||||
forceHandCursor: true
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
restric: 'A',
|
restric: 'A',
|
||||||
scope: { clipCopy: '=clipCopy' },
|
scope: { dataClipboardText: '=dataClipboardText' },
|
||||||
template: '<div class="tooltip fade right in"><div class="tooltip-arrow"></div><div class="tooltip-inner">Copied!</div></div>',
|
template: '<div class="tooltip fade right in"><div class="tooltip-arrow"></div><div class="tooltip-inner">Copied!</div></div>',
|
||||||
link: function(scope, elm) {
|
link: function(scope, elm) {
|
||||||
var clip = new ZeroClipboard(elm);
|
var clip = new ClipboardJS(elm, {
|
||||||
|
text: scope.dataClipboardText
|
||||||
clip.on('load', function(client) {
|
|
||||||
var onMousedown = function(client) {
|
|
||||||
client.setText(scope.clipCopy);
|
|
||||||
};
|
|
||||||
|
|
||||||
client.on('mousedown', onMousedown);
|
|
||||||
|
|
||||||
scope.$on('$destroy', function() {
|
|
||||||
client.off('mousedown', onMousedown);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
clip.on('noFlash wrongflash', function() {
|
// clip.on('load', function(client) {
|
||||||
return elm.remove();
|
// var onMousedown = function(client) {
|
||||||
});
|
// client.setText(scope.clipCopy);
|
||||||
|
// };
|
||||||
|
|
||||||
|
// client.on('mousedown', onMousedown);
|
||||||
|
|
||||||
|
// scope.$on('$destroy', function() {
|
||||||
|
// client.off('mousedown', onMousedown);
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
|
||||||
|
// clip.on('noFlash wrongflash', function() {
|
||||||
|
// return elm.remove();
|
||||||
|
// });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('insight')
|
angular.module('flosight')
|
||||||
.filter('startFrom', function() {
|
.filter('startFrom', function() {
|
||||||
return function(input, start) {
|
return function(input, start) {
|
||||||
start = +start; //parse to int
|
start = +start; //parse to int
|
||||||
|
|||||||
@ -2,5 +2,5 @@
|
|||||||
|
|
||||||
angular.element(document).ready(function() {
|
angular.element(document).ready(function() {
|
||||||
// Init the app
|
// Init the app
|
||||||
// angular.bootstrap(document, ['insight']);
|
// angular.bootstrap(document, ['flosight']);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('insight.address').factory('Address',
|
angular.module('flosight.address').factory('Address',
|
||||||
function($resource) {
|
function($resource, Api) {
|
||||||
return $resource('/api/addr/:addrStr/?noTxList=1', {
|
return $resource(Api.apiPrefix + '/addr/:addrStr/?noTxList=1', {
|
||||||
addrStr: '@addStr'
|
addrStr: '@addStr'
|
||||||
}, {
|
}, {
|
||||||
get: {
|
get: {
|
||||||
@ -21,3 +21,4 @@ angular.module('insight.address').factory('Address',
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
9
public/src/js/services/api.js
Normal file
9
public/src/js/services/api.js
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular.module('flosight.api')
|
||||||
|
.factory('Api',
|
||||||
|
function() {
|
||||||
|
return {
|
||||||
|
apiPrefix: '/api'
|
||||||
|
}
|
||||||
|
});
|
||||||
@ -1,9 +1,9 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('insight.blocks')
|
angular.module('flosight.blocks')
|
||||||
.factory('Block',
|
.factory('Block',
|
||||||
function($resource) {
|
function($resource, Api) {
|
||||||
return $resource('/api/block/:blockHash', {
|
return $resource(Api.apiPrefix + '/block/:blockHash', {
|
||||||
blockHash: '@blockHash'
|
blockHash: '@blockHash'
|
||||||
}, {
|
}, {
|
||||||
get: {
|
get: {
|
||||||
@ -22,10 +22,10 @@ angular.module('insight.blocks')
|
|||||||
});
|
});
|
||||||
})
|
})
|
||||||
.factory('Blocks',
|
.factory('Blocks',
|
||||||
function($resource) {
|
function($resource, Api) {
|
||||||
return $resource('/api/blocks');
|
return $resource(Api.apiPrefix + '/blocks');
|
||||||
})
|
})
|
||||||
.factory('BlockByHeight',
|
.factory('BlockByHeight',
|
||||||
function($resource) {
|
function($resource, Api) {
|
||||||
return $resource('/api/block-index/:blockHeight');
|
return $resource(Api.apiPrefix + '/block-index/:blockHeight');
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('insight.currency').factory('Currency',
|
angular.module('flosight.currency').factory('Currency',
|
||||||
function($resource) {
|
function($resource, Api) {
|
||||||
return $resource('/api/currency');
|
return $resource(Api.apiPrefix + '/currency');
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
//Global service for global variables
|
//Global service for global variables
|
||||||
angular.module('insight.system')
|
angular.module('flosight.system')
|
||||||
.factory('Global',[
|
.factory('Global',[
|
||||||
function() {
|
function() {
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
.factory('Version',
|
.factory('Version',
|
||||||
function($resource) {
|
function($resource, Api) {
|
||||||
return $resource('/api/version');
|
return $resource(Api.apiPrefix + '/version');
|
||||||
});
|
});
|
||||||
|
|||||||
@ -39,8 +39,9 @@ ScopedSocket.prototype.on = function(event, callback) {
|
|||||||
ScopedSocket.prototype.emit = function(event, data, callback) {
|
ScopedSocket.prototype.emit = function(event, data, callback) {
|
||||||
var socket = this.socket;
|
var socket = this.socket;
|
||||||
var $rootScope = this.$rootScope;
|
var $rootScope = this.$rootScope;
|
||||||
|
var args = Array.prototype.slice.call(arguments);
|
||||||
|
|
||||||
socket.emit(event, data, function() {
|
args.push(function() {
|
||||||
var args = arguments;
|
var args = arguments;
|
||||||
$rootScope.$apply(function() {
|
$rootScope.$apply(function() {
|
||||||
if (callback) {
|
if (callback) {
|
||||||
@ -48,9 +49,11 @@ ScopedSocket.prototype.emit = function(event, data, callback) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
socket.emit.apply(socket, args);
|
||||||
};
|
};
|
||||||
|
|
||||||
angular.module('insight.socket').factory('getSocket',
|
angular.module('flosight.socket').factory('getSocket',
|
||||||
function($rootScope) {
|
function($rootScope) {
|
||||||
var socket = io.connect(null, {
|
var socket = io.connect(null, {
|
||||||
'reconnect': true,
|
'reconnect': true,
|
||||||
|
|||||||
@ -1,17 +1,17 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('insight.status')
|
angular.module('flosight.status')
|
||||||
.factory('Status',
|
.factory('Status',
|
||||||
function($resource) {
|
function($resource, Api) {
|
||||||
return $resource('/api/status', {
|
return $resource(Api.apiPrefix + '/status', {
|
||||||
q: '@q'
|
q: '@q'
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
.factory('Sync',
|
.factory('Sync',
|
||||||
function($resource) {
|
function($resource, Api) {
|
||||||
return $resource('/api/sync');
|
return $resource(Api.apiPrefix + '/sync');
|
||||||
})
|
})
|
||||||
.factory('PeerSync',
|
.factory('PeerSync',
|
||||||
function($resource) {
|
function($resource, Api) {
|
||||||
return $resource('/api/peer');
|
return $resource(Api.apiPrefix + '/peer');
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('insight.transactions')
|
angular.module('flosight.transactions')
|
||||||
.factory('Transaction',
|
.factory('Transaction',
|
||||||
function($resource) {
|
function($resource, Api) {
|
||||||
return $resource('/api/tx/:txId', {
|
return $resource(Api.apiPrefix + '/tx/:txId', {
|
||||||
txId: '@txId'
|
txId: '@txId'
|
||||||
}, {
|
}, {
|
||||||
get: {
|
get: {
|
||||||
@ -22,18 +22,18 @@ angular.module('insight.transactions')
|
|||||||
});
|
});
|
||||||
})
|
})
|
||||||
.factory('TransactionsByBlock',
|
.factory('TransactionsByBlock',
|
||||||
function($resource) {
|
function($resource, Api) {
|
||||||
return $resource('/api/txs', {
|
return $resource(Api.apiPrefix + '/txs', {
|
||||||
block: '@block'
|
block: '@block'
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
.factory('TransactionsByAddress',
|
.factory('TransactionsByAddress',
|
||||||
function($resource) {
|
function($resource, Api) {
|
||||||
return $resource('/api/txs', {
|
return $resource(Api.apiPrefix + '/txs', {
|
||||||
address: '@address'
|
address: '@address'
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
.factory('Transactions',
|
.factory('Transactions',
|
||||||
function($resource) {
|
function($resource, Api) {
|
||||||
return $resource('/api/txs');
|
return $resource(Api.apiPrefix + '/txs');
|
||||||
});
|
});
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
9
public/src/templates/api.js
Normal file
9
public/src/templates/api.js
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular.module('flosight.api')
|
||||||
|
.factory('Api',
|
||||||
|
function() {
|
||||||
|
return {
|
||||||
|
apiPrefix: '/INSIGHT_API_PREFIX'
|
||||||
|
}
|
||||||
|
});
|
||||||
@ -1,4 +1,4 @@
|
|||||||
<div data-ng-include src="'/views/includes/connection.html'"></div>
|
<div data-ng-include src="'views/includes/connection.html'"></div>
|
||||||
<div class="jumbotron">
|
<div class="jumbotron">
|
||||||
<h1>Ooops!</h1>
|
<h1>Ooops!</h1>
|
||||||
<h2 translate class="text-muted">404 Page not found :(</h2>
|
<h2 translate class="text-muted">404 Page not found :(</h2>
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
<div data-ng-include src="'/views/includes/connection.html'"></div>
|
<div data-ng-include src="'views/includes/connection.html'"></div>
|
||||||
<section data-ng-controller="AddressController" data-ng-init="findOne()">
|
<section data-ng-controller="AddressController" data-ng-init="findOne()">
|
||||||
<div class="secondary_navbar hidden-xs hidden-sm" scroll data-ng-class="{'hidden': !secondaryNavbar}" data-ng-show="address.addrStr" data-ng-init="hideSNavbar=0">
|
<div class="secondary_navbar hidden-xs hidden-sm" scroll data-ng-class="{'hidden': !secondaryNavbar}" data-ng-show="address.addrStr" data-ng-init="hideSNavbar=0">
|
||||||
<div class="container" data-ng-if="!hideSNavbar">
|
<div class="container" data-ng-if="!hideSNavbar">
|
||||||
<div class="col-md-8 text-left">
|
<div class="col-md-8 text-left">
|
||||||
<h3 translate>Address</h3> {{address.addrStr}}
|
<h3 translate>Address</h3> {{address.addrStr}}
|
||||||
<span class="btn-copy" clip-copy="address.addrStr"></span>
|
<button class="btn-copy" data-clipboard-text="{{address.addrStr}}"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<span class="txvalues txvalues-primary"><strong translate>Final Balance</strong> {{$root.currency.getConvertion(address.balance) || address.balance + ' BTC' }}</span>
|
<span class="txvalues txvalues-primary"><strong translate>Final Balance</strong> {{$root.currency.getConvertion(address.balance) || address.balance + ' BTC' }}</span>
|
||||||
@ -25,7 +25,7 @@
|
|||||||
<div class="well well-sm ellipsis">
|
<div class="well well-sm ellipsis">
|
||||||
<strong translate>Address</strong>
|
<strong translate>Address</strong>
|
||||||
<span class="text-muted">{{address.addrStr}}</span>
|
<span class="text-muted">{{address.addrStr}}</span>
|
||||||
<span class="btn-copy" clip-copy="address.addrStr"></span>
|
<button class="btn-copy" data-clipboard-text="{{address.addrStr}}"></button>
|
||||||
</div>
|
</div>
|
||||||
<h2 translate>Summary <small>confirmed</small></h2>
|
<h2 translate>Summary <small>confirmed</small></h2>
|
||||||
<div class="row" data-ng-hide="!address.addrStr">
|
<div class="row" data-ng-hide="!address.addrStr">
|
||||||
@ -74,7 +74,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div data-ng-if="address.addrStr" data-ng-controller="transactionsController" data-ng-init="load('address')">
|
<div data-ng-if="address.addrStr" data-ng-controller="transactionsController" data-ng-init="load('address')">
|
||||||
<h2 translate>Transactions</h2>
|
<h2 translate>Transactions</h2>
|
||||||
<div data-ng-include src="'/views/transaction/list.html'" when-scrolled="loadMore()"></div>
|
<div data-ng-include src="'views/transaction/list.html'" when-scrolled="loadMore()"></div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
<div data-ng-include src="'/views/includes/connection.html'"></div>
|
<div data-ng-include src="'views/includes/connection.html'"></div>
|
||||||
<section data-ng-controller="BlocksController" data-ng-init="findOne()">
|
<section data-ng-controller="BlocksController" data-ng-init="findOne()">
|
||||||
<div class="secondary_navbar hidden-xs hidden-sm" scroll data-ng-class="{'hidden': !secondaryNavbar}" data-ng-show="block.hash" data-ng-init="hideSNavbar=0">
|
<div class="secondary_navbar hidden-xs hidden-sm" scroll data-ng-class="{'hidden': !secondaryNavbar}" data-ng-show="block.hash" data-ng-init="hideSNavbar=0">
|
||||||
<div class="container" data-ng-if="!hideSNavbar">
|
<div class="container" data-ng-if="!hideSNavbar">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-1">
|
<div class="col-md-1">
|
||||||
<a href="/block/{{block.previousblockhash}}"><span class="lead glyphicon glyphicon-chevron-left"></span></a>
|
<a href="block/{{block.previousblockhash}}"><span class="lead glyphicon glyphicon-chevron-left"></span></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -15,12 +15,12 @@
|
|||||||
<strong>Hash</strong> {{block.hash}}
|
<strong>Hash</strong> {{block.hash}}
|
||||||
</p>
|
</p>
|
||||||
<div class="col-md-1 text-left">
|
<div class="col-md-1 text-left">
|
||||||
<span class="btn-copy" clip-copy="block.hash"></span>
|
<button class="btn-copy" data-clipboard-text="{{block.hash}}"></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-1">
|
<div class="col-md-1">
|
||||||
<a data-ng-show="block.nextblockhash" href="/block/{{block.nextblockhash}}"><span class="lead glyphicon glyphicon-chevron-right"></span></a>
|
<a data-ng-show="block.nextblockhash" href="block/{{block.nextblockhash}}"><span class="lead glyphicon glyphicon-chevron-right"></span></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div> <!-- END OF CONTAINER -->
|
</div> <!-- END OF CONTAINER -->
|
||||||
@ -39,7 +39,7 @@
|
|||||||
<div class="well well-sm ellipsis">
|
<div class="well well-sm ellipsis">
|
||||||
<strong>BlockHash</strong>
|
<strong>BlockHash</strong>
|
||||||
<span class="txid text-muted">{{block.hash}}</span>
|
<span class="txid text-muted">{{block.hash}}</span>
|
||||||
<span class="btn-copy" clip-copy="block.hash"></span>
|
<button class="btn-copy" data-clipboard-text="{{block.hash}}"></button>
|
||||||
</div>
|
</div>
|
||||||
<h2 translate>Summary</h2>
|
<h2 translate>Summary</h2>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -75,14 +75,14 @@
|
|||||||
<td><strong>Merkle Root</strong></td>
|
<td><strong>Merkle Root</strong></td>
|
||||||
<td class="text-right text-muted">
|
<td class="text-right text-muted">
|
||||||
<div class="ellipsis">
|
<div class="ellipsis">
|
||||||
<span class="btn-copy" clip-copy="block.merkleroot"></span>
|
<button class="btn-copy" data-clipboard-text="{{block.merkleroot}}"></button>
|
||||||
<span>{{block.merkleroot}}</span>
|
<span>{{block.merkleroot}}</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr data-ng-show="block.previousblockhash">
|
<tr data-ng-show="block.previousblockhash">
|
||||||
<td><strong translate>Previous Block</strong></td>
|
<td><strong translate>Previous Block</strong></td>
|
||||||
<td class="text-right"><a href="/block/{{block.previousblockhash}}">{{block.height-1}}</a></td>
|
<td class="text-right"><a href="block/{{block.previousblockhash}}">{{block.height-1}}</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@ -112,7 +112,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr data-ng-show="block.nextblockhash">
|
<tr data-ng-show="block.nextblockhash">
|
||||||
<td><strong translate>Next Block</strong></td>
|
<td><strong translate>Next Block</strong></td>
|
||||||
<td class="text-right"><a href="/block/{{block.nextblockhash}}">{{block.height+1}}</a></td>
|
<td class="text-right"><a href="block/{{block.nextblockhash}}">{{block.height+1}}</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@ -121,7 +121,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div data-ng-if="block.hash" data-ng-controller="transactionsController" data-ng-init="load('block')">
|
<div data-ng-if="block.hash" data-ng-controller="transactionsController" data-ng-init="load('block')">
|
||||||
<h3 translate>Transactions</h3>
|
<h3 translate>Transactions</h3>
|
||||||
<div data-ng-include src="'/views/transaction/list.html'" when-scrolled="loadMore()"></div>
|
<div data-ng-include src="'views/transaction/list.html'" when-scrolled="loadMore()"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
<div data-ng-include src="'/views/includes/connection.html'"></div>
|
<div data-ng-include src="'views/includes/connection.html'"></div>
|
||||||
<section data-ng-controller="BlocksController" data-ng-init="list()">
|
<section data-ng-controller="BlocksController" data-ng-init="list()">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-gray col-gray-fixed">
|
<div class="col-xs-12 col-gray col-gray-fixed">
|
||||||
@ -22,8 +22,8 @@
|
|||||||
<p class="text-center m20v" data-ng-show="!pagination.isToday && !loading">{{humanSince(pagination.currentTs)}}
|
<p class="text-center m20v" data-ng-show="!pagination.isToday && !loading">{{humanSince(pagination.currentTs)}}
|
||||||
<p class="text-center m20v" data-ng-show="loading"> </p>
|
<p class="text-center m20v" data-ng-show="loading"> </p>
|
||||||
<div class="m50v text-center">
|
<div class="m50v text-center">
|
||||||
<a class="btn btn-primary" href="/blocks-date/{{pagination.prev}}"><small>← {{pagination.prev}}</small></a>
|
<a class="btn btn-primary" href="blocks-date/{{pagination.prev}}"><small>← {{pagination.prev}}</small></a>
|
||||||
<a class="btn btn-primary" href="/blocks-date/{{pagination.next}}" data-ng-show="!pagination.isToday"><small>{{pagination.next}} →</small></a>
|
<a class="btn btn-primary" href="blocks-date/{{pagination.next}}" data-ng-show="!pagination.isToday"><small>{{pagination.next}} →</small></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -49,7 +49,7 @@
|
|||||||
<td colspan="5"><span translate>Waiting for blocks...</span> <span class="loader-gif"></span></td>
|
<td colspan="5"><span translate>Waiting for blocks...</span> <span class="loader-gif"></span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="fader" data-ng-repeat='b in blocks'>
|
<tr class="fader" data-ng-repeat='b in blocks'>
|
||||||
<td><a href="/block/{{b.hash}}">{{b.height}}</a></td>
|
<td><a href="block/{{b.hash}}">{{b.height}}</a></td>
|
||||||
<td>{{b.time * 1000 | date:'medium'}}</td>
|
<td>{{b.time * 1000 | date:'medium'}}</td>
|
||||||
<td class="text-right">{{b.txlength}}</td>
|
<td class="text-right">{{b.txlength}}</td>
|
||||||
<td class="text-right hidden-xs"><a href="{{b.poolInfo.url}}" title="{{b.poolInfo.poolName}}" target="_blank" data-ng-show="b.poolInfo">{{b.poolInfo.poolName}}</a></td>
|
<td class="text-right hidden-xs"><a href="{{b.poolInfo.url}}" title="{{b.poolInfo.poolName}}" target="_blank" data-ng-show="b.poolInfo">{{b.poolInfo.poolName}}</a></td>
|
||||||
@ -58,8 +58,8 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div data-ng-if="pagination.more">
|
<div data-ng-if="pagination.more">
|
||||||
<a class="btn btn-primary" href="/blocks-date/{{pagination.current}}" data-ng-show="{{before}}">Lastest block from date</a>
|
<a class="btn btn-primary" href="blocks-date/{{pagination.current}}" data-ng-show="{{before}}">Lastest block from date</a>
|
||||||
<a class="btn btn-primary" href="/blocks-date/{{pagination.current}}/{{pagination.moreTs}}">Older blocks from this date</a>
|
<a class="btn btn-primary" href="blocks-date/{{pagination.current}}/{{pagination.moreTs}}">Older blocks from this date</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -7,11 +7,11 @@
|
|||||||
<strong translate>Error!</strong>
|
<strong translate>Error!</strong>
|
||||||
|
|
||||||
<p data-ng-show="!apiOnline" translate>
|
<p data-ng-show="!apiOnline" translate>
|
||||||
Can't connect to bitcoind to get live updates from the p2p network. (Tried connecting to bitcoind at {{host}}:{{port}} and failed.)
|
Can't connect to flod to get live updates from the p2p network. (Tried connecting to flod at {{host}}:{{port}} and failed.)
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p data-ng-show="!serverOnline" translate>
|
<p data-ng-show="!serverOnline" translate>
|
||||||
Can't connect to insight server. Attempting to reconnect...
|
Can't connect to flosight server. Attempting to reconnect...
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p data-ng-show="!clienteOnline" translate>
|
<p data-ng-show="!clienteOnline" translate>
|
||||||
|
|||||||
@ -3,16 +3,16 @@
|
|||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li>
|
<li>
|
||||||
<a href="#" data-ng-click="setCurrency('USD')" data-ng-class="{active: currency.symbol == 'USD'}">USD</a>
|
<a data-ng-click="setCurrency('USD')" data-ng-class="{active: currency.symbol == 'USD'}">USD</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#" data-ng-click="setCurrency('BTC')" data-ng-class="{active: currency.symbol == 'BTC'}">BTC</a>
|
<a data-ng-click="setCurrency('FLO')" data-ng-class="{active: currency.symbol == 'FLO'}">FLO</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#" data-ng-click="setCurrency('mBTC')" data-ng-class="{active: currency.symbol == 'mBTC'}">mBTC</a>
|
<a data-ng-click="setCurrency('mFLO')" data-ng-class="{active: currency.symbol == 'mFLO'}">mFLO</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#" data-ng-click="setCurrency('bits')" data-ng-class="{active: currency.symbol == 'bits'}">bits</a>
|
<a data-ng-click="setCurrency('bits')" data-ng-class="{active: currency.symbol == 'bits'}">bits</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|||||||
@ -7,15 +7,15 @@
|
|||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
</button>
|
</button>
|
||||||
<a class="insight navbar-brand" href="/">insight</a>
|
<a class="flosight navbar-brand" href="." data-ng-init="getStatus('Info')">flosight <sub data-ng-hide="info.network === 'livenet'" style="font-size: 35%">({{info.network}})</sub></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="navbar-collapse collapse" collapse="$root.isCollapsed">
|
<div class="navbar-collapse collapse" collapse="$root.isCollapsed">
|
||||||
<ul class="nav navbar-nav">
|
<ul class="nav navbar-nav">
|
||||||
<li data-ng-repeat="item in menu" ui-route="/{{item.link}}" data-ng-class="{active: $uiRoute}">
|
<li data-ng-repeat="item in menu" ui-route="{{item.link}}" data-ng-class="{active: $uiRoute}">
|
||||||
<a href="/{{item.link}}">{{item.title|translate}}</a>
|
<a href="{{item.link}}">{{item.title|translate}}</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<span class="hidden-xs navbar-form navbar-left" data-ng-include src="'/views/includes/search.html'"></span>
|
<span class="hidden-xs navbar-form navbar-left" data-ng-include src="'views/includes/search.html'"></span>
|
||||||
<ul class="nav navbar-nav navbar-right">
|
<ul class="nav navbar-nav navbar-right">
|
||||||
<li>
|
<li>
|
||||||
<div class="status" data-ng-controller="StatusController">
|
<div class="status" data-ng-controller="StatusController">
|
||||||
@ -38,10 +38,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#" data-ng-click="openScannerModal()"><span class="glyphicon
|
<a data-ng-click="openScannerModal()"><span class="glyphicon
|
||||||
glyphicon-qrcode"></span> Scan</a>
|
glyphicon-qrcode"></span> Scan</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="dropdown" data-ng-controller="CurrencyController" data-ng-include="'/views/includes/currency.html'"></li>
|
<li class="dropdown" data-ng-controller="CurrencyController" data-ng-include="'views/includes/currency.html'"></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,13 +1,13 @@
|
|||||||
<div class="alert alert-danger" data-ng-show="flashMessage">
|
<div class="alert alert-danger" data-ng-show="flashMessage">
|
||||||
{{$root.flashMessage}}
|
{{$root.flashMessage}}
|
||||||
</div>
|
</div>
|
||||||
<div data-ng-include src="'/views/includes/connection.html'"></div>
|
<div data-ng-include src="'views/includes/connection.html'"></div>
|
||||||
<section data-ng-controller="IndexController" data-ng-init="index()">
|
<section data-ng-controller="IndexController" data-ng-init="index()">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div id="home" class="row">
|
<div id="home" class="row">
|
||||||
<div class="col-xs-12 col-md-8">
|
<div class="col-xs-12 col-md-8">
|
||||||
|
|
||||||
<div id="search-form-mobile" class="visible-xs" data-ng-include src="'/views/includes/search.html'"></div>
|
<div id="search-form-mobile" class="visible-xs" data-ng-include src="'views/includes/search.html'"></div>
|
||||||
|
|
||||||
<h1 translate>Latest Blocks</h1>
|
<h1 translate>Latest Blocks</h1>
|
||||||
<table class="table table-hover table-striped" style="table-layout: fixed">
|
<table class="table table-hover table-striped" style="table-layout: fixed">
|
||||||
@ -24,7 +24,7 @@
|
|||||||
<tr data-ng-show="!blocks.length"><td colspan="4" translate>Waiting for blocks...</td></tr>
|
<tr data-ng-show="!blocks.length"><td colspan="4" translate>Waiting for blocks...</td></tr>
|
||||||
<tr class="fader" data-ng-repeat='b in blocks'>
|
<tr class="fader" data-ng-repeat='b in blocks'>
|
||||||
<td>
|
<td>
|
||||||
<a href="/block/{{b.hash}}">{{b.height}}</a>
|
<a href="block/{{b.hash}}">{{b.height}}</a>
|
||||||
</td>
|
</td>
|
||||||
<td><span class="ellipsis">{{humanSince(b.time)}}</span></td>
|
<td><span class="ellipsis">{{humanSince(b.time)}}</span></td>
|
||||||
<td class="text-right">{{b.txlength}}</td>
|
<td class="text-right">{{b.txlength}}</td>
|
||||||
@ -34,7 +34,7 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="btn-more">
|
<div class="btn-more">
|
||||||
<a href="/blocks" class="btn btn-default" translate>See all blocks</a>
|
<a href="blocks" class="btn btn-default" translate>See all blocks</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h2 translate>Latest Transactions</h2>
|
<h2 translate>Latest Transactions</h2>
|
||||||
@ -44,15 +44,17 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th>Hash</th>
|
<th>Hash</th>
|
||||||
<th class="text-right" translate>Value Out</th>
|
<th class="text-right" translate>Value Out</th>
|
||||||
|
<th class="text-right" translate>floData</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr data-ng-show="!txs.length"><td colspan="3" translate>Waiting for transactions...</td></tr>
|
<tr data-ng-show="!txs.length"><td colspan="3" translate>Waiting for transactions...</td></tr>
|
||||||
<tr class="fader" data-ng-repeat='tx in txs'>
|
<tr class="fader" data-ng-repeat='tx in txs'>
|
||||||
<td>
|
<td>
|
||||||
<a class="ellipsis" href="/tx/{{tx.txid}}">{{tx.txid}}</a>
|
<a class="ellipsis" href="tx/{{tx.txid}}">{{tx.txid}}</a>
|
||||||
</td>
|
</td>
|
||||||
<td class="text-right"><span class="ellipsis">{{$root.currency.getConvertion(tx.valueOut) || tx.valueOut + ' BTC'}}</span></td>
|
<td class="text-right"><span class="ellipsis">{{$root.currency.getConvertion(tx.valueOut) || tx.valueOut + ' BTC'}}</span></td>
|
||||||
|
<td class="text-right"><span class="ellipsis">{{tx.floData}}</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@ -61,14 +63,14 @@
|
|||||||
|
|
||||||
<div class="col-xs-12 col-md-4 col-gray">
|
<div class="col-xs-12 col-md-4 col-gray">
|
||||||
<h2 translate>About</h2>
|
<h2 translate>About</h2>
|
||||||
<p translate><strong>insight</strong> is an <a href="http://live.insight.is/"
|
<p translate><strong>flosight</strong> is an <a href="https://flocha.in/"
|
||||||
target="_blank">open-source Bitcoin blockchain explorer</a> with complete REST and websocket APIs that can be used for writing web wallets and other apps that need more advanced blockchain queries than provided by bitcoind RPC. Check out the <a href="http://github.com/bitpay/insight" target="_blank">source code</a>.</p>
|
target="_blank">open-source Flo blockchain explorer</a> with complete REST and websocket APIs that can be used for writing web wallets and other apps that need more advanced blockchain queries than provided by flod RPC. Check out the <a href="https://github.com/oipwg/flosight-ui" target="_blank">source code</a>.</p>
|
||||||
<p translate><strong>insight</strong> is still in development, so be sure to report any bugs and provide feedback for improvement at our <a href="https://github.com/bitpay/insight/issues" target="_blank">github issue tracker</a>.</p>
|
<p translate><strong>flosight</strong> is still in development, so be sure to report any bugs and provide feedback for improvement at our <a href="https://github.com/oipwg/flosight-ui/issues" target="_blank">github issue tracker</a>.</p>
|
||||||
<div id="powered" class="row">
|
<div id="powered" class="row">
|
||||||
<div class="powered-text">
|
<div class="powered-text">
|
||||||
<small class="text-muted" translate>Powered by</small>
|
<small class="text-muted" translate>Powered by</small>
|
||||||
</div>
|
</div>
|
||||||
<a href="http://bitcore.io" target="_blank" class="bitcore" title="Bitcore"></a>
|
<a href="http://bitcore.io" target="_blank" class="flocore" title="Bitcore"></a>
|
||||||
<a href="http://angularjs.org" target="_blank" class="angularjs" title="AngularJS"></a>
|
<a href="http://angularjs.org" target="_blank" class="angularjs" title="AngularJS"></a>
|
||||||
<a href="https://code.google.com/p/leveldb/" target="_blank" class="leveldb" title="LevelDB"></a>
|
<a href="https://code.google.com/p/leveldb/" target="_blank" class="leveldb" title="LevelDB"></a>
|
||||||
<a href="http://nodejs.org" target="_blank" class="nodejs" title="NodeJs"></a>
|
<a href="http://nodejs.org" target="_blank" class="nodejs" title="NodeJs"></a>
|
||||||
|
|||||||
@ -70,11 +70,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12 col-md-4 col-gray">
|
<div class="col-xs-12 col-md-4 col-gray">
|
||||||
<p translate>
|
<p translate>
|
||||||
Bitcoin comes with a way of signing arbitrary messages.
|
Flo comes with a way of signing arbitrary messages.
|
||||||
</p>
|
</p>
|
||||||
<p translate>
|
<p translate>
|
||||||
This form can be used to verify that a message comes from
|
This form can be used to verify that a message comes from a specific Flo address.
|
||||||
a specific Bitcoin address.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
<div data-ng-include src="'/views/includes/connection.html'"></div>
|
<div data-ng-include src="'views/includes/connection.html'"></div>
|
||||||
<section>
|
<section>
|
||||||
<div class="page-header">
|
<div class="page-header">
|
||||||
<h1 translate>Application Status</h1>
|
<h1 translate>Application Status</h1>
|
||||||
@ -60,66 +60,25 @@
|
|||||||
|
|
||||||
<h2 translate>Last Block</h2>
|
<h2 translate>Last Block</h2>
|
||||||
<table class="table" style="table-layout: fixed" data-ng-controller="StatusController" data-ng-init="getStatus('LastBlockHash')">
|
<table class="table" style="table-layout: fixed" data-ng-controller="StatusController" data-ng-init="getStatus('LastBlockHash')">
|
||||||
<thead data-ng-include src="'/views/includes/infoStatus.html'"></thead>
|
<thead data-ng-include src="'views/includes/infoStatus.html'"></thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td translate>Last Block Hash (Bitcoind)</td>
|
<td translate>Last Block Hash (Flod)</td>
|
||||||
<td class="text-right ellipsis"><a href="/block/{{lastblockhash}}">{{lastblockhash}}</a></td>
|
<td class="text-right ellipsis"><a href="block/{{lastblockhash}}">{{lastblockhash}}</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td translate>Current Blockchain Tip (insight)</td>
|
<td translate>Current Blockchain Tip (flosight)</td>
|
||||||
<td class="text-right ellipsis"><a href="/block/{{syncTipHash}}">{{syncTipHash}}</a></td>
|
<td class="text-right ellipsis"><a href="block/{{syncTipHash}}">{{syncTipHash}}</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<h2 translate>Transaction Output Set Information</h2>
|
|
||||||
<div data-ng-controller="StatusController">
|
|
||||||
<button data-ng-click="txoutLoading=1;getStatus('TxOutSetInfo')" class="btn btn-default" data-ng-show="!txoutsetinfo.height">
|
|
||||||
<span translate>Show Transaction Output data</span>
|
|
||||||
<span data-ng-show="txoutLoading" class="glyphicon glyphicon-refresh icon-rotate"></span>
|
|
||||||
</button >
|
|
||||||
|
|
||||||
<table class="table" data-ng-show="txoutsetinfo.height" style="table-layout: fixed" >
|
|
||||||
<thead data-ng-include src="'/views/includes/infoStatus.html'"></thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td translate>Height</td>
|
|
||||||
<td class="text-right"><a href="/block-index/{{txoutsetinfo.height}}">{{txoutsetinfo.height}}</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td translate>Best Block</td>
|
|
||||||
<td class="text-right ellipsis"><a href="/block/{{txoutsetinfo.bestblock}}">{{txoutsetinfo.bestblock}}</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td translate>Transactions</td>
|
|
||||||
<td class="text-right"> {{txoutsetinfo.transactions}}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td translate>Transaction Outputs</td>
|
|
||||||
<td class="text-right">{{txoutsetinfo.txouts}}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td translate>Bytes Serialized</td>
|
|
||||||
<td class="text-right">{{txoutsetinfo.bytes_serialized}}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td translate>Hash Serialized</td>
|
|
||||||
<td class="text-right ellipsis">{{txoutsetinfo.hash_serialized}}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td translate>Total Amount</td>
|
|
||||||
<td class="text-right">{{txoutsetinfo.total_amount}}</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div> <!-- END OF COL-8 -->
|
</div> <!-- END OF COL-8 -->
|
||||||
|
|
||||||
<div class="col-xs-12 col-md-4 col-gray">
|
<div class="col-xs-12 col-md-4 col-gray">
|
||||||
<h2 translate>Bitcoin node information</h2>
|
<h2 translate>Flo node information</h2>
|
||||||
<table class="table" data-ng-controller="StatusController" data-ng-init="getStatus('Info')">
|
<table class="table" data-ng-controller="StatusController" data-ng-init="getStatus('Info')">
|
||||||
<thead data-ng-include src="'/views/includes/infoStatus.html'"></thead>
|
<thead data-ng-include src="'views/includes/infoStatus.html'"></thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td translate>Version</td>
|
<td translate>Version</td>
|
||||||
@ -131,7 +90,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td translate>Blocks</td>
|
<td translate>Blocks</td>
|
||||||
<td class="text-right"><a href="/block-index/{{info.blocks}}">{{info.blocks}}</a></td>
|
<td class="text-right"><a href="block-index/{{info.blocks}}">{{info.blocks}}</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td translate>Time Offset</td>
|
<td translate>Time Offset</td>
|
||||||
@ -146,8 +105,8 @@
|
|||||||
<td class="text-right">{{info.difficulty}}</td>
|
<td class="text-right">{{info.difficulty}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td translate>Testnet</td>
|
<td translate>Network</td>
|
||||||
<td class="text-right">{{info.testnet}}</td>
|
<td class="text-right">{{info.network}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td translate>Proxy setting</td>
|
<td translate>Proxy setting</td>
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
<div data-ng-include src="'/views/includes/connection.html'"></div>
|
<div data-ng-include src="'views/includes/connection.html'"></div>
|
||||||
<section data-ng-controller="transactionsController" data-ng-init="findThis()">
|
<section data-ng-controller="transactionsController" data-ng-init="findThis()">
|
||||||
<div class="secondary_navbar hidden-xs hidden-sm" scroll data-ng-class="{'hidden': !secondaryNavbar}" data-ng-show="tx.txid" data-ng-init="hideSNavbar=0">
|
<div class="secondary_navbar hidden-xs hidden-sm" scroll data-ng-class="{'hidden': !secondaryNavbar}" data-ng-show="tx.txid" data-ng-init="hideSNavbar=0">
|
||||||
<div class="container" data-ng-if="!hideSNavbar">
|
<div class="container" data-ng-if="!hideSNavbar">
|
||||||
@ -6,7 +6,7 @@
|
|||||||
<h3 translate>Transaction</h3>
|
<h3 translate>Transaction</h3>
|
||||||
<div class="ellipsis">
|
<div class="ellipsis">
|
||||||
<small>{{tx.txid}}</small>
|
<small>{{tx.txid}}</small>
|
||||||
<span class="btn-copy" clip-copy="tx.txid"></span>
|
<button class="btn-copy" data-clipboard-text="{{tx.txid}}"></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6 col-lg-5 text-right">
|
<div class="col-md-6 col-lg-5 text-right">
|
||||||
@ -43,7 +43,7 @@
|
|||||||
<div class="well well-sm ellipsis">
|
<div class="well well-sm ellipsis">
|
||||||
<strong translate>Transaction</strong>
|
<strong translate>Transaction</strong>
|
||||||
<span class="txid text-muted">{{tx.txid}}</span>
|
<span class="txid text-muted">{{tx.txid}}</span>
|
||||||
<span class="btn-copy" clip-copy="tx.txid"></span>
|
<button class="btn-copy" data-clipboard-text="{{tx.txid}}"></button>
|
||||||
</div>
|
</div>
|
||||||
<h2 translate>Summary</h2>
|
<h2 translate>Summary</h2>
|
||||||
<table class="table" style="table-layout: fixed">
|
<table class="table" style="table-layout: fixed">
|
||||||
@ -63,14 +63,14 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><strong translate>Mined Time</strong></td>
|
<td><strong translate>Mined Time</strong></td>
|
||||||
<td data-ng-show="tx.time" class="text-muted text-right">{{tx.blocktime * 1000|date:'medium'}}</td>
|
<td data-ng-show="tx.blocktime" class="text-muted text-right">{{tx.blocktime * 1000|date:'medium'}}</td>
|
||||||
<td data-ng-show="!tx.time" class="text-muted text-right">N/A</td>
|
<td data-ng-show="!tx.blocktime" class="text-muted text-right">N/A</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><strong translate>Included in Block</strong></td>
|
<td><strong translate>Included in Block</strong></td>
|
||||||
<td data-ng-show="tx.blockhash" class="text-muted text-right">
|
<td data-ng-show="tx.blockhash" class="text-muted text-right">
|
||||||
<div class="ellipsis">
|
<div class="ellipsis">
|
||||||
<a href="/block/{{tx.blockhash}}">{{tx.blockhash}}</a>
|
<a href="block/{{tx.blockhash}}">{{tx.blockhash}}</a>
|
||||||
</div>
|
</div>
|
||||||
<td data-ng-show="!tx.blockhash" class="text-muted text-right">Unconfirmed</td>
|
<td data-ng-show="!tx.blockhash" class="text-muted text-right">Unconfirmed</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -82,7 +82,7 @@
|
|||||||
<td><strong>Coinbase</strong></td>
|
<td><strong>Coinbase</strong></td>
|
||||||
<td class="text-muted text-right">
|
<td class="text-muted text-right">
|
||||||
<div class="ellipsis">
|
<div class="ellipsis">
|
||||||
<span class="btn-copy ng-isolate-scope" clip-copy="tx.vin[0].coinbase"></span>
|
<button class="btn-copy ng-isolate-scope" data-clipboard-text="{{tx.vin[0].coinbase}}"></button>
|
||||||
<span class="ng-binding">{{tx.vin[0].coinbase}}</span>
|
<span class="ng-binding">{{tx.vin[0].coinbase}}</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
@ -92,7 +92,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<h2 translate>Details</h2>
|
<h2 translate>Details</h2>
|
||||||
<div class="block-tx" data-ng-if="tx.txid">
|
<div class="block-tx" data-ng-if="tx.txid">
|
||||||
<div data-ng-include src="'/views/transaction/tx.html'"></div>
|
<div data-ng-include src="'views/transaction/tx.html'"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
data-ng-show="!txs[0].txid && !loading"
|
data-ng-show="!txs[0].txid && !loading"
|
||||||
translate>There are no transactions involving this address.</div>
|
translate>There are no transactions involving this address.</div>
|
||||||
<div class="block-tx" data-ng-show="txs && txs[0].txid" data-ng-repeat="tx in txs">
|
<div class="block-tx" data-ng-show="txs && txs[0].txid" data-ng-repeat="tx in txs">
|
||||||
<div data-ng-include src="'/views/transaction/tx.html'"></div>
|
<div data-ng-include src="'views/transaction/tx.html'"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="progress progress-striped active" data-ng-show="loading">
|
<div class="progress progress-striped active" data-ng-show="loading">
|
||||||
<div class="progress-bar progress-bar-info" style="width: 100%">
|
<div class="progress-bar progress-bar-info" style="width: 100%">
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
<div class="line-bot row" data-ng-hide="!tx">
|
<div class="line-bot row" data-ng-hide="!tx">
|
||||||
<div class="col-xs-7 col-md-8">
|
<div class="col-xs-7 col-md-8">
|
||||||
<div class="ellipsis">
|
<div class="ellipsis">
|
||||||
<a class="btn-expand" href="#" title="Show/Hide items details" data-ng-click="itemsExpanded = !itemsExpanded">
|
<a class="btn-expand" title="Show/Hide items details" data-ng-click="itemsExpanded = !itemsExpanded">
|
||||||
<span class="glyphicon glyphicon-plus-sign" data-ng-class="{'glyphicon-minus-sign': itemsExpanded}"></span>
|
<span class="glyphicon glyphicon-plus-sign" data-ng-class="{'glyphicon-minus-sign': itemsExpanded}"></span>
|
||||||
</a>
|
</a>
|
||||||
<a href="/tx/{{tx.txid}}">{{tx.txid}}</a>
|
<a href="tx/{{tx.txid}}">{{tx.txid}}</a>
|
||||||
<span class="btn-copy" clip-copy="tx.txid"></span>
|
<button class="btn-copy" data-clipboard-text="{{tx.txid}}"></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-5 col-md-4 text-right text-muted">
|
<div class="col-xs-5 col-md-4 text-right text-muted">
|
||||||
@ -13,7 +13,7 @@
|
|||||||
<span translate>first seen at</span>
|
<span translate>first seen at</span>
|
||||||
<time>{{tx.firstSeenTs * 1000 | date:'medium'}}</time>
|
<time>{{tx.firstSeenTs * 1000 | date:'medium'}}</time>
|
||||||
</div>
|
</div>
|
||||||
<div data-ng-show="tx.time && !tx.firstSeenTs">
|
<div data-ng-show="tx.blocktime && !tx.firstSeenTs">
|
||||||
<span translate>mined</span>
|
<span translate>mined</span>
|
||||||
<time>{{tx.time * 1000 | date:'medium'}}</time>
|
<time>{{tx.time * 1000 | date:'medium'}}</time>
|
||||||
</div>
|
</div>
|
||||||
@ -39,8 +39,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="ellipsis">
|
<div class="ellipsis">
|
||||||
<span data-ng-show="vin.notAddr">{{vin.addr}}</span>
|
<span data-ng-show="vin.notAddr">{{vin.addr}}</span>
|
||||||
<span class="text-muted" title="Current Bitcoin Address" data-ng-show="vin.addr == $root.currentAddr">{{vin.addr}}</span>
|
<span class="text-muted" title="Current Flo Address" data-ng-show="vin.addr == $root.currentAddr">{{vin.addr}}</span>
|
||||||
<a href="/address/{{vin.addr}}" data-ng-show="!vin.notAddr && vin.addr != $root.currentAddr">{{vin.addr}}</a>
|
<a href="address/{{vin.addr}}" data-ng-show="!vin.notAddr && vin.addr != $root.currentAddr">{{vin.addr}}</a>
|
||||||
</div>
|
</div>
|
||||||
<div data-ng-show="vin.unconfirmedInput" class="text-danger"> <span class="glyphicon glyphicon-warning-sign"></span> (Input unconfirmed)</div>
|
<div data-ng-show="vin.unconfirmedInput" class="text-danger"> <span class="glyphicon glyphicon-warning-sign"></span> (Input unconfirmed)</div>
|
||||||
<div data-ng-show="vin.dbError" class="text-danger">
|
<div data-ng-show="vin.dbError" class="text-danger">
|
||||||
@ -50,7 +50,7 @@
|
|||||||
<div data-ng-show="vin.doubleSpentTxID" class="text-danger">
|
<div data-ng-show="vin.doubleSpentTxID" class="text-danger">
|
||||||
<span class="glyphicon glyphicon-warning-sign"></span>
|
<span class="glyphicon glyphicon-warning-sign"></span>
|
||||||
<span translate>Double spent attempt detected. From tx:</span>
|
<span translate>Double spent attempt detected. From tx:</span>
|
||||||
<a href="/tx/{{vin.doubleSpentTxID}}">{{vin.doubleSpentTxID}},{{vin.doubleSpentIndex}}</a>
|
<a href="tx/{{vin.doubleSpentTxID}}">{{vin.doubleSpentTxID}},{{vin.doubleSpentIndex}}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -71,9 +71,9 @@
|
|||||||
{{$root.currency.getConvertion(vin.value) || vin.value + ' BTC'}}
|
{{$root.currency.getConvertion(vin.value) || vin.value + ' BTC'}}
|
||||||
</div>
|
</div>
|
||||||
<div class="ellipsis">
|
<div class="ellipsis">
|
||||||
<a class="glyphicon glyphicon-chevron-right" href="/tx/{{vin.txid}}/>/{{vin.vout}}" title="Outpoint: {{vin.txid}},{{vin.vout}}"></a>
|
<a class="glyphicon glyphicon-chevron-right" href="tx/{{vin.txid}}/>/{{vin.vout}}" title="Outpoint: {{vin.txid}},{{vin.vout}}"></a>
|
||||||
<span data-ng-show="vin.notAddr">{{vin.addr}}</span>
|
<span data-ng-show="vin.notAddr">{{vin.addr}}</span>
|
||||||
<a href="/address/{{vin.addr}}" data-ng-show="!vin.notAddr">{{vin.addr}}</a>
|
<a href="address/{{vin.addr}}" data-ng-show="!vin.notAddr">{{vin.addr}}</a>
|
||||||
</div>
|
</div>
|
||||||
<div data-ng-show="vin.unconfirmedInput" class="text-danger">
|
<div data-ng-show="vin.unconfirmedInput" class="text-danger">
|
||||||
<span class="glyphicon glyphicon-warning-sign"></span>
|
<span class="glyphicon glyphicon-warning-sign"></span>
|
||||||
@ -86,7 +86,7 @@
|
|||||||
<div data-ng-show="vin.doubleSpentTxID" class="text-danger">
|
<div data-ng-show="vin.doubleSpentTxID" class="text-danger">
|
||||||
<span class="glyphicon glyphicon-warning-sign"></span>
|
<span class="glyphicon glyphicon-warning-sign"></span>
|
||||||
<span translate>Double spent attempt detected. From tx:</span>
|
<span translate>Double spent attempt detected. From tx:</span>
|
||||||
<a href="/tx/{{<vin class=""></vin>doubleSpentTxID}}">{{vin.doubleSpentTxID}},{{vin.doubleSpentIndex}}</a>
|
<a href="tx/{{<vin class=""></vin>doubleSpentTxID}}">{{vin.doubleSpentTxID}},{{vin.doubleSpentIndex}}</a>
|
||||||
</div>
|
</div>
|
||||||
</div> <!-- END OF PANEL BODY -->
|
</div> <!-- END OF PANEL BODY -->
|
||||||
</div> <!-- END OF PANEL-DEFAULT -->
|
</div> <!-- END OF PANEL-DEFAULT -->
|
||||||
@ -95,7 +95,7 @@
|
|||||||
<p><strong>scriptSig</strong></p>
|
<p><strong>scriptSig</strong></p>
|
||||||
<div data-ng-repeat="item in vin.scriptSig.asm | split:' '" class="">
|
<div data-ng-repeat="item in vin.scriptSig.asm | split:' '" class="">
|
||||||
<p class="col-md-11 ellipsis text-muted">{{item}}</p>
|
<p class="col-md-11 ellipsis text-muted">{{item}}</p>
|
||||||
<p class="btn-copy" clip-copy="item"></p>
|
<button class="btn-copy" data-clipboard-text="{{item}}"></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -137,8 +137,8 @@
|
|||||||
|
|
||||||
<div class="ellipsis">
|
<div class="ellipsis">
|
||||||
<span data-ng-show="vout.notAddr">{{vout.addr}}</span>
|
<span data-ng-show="vout.notAddr">{{vout.addr}}</span>
|
||||||
<span class="text-muted" title="Current Bitcoin Address" data-ng-show="address == $root.currentAddr" data-ng-repeat="address in vout.addr.split(',')">{{vout.addr}}</span>
|
<span class="text-muted" title="Current Flo Address" data-ng-show="address == $root.currentAddr" data-ng-repeat="address in vout.addr.split(',')">{{vout.addr}}</span>
|
||||||
<a href="/address/{{address}}" data-ng-show="!vout.notAddr && address != $root.currentAddr" data-ng-repeat="address in vout.addr.split(',')">{{address}}</a>
|
<a href="address/{{address}}" data-ng-show="!vout.notAddr && address != $root.currentAddr" data-ng-repeat="address in vout.addr.split(',')">{{address}}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -159,11 +159,11 @@
|
|||||||
<div class="pull-right btc-value">
|
<div class="pull-right btc-value">
|
||||||
<span>{{$root.currency.getConvertion(vout.value) || vout.value + ' BTC'}}
|
<span>{{$root.currency.getConvertion(vout.value) || vout.value + ' BTC'}}
|
||||||
<span class="text-success" data-ng-show="!vout.spentTxId" tooltip="Output is unspent" tooltip-placement="left">(U)</span>
|
<span class="text-success" data-ng-show="!vout.spentTxId" tooltip="Output is unspent" tooltip-placement="left">(U)</span>
|
||||||
<a class="glyphicon glyphicon-chevron-right" data-ng-show="vout.spentTxId" href="/tx/{{vout.spentTxId}}/</{{vout.spentIndex}}" title="Spent at: {{vout.spentTxId}},{{vout.spentIndex}}"></a>
|
<a class="glyphicon glyphicon-chevron-right" data-ng-show="vout.spentTxId" href="tx/{{vout.spentTxId}}/</{{vout.spentIndex}}" title="Spent at: {{vout.spentTxId}},{{vout.spentIndex}}"></a>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="ellipsis">
|
<div class="ellipsis">
|
||||||
<a href="/address/{{address}}" data-ng-repeat="address in vout.scriptPubKey.addresses">{{address}}</a>
|
<a href="address/{{address}}" data-ng-repeat="address in vout.scriptPubKey.addresses">{{address}}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -175,7 +175,7 @@
|
|||||||
<div class="small">
|
<div class="small">
|
||||||
<p><strong>scriptPubKey</strong></p>
|
<p><strong>scriptPubKey</strong></p>
|
||||||
<span class="col-md-11 text-muted ellipsis">{{vout.scriptPubKey.asm}}</span>
|
<span class="col-md-11 text-muted ellipsis">{{vout.scriptPubKey.asm}}</span>
|
||||||
<span class="btn-copy col-md-1" clip-copy="vout.scriptPubKey.asm"></span>
|
<button class="btn-copy col-md-1" data-clipboard-text="{{vout.scriptPubKey.asm}}"></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -193,19 +193,28 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="well well-sm bgwhite ellipsis" data-ng-if="itemsExpanded && !block.hash && tx.blockhash">
|
<div class="well well-sm bgwhite ellipsis" data-ng-if="itemsExpanded && !block.hash && tx.blockhash">
|
||||||
<strong translate>Included in Block</strong> <a class="text-muted" href="/block/{{tx.blockhash}}">{{tx.blockhash}}</a>
|
<strong translate>Included in Block</strong> <a class="text-muted" href="block/{{tx.blockhash}}">{{tx.blockhash}}</a>
|
||||||
<span class="btn-copy" clip-copy="tx.blockhash"></span>
|
<button class="btn-copy" data-clipboard-text="{{tx.blockhash}}"></button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="line-top row" data-ng-hide="!tx">
|
<div class="line-top row" data-ng-hide="!tx">
|
||||||
<div class="col-xs-6 col-sm-4 col-md-4">
|
<div class="col-xs-6 col-sm-4 col-md-4">
|
||||||
<span data-ng-show="!tx.isCoinBase && !isNaN(parseFloat(tx.fees))"
|
<span data-ng-show="!tx.isCoinBase && !isNaN(parseFloat(tx.fees))"
|
||||||
class="txvalues txvalues-default"><span translate>Fee</span>: {{$root.currency.getConvertion(tx.fees) || tx.fees + 'BTC'}} </span>
|
class="txvalues txvalues-default"><span translate>Fee</span>: {{$root.currency.getConvertion(tx.fees) || tx.fees + 'FLO'}} </span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-6 col-sm-8 col-md-8 text-right">
|
<div class="col-xs-6 col-sm-8 col-md-8 text-right">
|
||||||
<span data-ng-show="tx.confirmations" class="txvalues
|
<span data-ng-show="tx.confirmations" class="txvalues
|
||||||
txvalues-success">{{tx.confirmations}} <span translate>Confirmations</span></span>
|
txvalues-success">{{tx.confirmations}} <span translate>Confirmations</span></span>
|
||||||
<span data-ng-show="!tx.confirmations" class="txvalues txvalues-danger" translate>Unconfirmed Transaction!</span>
|
<span data-ng-show="!tx.confirmations" class="txvalues txvalues-danger" translate>Unconfirmed Transaction!</span>
|
||||||
<span class="txvalues txvalues-primary">{{$root.currency.getConvertion(tx.valueOut) || tx.valueOut + ' BTC' }}</span>
|
<span class="txvalues txvalues-primary">{{$root.currency.getConvertion(tx.valueOut) || tx.valueOut + ' FLO' }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="line-top row" style="margin-top: 15px;" data-ng-hide="tx.floData === ''">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="well well-sm" style="margin: 0px 10px">
|
||||||
|
<strong>floData: </strong>
|
||||||
|
<span class="text-muted ng-binding" style="word-break: break-all">{{tx.floData}}</span>
|
||||||
|
<button class="btn-copy" data-clipboard-text="{{tx.floData}}"></button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -47,8 +47,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12 col-md-4 col-gray">
|
<div class="col-xs-12 col-md-4 col-gray">
|
||||||
<p translate>
|
<p translate>
|
||||||
This form can be used to broadcast a raw transaction in hex format over
|
This form can be used to broadcast a raw transaction in hex format over the Flo network.
|
||||||
the Bitcoin network.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
4
test/test.js
Normal file
4
test/test.js
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
describe('should test', function() {
|
||||||
|
it('test', function() {
|
||||||
|
});
|
||||||
|
});
|
||||||
Loading…
Reference in New Issue
Block a user