Merge pull request #208 from poanetwork/apply-bootstrap-grid-and-components-#123
Apply bootstrap grid and componentspull/213/head
commit
a0302a0f5b
@ -1,25 +1,34 @@ |
|||||||
<div> |
<section> |
||||||
<h1><%= gettext "Address" %></h1> |
<h1><%= gettext "Address" %></h1> |
||||||
<h2 data-test="address_detail_hash"><%= @address %></h2> |
<p data-test="address_detail_hash"><%= @address %></p> |
||||||
</div> |
|
||||||
<div class="panels container__subsection"> |
<div class="card mb-3"> |
||||||
<div class="panels__container"> |
<div class="card-body"> |
||||||
<table class="table table-responsive-sm table-font"> |
<div class="row"> |
||||||
<table class="table table-responsive-sm table-font"> |
<div class="col-sm-6"> |
||||||
<tbody> |
<table class="table table-font table-responsive-sm table-horizontal"> |
||||||
<tr> |
<tbody> |
||||||
<th scope="row"><%= gettext "Balance" %></th> |
<tr> |
||||||
<td class="u-text-right" data-test="address_balance"> |
<th scope="row"> |
||||||
<div><%= balance(@address) %></div> |
<%= gettext "Balance" %> |
||||||
<div><%= formatted_usd(@address, @exchange_rate) %></div> |
</th> |
||||||
</td> |
<td data-test="address_balance"> |
||||||
</tr> |
<%= balance(@address) %> </br> |
||||||
<tr> |
<%= formatted_usd(@address, @exchange_rate) %> |
||||||
<th scope="row"> <%= gettext "Number of Transactions" %></th> |
</td> |
||||||
<td class="u-text-right" data-test="transaction_count"><%= Cldr.Number.to_string!(@transaction_count) %></td> |
</tr> |
||||||
</tr> |
<tr> |
||||||
</tbody> |
<th scope="row"> |
||||||
</table> |
<%= gettext "Number of Transactions" %> |
||||||
</table> |
</th> |
||||||
|
<td data-test="transaction_count"> |
||||||
|
<%= Cldr.Number.to_string!(@transaction_count) %> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
</tbody> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
</div> |
</div> |
||||||
</div> |
</section> |
||||||
|
@ -1,114 +1,121 @@ |
|||||||
<section class="container__section block"> |
<section class="container-fluid"> |
||||||
|
|
||||||
<%= render ExplorerWeb.AddressView, "overview.html", assigns %> |
<%= render ExplorerWeb.AddressView, "overview.html", assigns %> |
||||||
<div> |
|
||||||
<ul class="nav nav-tabs"> |
<section> |
||||||
<li class="nav-item"> |
<div class="card"> |
||||||
<%= link( |
<div class="card-header"> |
||||||
gettext("Transactions"), |
<ul class="nav nav-tabs card-header-tabs"> |
||||||
class: "nav-link", |
<li class="nav-item"> |
||||||
to: address_transaction_path(@conn, :index, @conn.assigns.locale, @conn.params["address_id"]) |
<%= link( |
||||||
) %> |
gettext("Transactions"), |
||||||
</li> |
class: "nav-link", |
||||||
<li class="nav-item"> |
to: address_transaction_path(@conn, :index, @conn.assigns.locale, @conn.params["address_id"]) |
||||||
<%= link( |
) %> |
||||||
gettext("Internal Transactions"), |
</li> |
||||||
class: "nav-link active", |
<li class="nav-item"> |
||||||
"data-test": "internal_transactions_tab_link", |
<%= link( |
||||||
to: address_internal_transaction_path(@conn, :index, @conn.assigns.locale, @conn.params["address_id"]) |
gettext("Internal Transactions"), |
||||||
) %> |
class: "nav-link active", |
||||||
</li> |
"data-test": "internal_transactions_tab_link", |
||||||
</ul> |
to: address_internal_transaction_path(@conn, :index, @conn.assigns.locale, @conn.params["address_id"]) |
||||||
</div> |
) %> |
||||||
<div class="panels container__subsection"> |
</li> |
||||||
<div class="dropdown u-float-right u-push-sm"> |
</ul> |
||||||
<button data-test="filter_dropdown" class="button button--secondary button--xsmall dropdown-toggle" type="button" |
</div> |
||||||
id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
<div class="card-body"> |
||||||
Filter: <%= format_current_filter(@filter) %> |
|
||||||
</button> |
<%= if length(@page.entries) > 0 do %> |
||||||
<div class="dropdown-menu dropdown-menu-right filter" aria-labelledby="dropdownMenu2"> |
<div class="dropdown u-float-right u-push-sm"> |
||||||
<%= link( |
<button data-test="filter_dropdown" class="button button--secondary button--xsmall dropdown-toggle" type="button" |
||||||
gettext("All"), |
id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
||||||
to: address_internal_transaction_path(@conn, :index, @conn.assigns.locale, @conn.params["address_id"]), |
Filter: <%= format_current_filter(@filter) %> |
||||||
class: "address__link address__link--active dropdown-item", |
</button> |
||||||
"data-test": "filter_option" |
<div class="dropdown-menu dropdown-menu-right filter" aria-labelledby="dropdownMenu2"> |
||||||
) %> |
<%= link( |
||||||
<%= link( |
gettext("All"), |
||||||
gettext("To"), |
to: address_internal_transaction_path(@conn, :index, @conn.assigns.locale, @conn.params["address_id"]), |
||||||
to: address_internal_transaction_path( |
class: "address__link address__link--active dropdown-item", |
||||||
@conn, |
"data-test": "filter_option" |
||||||
:index, |
) %> |
||||||
@conn.assigns.locale, |
<%= link( |
||||||
@conn.params["address_id"], |
gettext("To"), |
||||||
filter: "to" |
to: address_internal_transaction_path( |
||||||
), |
@conn, |
||||||
class: "address__link address__link--active dropdown-item", |
:index, |
||||||
"data-test": "filter_option" |
@conn.assigns.locale, |
||||||
) %> |
@conn.params["address_id"], |
||||||
<%= link( |
filter: "to" |
||||||
gettext("From"), |
), |
||||||
to: address_internal_transaction_path( |
class: "address__link address__link--active dropdown-item", |
||||||
@conn, |
"data-test": "filter_option" |
||||||
:index, |
) %> |
||||||
@conn.assigns.locale, |
<%= link( |
||||||
@conn.params["address_id"], |
gettext("From"), |
||||||
filter: "from" |
to: address_internal_transaction_path( |
||||||
), |
@conn, |
||||||
class: "address__link address__link--active dropdown-item", |
:index, |
||||||
"data-test": "filter_option" |
@conn.assigns.locale, |
||||||
) %> |
@conn.params["address_id"], |
||||||
|
filter: "from" |
||||||
|
), |
||||||
|
class: "address__link address__link--active dropdown-item", |
||||||
|
"data-test": "filter_option" |
||||||
|
) %> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<table class="table table-responsive-sm table-font"> |
||||||
|
<thead> |
||||||
|
<th><%= gettext "Parent Tx Hash" %></th> |
||||||
|
<th><%= gettext "Block" %></th> |
||||||
|
<th><%= gettext "Age" %></th> |
||||||
|
<th><%= gettext "From" %></th> |
||||||
|
<th><%= gettext "To" %></th> |
||||||
|
<th><%= gettext "Value" %></th> |
||||||
|
</thead> |
||||||
|
<%= for internal_transaction <- @page do %> |
||||||
|
<tgroup> |
||||||
|
<tr data-test="internal_transaction"> |
||||||
|
<td> |
||||||
|
<%= render ExplorerWeb.TransactionView, "_link.html", conn: @conn, transaction: internal_transaction.transaction %> |
||||||
|
</td> |
||||||
|
<td> |
||||||
|
<%= link(internal_transaction.transaction.block, |
||||||
|
to: block_path(@conn, :show, @conn.assigns.locale, internal_transaction.transaction.block) |
||||||
|
) %> |
||||||
|
</td> |
||||||
|
<td><%= ExplorerWeb.BlockView.age(internal_transaction.transaction.block) %></td> |
||||||
|
<td> |
||||||
|
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: internal_transaction.from_address %> |
||||||
|
</td> |
||||||
|
<td> |
||||||
|
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: internal_transaction.to_address %> |
||||||
|
</td> |
||||||
|
<td><%= ExplorerWeb.TransactionView.value(internal_transaction) %></td> |
||||||
|
</tr> |
||||||
|
</tgroup> |
||||||
|
<% end %> |
||||||
|
</table> |
||||||
|
<% else %> |
||||||
|
<p><%= gettext "There are no Internal Transactions" %></p> |
||||||
|
<% end %> |
||||||
</div> |
</div> |
||||||
</div> |
</div> |
||||||
<div class="panels__container"> |
|
||||||
<%= if length(@page.entries) > 0 do %> |
<div class="address__pagination"> |
||||||
<table class="table table-responsive-sm table-font"> |
<%= pagination_links( |
||||||
<thead> |
@conn, |
||||||
<th><%= gettext "Parent Tx Hash" %></th> |
@page, |
||||||
<th><%= gettext "Block" %></th> |
["en", @conn.params["address_id"]], |
||||||
<th><%= gettext "Age" %></th> |
distance: 1, |
||||||
<th><%= gettext "From" %></th> |
filter: @conn.params["filter"], |
||||||
<th><%= gettext "To" %></th> |
first: true, |
||||||
<th><%= gettext "Value" %></th> |
next: Phoenix.HTML.raw("›"), |
||||||
</thead> |
path: &address_internal_transaction_path/5, |
||||||
<%= for internal_transaction <- @page do %> |
previous: Phoenix.HTML.raw("‹"), |
||||||
<tgroup> |
view_style: :bulma |
||||||
<tr data-test="internal_transaction"> |
) %> |
||||||
<td> |
|
||||||
<%= render ExplorerWeb.TransactionView, "_link.html", conn: @conn, transaction: internal_transaction.transaction %> |
|
||||||
</td> |
|
||||||
<td> |
|
||||||
<%= link(internal_transaction.transaction.block, |
|
||||||
to: block_path(@conn, :show, @conn.assigns.locale, internal_transaction.transaction.block) |
|
||||||
) %> |
|
||||||
</td> |
|
||||||
<td><%= ExplorerWeb.BlockView.age(internal_transaction.transaction.block) %></td> |
|
||||||
<td> |
|
||||||
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: internal_transaction.from_address %> |
|
||||||
</td> |
|
||||||
<td> |
|
||||||
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: internal_transaction.to_address %> |
|
||||||
</td> |
|
||||||
<td><%= ExplorerWeb.TransactionView.value(internal_transaction) %></td> |
|
||||||
</tr> |
|
||||||
</tgroup> |
|
||||||
<% end %> |
|
||||||
</table> |
|
||||||
<% else %> |
|
||||||
<p><%= gettext "There are no Internal Transactions" %></p> |
|
||||||
<% end %> |
|
||||||
</div> |
</div> |
||||||
</div> |
</section> |
||||||
<div class="address__pagination"> |
|
||||||
<%= pagination_links( |
|
||||||
@conn, |
|
||||||
@page, |
|
||||||
["en", @conn.params["address_id"]], |
|
||||||
distance: 1, |
|
||||||
filter: @conn.params["filter"], |
|
||||||
first: true, |
|
||||||
next: Phoenix.HTML.raw("›"), |
|
||||||
path: &address_internal_transaction_path/5, |
|
||||||
previous: Phoenix.HTML.raw("‹"), |
|
||||||
view_style: :bulma |
|
||||||
) %> |
|
||||||
</div> |
|
||||||
</section> |
</section> |
||||||
|
@ -1,121 +1,127 @@ |
|||||||
<section class="container__section"> |
<section class="container-fluid"> |
||||||
|
|
||||||
<%= render ExplorerWeb.AddressView, "overview.html", assigns %> |
<%= render ExplorerWeb.AddressView, "overview.html", assigns %> |
||||||
<div> |
|
||||||
<ul class="nav nav-tabs"> |
<section> |
||||||
<li class="nav-item"> |
<div class="card"> |
||||||
<%= link( |
<div class="card-header"> |
||||||
gettext("Transactions"), |
<ul class="nav nav-tabs card-header-tabs"> |
||||||
class: "nav-link active", |
<li class="nav-item"> |
||||||
to: address_transaction_path(@conn, :index, @conn.assigns.locale, @conn.params["address_id"]) |
<%= link( |
||||||
) %> |
gettext("Transactions"), |
||||||
</li> |
class: "nav-link active", |
||||||
<li class="nav-item"> |
to: address_transaction_path(@conn, :index, @conn.assigns.locale, @conn.params["address_id"]) |
||||||
<%= link( |
) %> |
||||||
gettext("Internal Transactions"), |
</li> |
||||||
class: "nav-link", |
<li class="nav-item"> |
||||||
"data-test": "internal_transactions_tab_link", |
<%= link( |
||||||
to: address_internal_transaction_path(@conn, :index, @conn.assigns.locale, @conn.params["address_id"]) |
gettext("Internal Transactions"), |
||||||
) %> |
class: "nav-link", |
||||||
</li> |
"data-test": "internal_transactions_tab_link", |
||||||
</ul> |
to: address_internal_transaction_path(@conn, :index, @conn.assigns.locale, @conn.params["address_id"]) |
||||||
</div> |
) %> |
||||||
<div class="panels container__subsection"> |
</li> |
||||||
<div class="dropdown u-float-right u-push-sm"> |
</ul> |
||||||
<button data-test="filter_dropdown" class="button button--secondary button--xsmall dropdown-toggle" type="button" |
|
||||||
id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
|
||||||
Filter: <%= format_current_filter(@filter) %> |
|
||||||
</button> |
|
||||||
<div class="dropdown-menu dropdown-menu-right filter" aria-labelledby="dropdownMenu2"> |
|
||||||
<%= link( |
|
||||||
gettext("All"), |
|
||||||
to: address_transaction_path(@conn, :index, @conn.assigns.locale, @conn.params["address_id"]), |
|
||||||
class: "address__link address__link--active dropdown-item", |
|
||||||
"data-test": "filter_option" |
|
||||||
) %> |
|
||||||
<%= link( |
|
||||||
gettext("To"), |
|
||||||
to: address_transaction_path( |
|
||||||
@conn, |
|
||||||
:index, |
|
||||||
@conn.assigns.locale, |
|
||||||
@conn.params["address_id"], |
|
||||||
filter: "to" |
|
||||||
), |
|
||||||
class: "address__link address__link--active dropdown-item", |
|
||||||
"data-test": "filter_option" |
|
||||||
) %> |
|
||||||
<%= link( |
|
||||||
gettext("From"), |
|
||||||
to: address_transaction_path( |
|
||||||
@conn, |
|
||||||
:index, |
|
||||||
@conn.assigns.locale, |
|
||||||
@conn.params["address_id"], |
|
||||||
filter: "from" |
|
||||||
), |
|
||||||
class: "address__link address__link--active dropdown-item", |
|
||||||
"data-test": "filter_option" |
|
||||||
) %> |
|
||||||
</div> |
</div> |
||||||
</div> |
<div class="card-body"> |
||||||
<div class="panels__container"> |
<div class="dropdown u-float-right u-push-sm"> |
||||||
<table class="table table-responsive-sm table-font"> |
<button data-test="filter_dropdown" class="button button--secondary button--xsmall dropdown-toggle" type="button" |
||||||
<thead> |
id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
||||||
<tr> |
Filter: <%= format_current_filter(@filter) %> |
||||||
<th class="transactions__column-header transactions__column-header--status"> |
</button> |
||||||
<span class="transactions__column-title transactions__column-title--status"><%= gettext "Status" %></span> |
<div class="dropdown-menu dropdown-menu-right filter" aria-labelledby="dropdownMenu2"> |
||||||
</th> |
<%= link( |
||||||
<th><%= gettext "Hash" %></th> |
gettext("All"), |
||||||
<th><%= gettext "Block" %></th> |
to: address_transaction_path(@conn, :index, @conn.assigns.locale, @conn.params["address_id"]), |
||||||
<th><%= gettext "Age" %></th> |
class: "address__link address__link--active dropdown-item", |
||||||
<th><%= gettext "From" %></th> |
"data-test": "filter_option" |
||||||
<th></th> |
) %> |
||||||
<th><%= gettext "To" %></th> |
<%= link( |
||||||
<th><%= gettext "Value" %> (<%= gettext "Ether" %>)</th> |
gettext("To"), |
||||||
<th><%= gettext "Fee" %></th> |
to: address_transaction_path( |
||||||
</tr> |
@conn, |
||||||
</thead> |
:index, |
||||||
<tbody> |
@conn.assigns.locale, |
||||||
<%= for transaction <- @page.entries do %> |
@conn.params["address_id"], |
||||||
|
filter: "to" |
||||||
|
), |
||||||
|
class: "address__link address__link--active dropdown-item", |
||||||
|
"data-test": "filter_option" |
||||||
|
) %> |
||||||
|
<%= link( |
||||||
|
gettext("From"), |
||||||
|
to: address_transaction_path( |
||||||
|
@conn, |
||||||
|
:index, |
||||||
|
@conn.assigns.locale, |
||||||
|
@conn.params["address_id"], |
||||||
|
filter: "from" |
||||||
|
), |
||||||
|
class: "address__link address__link--active dropdown-item", |
||||||
|
"data-test": "filter_option" |
||||||
|
) %> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<table class="table table-responsive-sm table-font"> |
||||||
|
<thead> |
||||||
<tr> |
<tr> |
||||||
<td><div class="transaction__dot transaction__dot--<%= status(transaction) %>"></div></td> |
<th class="transactions__column-header transactions__column-header--status"> |
||||||
<td> |
<span class="transactions__column-title transactions__column-title--status"><%= gettext "Status" %></span> |
||||||
<%= render ExplorerWeb.TransactionView, "_link.html", conn: @conn, transaction: transaction %> |
</th> |
||||||
</td> |
<th><%= gettext "Hash" %></th> |
||||||
<td> |
<th><%= gettext "Block" %></th> |
||||||
<%= link( |
<th><%= gettext "Age" %></th> |
||||||
transaction.block, |
<th><%= gettext "From" %></th> |
||||||
to: block_path(@conn, :show, @conn.assigns.locale, transaction.block) |
<th></th> |
||||||
) %> |
<th><%= gettext "To" %></th> |
||||||
</td> |
<th><%= gettext "Value" %> (<%= gettext "Ether" %>)</th> |
||||||
<td><%= transaction.block.timestamp |> Timex.from_now %></td> |
<th><%= gettext "Fee" %></th> |
||||||
<td class="address-cell"> |
|
||||||
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: transaction.from_address %> |
|
||||||
</td> |
|
||||||
<td class="u-text-center"><i class="fas fa-arrow-circle-right"></i></td> |
|
||||||
<td> |
|
||||||
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: transaction.to_address %> |
|
||||||
</td> |
|
||||||
<td><%= ExplorerWeb.TransactionView.value(transaction, include_label: false) %></td> |
|
||||||
<td><%= ExplorerWeb.TransactionView.formatted_fee(transaction, denomination: :ether) %></td> |
|
||||||
</tr> |
</tr> |
||||||
<% end %> |
</thead> |
||||||
</tbody> |
<tbody> |
||||||
</table> |
<%= for transaction <- @page.entries do %> |
||||||
|
<tr> |
||||||
|
<td><div class="transaction__dot transaction__dot--<%= status(transaction) %>"></div></td> |
||||||
|
<td> |
||||||
|
<%= render ExplorerWeb.TransactionView, "_link.html", conn: @conn, transaction: transaction %> |
||||||
|
</td> |
||||||
|
<td> |
||||||
|
<%= link( |
||||||
|
transaction.block, |
||||||
|
to: block_path(@conn, :show, @conn.assigns.locale, transaction.block) |
||||||
|
) %> |
||||||
|
</td> |
||||||
|
<td><%= transaction.block.timestamp |> Timex.from_now %></td> |
||||||
|
<td class="address-cell"> |
||||||
|
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: transaction.from_address %> |
||||||
|
</td> |
||||||
|
<td class="u-text-center"><i class="fas fa-arrow-circle-right"></i></td> |
||||||
|
<td> |
||||||
|
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: transaction.to_address %> |
||||||
|
</td> |
||||||
|
<td><%= ExplorerWeb.TransactionView.value(transaction, include_label: false) %></td> |
||||||
|
<td><%= ExplorerWeb.TransactionView.formatted_fee(transaction, denomination: :ether) %></td> |
||||||
|
</tr> |
||||||
|
<% end %> |
||||||
|
</tbody> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="address__pagination"> |
||||||
|
<%= pagination_links( |
||||||
|
@conn, |
||||||
|
@page, |
||||||
|
["en", @conn.params["address_id"]], |
||||||
|
distance: 1, |
||||||
|
filter: @conn.params["filter"], |
||||||
|
first: true, |
||||||
|
next: Phoenix.HTML.raw("›"), |
||||||
|
path: &address_transaction_path/5, |
||||||
|
previous: Phoenix.HTML.raw("‹"), |
||||||
|
view_style: :bulma |
||||||
|
) %> |
||||||
</div> |
</div> |
||||||
</div> |
</section> |
||||||
<div class="address__pagination"> |
|
||||||
<%= pagination_links( |
|
||||||
@conn, |
|
||||||
@page, |
|
||||||
["en", @conn.params["address_id"]], |
|
||||||
distance: 1, |
|
||||||
filter: @conn.params["filter"], |
|
||||||
first: true, |
|
||||||
next: Phoenix.HTML.raw("›"), |
|
||||||
path: &address_transaction_path/5, |
|
||||||
previous: Phoenix.HTML.raw("‹"), |
|
||||||
view_style: :bulma |
|
||||||
) %> |
|
||||||
</div> |
|
||||||
</section> |
</section> |
||||||
|
@ -1,188 +1,195 @@ |
|||||||
<section class="container__section"> |
<section class="container-fluid"> |
||||||
<div> |
<section> |
||||||
<h1><%= gettext("Block Details") %></h1> |
<h1><%= gettext("Block Details") %></h1> |
||||||
<h2 data-test="block_detail_number"><%= @block.number %></h2> |
<p data-test="block_detail_number"><%= @block.number %></p> |
||||||
</div> |
|
||||||
<div class="panels container__subsection"> |
<div class="card mb-3"> |
||||||
<div class="panels__container row"> |
<div class="card-body"> |
||||||
<div class="col-lg-6"> |
<div class="row"> |
||||||
<table class="table table-font table-responsive-sm table-horizontal"> |
<div class="col-lg-6"> |
||||||
<tbody> |
<table class="table table-font table-responsive-sm table-horizontal"> |
||||||
<tr> |
<tbody> |
||||||
<th scope="row"> |
<tr> |
||||||
<%= gettext "Timestamp" %> |
<th scope="row"> |
||||||
</th> |
<%= gettext "Timestamp" %> |
||||||
<td> |
</th> |
||||||
<%= age(@block) %> (<%= formatted_timestamp(@block) %>) |
<td> |
||||||
</td> |
<%= age(@block) %> (<%= formatted_timestamp(@block) %>) |
||||||
</tr> |
</td> |
||||||
<tr> |
</tr> |
||||||
<th scope="row"> |
<tr> |
||||||
<%= gettext "Transaction" %> |
<th scope="row"> |
||||||
</th> |
<%= gettext "Transaction" %> |
||||||
<td> |
</th> |
||||||
<%= gettext "%{count} transactions in this block", count: @block_transaction_count %> |
<td> |
||||||
</td> |
<%= gettext "%{count} transactions in this block", count: @block_transaction_count %> |
||||||
</tr> |
</td> |
||||||
<tr> |
</tr> |
||||||
<th scope="row"> |
<tr> |
||||||
<%= gettext "Hash" %> |
<th scope="row"> |
||||||
</th> |
<%= gettext "Hash" %> |
||||||
<td title="<%= @block.hash %>"> |
</th> |
||||||
<%= @block.hash %> |
<td title="<%= @block.hash %>"> |
||||||
</td> |
<%= @block.hash %> |
||||||
</tr> |
</td> |
||||||
<tr> |
</tr> |
||||||
<th scope="row"> |
<tr> |
||||||
<%= gettext "Parent Hash" %> |
<th scope="row"> |
||||||
</th> |
<%= gettext "Parent Hash" %> |
||||||
<td title="<%= @block.parent_hash %>"> |
</th> |
||||||
<%= link( |
<td title="<%= @block.parent_hash %>"> |
||||||
@block.parent_hash, |
<%= link( |
||||||
class: "block__link", |
@block.parent_hash, |
||||||
to: block_path(@conn, :show, @conn.assigns.locale, @block.number - 1) |
class: "block__link", |
||||||
) %> |
to: block_path(@conn, :show, @conn.assigns.locale, @block.number - 1) |
||||||
</td> |
) %> |
||||||
</tr> |
</td> |
||||||
<tr> |
</tr> |
||||||
<th scope="row"> |
<tr> |
||||||
<%= gettext "Miner" %> |
<th scope="row"> |
||||||
</th> |
<%= gettext "Miner" %> |
||||||
<td title="<%= @block.miner %>"> |
</th> |
||||||
<%= @block.miner %> |
<td title="<%= @block.miner %>"> |
||||||
</td> |
<%= @block.miner %> |
||||||
</tr> |
</td> |
||||||
<tr> |
</tr> |
||||||
<th scope="row"> |
<tr> |
||||||
<%= gettext "Difficulty" %> |
<th scope="row"> |
||||||
</th> |
<%= gettext "Difficulty" %> |
||||||
<td title="<%= @block.difficulty %>"> |
</th> |
||||||
<%= @block.difficulty |> Cldr.Number.to_string! %> |
<td title="<%= @block.difficulty %>"> |
||||||
</td> |
<%= @block.difficulty |> Cldr.Number.to_string! %> |
||||||
</tr> |
</td> |
||||||
</tbody> |
</tr> |
||||||
</table> |
</tbody> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
<div class="col-lg-6"> |
||||||
|
<table class="table table-font table-responsive-sm table-horizontal"> |
||||||
|
<tbody> |
||||||
|
<tr> |
||||||
|
<th scope="row"> |
||||||
|
<%= gettext "Total Difficulty" %> |
||||||
|
</th> |
||||||
|
<td title="<%= @block.total_difficulty %>"> |
||||||
|
<%= @block.total_difficulty |> Cldr.Number.to_string! %> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
<tr> |
||||||
|
<th scope="row"> |
||||||
|
<%= gettext "Size" %> |
||||||
|
</th> |
||||||
|
<td> |
||||||
|
<%= Cldr.Unit.new(:byte, @block.size) |> Cldr.Unit.to_string! %> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
<tr> |
||||||
|
<th scope="row"> |
||||||
|
<%= gettext "Gas Used" %> |
||||||
|
</th> |
||||||
|
<td> |
||||||
|
<%= @block.gas_used |> Cldr.Number.to_string! %> (<%= (@block.gas_used / @block.gas_limit) |> Cldr.Number.to_string!(format: "#.#%") %>) |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
<tr> |
||||||
|
<th scope="row"> |
||||||
|
<%= gettext "Gas Limit" %> |
||||||
|
</th> |
||||||
|
<td> |
||||||
|
<%= @block.gas_limit |> Cldr.Number.to_string! %> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
<tr> |
||||||
|
<th scope="Nonce"> |
||||||
|
<%= gettext "Nonce" %> |
||||||
|
</th> |
||||||
|
<td> |
||||||
|
<%= @block.nonce %> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
</tbody> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
</div> |
</div> |
||||||
<div class="col-lg-6"> |
</div> |
||||||
<table class="table table-font table-responsive-sm table-horizontal"> |
</section> |
||||||
<tbody> |
|
||||||
<tr> |
<section> |
||||||
<th scope="row"> |
<div class="card mb-3"> |
||||||
<%= gettext "Total Difficulty" %> |
<div class="card-header"> |
||||||
</th> |
<ul class="nav nav-tabs card-header-tabs"> |
||||||
<td title="<%= @block.total_difficulty %>"> |
<li class="nav-item"> |
||||||
<%= @block.total_difficulty |> Cldr.Number.to_string! %> |
<%= link( |
||||||
</td> |
gettext("Transactions"), |
||||||
</tr> |
class: "nav-link active", |
||||||
<tr> |
to: block_transaction_path(@conn, :index, @conn.assigns.locale, @conn.params["block_id"]) |
||||||
<th scope="row"> |
) %> |
||||||
<%= gettext "Size" %> |
</li> |
||||||
</th> |
</ul> |
||||||
<td> |
</div> |
||||||
<%= Cldr.Unit.new(:byte, @block.size) |> Cldr.Unit.to_string! %> |
<div class="card-body"> |
||||||
</td> |
<table class="table table-responsive-sm table-font"> |
||||||
</tr> |
<thead> |
||||||
<tr> |
|
||||||
<th scope="row"> |
|
||||||
<%= gettext "Gas Used" %> |
|
||||||
</th> |
|
||||||
<td> |
|
||||||
<%= @block.gas_used |> Cldr.Number.to_string! %> (<%= (@block.gas_used / @block.gas_limit) |> Cldr.Number.to_string!(format: "#.#%") %>) |
|
||||||
</td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<th scope="row"> |
|
||||||
<%= gettext "Gas Limit" %> |
|
||||||
</th> |
|
||||||
<td> |
|
||||||
<%= @block.gas_limit |> Cldr.Number.to_string! %> |
|
||||||
</td> |
|
||||||
</tr> |
|
||||||
<tr> |
<tr> |
||||||
<th scope="Nonce"> |
<th> |
||||||
<%= gettext "Nonce" %> |
<%= gettext "Status" %> |
||||||
</th> |
</th> |
||||||
<td> |
<th><%= gettext "Hash" %></th> |
||||||
<%= @block.nonce %> |
<th><%= gettext "Block" %></th> |
||||||
</td> |
<th><%= gettext "Age" %></th> |
||||||
|
<th><%= gettext "From" %></th> |
||||||
|
<th></th> |
||||||
|
<th><%= gettext "To" %></th> |
||||||
|
<th><%= gettext "Value" %></th> |
||||||
</tr> |
</tr> |
||||||
|
</thead> |
||||||
|
<tbody> |
||||||
|
<%= for transaction <- @page.entries do %> |
||||||
|
<tr> |
||||||
|
<td> |
||||||
|
<div class="transaction__dot transaction__dot--<%= status(transaction) %>"></div> |
||||||
|
</td> |
||||||
|
<td> |
||||||
|
<%= render ExplorerWeb.TransactionView, "_link.html", conn: @conn, transaction: transaction %> |
||||||
|
</td> |
||||||
|
<td> |
||||||
|
<%= link( |
||||||
|
transaction.block, |
||||||
|
to: block_path(@conn, :show, @conn.assigns.locale, transaction.block) |
||||||
|
) %> |
||||||
|
</td> |
||||||
|
<td> |
||||||
|
<%= transaction.block.timestamp |> Timex.from_now %> |
||||||
|
</td> |
||||||
|
<td class="address-cell"> |
||||||
|
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: transaction.from_address %> |
||||||
|
</td> |
||||||
|
<td class="u-text-center"><i class="fas fa-arrow-circle-right"></i></td> |
||||||
|
<td> |
||||||
|
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: transaction.to_address %> |
||||||
|
</td> |
||||||
|
<td> |
||||||
|
<%= ExplorerWeb.TransactionView.value(transaction) %> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
<% end %> |
||||||
</tbody> |
</tbody> |
||||||
</table> |
</table> |
||||||
</div> |
</div> |
||||||
</div> |
</div> |
||||||
</div> |
|
||||||
<div> |
<div class="blocks__pagination"> |
||||||
<ul class="nav nav-tabs"> |
<%= pagination_links( |
||||||
<li class="nav-item"> |
@conn, |
||||||
<%= link( |
@page, |
||||||
gettext("Transactions"), |
["en", @conn.params["block_id"]], |
||||||
class: "nav-link active", |
distance: 1, |
||||||
to: block_transaction_path(@conn, :index, @conn.assigns.locale, @conn.params["block_id"]) |
first: true, |
||||||
) %> |
next: Phoenix.HTML.raw("›"), |
||||||
</li> |
path: &block_transaction_path/5, |
||||||
</ul> |
previous: Phoenix.HTML.raw("‹"), |
||||||
</div> |
view_style: :bulma |
||||||
<div class="panels container__subsection"> |
) %></div> |
||||||
<div class="panels__container"> |
</section> |
||||||
<table class="table table-responsive-sm table-font"> |
|
||||||
<thead> |
|
||||||
<tr> |
|
||||||
<th> |
|
||||||
<%= gettext "Status" %> |
|
||||||
</th> |
|
||||||
<th><%= gettext "Hash" %></th> |
|
||||||
<th><%= gettext "Block" %></th> |
|
||||||
<th><%= gettext "Age" %></th> |
|
||||||
<th><%= gettext "From" %></th> |
|
||||||
<th></th> |
|
||||||
<th><%= gettext "To" %></th> |
|
||||||
<th><%= gettext "Value" %></th> |
|
||||||
</tr> |
|
||||||
</thead> |
|
||||||
<tbody> |
|
||||||
<%= for transaction <- @page.entries do %> |
|
||||||
<tr> |
|
||||||
<td> |
|
||||||
<div class="transaction__dot transaction__dot--<%= status(transaction) %>"></div> |
|
||||||
</td> |
|
||||||
<td> |
|
||||||
<%= render ExplorerWeb.TransactionView, "_link.html", conn: @conn, transaction: transaction %> |
|
||||||
</td> |
|
||||||
<td> |
|
||||||
<%= link( |
|
||||||
transaction.block, |
|
||||||
to: block_path(@conn, :show, @conn.assigns.locale, transaction.block) |
|
||||||
) %> |
|
||||||
</td> |
|
||||||
<td> |
|
||||||
<%= transaction.block.timestamp |> Timex.from_now %> |
|
||||||
</td> |
|
||||||
<td class="address-cell"> |
|
||||||
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: transaction.from_address %> |
|
||||||
</td> |
|
||||||
<td class="u-text-center"><i class="fas fa-arrow-circle-right"></i></td> |
|
||||||
<td> |
|
||||||
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: transaction.to_address %> |
|
||||||
</td> |
|
||||||
<td> |
|
||||||
<%= ExplorerWeb.TransactionView.value(transaction) %> |
|
||||||
</td> |
|
||||||
</tr> |
|
||||||
<% end %> |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<div class="blocks__pagination"> |
|
||||||
<%= pagination_links( |
|
||||||
@conn, |
|
||||||
@page, |
|
||||||
["en", @conn.params["block_id"]], |
|
||||||
distance: 1, |
|
||||||
first: true, |
|
||||||
next: Phoenix.HTML.raw("›"), |
|
||||||
path: &block_transaction_path/5, |
|
||||||
previous: Phoenix.HTML.raw("‹"), |
|
||||||
view_style: :bulma |
|
||||||
) %></div> |
|
||||||
</section> |
</section> |
||||||
|
@ -1,31 +1,31 @@ |
|||||||
<div class="panels container__subsection container__subsection-chain"> |
<div class="card"> |
||||||
<div class="panels__container panels__container--title"> |
<div class="card-body"> |
||||||
<%= link(gettext("View All"), to: block_path(@conn, :index, Gettext.get_locale), class: "button button--secondary button--xsmall u-float-right") %> |
<%= link(gettext("View All"), to: block_path(@conn, :index, Gettext.get_locale), class: "button button--secondary button--xsmall u-float-right") %> |
||||||
<h2 class="panels__title"><%= gettext "Blocks" %></h2> |
<h2 class="card-title"><%= gettext "Blocks" %></h2> |
||||||
|
<table class="table table-font table-responsive-lg"> |
||||||
|
<thead> |
||||||
|
<th><%= gettext "Height" %></th> |
||||||
|
<th><%= gettext "Age" %></th> |
||||||
|
<th><%= gettext "TXNs" %></th> |
||||||
|
<th><%= gettext "Gas" %></th> |
||||||
|
<th><%= gettext "Validator" %></th> |
||||||
|
</thead> |
||||||
|
<tbody> |
||||||
|
<%= for block <- @chain.blocks do %> |
||||||
|
<tr data-test="chain_block"> |
||||||
|
<td> |
||||||
|
<img src="<%= static_path(@conn, "/images/block.svg") %>" /> |
||||||
|
<%= link(block, to: block_path(@conn, :show, @conn.assigns.locale, block)) %> |
||||||
|
</td> |
||||||
|
<td><%= block.timestamp |> Timex.from_now %></td> |
||||||
|
<td><%= block.transactions |> Enum.count %></td> |
||||||
|
<td><%= block.gas_used |> Cldr.Number.to_string! %></td> |
||||||
|
<td> |
||||||
|
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: block.miner %> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
<% end %> |
||||||
|
</tbody> |
||||||
|
</table> |
||||||
</div> |
</div> |
||||||
<table class="table table-font table-responsive-sm"> |
|
||||||
<thead> |
|
||||||
<th><%= gettext "Height" %></th> |
|
||||||
<th><%= gettext "Age" %></th> |
|
||||||
<th><%= gettext "TXNs" %></th> |
|
||||||
<th><%= gettext "Gas" %></th> |
|
||||||
<th><%= gettext "Validator" %></th> |
|
||||||
</thead> |
|
||||||
<tbody> |
|
||||||
<%= for block <- @chain.blocks do %> |
|
||||||
<tr data-test="chain_block"> |
|
||||||
<td> |
|
||||||
<img src="<%= static_path(@conn, "/images/block.svg") %>" /> |
|
||||||
<%= link(block, to: block_path(@conn, :show, @conn.assigns.locale, block)) %> |
|
||||||
</td> |
|
||||||
<td><%= block.timestamp |> Timex.from_now %></td> |
|
||||||
<td><%= block.transactions |> Enum.count %></td> |
|
||||||
<td><%= block.gas_used |> Cldr.Number.to_string! %></td> |
|
||||||
<td> |
|
||||||
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: block.miner %> |
|
||||||
</td> |
|
||||||
</tr> |
|
||||||
<% end %> |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
</div> |
</div> |
||||||
|
@ -1,32 +1,32 @@ |
|||||||
<div class="panels container__subsection container__subsection-chain"> |
<div class="card"> |
||||||
<div class="panels__container panels__container--title"> |
<div class="card-body"> |
||||||
<%= link(gettext("View All"), to: transaction_path(@conn, :index, Gettext.get_locale), class: "button button--secondary button--xsmall u-float-right") %> |
<%= link(gettext("View All"), to: transaction_path(@conn, :index, Gettext.get_locale), class: "button button--secondary button--xsmall u-float-right") %> |
||||||
<h2 class="panels__title"><%= gettext "Transactions" %></h2> |
<h2 class="card-title"><%= gettext "Transactions" %></h2> |
||||||
|
<table class="table table-font table-responsive-lg"> |
||||||
|
<thead> |
||||||
|
<th><%= gettext "TX Hash" %></th> |
||||||
|
<th><%= gettext "From" %></th> |
||||||
|
<th><%= gettext "To" %></th> |
||||||
|
<th><%= gettext "Value" %> (<%= gettext "Ether" %>)</th> |
||||||
|
<th><%= gettext "Age" %></th> |
||||||
|
</thead> |
||||||
|
<tbody> |
||||||
|
<%= for transaction <- @chain.transactions do %> |
||||||
|
<tr data-test="chain_transaction"> |
||||||
|
<td> |
||||||
|
<%= render ExplorerWeb.TransactionView, "_link.html", conn: @conn, transaction: transaction %> |
||||||
|
</td> |
||||||
|
<td> |
||||||
|
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: transaction.from_address %> |
||||||
|
</td> |
||||||
|
<td> |
||||||
|
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: transaction.to_address %> |
||||||
|
</td> |
||||||
|
<td><%= ExplorerWeb.TransactionView.value(transaction, include_label: false) %> </td> |
||||||
|
<td><%= transaction.block.timestamp |> Timex.from_now() %></td> |
||||||
|
</tr> |
||||||
|
<% end %> |
||||||
|
</tbody> |
||||||
|
</table> |
||||||
</div> |
</div> |
||||||
<table class="table table-font table-responsive-sm"> |
|
||||||
<thead> |
|
||||||
<th><%= gettext "TX Hash" %></th> |
|
||||||
<th><%= gettext "From" %></th> |
|
||||||
<th><%= gettext "To" %></th> |
|
||||||
<th><%= gettext "Value" %> (<%= gettext "Ether" %>)</th> |
|
||||||
<th><%= gettext "Age" %></th> |
|
||||||
</thead> |
|
||||||
<tbody> |
|
||||||
<%= for transaction <- @chain.transactions do %> |
|
||||||
<tr data-test="chain_transaction"> |
|
||||||
<td> |
|
||||||
<%= render ExplorerWeb.TransactionView, "_link.html", conn: @conn, transaction: transaction %> |
|
||||||
</td> |
|
||||||
<td> |
|
||||||
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: transaction.from_address %> |
|
||||||
</td> |
|
||||||
<td> |
|
||||||
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: transaction.to_address %> |
|
||||||
</td> |
|
||||||
<td><%= ExplorerWeb.TransactionView.value(transaction, include_label: false) %> </td> |
|
||||||
<td><%= transaction.block.timestamp |> Timex.from_now() %></td> |
|
||||||
</tr> |
|
||||||
<% end %> |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
</div> |
</div> |
||||||
|
@ -1,49 +1,59 @@ |
|||||||
<section> |
<section class="container-fluid"> |
||||||
<section class="container__section container__section--partitioned"> |
<div class="d-flex flex-md-row flex-column"> |
||||||
<div class="container__stats"> |
<div class="container__stats card mr-sm-4 mb-4 mb-sm-0"> |
||||||
<div> |
<div class="card-body d-flex flex-md-column justify-content-around"> |
||||||
<%= render ExplorerWeb.IconsView, "_block_icon.html", assigns %> |
<div class="d-flex flex-column justify-content-center align-items-center"> |
||||||
<div><%= gettext("Block") %></div> |
<%= render ExplorerWeb.IconsView, "_block_icon.html", assigns %> |
||||||
<div> #<%= @chain.number %></div> |
<div><%= gettext("Block") %></div> |
||||||
</div> |
<div> #<%= @chain.number %></div> |
||||||
<div> |
</div> |
||||||
<%= render ExplorerWeb.IconsView, "_hourglass_icon.html", assigns %> |
<div class="d-flex flex-column justify-content-center align-items-center"> |
||||||
<div> <%= gettext("Last Block") %></div> |
<%= render ExplorerWeb.IconsView, "_hourglass_icon.html", assigns %> |
||||||
<div> <%= @chain.timestamp |> Timex.from_now() %></div> |
<div> <%= gettext("Last Block") %></div> |
||||||
</div> |
<div> <%= @chain.timestamp |> Timex.from_now() %></div> |
||||||
<div> |
|
||||||
<div class="stroke"> <%= render ExplorerWeb.IconsView, "_guage_icon.html", assigns %> </div> |
|
||||||
<div><%= gettext("Avg Block Time") %></div> |
|
||||||
<%= @chain.average_time |> Timex.format_duration(:humanized) %> |
|
||||||
</div> |
|
||||||
<div> |
|
||||||
<%= render ExplorerWeb.IconsView, "_transaction_icon.html", assigns %> |
|
||||||
<div> <%= gettext("TPM") %></div> |
|
||||||
<div> <%= @chain.transaction_velocity |> Cldr.Number.to_string! %></div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<div class="chain container__subsection container__subsection-chain"> |
|
||||||
<canvas data-chart="marketHistoryChart" data-current_exchange_rate ='<%= @exchange_rate.usd_value %>' data-available_supply='<%= @exchange_rate.available_supply %>' data-market_history_data='<%=raw encode_market_history_data(@market_history_data) %>' width="300" height="100"></canvas> |
|
||||||
<div class="graph-flex"> |
|
||||||
<div class="u-push-md-left"> |
|
||||||
<div class="graph__squares graph__squares--price"></div> |
|
||||||
<%= gettext "Price" %> </br> |
|
||||||
<%= format_exchange_rate(@exchange_rate) %> |
|
||||||
</div> |
</div> |
||||||
<div> |
<div class="d-flex flex-column justify-content-center align-items-center"> |
||||||
<div class="graph__squares graph__squares--mcap"></div> |
<div class="stroke"> <%= render ExplorerWeb.IconsView, "_guage_icon.html", assigns %> </div> |
||||||
<%= gettext "Market Cap" %> </br> |
<div><%= gettext("Avg Block Time") %></div> |
||||||
<%= format_market_cap(@exchange_rate) %> |
<%= @chain.average_time |> Timex.format_duration(:humanized) %> |
||||||
</div> |
</div> |
||||||
<div class="u-push-md-right"> |
<div class="d-flex flex-column justify-content-center align-items-center"> |
||||||
<%= gettext "24h Volume" %> </br> |
<%= render ExplorerWeb.IconsView, "_transaction_icon.html", assigns %> |
||||||
<%= format_volume_24h(@exchange_rate) %> |
<div> <%= gettext("TPM") %></div> |
||||||
|
<div> <%= @chain.transaction_velocity |> Cldr.Number.to_string! %></div> |
||||||
</div> |
</div> |
||||||
</div> |
</div> |
||||||
</div> |
</div> |
||||||
</section> |
|
||||||
</section> |
<div class="container__graph card"> |
||||||
<section class="container__section container__section--partitioned"> |
<div class="card-body"> |
||||||
<%= render ExplorerWeb.ChainView, "_blocks.html", assigns %> |
<canvas data-chart="marketHistoryChart" data-current_exchange_rate ='<%= @exchange_rate.usd_value %>' data-available_supply='<%= @exchange_rate.available_supply %>' data-market_history_data='<%=raw encode_market_history_data(@market_history_data) %>' width="300" height="100"></canvas> |
||||||
<%= render ExplorerWeb.ChainView, "_transactions.html", assigns %> |
<div class="d-flex justify-content-sm-around mt-2 text-muted"> |
||||||
|
<div> |
||||||
|
<div class="graph__squares graph__squares--price"></div> |
||||||
|
<%= gettext "Price" %> </br> |
||||||
|
$<%= format_exchange_rate(@exchange_rate) %> <%= gettext "USD" %> |
||||||
|
</div> |
||||||
|
<div class="mx-2"> |
||||||
|
<div class="graph__squares graph__squares--mcap"></div> |
||||||
|
<%= gettext "Market Cap" %> </br> |
||||||
|
$<%= format_market_cap(@exchange_rate) %> <%= gettext "USD" %> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<%= gettext "24h Volume" %> </br> |
||||||
|
$<%= format_volume_24h(@exchange_rate) %> <%= gettext "USD" %> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="row my-4"> |
||||||
|
<div class="col-md-6 mb-4 mb-md-0"> |
||||||
|
<%= render ExplorerWeb.ChainView, "_blocks.html", assigns %> |
||||||
|
</div> |
||||||
|
<div class="col-md-6"> |
||||||
|
<%= render ExplorerWeb.ChainView, "_transactions.html", assigns %> |
||||||
|
</div> |
||||||
|
</div> |
||||||
</section> |
</section> |
||||||
|
@ -1,37 +1,36 @@ |
|||||||
<header class="header"> |
<header class="header"> |
||||||
<div class="header__row header__row--search"> |
<div class="header__row header__row--search"> |
||||||
<div class="header__cell header__cell--search"> |
<div class="header__cell header__cell--search"> |
||||||
<%= form_for @conn, chain_path(@conn, :search, Gettext.get_locale), [class: "header__cell--search-form", method: :get, enforce_utf8: false], fn f -> %> |
<%= form_for @conn, chain_path(@conn, :search, Gettext.get_locale), [class: "header__cell--search-form", method: :get, enforce_utf8: false], fn f -> %> |
||||||
<i class="header__cell--search-glass fa fa-search"></i> |
<i class="header__cell--search-glass fa fa-search"></i> |
||||||
<%= search_input f, :q, class: 'header__cell--search-input', placeholder: gettext("Search by address, transaction hash, or block number"), "data-test": "search_input" %> |
<%= search_input f, :q, class: 'header__cell--search-input', placeholder: gettext("Search by address, transaction hash, or block number"), "data-test": "search_input" %> |
||||||
<% end %> |
<% end %> |
||||||
</div> |
|
||||||
</div> |
</div> |
||||||
<div class="header__row header__row--topnav"> |
</div> |
||||||
<div class="header__cell header__cell--links" align="right"> |
|
||||||
<%= link to: chain_path(@conn, :show) do %> |
<nav class="header__row header__row--topnav"> |
||||||
<div tabindex="0"> |
<ul class="nav"> |
||||||
<i class="fas fa-home fa-2x"></i> |
<li class="nav-item"> |
||||||
</div> |
<%= link to: chain_path(@conn, :show), class: "nav-link" do %> |
||||||
|
<i class="fas fa-home fa-2x text-muted"></i> |
||||||
<% end %> |
<% end %> |
||||||
</div> |
</li> |
||||||
<div class="header__cell header__cell--links" align="right"> |
<li calss="nav-item"> |
||||||
<%= link to: block_path(@conn, :index, Gettext.get_locale) do %> |
<%= link to: block_path(@conn, :index, Gettext.get_locale), class: "nav-link" do %> |
||||||
<div tabindex="0"> |
<img src="<%= static_path(@conn, "/images/block.svg") %>" /> |
||||||
<img src="<%= static_path(@conn, "/images/block.svg") %>" /> |
<%= gettext("Blocks") %> |
||||||
<%= gettext("Blocks") %> |
|
||||||
</div> |
|
||||||
<% end %> |
<% end %> |
||||||
</div> |
</li> |
||||||
<div class="header__cell header__cell--links dropdown"> |
<li calss="nav-item dropdown"> |
||||||
<a class="dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
||||||
<img src="<%= static_path(@conn, "/images/transaction.svg") %>" /> |
<img src="<%= static_path(@conn, "/images/transaction.svg") %>" /> |
||||||
<%= gettext("Transactions") %> |
<%= gettext("Transactions") %> |
||||||
</a> |
</a> |
||||||
<div class="dropdown-menu topnav-dropdown" aria-labelledby="navbarDropdown"> |
<div class="dropdown-menu" aria-labelledby="navbarDropdown"> |
||||||
<%= link(gettext("Validated"), to: transaction_path(@conn, :index, Gettext.get_locale), class: "dropdown-item topnav-dropdown-items") %> |
<%= link(gettext("Validated"), to: transaction_path(@conn, :index, Gettext.get_locale), class: "dropdown-item") %> |
||||||
<%= link(gettext("Pending"), to: pending_transaction_path(@conn, :index, Gettext.get_locale), class: "dropdown-item topnav-dropdown-items") %> |
<%= link(gettext("Pending"), to: pending_transaction_path(@conn, :index, Gettext.get_locale), class: "dropdown-item") %> |
||||||
</div> |
</div> |
||||||
</div> |
</li> |
||||||
</div> |
</ul> |
||||||
|
</nav> |
||||||
</header> |
</header> |
||||||
|
@ -1,160 +1,165 @@ |
|||||||
<h1><%= gettext "Transaction Details" %></h1> |
<section> |
||||||
<p data-test="transaction_detail_hash"><%= @transaction %></p> |
<h1><%= gettext "Transaction Details" %></h1> |
||||||
<div class="panels container__subsection"> |
<p data-test="transaction_detail_hash"><%= @transaction %></p> |
||||||
<div class="panels__container row"> |
|
||||||
<div class="col-md-6"> |
<div class="card mb-3"> |
||||||
<table class="table table-font table-responsive-sm table-horizontal"> |
<div class="card-body"> |
||||||
<tbody> |
<div class="row"> |
||||||
<tr> |
<div class="col-md-6"> |
||||||
<th scope="row"> |
<table class="table table-font table-responsive-sm table-horizontal"> |
||||||
<%= gettext "Transaction Status" %> |
<tbody> |
||||||
</th> |
<tr> |
||||||
<td> |
<th scope="row"> |
||||||
<%= formatted_status(@transaction) %> |
<%= gettext "Transaction Status" %> |
||||||
<div class="transaction__dot transaction__dot--<%= status(@transaction) %>"></div> |
</th> |
||||||
</td> |
<td> |
||||||
</tr> |
<%= formatted_status(@transaction) %> |
||||||
<tr> |
<div class="transaction__dot transaction__dot--<%= status(@transaction) %>"></div> |
||||||
<th scope="row"> |
</td> |
||||||
<%= gettext "Block Number" %> |
</tr> |
||||||
</th> |
<tr> |
||||||
<td> |
<th scope="row"> |
||||||
<% block = @transaction.block %> |
<%= gettext "Block Number" %> |
||||||
<%= if block do %> |
</th> |
||||||
<%= link( |
<td> |
||||||
block, |
<% block = @transaction.block %> |
||||||
class: "transaction__link", |
<%= if block do %> |
||||||
to: block_path(@conn, :show, @conn.assigns.locale, block) |
<%= link( |
||||||
) %> |
block, |
||||||
<% end %> |
class: "transaction__link", |
||||||
(<%= gettext "%{confirmations} block confirmations", confirmations: confirmations(@transaction, max_block_number: @max_block_number) %>) |
to: block_path(@conn, :show, @conn.assigns.locale, block) |
||||||
</td> |
) %> |
||||||
</tr> |
<% end %> |
||||||
<tr> |
(<%= gettext "%{confirmations} block confirmations", confirmations: confirmations(@transaction, max_block_number: @max_block_number) %>) |
||||||
<th scope="row"> |
</td> |
||||||
<%= gettext "Age" %> |
</tr> |
||||||
</th> |
<tr> |
||||||
<td title="<%= formatted_timestamp(@transaction) %>"> |
<th scope="row"> |
||||||
<%= formatted_age(@transaction) %> |
<%= gettext "Age" %> |
||||||
</td> |
</th> |
||||||
</tr> |
<td title="<%= formatted_timestamp(@transaction) %>"> |
||||||
<tr> |
<%= formatted_age(@transaction) %> |
||||||
<th scope="row"> |
</td> |
||||||
<%= gettext "Value" %> |
</tr> |
||||||
</th> |
<tr> |
||||||
<td> |
<th scope="row"> |
||||||
<div><%= value(@transaction) %> </div> |
<%= gettext "Value" %> |
||||||
<div><%= formatted_usd_value(@transaction, @exchange_rate) %></div> |
</th> |
||||||
</td> |
<td> |
||||||
</tr> |
<div><%= value(@transaction) %> </div> |
||||||
<tr> |
<div><%= formatted_usd_value(@transaction, @exchange_rate) %></div> |
||||||
<th scope="row"> |
</td> |
||||||
<%= gettext "From" %> |
</tr> |
||||||
</th> |
<tr> |
||||||
<td> |
<th scope="row"> |
||||||
<%= if @transaction.from_address do %> |
<%= gettext "From" %> |
||||||
<%= link( |
</th> |
||||||
@transaction.from_address, |
<td> |
||||||
class: "transaction__link", |
<%= if @transaction.from_address do %> |
||||||
to: address_path(@conn, :show, @conn.assigns.locale, @transaction.from_address) |
<%= link( |
||||||
) %> |
@transaction.from_address, |
||||||
<% else %> |
class: "transaction__link", |
||||||
<%= gettext "Pending" %> |
to: address_path(@conn, :show, @conn.assigns.locale, @transaction.from_address) |
||||||
<% end %> |
) %> |
||||||
</td> |
<% else %> |
||||||
</tr> |
<%= gettext "Pending" %> |
||||||
<tr> |
<% end %> |
||||||
<th scope="row"> |
</td> |
||||||
<%= gettext "To" %> |
</tr> |
||||||
</th> |
<tr> |
||||||
<td> |
<th scope="row"> |
||||||
<%= if @transaction.to_address do %> |
<%= gettext "To" %> |
||||||
<%= link( |
</th> |
||||||
@transaction.to_address, |
<td> |
||||||
class: "transaction__link", |
<%= if @transaction.to_address do %> |
||||||
to: address_path(@conn, :show, @conn.assigns.locale, @transaction.to_address) |
<%= link( |
||||||
) %> |
@transaction.to_address, |
||||||
<% else %> |
class: "transaction__link", |
||||||
<%= gettext "Pending" %> |
to: address_path(@conn, :show, @conn.assigns.locale, @transaction.to_address) |
||||||
<% end %> |
) %> |
||||||
</td> |
<% else %> |
||||||
</tr> |
<%= gettext "Pending" %> |
||||||
<tr> |
<% end %> |
||||||
<th scope="row"> |
</td> |
||||||
<%= gettext "Nonce" %> |
</tr> |
||||||
</th> |
<tr> |
||||||
<td> |
<th scope="row"> |
||||||
<%= @transaction.nonce %> |
<%= gettext "Nonce" %> |
||||||
</td> |
</th> |
||||||
</tr> |
<td> |
||||||
</tbody> |
<%= @transaction.nonce %> |
||||||
</table> |
</td> |
||||||
</div> |
</tr> |
||||||
<div class="col-md-6"> |
</tbody> |
||||||
<table class="table table-font table-responsive-sm table-horizontal"> |
</table> |
||||||
<tbody> |
</div> |
||||||
<tr> |
<div class="col-md-6"> |
||||||
<th scope="row"> |
<table class="table table-font table-responsive-sm table-horizontal"> |
||||||
<%= gettext "First Seen" %> |
<tbody> |
||||||
</th> |
<tr> |
||||||
<% first_seen = first_seen(@transaction) %> |
<th scope="row"> |
||||||
<td title="<%= first_seen %>"> |
<%= gettext "First Seen" %> |
||||||
<%= first_seen %> |
</th> |
||||||
</td> |
<% first_seen = first_seen(@transaction) %> |
||||||
</tr> |
<td title="<%= first_seen %>"> |
||||||
<tr> |
<%= first_seen %> |
||||||
<th scope="row"> |
</td> |
||||||
<%= gettext "Last Seen" %> |
</tr> |
||||||
</th> |
<tr> |
||||||
<% last_seen = last_seen(@transaction) %> |
<th scope="row"> |
||||||
<td title="<%= last_seen %>"> |
<%= gettext "Last Seen" %> |
||||||
<%= last_seen %> |
</th> |
||||||
</td> |
<% last_seen = last_seen(@transaction) %> |
||||||
</tr> |
<td title="<%= last_seen %>"> |
||||||
<tr> |
<%= last_seen %> |
||||||
<th scope="row"> |
</td> |
||||||
<%= gettext "Gas Limit" %> |
</tr> |
||||||
</th> |
<tr> |
||||||
<td title="<%= last_seen %>"> |
<th scope="row"> |
||||||
<%= format_gas_limit(@transaction.gas) %> <%= gettext("Gas") %> |
<%= gettext "Gas Limit" %> |
||||||
</td> |
</th> |
||||||
</tr> |
<td title="<%= format_gas_limit(@transaction.gas) %>"> |
||||||
<tr> |
<%= format_gas_limit(@transaction.gas) %> <%= gettext("Gas") %> |
||||||
<th scope="row"> |
</td> |
||||||
<%= gettext "Gas Price" %> |
</tr> |
||||||
</th> |
<tr> |
||||||
<td title="<%= last_seen %>"> |
<th scope="row"> |
||||||
<%= gas_price(@transaction, :ether) %> |
<%= gettext "Gas Price" %> |
||||||
(<%= gas_price(@transaction, :gwei) %>) |
</th> |
||||||
</td> |
<td title="<%= gas_price(@transaction, :wei) %>"> |
||||||
</tr> |
<%= gas_price(@transaction, :wei) %> |
||||||
<tr> |
(<%= gas_price(@transaction, :gwei) %>) |
||||||
<th scope="row"> |
</td> |
||||||
<%= gettext "TX Fee" %> |
</tr> |
||||||
</th> |
<tr> |
||||||
<td> |
<th scope="row"> |
||||||
<div><%= formatted_fee(@transaction, denomination: :ether) %></div> |
<%= gettext "TX Fee" %> |
||||||
<div><%= formatted_fee(@transaction, exchange_rate: @exchange_rate) %></div> |
</th> |
||||||
</td> |
<td> |
||||||
</tr> |
<div><%= formatted_fee(@transaction, denomination: :ether) %></div> |
||||||
<tr> |
<div><%= formatted_fee(@transaction, exchange_rate: @exchange_rate) %></div> |
||||||
<th scope="row"> |
</td> |
||||||
<%= gettext "Total Gas Used" %> |
</tr> |
||||||
</th> |
<tr> |
||||||
<td title="<%= last_seen %>"> |
<th scope="row"> |
||||||
<%= cumulative_gas_used(@transaction) %> <%= gettext("Wei") %> |
<%= gettext "Total Gas Used" %> |
||||||
</td> |
</th> |
||||||
</tr> |
<td title="<%= cumulative_gas_used(@transaction) %>"> |
||||||
<tr> |
<%= cumulative_gas_used(@transaction) %> <%= gettext("Wei") %> |
||||||
<th scope="row"> |
</td> |
||||||
<%= gettext "Input" %> |
</tr> |
||||||
</th> |
<tr> |
||||||
<td title="<%= @transaction.input %>"> |
<th scope="row"> |
||||||
<%= @transaction.input %> |
<%= gettext "Input" %> |
||||||
</td> |
</th> |
||||||
</tr> |
<td title="<%= @transaction.input %>"> |
||||||
</tbody> |
<%= @transaction.input %> |
||||||
</table> |
</td> |
||||||
|
</tr> |
||||||
|
</tbody> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
</div> |
</div> |
||||||
</div> |
</div> |
||||||
</div> |
</section> |
||||||
|
@ -1,54 +1,58 @@ |
|||||||
<section class="container__section"> |
<section class="container-fluid"> |
||||||
|
|
||||||
<%= render ExplorerWeb.TransactionView, "overview.html", assigns %> |
<%= render ExplorerWeb.TransactionView, "overview.html", assigns %> |
||||||
<div> |
|
||||||
<ul class="nav nav-tabs"> |
<section> |
||||||
<li class="nav-item"> |
<div class="card"> |
||||||
<%= link( |
<div class="card-header"> |
||||||
gettext("Internal Transactions"), |
<ul class="nav nav-tabs card-header-tabs"> |
||||||
class: "nav-link active", |
<li class="nav-item"> |
||||||
to: transaction_path(@conn, :show, @conn.assigns.locale, @transaction) |
<%= link( |
||||||
) %> |
gettext("Internal Transactions"), |
||||||
</li> |
class: "nav-link active", |
||||||
<li class="nav-item"> |
to: transaction_path(@conn, :show, @conn.assigns.locale, @transaction) |
||||||
<%= link( |
) %> |
||||||
gettext("Logs"), |
</li> |
||||||
class: "nav-link", |
<li class="nav-item"> |
||||||
to: transaction_log_path(@conn, :index, @conn.assigns.locale, @transaction), |
<%= link( |
||||||
"data-test": "transaction_logs_link" |
gettext("Logs"), |
||||||
) %> |
class: "nav-link", |
||||||
</li> |
to: transaction_log_path(@conn, :index, @conn.assigns.locale, @transaction), |
||||||
</ul> |
"data-test": "transaction_logs_link" |
||||||
</div> |
) %> |
||||||
<div class="panels container__subsection"> |
</li> |
||||||
<div class="panels__container"> |
</ul> |
||||||
<%= if length(@internal_transactions.entries) > 0 do %> |
</div> |
||||||
<table class="table table-responsive-sm table-font"> |
<div class="card-body"> |
||||||
<thead> |
<%= if length(@internal_transactions.entries) > 0 do %> |
||||||
<th><%= gettext "Type" %></th> |
<table class="table table-responsive-sm table-font"> |
||||||
<th><%= gettext "From" %></th> |
<thead> |
||||||
<th><%= gettext "To" %></th> |
<th><%= gettext "Type" %></th> |
||||||
<th><%= gettext "Value" %> (<%= gettext "Ether" %>)</th> |
<th><%= gettext "From" %></th> |
||||||
<th><%= gettext "Gas Limit" %> (<%= gettext "Gas" %>)</th> |
<th><%= gettext "To" %></th> |
||||||
</thead> |
<th><%= gettext "Value" %> (<%= gettext "Ether" %>)</th> |
||||||
<%= for transaction <- @internal_transactions do %> |
<th><%= gettext "Gas Limit" %> (<%= gettext "Gas" %>)</th> |
||||||
<tgroup> |
</thead> |
||||||
<tr> |
<%= for transaction <- @internal_transactions do %> |
||||||
<td><%= transaction.call_type %></td> |
<tgroup> |
||||||
<td> |
<tr> |
||||||
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: transaction.from_address %> |
<td><%= transaction.call_type %></td> |
||||||
</td> |
<td> |
||||||
<td> |
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: transaction.from_address %> |
||||||
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: transaction.to_address %> |
</td> |
||||||
</td> |
<td> |
||||||
<td><%= value(transaction, include_label: false) %></td> |
<%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: transaction.to_address %> |
||||||
<td><%= gas(transaction) %></td> |
</td> |
||||||
</tr> |
<td><%= value(transaction, include_label: false) %></td> |
||||||
</tgroup> |
<td><%= gas(transaction) %></td> |
||||||
<% end %> |
</tr> |
||||||
</table> |
</tgroup> |
||||||
<% else %> |
<% end %> |
||||||
<p><%= gettext "There are no Internal Transactions" %></p> |
</table> |
||||||
<% end %> |
<% else %> |
||||||
|
<p><%= gettext "There are no Internal Transactions" %></p> |
||||||
|
<% end %> |
||||||
|
</div> |
||||||
</div> |
</div> |
||||||
</div> |
</section> |
||||||
</section> |
</section> |
||||||
|
@ -1,68 +1,72 @@ |
|||||||
<section class="container__section"> |
<section class="container-fluid"> |
||||||
|
|
||||||
<%= render ExplorerWeb.TransactionView, "overview.html", assigns %> |
<%= render ExplorerWeb.TransactionView, "overview.html", assigns %> |
||||||
<div> |
|
||||||
<ul class="nav nav-tabs"> |
<section> |
||||||
<li class="nav-item"> |
<div class="card"> |
||||||
<%= link( |
<div class="card-header"> |
||||||
gettext("Internal Transactions"), |
<ul class="nav nav-tabs card-header-tabs"> |
||||||
class: "nav-link", |
<li class="nav-item"> |
||||||
to: transaction_path(@conn, :show, @conn.assigns.locale, @transaction) |
<%= link( |
||||||
) %> |
gettext("Internal Transactions"), |
||||||
</li> |
class: "nav-link", |
||||||
<li class="nav-item"> |
to: transaction_path(@conn, :show, @conn.assigns.locale, @transaction) |
||||||
<%= link( |
) %> |
||||||
gettext("Logs"), |
</li> |
||||||
class: "nav-link active", |
<li class="nav-item"> |
||||||
to: transaction_log_path(@conn, :index, @conn.assigns.locale, @transaction) |
<%= link( |
||||||
) %> |
gettext("Logs"), |
||||||
</li> |
class: "nav-link active", |
||||||
</ul> |
to: transaction_log_path(@conn, :index, @conn.assigns.locale, @transaction) |
||||||
</div> |
) %> |
||||||
<div class="panels container__subsection"> |
</li> |
||||||
<div class="panels__container"> |
</ul> |
||||||
<%= if length(@logs.entries) > 0 do %> |
</div> |
||||||
<table class="table table-responsive-sm table-font"> |
<div class="card-body"> |
||||||
<thead> |
<%= if length(@logs.entries) > 0 do %> |
||||||
<th><%= gettext "Address" %></th> |
<table class="table table-responsive-sm table-font"> |
||||||
<th><%= gettext "Topic" %></th> |
<thead> |
||||||
</thead> |
<th><%= gettext "Address" %></th> |
||||||
<%= for log <- @logs.entries do %> |
<th><%= gettext "Topic" %></th> |
||||||
<tgroup> |
</thead> |
||||||
<tr data-test="transaction_log"> |
<%= for log <- @logs.entries do %> |
||||||
<td> |
<tgroup> |
||||||
<%= link( |
<tr data-test="transaction_log"> |
||||||
log.address, |
<td> |
||||||
to: address_path(@conn, :show, @conn.assigns.locale, log.address), |
<%= link( |
||||||
"data-test": "log_address_link", |
log.address, |
||||||
"data-address-hash": log.address |
to: address_path(@conn, :show, @conn.assigns.locale, log.address), |
||||||
) %> |
"data-test": "log_address_link", |
||||||
</td> |
"data-address-hash": log.address |
||||||
<td><%= log.first_topic %></td> |
) %> |
||||||
</tr> |
</td> |
||||||
<% unless is_nil(log.second_topic) do %> |
<td><%= log.first_topic %></td> |
||||||
<tr> |
|
||||||
<td>topic[1]</td> |
|
||||||
<td><%= log.second_topic %></td> |
|
||||||
</tr> |
</tr> |
||||||
<% end %> |
<% unless is_nil(log.second_topic) do %> |
||||||
<% unless is_nil(log.third_topic) do %> |
<tr> |
||||||
<tr> |
<td>topic[1]</td> |
||||||
<td>topic[2]</td> |
<td><%= log.second_topic %></td> |
||||||
<td><%= log.third_topic %></td> |
</tr> |
||||||
</tr> |
<% end %> |
||||||
<% end %> |
<% unless is_nil(log.third_topic) do %> |
||||||
<% unless is_nil(log.data) do %> |
<tr> |
||||||
<tr> |
<td>topic[2]</td> |
||||||
<td>↠</td> |
<td><%= log.third_topic %></td> |
||||||
<td><%= log.data %></td> |
</tr> |
||||||
</tr> |
<% end %> |
||||||
<% end %> |
<% unless is_nil(log.data) do %> |
||||||
</tgroup> |
<tr> |
||||||
<% end %> |
<td>↠</td> |
||||||
</table> |
<td><%= log.data %></td> |
||||||
<% else %> |
</tr> |
||||||
<p><%= gettext "There are no logs currently." %></p> |
<% end %> |
||||||
<% end %> |
</tgroup> |
||||||
|
<% end %> |
||||||
|
</table> |
||||||
|
<% else %> |
||||||
|
<p><%= gettext "There are no logs currently." %></p> |
||||||
|
<% end %> |
||||||
|
</div> |
||||||
</div> |
</div> |
||||||
</div> |
</section> |
||||||
</section> |
</section> |
||||||
|
Loading…
Reference in new issue