Compare commits
177 Commits
Author | SHA1 | Date |
---|---|---|
Larry Ruane | 5a5fdc2aad | |
Simon | aa3f3c8b27 | |
Simon | 78f050070a | |
Simon | 010e6af5de | |
Simon | 9c67396e94 | |
Jack Grigg | ce057c4338 | |
Jack Grigg | 6630449b7e | |
Jack Grigg | 7ea8ed4bf3 | |
Jack Grigg | 130a8b2031 | |
Jack Grigg | 5fd8e9071e | |
Jack Grigg | 4def8706b1 | |
Jack Grigg | b6a64af705 | |
Jack Grigg | fcf035d140 | |
Jack Grigg | 12d960183c | |
Jack Grigg | 07dcf73a98 | |
Jack Grigg | 1d5273d621 | |
Jack Grigg | 83fb8fe973 | |
Jack Grigg | 880f629811 | |
Jack Grigg | ade6b06fae | |
Jack Grigg | 5d45cd463e | |
Jack Grigg | 5162ec052d | |
Jack Grigg | 66b5e70114 | |
Jack Grigg | e71dbd81d0 | |
Jack Grigg | afa8866655 | |
Jack Grigg | 93d1b3bad1 | |
Braydon Fuller | ddcd05cbc2 | |
Chris Kleeschulte | df19530235 | |
Braydon Fuller | d7c161d7b6 | |
Braydon Fuller | ffed19b8b3 | |
Braydon Fuller | 0a06f9aba9 | |
Braydon Fuller | f50abae460 | |
Braydon Fuller | 3532cd25a1 | |
Braydon Fuller | 923c596b74 | |
Cryptoanarchist | f002131366 | |
Cryptoanarchist | 3ff860c483 | |
Matias Alejo Garcia | e3ef214b21 | |
Braydon Fuller | 653fd60a24 | |
Matias Alejo Garcia | d16892d7af | |
Braydon Fuller | 2e013122db | |
Braydon Fuller | 840fd0db21 | |
Stephen Pair | 7c5a79c80a | |
Patrick Nagurny | 7d68b0cc82 | |
Braydon Fuller | e006e5cbcd | |
Braydon Fuller | 7ec3124d82 | |
Braydon Fuller | c45a0edd60 | |
Patrick Nagurny | 933c378a8d | |
Braydon Fuller | accff4e43c | |
Matias Alejo Garcia | fb43ff70d4 | |
Chris Kleeschulte | 19974a7d3d | |
Chris Kleeschulte | 4684224a53 | |
Braydon Fuller | b5251849a0 | |
Patrick Nagurny | 2105492ff9 | |
Braydon Fuller | e45396435b | |
Braydon Fuller | fc15f2982f | |
Braydon Fuller | af08592d01 | |
Patrick Nagurny | dd3d590a44 | |
Patrick Nagurny | e4eb09f87f | |
Braydon Fuller | 36f5c75880 | |
Patrick Nagurny | a9828d8539 | |
Patrick Nagurny | 1d70f0196c | |
Matias Alejo Garcia | 4253de1ed4 | |
Matias Alejo Garcia | 443507c6bd | |
Gustavo Maximiliano Cortez | 52b665e79a | |
Matias Alejo Garcia | c2a0dee752 | |
Matias Alejo Garcia | aae6847235 | |
Gustavo Maximiliano Cortez | 805099de1b | |
Matias Alejo Garcia | 53d8cd4412 | |
Gustavo Maximiliano Cortez | aaa21faae5 | |
Gustavo Maximiliano Cortez | ea0adc1d9e | |
dabura667 | 4d3e71a346 | |
Gustavo Maximiliano Cortez | 81c71415ed | |
Matias Alejo Garcia | 07d8dddfb3 | |
Matias Alejo Garcia | 8241dfe9ba | |
Matias Alejo Garcia | d188b2512c | |
dabura667 | 1423811d4e | |
Matias Alejo Garcia | 9183ffcf10 | |
dabura667 | 245e52d6fb | |
Gustavo Maximiliano Cortez | 76e47fd077 | |
Sascha Dückers | d91894e0ea | |
Matias Alejo Garcia | 9e7ff7e092 | |
Dana Hanna | 1a821f9c2a | |
Gustavo Maximiliano Cortez | 79341717ec | |
Gustavo Maximiliano Cortez | af028e41e6 | |
Gustavo Maximiliano Cortez | 51a6ff9e85 | |
Manuel Aráoz | 7d4014f573 | |
BlaiseExpMore25 | e4a82a838b | |
Matias Alejo Garcia | f29f5a8f4a | |
Vis Virial | 5435744f05 | |
Manuel Aráoz | 94faf2d9f9 | |
Rainer Koirikivi | f20550259f | |
Rainer Koirikivi | f47133cd4b | |
Matias Alejo Garcia | 594216e998 | |
Andrew Hart | 8bde44134b | |
Gustavo Maximiliano Cortez | 2852afc12b | |
Gustavo Maximiliano Cortez | c1d14c6652 | |
Gustavo Maximiliano Cortez | 40411ca2aa | |
Matias Alejo Garcia | adc3f2ade4 | |
Andrew Hart | 5b48e4444d | |
Andrew Hart | 7698739215 | |
Gustavo Maximiliano Cortez | 0b255f5f32 | |
Andrew Hart | dd2d32a06a | |
Andrew Hart | 67ff2cd06a | |
Andrew Hart | d6b90fe871 | |
Andrew Hart | 9e6fccc554 | |
Gustavo Maximiliano Cortez | 4225e59ae0 | |
Andrew Hart | 5217763a1e | |
Andrew Hart | b1cb8d7209 | |
Matias Alejo Garcia | 3c2add5f36 | |
Andrew Hart | f7bec5285a | |
Matias Alejo Garcia | 9945a0bdc9 | |
Matias Alejo Garcia | 253ea739d7 | |
Gustavo Maximiliano Cortez | 793fc4216a | |
Gustavo Maximiliano Cortez | 8ea1d1e9c4 | |
Matias Alejo Garcia | 56c0660c87 | |
Andrew Hart | 9e33a4abd8 | |
Andrew Hart | beee5a3003 | |
Gustavo Maximiliano Cortez | 2341dcc12f | |
Gustavo Maximiliano Cortez | 4d8068301a | |
Manuel Aráoz | b8f624f1e0 | |
Pierre Rochard | a4465279f1 | |
Matias Alejo Garcia | 26f24480fd | |
Matias Alejo Garcia | 2a048cdd64 | |
Matias Alejo Garcia | bd51c9575a | |
Gustavo Maximiliano Cortez | 33c9120991 | |
Gustavo Maximiliano Cortez | c788ef0c2f | |
Matias Alejo Garcia | cab5dd438b | |
Gustavo Maximiliano Cortez | 5e058c2f6f | |
Yemel Jardi | bee6de08a4 | |
Manuel Araoz | 7681797b90 | |
Manuel Araoz | f2b8fd3531 | |
Gustavo Maximiliano Cortez | 72028e4314 | |
Gustavo Maximiliano Cortez | c94765bca5 | |
Gustavo Maximiliano Cortez | a8aebfe14a | |
Gustavo Maximiliano Cortez | 48cdac80fb | |
Gustavo Maximiliano Cortez | d8712e7a83 | |
Matias Alejo Garcia | 45caf5a40a | |
Matias Alejo Garcia | 9f3f0bfd09 | |
Matias Alejo Garcia | d8936051aa | |
Drak | 4f9216969d | |
Matias Alejo Garcia | 22df1545e4 | |
sandakersmann | 9c2a3b1981 | |
Matias Alejo Garcia | c1e06dd5df | |
Drak | 8d54e087f0 | |
Gustavo Maximiliano Cortez | 7a0f62eeff | |
Matias Alejo Garcia | aa74f13a24 | |
Matias Alejo Garcia | 7cde324aac | |
Matias Alejo Garcia | f18dc83cd6 | |
Mario Colque | e5f7327d1f | |
Matias Alejo Garcia | e09d0643dc | |
Matias Alejo Garcia | 4b149c87bf | |
Matias Alejo Garcia | b27b01215f | |
Matias Alejo Garcia | 9694e415d1 | |
Matias Alejo Garcia | 99afc7e187 | |
Matias Alejo Garcia | c4a3b874d5 | |
Matias Alejo Garcia | 1aa7dde498 | |
Matias Alejo Garcia | cc6c077678 | |
Matias Alejo Garcia | 19a907aed3 | |
Mario Colque | fca0ccc0ec | |
Gustavo Cortez | 58b7b67103 | |
Mario Colque | f55ece0642 | |
Gustavo Cortez | f5c930adef | |
Gustavo Maximiliano Cortez | 6aa38d2046 | |
Matias Alejo Garcia | d28d83b90a | |
Gustavo Cortez | d82b0ecebd | |
Gustavo Cortez | 3604ff8651 | |
Gustavo Maximiliano Cortez | 36b183f26d | |
Mario Colque | ae839a0fc8 | |
Mario Colque | 91b00a0088 | |
Gustavo Cortez | fd23d9c722 | |
Gustavo Cortez | 29c24884e5 | |
Gustavo Cortez | e0e6c94ae7 | |
Gustavo Cortez | 7b6986e46b | |
Gustavo Cortez | 8baf5dd691 | |
Gustavo Maximiliano Cortez | eefaf0ae6a | |
Matias Alejo Garcia | e273ec998c | |
Matias Alejo Garcia | a48a611de5 | |
Matias Alejo Garcia | bb4bf112d9 |
|
@ -45,3 +45,5 @@ public/js/vendors.js
|
|||
public/css/main.css
|
||||
|
||||
README.html
|
||||
po/*
|
||||
!po/*.po
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
lib-cov
|
||||
*.seed
|
||||
*.log
|
||||
*.csv
|
||||
*.dat
|
||||
*.out
|
||||
*.pid
|
||||
*.gz
|
||||
*.swp
|
||||
tags
|
||||
pids
|
||||
logs
|
||||
results
|
||||
build
|
||||
|
||||
node_modules
|
||||
|
||||
# extras
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
.project
|
||||
peerdb.json
|
||||
|
||||
npm-debug.log
|
||||
.nodemonignore
|
||||
|
||||
.DS_Store
|
||||
db/txs/*
|
||||
db/txs
|
||||
db/testnet/txs/*
|
||||
db/testnet/txs
|
||||
db/blocks/*
|
||||
db/blocks
|
||||
db/testnet/blocks/*
|
||||
db/testnet/blocks
|
||||
|
||||
README.html
|
||||
k*
|
42
Gruntfile.js
42
Gruntfile.js
|
@ -9,6 +9,7 @@ module.exports = function(grunt) {
|
|||
grunt.loadNpmTasks('grunt-css');
|
||||
grunt.loadNpmTasks('grunt-markdown');
|
||||
grunt.loadNpmTasks('grunt-macreload');
|
||||
grunt.loadNpmTasks('grunt-angular-gettext');
|
||||
|
||||
// Project Configuration
|
||||
grunt.initConfig({
|
||||
|
@ -25,19 +26,26 @@ module.exports = function(grunt) {
|
|||
}
|
||||
},
|
||||
vendors: {
|
||||
src: ['public/src/js/ios-imagefile-megapixel/megapix-image.js', 'public/lib/qrcode-generator/js/qrcode.js', 'public/src/js/jsqrcode/grid.js', 'public/src/js/jsqrcode/version.js', 'public/src/js/jsqrcode/detector.js', 'public/src/js/jsqrcode/formatinf.js', 'public/src/js/jsqrcode/errorlevel.js', 'public/src/js/jsqrcode/bitmat.js', 'public/src/js/jsqrcode/datablock.js', 'public/src/js/jsqrcode/bmparser.js', 'public/src/js/jsqrcode/datamask.js', 'public/src/js/jsqrcode/rsdecoder.js', 'public/src/js/jsqrcode/gf256poly.js', 'public/src/js/jsqrcode/gf256.js', 'public/src/js/jsqrcode/decoder.js', 'public/src/js/jsqrcode/qrcode.js', 'public/src/js/jsqrcode/findpat.js', 'public/src/js/jsqrcode/alignpat.js', 'public/src/js/jsqrcode/databr.js', 'public/lib/momentjs/min/moment.min.js', 'public/lib/zeroclipboard/ZeroClipboard.min.js'],
|
||||
src: ['public/src/js/ios-imagefile-megapixel/megapix-image.js', 'public/lib/qrcode-generator/js/qrcode.js', 'public/src/js/jsqrcode/grid.js', 'public/src/js/jsqrcode/version.js', 'public/src/js/jsqrcode/detector.js', 'public/src/js/jsqrcode/formatinf.js', 'public/src/js/jsqrcode/errorlevel.js', 'public/src/js/jsqrcode/bitmat.js', 'public/src/js/jsqrcode/datablock.js', 'public/src/js/jsqrcode/bmparser.js', 'public/src/js/jsqrcode/datamask.js', 'public/src/js/jsqrcode/rsdecoder.js', 'public/src/js/jsqrcode/gf256poly.js', 'public/src/js/jsqrcode/gf256.js', 'public/src/js/jsqrcode/decoder.js', 'public/src/js/jsqrcode/qrcode.js', 'public/src/js/jsqrcode/findpat.js', 'public/src/js/jsqrcode/alignpat.js', 'public/src/js/jsqrcode/databr.js', 'public/lib/moment/min/moment.min.js', 'public/lib/moment/lang/es.js', 'public/lib/zeroclipboard/ZeroClipboard.min.js',
|
||||
'public/lib/c3/c3.min.js',
|
||||
'public/lib/d3/d3.min.js'
|
||||
],
|
||||
dest: 'public/js/vendors.js'
|
||||
},
|
||||
angular: {
|
||||
src: ['public/lib/angular/angular.min.js', 'public/lib/angular-resource/angular-resource.min.js', 'public/lib/angular-route/angular-route.min.js', 'public/lib/angular-qrcode/qrcode.js', 'public/lib/angular-animate/angular-animate.min.js', 'public/lib/angular-bootstrap/ui-bootstrap.js', 'public/lib/angular-bootstrap/ui-bootstrap-tpls.js', 'public/lib/angular-ui-utils/ui-utils.min.js', 'public/lib/ngprogress/build/ngProgress.min.js'],
|
||||
src: ['public/lib/angular/angular.min.js', 'public/lib/angular-resource/angular-resource.min.js', 'public/lib/angular-route/angular-route.min.js', 'public/lib/angular-qrcode/qrcode.js', 'public/lib/angular-animate/angular-animate.min.js', 'public/lib/angular-bootstrap/ui-bootstrap.js', 'public/lib/angular-bootstrap/ui-bootstrap-tpls.js', 'public/lib/angular-ui-utils/ui-utils.min.js', 'public/lib/ngprogress/build/ngProgress.min.js', 'public/lib/angular-gettext/dist/angular-gettext.min.js', 'public/lib/angular-moment/angular-moment.min.js'],
|
||||
dest: 'public/js/angularjs-all.js'
|
||||
},
|
||||
main: {
|
||||
src: ['public/src/js/app.js', 'public/src/js/controllers/*.js', 'public/src/js/services/*.js', 'public/src/js/directives.js', 'public/src/js/filters.js', 'public/src/js/config.js', 'public/src/js/init.js'],
|
||||
src: ['public/src/js/app.js', 'public/src/js/controllers/*.js', 'public/src/js/services/*.js', 'public/src/js/directives.js', 'public/src/js/filters.js', 'public/src/js/config.js', 'public/src/js/init.js', 'public/src/js/translations.js'],
|
||||
dest: 'public/js/main.js'
|
||||
},
|
||||
css: {
|
||||
src: ['public/lib/bootstrap/dist/css/bootstrap.min.css', 'public/src/css/**/*.css'],
|
||||
src: [
|
||||
'public/lib/bootstrap/dist/css/bootstrap.min.css',
|
||||
'public/lib/c3/c3.min.css',
|
||||
'public/src/css/**/*.css'
|
||||
],
|
||||
dest: 'public/css/main.css'
|
||||
}
|
||||
},
|
||||
|
@ -86,13 +94,30 @@ module.exports = function(grunt) {
|
|||
watch: {
|
||||
main: {
|
||||
files: ['public/src/js/**/*.js'],
|
||||
tasks: ['concat:main', 'uglify:main', 'macreload'],
|
||||
tasks: ['concat:main', 'uglify:main'],
|
||||
},
|
||||
css: {
|
||||
files: ['public/src/css/**/*.css'],
|
||||
tasks: ['concat:css', 'cssmin', 'macreload'],
|
||||
tasks: ['concat:css', 'cssmin'],
|
||||
},
|
||||
},
|
||||
nggettext_extract: {
|
||||
pot: {
|
||||
files: {
|
||||
'po/template.pot': ['public/views/*.html', 'public/views/**/*.html']
|
||||
}
|
||||
},
|
||||
},
|
||||
nggettext_compile: {
|
||||
all: {
|
||||
options: {
|
||||
module: 'insight'
|
||||
},
|
||||
files: {
|
||||
'public/src/js/translations.js': ['po/*.po']
|
||||
}
|
||||
},
|
||||
}
|
||||
});
|
||||
|
||||
//Making grunt default to force in order not to break the project.
|
||||
|
@ -101,8 +126,11 @@ module.exports = function(grunt) {
|
|||
//Default task(s).
|
||||
grunt.registerTask('default', ['watch']);
|
||||
|
||||
//Update .pot file
|
||||
grunt.registerTask('translate', ['nggettext_extract']);
|
||||
|
||||
//Compile task (concat + minify)
|
||||
grunt.registerTask('compile', ['concat', 'uglify', 'cssmin', 'macreload']);
|
||||
grunt.registerTask('compile', ['nggettext_compile', 'concat', 'uglify', 'cssmin']);
|
||||
|
||||
|
||||
};
|
||||
|
|
116
README.md
116
README.md
|
@ -1,98 +1,80 @@
|
|||
# *insight*
|
||||
# Insight 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 Bitcoin blockchain explorer web application service for [Bitcore Node](https://github.com/bitpay/bitcore-node) using the [Insight API](https://github.com/zcash-hackworks/insight-api-zcash).
|
||||
|
||||
Check some screenshots and more details at [insight's project homepage](http://insight.bitcore.io).
|
||||
## Quick Start
|
||||
|
||||
*Insight* project is now splitted in 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://bitcore.io/guides/full-node](https://bitcore.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 [Bitcore](https://github.com/bitpay/bitcore).
|
||||
|
||||
## Prerequisites
|
||||
## Getting Started
|
||||
|
||||
* **Node.js v0.10.x** - Download and Install [Node.js](http://www.nodejs.org/download/).
|
||||
To manually install all of the necessary components, you can run these commands:
|
||||
|
||||
* **NPM** - Node.js package manager, should be automatically installed when you get node.js.
|
||||
```bash
|
||||
npm install -g bitcore-node
|
||||
bitcore-node create mynode
|
||||
cd mynode
|
||||
bitcore-node install insight-api
|
||||
bitcore-node install insight-ui
|
||||
bitcore-node start
|
||||
```
|
||||
|
||||
## 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).
|
||||
|
||||
|
||||
Open a web browser to `http://localhost:3001/insight/`
|
||||
|
||||
## Development
|
||||
|
||||
To run insight locally for development mode:
|
||||
To run Insight UI locally in development mode:
|
||||
|
||||
Install bower dependencies:
|
||||
|
||||
```$ bower install```
|
||||
```
|
||||
$ bower install
|
||||
```
|
||||
|
||||
To compile and minify the web application's assets:
|
||||
|
||||
```$ grunt compile```
|
||||
|
||||
There is a convinent Gruntfile.js for automation during editing the code
|
||||
|
||||
```$ grunt```
|
||||
|
||||
|
||||
|
||||
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
|
||||
```
|
||||
in other terminal:
|
||||
```
|
||||
$ cd $IROOT/insight-api
|
||||
$ ln -s ../insight/public
|
||||
$ INSIGHT_PUBLIC_PATH=public node insight.js
|
||||
$ grunt compile
|
||||
```
|
||||
|
||||
There is a convenient Gruntfile.js for automation during editing the code
|
||||
|
||||
```INSIGHT_PUBLIC_PATH=insight/public grunt```
|
||||
at insight-api's home path (edit the path according your setup).
|
||||
```
|
||||
$ grunt
|
||||
```
|
||||
|
||||
**also** in the insight-api path. (So you will have to grunt process running, one for insight and one for insight-api).
|
||||
## Multilanguage support
|
||||
|
||||
Insight 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:
|
||||
|
||||
```
|
||||
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.
|
||||
|
||||
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***
|
||||
|
||||
```
|
||||
gettextCatalog.currentLanguage = 'es';
|
||||
```
|
||||
|
||||
This line will take a look at any *.po files inside ***po/*** folder, e.g.
|
||||
**po/es.po**, **po/nl.po**. After any change do not forget to run ***grunt
|
||||
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 [Insight API](https://github.com/zcash-hackworks/insight-api-zcash) configuration and end-points, go to [Insight API GitHub repository](https://github.com/zcash-hackworks/insight-api-zcash).
|
||||
|
||||
## Contribute
|
||||
|
||||
Contributions and suggestions are welcomed at [insight github repository](https://github.com/bitpay/insight).
|
||||
Contributions and suggestions are welcomed at the [Insight UI GitHub repository](https://github.com/zcash-hackworks/insight-ui-zcash).
|
||||
|
||||
|
||||
## License
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
'use strict';
|
||||
|
||||
var BaseService = require('./service');
|
||||
var inherits = require('util').inherits;
|
||||
var fs = require('fs');
|
||||
|
||||
var InsightUI = function(options) {
|
||||
BaseService.call(this, options);
|
||||
if (typeof options.apiPrefix !== 'undefined') {
|
||||
this.apiPrefix = options.apiPrefix;
|
||||
} else {
|
||||
this.apiPrefix = 'insight-api-zcash';
|
||||
}
|
||||
if (typeof options.routePrefix !== 'undefined') {
|
||||
this.routePrefix = options.routePrefix;
|
||||
} else {
|
||||
this.routePrefix = 'insight';
|
||||
}
|
||||
};
|
||||
|
||||
InsightUI.dependencies = ['insight-api-zcash'];
|
||||
|
||||
inherits(InsightUI, BaseService);
|
||||
|
||||
InsightUI.prototype.start = function(callback) {
|
||||
this.indexFile = this.filterIndexHTML(fs.readFileSync(__dirname + '/../public/index.html', {encoding: 'utf8'}));
|
||||
setImmediate(callback);
|
||||
};
|
||||
|
||||
InsightUI.prototype.getRoutePrefix = function() {
|
||||
return this.routePrefix;
|
||||
};
|
||||
|
||||
InsightUI.prototype.setupRoutes = function(app, express) {
|
||||
var self = this;
|
||||
|
||||
app.use('/', function(req, res, next){
|
||||
if (req.headers.accept && req.headers.accept.indexOf('text/html') !== -1 &&
|
||||
req.headers["X-Requested-With"] !== 'XMLHttpRequest'
|
||||
) {
|
||||
res.setHeader('Content-Type', 'text/html');
|
||||
res.send(self.indexFile);
|
||||
} else {
|
||||
express.static(__dirname + '/../public')(req, res, next);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
InsightUI.prototype.filterIndexHTML = function(data) {
|
||||
var transformed = data
|
||||
.replace(/apiPrefix = '\/api'/, "apiPrefix = '/" + this.apiPrefix + "'");
|
||||
|
||||
if (this.routePrefix) {
|
||||
transformed = transformed.replace(/<base href=\"\/\"/, '<base href="/' + this.routePrefix + '/"');
|
||||
}
|
||||
|
||||
return transformed;
|
||||
};
|
||||
|
||||
module.exports = InsightUI;
|
|
@ -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 bitcore-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;
|
15
bower.json
15
bower.json
|
@ -2,16 +2,19 @@
|
|||
"name": "Insight",
|
||||
"version": "0.0.1",
|
||||
"dependencies": {
|
||||
"angular": "~1.2.13",
|
||||
"angular-resource": "~1.2.13",
|
||||
"angular-route": "~1.2.13",
|
||||
"angular": "~1.5.8",
|
||||
"angular-resource": "~1.5.8",
|
||||
"angular-route": "~1.5.8",
|
||||
"bootstrap": "~3.1.1",
|
||||
"angular-bootstrap": "~0.10.0",
|
||||
"angular-qrcode": "~3.1.0",
|
||||
"angular-animate": "~1.2.13",
|
||||
"momentjs": "~2.5.1",
|
||||
"angular-animate": "~1.5.8",
|
||||
"moment": "~2.10.6",
|
||||
"zeroclipboard": "~1.3.2",
|
||||
"ngprogress": "~1.0.4",
|
||||
"angular-ui-utils": "~0.1.1"
|
||||
"angular-ui-utils": "~0.1.1",
|
||||
"angular-gettext": "~1.1.0",
|
||||
"angular-moment": "1.0.0-beta.6",
|
||||
"c3": "~0.4.11"
|
||||
}
|
||||
}
|
||||
|
|
34
package.json
34
package.json
|
@ -1,12 +1,8 @@
|
|||
{
|
||||
"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.1.12",
|
||||
"author": {
|
||||
"name": "Ryan X Charles",
|
||||
"email": "ryan@bitpay.com"
|
||||
},
|
||||
"repository": "git://github.com/bitpay/insight.git",
|
||||
"name": "insight-ui-zcash",
|
||||
"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 zcash network and build your own services with it.",
|
||||
"version": "0.4.0",
|
||||
"repository": "git://github.com/zcash-hackworks/insight-ui-zcash.git",
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Matias Alejo Garcia",
|
||||
|
@ -27,26 +23,31 @@
|
|||
{
|
||||
"name": "Juan Ignacio Sosa Lopez",
|
||||
"email": "bechilandia@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Jack Grigg",
|
||||
"email": "jack@z.cash"
|
||||
},
|
||||
{
|
||||
"name": "Simon Liu",
|
||||
"email": "simon@z.cash"
|
||||
}
|
||||
],
|
||||
"bugs": {
|
||||
"url": "https://github.com/bitpay/insight/issues"
|
||||
"url": "https://github.com/zcash/zcash/issues"
|
||||
},
|
||||
"homepage": "https://github.com/bitpay/insight",
|
||||
"homepage": "https://github.com/zcash-hackworks/insight-ui-zcash",
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"insight",
|
||||
"blockchain",
|
||||
"blockexplorer",
|
||||
"bitcoin",
|
||||
"zcash",
|
||||
"bitcore",
|
||||
"front-end"
|
||||
],
|
||||
"scripts": {
|
||||
"start": "INSIGHT_PUBLIC_PATH=public node node_modules/.bin/insight-bitcore-api"
|
||||
},
|
||||
"bitcoreNode": "bitcore-node-zcash",
|
||||
"dependencies": {
|
||||
"insight-bitcore-api": "=0.1.12"
|
||||
},
|
||||
"devDependencies": {
|
||||
"bower": "~1.2.8",
|
||||
|
@ -58,6 +59,7 @@
|
|||
"grunt-contrib-watch": "*",
|
||||
"grunt-macreload": "*",
|
||||
"grunt-css": "~0.5.4",
|
||||
"grunt-markdown": "~0.5.0"
|
||||
"grunt-markdown": "~0.5.0",
|
||||
"grunt-angular-gettext": "^0.2.15"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,474 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Insight\n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Sascha Dückers <s.dueckers@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 1.8.1\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Language: de_DE\n"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "(Input unconfirmed)"
|
||||
msgstr "(Eingabe unbestätigt)"
|
||||
|
||||
#: public/views/404.html
|
||||
msgid "404 Page not found :("
|
||||
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 Zcash 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 zcashd RPC. "
|
||||
"Check out the <a href=\"https://github.com/zcash-hackworks/insight-ui-zcash\" target=\"_blank"
|
||||
"\">source code</a>."
|
||||
msgstr ""
|
||||
"<strong>insight</strong> ist ein <a href=\"http://live.insight.is/\" target="
|
||||
"\"_blank\">Open Source Zcash 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 Zcashd nicht mehr ausreichen. Der "
|
||||
"aktuelle <a href=\"https://github.com/zcash-hackworks/insight-ui-zcash\" 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 "
|
||||
"bugs and provide feedback for improvement at our <a href=\"https://github."
|
||||
"com/bitpay/insight/issues\" target=\"_blank\">github issue tracker</a>."
|
||||
msgstr ""
|
||||
"<strong>insight</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/zcash/zcash/issues"
|
||||
"\" target=\"_blank\">Github Issue Tracker</a>."
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "About"
|
||||
msgstr "Über insight"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Address"
|
||||
msgstr "Adresse"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "Age"
|
||||
msgstr "Alter"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Application Status"
|
||||
msgstr "Programmstatus"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Best Block"
|
||||
msgstr "Bester Block"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Zcash node information"
|
||||
msgstr "Zcash-Node Info"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Block"
|
||||
msgstr "Block"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Block Reward"
|
||||
msgstr "Belohnung"
|
||||
|
||||
#: public/views/block_list.html public/views/dummy-translations.html
|
||||
#: public/views/status.html
|
||||
msgid "Blocks"
|
||||
msgstr "Blöcke"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Bytes Serialized"
|
||||
msgstr "Serialisierte Bytes"
|
||||
|
||||
#: public/views/includes/connection.html
|
||||
msgid ""
|
||||
"Can't connect to zcashd to get live updates from the p2p network. (Tried "
|
||||
"connecting to zcashd at {{host}}:{{port}} and failed.)"
|
||||
msgstr ""
|
||||
"Es ist nicht möglich mit Zcashd zu verbinden um live Aktualisierungen vom "
|
||||
"P2P Netzwerk zu erhalten. (Verbindungsversuch zu zcashd an {{host}}:"
|
||||
"{{port}} ist fehlgeschlagen.)"
|
||||
|
||||
#: public/views/includes/connection.html
|
||||
msgid "Can't connect to insight server. Attempting to reconnect..."
|
||||
msgstr ""
|
||||
"Keine Verbindung zum insight-Server möglich. Es wird versucht die "
|
||||
"Verbindung neu aufzubauen..."
|
||||
|
||||
#: public/views/includes/connection.html
|
||||
msgid "Can't connect to internet. Please, check your connection."
|
||||
msgstr "Keine Verbindung zum Internet möglich, bitte Zugangsdaten prüfen."
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Complete"
|
||||
msgstr "Vollständig"
|
||||
|
||||
#: public/views/transaction.html public/views/transaction/tx.html
|
||||
msgid "Confirmations"
|
||||
msgstr "Bestätigungen"
|
||||
|
||||
#: public/views/includes/header.html
|
||||
msgid "Conn"
|
||||
msgstr "Verbindungen"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Connections to other nodes"
|
||||
msgstr "Verbindungen zu Nodes"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Current Blockchain Tip (insight)"
|
||||
msgstr "Aktueller Blockchain Tip (insight)"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Current Sync Status"
|
||||
msgstr "Aktueller Status"
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Details"
|
||||
msgstr "Details"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Difficulty"
|
||||
msgstr "Schwierigkeit"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Double spent attempt detected. From tx:"
|
||||
msgstr "Es wurde ein \"double Spend\" Versuch erkannt.Von tx:"
|
||||
|
||||
#: public/views/includes/connection.html
|
||||
msgid "Error!"
|
||||
msgstr "Fehler!"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Fee"
|
||||
msgstr "Gebühr"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Final Balance"
|
||||
msgstr "Schlussbilanz"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Finish Date"
|
||||
msgstr "Fertigstellung"
|
||||
|
||||
#: public/views/404.html
|
||||
msgid "Go to home"
|
||||
msgstr "Zur Startseite"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Hash Serialized"
|
||||
msgstr "Hash Serialisiert"
|
||||
|
||||
#: public/views/block.html public/views/block_list.html
|
||||
#: public/views/index.html public/views/status.html
|
||||
#: public/views/includes/header.html
|
||||
msgid "Height"
|
||||
msgstr "Höhe"
|
||||
|
||||
#: public/views/transaction.html public/views/transaction/tx.html
|
||||
msgid "Included in Block"
|
||||
msgstr "Eingefügt in Block"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Incoherence in levelDB detected:"
|
||||
msgstr "Es wurde eine Zusammenhangslosigkeit in der LevelDB festgestellt:"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Info Errors"
|
||||
msgstr "Fehlerbeschreibung"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Initial Block Chain Height"
|
||||
msgstr "Ursprüngliche Blockchain Höhe"
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Input"
|
||||
msgstr "Eingänge"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Last Block"
|
||||
msgstr "Letzter Block"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Last Block Hash (Zcashd)"
|
||||
msgstr "Letzter Hash (Zcashd)"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "Latest Blocks"
|
||||
msgstr "Letzte Blöcke"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "Latest Transactions"
|
||||
msgstr "Letzte Transaktionen"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Loading Address Information"
|
||||
msgstr "Lade Adressinformationen"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Loading Block Information"
|
||||
msgstr "Lade Blockinformation"
|
||||
|
||||
#: public/views/block_list.html
|
||||
msgid "Loading Selected Date..."
|
||||
msgstr "Lade gewähltes Datum..."
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Loading Transaction Details"
|
||||
msgstr "Lade Transaktionsdetails"
|
||||
|
||||
#: public/views/transaction/list.html
|
||||
msgid "Loading Transactions..."
|
||||
msgstr "Lade Transaktionen..."
|
||||
|
||||
#: public/views/includes/infoStatus.html
|
||||
msgid "Loading..."
|
||||
msgstr "Lade..."
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Mined Time"
|
||||
msgstr "Block gefunden (Mining)"
|
||||
|
||||
#: public/views/block.html public/views/block_list.html
|
||||
#: public/views/index.html
|
||||
msgid "Mined by"
|
||||
msgstr "Gefunden von"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Mining Difficulty"
|
||||
msgstr "Schwierigkeitgrad"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Next Block"
|
||||
msgstr "Nächster Block"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "No Inputs (Newly Generated Coins)"
|
||||
msgstr "Keine Eingänge (Neu generierte Coins)"
|
||||
|
||||
#: public/views/block_list.html
|
||||
msgid "No blocks yet."
|
||||
msgstr "Keine Blöcke bisher."
|
||||
|
||||
#: public/views/includes/header.html public/views/includes/search.html
|
||||
msgid "No matching records found!"
|
||||
msgstr "Keine passenden Einträge gefunden!"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "No. Transactions"
|
||||
msgstr "Anzahl Transaktionen"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Number Of Transactions"
|
||||
msgstr "Anzahl der Transaktionen"
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Output"
|
||||
msgstr "Ausgänge"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "Powered by"
|
||||
msgstr "Powered by"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Previous Block"
|
||||
msgstr "Letzter Block"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Protocol version"
|
||||
msgstr "Protokollversion"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Proxy setting"
|
||||
msgstr "Proxyeinstellung"
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Received Time"
|
||||
msgstr "Eingangszeitpunkt"
|
||||
|
||||
#: public/views/redirect.html
|
||||
msgid "Redirecting..."
|
||||
msgstr "Umleitung..."
|
||||
|
||||
#: public/views/includes/header.html
|
||||
msgid "Search for block, transaction or address"
|
||||
msgstr "Suche Block, Transaktion oder Adresse"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "See all blocks"
|
||||
msgstr "Alle Blöcke anzeigen"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Show Transaction Output data"
|
||||
msgstr "Zeige Abgänge"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Show all"
|
||||
msgstr "Zeige Alles"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Show input"
|
||||
msgstr "Zeige Eingänge"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Show less"
|
||||
msgstr "Weniger anzeigen"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Show more"
|
||||
msgstr "Mehr anzeigen"
|
||||
|
||||
#: public/views/block_list.html public/views/index.html
|
||||
#: public/views/transaction.html
|
||||
msgid "Size"
|
||||
msgstr "Größe"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Size (bytes)"
|
||||
msgstr "Größe (bytes)"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Skipped Blocks (previously synced)"
|
||||
msgstr "Verworfene Blöcke (bereits syncronisiert)"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Start Date"
|
||||
msgstr "Startdatum"
|
||||
|
||||
#: public/views/dummy-translations.html
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: public/views/block.html public/views/transaction.html
|
||||
msgid "Summary"
|
||||
msgstr "Zusammenfassung"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Summary <small>confirmed</small>"
|
||||
msgstr "Zusammenfassung <small>bestätigt</small>"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Sync Progress"
|
||||
msgstr "Fortschritt"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Sync Status"
|
||||
msgstr "Syncronisation"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Sync Type"
|
||||
msgstr "Art der Syncronisation"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Synced Blocks"
|
||||
msgstr "Syncronisierte Blöcke"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Testnet"
|
||||
msgstr "Testnet aktiv"
|
||||
|
||||
#: public/views/transaction/list.html
|
||||
msgid "There are no transactions involving this address."
|
||||
msgstr "Es gibt keine Transaktionen zu dieser Adressse"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Time Offset"
|
||||
msgstr "Zeitoffset zu UTC"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Timestamp"
|
||||
msgstr "Zeitstempel"
|
||||
|
||||
#: public/views/block_list.html
|
||||
msgid "Today"
|
||||
msgstr "Heute"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Total Amount"
|
||||
msgstr "Gesamtsumme"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Total Received"
|
||||
msgstr "Insgesamt empfangen"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Total Sent"
|
||||
msgstr "Insgesamt gesendet"
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Transaction"
|
||||
msgstr "Transaktion"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Transaction Output Set Information"
|
||||
msgstr "Transaktions Abgänge"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Transaction Outputs"
|
||||
msgstr "Abgänge"
|
||||
|
||||
#: public/views/address.html public/views/block.html
|
||||
#: public/views/block_list.html public/views/index.html
|
||||
#: public/views/status.html
|
||||
msgid "Transactions"
|
||||
msgstr "Transaktionen"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Type"
|
||||
msgstr "Typ"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Unconfirmed"
|
||||
msgstr "Unbestätigt"
|
||||
|
||||
#: public/views/transaction.html public/views/transaction/tx.html
|
||||
msgid "Unconfirmed Transaction!"
|
||||
msgstr "Unbestätigte Transaktion!"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Unconfirmed Txs Balance"
|
||||
msgstr "Unbestätigtes Guthaben"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "Value Out"
|
||||
msgstr "Wert"
|
||||
|
||||
#: public/views/block.html public/views/status.html
|
||||
msgid "Version"
|
||||
msgstr "Version"
|
||||
|
||||
#: public/views/block_list.html public/views/index.html
|
||||
msgid "Waiting for blocks..."
|
||||
msgstr "Warte auf Blöcke..."
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "Waiting for transactions..."
|
||||
msgstr "Warte auf Transaktionen..."
|
||||
|
||||
#: public/views/block_list.html
|
||||
msgid "by date."
|
||||
msgstr "nach Datum."
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "first seen at"
|
||||
msgstr "zuerst gesehen am"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "mined"
|
||||
msgstr "gefunden"
|
||||
|
||||
#: public/views/block_list.html
|
||||
msgid "mined on:"
|
||||
msgstr "vom:"
|
||||
|
||||
msgid "Waiting for blocks"
|
||||
msgstr "Warte auf Blöcke"
|
|
@ -0,0 +1,470 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Insight\n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 1.6.8\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "(Input unconfirmed)"
|
||||
msgstr "(Entrada sin confirmar)"
|
||||
|
||||
#: public/views/404.html
|
||||
msgid "404 Page not found :("
|
||||
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 Zcash 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 zcashd RPC. "
|
||||
"Check out the <a href=\"https://github.com/zcash-hackworks/insight-ui-zcash\" target=\"_blank"
|
||||
"\">source code</a>."
|
||||
msgstr ""
|
||||
"<strong>insight</strong> es un <a href=\"http://live.insight.is/\" target="
|
||||
"\"_blank\">explorador de bloques de Zcash open-source</a> con un completo "
|
||||
"conjunto de REST y APIs de websockets que pueden ser usadas para escribir "
|
||||
"monederos de Zcashs 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>."
|
||||
|
||||
#: public/views/index.html
|
||||
msgid ""
|
||||
"<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>."
|
||||
msgstr ""
|
||||
"<strong>insight</strong> esta en desarrollo aún, por ello agradecemos que "
|
||||
"nos reporten errores o sugerencias para mejorar el software. <a href="
|
||||
"\"https://github.com/zcash/zcash/issues\" target=\"_blank\">Github issue "
|
||||
"tracker</a>."
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "About"
|
||||
msgstr "Acerca de"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Address"
|
||||
msgstr "Dirección"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "Age"
|
||||
msgstr "Edad"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Application Status"
|
||||
msgstr "Estado de la Aplicación"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Best Block"
|
||||
msgstr "Mejor Bloque"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Zcash node information"
|
||||
msgstr "Información del nodo Zcash"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Block"
|
||||
msgstr "Bloque"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Block Reward"
|
||||
msgstr "Bloque Recompensa"
|
||||
|
||||
#: public/views/block_list.html public/views/dummy-translations.html
|
||||
#: public/views/status.html
|
||||
msgid "Blocks"
|
||||
msgstr "Bloques"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Bytes Serialized"
|
||||
msgstr "Bytes Serializados"
|
||||
|
||||
#: public/views/includes/connection.html
|
||||
msgid ""
|
||||
"Can't connect to zcashd to get live updates from the p2p network. (Tried "
|
||||
"connecting to zcashd at {{host}}:{{port}} and failed.)"
|
||||
msgstr ""
|
||||
"No se pudo conectar a zcashd para obtener actualizaciones en vivo de la "
|
||||
"red p2p. (Se intentó conectar a zcashd 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..."
|
||||
|
||||
#: public/views/includes/connection.html
|
||||
msgid "Can't connect to internet. Please, check your connection."
|
||||
msgstr "No se pudo conectar a Internet. Por favor, verifique su conexión."
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Complete"
|
||||
msgstr "Completado"
|
||||
|
||||
#: public/views/transaction.html public/views/transaction/tx.html
|
||||
msgid "Confirmations"
|
||||
msgstr "Confirmaciones"
|
||||
|
||||
#: public/views/includes/header.html
|
||||
msgid "Conn"
|
||||
msgstr "Con"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Connections to other nodes"
|
||||
msgstr "Conexiones a otros nodos"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Current Blockchain Tip (insight)"
|
||||
msgstr "Actual Blockchain Tip (insight)"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Current Sync Status"
|
||||
msgstr "Actual Estado de Sincronización"
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Details"
|
||||
msgstr "Detalles"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Difficulty"
|
||||
msgstr "Dificultad"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Double spent attempt detected. From tx:"
|
||||
msgstr "Intento de doble gasto detectado. De la transacción:"
|
||||
|
||||
#: public/views/includes/connection.html
|
||||
msgid "Error!"
|
||||
msgstr "¡Error!"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Fee"
|
||||
msgstr "Tasa"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Final Balance"
|
||||
msgstr "Balance Final"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Finish Date"
|
||||
msgstr "Fecha Final"
|
||||
|
||||
#: public/views/404.html
|
||||
msgid "Go to home"
|
||||
msgstr "Volver al Inicio"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Hash Serialized"
|
||||
msgstr "Hash Serializado"
|
||||
|
||||
#: public/views/block.html public/views/block_list.html
|
||||
#: public/views/index.html public/views/status.html
|
||||
#: public/views/includes/header.html
|
||||
msgid "Height"
|
||||
msgstr "Altura"
|
||||
|
||||
#: public/views/transaction.html public/views/transaction/tx.html
|
||||
msgid "Included in Block"
|
||||
msgstr "Incluido en el Bloque"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Incoherence in levelDB detected:"
|
||||
msgstr "Detectada una incoherencia en levelDB:"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Info Errors"
|
||||
msgstr "Errores de Información"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Initial Block Chain Height"
|
||||
msgstr "Altura de la Cadena en Bloque Inicial"
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Input"
|
||||
msgstr "Entrada"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Last Block"
|
||||
msgstr "Último Bloque"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Last Block Hash (Zcashd)"
|
||||
msgstr "Último Bloque Hash (Zcashd)"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "Latest Blocks"
|
||||
msgstr "Últimos Bloques"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "Latest Transactions"
|
||||
msgstr "Últimas Transacciones"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Loading Address Information"
|
||||
msgstr "Cargando Información de la Dirección"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Loading Block Information"
|
||||
msgstr "Cargando Información del Bloque"
|
||||
|
||||
#: public/views/block_list.html
|
||||
msgid "Loading Selected Date..."
|
||||
msgstr "Cargando Fecha Seleccionada..."
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Loading Transaction Details"
|
||||
msgstr "Cargando Detalles de la Transacción"
|
||||
|
||||
#: public/views/transaction/list.html
|
||||
msgid "Loading Transactions..."
|
||||
msgstr "Cargando Transacciones..."
|
||||
|
||||
#: public/views/includes/infoStatus.html
|
||||
msgid "Loading..."
|
||||
msgstr "Cargando..."
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Mined Time"
|
||||
msgstr "Hora de Minado"
|
||||
|
||||
#: public/views/block.html public/views/block_list.html
|
||||
#: public/views/index.html
|
||||
msgid "Mined by"
|
||||
msgstr "Minado por"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Mining Difficulty"
|
||||
msgstr "Dificultad de Minado"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Next Block"
|
||||
msgstr "Próximo Bloque"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "No Inputs (Newly Generated Coins)"
|
||||
msgstr "Sin Entradas (Monedas Recién Generadas)"
|
||||
|
||||
#: public/views/block_list.html
|
||||
msgid "No blocks yet."
|
||||
msgstr "No hay bloques aún."
|
||||
|
||||
#: public/views/includes/header.html public/views/includes/search.html
|
||||
msgid "No matching records found!"
|
||||
msgstr "¡No se encontraron registros coincidentes!"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "No. Transactions"
|
||||
msgstr "Nro. de Transacciones"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Number Of Transactions"
|
||||
msgstr "Número de Transacciones"
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Output"
|
||||
msgstr "Salida"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "Powered by"
|
||||
msgstr "Funciona con"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Previous Block"
|
||||
msgstr "Bloque Anterior"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Protocol version"
|
||||
msgstr "Versión del protocolo"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Proxy setting"
|
||||
msgstr "Opción de proxy"
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Received Time"
|
||||
msgstr "Hora de Recibido"
|
||||
|
||||
#: public/views/redirect.html
|
||||
msgid "Redirecting..."
|
||||
msgstr "Redireccionando..."
|
||||
|
||||
#: public/views/includes/header.html
|
||||
msgid "Search for block, transaction or address"
|
||||
msgstr "Buscar bloques, transacciones o direcciones"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "See all blocks"
|
||||
msgstr "Ver todos los bloques"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Show Transaction Output data"
|
||||
msgstr "Mostrar dato de Salida de la Transacción"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Show all"
|
||||
msgstr "Mostrar todos"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Show input"
|
||||
msgstr "Mostrar entrada"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Show less"
|
||||
msgstr "Ver menos"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Show more"
|
||||
msgstr "Ver más"
|
||||
|
||||
#: public/views/block_list.html public/views/index.html
|
||||
#: public/views/transaction.html
|
||||
msgid "Size"
|
||||
msgstr "Tamaño"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Size (bytes)"
|
||||
msgstr "Tamaño (bytes)"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Skipped Blocks (previously synced)"
|
||||
msgstr "Bloques Saltados (previamente sincronizado)"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Start Date"
|
||||
msgstr "Fecha de Inicio"
|
||||
|
||||
#: public/views/dummy-translations.html
|
||||
msgid "Status"
|
||||
msgstr "Estado"
|
||||
|
||||
#: public/views/block.html public/views/transaction.html
|
||||
msgid "Summary"
|
||||
msgstr "Resumen"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Summary <small>confirmed</small>"
|
||||
msgstr "Resumen <small>confirmados</small>"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Sync Progress"
|
||||
msgstr "Proceso de Sincronización"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Sync Status"
|
||||
msgstr "Estado de Sincronización"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Sync Type"
|
||||
msgstr "Tipo de Sincronización"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Synced Blocks"
|
||||
msgstr "Bloques Sincornizados"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Testnet"
|
||||
msgstr "Red de prueba"
|
||||
|
||||
#: public/views/transaction/list.html
|
||||
msgid "There are no transactions involving this address."
|
||||
msgstr "No hay transacciones para esta dirección"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Time Offset"
|
||||
msgstr "Desplazamiento de hora"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Timestamp"
|
||||
msgstr "Fecha y hora"
|
||||
|
||||
#: public/views/block_list.html
|
||||
msgid "Today"
|
||||
msgstr "Hoy"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Total Amount"
|
||||
msgstr "Cantidad Total"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Total Received"
|
||||
msgstr "Total Recibido"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Total Sent"
|
||||
msgstr "Total Enviado"
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Transaction"
|
||||
msgstr "Transacción"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Transaction Output Set Information"
|
||||
msgstr "Información del Conjunto de Salida de la Transacción"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Transaction Outputs"
|
||||
msgstr "Salidas de la Transacción"
|
||||
|
||||
#: public/views/address.html public/views/block.html
|
||||
#: public/views/block_list.html public/views/index.html
|
||||
#: public/views/status.html
|
||||
msgid "Transactions"
|
||||
msgstr "Transacciones"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Type"
|
||||
msgstr "Tipo"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Unconfirmed"
|
||||
msgstr "Sin confirmar"
|
||||
|
||||
#: public/views/transaction.html public/views/transaction/tx.html
|
||||
msgid "Unconfirmed Transaction!"
|
||||
msgstr "¡Transacción sin confirmar!"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Unconfirmed Txs Balance"
|
||||
msgstr "Balance sin confirmar"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "Value Out"
|
||||
msgstr "Valor de Salida"
|
||||
|
||||
#: public/views/block.html public/views/status.html
|
||||
msgid "Version"
|
||||
msgstr "Versión"
|
||||
|
||||
#: public/views/block_list.html public/views/index.html
|
||||
msgid "Waiting for blocks..."
|
||||
msgstr "Esperando bloques..."
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "Waiting for transactions..."
|
||||
msgstr "Esperando transacciones..."
|
||||
|
||||
#: public/views/block_list.html
|
||||
msgid "by date."
|
||||
msgstr "por fecha."
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "first seen at"
|
||||
msgstr "Visto a"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "mined"
|
||||
msgstr "minado"
|
||||
|
||||
#: public/views/block_list.html
|
||||
msgid "mined on:"
|
||||
msgstr "minado el:"
|
||||
|
||||
#~ msgid "Waiting for blocks"
|
||||
#~ msgstr "Esperando bloques"
|
|
@ -0,0 +1,617 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Vis Virial <visvirial@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: ja\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 1.5.4\n"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "(Input unconfirmed)"
|
||||
msgstr "(入力は未検証です)"
|
||||
|
||||
#: public/views/404.html
|
||||
msgid "404 Page not found :("
|
||||
msgstr "404 ページがみつかりません (´・ω・`)"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid ""
|
||||
"<strong>insight</strong> is an <a href=\"http://live.insight.is/\" target="
|
||||
"\"_blank\">open-source Zcash 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 zcashd RPC. "
|
||||
"Check out the <a href=\"https://github.com/zcash-hackworks/insight-ui-zcash\" target=\"_blank"
|
||||
"\">source code</a>."
|
||||
msgstr ""
|
||||
"<strong>insight</strong>は、zcashd RPCの提供するものよりも詳細なブロック"
|
||||
"チェインへの問い合わせを必要とするウェブウォレットやその他のアプリを書くのに"
|
||||
"使える、完全なRESTおよびwebsocket APIを備えた<a href=\"http://live.insight."
|
||||
"is/\" target=\"_blank\">オープンソースのビットコインブロックエクスプローラ</"
|
||||
"a>です。<a href=\"https://github.com/zcash-hackworks/insight-ui-zcash\" target=\"_blank\">ソース"
|
||||
"コード</a>を確認"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid ""
|
||||
"<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>."
|
||||
msgstr ""
|
||||
"<strong>insight</strong>は現在開発中です。<a href=\"https://github.com/"
|
||||
"bitpay/insight/issues\" target=\"_blank\">githubのissueトラッカ</a>にてバグの"
|
||||
"報告や改善案の提案をお願いします。"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "About"
|
||||
msgstr "はじめに"
|
||||
|
||||
#: public/views/address.html public/views/messages_verify.html
|
||||
msgid "Address"
|
||||
msgstr "アドレス"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "Age"
|
||||
msgstr "生成後経過時間"
|
||||
|
||||
#: public/views/messages_verify.html
|
||||
msgid "An error occured in the verification process."
|
||||
msgstr "検証過程でエラーが発生しました。"
|
||||
|
||||
#: public/views/transaction_sendraw.html
|
||||
msgid "An error occured:<br>{{error}}"
|
||||
msgstr "エラーが発生しました:<br>{{error}}"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Application Status"
|
||||
msgstr "アプリケーションの状態"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Best Block"
|
||||
msgstr "最良ブロック"
|
||||
|
||||
#: public/views/messages_verify.html
|
||||
msgid "Zcash comes with a way of signing arbitrary messages."
|
||||
msgstr "Zcashには任意のメッセージを署名する昨日が備わっています。"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Zcash node information"
|
||||
msgstr "Zcashノード情報"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Block"
|
||||
msgstr "ブロック"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Block Reward"
|
||||
msgstr "ブロック報酬"
|
||||
|
||||
#: public/views/block_list.html public/views/dummy-translations.html
|
||||
#: public/views/status.html
|
||||
msgid "Blocks"
|
||||
msgstr "ブロック"
|
||||
|
||||
#: public/views/transaction_sendraw.html
|
||||
msgid "Broadcast Raw Transaction"
|
||||
msgstr "生のトランザクションを配信"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Bytes Serialized"
|
||||
msgstr "シリアライズ後の容量 (バイト)"
|
||||
|
||||
#: public/views/includes/connection.html
|
||||
msgid ""
|
||||
"Can't connect to zcashd to get live updates from the p2p network. (Tried "
|
||||
"connecting to zcashd at {{host}}:{{port}} and failed.)"
|
||||
msgstr ""
|
||||
"P2Pネットワークからライブ情報を取得するためにzcashdへ接続することができませ"
|
||||
"んでした。({{host}}:{{port}} への接続を試みましたが、失敗しました。)"
|
||||
|
||||
#: public/views/includes/connection.html
|
||||
msgid "Can't connect to insight server. Attempting to reconnect..."
|
||||
msgstr "insight サーバに接続できません。再接続しています..."
|
||||
|
||||
#: public/views/includes/connection.html
|
||||
msgid "Can't connect to internet. Please, check your connection."
|
||||
msgstr "インターネットに接続できません。コネクションを確認してください。"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Complete"
|
||||
msgstr "完了"
|
||||
|
||||
#: public/views/transaction.html public/views/transaction/tx.html
|
||||
msgid "Confirmations"
|
||||
msgstr "検証数"
|
||||
|
||||
#: public/views/includes/header.html
|
||||
msgid "Conn"
|
||||
msgstr "接続数"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Connections to other nodes"
|
||||
msgstr "他ノードへの接続"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Current Blockchain Tip (insight)"
|
||||
msgstr "現在のブロックチェインのTip (insight)"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Current Sync Status"
|
||||
msgstr "現在の同期状況"
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Details"
|
||||
msgstr "詳細"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Difficulty"
|
||||
msgstr "難易度"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Double spent attempt detected. From tx:"
|
||||
msgstr "二重支払い攻撃をこのトランザクションから検知しました:"
|
||||
|
||||
#: public/views/messages_verify.html
|
||||
msgid "Error message:"
|
||||
msgstr "エラーメッセージ:"
|
||||
|
||||
#: public/views/includes/connection.html
|
||||
msgid "Error!"
|
||||
msgstr "エラー!"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Fee"
|
||||
msgstr "手数料"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Final Balance"
|
||||
msgstr "最終残高"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Finish Date"
|
||||
msgstr "終了日時"
|
||||
|
||||
#: public/views/404.html
|
||||
msgid "Go to home"
|
||||
msgstr "ホームへ"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Hash Serialized"
|
||||
msgstr "シリアライズデータのハッシュ値"
|
||||
|
||||
#: public/views/block.html public/views/block_list.html
|
||||
#: public/views/index.html public/views/status.html
|
||||
#: public/views/includes/header.html
|
||||
msgid "Height"
|
||||
msgstr "ブロック高"
|
||||
|
||||
#: public/views/transaction.html public/views/transaction/tx.html
|
||||
msgid "Included in Block"
|
||||
msgstr "取り込まれたブロック"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Incoherence in levelDB detected:"
|
||||
msgstr "levelDBの破損を検知しました:"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Info Errors"
|
||||
msgstr "エラー情報"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Initial Block Chain Height"
|
||||
msgstr "起動時のブロック高"
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Input"
|
||||
msgstr "入力"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Last Block"
|
||||
msgstr "直前のブロック"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Last Block Hash (Zcashd)"
|
||||
msgstr "直前のブロックのハッシュ値 (Zcashd)"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "Latest Blocks"
|
||||
msgstr "最新のブロック"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "Latest Transactions"
|
||||
msgstr "最新のトランザクション"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Loading Address Information"
|
||||
msgstr "アドレス情報を読み込んでいます"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Loading Block Information"
|
||||
msgstr "ブロック情報を読み込んでいます"
|
||||
|
||||
#: public/views/block_list.html
|
||||
msgid "Loading Selected Date..."
|
||||
msgstr "選択されたデータを読み込んでいます..."
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Loading Transaction Details"
|
||||
msgstr "トランザクションの詳細を読み込んでいます"
|
||||
|
||||
#: public/views/transaction/list.html
|
||||
msgid "Loading Transactions..."
|
||||
msgstr "トランザクションを読み込んでいます..."
|
||||
|
||||
#: public/views/messages_verify.html public/views/transaction_sendraw.html
|
||||
#: public/views/includes/infoStatus.html
|
||||
msgid "Loading..."
|
||||
msgstr "ロード中..."
|
||||
|
||||
#: public/views/messages_verify.html
|
||||
msgid "Message"
|
||||
msgstr "メッセージ"
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Mined Time"
|
||||
msgstr "採掘時刻"
|
||||
|
||||
#: public/views/block.html public/views/block_list.html
|
||||
#: public/views/index.html
|
||||
msgid "Mined by"
|
||||
msgstr "採掘者"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Mining Difficulty"
|
||||
msgstr "採掘難易度"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Next Block"
|
||||
msgstr "次のブロック"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "No Inputs (Newly Generated Coins)"
|
||||
msgstr "入力なし (新しく生成されたコイン)"
|
||||
|
||||
#: public/views/block_list.html
|
||||
msgid "No blocks yet."
|
||||
msgstr "ブロックはありません。"
|
||||
|
||||
#: public/views/includes/search.html
|
||||
msgid "No matching records found!"
|
||||
msgstr "一致するレコードはありません!"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "No. Transactions"
|
||||
msgstr "トランザクション数"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Number Of Transactions"
|
||||
msgstr "トランザクション数"
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Output"
|
||||
msgstr "出力"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "Powered by"
|
||||
msgstr "Powered by"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Previous Block"
|
||||
msgstr "前のブロック"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Protocol version"
|
||||
msgstr "プロトコルバージョン"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Proxy setting"
|
||||
msgstr "プロキシ設定"
|
||||
|
||||
#: public/views/transaction_sendraw.html
|
||||
msgid "Raw transaction data"
|
||||
msgstr "トランザクションの生データ"
|
||||
|
||||
#: public/views/transaction_sendraw.html
|
||||
msgid "Raw transaction data must be a valid hexadecimal string."
|
||||
msgstr "生のトランザクションデータは有効な16進数でなければいけません。"
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Received Time"
|
||||
msgstr "受信時刻"
|
||||
|
||||
#: public/views/redirect.html
|
||||
msgid "Redirecting..."
|
||||
msgstr "リダイレクトしています..."
|
||||
|
||||
#: public/views/includes/search.html
|
||||
msgid "Search for block, transaction or address"
|
||||
msgstr "ブロック、トランザクション、アドレスを検索"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "See all blocks"
|
||||
msgstr "すべてのブロックをみる"
|
||||
|
||||
#: public/views/transaction_sendraw.html
|
||||
msgid "Send transaction"
|
||||
msgstr "トランザクションを送信"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Show Transaction Output data"
|
||||
msgstr "トランザクションの出力データをみる"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Show all"
|
||||
msgstr "すべて表示"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Show input"
|
||||
msgstr "入力を表示"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Show less"
|
||||
msgstr "隠す"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Show more"
|
||||
msgstr "表示する"
|
||||
|
||||
#: public/views/messages_verify.html
|
||||
msgid "Signature"
|
||||
msgstr "署名"
|
||||
|
||||
#: public/views/block_list.html public/views/index.html
|
||||
#: public/views/transaction.html
|
||||
msgid "Size"
|
||||
msgstr "サイズ"
|
||||
|
||||
#: public/views/block.html
|
||||
msgid "Size (bytes)"
|
||||
msgstr "サイズ (バイト)"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Skipped Blocks (previously synced)"
|
||||
msgstr "スキップされたブロック (同期済み)"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Start Date"
|
||||
msgstr "開始日時"
|
||||
|
||||
#: public/views/dummy-translations.html
|
||||
msgid "Status"
|
||||
msgstr "ステータス"
|
||||
|
||||
#: public/views/block.html public/views/transaction.html
|
||||
msgid "Summary"
|
||||
msgstr "概要"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Summary <small>confirmed</small>"
|
||||
msgstr "サマリ <small>検証済み</small>"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Sync Progress"
|
||||
msgstr "同期の進捗状況"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Sync Status"
|
||||
msgstr "同期ステータス"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Sync Type"
|
||||
msgstr "同期タイプ"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Synced Blocks"
|
||||
msgstr "同期されたブロック数"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Testnet"
|
||||
msgstr "テストネット"
|
||||
|
||||
#: public/views/messages_verify.html
|
||||
msgid "The message failed to verify."
|
||||
msgstr "メッセージの検証に失敗しました。"
|
||||
|
||||
#: public/views/messages_verify.html
|
||||
msgid "The message is verifiably from {{verification.address}}."
|
||||
msgstr "メッセージは{{verification.address}}により検証されました。"
|
||||
|
||||
#: public/views/transaction/list.html
|
||||
msgid "There are no transactions involving this address."
|
||||
msgstr "このアドレスに対するトランザクションはありません。"
|
||||
|
||||
#: public/views/transaction_sendraw.html
|
||||
msgid ""
|
||||
"This form can be used to broadcast a raw transaction in hex format over\n"
|
||||
" the Zcash network."
|
||||
msgstr ""
|
||||
"このフォームでは、16進数フォーマットの生のトランザクションをZcashネットワー"
|
||||
"ク上に配信することができます。"
|
||||
|
||||
#: public/views/messages_verify.html
|
||||
msgid ""
|
||||
"This form can be used to verify that a message comes from\n"
|
||||
" a specific Zcash address."
|
||||
msgstr ""
|
||||
"このフォームでは、メッセージが特定のZcashアドレスから来たかどうかを検証する"
|
||||
"ことができます。"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Time Offset"
|
||||
msgstr "時間オフセット"
|
||||
|
||||
#: public/views/block.html public/views/block_list.html
|
||||
msgid "Timestamp"
|
||||
msgstr "タイムスタンプ"
|
||||
|
||||
#: public/views/block_list.html
|
||||
msgid "Today"
|
||||
msgstr "今日"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Total Amount"
|
||||
msgstr "Zcash総量"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Total Received"
|
||||
msgstr "総入金額"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Total Sent"
|
||||
msgstr "総送金額"
|
||||
|
||||
#: public/views/transaction.html
|
||||
msgid "Transaction"
|
||||
msgstr "トランザクション"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Transaction Output Set Information"
|
||||
msgstr "トランザクションの出力セット情報"
|
||||
|
||||
#: public/views/status.html
|
||||
msgid "Transaction Outputs"
|
||||
msgstr "トランザクションの出力"
|
||||
|
||||
#: public/views/transaction_sendraw.html
|
||||
msgid "Transaction succesfully broadcast.<br>Transaction id: {{txid}}"
|
||||
msgstr "トランザクションの配信に成功しました。<br>トランザクションID: {{txid}}"
|
||||
|
||||
#: public/views/address.html public/views/block.html
|
||||
#: public/views/block_list.html public/views/index.html
|
||||
#: public/views/status.html
|
||||
msgid "Transactions"
|
||||
msgstr "トランザクション"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "Type"
|
||||
msgstr "タイプ"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Unconfirmed"
|
||||
msgstr "未検証"
|
||||
|
||||
#: public/views/transaction.html public/views/transaction/tx.html
|
||||
msgid "Unconfirmed Transaction!"
|
||||
msgstr "未検証のトランザクションです!"
|
||||
|
||||
#: public/views/address.html
|
||||
msgid "Unconfirmed Txs Balance"
|
||||
msgstr "未検証トランザクションの残高"
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "Value Out"
|
||||
msgstr "出力値"
|
||||
|
||||
#: public/views/messages_verify.html
|
||||
msgid "Verify"
|
||||
msgstr "検証"
|
||||
|
||||
#: public/views/messages_verify.html
|
||||
msgid "Verify signed message"
|
||||
msgstr "署名済みメッセージを検証"
|
||||
|
||||
#: public/views/block.html public/views/status.html
|
||||
msgid "Version"
|
||||
msgstr "バージョン"
|
||||
|
||||
#: public/views/block_list.html public/views/index.html
|
||||
msgid "Waiting for blocks..."
|
||||
msgstr "ブロックを待っています..."
|
||||
|
||||
#: public/views/index.html
|
||||
msgid "Waiting for transactions..."
|
||||
msgstr "トランザクションを待っています..."
|
||||
|
||||
#: public/views/block_list.html
|
||||
msgid "by date."
|
||||
msgstr "日毎。"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "first seen at"
|
||||
msgstr "最初に発見された日時"
|
||||
|
||||
#: public/views/transaction/tx.html
|
||||
msgid "mined"
|
||||
msgstr "採掘された"
|
||||
|
||||
#: public/views/block_list.html
|
||||
msgid "mined on:"
|
||||
msgstr "採掘日時:"
|
||||
|
||||
#~ msgid "(Mainchain)"
|
||||
#~ msgstr "(メインチェーン)"
|
||||
|
||||
#~ msgid "(Orphaned)"
|
||||
#~ msgstr "(孤立したブロック)"
|
||||
|
||||
#~ msgid "Bits"
|
||||
#~ msgstr "Bits"
|
||||
|
||||
#~ msgid "Block #{{block.height}}"
|
||||
#~ msgstr "ブロック #{{block.height}}"
|
||||
|
||||
#~ msgid "BlockHash"
|
||||
#~ msgstr "ブロックのハッシュ値"
|
||||
|
||||
#~ msgid "Blocks <br> mined on:"
|
||||
#~ msgstr "ブロック <br> 採掘日"
|
||||
|
||||
#~ msgid "Coinbase"
|
||||
#~ msgstr "コインベース"
|
||||
|
||||
#~ msgid "Hash"
|
||||
#~ msgstr "ハッシュ値"
|
||||
|
||||
#~ msgid "LockTime"
|
||||
#~ msgstr "ロック時間"
|
||||
|
||||
#~ msgid "Merkle Root"
|
||||
#~ msgstr "Merkleルート"
|
||||
|
||||
#~ msgid "Nonce"
|
||||
#~ msgstr "Nonce"
|
||||
|
||||
#~ msgid "Ooops!"
|
||||
#~ msgstr "おぉっと!"
|
||||
|
||||
#~ msgid "Output is spent"
|
||||
#~ msgstr "出力は使用済みです"
|
||||
|
||||
#~ msgid "Output is unspent"
|
||||
#~ msgstr "出力は未使用です"
|
||||
|
||||
#~ msgid "Scan"
|
||||
#~ msgstr "スキャン"
|
||||
|
||||
#~ msgid "Show/Hide items details"
|
||||
#~ msgstr "アイテムの詳細を表示または隠す"
|
||||
|
||||
#~ msgid "Waiting for blocks"
|
||||
#~ msgstr "ブロックを待っています"
|
||||
|
||||
#~ msgid "by date. {{detail}} {{before}}"
|
||||
#~ msgstr "日時順 {{detail}} {{before}}"
|
||||
|
||||
#~ msgid "scriptSig"
|
||||
#~ msgstr "scriptSig"
|
||||
|
||||
#~ msgid "{{tx.confirmations}} Confirmations"
|
||||
#~ msgstr "{{tx.confirmations}} 検証"
|
||||
|
||||
#~ msgid "<span class=\"glyphicon glyphicon-warning-sign\"></span> (Orphaned)"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"glyphicon glyphicon-warning-sign\"></span> (孤立したブロッ"
|
||||
#~ "ク)"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"glyphicon glyphicon-warning-sign\"></span> Incoherence in "
|
||||
#~ "levelDB detected: {{vin.dbError}}"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"glyphicon glyphicon-warning-sign\"></span> Incoherence in "
|
||||
#~ "levelDB detected: {{vin.dbError}}"
|
||||
|
||||
#~ msgid "Waiting for blocks <span class=\"loader-gif\"></span>"
|
||||
#~ msgstr "ブロックを待っています <span class=\"loader-gif\"></span>"
|
File diff suppressed because one or more lines are too long
Binary file not shown.
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 723 B |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 15 KiB |
|
@ -1,18 +1,21 @@
|
|||
<!doctype html>
|
||||
<html lang="en" data-ng-app="insight" 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-if="currency.testnet" data-ng-bind="$root.title + $root.titleDetail + ' | Testnet Insight'">Testnet Insight</title>
|
||||
<title data-ng-if="!currency.testnet" data-ng-bind="$root.title + $root.titleDetail + ' | Insight'">Insight</title>
|
||||
<meta name="keywords" content="zcash, transactions, blocks, address, block chain, best block, mining difficulty, hash serialized">
|
||||
<meta data-ng-if="currency.testnet" name="description" content="Zcash Insight. View detailed information on all testnet zcash transactions and block. {{ $root.title + $root.titleDetail }}">
|
||||
<meta data-ng-if="!currency.testnet" name="description" content="Zcash Insight. View detailed information on all zcash transactions and block. {{ $root.title + $root.titleDetail }}">
|
||||
<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>
|
||||
<body ng-cloak class="ng-cloak">
|
||||
<div>
|
||||
<script type="text/ng-template" id="scannerModal.html">
|
||||
<div class="modal-header">
|
||||
|
@ -39,17 +42,36 @@
|
|||
</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">
|
||||
<div class="container" data-ng-controller="FooterController">
|
||||
<a class="insight m10v pull-right" href="/">insight <small>API v{{version}}</small></a>
|
||||
<div class="links m20t pull-left">
|
||||
<span class="languages" ng-show="availableLanguages.length > 0">
|
||||
[
|
||||
<a href="#"
|
||||
ng-click="setLanguage(l.isoCode)"
|
||||
ng-class="{'selected': defaultLanguage == l.isoCode}"
|
||||
ng-repeat="l in availableLanguages">
|
||||
<span ng-show="!$first"> · </span> {{l.name}}
|
||||
</a>
|
||||
]
|
||||
</span>
|
||||
|
||||
[
|
||||
<a href="messages/verify" translate>verify message</a>
|
||||
<span> · </span>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<script language="javascript">window.apiPrefix = '/api';</script>
|
||||
<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/main.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
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
|
@ -0,0 +1,4 @@
|
|||
User-agent: *
|
||||
Disallow: /address
|
||||
Disallow: /api
|
||||
Disallow: /transaction
|
|
@ -89,6 +89,7 @@ h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
|
|||
.m50v { margin: 50px 0; }
|
||||
.m10b { margin-bottom: 10px; }
|
||||
.m10l { margin-left: 10px; }
|
||||
.m20t { margin-top: 20px; }
|
||||
.vm { vertical-align: middle; }
|
||||
.pa {position: absolute;}
|
||||
.pr {position: relative;}
|
||||
|
@ -122,8 +123,8 @@ margin-left: 0;
|
|||
.navbar-default .navbar-nav>li>a {
|
||||
color: #F4FBE8;
|
||||
font-family: 'Ubuntu', sans-serif;
|
||||
padding-left: 25px;
|
||||
padding-right: 25px;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
}
|
||||
|
||||
.navbar-default .navbar-nav>.active>a, .navbar-default .navbar-nav>.active>a:focus {
|
||||
|
@ -140,25 +141,9 @@ margin-left: 0;
|
|||
}
|
||||
|
||||
.navbar-form {
|
||||
/*width: 35%;*/
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
@media (max-width: 991px) {
|
||||
.status {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.navbar-form {
|
||||
width: auto;
|
||||
}
|
||||
.status {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-tabs.nav-justified>li>a:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
@ -198,19 +183,26 @@ margin-left: 0;
|
|||
|
||||
#search-form { color: #fff; }
|
||||
|
||||
#search { font-family: 'Ubuntu', sans-serif; }
|
||||
|
||||
#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;
|
||||
}
|
||||
|
||||
.loader-gif {
|
||||
display: inline-block;
|
||||
width: 16px;
|
||||
height: 11px;
|
||||
background: transparent url(../img/loading.gif) no-repeat;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
#search { color: #fff; }
|
||||
|
||||
#search::-webkit-input-placeholder {
|
||||
color: #BCDF7E;
|
||||
font-family: 'Ubuntu', sans-serif;
|
||||
font-size: 14px;
|
||||
font-style: italic;
|
||||
font-weight: 100;
|
||||
}
|
||||
|
@ -218,7 +210,6 @@ margin-left: 0;
|
|||
#search::-moz-placeholder {
|
||||
color: #BCDF7E;
|
||||
font-family: 'Ubuntu', sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: 100;
|
||||
}
|
||||
|
||||
|
@ -260,25 +251,6 @@ margin-left: 0;
|
|||
z-index: 1;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.col-gray-fixed {
|
||||
width:100%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 995px) {
|
||||
.col-gray-fixed {
|
||||
position:static;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
.col-gray-fixed {
|
||||
width: 280px;
|
||||
}
|
||||
}
|
||||
|
||||
.ellipsis {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
|
@ -390,13 +362,6 @@ margin-left: 0;
|
|||
border-radius: .25em;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.txvalues {
|
||||
display: block;
|
||||
margin: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.txvalues-primary {
|
||||
background-color: #8DC429;
|
||||
}
|
||||
|
@ -444,6 +409,25 @@ margin-left: 0;
|
|||
#footer a.insight small { font-size: 11px; }
|
||||
.line-footer { border-top: 2px dashed #ccc; }
|
||||
|
||||
#footer .links {
|
||||
color: #ddd;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
#footer .links a {
|
||||
color: #ddd;
|
||||
}
|
||||
|
||||
#footer .links a.selected {
|
||||
color: #eee;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#footer .links a:hover {
|
||||
text-decoration: none;
|
||||
color: #fffffe;
|
||||
}
|
||||
|
||||
.line-bot {
|
||||
border-bottom: 2px solid #EAEAEA;
|
||||
padding: 0 0 10px 0;
|
||||
|
@ -564,7 +548,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 {
|
||||
|
@ -576,16 +560,6 @@ margin-left: 0;
|
|||
.btn-copy.zeroclipboard-is-hover { color: #2a6496; }
|
||||
.btn-copy.zeroclipboard-is-active .tooltip { opacity: 1; }
|
||||
|
||||
@media (max-width: 991px) {
|
||||
.btn-copy {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.txid {
|
||||
line-height: 26px;
|
||||
}
|
||||
|
||||
.tx-id {
|
||||
background-color: #373D42;
|
||||
border: 3px solid #FFFFFF;
|
||||
|
@ -603,7 +577,10 @@ margin-left: 0;
|
|||
.page-header { margin-top: 0; }
|
||||
|
||||
.panel { margin-bottom: 1em;}
|
||||
.panel-body {padding: 0.7em;}
|
||||
.panel-body {
|
||||
padding: 0.7em;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
/* Index */
|
||||
#home .btn-more {
|
||||
|
@ -637,22 +614,22 @@ margin-left: 0;
|
|||
height: 45px;
|
||||
}
|
||||
#powered a.bitcore {
|
||||
background-image: url('http://bitcore.io/images/logo.svg');
|
||||
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%;
|
||||
}
|
||||
|
@ -737,3 +714,139 @@ a.v_highlight_more {
|
|||
margin-top: 15px;
|
||||
}
|
||||
|
||||
@media (max-width: 991px) {
|
||||
.status {
|
||||
display: none;
|
||||
}
|
||||
.navbar-form {
|
||||
width: auto;
|
||||
}
|
||||
.btn-copy {
|
||||
display: none;
|
||||
}
|
||||
.col-gray-fixed {
|
||||
position:static;
|
||||
width: 100%;
|
||||
margin-top: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.m50v {
|
||||
margin: 15px 0;
|
||||
}
|
||||
.block-id span {
|
||||
font-size: 24px;
|
||||
margin: 10px 0;
|
||||
}
|
||||
.icon-block {
|
||||
font-size: initial;
|
||||
margin: 10px 0;
|
||||
}
|
||||
body {
|
||||
font-size: 12px;
|
||||
}
|
||||
h1 {
|
||||
font-size: 26px;
|
||||
}
|
||||
h2 {
|
||||
font-size: 22px;
|
||||
}
|
||||
h3 {
|
||||
font-size: 18px;
|
||||
}
|
||||
.insight {
|
||||
font-size: 30px;
|
||||
}
|
||||
.navbar-default .navbar-nav>li>a {
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.navbar-form {
|
||||
width: auto;
|
||||
}
|
||||
.status {
|
||||
display: none;
|
||||
}
|
||||
#wrap>.container {
|
||||
padding: 50px 15px 0;
|
||||
}
|
||||
#ngProgress-container {
|
||||
top: 50px;
|
||||
}
|
||||
body {
|
||||
font-size: 11px;
|
||||
}
|
||||
h1 {
|
||||
font-size: 24px;
|
||||
}
|
||||
h2 {
|
||||
font-size: 20px;
|
||||
}
|
||||
.navbar-default .navbar-brand {
|
||||
padding: 15px;
|
||||
}
|
||||
.insight {
|
||||
font-size: 26px;
|
||||
}
|
||||
.navbar-nav>li>a {
|
||||
padding-top: 15px;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
.container {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
.navbar-default .navbar-toggle {
|
||||
margin-top: 7px;
|
||||
}
|
||||
.navbar {
|
||||
min-height: 50px;
|
||||
}
|
||||
#search { color: #000; }
|
||||
.txvalues {
|
||||
display: block;
|
||||
margin: 5px;
|
||||
padding: 0.5em 2em;
|
||||
font-size: 11px;
|
||||
}
|
||||
.navbar-default .navbar-nav .open .dropdown-menu>li>a {
|
||||
color: #fff;
|
||||
}
|
||||
.txvalues {
|
||||
display: inline;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-weight: bold;
|
||||
}
|
||||
.txvalues-success {
|
||||
background: none;
|
||||
color: #2FA4D7;
|
||||
}
|
||||
.txvalues-primary {
|
||||
background: none;
|
||||
color: #8DC429;
|
||||
}
|
||||
.txvalues-default {
|
||||
background: none;
|
||||
color: #A09E9E;
|
||||
}
|
||||
.txvalues-danger {
|
||||
background: none;
|
||||
color: #AC0015;
|
||||
}
|
||||
.btn-expand {
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
.col-gray-fixed {
|
||||
width: 280px;
|
||||
}
|
||||
.navbar-form .form-control {
|
||||
width: 350px;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
'use strict';
|
||||
|
||||
var testnet = false;
|
||||
var netSymbol = testnet ? 'TAZ' : 'ZEC';
|
||||
|
||||
var defaultLanguage = localStorage.getItem('insight-language') || 'en';
|
||||
var defaultCurrency = localStorage.getItem('insight-currency') || netSymbol;
|
||||
|
||||
angular.module('insight',[
|
||||
'ngAnimate',
|
||||
'ngResource',
|
||||
|
@ -8,15 +14,19 @@ angular.module('insight',[
|
|||
'ui.bootstrap',
|
||||
'ui.route',
|
||||
'monospaced.qrcode',
|
||||
'gettext',
|
||||
'angularMoment',
|
||||
'insight.system',
|
||||
'insight.socket',
|
||||
'insight.blocks',
|
||||
'insight.transactions',
|
||||
'insight.address',
|
||||
'insight.search',
|
||||
'insight.charts',
|
||||
'insight.status',
|
||||
'insight.connection',
|
||||
'insight.currency'
|
||||
'insight.currency',
|
||||
'insight.messages'
|
||||
]);
|
||||
|
||||
angular.module('insight.system', []);
|
||||
|
@ -25,6 +35,8 @@ angular.module('insight.blocks', []);
|
|||
angular.module('insight.transactions', []);
|
||||
angular.module('insight.address', []);
|
||||
angular.module('insight.search', []);
|
||||
angular.module('insight.charts', []);
|
||||
angular.module('insight.status', []);
|
||||
angular.module('insight.connection', []);
|
||||
angular.module('insight.currency', []);
|
||||
angular.module('insight.messages', []);
|
||||
|
|
|
@ -4,39 +4,51 @@
|
|||
angular.module('insight').config(function($routeProvider) {
|
||||
$routeProvider.
|
||||
when('/block/:blockHash', {
|
||||
templateUrl: '/views/block.html',
|
||||
title: 'Bitcoin Block '
|
||||
templateUrl: 'views/block.html',
|
||||
title: 'Zcash Block '
|
||||
}).
|
||||
when('/block-index/:blockHeight', {
|
||||
controller: 'BlocksController',
|
||||
templateUrl: '/views/redirect.html'
|
||||
templateUrl: 'views/redirect.html'
|
||||
}).
|
||||
when('/tx/send', {
|
||||
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: 'Zcash 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: 'Zcash Blocks solved Today'
|
||||
}).
|
||||
when('/blocks-date/:blockDate', {
|
||||
templateUrl: '/views/block_list.html',
|
||||
title: 'Bitcoin Blocks solved '
|
||||
when('/blocks-date/:blockDate/:startTimestamp?', {
|
||||
templateUrl: 'views/block_list.html',
|
||||
title: 'Zcash Blocks solved '
|
||||
}).
|
||||
when('/address/:addrStr', {
|
||||
templateUrl: '/views/address.html',
|
||||
title: 'Bitcoin Address '
|
||||
templateUrl: 'views/address.html',
|
||||
title: 'Zcash Address '
|
||||
}).
|
||||
when('/charts/:chartType?', {
|
||||
templateUrl: 'views/charts.html',
|
||||
title: 'Charts'
|
||||
}).
|
||||
when('/status', {
|
||||
templateUrl: '/views/status.html',
|
||||
templateUrl: 'views/status.html',
|
||||
title: 'Status'
|
||||
}).
|
||||
when('/messages/verify', {
|
||||
templateUrl: 'views/messages_verify.html',
|
||||
title: 'Verify Message'
|
||||
})
|
||||
.otherwise({
|
||||
templateUrl: '/views/404.html',
|
||||
templateUrl: 'views/404.html',
|
||||
title: 'Error'
|
||||
});
|
||||
});
|
||||
|
@ -47,7 +59,9 @@ angular.module('insight')
|
|||
$locationProvider.html5Mode(true);
|
||||
$locationProvider.hashPrefix('!');
|
||||
})
|
||||
.run(function($rootScope, $route, ngProgress) {
|
||||
.run(function($rootScope, $route, $location, $routeParams, $anchorScroll, ngProgress, gettextCatalog, amMoment) {
|
||||
gettextCatalog.currentLanguage = defaultLanguage;
|
||||
amMoment.changeLocale(defaultLanguage);
|
||||
$rootScope.$on('$routeChangeStart', function() {
|
||||
ngProgress.start();
|
||||
});
|
||||
|
@ -60,5 +74,8 @@ angular.module('insight')
|
|||
$rootScope.title = $route.current.title;
|
||||
$rootScope.isCollapsed = true;
|
||||
$rootScope.currentAddr = null;
|
||||
|
||||
$location.hash($routeParams.scrollTo);
|
||||
$anchorScroll();
|
||||
});
|
||||
});
|
||||
|
|
|
@ -4,24 +4,34 @@ angular.module('insight.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('bitcoind/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', 'bitcoind/addresstxid', [addrStr]);
|
||||
};
|
||||
|
||||
var _stopSocket = function () {
|
||||
socket.emit('unsubscribe', 'bitcoind/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;
|
||||
|
|
|
@ -41,7 +41,7 @@ angular.module('insight.blocks').controller('BlocksController',
|
|||
$scope.humanSince = function(time) {
|
||||
var m = moment.unix(time).startOf('day');
|
||||
var b = moment().startOf('day');
|
||||
return m.max().from(b);
|
||||
return moment.min(m).from(b);
|
||||
};
|
||||
|
||||
|
||||
|
@ -49,11 +49,21 @@ angular.module('insight.blocks').controller('BlocksController',
|
|||
$scope.loading = true;
|
||||
|
||||
if ($routeParams.blockDate) {
|
||||
$rootScope.titleDetail = 'on ' + $routeParams.blockDate;
|
||||
$scope.detail = 'On ' + $routeParams.blockDate;
|
||||
}
|
||||
|
||||
if ($routeParams.startTimestamp) {
|
||||
var d=new Date($routeParams.startTimestamp*1000);
|
||||
var m=d.getMinutes();
|
||||
if (m<10) m = '0' + m;
|
||||
$scope.before = ' before ' + d.getHours() + ':' + m;
|
||||
}
|
||||
|
||||
$rootScope.titleDetail = $scope.detail;
|
||||
|
||||
Blocks.get({
|
||||
blockDate: $routeParams.blockDate
|
||||
blockDate: $routeParams.blockDate,
|
||||
startTimestamp: $routeParams.startTimestamp
|
||||
}, function(res) {
|
||||
$scope.loading = false;
|
||||
$scope.blocks = res.blocks;
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('insight.charts').controller('ChartsController',
|
||||
function($scope, $rootScope, $routeParams, $location, Chart, Charts) {
|
||||
$scope.loading = false;
|
||||
|
||||
$scope.list = function() {
|
||||
Charts.get({
|
||||
}, function(res) {
|
||||
$scope.charts = res.charts;
|
||||
});
|
||||
|
||||
if ($routeParams.chartType) {
|
||||
$scope.chart();
|
||||
}
|
||||
};
|
||||
|
||||
$scope.chart = function() {
|
||||
$scope.loading = true;
|
||||
|
||||
Chart.get({
|
||||
chartType: $routeParams.chartType
|
||||
}, function(chart) {
|
||||
$scope.loading = false;
|
||||
$scope.chartType = $routeParams.chartType;
|
||||
$scope.chartName = chart.name;
|
||||
$scope.chart = c3.generate(chart);
|
||||
}, function(e) {
|
||||
if (e.status === 400) {
|
||||
$rootScope.flashMessage = 'Invalid chart: ' + $routeParams.chartType;
|
||||
}
|
||||
else if (e.status === 503) {
|
||||
$rootScope.flashMessage = 'Backend Error. ' + e.data;
|
||||
}
|
||||
else {
|
||||
$rootScope.flashMessage = 'Chart Not Found';
|
||||
}
|
||||
$location.path('/');
|
||||
});
|
||||
};
|
||||
|
||||
$scope.params = $routeParams;
|
||||
|
||||
});
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
angular.module('insight.currency').controller('CurrencyController',
|
||||
function($scope, $rootScope, Currency) {
|
||||
$rootScope.currency.symbol = defaultCurrency;
|
||||
|
||||
var _roundFloat = function(x, n) {
|
||||
if(!parseInt(n, 10) || !parseFloat(x)) n = 0;
|
||||
|
@ -10,14 +11,21 @@ angular.module('insight.currency').controller('CurrencyController',
|
|||
};
|
||||
|
||||
$rootScope.currency.getConvertion = function(value) {
|
||||
if (typeof value !== 'undefined' && value !== null) {
|
||||
value = value * 1; // Convert to number
|
||||
|
||||
if (!isNaN(value) && typeof value !== 'undefined' && value !== null) {
|
||||
if (value === 0.00000000) return '0 ' + this.symbol; // fix value to show
|
||||
|
||||
var response;
|
||||
|
||||
if (this.symbol === 'USD') {
|
||||
response = _roundFloat((value * this.factor), 2);
|
||||
} else if (this.symbol === 'mBTC') {
|
||||
} else if (this.symbol === 'm'+netSymbol) {
|
||||
this.factor = 1000;
|
||||
response = _roundFloat((value * this.factor), 5);
|
||||
} else if (this.symbol === 'bits') {
|
||||
this.factor = 1000000;
|
||||
response = _roundFloat((value * this.factor), 2);
|
||||
} else {
|
||||
this.factor = 1;
|
||||
response = value;
|
||||
|
@ -33,13 +41,16 @@ angular.module('insight.currency').controller('CurrencyController',
|
|||
|
||||
$scope.setCurrency = function(currency) {
|
||||
$rootScope.currency.symbol = currency;
|
||||
localStorage.setItem('insight-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 === 'm'+netSymbol) {
|
||||
$rootScope.currency.factor = 1000;
|
||||
} else if (currency === 'bits') {
|
||||
$rootScope.currency.factor = 1000000;
|
||||
} else {
|
||||
$rootScope.currency.factor = 1;
|
||||
}
|
||||
|
@ -47,7 +58,7 @@ angular.module('insight.currency').controller('CurrencyController',
|
|||
|
||||
// Get initial value
|
||||
Currency.get({}, function(res) {
|
||||
$rootScope.currency.bitstamp = res.data.bitstamp;
|
||||
$rootScope.currency.factor = $rootScope.currency.bitstamp = res.data.bitstamp;
|
||||
});
|
||||
|
||||
});
|
||||
|
|
|
@ -1,15 +1,40 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('insight.system').controller('FooterController',
|
||||
function($scope, Version) {
|
||||
function($scope, $route, $templateCache, gettextCatalog, amMoment, Version) {
|
||||
|
||||
$scope.defaultLanguage = defaultLanguage;
|
||||
|
||||
var _getVersion = function() {
|
||||
Version.get({},
|
||||
function(res) {
|
||||
$scope.version = res.version;
|
||||
});
|
||||
function(res) {
|
||||
$scope.version = res.version;
|
||||
});
|
||||
};
|
||||
|
||||
$scope.version = _getVersion();
|
||||
|
||||
});
|
||||
$scope.availableLanguages = [{
|
||||
name: 'Deutsch',
|
||||
isoCode: 'de_DE',
|
||||
}, {
|
||||
name: 'English',
|
||||
isoCode: 'en',
|
||||
}, {
|
||||
name: 'Spanish',
|
||||
isoCode: 'es',
|
||||
}, {
|
||||
name: 'Japanese',
|
||||
isoCode: 'ja',
|
||||
}];
|
||||
|
||||
$scope.setLanguage = function(isoCode) {
|
||||
gettextCatalog.currentLanguage = $scope.defaultLanguage = defaultLanguage = isoCode;
|
||||
amMoment.changeLocale(isoCode);
|
||||
localStorage.setItem('insight-language', isoCode);
|
||||
var currentPageTemplate = $route.current.templateUrl;
|
||||
$templateCache.remove(currentPageTemplate);
|
||||
$route.reload();
|
||||
};
|
||||
|
||||
});
|
||||
|
|
|
@ -7,12 +7,17 @@ angular.module('insight.system').controller('HeaderController',
|
|||
$rootScope.currency = {
|
||||
factor: 1,
|
||||
bitstamp: 0,
|
||||
symbol: 'BTC'
|
||||
testnet: testnet,
|
||||
netSymbol: netSymbol,
|
||||
symbol: netSymbol
|
||||
};
|
||||
|
||||
$scope.menu = [{
|
||||
'title': 'Blocks',
|
||||
'link': 'blocks'
|
||||
}, {
|
||||
'title': 'Charts',
|
||||
'link': 'charts'
|
||||
}, {
|
||||
'title': 'Status',
|
||||
'link': 'status'
|
||||
|
|
|
@ -12,7 +12,7 @@ angular.module('insight.system').controller('IndexController',
|
|||
limit: BLOCKS_DISPLAYED
|
||||
}, function(res) {
|
||||
$scope.blocks = res.blocks;
|
||||
$scope.blocksLength = res.lenght;
|
||||
$scope.blocksLength = res.length;
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -40,7 +40,7 @@ angular.module('insight.system').controller('IndexController',
|
|||
|
||||
$scope.humanSince = function(time) {
|
||||
var m = moment.unix(time);
|
||||
return m.max().fromNow();
|
||||
return moment.min(m).fromNow();
|
||||
};
|
||||
|
||||
$scope.index = function() {
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('insight.messages').controller('VerifyMessageController',
|
||||
function($scope, $http) {
|
||||
$scope.message = {
|
||||
address: '',
|
||||
signature: '',
|
||||
message: ''
|
||||
};
|
||||
$scope.verification = {
|
||||
status: 'unverified', // ready|loading|verified|error
|
||||
result: null,
|
||||
error: null,
|
||||
address: ''
|
||||
};
|
||||
|
||||
$scope.verifiable = function() {
|
||||
return ($scope.message.address
|
||||
&& $scope.message.signature
|
||||
&& $scope.message.message);
|
||||
};
|
||||
$scope.verify = function() {
|
||||
$scope.verification.status = 'loading';
|
||||
$scope.verification.address = $scope.message.address;
|
||||
$http.post(window.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
|
||||
$scope.verification.status = 'error';
|
||||
$scope.verification.error = null;
|
||||
return;
|
||||
}
|
||||
|
||||
$scope.verification.status = 'verified';
|
||||
$scope.verification.result = data.result;
|
||||
})
|
||||
.error(function(data, status, headers, config) {
|
||||
$scope.verification.status = 'error';
|
||||
$scope.verification.error = data;
|
||||
});
|
||||
};
|
||||
|
||||
// Hide the verify status message on form change
|
||||
var unverify = function() {
|
||||
$scope.verification.status = 'unverified';
|
||||
};
|
||||
$scope.$watch('message.address', unverify);
|
||||
$scope.$watch('message.signature', unverify);
|
||||
$scope.$watch('message.message', unverify);
|
||||
});
|
|
@ -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('zcash:') === 0) ? data.substring(8) : data;
|
||||
console.log('QR code detected: ' + str);
|
||||
$searchInput
|
||||
.val(str)
|
||||
|
|
|
@ -48,6 +48,7 @@ angular.module('insight.search').controller('SearchController',
|
|||
_resetSearch();
|
||||
$location.path('/block/' + hash.blockHash);
|
||||
}, function() { //not found, fail :(
|
||||
$scope.loading = false;
|
||||
_badQuery();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ angular.module('insight.status').controller('StatusController',
|
|||
|
||||
$scope.humanSince = function(time) {
|
||||
var m = moment.unix(time / 1000);
|
||||
return m.max().fromNow();
|
||||
return moment.min(m).fromNow();
|
||||
};
|
||||
|
||||
var _onSyncUpdate = function(sync) {
|
||||
|
|
|
@ -56,11 +56,14 @@ function($scope, $rootScope, $routeParams, $location, Global, Transaction, Trans
|
|||
|
||||
tmp[addr].doubleSpentTxID = tmp[addr].doubleSpentTxID || items[i].doubleSpentTxID;
|
||||
tmp[addr].doubleSpentIndex = tmp[addr].doubleSpentIndex || items[i].doubleSpentIndex;
|
||||
tmp[addr].unconfirmedInput += items[i].unconfirmedInput;
|
||||
tmp[addr].dbError = tmp[addr].dbError || items[i].dbError;
|
||||
tmp[addr].valueSat += Math.round(items[i].value * COIN);
|
||||
tmp[addr].items.push(items[i]);
|
||||
tmp[addr].notAddr = notAddr;
|
||||
|
||||
if (items[i].unconfirmedInput)
|
||||
tmp[addr].unconfirmedInput = true;
|
||||
|
||||
tmp[addr].count++;
|
||||
}
|
||||
|
||||
|
@ -170,3 +173,41 @@ function($scope, $rootScope, $routeParams, $location, Global, Transaction, Trans
|
|||
});
|
||||
|
||||
});
|
||||
|
||||
angular.module('insight.transactions').controller('SendRawTransactionController',
|
||||
function($scope, $http) {
|
||||
$scope.transaction = '';
|
||||
$scope.status = 'ready'; // ready|loading|sent|error
|
||||
$scope.txid = '';
|
||||
$scope.error = null;
|
||||
|
||||
$scope.formValid = function() {
|
||||
return !!$scope.transaction;
|
||||
};
|
||||
$scope.send = function() {
|
||||
var postData = {
|
||||
rawtx: $scope.transaction
|
||||
};
|
||||
$scope.status = 'loading';
|
||||
$http.post(window.apiPrefix + '/tx/send', postData)
|
||||
.success(function(data, status, headers, config) {
|
||||
if(typeof(data.txid) != 'string') {
|
||||
// API returned 200 but the format is not known
|
||||
$scope.status = 'error';
|
||||
$scope.error = 'The transaction was sent but no transaction id was got back';
|
||||
return;
|
||||
}
|
||||
|
||||
$scope.status = 'sent';
|
||||
$scope.txid = data.txid;
|
||||
})
|
||||
.error(function(data, status, headers, config) {
|
||||
$scope.status = 'error';
|
||||
if(data) {
|
||||
$scope.error = data;
|
||||
} else {
|
||||
$scope.error = "No error message given (connection error?)"
|
||||
}
|
||||
});
|
||||
};
|
||||
});
|
||||
|
|
|
@ -72,4 +72,20 @@ angular.module('insight')
|
|||
});
|
||||
}
|
||||
};
|
||||
})
|
||||
.directive('focus', function ($timeout) {
|
||||
return {
|
||||
scope: {
|
||||
trigger: '@focus'
|
||||
},
|
||||
link: function (scope, element) {
|
||||
scope.$watch('trigger', function (value) {
|
||||
if (value === "true") {
|
||||
$timeout(function () {
|
||||
element[0].focus();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
angular.module('insight.address').factory('Address',
|
||||
function($resource) {
|
||||
return $resource('/api/addr/:addrStr/?noTxList=1', {
|
||||
return $resource(window.apiPrefix + '/addr/:addrStr/?noTxList=1', {
|
||||
addrStr: '@addStr'
|
||||
}, {
|
||||
get: {
|
||||
|
@ -21,3 +21,4 @@ angular.module('insight.address').factory('Address',
|
|||
});
|
||||
});
|
||||
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
angular.module('insight.blocks')
|
||||
.factory('Block',
|
||||
function($resource) {
|
||||
return $resource('/api/block/:blockHash', {
|
||||
return $resource(window.apiPrefix + '/block/:blockHash', {
|
||||
blockHash: '@blockHash'
|
||||
}, {
|
||||
get: {
|
||||
|
@ -23,9 +23,9 @@ angular.module('insight.blocks')
|
|||
})
|
||||
.factory('Blocks',
|
||||
function($resource) {
|
||||
return $resource('/api/blocks');
|
||||
return $resource(window.apiPrefix + '/blocks');
|
||||
})
|
||||
.factory('BlockByHeight',
|
||||
function($resource) {
|
||||
return $resource('/api/block-index/:blockHeight');
|
||||
return $resource(window.apiPrefix + '/block-index/:blockHeight');
|
||||
});
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('insight.charts')
|
||||
.factory('Chart',
|
||||
function($resource) {
|
||||
return $resource(window.apiPrefix + '/chart/:chartType', {
|
||||
chartType: '@chartType'
|
||||
}, {
|
||||
get: {
|
||||
method: 'GET',
|
||||
interceptor: {
|
||||
response: function (res) {
|
||||
return res.data;
|
||||
},
|
||||
responseError: function (res) {
|
||||
if (res.status === 404) {
|
||||
return res;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
})
|
||||
.factory('Charts',
|
||||
function($resource) {
|
||||
return $resource(window.apiPrefix + '/charts');
|
||||
});
|
|
@ -2,5 +2,5 @@
|
|||
|
||||
angular.module('insight.currency').factory('Currency',
|
||||
function($resource) {
|
||||
return $resource('/api/currency');
|
||||
return $resource(window.apiPrefix + '/currency');
|
||||
});
|
||||
|
|
|
@ -4,9 +4,10 @@
|
|||
angular.module('insight.system')
|
||||
.factory('Global',[
|
||||
function() {
|
||||
return {};
|
||||
}
|
||||
])
|
||||
.factory('Version',
|
||||
function($resource) {
|
||||
return $resource('/api/version');
|
||||
return $resource(window.apiPrefix + '/version');
|
||||
});
|
||||
|
|
|
@ -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,6 +49,8 @@ ScopedSocket.prototype.emit = function(event, data, callback) {
|
|||
}
|
||||
});
|
||||
});
|
||||
|
||||
socket.emit.apply(socket, args);
|
||||
};
|
||||
|
||||
angular.module('insight.socket').factory('getSocket',
|
||||
|
|
|
@ -3,15 +3,15 @@
|
|||
angular.module('insight.status')
|
||||
.factory('Status',
|
||||
function($resource) {
|
||||
return $resource('/api/status', {
|
||||
return $resource(window.apiPrefix + '/status', {
|
||||
q: '@q'
|
||||
});
|
||||
})
|
||||
.factory('Sync',
|
||||
function($resource) {
|
||||
return $resource('/api/sync');
|
||||
return $resource(window.apiPrefix + '/sync');
|
||||
})
|
||||
.factory('PeerSync',
|
||||
function($resource) {
|
||||
return $resource('/api/peer');
|
||||
return $resource(window.apiPrefix + '/peer');
|
||||
});
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
angular.module('insight.transactions')
|
||||
.factory('Transaction',
|
||||
function($resource) {
|
||||
return $resource('/api/tx/:txId', {
|
||||
return $resource(window.apiPrefix + '/tx/:txId', {
|
||||
txId: '@txId'
|
||||
}, {
|
||||
get: {
|
||||
|
@ -23,17 +23,17 @@ angular.module('insight.transactions')
|
|||
})
|
||||
.factory('TransactionsByBlock',
|
||||
function($resource) {
|
||||
return $resource('/api/txs', {
|
||||
return $resource(window.apiPrefix + '/txs', {
|
||||
block: '@block'
|
||||
});
|
||||
})
|
||||
.factory('TransactionsByAddress',
|
||||
function($resource) {
|
||||
return $resource('/api/txs', {
|
||||
return $resource(window.apiPrefix + '/txs', {
|
||||
address: '@address'
|
||||
});
|
||||
})
|
||||
.factory('Transactions',
|
||||
function($resource) {
|
||||
return $resource('/api/txs');
|
||||
return $resource(window.apiPrefix + '/txs');
|
||||
});
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -1,6 +1,6 @@
|
|||
<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 class="text-muted">404 Page not found :(</h2>
|
||||
<p><a href="/" class="pull-right">Go to home</a></p>
|
||||
<h2 translate class="text-muted">404 Page not found :(</h2>
|
||||
<p><a translate href="/" class="pull-right">Go to home</a></p>
|
||||
</div>
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
<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>Address</h3> {{address.addrStr}}
|
||||
<h3 translate>Address</h3> {{address.addrStr}}
|
||||
<span class="btn-copy" clip-copy="address.addrStr"></span>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<span class="txvalues txvalues-primary"><strong>Final Balance</strong> {{$root.currency.getConvertion(address.balance) || address.balance + ' BTC' }}</span>
|
||||
<span class="txvalues txvalues-primary"><strong translate>Final Balance</strong> {{$root.currency.getConvertion(address.balance)}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hide_snavbar">
|
||||
|
@ -17,35 +17,35 @@
|
|||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<h1>Address <small data-ng-show="address.addrStr">{{$root.currency.getConvertion(address.balance) || address.balance + ' BTC'}}</small></h1>
|
||||
<h1><span translate>Address</span> <small data-ng-show="address.addrStr">{{$root.currency.getConvertion(address.balance)}}</small></h1>
|
||||
<div class="text-muted" data-ng-if="!address.addrStr">
|
||||
<span>Loading Address Information...</span>
|
||||
<span translate>Loading Address Information</span> <span class="loader-gif"></span>
|
||||
</div>
|
||||
<div data-ng-if="address.addrStr">
|
||||
<div class="well well-sm ellipsis">
|
||||
<strong>Address</strong>
|
||||
<strong translate>Address</strong>
|
||||
<span class="text-muted">{{address.addrStr}}</span>
|
||||
<span class="btn-copy" clip-copy="address.addrStr"></span>
|
||||
</div>
|
||||
<h2>Summary <small>confirmed</small></h2>
|
||||
<div class="ng-cloak row" data-ng-hide="!address.addrStr" data-ng-cloak>
|
||||
<h2 translate>Summary <small>confirmed</small></h2>
|
||||
<div class="row" data-ng-hide="!address.addrStr">
|
||||
<div class="col-md-10">
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>Total Received</strong></td>
|
||||
<td class="ellipsis text-right">{{$root.currency.getConvertion(address.totalReceived) || address.totalReceived + ' BTC'}}</td>
|
||||
<td><strong translate>Total Received</strong></td>
|
||||
<td class="ellipsis text-right">{{$root.currency.getConvertion(address.totalReceived)}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Total Sent</strong></td>
|
||||
<td class="ellipsis text-right">{{$root.currency.getConvertion(address.totalSent) || address.totalSent + ' BTC'}}</td>
|
||||
<td><strong translate>Total Sent</strong></td>
|
||||
<td class="ellipsis text-right">{{$root.currency.getConvertion(address.totalSent)}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Final Balance</strong></td>
|
||||
<td class="ellipsis text-right">{{$root.currency.getConvertion(address.balance) || address.balance + ' BTC'}}</td>
|
||||
<td><strong translate>Final Balance</strong></td>
|
||||
<td class="ellipsis text-right">{{$root.currency.getConvertion(address.balance)}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>No. Transactions</strong></td>
|
||||
<td><strong translate>No. Transactions</strong></td>
|
||||
<td class="ellipsis text-right">{{address.txApperances}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
@ -56,15 +56,15 @@
|
|||
</div>
|
||||
</div>
|
||||
<div data-ng-show="address.unconfirmedTxApperances">
|
||||
<h3>Unconfirmed</h3>
|
||||
<h3 translate>Unconfirmed</h3>
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="small">Unconfirmed Txs Balance</td>
|
||||
<td class="small" translate>Unconfirmed Txs Balance</td>
|
||||
<td class="address ellipsis text-right">{{$root.currency.getConvertion(address.unconfirmedBalance)}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="small">No. Transactions</td>
|
||||
<td class="small" translate>No. Transactions</td>
|
||||
<td class="address ellipsis text-right">{{address.unconfirmedTxApperances}}</td>
|
||||
</tr>
|
||||
|
||||
|
@ -73,8 +73,8 @@
|
|||
</div>
|
||||
</div>
|
||||
<div data-ng-if="address.addrStr" data-ng-controller="transactionsController" data-ng-init="load('address')">
|
||||
<h2>Transactions</h2>
|
||||
<div data-ng-include src="'/views/transaction/list.html'" when-scrolled="loadMore()"></div>
|
||||
<h2 translate>Transactions</h2>
|
||||
<div data-ng-include src="'views/transaction/list.html'" when-scrolled="loadMore()"></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
<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">
|
||||
<div class="col-md-5">
|
||||
<h3 class="text-left">Block #{{block.height}}</h3>
|
||||
<h3 class="text-left"><span translate>Block</span> #{{block.height}}</h3>
|
||||
</div>
|
||||
<p class="col-md-6 ellipsis text-left">
|
||||
<strong>Hash</strong> {{block.hash}}
|
||||
|
@ -20,7 +20,7 @@
|
|||
</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 -->
|
||||
|
@ -33,40 +33,40 @@
|
|||
</div>
|
||||
<h1>Block #{{block.height}}</h1>
|
||||
<div class="text-muted" data-ng-if="!block.hash">
|
||||
<span>Loading Block Information...</span>
|
||||
<span translate>Loading Block Information</span> <span class="loader-gif"></span>
|
||||
</div>
|
||||
<div class="ng-cloak" data-ng-cloak data-ng-if="block.hash">
|
||||
<div data-ng-if="block.hash">
|
||||
<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>
|
||||
</div>
|
||||
<h2>Summary</h2>
|
||||
<h2 translate>Summary</h2>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<table class="table" style="table-layout: fixed">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>Number Of Transactions</strong></td>
|
||||
<td><strong translate>Number Of Transactions</strong></td>
|
||||
<td class="text-right text-muted">{{block.tx.length}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Height</strong></td>
|
||||
<td><strong translate>Height</strong></td>
|
||||
<td class="text-right text-muted">{{block.height}}
|
||||
<span data-ng-show="block.isMainChain" class="text-success">(Mainchain)</span>
|
||||
<span data-ng-show="!block.isMainChain" class="text-danger"> <span class="glyphicon glyphicon-warning-sign"></span> (Orphaned)</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Block Reward</strong></td>
|
||||
<td class="text-right text-muted">{{$root.currency.getConvertion(block.reward) || block.reward + ' BTC'}}</td>
|
||||
<td><strong translate>Block Reward</strong></td>
|
||||
<td class="text-right text-muted">{{$root.currency.getConvertion(block.reward)}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Timestamp</strong></td>
|
||||
<td><strong translate>Timestamp</strong></td>
|
||||
<td class="text-right text-muted">{{block.time * 1000 | date:'medium'}}</td>
|
||||
</tr>
|
||||
<tr data-ng-show="block.poolInfo">
|
||||
<td><strong>Mined by</strong></td>
|
||||
<td><strong translate>Mined by</strong></td>
|
||||
<td class="text-right text-muted">
|
||||
<a href="{{block.poolInfo.url}}" target="_blank" title="{{block.poolInfo.poolName}}">{{block.poolInfo.poolName}}</a>
|
||||
</td>
|
||||
|
@ -81,38 +81,52 @@
|
|||
</td>
|
||||
</tr>
|
||||
<tr data-ng-show="block.previousblockhash">
|
||||
<td><strong>Previous Block</strong></td>
|
||||
<td class="text-right"><a href="/block/{{block.previousblockhash}}">{{block.height-1}}</a></td>
|
||||
<td><strong translate>Previous Block</strong></td>
|
||||
<td class="text-right"><a href="block/{{block.previousblockhash}}">{{block.height-1}}</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<table class="table">
|
||||
<table class="table" style="table-layout: fixed">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td> <strong> Difficulty </strong></td>
|
||||
<td> <strong translate>Difficulty</strong></td>
|
||||
<td class="text-right text-muted">{{block.difficulty}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> <strong> Bits </strong></td>
|
||||
<td> <strong>Bits</strong></td>
|
||||
<td class="text-right text-muted">{{block.bits}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> <strong> Size (bytes) </strong></td>
|
||||
<td> <strong translate>Size (bytes)</strong></td>
|
||||
<td class="text-right text-muted">{{block.size}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> <strong> Version </strong></td>
|
||||
<td> <strong translate>Version</strong></td>
|
||||
<td class="text-right text-muted">{{block.version}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> <strong> Nonce </strong></td>
|
||||
<td class="text-right text-muted">{{block.nonce}}</td>
|
||||
<td> <strong>Nonce</strong></td>
|
||||
<td class="text-right text-muted">
|
||||
<div class="ellipsis">
|
||||
<span class="btn-copy" clip-copy="block.nonce"></span>
|
||||
<span>{{block.nonce}}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Solution</strong></td>
|
||||
<td class="text-right text-muted">
|
||||
<div class="ellipsis">
|
||||
<span class="btn-copy" clip-copy="block.solution"></span>
|
||||
<span>{{block.solution}}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr data-ng-show="block.nextblockhash">
|
||||
<td><strong>Next Block</strong></td>
|
||||
<td class="text-right"><a href="/block/{{block.nextblockhash}}">{{block.height+1}}</a></td>
|
||||
<td><strong translate>Next Block</strong></td>
|
||||
<td class="text-right"><a href="block/{{block.nextblockhash}}">{{block.height+1}}</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -120,8 +134,8 @@
|
|||
</div>
|
||||
</div>
|
||||
<div data-ng-if="block.hash" data-ng-controller="transactionsController" data-ng-init="load('block')">
|
||||
<h3>Transactions</h3>
|
||||
<div data-ng-include src="'/views/transaction/list.html'" when-scrolled="loadMore()"></div>
|
||||
<h3 translate>Transactions</h3>
|
||||
<div data-ng-include src="'views/transaction/list.html'" when-scrolled="loadMore()"></div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
<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">
|
||||
<div class="block-id">
|
||||
<div class="icon-block text-center">
|
||||
<span class="glyphicon glyphicon-list"></span>
|
||||
<h3>Blocks <br> mined on:</h3>
|
||||
<h3><span translate>Blocks</span> <br>
|
||||
<span translate>mined on:</span></h3>
|
||||
</div>
|
||||
</div>
|
||||
<p class="lead text-center m20v">
|
||||
|
@ -13,51 +14,56 @@
|
|||
<a href="#" class="btn btn-primary btn-xs" datepicker-popup show-button-bar="false" data-ng-click="openCalendar($event)" data-ng-model="dt" is-open="opened" data-ng-required="true"><span class="glyphicon glyphicon-calendar"></span></a>
|
||||
</p>
|
||||
<div class="m20v text-center text-muted" data-ng-if="!pagination.current">
|
||||
<span>Loading Selected Date...</span>
|
||||
<span translate>Loading Selected Date...</span>
|
||||
</div>
|
||||
<div class="ng-cloak" data-ng-cloak data-ng-if="pagination.current">
|
||||
<div data-ng-if="pagination.current">
|
||||
<p class="lead text-center m20v" data-ng-show="loading"> </p>
|
||||
<p class="text-center m20v" data-ng-show="pagination.isToday && !loading">Today</p>
|
||||
<p class="text-center m20v" data-ng-show="pagination.isToday && !loading" translate>Today</p>
|
||||
<p class="text-center m20v" data-ng-show="!pagination.isToday && !loading">{{humanSince(pagination.currentTs)}}
|
||||
<p class="text-center m20v" data-ng-show="loading"> </p>
|
||||
<div class="m50v text-center">
|
||||
<a class="btn btn-primary" href="/blocks-date/{{pagination.prev}}"><small>← {{pagination.prev}}</small></a>
|
||||
<a class="btn btn-primary" href="/blocks-date/{{pagination.next}}" data-ng-show="!pagination.isToday"><small>{{pagination.next}} →</small></a>
|
||||
<a class="btn btn-primary" href="blocks-date/{{pagination.prev}}"><small>← {{pagination.prev}}</small></a>
|
||||
<a class="btn btn-primary" href="blocks-date/{{pagination.next}}" data-ng-show="!pagination.isToday"><small>{{pagination.next}} →</small></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-9 col-md-offset-3">
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
Blocks
|
||||
<small>by date</small>
|
||||
<span translate>Blocks</span>
|
||||
<small><span translate>by date.</span> {{detail}} {{before}}</small>
|
||||
</h1>
|
||||
</div>
|
||||
<table class="table table-hover table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Height</th>
|
||||
<th>Timestamp</th>
|
||||
<th class="text-right">Transactions</th>
|
||||
<th class="text-right">Mined by</th>
|
||||
<th class="text-right">Size</th>
|
||||
<th translate>Height</th>
|
||||
<th translate>Timestamp</th>
|
||||
<th class="text-right" translate>Transactions</th>
|
||||
<th class="text-right hidden-xs" translate>Mined by</th>
|
||||
<th class="text-right" translate>Size</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr data-ng-show="loading">
|
||||
<td colspan="4">Waiting for blocks...</td>
|
||||
<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"><a href="{{b.poolInfo.url}}" title="{{b.poolInfo.poolName}}" target="_blank" data-ng-show="b.poolInfo">{{b.poolInfo.poolName}}</a></td>
|
||||
<td class="text-right hidden-xs"><a href="{{b.poolInfo.url}}" title="{{b.poolInfo.poolName}}" target="_blank" data-ng-show="b.poolInfo">{{b.poolInfo.poolName}}</a></td>
|
||||
<td class="text-right">{{b.size}}</td>
|
||||
</tr>
|
||||
</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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2 class="text-center text-muted" data-ng-show="!blocks.length && !loading">No blocks yet.</h2>
|
||||
<h2 class="text-center text-muted" data-ng-show="!blocks.length && !loading"
|
||||
translate>No blocks yet.</h2>
|
||||
</section>
|
||||
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
<div data-ng-include src="'views/includes/connection.html'"></div>
|
||||
<section data-ng-controller="ChartsController" data-ng-init="list()">
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-gray col-gray-fixed">
|
||||
<div class="block-id">
|
||||
<div class="icon-block text-center">
|
||||
<span class="glyphicon glyphicon-stats"></span>
|
||||
<h3><span translate>Charts</span></h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="m20v text-center">
|
||||
<span class="fader" data-ng-repeat='(type, c) in charts'>
|
||||
<a class="btn btn-primary" style="margin-bottom: 3px" href="charts/{{type}}">{{c.name}}<a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-9 col-md-offset-3">
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
<span>{{chartName}}</span>
|
||||
</h1>
|
||||
</div>
|
||||
<div data-ng-show="loading">
|
||||
<span translate>Loading chart...</span> <span class="loader-gif"></span>
|
||||
</div>
|
||||
<div data-ng-show="!loading">
|
||||
<div id="chart"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
{{'Blocks'|translate}}
|
||||
{{'Status'|translate}}
|
|
@ -4,18 +4,17 @@
|
|||
data-ng-show="!serverOnline || !clienteOnline || !apiOnline"
|
||||
data-ng-init="getConnStatus()">
|
||||
|
||||
<strong>Error!</strong>
|
||||
<strong translate>Error!</strong>
|
||||
|
||||
<p data-ng-show="!apiOnline">
|
||||
Can't connect to bitcoind to get live updates from the p2p network.
|
||||
(Tried connecting to bitcoind at {{host}}:{{port}} and failed.)
|
||||
<p data-ng-show="!apiOnline" translate>
|
||||
Can't connect to zcashd to get live updates from the p2p network. (Tried connecting to zcashd at {{host}}:{{port}} and failed.)
|
||||
</p>
|
||||
|
||||
<p data-ng-show="!serverOnline">
|
||||
<p data-ng-show="!serverOnline" translate>
|
||||
Can't connect to insight server. Attempting to reconnect...
|
||||
</p>
|
||||
|
||||
<p data-ng-show="!clienteOnline">
|
||||
<p data-ng-show="!clienteOnline" translate>
|
||||
Can't connect to internet. Please, check your connection.
|
||||
</p>
|
||||
|
||||
|
|
|
@ -3,13 +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(currency.netSymbol)" data-ng-class="{active: currency.symbol == currency.netSymbol}">{{currency.netSymbol}}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" data-ng-click="setCurrency('mBTC')" data-ng-class="{active: currency.symbol == 'mBTC'}">mBTC</a>
|
||||
<a data-ng-click="setCurrency('m'+currency.netSymbol)" data-ng-class="{active: currency.symbol == ('m'+currency.netSymbol)}">m{{currency.netSymbol}}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a data-ng-click="setCurrency('bits')" data-ng-class="{active: currency.symbol == 'bits'}">bits</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
|
|
@ -7,20 +7,15 @@
|
|||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="insight navbar-brand" href="/">insight</a>
|
||||
<a class="insight navbar-brand" href=".">insight</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}}</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>
|
||||
<form id="search-form" data-ng-controller="SearchController" class="navbar-form navbar-left hidden-xs" role="search" data-ng-submit="search()">
|
||||
<div class="form-group" data-ng-class="{'has-error': badQuery}">
|
||||
<input id="search" type="text" class="form-control" data-ng-model="q" data-ng-class="{'loading': loading}" placeholder="Search for block, transaction or address" data-ng-submit="search()">
|
||||
</div>
|
||||
<div class="no_matching text-danger" data-ng-show="badQuery">No matching records found!</div>
|
||||
</form>
|
||||
<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">
|
||||
|
@ -37,15 +32,16 @@
|
|||
</div>
|
||||
·
|
||||
<span data-ng-init="getStatus('Info')">
|
||||
<strong>Conn</strong> {{info.connections}}
|
||||
<strong>{{'Conn'|translate}}</strong> {{info.connections}}
|
||||
</span> ·
|
||||
<strong>Height</strong> {{totalBlocks || info.blocks}}
|
||||
<strong>{{'Height'|translate}}</strong> {{totalBlocks || info.blocks}}
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" data-ng-click="openScannerModal()"><span class="glyphicon glyphicon-qrcode"></span> Scan</a>
|
||||
<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>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<span class="text-warning" data-ng-show="!loaded && !error">Loading...</span>
|
||||
<span class="text-warning" data-ng-show="!loaded && !error" translate>Loading...</span>
|
||||
<span class="text-danger" data-ng-show="error">{{error}}</span>
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<form id="search-form-mobile" data-ng-controller="SearchController" class="visible-xs" role="search" data-ng-submit="search()">
|
||||
<form id="search-form" data-ng-controller="SearchController" role="search" data-ng-submit="search()">
|
||||
<div class="form-group" data-ng-class="{'has-error': badQuery}">
|
||||
<input id="search" type="text" class="form-control" data-ng-model="q" data-ng-class="{'loading': loading}" placeholder="Search for block, transaction or address" data-ng-submit="search()">
|
||||
<input id="search" type="text" class="form-control" data-ng-model="q" data-ng-class="{'loading': loading}" placeholder="{{'Search for block, transaction or address'|translate}}" data-ng-submit="search()" focus="true">
|
||||
</div>
|
||||
<div class="no_matching text-danger" data-ng-show="badQuery">No matching records found!</div>
|
||||
<div class="no_matching text-danger" data-ng-show="badQuery" translate>No matching records found!</div>
|
||||
</form>
|
||||
|
|
|
@ -1,60 +1,58 @@
|
|||
<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 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>Latest Blocks</h1>
|
||||
<h1 translate>Latest Blocks</h1>
|
||||
<table class="table table-hover table-striped" style="table-layout: fixed">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Height</th>
|
||||
<th>Age</th>
|
||||
<th class="text-right"><span class="ellipsis">Transactions</span></th>
|
||||
<th class="text-right"><span class="ellipsis">Mined by</span></th>
|
||||
<th class="text-right">Size</th>
|
||||
<th translate>Height</th>
|
||||
<th translate>Age</th>
|
||||
<th class="text-right"><span class="ellipsis" translate>Transactions</span></th>
|
||||
<th class="text-right hidden-xs"><span class="ellipsis" translate>Mined by</span></th>
|
||||
<th class="text-right" translate>Size</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr data-ng-show="!blocks.length"><td colspan="4">Waiting for blocks...</td></tr>
|
||||
<tr data-ng-show="!blocks.length"><td colspan="4" translate>Waiting for blocks...</td></tr>
|
||||
<tr class="fader" data-ng-repeat='b in blocks'>
|
||||
<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>
|
||||
<td class="text-right"><a href="{{b.poolInfo.url}}" title="{{b.poolInfo.poolName}}" target="_blank" data-ng-show="b.poolInfo">{{b.poolInfo.poolName}}</a></td>
|
||||
<td class="text-right">{{b.size}} bytes</td>
|
||||
<td class="text-right hidden-xs"><a href="{{b.poolInfo.url}}" title="{{b.poolInfo.poolName}}" target="_blank" data-ng-show="b.poolInfo">{{b.poolInfo.poolName}}</a></td>
|
||||
<td class="text-right">{{b.size}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="btn-more">
|
||||
<a href="/blocks" class="btn btn-default">See all blocks</a>
|
||||
<a href="blocks" class="btn btn-default" translate>See all blocks</a>
|
||||
</div>
|
||||
|
||||
<h2>Latest Transactions</h2>
|
||||
<h2 translate>Latest Transactions</h2>
|
||||
|
||||
<table class="table table-hover table-striped" style="table-layout: fixed;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Hash</th>
|
||||
<th class="text-right">Size</th>
|
||||
<th class="text-right">Value Out</th>
|
||||
<th class="text-right" translate>Value Out</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr data-ng-show="!txs.length"><td colspan="3">Waiting for transactions...</td></tr>
|
||||
<tr data-ng-show="!txs.length"><td colspan="3" translate>Waiting for transactions...</td></tr>
|
||||
<tr class="fader" data-ng-repeat='tx in txs'>
|
||||
<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">{{tx.size}} bytes</span></td>
|
||||
<td class="text-right"><span class="ellipsis">{{tx.valueOut}} BTC</span></td>
|
||||
<td class="text-right"><span class="ellipsis">{{$root.currency.getConvertion(tx.valueOut)}}</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -62,15 +60,14 @@
|
|||
</div>
|
||||
|
||||
<div class="col-xs-12 col-md-4 col-gray">
|
||||
<h2> About </h2>
|
||||
<p><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><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>
|
||||
<h2 translate>About</h2>
|
||||
<p translate><strong>insight</strong> is an <a href="https://insight.is/"
|
||||
target="_blank">open-source Zcash 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 zcashd RPC. Check out the <a href="https://github.com/zcash-hackworks/insight-ui-zcash" 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/zcash/zcash/issues" target="_blank">github issue tracker</a>.</p>
|
||||
<p data-ng-if='currency.testnet'><strong>This explorer is currently showing testnet Zcash!</strong></p>
|
||||
<div id="powered" class="row">
|
||||
<div class="powered-text">
|
||||
<small class="text-muted">Powered by</small>
|
||||
<small class="text-muted" translate>Powered by</small>
|
||||
</div>
|
||||
<a href="http://bitcore.io" target="_blank" class="bitcore" title="Bitcore"></a>
|
||||
<a href="http://angularjs.org" target="_blank" class="angularjs" title="AngularJS"></a>
|
||||
|
|
|
@ -0,0 +1,81 @@
|
|||
<section data-ng-controller="VerifyMessageController">
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
<span translate>Verify signed message</span>
|
||||
</h1>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-md-8">
|
||||
<form class="form-horizontal" role="form">
|
||||
<div class="form-group">
|
||||
<label for="verify-message-address" class="col-sm-2 control-label" translate>
|
||||
Address
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" id="verify-message-address"
|
||||
data-ng-model="message.address">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="verify-message-signature" class="col-sm-2 control-label" translate>
|
||||
Signature
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" id="verify-message-signature"
|
||||
data-ng-model="message.signature">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="verify-message-message" class="col-sm-2 control-label" translate>
|
||||
Message
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea class="form-control" id="verify-message-message"
|
||||
data-ng-model="message.message" rows="5"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<button class="btn btn-default" translate
|
||||
data-ng-click="verify()" data-ng-disabled="!verifiable()">
|
||||
Verify
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="row">
|
||||
<div data-ng-hide="verification.status == 'unverified'"
|
||||
class="col-sm-offset-2 col-sm-10">
|
||||
<div ng-show="verification.status == 'loading'" translate>
|
||||
Loading...
|
||||
</div>
|
||||
<div ng-show="verification.status == 'verified' && verification.result"
|
||||
class="alert alert-success" translate>
|
||||
The message is verifiably from {{verification.address}}.
|
||||
</div>
|
||||
<div ng-show="verification.status == 'verified' && !verification.result"
|
||||
class="alert alert-danger" translate>
|
||||
The message failed to verify.
|
||||
</div>
|
||||
<div ng-show="verification.status == 'error'"
|
||||
class="alert alert-warning">
|
||||
<p translate>An error occured in the verification process.</p>
|
||||
<p ng-show="error">
|
||||
<strong translate>Error message:</strong>
|
||||
{{verification.error}}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-4 col-gray">
|
||||
<p translate>
|
||||
Zcash 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 Zcash address.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
|
@ -1 +1 @@
|
|||
<div class="text-center">Redirecting...</div>
|
||||
<div class="text-center" translate>Redirecting...</div>
|
||||
|
|
|
@ -1,28 +1,28 @@
|
|||
<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>
|
||||
Application Status
|
||||
</h1>
|
||||
<h1 translate>Application Status</h1>
|
||||
</div>
|
||||
<div id="status" class="row">
|
||||
|
||||
<div class="col-xs-12 col-md-8">
|
||||
<h2>Sync Status</h2>
|
||||
<h2 translate>Sync Status</h2>
|
||||
<table class="table" data-ng-controller="StatusController" data-ng-init="getSync()">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Sync Progress</td>
|
||||
<td translate>Sync Progress</td>
|
||||
<td>
|
||||
<div class="progress">
|
||||
<div class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style="width: {{ sync.syncPercentage}}%">
|
||||
<span data-ng-show="sync.syncPercentage>0">{{sync.syncPercentage}}% Complete</span>
|
||||
<span data-ng-show="sync.syncPercentage>0">{{sync.syncPercentage}}%
|
||||
<span translate>Complete</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Current Sync Status</td>
|
||||
<td translate>Current Sync Status</td>
|
||||
<td class="text-right">
|
||||
<span data-ng-show="!sync.error">{{sync.status}}</span>
|
||||
<span class="text-danger" data-ng-show="sync.error">
|
||||
|
@ -32,129 +32,88 @@
|
|||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Start Date</td>
|
||||
<td translate>Start Date</td>
|
||||
<td class="text-right"><time title="{{sync.startTs | date:'medium'}}">{{humanSince(sync.startTs)}}</time></td>
|
||||
</tr>
|
||||
<tr data-ng-show="sync.endTs">
|
||||
<td>Finish Date</td>
|
||||
<td translate>Finish Date</td>
|
||||
<td class="text-right"><time title="{{sync.startTs | date:'medium'}}" >{{humanSince(sync.endTs)}}</time></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Initial Block Chain Height</td>
|
||||
<td translate>Initial Block Chain Height</td>
|
||||
<td class="text-right">{{sync.blockChainHeight}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Synced Blocks</td>
|
||||
<td translate>Synced Blocks</td>
|
||||
<td class="text-right">{{sync.syncedBlocks}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Skipped Blocks (previously synced)</td>
|
||||
<td translate>Skipped Blocks (previously synced)</td>
|
||||
<td class="text-right">{{sync.skippedBlocks}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sync Type</td>
|
||||
<td translate>Sync Type</td>
|
||||
<td class="text-right">{{sync.type}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>Last Block</h2>
|
||||
<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>Last Block Hash (Bitcoind)</td>
|
||||
<td class="text-right ellipsis"><a href="/block/{{lastblockhash}}">{{lastblockhash}}</a></td>
|
||||
<td translate>Last Block Hash (Zcashd)</td>
|
||||
<td class="text-right ellipsis"><a href="block/{{lastblockhash}}">{{lastblockhash}}</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Current Blockchain Tip (insight)</td>
|
||||
<td class="text-right ellipsis"><a href="/block/{{syncTipHash}}">{{syncTipHash}}</a></td>
|
||||
<td translate>Current Blockchain Tip (insight)</td>
|
||||
<td class="text-right ellipsis"><a href="block/{{syncTipHash}}">{{syncTipHash}}</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>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">
|
||||
Show Transaction Output data
|
||||
<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>Height</td>
|
||||
<td class="text-right"><a href="/block-index/{{txoutsetinfo.height}}">{{txoutsetinfo.height}}</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Best Block</td>
|
||||
<td class="text-right ellipsis"><a href="/block/{{txoutsetinfo.bestblock}}">{{txoutsetinfo.bestblock}}</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Transactions</td>
|
||||
<td class="text-right"> {{txoutsetinfo.transactions}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Transaction Outputs</td>
|
||||
<td class="text-right">{{txoutsetinfo.txouts}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bytes Serialized</td>
|
||||
<td class="text-right">{{txoutsetinfo.bytes_serialized}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hash Serialized</td>
|
||||
<td class="text-right ellipsis">{{txoutsetinfo.hash_serialized}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>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>Bitcoin node information</h2>
|
||||
<h2 translate>Zcash 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>Version</td>
|
||||
<td translate>Version</td>
|
||||
<td class="text-right">{{info.version}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Protocol version</td>
|
||||
<td translate>Protocol version</td>
|
||||
<td class="text-right">{{info.protocolversion}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Blocks</td>
|
||||
<td class="text-right"><a href="/block-index/{{info.blocks}}">{{info.blocks}}</a></td>
|
||||
<td translate>Blocks</td>
|
||||
<td class="text-right"><a href="block-index/{{info.blocks}}">{{info.blocks}}</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Time Offset</td>
|
||||
<td translate>Time Offset</td>
|
||||
<td class="text-right">{{info.timeoffset}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Connections to other nodes</td>
|
||||
<td translate>Connections to other nodes</td>
|
||||
<td class="text-right">{{info.connections}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Mining Difficulty</td>
|
||||
<td translate>Mining Difficulty</td>
|
||||
<td class="text-right">{{info.difficulty}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Testnet</td>
|
||||
<td class="text-right">{{info.testnet}}</td>
|
||||
<td translate>Network</td>
|
||||
<td class="text-right">{{info.network}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Proxy setting</td>
|
||||
<td translate>Proxy setting</td>
|
||||
<td class="text-right">{{info.proxy}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info Errors</td>
|
||||
<td translate>Info Errors</td>
|
||||
<td class="text-right">{{info.infoErrors}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
|
|
@ -1,15 +1,22 @@
|
|||
<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">
|
||||
<div class="col-md-8 text-left">
|
||||
<h3>Transaction</h3> {{tx.txid}}
|
||||
<span class="btn-copy" clip-copy="tx.txid"></span>
|
||||
<div class="col-md-6 col-lg-7 text-left">
|
||||
<h3 translate>Transaction</h3>
|
||||
<div class="ellipsis">
|
||||
<small>{{tx.txid}}</small>
|
||||
<span class="btn-copy" clip-copy="tx.txid"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<span data-ng-show="tx.confirmations" class="txvalues txvalues-success">{{tx.confirmations}} Confirmations</span>
|
||||
<span data-ng-show="!tx.confirmations" class="txvalues txvalues-danger">Unconfirmed Transaction!</span>
|
||||
<span class="txvalues txvalues-primary">{{$root.currency.getConvertion(tx.valueOut) || tx.valueOut + ' BTC' }}</span>
|
||||
<div class="col-md-6 col-lg-5 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)}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hide_snavbar">
|
||||
|
@ -19,53 +26,96 @@
|
|||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ng-cloak" data-ng-cloak data-ng-if="tx.txid">
|
||||
<h1>Transaction
|
||||
<div data-ng-if="tx.txid">
|
||||
<h1><span translate>Transaction</span>
|
||||
<small data-ng-show="from_vin || from_vout">
|
||||
<span data-ng-show="from_vin">Input</span>
|
||||
<span data-ng-show="from_vout">Output</span>
|
||||
<span data-ng-show="from_vin" translate>Input</span>
|
||||
<span data-ng-show="from_vout" translate>Output</span>
|
||||
<span>{{v_index}}</span>
|
||||
</small>
|
||||
</h1>
|
||||
<div class="progress progress-striped active" data-ng-if="!tx.txid">
|
||||
<div class="progress-bar progress-bar-info" style="width: 100%">
|
||||
<span>Loading Transaction Details...</span>
|
||||
<span translate>Loading Transaction Details</span> <span class="loader-gif"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div data-ng-if="tx.txid">
|
||||
<div class="well well-sm ellipsis">
|
||||
<strong>Transaction</strong>
|
||||
<strong translate>Transaction</strong>
|
||||
<span class="txid text-muted">{{tx.txid}}</span>
|
||||
<span class="btn-copy" clip-copy="tx.txid"></span>
|
||||
</div>
|
||||
<h2>Summary</h2>
|
||||
<h2 translate>Summary</h2>
|
||||
<table class="table" style="table-layout: fixed">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong> Size </strong></td>
|
||||
<td><strong translate>Size</strong></td>
|
||||
<td class="text-muted text-right">{{tx.size}} (bytes)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Received Time </strong></td>
|
||||
<td data-ng-show="tx.firstSeenTs" class="text-muted text-right">{{tx.firstSeenTs * 1000|date:'medium'}}</td>
|
||||
<td data-ng-show="!tx.firstSeenTs" class="text-muted text-right">N/A</td>
|
||||
<tr data-ng-show="tx.fees">
|
||||
<td><strong translate>Fee Rate</strong></td>
|
||||
<td class="text-muted text-right">{{$root.currency.getConvertion((tx.fees * 1000) / tx.size) + ' per kB'}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Mined Time </strong></td>
|
||||
<td><strong translate>Received Time</strong></td>
|
||||
<td data-ng-show="tx.time" class="text-muted text-right">{{tx.time * 1000|date:'medium'}}</td>
|
||||
<td data-ng-show="!tx.time" class="text-muted text-right">N/A</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong translate>Mined Time</strong></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>
|
||||
</div>
|
||||
<td data-ng-show="!tx.blockhash" class="text-muted text-right">Unconfirmed</td>
|
||||
</tr>
|
||||
<tr data-ng-show="tx.locktime">
|
||||
<td><strong>LockTime </strong></td>
|
||||
<td><strong>LockTime</strong></td>
|
||||
<td class="text-muted text-right">{{tx.locktime}}</td>
|
||||
</tr>
|
||||
|
||||
<!-- Overwinter START-->
|
||||
<tr data-ng-show="tx.version">
|
||||
<td><strong>Version</strong></td>
|
||||
<td class="text-muted text-right">{{tx.version}}</td>
|
||||
</tr>
|
||||
<tr data-ng-show="tx.fOverwintered">
|
||||
<td><strong>Overwintered</strong></td>
|
||||
<td class="text-muted text-right">{{tx.fOverwintered}}</td>
|
||||
</tr>
|
||||
<tr data-ng-show="tx.fOverwintered">
|
||||
<td><strong>VersionGroupId</strong></td>
|
||||
<td data-ng-show="tx.fOverwintered==true" class="text-muted text-right">
|
||||
0x{{tx.nVersionGroupId.toString(16).padStart(8, "0")}}
|
||||
</td>
|
||||
<td data-ng-show="tx.fOverwintered==false" class="text-muted text-right">N/A</td>
|
||||
</tr>
|
||||
<tr data-ng-show="tx.fOverwintered">
|
||||
<td><strong>Expiry Height</strong></td>
|
||||
<td class="text-muted text-right">{{tx.nExpiryHeight}}</td>
|
||||
</tr>
|
||||
<!-- Overwinter END -->
|
||||
|
||||
<tr data-ng-show="tx.isCoinBase">
|
||||
<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>
|
||||
<span class="ng-binding">{{tx.vin[0].coinbase}}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<h2>Details</h2>
|
||||
<div class="block-tx ng-cloak" data-ng-cloak data-ng-if="tx.txid">
|
||||
<div data-ng-include src="'/views/transaction/tx.html'"></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>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
<div class="alert alert-warning" data-ng-show="!txs[0].txid && !loading">There are not transactions involving this address.</div>
|
||||
<div class="alert alert-warning"
|
||||
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%">
|
||||
<span>Loading Transactions...</span>
|
||||
<span translate>Loading Transactions...</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,57 +1,260 @@
|
|||
<div class="line-bot row ng-cloak" data-ng-hide="!tx" data-ng-cloak>
|
||||
<div class="col-xs-12 col-md-8">
|
||||
<div class="h5 ellipsis">
|
||||
<a class="btn-expand m10h" href="#" title="Show/Hide items details" data-ng-click="itemsExpanded = !itemsExpanded">
|
||||
<div class="line-bot row" data-ng-hide="!tx">
|
||||
<div class="col-xs-7 col-md-8">
|
||||
<div class="ellipsis">
|
||||
<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 class="txid" href="/tx/{{tx.txid}}">{{tx.txid}}</a>
|
||||
<a href="tx/{{tx.txid}}">{{tx.txid}}</a>
|
||||
<span class="btn-copy" clip-copy="tx.txid"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-4 text-right">
|
||||
<div class="col-xs-5 col-md-4 text-right text-muted">
|
||||
<div data-ng-show="tx.firstSeenTs">
|
||||
first seen at
|
||||
<span translate>first seen at</span>
|
||||
<time>{{tx.firstSeenTs * 1000 | date:'medium'}}</time>
|
||||
</div>
|
||||
<div data-ng-show="tx.time && !tx.firstSeenTs">
|
||||
mined at
|
||||
<div data-ng-show="tx.blocktime && !tx.firstSeenTs">
|
||||
<span translate>mined</span>
|
||||
<time>{{tx.time * 1000 | date:'medium'}}</time>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row line-mid">
|
||||
<div class="col-md-5">
|
||||
<div class="row" data-ng-if="tx.isCoinBase">
|
||||
<div class="col-md-12 transaction-vin-vout" data-ng-repeat="vin in tx.vin">
|
||||
<div class="col-md-12">
|
||||
<div class="row" data-ng-if="!tx.bindingSig && (!tx.vjoinsplit || tx.vjoinsplit.length==0)">
|
||||
<div class="col-md-12 transaction-vin-vout">
|
||||
<div class="ellipsis">
|
||||
<span>No Inputs (Newly Generated Coins)</span>
|
||||
<span translate>No Shielded Spends and Outputs</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" data-ng-if="!tx.isCoinBase">
|
||||
<div class="row" data-ng-if="(tx.spendDescs && tx.spendDescs.length > 0) || (tx.outputDescs && tx.outputDescs.length > 0)">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-body transaction-vin-vout">
|
||||
<div class="col-md-3 col-xs-12">
|
||||
<div data-ng-if="tx.valueBalance < 0">
|
||||
<div class="pull-right btc-value">
|
||||
{{$root.currency.getConvertion(-tx.valueBalance)}}
|
||||
</div>
|
||||
<div class="ellipsis">
|
||||
<span>Public input</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-1 col-xs-12">
|
||||
<div class="hidden-xs hidden-sm text-center">
|
||||
<span class="glyphicon glyphicon-chevron-right text-muted"></span>
|
||||
</div>
|
||||
<div class="hidden-md hidden-lg text-center">
|
||||
<span class="glyphicon glyphicon-chevron-down text-muted"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-xs-12">
|
||||
<div class="ellipsis text-center">
|
||||
<span>Shielded Spends ({{tx.spendDescs.length}}) --> Shielded Outputs ({{tx.outputDescs.length}})</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-1 col-xs-12">
|
||||
<div class="hidden-xs hidden-sm text-center">
|
||||
<span class="glyphicon glyphicon-chevron-right text-muted"></span>
|
||||
</div>
|
||||
<div class="hidden-md hidden-lg text-center">
|
||||
<span class="glyphicon glyphicon-chevron-down text-muted"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3 col-xs-12">
|
||||
<div data-ng-if="tx.valueBalance > 0">
|
||||
<div class="pull-right btc-value">
|
||||
{{$root.currency.getConvertion(tx.valueBalance)}}
|
||||
</div>
|
||||
<div class="ellipsis">
|
||||
<span>Public output</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" data-ng-if="(!tx.vjoinsplit || tx.vjoinsplit.length == 0) && !tx.bindingSig">
|
||||
<div class="col-md-12 transaction-vin-vout">
|
||||
<div class="ellipsis">
|
||||
<span translate>No JoinSplits</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" data-ng-if="tx.vjoinsplit && tx.vjoinsplit.length != 0">
|
||||
|
||||
<!-- <<< Simple view -->
|
||||
<div data-ng-if="!itemsExpanded" data-ng-init="currentJSNoExpanded=0; sizeJSNoExpanded=5">
|
||||
<div class="panel panel-default" data-ng-repeat="vjs in tx.vjoinsplit| startFrom:currentJSNoExpanded*sizeJSNoExpanded | limitTo:sizeJSNoExpanded">
|
||||
<div class="panel-body transaction-vin-vout">
|
||||
<div class="col-md-3 col-xs-12">
|
||||
<div class="pull-right btc-value">
|
||||
{{$root.currency.getConvertion(vjs.vpub_old)}}
|
||||
</div>
|
||||
<div class="ellipsis">
|
||||
<span>Public input</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-1 col-xs-12">
|
||||
<div class="hidden-xs hidden-sm text-center">
|
||||
<span class="glyphicon glyphicon-chevron-right text-muted"></span>
|
||||
</div>
|
||||
<div class="hidden-md hidden-lg text-center">
|
||||
<span class="glyphicon glyphicon-chevron-down text-muted"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-xs-12">
|
||||
<div class="ellipsis text-center">
|
||||
<span>JoinSplit [{{vjs.n}}]</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-1 col-xs-12">
|
||||
<div class="hidden-xs hidden-sm text-center">
|
||||
<span class="glyphicon glyphicon-chevron-right text-muted"></span>
|
||||
</div>
|
||||
<div class="hidden-md hidden-lg text-center">
|
||||
<span class="glyphicon glyphicon-chevron-down text-muted"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3 col-xs-12">
|
||||
<div class="pull-right btc-value">
|
||||
{{$root.currency.getConvertion(vjs.vpub_new)}}
|
||||
</div>
|
||||
<div class="ellipsis">
|
||||
<span>Public output</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="showmore_collapse text-left" data-ng-show="tx.vjoinsplit.length > 5" data-ng-class="{ 'hidden': itemsExpanded}">
|
||||
<button type="button" class="btn btn-info btn-sm" ng-hide="sizeJSNoExpanded != tx.vjoinsplit.length" ng-click="currentJSNoExpanded=0; sizeJSNoExpanded=5"><i class="glyphicon glyphicon-chevron-up"></i>
|
||||
<span translate>Show less</span></button>
|
||||
<button type="button" class="btn btn-info btn-sm" ng-hide="currentJSNoExpanded >= tx.vjoinsplit.length/sizeJSNoExpanded - 1" ng-click="currentJSNoExpanded=0; sizeJSNoExpanded=tx.vjoinsplit.length"><i class="glyphicon glyphicon-chevron-down"></i>
|
||||
<span translate>Show more</span></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <<< Full view -->
|
||||
<div data-ng-if="itemsExpanded" data-ng-init="currentJSExpanded=0; sizeJSExpanded=(from_vjs) ? tx.vjoinsplit.length : 5; fromVjsCollapsed=(from_vjs)">
|
||||
<div data-ng-repeat="vjs in tx.vjoinsplit| startFrom:currentJSExpanded*sizeJSExpanded | limitTo:sizeJSExpanded" data-ng-if="fromVjsCollapsed ? v_index == vjs.n : 1">
|
||||
<div class="panel panel-default transaction-vin-vout">
|
||||
<div class="panel-body">
|
||||
<div class="col-md-3 col-xs-12">
|
||||
<div class="pull-right btc-value">
|
||||
{{$root.currency.getConvertion(vjs.vpub_old)}}
|
||||
</div>
|
||||
<div class="ellipsis">
|
||||
<span translate>Public input</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-1 col-xs-12">
|
||||
<div class="hidden-xs hidden-sm text-center">
|
||||
<span class="glyphicon glyphicon-chevron-right text-muted"></span>
|
||||
</div>
|
||||
<div class="hidden-md hidden-lg text-center">
|
||||
<span class="glyphicon glyphicon-chevron-down text-muted"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-xs-12">
|
||||
<div class="ellipsis text-center">
|
||||
<span>JoinSplit [{{vjs.n}}]</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-1 col-xs-12">
|
||||
<div class="hidden-xs hidden-sm text-center">
|
||||
<span class="glyphicon glyphicon-chevron-right text-muted"></span>
|
||||
</div>
|
||||
<div class="hidden-md hidden-lg text-center">
|
||||
<span class="glyphicon glyphicon-chevron-down text-muted"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3 col-xs-12">
|
||||
<div class="pull-right btc-value">
|
||||
{{$root.currency.getConvertion(vjs.vpub_new)}}
|
||||
</div>
|
||||
<div class="ellipsis">
|
||||
<span translate>Public output</span>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- END OF PANEL BODY -->
|
||||
</div> <!-- END OF PANEL-DEFAULT -->
|
||||
</div>
|
||||
<div class="text-left">
|
||||
<button type="button" class="btn btn-default btn-sm" data-ng-show="(from_vjs) && tx.vjoinsplit.length > 1" data-ng-disabled="fromVjsCollapsed" data-ng-click="currentJSExpanded=0; sizeJSExpanded=tx.vjoinsplit.length;fromVjsCollapsed=1">
|
||||
<span translate>Show input</span> #{{ v_index }}</button>
|
||||
<button type="button" class="btn btn-default btn-sm" data-ng-show="(from_vjs) && tx.vjoinsplit.length > 1" data-ng-disabled="!fromVinCollapsed" data-ng-click="currentJSExpanded=0; sizeJSExpanded=tx.vjoinsplit.length;fromVjsCollapsed=0">
|
||||
<span translate>Show all</span></button>
|
||||
</div>
|
||||
<div class="showmore_collapse text-left" data-ng-show="tx.vjoinsplit.length > 5 && !fromVjsCollapsed" data-ng-class="{ 'hidden': !itemsExpanded}">
|
||||
<button type="button" class="btn btn-info btn-sm" ng-hide="sizeJSExpanded != tx.vjoinsplit.length" ng-click="currentJSExpanded=0; sizeJSExpanded=5"><i class="glyphicon glyphicon-chevron-up"></i>
|
||||
<span translate>Show less</span></button>
|
||||
<button type="button" class="btn btn-info btn-sm" ng-hide="currentJSExpanded >= tx.vjoinsplit.length/sizeJSExpanded - 1" ng-click="currentJSExpanded=0; sizeJSExpanded=tx.vjoinsplit.length"><i class="glyphicon glyphicon-chevron-down"></i>
|
||||
<span translate>Show more</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="hidden-xs hidden-sm text-center">
|
||||
<span class="lead glyphicon glyphicon-chevron-up text-muted"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="hidden-xs hidden-sm text-center">
|
||||
<span class="lead glyphicon glyphicon-chevron-down text-muted"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row line-mid">
|
||||
<div class="col-md-5">
|
||||
<div class="row" data-ng-if="tx.vin.length == 0">
|
||||
<div class="col-md-12 transaction-vin-vout">
|
||||
<div class="ellipsis">
|
||||
<span translate>No Inputs</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" data-ng-if="tx.vin.length != 0 && tx.isCoinBase">
|
||||
<div class="col-md-12 transaction-vin-vout" data-ng-repeat="vin in tx.vin">
|
||||
<div class="ellipsis">
|
||||
<span translate>No Inputs (Newly Generated Coins)</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" data-ng-if="tx.vin.length != 0 && !tx.isCoinBase">
|
||||
|
||||
<!-- <<< Simple view -->
|
||||
<div data-ng-if="!itemsExpanded" data-ng-init="currentInNoExpanded=0; sizeInNoExpanded=5">
|
||||
<div class="panel panel-default" data-ng-repeat="vin in tx.vinSimple| startFrom:currentInNoExpanded*sizeInNoExpanded | limitTo:sizeInNoExpanded">
|
||||
<div class="panel-body transaction-vin-vout">
|
||||
<div class="pull-right btc-value" data-ng-class="{'text-danger': $root.currentAddr == vin.addr}">
|
||||
{{$root.currency.getConvertion(vin.value) || vin.value + ' BTC'}}
|
||||
{{$root.currency.getConvertion(vin.value)}}
|
||||
</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 Zcash 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"> <span class="glyphicon glyphicon-warning-sign"></span> Incoherence in levelDB detected, please resync</div>
|
||||
<div data-ng-show="vin.doubleSpentTxID" class="text-danger"> <span class="glyphicon glyphicon-warning-sign"></span> Double spent attempt detected. From tx:
|
||||
<a href="/tx/{{vin.doubleSpentTxID}}">{{vin.doubleSpentTxID}},{{vin.doubleSpentIndex}}</a>
|
||||
<div data-ng-show="vin.dbError" class="text-danger">
|
||||
<span class="glyphicon glyphicon-warning-sign"></span>
|
||||
<span translate>Incoherence in levelDB detected:</span> {{vin.dbError}}
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="showmore_collapse text-right" data-ng-show="tx.vinSimple.length > 5" data-ng-class="{ 'hidden': itemsExpanded}">
|
||||
<a href="#" ng-hide="sizeInNoExpanded != tx.vinSimple.length" ng-click="currentInNoExpanded=0; sizeInNoExpanded=5"><small>...less</small></a>
|
||||
<a href="#" ng-hide="currentInNoExpanded >= tx.vinSimple.length/sizeInNoExpanded - 1" ng-click="currentInNoExpanded=0; sizeInNoExpanded=tx.vinSimple.length"><small>more...</small></a>
|
||||
<div class="showmore_collapse text-left" data-ng-show="tx.vinSimple.length > 5" data-ng-class="{ 'hidden': itemsExpanded}">
|
||||
<button type="button" class="btn btn-info btn-sm" ng-hide="sizeInNoExpanded != tx.vinSimple.length" ng-click="currentInNoExpanded=0; sizeInNoExpanded=5"><i class="glyphicon glyphicon-chevron-up"></i>
|
||||
<span translate>Show less</span></button>
|
||||
<button type="button" class="btn btn-info btn-sm" ng-hide="currentInNoExpanded >= tx.vinSimple.length/sizeInNoExpanded - 1" ng-click="currentInNoExpanded=0; sizeInNoExpanded=tx.vinSimple.length"><i class="glyphicon glyphicon-chevron-down"></i>
|
||||
<span translate>Show more</span></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -61,28 +264,30 @@
|
|||
<div class="panel panel-default transaction-vin-vout">
|
||||
<div class="panel-body">
|
||||
<div class="pull-right btc-value">
|
||||
{{$root.currency.getConvertion(vin.value) || vin.value + ' BTC'}}
|
||||
{{$root.currency.getConvertion(vin.value)}}
|
||||
</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> (Input unconfirmed)
|
||||
<span class="glyphicon glyphicon-warning-sign"></span>
|
||||
<span translate>(Input unconfirmed)</span>
|
||||
</div>
|
||||
<div data-ng-show="vin.dbError" class="text-danger">
|
||||
<span class="glyphicon glyphicon-warning-sign"></span>
|
||||
Incoherence in levelDB detected, please resync
|
||||
<span translate>Incoherence in levelDB detected:</span> {{vin.dbError}}
|
||||
</div>
|
||||
<div data-ng-show="vin.doubleSpentTxID" class="text-danger">
|
||||
<span class="glyphicon glyphicon-warning-sign"></span>
|
||||
Double spent attempt detected. From tx:
|
||||
<a href="/tx/{{<vin class=""></vin>doubleSpentTxID}}">{{vin.doubleSpentTxID}},{{vin.doubleSpentIndex}}</a>
|
||||
<span translate>Double spent attempt detected. From tx:</span>
|
||||
<a href="tx/{{<vin class=""></vin>doubleSpentTxID}}">{{vin.doubleSpentTxID}},{{vin.doubleSpentIndex}}</a>
|
||||
</div>
|
||||
</div> <!-- END OF PANEL BODY -->
|
||||
</div> <!-- END OF PANEL-DEFAULT -->
|
||||
<div class="small" style="margin-left:0.7em; word-wrap:break-word;" data-ng-class="{true: 'v_highlight', false: ''}[from_vin == true && v_index == vin.n]" >
|
||||
<p><strong>Confirmations:</strong> {{vin.confirmations}}</p>
|
||||
<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>
|
||||
|
@ -91,12 +296,16 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="text-left">
|
||||
<a href="#" data-ng-show="(from_vin) && tx.vin.length > 1" data-ng-class="{'text-muted': fromVinCollapsed}" data-ng-click="currentInExpanded=0; sizeInExpanded=tx.vin.length;fromVinCollapsed=1"><small>show input {{ v_index }}</small></a>
|
||||
<a href="#" data-ng-show="(from_vin) && tx.vin.length > 1" data-ng-class="{'text-muted': !fromVinCollapsed}" data-ng-click="currentInExpanded=0; sizeInExpanded=tx.vin.length;fromVinCollapsed=0"><small>show all</small></a>
|
||||
<button type="button" class="btn btn-default btn-sm" data-ng-show="(from_vin) && tx.vin.length > 1" data-ng-disabled="fromVinCollapsed" data-ng-click="currentInExpanded=0; sizeInExpanded=tx.vin.length;fromVinCollapsed=1">
|
||||
<span translate>Show input</span> #{{ v_index }}</button>
|
||||
<button type="button" class="btn btn-default btn-sm" data-ng-show="(from_vin) && tx.vin.length > 1" data-ng-disabled="!fromVinCollapsed" data-ng-click="currentInExpanded=0; sizeInExpanded=tx.vin.length;fromVinCollapsed=0">
|
||||
<span translate>Show all</span></button>
|
||||
</div>
|
||||
<div class="showmore_collapse text-right" data-ng-show="tx.vin.length > 5 && !fromVinCollapsed" data-ng-class="{ 'hidden': !itemsExpanded}">
|
||||
<a href="#" ng-hide="sizeInExpanded != tx.vin.length" ng-click="currentInExpanded=0; sizeInExpanded=5"><small>...less</small></a>
|
||||
<a href="#" data-ng-class="{true: 'v_highlight_more', false: ''}[from_vin == true && v_index > 5]" ng-hide="currentInExpanded >= tx.vin.length/sizeInExpanded - 1" ng-click="currentInExpanded=0; sizeInExpanded=tx.vin.length"><small>more...</small></a>
|
||||
<div class="showmore_collapse text-left" data-ng-show="tx.vin.length > 5 && !fromVinCollapsed" data-ng-class="{ 'hidden': !itemsExpanded}">
|
||||
<button type="button" class="btn btn-info btn-sm" ng-hide="sizeInExpanded != tx.vin.length" ng-click="currentInExpanded=0; sizeInExpanded=5"><i class="glyphicon glyphicon-chevron-up"></i>
|
||||
<span translate>Show less</span></button>
|
||||
<button type="button" class="btn btn-info btn-sm" ng-hide="currentInExpanded >= tx.vin.length/sizeInExpanded - 1" ng-click="currentInExpanded=0; sizeInExpanded=tx.vin.length"><i class="glyphicon glyphicon-chevron-down"></i>
|
||||
<span translate>Show more</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -110,29 +319,38 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<div class="row" data-ng-if="tx.vout.length == 0">
|
||||
<div class="col-md-12 transaction-vin-vout">
|
||||
<div class="ellipsis">
|
||||
<span translate>No Outputs</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" data-ng-if="tx.vout.length != 0">
|
||||
<!-- Simple view >>> -->
|
||||
<div data-ng-if="!itemsExpanded" data-ng-init="currentOutNoExpanded=0; sizeOutNoExpanded=5">
|
||||
<div data-ng-repeat="vout in tx.voutSimple| startFrom:currentOutNoExpanded*sizeOutNoExpanded | limitTo:sizeOutNoExpanded">
|
||||
<div class="transaction-vin-vout panel panel-default">
|
||||
<div class="panel-body">
|
||||
<div class="pull-right btc-value" data-ng-class="{'text-success': $root.currentAddr == vout.addr}">
|
||||
{{$root.currency.getConvertion(vout.value) || vout.value + ' BTC' }}
|
||||
{{$root.currency.getConvertion(vout.value)}}
|
||||
<span class="text-danger" data-ng-show="vout.isSpent" tooltip="Output is spent" tooltip-placement="left">(S)</span>
|
||||
<span class="text-success" data-ng-show="!vout.isSpent" tooltip="Output is unspent" tooltip-placement="left">(U)</span>
|
||||
</div>
|
||||
|
||||
<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 Zcash 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>
|
||||
</div>
|
||||
<div class="showmore_collapse text-right" data-ng-show="tx.voutSimple.length > 5" data-ng-class="{ 'hidden': itemsExpanded}">
|
||||
<a href="#" ng-hide="sizeOutNoExpanded != tx.voutSimple.length" ng-click="currentOutNoExpanded=0; sizeOutNoExpanded=5"><small>...less</small></a>
|
||||
<a href="#" ng-hide="currentOutNoExpanded >= tx.voutSimple.length/sizeOutNoExpanded - 1" ng-click="currentOutNoExpanded=0; sizeOutNoExpanded=tx.voutSimple.length"><small>more...</small></a>
|
||||
<div class="showmore_collapse text-left" data-ng-show="tx.voutSimple.length > 5" data-ng-class="{ 'hidden': itemsExpanded}">
|
||||
<button type="button" class="btn btn-info btn-sm" ng-hide="sizeOutNoExpanded != tx.voutSimple.length" ng-click="currentOutNoExpanded=0; sizeOutNoExpanded=5"><i class="glyphicon glyphicon-chevron-up"></i>
|
||||
<span translate>Show less</span></button>
|
||||
<button type="button" class="btn btn-info btn-sm" ng-hide="currentOutNoExpanded >= tx.voutSimple.length/sizeOutNoExpanded - 1" ng-click="currentOutNoExpanded=0; sizeOutNoExpanded=tx.voutSimple.length"><i class="glyphicon glyphicon-chevron-down"></i>
|
||||
<span translate>Show more</span></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -142,19 +360,19 @@
|
|||
<div class="panel panel-default transaction-vin-vout">
|
||||
<div class="panel-body">
|
||||
<div class="pull-right btc-value">
|
||||
<spam>{{$root.currency.getConvertion(vout.value) || vout.value + ' BTC'}}
|
||||
<span>{{$root.currency.getConvertion(vout.value)}}
|
||||
<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>
|
||||
</spam>
|
||||
<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>
|
||||
<div style="padding-left: 0.7em; padding-bottom: 2em; word-wrap:break-word" data-ng-class="{true: 'v_highlight', false: ''}[from_vout == true && v_index == vout.n]">
|
||||
<p class="small">
|
||||
<strong>Type</strong>
|
||||
<strong translate>Type</strong>
|
||||
<span class="text-muted">{{vout.scriptPubKey.type}}</span>
|
||||
</p>
|
||||
<div class="small">
|
||||
|
@ -165,30 +383,32 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="text-right">
|
||||
<a href="#" class="text-right" data-ng-show="(from_vout) && tx.vout.length > 1" data-ng-class="{'text-muted': fromVoutCollapsed}" data-ng-click="currentOutExpanded=0; sizeOutExpanded=tx.vout.length;fromVoutCollapsed=1"><small>show output {{ v_index }}</small></a>
|
||||
<a href="#" class="text-right" data-ng-show="(from_vout) && tx.vout.length > 1" data-ng-class="{'text-muted': !fromVoutCollapsed}" data-ng-click="currentOutExpanded=0; sizeOutExpanded=tx.vout.length;fromVoutCollapsed=0"><small>show all</small></a>
|
||||
<button type="button" class="btn btn-default btn-sm" data-ng-show="(from_vout) && tx.vout.length > 1" data-ng-disabled="fromVoutCollapsed" data-ng-click="currentOutExpanded=0; sizeOutExpanded=tx.vout.length;fromVoutCollapsed=1">Show output #{{ v_index }}</button>
|
||||
<button type="button" class="btn btn-default btn-sm" data-ng-show="(from_vout) && tx.vout.length > 1" data-ng-disabled="!fromVoutCollapsed" data-ng-click="currentOutExpanded=0; sizeOutExpanded=tx.vout.length;fromVoutCollapsed=0">Show all</button>
|
||||
</div>
|
||||
<div class="showmore_collapse text-right" data-ng-show="tx.vout.length > 5 && !fromVoutCollapsed" data-ng-class="{ 'hidden': !itemsExpanded}">
|
||||
<a href="#" ng-hide="sizeOutExpanded != tx.vout.length" ng-click="currentOutExpanded=0; sizeOutExpanded=5"><small>...less</small></a>
|
||||
<a href="#" data-ng-class="{true: 'v_highlight_more', false: ''}[from_vout == true && v_index > 5]" ng-hide="currentOutExpanded >= tx.vout.length/sizeOutExpanded - 1" ng-click="currentOutExpanded=0; sizeOutExpanded=tx.vout.length"><small>more...</small></a>
|
||||
<div class="showmore_collapse text-left" data-ng-show="tx.vout.length > 5 && !fromVoutCollapsed" data-ng-class="{ 'hidden': !itemsExpanded}">
|
||||
<button type="button" class="btn btn-info btn-sm" ng-hide="sizeOutExpanded != tx.vout.length" ng-click="currentOutExpanded=0; sizeOutExpanded=5"><i class="glyphicon glyphicon-chevron-up"></i>Show less</button>
|
||||
<button type="button" class="btn btn-info btn-sm" ng-hide="currentOutExpanded >= tx.vout.length/sizeOutExpanded - 1" ng-click="currentOutExpanded=0; sizeOutExpanded=tx.vout.length"><i class="glyphicon glyphicon-chevron-down"></i> Show more</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="well well-sm bgwhite ellipsis" data-ng-if="itemsExpanded && !block.hash">
|
||||
<strong>BlockHash</strong> <a class="text-muted" href="/block/{{tx.blockhash}}">{{tx.blockhash}}</a>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<div class="line-top row ng-cloak" data-ng-hide="!tx" data-ng-cloak>
|
||||
<div class="col-xs-12 col-sm-4 col-md-4">
|
||||
<span data-ng-show="!tx.isCoinBase && !isNaN(parseFloat(tx.fees))" class="txvalues txvalues-default">Fees: {{$root.currency.getConvertion(tx.fees) || tx.fees + 'BTC'}} </span>
|
||||
<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)}} </span>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-8 col-md-8 text-right">
|
||||
<span data-ng-show="tx.confirmations" class="txvalues txvalues-success">{{tx.confirmations}} Confirmations</span>
|
||||
<span data-ng-show="!tx.confirmations" class="txvalues txvalues-danger">Unconfirmed Transaction!</span>
|
||||
<span class="txvalues txvalues-primary">{{$root.currency.getConvertion(tx.valueOut) || tx.valueOut + ' BTC' }}</span>
|
||||
<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)}}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
<section data-ng-controller="SendRawTransactionController">
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
<span translate>Broadcast Raw Transaction</span>
|
||||
</h1>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-md-8">
|
||||
<form name="txForm" class="form-horizontal" role="form" novalidate>
|
||||
<div class="form-group"
|
||||
ng-class="{ 'has-error': txForm.rawData.$error.pattern }">
|
||||
<label for="transaction-rawdata" class="col-sm-2 control-label" translate>
|
||||
Raw transaction data
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea class="form-control" id="transaction-rawdata" name="rawData"
|
||||
data-ng-model="transaction" data-ng-pattern="/^[0-9A-Fa-f]+$/"
|
||||
rows="10" required></textarea>
|
||||
<span class="help-block" ng-show="txForm.rawData.$error.pattern" translate>
|
||||
Raw transaction data must be a valid hexadecimal string.
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<button class="btn btn-default" translate
|
||||
data-ng-click="send()" data-ng-disabled="!txForm.$valid">
|
||||
Send transaction
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="row">
|
||||
<div data-ng-hide="status == 'ready'"
|
||||
class="col-sm-offset-2 col-sm-10">
|
||||
<div ng-show="status == 'loading'" translate>
|
||||
Loading...
|
||||
</div>
|
||||
<div ng-show="status == 'sent'" class="alert alert-success" translate>
|
||||
Transaction succesfully broadcast.<br>Transaction id: {{txid}}
|
||||
</div>
|
||||
<div ng-show="status == 'error'" class="alert alert-warning" translate>
|
||||
An error occured:<br>{{error}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</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 Zcash network.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
Loading…
Reference in New Issue