Files
Joe Uhren c239f129cf Add an "Extracted By" field for block and tx data
-An optional "Extracted By" column can now be added to the homepage tx data, the block page, tx page and/or in the /ext/getlasttxs api
-Added 4 new settings to allow displaying the "Extracted By" data on the homepage, block page, transaction page and/or in the /ext/getlasttxs api
-Fixed an issue with the get_txs function where it wasn't properly searching by txid
-The rl_labels.pug file has been updated to consolidate similar code without being duplicated
-Updated the README with new verbiage for the extracted by data
2025-03-02 16:37:52 -07:00

213 lines
12 KiB
Plaintext

extends layout
block content
script.
var setting_maxTxCount = parseInt("#{settings.api_page.public_apis.ext.getlasttxs.max_items_per_query}");
var setting_txPerPage = parseInt("#{settings.index_page.transaction_table.items_per_page}");
var lengthMenuOptsAdd = !{JSON.stringify(settings.index_page.transaction_table.page_length_options)};
var lengthMenuOpts = [];
var addedLength = false;
for (i = 0; i < lengthMenuOptsAdd.length; i++) {
if (setting_maxTxCount >= lengthMenuOptsAdd[i]) {
if (!addedLength) {
if (lengthMenuOptsAdd[i] > setting_txPerPage) {
lengthMenuOpts.push(setting_txPerPage);
addedLength = true;
}
}
lengthMenuOpts.push(lengthMenuOptsAdd[i]);
if (!addedLength) {
if (lengthMenuOptsAdd[i] > setting_txPerPage)
lengthMenuOpts.push(setting_txPerPage);
if (lengthMenuOptsAdd[i] == setting_txPerPage || lengthMenuOptsAdd[i] > setting_txPerPage)
addedLength = true;
}
}
}
if (!addedLength && setting_txPerPage <= setting_maxTxCount && setting_txPerPage != lengthMenuOpts[lengthMenuOpts.length - 1])
lengthMenuOpts.push(setting_txPerPage);
if (!addedLength && setting_txPerPage > setting_maxTxCount && setting_maxTxCount != lengthMenuOpts[lengthMenuOpts.length - 1])
lengthMenuOpts.push(setting_maxTxCount);
if (setting_maxTxCount < setting_txPerPage)
var displayLengthMax = setting_maxTxCount;
else
var displayLengthMax = setting_txPerPage;
$(document).ready(function() {
var rtable = $('#recent-table').dataTable({
autoWidth: false,
searching: false,
ordering: false,
responsive: false,
lengthChange: true,
processing: true,
serverSide: true,
iDisplayLength: displayLengthMax,
lengthMenu: lengthMenuOpts,
scrollX: true,
ajax: {
url: '/ext/getlasttxs/0',
beforeSend: function(jqXHR, settings) {
settings.url = settings.url.substring(0, settings.url.indexOf('?')) + '/' + getParameterByName('start', settings.url) + '/' + getParameterByName('length', settings.url) + '/internal';
return true;
}
},
language: {
paginate: {
previous: '<',
next: '>'
}
},
rowCallback: function(row, data, index) {
// variables for better readability
const blockindex = data[0];
const blockhash = data[1];
const txhash = data[2];
const outputs = data[3];
const amount = Number(data[4]).toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true});
const amountParts = amount.split('.');
const updatedAmount = amountParts[0] + '.<span class="decimal">' + amountParts[1] + '</span>';
const timestamp = data[5];
let offset = 0;
$("td:eq(0)", row).html('<a href="/tx/' + txhash + '"><span class="fa-regular fa-eye" data-bs-toggle="tooltip" data-bs-placement="top" title="#{settings.localization.view_tx}"></span></a>').addClass('text-center d-table-cell d-md-none');
$("td:eq(1)", row).html('<a href="/block/' + blockhash + '">' + blockindex + '</a>');
$("td:eq(2)", row).html('<a href="/tx/' + txhash + '">' + txhash + '</a>').addClass("text-center breakWord d-none d-md-table-cell");
$("td:eq(3)", row).html(outputs).addClass("text-center d-none d-sm-table-cell");
$("td:eq(4)", row).html(updatedAmount);
if (#{settings.block_page.multi_algorithm.show_algo} == true) {
const algo = (data.length > 6 && data[6].indexOf('algo:') == 0 ? data[6].substring('algo:'.length) : '');
$("td:eq(5)", row).html(algo);
offset += 1;
}
if (#{settings.index_page.show_extracted_by} == true) {
const extracted_by = JSON.parse(data.length > 6 && data[6 + offset].indexOf('extracted_by:') == 0 ? data[6 + offset].substring('extracted_by:'.length) : '');
const labels = !{JSON.stringify(settings.labels)};
const active = '#{active}';
let extracted_contents = '';
for (i = 0; i < extracted_by.length; i++) {
extracted_contents += '<div style="overflow: auto;">';
extracted_contents += `<a href='/address/${extracted_by[i].a_id}'>${(extracted_by[i].claimname == '' ? extracted_by[i].a_id : extracted_by[i].claimname)}</a>`;
if (labels[extracted_by[i].a_id] != null && labels[extracted_by[i].a_id].enabled == true) {
extracted_contents += `<label class="badge bg-${(labels[extracted_by[i].a_id].type == null || labels[extracted_by[i].a_id].type == '' ? 'default' : labels[extracted_by[i].a_id].type)} float-end d-none d-${active == 'richlist' ? 'md' : (active == 'tx' ? 'lg' : 'sm')}-block" style="margin-left:15px;margin-bottom:0;">${labels[extracted_by[i].a_id].label}`;
if (labels[extracted_by[i].a_id].url)
extracted_contents += `<a href="${labels[extracted_by[i].a_id].url}" target="_blank" alt="Visit site" title="Visit site" data-bs-toggle="tooltip" data-bs-placement="top"><span class="fa-solid fa-circle-question" style="margin-left:5px;" /></a>`;
extracted_contents += `</label>`;
}
extracted_contents += '</div>';
}
$("td:eq(" + (5 + offset) + ")", row).html(extracted_contents).addClass("text-center");
offset += 1;
}
$("td:eq(" + (5 + offset) + ")", row).html('<span' + (#{settings.shared_pages.date_time.enable_alt_timezone_tooltips} == true ? ' data-bs-toggle="tooltip" data-bs-placement="auto" title="' + format_unixtime(timestamp, true) + '"' : '') + '>' + format_unixtime(timestamp) + '</span>').addClass('text-center');
},
fnDrawCallback: function(settings) {
fixDataTableColumns();
fixFooterHeightAndPosition();
enableTooltips();
}
});
function update_last_updated(lastUpdatedDate) {
if (lastUpdatedDate != 0) {
$('span#lastUpdatedDate').html(' ' + format_unixtime(lastUpdatedDate));
if (#{settings.shared_pages.date_time.enable_alt_timezone_tooltips} == true) {
$('span#lastUpdatedDate').attr('data-bs-toggle', 'tooltip').attr('data-bs-placement', 'auto').attr('title', format_unixtime(lastUpdatedDate, true)).attr('data-bs-original-title', format_unixtime(lastUpdatedDate, true));
enableTooltips();
}
} else
$('span#lastUpdatedDate').html(' N/A');
}
var setting_reload_table_seconds = parseInt("#{settings.index_page.transaction_table.reload_table_seconds}");
if (setting_reload_table_seconds > 0) {
setInterval(function () {
rtable.api().ajax.reload(null, false);
}, (setting_reload_table_seconds * 1000));
if ('#{settings.index_page.page_header.show_last_updated}' == 'true') {
setInterval(function () {
$.ajax({url: '/ext/getlastupdated/blockchain', headers: { Accept: 'application/json, text/javascript, */*; q=0.01' }, success: function(json) {
if (json != null && json.last_updated_date != null)
update_last_updated(json.last_updated_date);
else
update_last_updated(0);
}});
}, (setting_reload_table_seconds * 1000));
}
}
if ('#{settings.index_page.page_header.show_last_updated}' == 'true') {
var lastUpdatedDate = #{(last_updated == null || last_updated == '0' ? 0 : last_updated)};
update_last_updated(lastUpdatedDate);
}
if (#{settings.shared_pages.page_header.page_title_image.enable_animation} == true && #{settings.index_page.page_header.show_img} == true)
startRotateElement('img#header-img');
});
if error !== null
.col-12
.alert.alert-danger.alert-dismissible.fade.show(role='alert')
button.btn-close(type='button', data-bs-dismiss='alert')
.cardSpacer
span.fa-solid.fa-circle-exclamation(style='margin-right:5px')
strong #{settings.localization.ex_error}
div #{error}
.col-md-12.cardSpacer
if settings.index_page.page_header.show_img == true || settings.index_page.page_header.show_title == true || settings.index_page.page_header.show_last_updated == true || settings.index_page.page_header.show_description == true
#page-header-container(style='align-items:' + (settings.index_page.page_header.show_img == true && settings.index_page.page_header.show_title == true && settings.index_page.page_header.show_last_updated == true && settings.index_page.page_header.show_description == true ? 'flex-start' : 'center'))
if settings.index_page.page_header.show_img == true
#header-img-container
img#header-img(src=(settings.shared_pages.page_header.page_title_image == null || settings.shared_pages.page_header.page_title_image.image_path == null || settings.shared_pages.page_header.page_title_image.image_path == '' ? '/img/page-title-img.png' : settings.shared_pages.page_header.page_title_image.image_path))
#page-title-container
if settings.index_page.page_header.show_title == true
h3#page-title #{settings.localization.ex_title.replace('{1}', settings.coin.name)}
if settings.index_page.page_header.show_last_updated == true
if settings.index_page.page_header.show_title != true && settings.index_page.page_header.show_description != true
#page-title-container
.sub-page-header
span.fw-bold=settings.localization.last_updated + ':'
span.text-muted#lastUpdatedDate
else
.sub-page-header(style='margin-bottom:' + (settings.index_page.page_header.show_description == true ? '5' : '0') + 'px')
span.fw-bold=settings.localization.last_updated + ':'
span.text-muted#lastUpdatedDate
if settings.index_page.page_header.show_description == true
if settings.index_page.page_header.show_title != true && settings.index_page.page_header.show_last_updated != true
#page-title-container
.sub-page-header.text-muted=settings.localization.ex_description.replace('{1}', settings.coin.name)
else
.sub-page-header.text-muted=settings.localization.ex_description.replace('{1}', settings.coin.name)
.cardSpacer.clearfix
.card.card-default.border-0.cardSpacer
.card-header
strong #{settings.localization.ex_latest_transactions}
table#recent-table.table.table-bordered.table-striped.table-paging.table-hover
- var theadClasses = [];
if settings.shared_pages.table_header_bgcolor != null && settings.shared_pages.table_header_bgcolor != ''
- theadClasses.push('table-' + settings.shared_pages.table_header_bgcolor);
thead
tr(class=theadClasses)
th.d-table-cell.d-md-none
th.text-center #{settings.localization.ex_block}
th.text-center.d-none.d-md-table-cell #{settings.localization.tx_hash}
th.text-center.d-none.d-sm-table-cell #{settings.localization.tx_recipients}
th.text-center #{settings.localization.mkt_amount}
span.small.fw-normal (#{settings.coin.symbol})
if settings.block_page.multi_algorithm.show_algo == true
th.text-center="Algorithm"
if settings.index_page.show_extracted_by == true
th.text-center="Extracted By"
th.text-center #{settings.localization.timestamp}
tbody.text-center