Refonte Explorateur

This commit is contained in:
2019-12-21 19:54:39 +01:00
parent 315a82c2fb
commit 8621260f26
5 changed files with 469 additions and 113 deletions

View File

@@ -1,13 +1,11 @@
blockchainExplorer = function(){
// Init array
var liste_blocks = null;
var flag_nav = true;
var classes = ['bg-grey-even','bg-grey-odd'];
var cur_class = 0;
var cur_height = [];
var cur_methode = 'hasard';
var isInitSelector = false;
var _known_blocks = null;
var _liste_blocks = null;
var _classes = ['bg-grey-even','bg-grey-odd'];
var _cur_class = 0;
var _cur_methode = 'hasard';
var _mode = 1;
function _precisionRound(number) {
@@ -19,8 +17,8 @@ blockchainExplorer = function(){
function _getblockNameFromHash(hash)
{
var retour = '';
if (liste_blocks != null)
liste_blocks.forEach(function(item){
if (_liste_blocks != null)
_liste_blocks.forEach(function(item){
if (hash == item.hash) retour = item.name;
});
return retour;
@@ -29,7 +27,7 @@ blockchainExplorer = function(){
function _getblocHashFromName(name)
{
var retour = '';
liste_blocks.forEach(function(item){
_liste_blocks.forEach(function(item){
if (name == item.name) retour = item.hash;
});
return retour;
@@ -40,9 +38,7 @@ blockchainExplorer = function(){
var contenu = '';
var downloadingImage = new Image();
cur_height.push(block.height);
cur_class = 1 - cur_class;
_cur_class = 1 - _cur_class;
blockName = _getblockNameFromHash(block.hash);
if (blockName != '') blockName = ' ( '+blockName+' )';
@@ -102,8 +98,9 @@ blockchainExplorer = function(){
if (_mode==1) div0.style.opacity=0.3;
flag_nav = true;
};
downloadingImage.src = 'images/block_image.php?methode='+cur_methode+'&hash='+block.hash;
downloadingImage.src = 'images/block_image.php?methode='+_cur_methode+'&hash='+block.hash;
return true;
}
@@ -112,7 +109,7 @@ blockchainExplorer = function(){
{
var contenu = '';
contenu += '<div id="block_'+block_height+'" class="container-fluid '+classes[cur_class]+'">';
contenu += '<div id="block_'+block_height+'" class="container-fluid '+_classes[_cur_class]+'">';
contenu += ' <div class="row">';
contenu += '###BLOCK_DESC###';
contenu += ' </div>';
@@ -123,6 +120,7 @@ blockchainExplorer = function(){
function _addDivForBlock(block_height, onTop = false)
{
var tmp;
var contenu = _addDiv(block_height);
var block_desc = '';
@@ -130,12 +128,13 @@ blockchainExplorer = function(){
block_desc += ' <h2>BLOCK '+block_height+' ...</h2>';
block_desc += ' </div>';
tmp = contenu.replace('###BLOCK_DESC###',block_desc)
if (onTop) {
tmp = contenu.replace('###BLOCK_DESC###',block_desc)
tmp += $('#blockchain').html();
$('#blockchain').html(tmp);
} else {
$('#blockchain').append(contenu.replace('###BLOCK_DESC###',block_desc));
$('#blockchain').append(tmp);
}
return true;
}
@@ -145,23 +144,6 @@ blockchainExplorer = function(){
return _addDivForBlock('void');
}
function _toggleForwardBtn()
{
if (cur_height.length < 3)
{
$('#fast_forward_btn').removeClass('btn-success');
$('#fast_forward_btn').addClass('btn-secondary');
$('#btn-forward').removeClass('btn-info');
$('#btn-forward').addClass('btn-secondary');
} else {
$('#fast_forward_btn').removeClass('btn-secondary');
$('#fast_forward_btn').addClass('btn-success');
$('#btn-forward').removeClass('btn-secondary');
$('#btn-forward').addClass('btn-info');
}
return true;
}
function _gotoBlock(block_name)
{
$(document).scrollTop( $("#explorer").offset().top );
@@ -184,7 +166,7 @@ blockchainExplorer = function(){
return false;
}
liste_blocks['PREVIOUS'] = liste_blocks['BLOCK_'+cur_height[cur_height.length-1]];
_liste_blocks['PREVIOUS'] = _liste_blocks['BLOCK_'+cur_height[cur_height.length-1]];
cur_height.pop();
_toggleForwardBtn();
@@ -192,7 +174,7 @@ blockchainExplorer = function(){
$('#block_'+cur_height[cur_height.length-2]).slideDown(400, function() {
// Animation complete.
$('#blockchain').children('div:last').remove();
cur_class = 1 - cur_class;
_cur_class = 1 - _cur_class;
});
} else {
@@ -203,10 +185,10 @@ blockchainExplorer = function(){
if (cur_height.length > 1) $('#block_'+cur_height[cur_height.length-2]).slideUp();
block_hash = '';
if (block_name != 'LAST') block_hash = '?block_hash='+liste_blocks[block_name];
if (block_name != 'LAST') block_hash = '?block_hash='+_liste_blocks[block_name];
$.getJSON('data/getBlockInfo.php'+block_hash, function( data ) {
liste_blocks['PREVIOUS'] = data.prev;
liste_blocks['BLOCK_'+data.height] = data.hash;
_liste_blocks['PREVIOUS'] = data.prev;
_liste_blocks['BLOCK_'+data.height] = data.hash;
_addInfoForBlock(data);
_toggleForwardBtn();
@@ -216,67 +198,63 @@ blockchainExplorer = function(){
return true;
}
function _ajouterTopBlock(data)
function _addTopBlock(data, flag = false)
{
// Bloquer la navigation pendant le calcul
if (!flag_nav) return false;
flag_nav = false;
if (flag) return "ajouterTopBlock";
// Maintenir la liste des blocks
_liste_blocks['TOP'] = data.hash;
_liste_blocks['BLOCK_'+data.height] = data.hash;
// Ajouter un div
_addDivForBlock(data.height,true);
// Mettre les infos dans le div
_addInfoForBlock(data);
// Décaler le tableau cur_height par le haut
cur_height.unshift(data.height);
// Maintenir la liste des blocks
liste_blocks['BLOCK_'+data.height] = data.hash;
_addInfoForBlock(data);
}
function _ajouterPreviousBlock()
{
// Bloquer la navigation pendant le calcul
if (!flag_nav) return false;
flag_nav = false;
// Ajouter un div
_addDivForBlock(cur_height[cur_height.length-1] - 1);
// Mettre les infos du
block_hash = '?block_hash='+liste_blocks['PREVIOUS'];
function _addBottomBlock()
{
// Mettre les infos du block
block_hash = '?block_hash='+_liste_blocks['BOTTOM'];
$.getJSON('data/getBlockInfo.php'+block_hash, function( data ) {
liste_blocks['PREVIOUS'] = data.prev;
liste_blocks['BLOCK_'+data.height] = data.hash;
_liste_blocks['BOTTOM'] = data.prev;
_liste_blocks['BLOCK_'+data.height] = data.hash;
_liste_blocks['LENGTH'] += 1;
// Ajouter un div
_addDivForBlock(data.height, false);
// Mettre les infos dans le div
_addInfoForBlock(data);
// Récursivité pour précharger par paquets
if (_liste_blocks['LENGTH'] % 10) _addBottomBlock();
});
}
function _initBlockchain(block_name)
{
var block_hash = '';
$(document).scrollTop( $("#explorer").offset().top );
$('#blockchain').html('');
cur_height = [];
cur_class = 0;
flag_nav = true;
block_hash = '';
if (block_name != 'LAST') block_hash = '?block_hash='+_getblocHashFromName(block_name);
$.getJSON('data/getBlockInfo.php'+block_hash, function( data ) {
_liste_blocks['BOTTOM'] = data.prev;
_liste_blocks['TOP'] = data.hash;
_liste_blocks['BLOCK_'+data.height] = data.hash;
_liste_blocks['LENGTH'] += 1;
_addDivForBlock(data.height);
_addInfoForBlock(data);
liste_blocks['PREVIOUS'] = data.prev;
if (data.prev != '0000000000000000000000000000000000000000000000000000000000000000')
_gotoBlock('PREVIOUS');
else
_addDivForVoid();
// Ajouter le trigger sur les nouveaux blocks
if (block_name == 'LAST')
blockchainListener.addBlockHook(_ajouterTopBlock);
blockchainListener.addBlockHook(_addTopBlock);
_addBottomBlock();
});
return true;
@@ -285,42 +263,47 @@ blockchainExplorer = function(){
function _blockSelectorChange()
{
_initBlockchain($('#blockSelector').val());
$('#fast_forward_btn').attr('data-original-title', $('#blockSelector').val());
}
function _initBlockSelector()
{
if (!isInitSelector)
{
// Init the selector
var select = $('#blockSelector');
// Init the selector
var select = $('#blockSelector');
$.each(liste_blocks, function (key, bloc) {
select.append(new Option(bloc.name, bloc.name));
});
isInitSelector = true;
}
$.each(_liste_blocks, function (key, bloc) {
select.append(new Option(bloc.name, bloc.name));
});
}
function _init(mode = 1)
{
_mode = mode;
cur_height = [];
if (_known_blocks == null)
{
$.getJSON('data/getKnownBlocksList.php', function( data ) {
_liste_blocks = [];
_liste_blocks['LENGTH'] = 0;
$.getJSON('data/getKnownBlocksList.php', function( data ) {
liste_blocks = data;
_initBlockSelector();
if (cur_height.length == 0) _initBlockchain('LAST');
return true;
});
_known_blocks = data;
_known_blocks.sort(function(a,b){
// sort desc ...
if (a.height < b.height) return 1;
if (a.height > b.height) return -1;
return 0;
});
_initBlockchain('LAST');
return true;
});
}
}
return {
ajouterPreviousBlock: _ajouterPreviousBlock,
addTopBlock: _addTopBlock,
addBottomBlock: _addBottomBlock,
getblocHashFromName: _getblocHashFromName,
ajouterTopBlock : _ajouterTopBlock,
init: _init
};