package web import ( "strconv" "gl/application/explorer" "gl/domain/ledger" ) templ Page(title string, active string, locale Locale, englishURL string, persianURL string, content templ.Component) { { title } · { tr(locale, "site_name") }
{ tr(locale, "site_name") } { tr(locale, "site_subtitle") }
@content } templ TransactionSearch(value string, locale Locale) { } templ DashboardContent(data explorer.Dashboard, locale Locale) {
{ tr(locale, "general_ledger_explorer") }

{ tr(locale, "hero_line_one") }
{ tr(locale, "hero_line_two") }

{ tr(locale, "hero_description") }

@TransactionSearch("", locale)
{ tr(locale, "committed_journals") }{ count(data.Stats.JournalCount) }
{ tr(locale, "ledger_entries") }{ count(data.Stats.EntryCount) }
{ tr(locale, "tracked_accounts") }{ count(data.Stats.AccountCount) }
{ tr(locale, "last_recorded") }

{ tr(locale, "latest_activity") }

{ tr(locale, "newest_first") }
@JournalTable(data.Journals, locale)
} templ AssetsContent(data explorer.Assets, locale Locale) {
{ tr(locale, "assets_explorer") }

{ tr(locale, "track_asset_ownership") }

{ tr(locale, "assets_description") }

{ tr(locale, "top_asset_holders") }

{ tr(locale, "holder_balance_scope") }
@HolderTable(data.TopHolders, locale)
} templ HolderTable(holders []explorer.Holder, locale Locale) {
if len(holders) == 0 {
{ tr(locale, "no_asset_holders") }
} else { for _, holder := range holders { }
{ tr(locale, "asset") }{ tr(locale, "rank") }{ tr(locale, "holder") }{ tr(locale, "balance") }
{ tr(locale, "asset") } { strconv.FormatInt(holder.AssetID, 10) } #{ strconv.FormatInt(holder.Rank, 10) } { holder.OwnerID }{ holder.OwnerType } { holder.Balance.String() }
}
} templ HolderContent(data HolderPageData, locale Locale) {
{ tr(locale, "holder_account") }

{ tr(locale, "inspect_holder") }

{ tr(locale, "holder_description") }

if data.Error != "" {
{ tr(locale, "account_unavailable") }{ data.Error }
} else if data.Account != nil {
{ tr(locale, "holder") }

{ data.Account.Reference.OwnerID }

{ data.Account.Reference.OwnerType } · { tr(locale, "asset") } { strconv.FormatInt(data.Account.Reference.AssetID, 10) }

{ tr(locale, "combined_balance") }
{ data.Account.Balance.String() }

{ tr(locale, "account_activity") }

{ tr(locale, "available_and_frozen") }
@JournalTable(data.Account.Journals, locale)
}
} templ JournalTable(journals []ledger.Journal, locale Locale) {
if len(journals) == 0 {
{ tr(locale, "no_journals") }
} else { for _, journal := range journals { }
{ tr(locale, "transaction") }{ tr(locale, "effect") }{ tr(locale, "source") }{ tr(locale, "entries") }{ tr(locale, "recorded") }
{ transactionName(journal, locale) } { journal.EffectKind } { journal.SourceService } { strconv.Itoa(len(journal.Entries)) } { formatTime(journal.RecordedAt) }
}
} templ TransactionContent(data TransactionPageData, locale Locale) {
{ tr(locale, "transaction_explorer") }

{ tr(locale, "trace_settlement") }

{ tr(locale, "transaction_description") }

@TransactionSearch(data.Query, locale)
if data.Error != "" {
{ tr(locale, "transaction_not_found") }{ data.Error }
} if data.Query != "" && data.Error == "" {
for _, journal := range data.Journals { @JournalCard(journal, locale) }
} if data.Listing != nil {

{ tr(locale, "latest_transactions") }

{ tr(locale, "page") } { strconv.Itoa(data.Listing.Filter.Page) }
{ tr(locale, "clear_filters") }
@JournalTable(data.Listing.Journals, locale) @Pagination(*data.Listing, locale)
}
} templ Pagination(listing explorer.TransactionListing, locale Locale) { } templ JournalCard(journal ledger.Journal, locale Locale) {
if journal.Blockchain.TransactionHash != "" { { tr(locale, "transaction_hash") } } else { { tr(locale, "journal_id") } }

{ transactionReference(journal) }

{ tr(locale, "committed") }
{ journal.EffectKind }
{ journal.ID }
{ formatTime(journal.RecordedAt) }
{ journal.SourceService } · { journal.SourceTransactionID }
{ journal.Blockchain.Network }
{ journal.Blockchain.LedgerSequence }

{ tr(locale, "balanced_entries") }

for _, entry := range journal.Entries {
#{ strconv.FormatUint(uint64(entry.LineNumber), 10) } if len(entry.Amount.String()) > 0 && entry.Amount.String()[0] == '-' {
{ entry.Amount.String() }
} else {
+{ entry.Amount.String() }
}
}
} templ AccountContent(data AccountPageData, locale Locale) {
{ tr(locale, "account_explorer") }

{ tr(locale, "rebuild_account") }

{ tr(locale, "account_description") }

if data.Error != "" {
{ tr(locale, "account_unavailable") }{ data.Error }
} else if data.Account != nil {
{ tr(locale, "ledger_identity") }

{ accountName(data.Account.Reference, locale) }

{ data.Account.Reference.OwnerType } · { tr(locale, "asset") } { strconv.FormatInt(data.Account.Reference.AssetID, 10) }

{ tr(locale, "current_balance") }
{ data.Account.Balance.String() }

{ tr(locale, "account_activity") }

{ strconv.Itoa(len(data.Account.Journals)) } { tr(locale, "journals") }
@JournalTable(data.Account.Journals, locale) } else {
{ tr(locale, "choose_account") }
}
} templ FailureContent(title string, message string, locale Locale) {
{ tr(locale, "explorer_error") }

{ title }

{ message }

}