Compare commits

..

113 Commits

Author SHA1 Message Date
Sky Young
5d768d868a Add Google Analytics 2018-05-22 16:03:44 -07:00
Sky Young
3435f825d9 Update Compiled Files 2018-05-22 14:22:15 -07:00
Sky Young
51cc30532d Parse fee correctly 2018-05-22 14:22:05 -07:00
Sky Young
19c60d111d Fix attachment to MutationObserver 2018-05-22 13:14:01 -07:00
Sky Young
e4775417fc On DOM Mutation, load clipboard buttons 2018-05-22 13:01:04 -07:00
Sky Young
c3ca8643ec Import ClipboardJS before main.js 2018-05-22 12:23:44 -07:00
Sky Young
6e3f51fdbd Use buttons for ClipboardJS copy buttons 2018-05-22 12:08:02 -07:00
Sky Young
7ec226faa2 Use ClipboardJS for HTML5 copy 2018-05-22 11:21:57 -07:00
Sky Young
52caae1d59 Match darker style of status for search box 2018-05-21 16:26:41 -07:00
Sky Young
895ba45aec Update progress bar color 2018-05-21 16:14:56 -07:00
Sky Young
c615bb44b2 Update colors to match Flo blue 2018-05-21 16:10:56 -07:00
Sky Young
9325a1c103 Update UI to say Flo instead of Florincoin 2018-05-21 16:03:01 -07:00
Sky Young
e456052358 Hide on livenet 2018-05-21 14:11:33 -07:00
Sky Young
b00f80b967 Add getStatus call to header controller 2018-05-21 14:10:02 -07:00
Sky Young
6c7776904a Show network label if not on mainnet 2018-05-21 14:05:12 -07:00
Sky Young
5c070d0e65 Get Network Info on Index page 2018-05-21 13:56:49 -07:00
Sky Young
0c40d113b4 Update about page 2018-05-18 17:34:52 -07:00
Sky Young
be1788b4e3 Update translations 2018-05-18 17:23:33 -07:00
Sky Young
8668e6abb0 Wrap floData string properly 2018-05-18 16:36:30 -07:00
Sky Young
19e5755ef7 Update version 2018-05-18 16:32:19 -07:00
Sky Young
bc8dc2e375 Attempt to load transactions from the recent block by default 2018-05-18 16:31:38 -07:00
Sky Young
e83a99ae96 Update Currency 2018-05-18 16:31:07 -07:00
Sky Young
c7aa861a3b Restyle floData container 2018-05-18 15:43:14 -07:00
Sky Young
4eba927ded Update version 2018-05-18 15:29:09 -07:00
Sky Young
beb386535f Add floData to latest transactions on homepage 2018-05-18 15:29:00 -07:00
Sky Young
686d775011 Remove floData from table 2018-05-18 15:24:47 -07:00
Sky Young
d5db7a9676 Add floData to transactions in regular list 2018-05-18 15:19:00 -07:00
Sky Young
f098c4d35d Disable build on service start 2018-05-18 15:08:29 -07:00
Sky Young
135f9dd617 Add floData to transaction view 2018-05-17 12:43:44 -07:00
Sky Young
b5b7f9af2f Change API Prefix back to default 2018-05-16 14:37:08 -07:00
Sky Young
c319197e64 Rollback angularjs-all 2018-05-16 14:06:07 -07:00
Sky Young
ef3a02540b build new apiPrefix 2018-05-16 13:46:01 -07:00
OstlerDev
ee303492e3 btc -> flo 2018-01-15 16:39:57 -08:00
Chris Kleeschulte
c825504826
Bumped version. 2017-11-22 16:04:40 -05:00
Chris Kleeschulte
aef5a88dd2
Bumped version. 2017-11-13 14:26:31 -05:00
Chris Kleeschulte
51d3566203
Bumped version. 2017-11-13 09:56:20 -05:00
Chris Kleeschulte
24426b7337
Bumped version. 2017-11-09 22:01:34 -05:00
Chris Kleeschulte
f41fb29e26
Bumped version. 2017-11-09 17:16:40 -05:00
Chris Kleeschulte
271bc416fc
Bumped version. 2017-11-08 09:41:35 -05:00
Chris Kleeschulte
46821f0c15
Bumped version. 2017-11-07 21:42:06 -05:00
Chris Kleeschulte
e13e24d3df
Bumped version. 2017-11-07 15:43:10 -05:00
Chris Kleeschulte
9559af90ad
Bumped version. 2017-11-07 13:27:14 -05:00
Chris Kleeschulte
1e431f9140
Bumped version. 2017-11-06 19:37:05 -05:00
Chris Kleeschulte
d5d6191dfb
Bumped version. 2017-11-06 19:18:07 -05:00
Chris Kleeschulte
0852a26312
Bumped version. 2017-11-05 18:40:59 -05:00
Chris Kleeschulte
e87ad01707
Bumped version. 2017-11-02 17:47:01 -04:00
Chris Kleeschulte
efb275ba99
Bumped version. 2017-11-02 13:51:37 -04:00
Chris Kleeschulte
bc49b1ded5
Bumped version. 2017-11-02 12:06:46 -04:00
Chris Kleeschulte
55e6427d57
Bumped version. 2017-11-01 16:05:41 -04:00
Chris Kleeschulte
96b44e29b5
Bumped version. 2017-10-30 15:43:16 -04:00
Chris Kleeschulte
d4bb931f37
Bumped version. 2017-10-26 17:55:27 -04:00
Chris Kleeschulte
59c4bf2765
Bumped version. 2017-10-26 17:14:55 -04:00
Chris Kleeschulte
8251807292
Bumped version. 2017-10-24 17:51:25 -04:00
Chris Kleeschulte
f34006e513
Bumped version. 2017-10-24 14:30:29 -04:00
Chris Kleeschulte
3ff0341ad5
Bump version 2017-10-20 13:20:38 -04:00
Chris Kleeschulte
a69ef92e31
Bumped version. 2017-10-18 19:21:50 -04:00
Chris Kleeschulte
81155eb292
Added mocha as a dependency. 2017-10-12 19:23:54 -04:00
Chris Kleeschulte
9c00ac8bc4
Added a travis.yml file. 2017-10-12 19:16:52 -04:00
Chris Kleeschulte
65f88ef14a
Bumped version. 2017-10-12 19:10:32 -04:00
Chris Kleeschulte
c52682bb70
Added test stubs. 2017-10-12 19:01:20 -04:00
Chris Kleeschulte
2cc88a2a15
Bumped version. 2017-10-12 18:02:06 -04:00
Chris Kleeschulte
fbc38a731c
Bumped version. 2017-10-12 15:09:44 -04:00
Chris Kleeschulte
9195c90b74
Bumped version. 2017-10-11 17:24:02 -04:00
Chris Kleeschulte
2010f73d81
Bumped version. 2017-10-11 16:41:14 -04:00
Chris Kleeschulte
ba31444df5
Bumped version. 2017-10-09 18:02:13 -04:00
Chris Kleeschulte
a0ba1efeb8
Bumped version. 2017-10-08 15:47:25 -04:00
Chris Kleeschulte
37177c412c
Bumped version. 2017-10-02 16:40:36 -04:00
Chris Kleeschulte
4931504c1e
Bumped version. 2017-10-01 19:20:05 -04:00
Chris Kleeschulte
6cbca55bb1
Apparently pushd and popd are not available in the shell used by exec on
all platforms.
2017-09-27 19:22:58 -04:00
Chris Kleeschulte
7155ff0b91
Added a build runner in line with starting the service. 2017-09-26 17:13:22 -04:00
Jason Dreyzehner
e94154ba4b chore(release): 5.0.0-beta.1 2017-08-18 18:05:36 -04:00
Jason Dreyzehner
340decd978 Route caching bug fix, simplify routing (#763)
* move window.apiPrefix into Angular service

* avoid routing by accept headers, integrate api service

* Revert "Fixed over-matching of index route."

This reverts commit 62e1225dd3.

* better name for index template file
2017-05-04 12:42:17 -04:00
Matias Alejo Garcia
cc7c6f81d4 Merge pull request #766 from dabura667/fix-BTC-places
Fix Fee Rate to 8 decimal places
2017-04-10 13:59:58 +02:00
Dabura667
d0a8b123d2 Fix Fee Rate to 8 decimal places
Transaction details page when set to BTC has 19 decimal places

> 0.0014707499999999998 BTC per kB
2017-04-09 11:05:06 +09:00
Dabura667
d8fea29125 Merge pull request #1 from bitpay/master
Update master from bitpay
2017-04-09 11:01:35 +09:00
Chris Kleeschulte
795b5182fc Merge pull request #764 from kleetus/bug/index
Fixed over-matching of index route.
2017-04-03 20:32:00 -04:00
k
62e1225dd3 Fixed over-matching of index route. 2017-04-03 20:04:16 -04:00
Braydon Fuller
ddcd05cbc2 Bump package version to 0.4.0 2016-05-27 14:24:15 -04:00
Chris Kleeschulte
df19530235 Merge pull request #718 from braydonf/bitcoind
bitcoind: change to use bitcoind/addresstxid event
2016-05-27 14:19:37 -04:00
Braydon Fuller
d7c161d7b6 Update compiled files 2016-05-18 10:19:52 -04:00
Braydon Fuller
ffed19b8b3 Unsubscribe to address event, and update addresstxid data format 2016-05-18 10:19:36 -04:00
Braydon Fuller
0a06f9aba9 Update compiled files 2016-05-17 22:58:20 -04:00
Braydon Fuller
f50abae460 Fix url to transaciton sound 2016-05-17 21:00:36 -04:00
Braydon Fuller
3532cd25a1 Change to use bitcoind/addresstxid event 2016-05-17 20:17:04 -04:00
Braydon Fuller
923c596b74 Merge pull request #713 from Gitju/master
sed -i 's#github.com/bitpay/insight#github.com/bitpay/insight-ui#g' package.json
2016-04-25 10:25:43 -04:00
Cryptoanarchist
f002131366 sed -i 's#github.com/bitpay/insight#github.com/bitpay/insight-ui#g'
and adding https where necessary
2016-04-24 16:24:23 +02:00
Cryptoanarchist
3ff860c483 sed -i 's#github.com/bitpay/insight#github.com/bitpay/insight-ui#g' 2016-04-24 14:57:34 +02:00
Matias Alejo Garcia
e3ef214b21 Merge pull request #691 from braydonf/readme2
Docs: Update documentation with the most recent commands.
2016-02-17 13:47:00 -03:00
Braydon Fuller
653fd60a24 Bump package version to 0.3.1 2016-02-08 12:43:23 -05:00
Matias Alejo Garcia
d16892d7af Merge pull request #703 from braydonf/network
Show network name instead of testnet boolean
2016-02-05 12:52:06 -03:00
Braydon Fuller
2e013122db Show network name instead of testnet boolean 2016-02-05 10:40:26 -05:00
Braydon Fuller
840fd0db21 Docs: Update documentation with the most recent commands. 2015-11-12 17:22:35 -05:00
Stephen Pair
7c5a79c80a Merge pull request #670 from bitpay/v0.3.0
v0.3.0
2015-10-16 20:51:18 -04:00
Patrick Nagurny
7d68b0cc82 Merge pull request #678 from braydonf/feature/configurable-routes
Added ability to configure HTTP route prefixes.
2015-10-13 11:20:38 -04:00
Braydon Fuller
e006e5cbcd Remove unnecessary line. 2015-10-13 11:19:35 -04:00
Braydon Fuller
7ec3124d82 Fix bug with trailing /. 2015-10-13 11:16:12 -04:00
Braydon Fuller
c45a0edd60 Added ability to configure HTTP route prefixes. 2015-10-13 10:49:44 -04:00
Patrick Nagurny
933c378a8d Merge pull request #672 from braydonf/v0.3.0-buttons
Removed href="#" that was redirecting the the landing page.
2015-10-02 14:21:35 -04:00
Braydon Fuller
accff4e43c Removed href="#" that was redirecting the the landing page. 2015-10-02 13:14:30 -04:00
Matias Alejo Garcia
fb43ff70d4 Merge pull request #669 from kleetus/feature/remove_getTxOutInfo
Removed button and div for Show Transaction Output Data
2015-09-25 12:51:27 -03:00
Chris Kleeschulte
19974a7d3d Removed button and div for Show Transaction Output Data 2015-09-25 11:26:21 -04:00
Chris Kleeschulte
4684224a53 Merge pull request #668 from braydonf/bug/tx-mined-time
Fix bug with displaying mined time for mempool transactions.
2015-09-22 13:17:47 -04:00
Braydon Fuller
b5251849a0 Fix bug with displaying mined time for mempool transactions. 2015-09-21 17:21:11 -04:00
Patrick Nagurny
2105492ff9 Merge pull request #666 from braydonf/verify-message
Fix for Messages URL
2015-09-18 14:00:36 -04:00
Braydon Fuller
e45396435b Add updated generate files until we have a better solution. 2015-09-18 13:58:05 -04:00
Braydon Fuller
fc15f2982f Update link to messages. 2015-09-17 17:00:59 -04:00
Braydon Fuller
af08592d01 Fix for Messages URL 2015-09-17 15:51:31 -04:00
Patrick Nagurny
dd3d590a44 Merge pull request #659 from braydonf/readme
Update README to reflect running as a Bitcore Node service.
2015-09-03 18:19:03 -04:00
Patrick Nagurny
e4eb09f87f update css 2015-09-03 18:16:34 -04:00
Braydon Fuller
36f5c75880 Update README to reflect running as a Bitcore Node service. 2015-09-03 18:15:52 -04:00
Patrick Nagurny
a9828d8539 change name to insight-ui, remove dependency on insight-api 2015-09-03 17:33:59 -04:00
Patrick Nagurny
1d70f0196c add bitcore-node service and make everything relative paths 2015-09-03 11:39:21 -04:00
Matias Alejo Garcia
4253de1ed4 Update index.html 2015-08-05 14:48:28 -03:00
62 changed files with 2229 additions and 542 deletions

1
.gitignore vendored
View File

@ -47,3 +47,4 @@ public/css/main.css
README.html
po/*
!po/*.po
*.codekit3

5
.travis.yml Normal file
View File

@ -0,0 +1,5 @@
language: node_js
node_js:
- 'v8'
install:
- npm install

View File

@ -1,5 +1,7 @@
'use strict';
// var config = require('flosight-config.json');
module.exports = function(grunt) {
//Load NPM tasks
@ -10,10 +12,27 @@ module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-markdown');
grunt.loadNpmTasks('grunt-macreload');
grunt.loadNpmTasks('grunt-angular-gettext');
grunt.loadNpmTasks('grunt-replace');
// Project Configuration
grunt.initConfig({
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: {
options: {
process: function(src, filepath) {
@ -104,7 +123,7 @@ module.exports = function(grunt) {
nggettext_compile: {
all: {
options: {
module: 'insight'
module: 'flosight'
},
files: {
'public/src/js/translations.js': ['po/*.po']
@ -117,13 +136,13 @@ module.exports = function(grunt) {
grunt.option('force', true);
//Default task(s).
grunt.registerTask('default', ['watch']);
grunt.registerTask('default', ['replace', 'watch']);
//Update .pot file
grunt.registerTask('translate', ['nggettext_extract']);
//Compile task (concat + minify)
grunt.registerTask('compile', ['nggettext_compile', 'concat', 'uglify', 'cssmin']);
grunt.registerTask('compile', ['replace', 'nggettext_compile', 'concat', 'uglify', 'cssmin']);
};

122
README.md
View File

@ -1,110 +1,69 @@
# *insight*
# Flosight UI
*insight* is an open-source bitcoin blockchain explorer with complete REST
and websocket APIs. Insight runs in NodeJS, uses AngularJS for the
front-end and LevelDB for storage.
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).
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.
## Quick Install
Check the Prerequisites section above before installing.
To install Insight, clone the main repository:
$ 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)
```bash
npm install -g flocore-node
flocore-node create mynode
cd mynode
flocore-node install flosight-api
flocore-node install flosight-ui
flocore-node start
```
Open a web browser to `http://localhost:3001/flosight/`
## Development
To run insight locally for development mode:
Install bower dependencies:
To build Flosight UI locally:
```
$ 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
```
$ grunt
By default, the `flosightConfig` in `package.json` is:
```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:
* Install insight and insight-api on the same path ($IROOT)
```
$ cd $IROOT/insight
$ grunt
```json
"flosightConfig": {
"apiPrefix": "api",
"routePrefix": ""
}
```
in other terminal:
Then rebuild the `flosight-ui` service:
```
$ cd $IROOT/insight-api
$ ln -s ../insight/public
$ INSIGHT_PUBLIC_PATH=public node insight.js
$ npm run build
```
```
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
insight use [angular-gettext](http://angular-gettext.rocketeer.be) for
multilanguage support.
Flosight UI uses [angular-gettext](http://angular-gettext.rocketeer.be) for 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:
@ -112,12 +71,11 @@ To enable a text to be translated, add the ***translate*** directive to html tag
grunt compile
```
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.
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.
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';
@ -130,11 +88,11 @@ compile***.
## 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
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

View File

@ -1,6 +1,6 @@
{
"name": "Insight",
"version": "0.0.1",
"name": "Flosight",
"version": "5.0.0-beta.1",
"dependencies": {
"angular": "~1.2.13",
"angular-resource": "~1.2.13",

61
flocore-node/index.js Normal file
View 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
View 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

File diff suppressed because it is too large Load Diff

View File

@ -1,60 +1,47 @@
{
"name": "insight-bitcore",
"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.",
"version": "0.2.7",
"repository": "git://github.com/bitpay/insight.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"
}
],
"name": "flosight-ui",
"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": "5.0.0-beta.72",
"repository": "git://github.com/bitpay/flosight-ui.git",
"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",
"keywords": [
"insight",
"flosight",
"blockchain",
"blockexplorer",
"bitcoin",
"bitcore",
"florincoin",
"flocore",
"front-end"
],
"flocoreNode": "flocore-node",
"flosightConfig": {
"apiPrefix": "api",
"routePrefix": ""
},
"scripts": {
"start": "INSIGHT_PUBLIC_PATH=public node node_modules/.bin/insight-bitcore-api"
},
"dependencies": {
"insight-bitcore-api": ">=0.2.14"
"build": "bower install && grunt compile",
"prepublishOnly": "npm run build",
"watch": "grunt",
"install-and-build": "npm install && npm run build",
"test": "mocha test"
},
"dependencies": {},
"devDependencies": {
"bower": "~1.2.8",
"mocha": "^2.4.5",
"bower": "~1.8.0",
"grunt": "~0.4.2",
"grunt-angular-gettext": "^0.2.15",
"grunt-cli": "~0.1.11",
"grunt-contrib-jshint": "~0.8.0",
"grunt-contrib-concat": "~0.3.0",
"grunt-contrib-jshint": "~0.8.0",
"grunt-contrib-uglify": "~0.3.2",
"grunt-contrib-watch": "*",
"grunt-macreload": "*",
"grunt-css": "~0.5.4",
"grunt-macreload": "*",
"grunt-markdown": "~0.5.0",
"grunt-angular-gettext": "^0.2.15"
"grunt-replace": "^1.0.1"
}
}

View File

@ -1,6 +1,6 @@
msgid ""
msgstr ""
"Project-Id-Version: Insight\n"
"Project-Id-Version: Flosight\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Last-Translator: Sascha Dückers <s.dueckers@gmail.com>\n"
@ -22,35 +22,35 @@ msgstr "404 Seite nicht gefunden :("
#: public/views/index.html
msgid ""
"<strong>insight</strong> is an <a href=\"http://live.insight.is/\" target="
"\"_blank\">open-source Bitcoin blockchain explorer</a> with complete REST "
"<strong>flosight</strong> is an <a href=\"http://flocha.in/\" 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 bitcoind RPC. "
"Check out the <a href=\"http://github.com/bitpay/insight\" target=\"_blank"
"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>."
msgstr ""
"<strong>insight</strong> ist ein <a href=\"http://live.insight.is/\" target="
"\"_blank\">Open Source Bitcoin Blockchain Explorer</a> mit vollständigen "
"<strong>flosight</strong> ist ein <a href=\"http://flocha.in/\" target="
"\"_blank\">Open Source Flo Blockchain Explorer</a> mit vollständigen "
"REST und Websocket APIs um eigene Wallets oder Applikationen zu "
"implementieren. Hierbei werden fortschrittlichere Abfragen der Blockchain "
"ermöglicht, bei denen die RPC des Bitcoind nicht mehr ausreichen. Der "
"aktuelle <a href=\"http://github.com/bitpay/insight\" target=\"_blank"
"ermöglicht, bei denen die RPC des Flod nicht mehr ausreichen. Der "
"aktuelle <a href=\"https://github.com/oipwg/flosight-ui\" target=\"_blank"
"\">Quellcode</a> ist auf Github zu finden."
#: public/views/index.html
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."
"com/bitpay/insight/issues\" target=\"_blank\">github issue tracker</a>."
"com/oipwg/flosight-ui/issues\" target=\"_blank\">github issue tracker</a>."
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 "
"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>."
#: public/views/index.html
msgid "About"
msgstr "Über insight"
msgstr "Über flosight"
#: public/views/address.html
msgid "Address"
@ -69,8 +69,8 @@ msgid "Best Block"
msgstr "Bester Block"
#: public/views/status.html
msgid "Bitcoin node information"
msgstr "Bitcoin-Node Info"
msgid "Flo node information"
msgstr "Flo-Node Info"
#: public/views/block.html
msgid "Block"
@ -91,17 +91,17 @@ msgstr "Serialisierte Bytes"
#: public/views/includes/connection.html
msgid ""
"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.)"
msgstr ""
"Es ist nicht möglich mit Bitcoind zu verbinden um live Aktualisierungen vom "
"P2P Netzwerk zu erhalten. (Verbindungsversuch zu bitcoind an {{host}}:"
"Es ist nicht möglich mit Flod zu verbinden um live Aktualisierungen vom "
"P2P Netzwerk zu erhalten. (Verbindungsversuch zu flod an {{host}}:"
"{{port}} ist fehlgeschlagen.)"
#: 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 ""
"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..."
#: public/views/includes/connection.html
@ -125,8 +125,8 @@ msgid "Connections to other nodes"
msgstr "Verbindungen zu Nodes"
#: public/views/status.html
msgid "Current Blockchain Tip (insight)"
msgstr "Aktueller Blockchain Tip (insight)"
msgid "Current Blockchain Tip (flosight)"
msgstr "Aktueller Blockchain Tip (flosight)"
#: public/views/status.html
msgid "Current Sync Status"
@ -199,8 +199,8 @@ msgid "Last Block"
msgstr "Letzter Block"
#: public/views/status.html
msgid "Last Block Hash (Bitcoind)"
msgstr "Letzter Hash (Bitcoind)"
msgid "Last Block Hash (Flod)"
msgstr "Letzter Hash (Flod)"
#: public/views/index.html
msgid "Latest Blocks"

View File

@ -1,6 +1,6 @@
msgid ""
msgstr ""
"Project-Id-Version: Insight\n"
"Project-Id-Version: Flosight\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
@ -22,29 +22,29 @@ msgstr "404 Página no encontrada :("
#: public/views/index.html
msgid ""
"<strong>insight</strong> is an <a href=\"http://live.insight.is/\" target="
"\"_blank\">open-source Bitcoin blockchain explorer</a> with complete REST "
"<strong>flosight</strong> is an <a href=\"http://flocha.in/\" 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 bitcoind RPC. "
"Check out the <a href=\"http://github.com/bitpay/insight\" target=\"_blank"
"that need more advanced blockchain queries than provided by flod RPC. "
"Check out the <a href=\"https://github.com/oipwg/flosight-api\" target=\"_blank"
"\">source code</a>."
msgstr ""
"<strong>insight</strong> es un <a href=\"http://live.insight.is/\" target="
"\"_blank\">explorador de bloques de Bitcoin open-source</a> con un completo "
"<strong>flosight</strong> es un <a href=\"http://flocha.in/\" target="
"\"_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 "
"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/"
"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
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."
"com/bitpay/insight/issues\" target=\"_blank\">github issue tracker</a>."
"com/oipwg/flosight-ui/issues\" target=\"_blank\">github issue tracker</a>."
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="
"\"https://github.com/bitpay/insight/issues\" target=\"_blank\">Github issue "
"\"https://github.com/oipwg/flosight-ui/issues\" target=\"_blank\">Github issue "
"tracker</a>."
#: public/views/index.html
@ -68,8 +68,8 @@ msgid "Best Block"
msgstr "Mejor Bloque"
#: public/views/status.html
msgid "Bitcoin node information"
msgstr "Información del nodo Bitcoin"
msgid "Flo node information"
msgstr "Información del nodo Flo"
#: public/views/block.html
msgid "Block"
@ -90,15 +90,15 @@ msgstr "Bytes Serializados"
#: public/views/includes/connection.html
msgid ""
"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.)"
msgstr ""
"No se pudo conectar a bitcoind para obtener actualizaciones en vivo de la "
"red p2p. (Se intentó conectar a bitcoind de {{host}}:{{port}} y falló.)"
"No se pudo conectar a flod para obtener actualizaciones en vivo de la "
"red p2p. (Se intentó conectar a flod de {{host}}:{{port}} y falló.)"
#: public/views/includes/connection.html
msgid "Can't connect to insight server. Attempting to reconnect..."
msgstr "No se pudo conectar al servidor insight. Intentando re-conectar..."
msgid "Can't connect to flosight server. Attempting to reconnect..."
msgstr "No se pudo conectar al servidor flosight. Intentando re-conectar..."
#: public/views/includes/connection.html
msgid "Can't connect to internet. Please, check your connection."
@ -121,8 +121,8 @@ msgid "Connections to other nodes"
msgstr "Conexiones a otros nodos"
#: public/views/status.html
msgid "Current Blockchain Tip (insight)"
msgstr "Actual Blockchain Tip (insight)"
msgid "Current Blockchain Tip (flosight)"
msgstr "Actual Blockchain Tip (flosight)"
#: public/views/status.html
msgid "Current Sync Status"
@ -195,8 +195,8 @@ msgid "Last Block"
msgstr "Último Bloque"
#: public/views/status.html
msgid "Last Block Hash (Bitcoind)"
msgstr "Último Bloque Hash (Bitcoind)"
msgid "Last Block Hash (Flod)"
msgstr "Último Bloque Hash (Flod)"
#: public/views/index.html
msgid "Latest Blocks"

View File

@ -21,28 +21,28 @@ msgstr "404 ページがみつかりません (´・ω・`)"
#: public/views/index.html
msgid ""
"<strong>insight</strong> is an <a href=\"http://live.insight.is/\" target="
"\"_blank\">open-source Bitcoin blockchain explorer</a> with complete REST "
"<strong>flosight</strong> is an <a href=\"http://flocha.in/\" 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 bitcoind RPC. "
"Check out the <a href=\"http://github.com/bitpay/insight\" target=\"_blank"
"that need more advanced blockchain queries than provided by flod RPC. "
"Check out the <a href=\"https://github.com/bitpay/flosight-api\" target=\"_blank"
"\">source code</a>."
msgstr ""
"<strong>insight</strong>は、bitcoind RPCの提供するものよりも詳細なブロック"
"<strong>flosight</strong>は、flod RPCの提供するものよりも詳細なブロック"
"チェインへの問い合わせを必要とするウェブウォレットやその他のアプリを書くのに"
"使える、完全なRESTおよびwebsocket APIを備えた<a href=\"http://live.insight."
"is/\" target=\"_blank\">オープンソースのビットコインブロックエクスプローラ</"
"a>です。<a href=\"http://github.com/bitpay/insight\" target=\"_blank\">ソース"
"使える、完全なRESTおよびwebsocket APIを備えた<a href=\"http://flocha.in"
"/\" target=\"_blank\">オープンソースのビットコインブロックエクスプローラ</"
"a>です。<a href=\"https://github.com/bitpay/flosight-api\" target=\"_blank\">ソース"
"コード</a>を確認"
#: public/views/index.html
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."
"com/bitpay/insight/issues\" target=\"_blank\">github issue tracker</a>."
"com/oipwg/flosight-ui/issues\" target=\"_blank\">github issue tracker</a>."
msgstr ""
"<strong>insight</strong>は現在開発中です。<a href=\"https://github.com/"
"bitpay/insight/issues\" target=\"_blank\">githubのissueトラッカ</a>にてバグの"
"<strong>flosight</strong>は現在開発中です。<a href=\"https://github.com/"
"oipwg/flosight-ui/issues\" target=\"_blank\">githubのissueトラッカ</a>にてバグの"
"報告や改善案の提案をお願いします。"
#: public/views/index.html
@ -74,12 +74,12 @@ msgid "Best Block"
msgstr "最良ブロック"
#: public/views/messages_verify.html
msgid "Bitcoin comes with a way of signing arbitrary messages."
msgstr "Bitcoinには任意のメッセージを署名する昨日が備わっています。"
msgid "Flo comes with a way of signing arbitrary messages."
msgstr "Floには任意のメッセージを署名する昨日が備わっています。"
#: public/views/status.html
msgid "Bitcoin node information"
msgstr "Bitcoinノード情報"
msgid "Flo node information"
msgstr "Floノード情報"
#: public/views/block.html
msgid "Block"
@ -104,15 +104,15 @@ msgstr "シリアライズ後の容量 (バイト)"
#: public/views/includes/connection.html
msgid ""
"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.)"
msgstr ""
"P2Pネットワークからライブ情報を取得するためにbitcoindへ接続することができませ"
"P2Pネットワークからライブ情報を取得するためにflodへ接続することができませ"
"んでした。({{host}}:{{port}} への接続を試みましたが、失敗しました。)"
#: public/views/includes/connection.html
msgid "Can't connect to insight server. Attempting to reconnect..."
msgstr "insight サーバに接続できません。再接続しています..."
msgid "Can't connect to flosight server. Attempting to reconnect..."
msgstr "flosight サーバに接続できません。再接続しています..."
#: public/views/includes/connection.html
msgid "Can't connect to internet. Please, check your connection."
@ -135,8 +135,8 @@ msgid "Connections to other nodes"
msgstr "他ノードへの接続"
#: public/views/status.html
msgid "Current Blockchain Tip (insight)"
msgstr "現在のブロックチェインのTip (insight)"
msgid "Current Blockchain Tip (flosight)"
msgstr "現在のブロックチェインのTip (flosight)"
#: public/views/status.html
msgid "Current Sync Status"
@ -213,8 +213,8 @@ msgid "Last Block"
msgstr "直前のブロック"
#: public/views/status.html
msgid "Last Block Hash (Bitcoind)"
msgstr "直前のブロックのハッシュ値 (Bitcoind)"
msgid "Last Block Hash (Flod)"
msgstr "直前のブロックのハッシュ値 (Flod)"
#: public/views/index.html
msgid "Latest Blocks"
@ -426,17 +426,17 @@ msgstr "このアドレスに対するトランザクションはありません
#: public/views/transaction_sendraw.html
msgid ""
"This form can be used to broadcast a raw transaction in hex format over\n"
" the Bitcoin network."
" the Flo network."
msgstr ""
"このフォームでは、16進数フォーマットの生のトランザクションをBitcoinネットワー"
"このフォームでは、16進数フォーマットの生のトランザクションをFloネットワー"
"ク上に配信することができます。"
#: public/views/messages_verify.html
msgid ""
"This form can be used to verify that a message comes from\n"
" a specific Bitcoin address."
" a specific Flo address."
msgstr ""
"このフォームでは、メッセージが特定のBitcoinアドレスから来たかどうかを検証する"
"このフォームでは、メッセージが特定のFloアドレスから来たかどうかを検証する"
"ことができます。"
#: public/views/status.html
@ -453,7 +453,7 @@ msgstr "今日"
#: public/views/status.html
msgid "Total Amount"
msgstr "Bitcoin総量"
msgstr "Flo総量"
#: public/views/address.html
msgid "Total Received"

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

View File

@ -1,16 +1,17 @@
<!doctype html>
<html lang="en" data-ng-app="insight" data-ng-csp>
<html lang="en" data-ng-app="flosight" data-ng-csp>
<head>
<base href="/" />
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta name="fragment" content="!">
<title data-ng-bind="$root.title + $root.titleDetail + ' | Insight'">Insight</title>
<meta name="keywords" content="bitcoins, 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 }}">
<link rel="shortcut icon" href="/img/icons/favicon.ico" type="image/x-icon">
<title data-ng-bind="$root.title + $root.titleDetail + ' | Flosight'">Flosight</title>
<meta name="keywords" content="flo, transactions, blocks, address, block chain, best block, mining difficulty, hash serialized">
<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="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>
<body ng-cloak class="ng-cloak">
<div>
@ -39,7 +40,7 @@
</script>
</div>
<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>
</div>
<div id="footer" role="navigation">
@ -57,17 +58,37 @@
</span>
&nbsp;
[
<a href="/messages/verify" translate>verify message</a>
<a href="messages/verify" translate>verify message</a>
<span> &middot; </span>
<a href="/tx/send" translate>broadcast transaction</a>
<a href="tx/send" translate>broadcast transaction</a>
]
</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>
<script src="/socket.io/socket.io.js"></script>
<script src="/js/vendors.min.js"></script>
<script src="/js/angularjs-all.min.js"></script>
<script src="/js/main.min.js"></script>
<script src="js/vendors.min.js"></script>
<script src="js/angularjs-all.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>
</html>

File diff suppressed because one or more lines are too long

7
public/js/clipboard.min.js vendored Executable file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -24,7 +24,7 @@ h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
/* Styling for the ngProgress itself */
#ngProgress {
background-color: #6C9032 !important;
background-color: #306d8e !important;
box-shadow: none !important;
color: #373D42 !important;
height: 3px !important;
@ -103,7 +103,7 @@ margin-left: 0;
}
.table-hover>tbody>tr:hover>td, .table-hover>tbody>tr:hover>th {
background-color: #F0F7E2;
background-color: #e8f6ff;
}
.navbar { min-height: 64px; }
.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 {
background-color: #8DC429;
background-color: #3d7c9f;
margin: 0;
border: 0;
}
@ -128,7 +128,7 @@ margin-left: 0;
}
.navbar-default .navbar-nav>.active>a, .navbar-default .navbar-nav>.active>a:focus {
background-color: #6C9032;
background-color: #406072;
color: #fff;
}
@ -148,7 +148,7 @@ margin-left: 0;
cursor: pointer;
}
.insight {
.flosight {
font-family: 'Ubuntu', sans-serif;
font-size: 34px;
font-style: italic;
@ -166,7 +166,7 @@ margin-left: 0;
}
.navbar-form .form-control {
background-color: #7CAD23;
background-color: #376177;
border-radius: 3px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
@ -184,7 +184,7 @@ margin-left: 0;
#search-form { color: #fff; }
#search.loading {
background-image: url('/img/loading.gif');
background-image: url('../img/loading.gif');
background-position: 5px center;
background-repeat: no-repeat;
padding-left: 25px;
@ -201,14 +201,14 @@ margin-left: 0;
#search { color: #fff; }
#search::-webkit-input-placeholder {
color: #BCDF7E;
color: #87bfdd;
font-family: 'Ubuntu', sans-serif;
font-style: italic;
font-weight: 100;
}
#search::-moz-placeholder {
color: #BCDF7E;
color: #87bfdd;
font-family: 'Ubuntu', sans-serif;
font-weight: 100;
}
@ -216,7 +216,7 @@ margin-left: 0;
.status {
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
background-color: #597338;
background-color: #376177;
border-radius: 3px;
margin: 15px 0;
padding: 8px 10px;
@ -316,8 +316,8 @@ margin-left: 0;
border-radius: 2px;
}
.btn-primary {
background-color: #8DC429;
border: 2px solid #76AF0F;
background-color: #218bc4;
border: 2px solid #0b71a8;
}
.btn-primary:hover, .btn-primary:focus, .btn-primary:active,
@ -363,7 +363,7 @@ margin-left: 0;
}
.txvalues-primary {
background-color: #8DC429;
background-color: #2587bc;
}
.txvalues-default {
@ -386,7 +386,7 @@ margin-left: 0;
font-size: 14px;
font-weight: normal;
}
.progress-bar-info { background-color: #8DC429; }
.progress-bar-info { background-color: #2587bc; }
/* Set the fixed height of the footer here */
#footer {
@ -396,17 +396,17 @@ margin-left: 0;
overflow: hidden;
}
#footer a.insight {
#footer a.flosight {
font-size: 20px;
text-decoration: none;
color: #fff;
}
#footer a.insight:hover {
#footer a.flosight:hover {
color: #fffffe;
}
#footer a.insight small { font-size: 11px; }
#footer a.flosight small { font-size: 11px; }
.line-footer { border-top: 2px dashed #ccc; }
#footer .links {
@ -535,6 +535,7 @@ margin-left: 0;
width: 16px;
outline: none;
vertical-align: sub;
border: none !important;
}
.btn-expand {
@ -548,7 +549,7 @@ margin-left: 0;
}
.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 {
@ -613,23 +614,23 @@ margin-left: 0;
float: left;
height: 45px;
}
#powered a.bitcore {
background-image: url('/img/logo.svg');
#powered a.flocore {
background-image: url('../img/logo.svg');
background-size: 80px;
width: 30%;
}
#powered a.nodejs {
background-image: url('/img/nodejs.png');
background-image: url('../img/nodejs.png');
background-size: 80px;
width: 30%;
}
#powered a.angularjs {
background-image: url('/img/angularjs.png');
background-image: url('../img/angularjs.png');
background-size: 50px;
width: 20%;
}
#powered a.leveldb {
background-image: url('/img/leveldb.png');
background-image: url('../img/leveldb.png');
background-size: 50px;
width: 20%;
}
@ -753,7 +754,7 @@ a.v_highlight_more {
h3 {
font-size: 18px;
}
.insight {
.flosight {
font-size: 30px;
}
.navbar-default .navbar-nav>li>a {
@ -787,7 +788,7 @@ a.v_highlight_more {
.navbar-default .navbar-brand {
padding: 15px;
}
.insight {
.flosight {
font-size: 26px;
}
.navbar-nav>li>a {

View File

@ -1,9 +1,9 @@
'use strict';
var defaultLanguage = localStorage.getItem('insight-language') || 'en';
var defaultCurrency = localStorage.getItem('insight-currency') || 'BTC';
var defaultLanguage = localStorage.getItem('flosight-language') || 'en';
var defaultCurrency = localStorage.getItem('flosight-currency') || 'FLO';
angular.module('insight',[
angular.module('flosight',[
'ngAnimate',
'ngResource',
'ngRoute',
@ -13,25 +13,27 @@ angular.module('insight',[
'monospaced.qrcode',
'gettext',
'angularMoment',
'insight.system',
'insight.socket',
'insight.blocks',
'insight.transactions',
'insight.address',
'insight.search',
'insight.status',
'insight.connection',
'insight.currency',
'insight.messages'
'flosight.system',
'flosight.socket',
'flosight.api',
'flosight.blocks',
'flosight.transactions',
'flosight.address',
'flosight.search',
'flosight.status',
'flosight.connection',
'flosight.currency',
'flosight.messages'
]);
angular.module('insight.system', []);
angular.module('insight.socket', []);
angular.module('insight.blocks', []);
angular.module('insight.transactions', []);
angular.module('insight.address', []);
angular.module('insight.search', []);
angular.module('insight.status', []);
angular.module('insight.connection', []);
angular.module('insight.currency', []);
angular.module('insight.messages', []);
angular.module('flosight.system', []);
angular.module('flosight.socket', []);
angular.module('flosight.api', []);
angular.module('flosight.blocks', []);
angular.module('flosight.transactions', []);
angular.module('flosight.address', []);
angular.module('flosight.search', []);
angular.module('flosight.status', []);
angular.module('flosight.connection', []);
angular.module('flosight.currency', []);
angular.module('flosight.messages', []);

View File

@ -1,56 +1,56 @@
'use strict';
//Setting up route
angular.module('insight').config(function($routeProvider) {
angular.module('flosight').config(function($routeProvider) {
$routeProvider.
when('/block/:blockHash', {
templateUrl: '/views/block.html',
title: 'Bitcoin Block '
templateUrl: 'views/block.html',
title: 'Flo Block '
}).
when('/block-index/:blockHeight', {
controller: 'BlocksController',
templateUrl: '/views/redirect.html'
templateUrl: 'views/redirect.html'
}).
when('/tx/send', {
templateUrl: '/views/transaction_sendraw.html',
templateUrl: 'views/transaction_sendraw.html',
title: 'Broadcast Raw Transaction'
}).
when('/tx/:txId/:v_type?/:v_index?', {
templateUrl: '/views/transaction.html',
title: 'Bitcoin Transaction '
templateUrl: 'views/transaction.html',
title: 'Flo Transaction '
}).
when('/', {
templateUrl: '/views/index.html',
templateUrl: 'views/index.html',
title: 'Home'
}).
when('/blocks', {
templateUrl: '/views/block_list.html',
title: 'Bitcoin Blocks solved Today'
templateUrl: 'views/block_list.html',
title: 'Flo Blocks solved Today'
}).
when('/blocks-date/:blockDate/:startTimestamp?', {
templateUrl: '/views/block_list.html',
title: 'Bitcoin Blocks solved '
templateUrl: 'views/block_list.html',
title: 'Flo Blocks solved '
}).
when('/address/:addrStr', {
templateUrl: '/views/address.html',
title: 'Bitcoin Address '
templateUrl: 'views/address.html',
title: 'Flo Address '
}).
when('/status', {
templateUrl: '/views/status.html',
templateUrl: 'views/status.html',
title: 'Status'
}).
when('/messages/verify', {
templateUrl: '/views/messages_verify.html',
templateUrl: 'views/messages_verify.html',
title: 'Verify Message'
})
.otherwise({
templateUrl: '/views/404.html',
templateUrl: 'views/404.html',
title: 'Error'
});
});
//Setting HTML5 Location Mode
angular.module('insight')
angular.module('flosight')
.config(function($locationProvider) {
$locationProvider.html5Mode(true);
$locationProvider.hashPrefix('!');

View File

@ -1,27 +1,37 @@
'use strict';
angular.module('insight.address').controller('AddressController',
angular.module('flosight.address').controller('AddressController',
function($scope, $rootScope, $routeParams, $location, Global, Address, getSocket) {
$scope.global = Global;
var socket = getSocket($scope);
var addrStr = $routeParams.addrStr;
var _startSocket = function () {
socket.emit('subscribe', $routeParams.addrStr);
socket.on($routeParams.addrStr, function(tx) {
$rootScope.$broadcast('tx', tx);
var beep = new Audio('/sound/transaction.mp3');
beep.play();
var _startSocket = function() {
socket.on('florincoind/addresstxid', function(data) {
if (data.address === addrStr) {
$rootScope.$broadcast('tx', data.txid);
var base = document.querySelector('base');
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() {
_startSocket();
});
$scope.params = $routeParams;
$scope.$on('$destroy', function(){
_stopSocket();
});
$scope.params = $routeParams;
$scope.findOne = function() {
$rootScope.currentAddr = $routeParams.addrStr;

View File

@ -1,6 +1,6 @@
'use strict';
angular.module('insight.blocks').controller('BlocksController',
angular.module('flosight.blocks').controller('BlocksController',
function($scope, $rootScope, $routeParams, $location, Global, Block, Blocks, BlockByHeight) {
$scope.global = Global;
$scope.loading = false;

View File

@ -1,6 +1,6 @@
'use strict';
angular.module('insight.connection').controller('ConnectionController',
angular.module('flosight.connection').controller('ConnectionController',
function($scope, $window, Status, getSocket, PeerSync) {
// Set initial values

View File

@ -1,6 +1,6 @@
'use strict';
angular.module('insight.currency').controller('CurrencyController',
angular.module('flosight.currency').controller('CurrencyController',
function($scope, $rootScope, Currency) {
$rootScope.currency.symbol = defaultCurrency;
@ -19,16 +19,29 @@ angular.module('insight.currency').controller('CurrencyController',
var response;
if (this.symbol === 'USD') {
response = _roundFloat((value * this.factor), 2);
} else if (this.symbol === 'mBTC') {
var USDValue = value * this.factor;
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;
response = _roundFloat((value * this.factor), 5);
} else if (this.symbol === 'bits') {
this.factor = 1000000;
response = _roundFloat((value * this.factor), 2);
} else {
} else { // assumes symbol is BTC
this.factor = 1;
response = value;
response = _roundFloat((value * this.factor), 8);
}
// prevent sci notation
if (response < 1e-7) response=response.toFixed(8);
@ -41,13 +54,13 @@ angular.module('insight.currency').controller('CurrencyController',
$scope.setCurrency = function(currency) {
$rootScope.currency.symbol = currency;
localStorage.setItem('insight-currency', currency);
localStorage.setItem('flosight-currency', currency);
if (currency === 'USD') {
Currency.get({}, function(res) {
$rootScope.currency.factor = $rootScope.currency.bitstamp = res.data.bitstamp;
});
} else if (currency === 'mBTC') {
} else if (currency === 'mFLO') {
$rootScope.currency.factor = 1000;
} else if (currency === 'bits') {
$rootScope.currency.factor = 1000000;

View File

@ -1,6 +1,6 @@
'use strict';
angular.module('insight.system').controller('FooterController',
angular.module('flosight.system').controller('FooterController',
function($scope, $route, $templateCache, gettextCatalog, amMoment, Version) {
$scope.defaultLanguage = defaultLanguage;
@ -31,7 +31,7 @@ angular.module('insight.system').controller('FooterController',
$scope.setLanguage = function(isoCode) {
gettextCatalog.currentLanguage = $scope.defaultLanguage = defaultLanguage = isoCode;
amMoment.changeLocale(isoCode);
localStorage.setItem('insight-language', isoCode);
localStorage.setItem('flosight-language', isoCode);
var currentPageTemplate = $route.current.templateUrl;
$templateCache.remove(currentPageTemplate);
$route.reload();

View File

@ -1,13 +1,13 @@
'use strict';
angular.module('insight.system').controller('HeaderController',
function($scope, $rootScope, $modal, getSocket, Global, Block) {
angular.module('flosight.system').controller('HeaderController',
function($scope, $rootScope, $modal, getSocket, Global, Block, Status) {
$scope.global = Global;
$rootScope.currency = {
factor: 1,
bitstamp: 0,
symbol: 'BTC'
symbol: 'FLO'
};
$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) {
Block.get({
blockHash: hash

View File

@ -3,16 +3,29 @@
var TRANSACTION_DISPLAYED = 10;
var BLOCKS_DISPLAYED = 5;
angular.module('insight.system').controller('IndexController',
angular.module('flosight.system').controller('IndexController',
function($scope, Global, getSocket, Blocks) {
$scope.global = Global;
var _getBlocks = function() {
var _getBlocks = function(loadTxs) {
Blocks.get({
limit: BLOCKS_DISPLAYED
}, function(res) {
$scope.blocks = res.blocks;
$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() {
_getBlocks();
_getBlocks(false);
});
};
@ -36,15 +49,13 @@ angular.module('insight.system').controller('IndexController',
_startSocket();
});
$scope.humanSince = function(time) {
var m = moment.unix(time);
return m.max().fromNow();
};
$scope.index = function() {
_getBlocks();
_getBlocks(true);
_startSocket();
};

View File

@ -1,7 +1,7 @@
'use strict';
angular.module('insight.messages').controller('VerifyMessageController',
function($scope, $http) {
angular.module('flosight.messages').controller('VerifyMessageController',
function($scope, $http, Api) {
$scope.message = {
address: '',
signature: '',
@ -22,7 +22,7 @@ angular.module('insight.messages').controller('VerifyMessageController',
$scope.verify = function() {
$scope.verification.status = 'loading';
$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) {
if(typeof(data.result) != 'boolean') {
// API returned 200 but result was not true or false

View File

@ -1,6 +1,6 @@
'use strict';
angular.module('insight.system').controller('ScannerController',
angular.module('flosight.system').controller('ScannerController',
function($scope, $rootScope, $modalInstance, Global) {
$scope.global = Global;
@ -112,7 +112,7 @@ angular.module('insight.system').controller('ScannerController',
qrcode.callback = function(data) {
_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);
$searchInput
.val(str)

View File

@ -1,6 +1,6 @@
'use strict';
angular.module('insight.search').controller('SearchController',
angular.module('flosight.search').controller('SearchController',
function($scope, $routeParams, $location, $timeout, Global, Block, Transaction, Address, BlockByHeight) {
$scope.global = Global;
$scope.loading = false;

View File

@ -1,6 +1,6 @@
'use strict';
angular.module('insight.status').controller('StatusController',
angular.module('flosight.status').controller('StatusController',
function($scope, $routeParams, $location, Global, Status, Sync, getSocket) {
$scope.global = Global;

View File

@ -1,6 +1,6 @@
'use strict';
angular.module('insight.transactions').controller('transactionsController',
angular.module('flosight.transactions').controller('transactionsController',
function($scope, $rootScope, $routeParams, $location, Global, Transaction, TransactionsByBlock, TransactionsByAddress) {
$scope.global = Global;
$scope.loading = false;
@ -174,8 +174,8 @@ function($scope, $rootScope, $routeParams, $location, Global, Transaction, Trans
});
angular.module('insight.transactions').controller('SendRawTransactionController',
function($scope, $http) {
angular.module('flosight.transactions').controller('SendRawTransactionController',
function($scope, $http, Api) {
$scope.transaction = '';
$scope.status = 'ready'; // ready|loading|sent|error
$scope.txid = '';
@ -189,7 +189,7 @@ angular.module('insight.transactions').controller('SendRawTransactionController'
rawtx: $scope.transaction
};
$scope.status = 'loading';
$http.post('/api/tx/send', postData)
$http.post(Api.apiPrefix + '/tx/send', postData)
.success(function(data, status, headers, config) {
if(typeof(data.txid) != 'string') {
// API returned 200 but the format is not known

View File

@ -2,7 +2,7 @@
var ZeroClipboard = window.ZeroClipboard;
angular.module('insight')
angular.module('flosight')
.directive('scroll', function ($window) {
return function(scope, element, attrs) {
angular.element($window).bind('scroll', function() {
@ -40,36 +40,31 @@ angular.module('insight')
}
};
})
.directive('clipCopy', function() {
ZeroClipboard.config({
moviePath: '/lib/zeroclipboard/ZeroClipboard.swf',
trustedDomains: ['*'],
allowScriptAccess: 'always',
forceHandCursor: true
});
.directive('dataClipboardText', function() {
return {
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>',
link: function(scope, elm) {
var clip = new ZeroClipboard(elm);
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);
});
var clip = new ClipboardJS(elm, {
text: scope.dataClipboardText
});
clip.on('noFlash wrongflash', function() {
return elm.remove();
});
// 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() {
// return elm.remove();
// });
}
};
})

View File

@ -1,6 +1,6 @@
'use strict';
angular.module('insight')
angular.module('flosight')
.filter('startFrom', function() {
return function(input, start) {
start = +start; //parse to int

View File

@ -2,5 +2,5 @@
angular.element(document).ready(function() {
// Init the app
// angular.bootstrap(document, ['insight']);
// angular.bootstrap(document, ['flosight']);
});

View File

@ -1,8 +1,8 @@
'use strict';
angular.module('insight.address').factory('Address',
function($resource) {
return $resource('/api/addr/:addrStr/?noTxList=1', {
angular.module('flosight.address').factory('Address',
function($resource, Api) {
return $resource(Api.apiPrefix + '/addr/:addrStr/?noTxList=1', {
addrStr: '@addStr'
}, {
get: {
@ -21,3 +21,4 @@ angular.module('insight.address').factory('Address',
});
});

View File

@ -0,0 +1,9 @@
'use strict';
angular.module('flosight.api')
.factory('Api',
function() {
return {
apiPrefix: '/api'
}
});

View File

@ -1,9 +1,9 @@
'use strict';
angular.module('insight.blocks')
angular.module('flosight.blocks')
.factory('Block',
function($resource) {
return $resource('/api/block/:blockHash', {
function($resource, Api) {
return $resource(Api.apiPrefix + '/block/:blockHash', {
blockHash: '@blockHash'
}, {
get: {
@ -22,10 +22,10 @@ angular.module('insight.blocks')
});
})
.factory('Blocks',
function($resource) {
return $resource('/api/blocks');
function($resource, Api) {
return $resource(Api.apiPrefix + '/blocks');
})
.factory('BlockByHeight',
function($resource) {
return $resource('/api/block-index/:blockHeight');
function($resource, Api) {
return $resource(Api.apiPrefix + '/block-index/:blockHeight');
});

View File

@ -1,6 +1,6 @@
'use strict';
angular.module('insight.currency').factory('Currency',
function($resource) {
return $resource('/api/currency');
angular.module('flosight.currency').factory('Currency',
function($resource, Api) {
return $resource(Api.apiPrefix + '/currency');
});

View File

@ -1,12 +1,12 @@
'use strict';
//Global service for global variables
angular.module('insight.system')
angular.module('flosight.system')
.factory('Global',[
function() {
}
])
.factory('Version',
function($resource) {
return $resource('/api/version');
function($resource, Api) {
return $resource(Api.apiPrefix + '/version');
});

View File

@ -39,8 +39,9 @@ ScopedSocket.prototype.on = function(event, callback) {
ScopedSocket.prototype.emit = function(event, data, callback) {
var socket = this.socket;
var $rootScope = this.$rootScope;
var args = Array.prototype.slice.call(arguments);
socket.emit(event, data, function() {
args.push(function() {
var args = arguments;
$rootScope.$apply(function() {
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) {
var socket = io.connect(null, {
'reconnect': true,

View File

@ -1,17 +1,17 @@
'use strict';
angular.module('insight.status')
angular.module('flosight.status')
.factory('Status',
function($resource) {
return $resource('/api/status', {
function($resource, Api) {
return $resource(Api.apiPrefix + '/status', {
q: '@q'
});
})
.factory('Sync',
function($resource) {
return $resource('/api/sync');
function($resource, Api) {
return $resource(Api.apiPrefix + '/sync');
})
.factory('PeerSync',
function($resource) {
return $resource('/api/peer');
function($resource, Api) {
return $resource(Api.apiPrefix + '/peer');
});

View File

@ -1,9 +1,9 @@
'use strict';
angular.module('insight.transactions')
angular.module('flosight.transactions')
.factory('Transaction',
function($resource) {
return $resource('/api/tx/:txId', {
function($resource, Api) {
return $resource(Api.apiPrefix + '/tx/:txId', {
txId: '@txId'
}, {
get: {
@ -22,18 +22,18 @@ angular.module('insight.transactions')
});
})
.factory('TransactionsByBlock',
function($resource) {
return $resource('/api/txs', {
function($resource, Api) {
return $resource(Api.apiPrefix + '/txs', {
block: '@block'
});
})
.factory('TransactionsByAddress',
function($resource) {
return $resource('/api/txs', {
function($resource, Api) {
return $resource(Api.apiPrefix + '/txs', {
address: '@address'
});
})
.factory('Transactions',
function($resource) {
return $resource('/api/txs');
function($resource, Api) {
return $resource(Api.apiPrefix + '/txs');
});

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,9 @@
'use strict';
angular.module('flosight.api')
.factory('Api',
function() {
return {
apiPrefix: '/INSIGHT_API_PREFIX'
}
});

View File

@ -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">
<h1>Ooops!</h1>
<h2 translate class="text-muted">404 Page not found :(</h2>

View File

@ -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()">
<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="col-md-8 text-left">
<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 class="col-md-4">
<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">
<strong translate>Address</strong>
<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>
<h2 translate>Summary <small>confirmed</small></h2>
<div class="row" data-ng-hide="!address.addrStr">
@ -74,7 +74,7 @@
</div>
<div data-ng-if="address.addrStr" data-ng-controller="transactionsController" data-ng-init="load('address')">
<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>
</section>

View File

@ -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()">
<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="row">
<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 class="col-md-10">
<div class="row">
@ -15,12 +15,12 @@
<strong>Hash</strong> {{block.hash}}
</p>
<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 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> <!-- END OF CONTAINER -->
@ -39,7 +39,7 @@
<div class="well well-sm ellipsis">
<strong>BlockHash</strong>
<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>
<h2 translate>Summary</h2>
<div class="row">
@ -75,14 +75,14 @@
<td><strong>Merkle Root</strong></td>
<td class="text-right text-muted">
<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>
</div>
</td>
</tr>
<tr data-ng-show="block.previousblockhash">
<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>
</tbody>
</table>
@ -112,7 +112,7 @@
</tr>
<tr data-ng-show="block.nextblockhash">
<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>
</tbody>
</table>
@ -121,7 +121,7 @@
</div>
<div data-ng-if="block.hash" data-ng-controller="transactionsController" data-ng-init="load('block')">
<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>
</section>

View File

@ -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()">
<div class="row">
<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="loading">&nbsp;</p>
<div class="m50v text-center">
<a class="btn btn-primary" href="/blocks-date/{{pagination.prev}}"><small>&larr; {{pagination.prev}}</small></a>
<a class="btn btn-primary" href="/blocks-date/{{pagination.next}}" data-ng-show="!pagination.isToday"><small>{{pagination.next}} &rarr;</small></a>
<a class="btn btn-primary" href="blocks-date/{{pagination.prev}}"><small>&larr; {{pagination.prev}}</small></a>
<a class="btn btn-primary" href="blocks-date/{{pagination.next}}" data-ng-show="!pagination.isToday"><small>{{pagination.next}} &rarr;</small></a>
</div>
</div>
</div>
@ -49,7 +49,7 @@
<td colspan="5"><span translate>Waiting for blocks...</span> <span class="loader-gif"></span></td>
</tr>
<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 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>
@ -58,8 +58,8 @@
</tbody>
</table>
<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}}/{{pagination.moreTs}}">Older blocks from this 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>
</div>
</div>
</div>

View File

@ -7,11 +7,11 @@
<strong translate>Error!</strong>
<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 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 data-ng-show="!clienteOnline" translate>

View File

@ -3,16 +3,16 @@
</a>
<ul class="dropdown-menu">
<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>
<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>
<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>
<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>
</ul>

View File

@ -7,15 +7,15 @@
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</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 class="navbar-collapse collapse" collapse="$root.isCollapsed">
<ul class="nav navbar-nav">
<li data-ng-repeat="item in menu" ui-route="/{{item.link}}" data-ng-class="{active: $uiRoute}">
<a href="/{{item.link}}">{{item.title|translate}}</a>
<li data-ng-repeat="item in menu" ui-route="{{item.link}}" data-ng-class="{active: $uiRoute}">
<a href="{{item.link}}">{{item.title|translate}}</a>
</li>
</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">
<li>
<div class="status" data-ng-controller="StatusController">
@ -38,10 +38,10 @@
</div>
</li>
<li>
<a href="#" data-ng-click="openScannerModal()"><span class="glyphicon
<a data-ng-click="openScannerModal()"><span class="glyphicon
glyphicon-qrcode"></span> Scan</a>
</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>
</div>
</div>

View File

@ -1,13 +1,13 @@
<div class="alert alert-danger" data-ng-show="flashMessage">
{{$root.flashMessage}}
</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()">
<div class="container">
<div id="home" class="row">
<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>
<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 class="fader" data-ng-repeat='b in blocks'>
<td>
<a href="/block/{{b.hash}}">{{b.height}}</a>
<a href="block/{{b.hash}}">{{b.height}}</a>
</td>
<td><span class="ellipsis">{{humanSince(b.time)}}</span></td>
<td class="text-right">{{b.txlength}}</td>
@ -34,7 +34,7 @@
</tbody>
</table>
<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>
<h2 translate>Latest Transactions</h2>
@ -44,15 +44,17 @@
<tr>
<th>Hash</th>
<th class="text-right" translate>Value Out</th>
<th class="text-right" translate>floData</th>
</tr>
</thead>
<tbody>
<tr data-ng-show="!txs.length"><td colspan="3" translate>Waiting for transactions...</td></tr>
<tr class="fader" data-ng-repeat='tx in txs'>
<td>
<a class="ellipsis" href="/tx/{{tx.txid}}">{{tx.txid}}</a>
<a class="ellipsis" href="tx/{{tx.txid}}">{{tx.txid}}</a>
</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>
</tbody>
</table>
@ -61,14 +63,14 @@
<div class="col-xs-12 col-md-4 col-gray">
<h2 translate>About</h2>
<p translate><strong>insight</strong> is an <a href="http://live.insight.is/"
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>
<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 an <a href="https://flocha.in/"
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>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 class="powered-text">
<small class="text-muted" translate>Powered by</small>
</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="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>

View File

@ -70,11 +70,10 @@
</div>
<div class="col-xs-12 col-md-4 col-gray">
<p translate>
Bitcoin comes with a way of signing arbitrary messages.
Flo comes with a way of signing arbitrary messages.
</p>
<p translate>
This form can be used to verify that a message comes from
a specific Bitcoin address.
This form can be used to verify that a message comes from a specific Flo address.
</p>
</div>
</div>

View File

@ -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>
<div class="page-header">
<h1 translate>Application Status</h1>
@ -60,66 +60,25 @@
<h2 translate>Last Block</h2>
<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>
<tr>
<td translate>Last Block Hash (Bitcoind)</td>
<td class="text-right ellipsis"><a href="/block/{{lastblockhash}}">{{lastblockhash}}</a></td>
<td translate>Last Block Hash (Flod)</td>
<td class="text-right ellipsis"><a href="block/{{lastblockhash}}">{{lastblockhash}}</a></td>
</tr>
<tr>
<td translate>Current Blockchain Tip (insight)</td>
<td class="text-right ellipsis"><a href="/block/{{syncTipHash}}">{{syncTipHash}}</a></td>
<td translate>Current Blockchain Tip (flosight)</td>
<td class="text-right ellipsis"><a href="block/{{syncTipHash}}">{{syncTipHash}}</a></td>
</tr>
</tbody>
</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 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')">
<thead data-ng-include src="'/views/includes/infoStatus.html'"></thead>
<thead data-ng-include src="'views/includes/infoStatus.html'"></thead>
<tbody>
<tr>
<td translate>Version</td>
@ -131,7 +90,7 @@
</tr>
<tr>
<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>
<td translate>Time Offset</td>
@ -146,8 +105,8 @@
<td class="text-right">{{info.difficulty}}</td>
</tr>
<tr>
<td translate>Testnet</td>
<td class="text-right">{{info.testnet}}</td>
<td translate>Network</td>
<td class="text-right">{{info.network}}</td>
</tr>
<tr>
<td translate>Proxy setting</td>

View File

@ -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()">
<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">
@ -6,7 +6,7 @@
<h3 translate>Transaction</h3>
<div class="ellipsis">
<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 class="col-md-6 col-lg-5 text-right">
@ -43,7 +43,7 @@
<div class="well well-sm ellipsis">
<strong translate>Transaction</strong>
<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>
<h2 translate>Summary</h2>
<table class="table" style="table-layout: fixed">
@ -63,14 +63,14 @@
</tr>
<tr>
<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.time" class="text-muted text-right">N/A</td>
<td data-ng-show="tx.blocktime" class="text-muted text-right">{{tx.blocktime * 1000|date:'medium'}}</td>
<td data-ng-show="!tx.blocktime" class="text-muted text-right">N/A</td>
</tr>
<tr>
<td><strong translate>Included in Block</strong></td>
<td data-ng-show="tx.blockhash" class="text-muted text-right">
<div class="ellipsis">
<a href="/block/{{tx.blockhash}}">{{tx.blockhash}}</a>
<a href="block/{{tx.blockhash}}">{{tx.blockhash}}</a>
</div>
<td data-ng-show="!tx.blockhash" class="text-muted text-right">Unconfirmed</td>
</tr>
@ -82,7 +82,7 @@
<td><strong>Coinbase</strong></td>
<td class="text-muted text-right">
<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>
</div>
</td>
@ -92,7 +92,7 @@
</div>
<h2 translate>Details</h2>
<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>
</section>

View File

@ -2,7 +2,7 @@
data-ng-show="!txs[0].txid && !loading"
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 data-ng-include src="'/views/transaction/tx.html'"></div>
<div data-ng-include src="'views/transaction/tx.html'"></div>
</div>
<div class="progress progress-striped active" data-ng-show="loading">
<div class="progress-bar progress-bar-info" style="width: 100%">

View File

@ -1,11 +1,11 @@
<div class="line-bot row" data-ng-hide="!tx">
<div class="col-xs-7 col-md-8">
<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>
</a>
<a href="/tx/{{tx.txid}}">{{tx.txid}}</a>
<span class="btn-copy" clip-copy="tx.txid"></span>
<a href="tx/{{tx.txid}}">{{tx.txid}}</a>
<button class="btn-copy" data-clipboard-text="{{tx.txid}}"></button>
</div>
</div>
<div class="col-xs-5 col-md-4 text-right text-muted">
@ -13,7 +13,7 @@
<span translate>first seen at</span>
<time>{{tx.firstSeenTs * 1000 | date:'medium'}}</time>
</div>
<div data-ng-show="tx.time && !tx.firstSeenTs">
<div data-ng-show="tx.blocktime && !tx.firstSeenTs">
<span translate>mined</span>
<time>{{tx.time * 1000 | date:'medium'}}</time>
</div>
@ -39,8 +39,8 @@
</div>
<div class="ellipsis">
<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>
<a href="/address/{{vin.addr}}" data-ng-show="!vin.notAddr && vin.addr != $root.currentAddr">{{vin.addr}}</a>
<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>
</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">
@ -50,7 +50,7 @@
<div data-ng-show="vin.doubleSpentTxID" class="text-danger">
<span class="glyphicon glyphicon-warning-sign"></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>
@ -71,9 +71,9 @@
{{$root.currency.getConvertion(vin.value) || vin.value + ' BTC'}}
</div>
<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>
<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 data-ng-show="vin.unconfirmedInput" class="text-danger">
<span class="glyphicon glyphicon-warning-sign"></span>
@ -86,7 +86,7 @@
<div data-ng-show="vin.doubleSpentTxID" class="text-danger">
<span class="glyphicon glyphicon-warning-sign"></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> <!-- END OF PANEL BODY -->
</div> <!-- END OF PANEL-DEFAULT -->
@ -95,7 +95,7 @@
<p><strong>scriptSig</strong></p>
<div data-ng-repeat="item in vin.scriptSig.asm | split:' '" class="">
<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>
@ -137,8 +137,8 @@
<div class="ellipsis">
<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>
<a href="/address/{{address}}" data-ng-show="!vout.notAddr && address != $root.currentAddr" data-ng-repeat="address in vout.addr.split(',')">{{address}}</a>
<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>
</div>
</div>
</div>
@ -159,11 +159,11 @@
<div class="pull-right btc-value">
<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>
<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>
</div>
<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>
@ -175,7 +175,7 @@
<div class="small">
<p><strong>scriptPubKey</strong></p>
<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>
@ -193,19 +193,28 @@
</div>
<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>
<span class="btn-copy" clip-copy="tx.blockhash"></span>
<strong translate>Included in Block</strong> <a class="text-muted" href="block/{{tx.blockhash}}">{{tx.blockhash}}</a>
<button class="btn-copy" data-clipboard-text="{{tx.blockhash}}"></button>
</div>
<div class="line-top row" data-ng-hide="!tx">
<div class="col-xs-6 col-sm-4 col-md-4">
<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 class="col-xs-6 col-sm-8 col-md-8 text-right">
<span data-ng-show="tx.confirmations" class="txvalues
txvalues-success">{{tx.confirmations}} <span translate>Confirmations</span></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>

View File

@ -47,8 +47,7 @@
</div>
<div class="col-xs-12 col-md-4 col-gray">
<p translate>
This form can be used to broadcast a raw transaction in hex format over
the Bitcoin network.
This form can be used to broadcast a raw transaction in hex format over the Flo network.
</p>
</div>
</div>

4
test/test.js Normal file
View File

@ -0,0 +1,4 @@
describe('should test', function() {
it('test', function() {
});
});