179 lines
8.0 KiB
HTML
179 lines
8.0 KiB
HTML
<!doctype html>
|
|
<html lang="id">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>DAFTAR PEMILIH — {{ bp }}</title>
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link href="https://fonts.googleapis.com/css2?family=Saira+Condensed:wght@400&family=EB+Garamond:ital,wght@0,400;1,400&family=JetBrains+Mono:wght@400&display=swap" rel="stylesheet">
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='style.css', v=16) }}">
|
|
</head>
|
|
<body>
|
|
<header class="top-nav">
|
|
<span class="nav-label">DAFTAR</span>
|
|
<span class="wordmark">DATABISNISID</span>
|
|
<span class="nav-label"><a class="nav-link" href="{{ url_for('history') }}">RIWAYAT</a></span>
|
|
</header>
|
|
|
|
<main class="page">
|
|
<section class="hero">
|
|
<p class="caption">PEMILIH BP · SUARA TUNGGAL · STAKE ≥ 1.000 VEX</p>
|
|
<h1 class="display-xl">DAFTAR PEMILIH</h1>
|
|
<p class="caption">PEMINDAIAN TERAKHIR · <span class="ts">{{ scanned }}</span></p>
|
|
</section>
|
|
|
|
<section class="news">
|
|
<span class="news-tag">BERITA</span>
|
|
<h2 class="news-title">DISTRIBUSI BERIKUTNYA</h2>
|
|
<p class="news-date">{{ next_schedule }}</p>
|
|
{% if schedule_recur %}
|
|
<p class="caption">{{ schedule_recur|safe }}</p>
|
|
{% endif %}
|
|
</section>
|
|
|
|
<section class="stats">
|
|
<div class="spec-cell">
|
|
<span class="cell-value">{{ liquid_vex|vex if liquid_vex is not none else '—' }}</span>
|
|
<span class="cell-label">SALDO LIQUID</span>
|
|
</div>
|
|
<div class="spec-cell">
|
|
<span class="cell-value">{{ total_voters }}</span>
|
|
<span class="cell-label">TOTAL PEMILIH</span>
|
|
</div>
|
|
<div class="spec-cell">
|
|
<span class="cell-value">{{ top_staked|vex }}</span>
|
|
<span class="cell-label">STAKE TERTINGGI</span>
|
|
</div>
|
|
</section>
|
|
|
|
<p class="caption stats-note">DAFTAR INI = AKUN SUARA TUNGGAL KE {{ bp }} · STAKE ≥ 1.000 VEX</p>
|
|
|
|
<form class="search" method="get" action="{{ url_for('index') }}">
|
|
<input class="search-input" type="search" name="q" id="search-input"
|
|
value="{{ q }}" placeholder="CARI AKUN..." autocomplete="off">
|
|
<button class="pill" type="submit">CARI</button>
|
|
{% if q %}
|
|
<a class="clear" href="{{ url_for('index') }}">HAPUS</a>
|
|
{% endif %}
|
|
</form>
|
|
|
|
<p class="caption search-result" id="search-result">
|
|
{% if q %}HASIL · {{ filtered_count }} AKUN UNTUK "{{ q }}"{% endif %}
|
|
</p>
|
|
|
|
{% if q %}
|
|
<section class="spec-list voter-list" id="spec-list">
|
|
<div class="list-header">
|
|
<span>RANK</span>
|
|
<span>AKUN</span>
|
|
<span>STAKE (VEX)</span>
|
|
<span>TOTAL REWARD (VEX)</span>
|
|
<span>VOTE TERAKHIR</span>
|
|
</div>
|
|
<div class="list-rows" id="rows">
|
|
{% for r in search_rows %}
|
|
<div class="list-row{% if r.expired %} expired{% endif %}">
|
|
<span class="rank">{{ r.rank }}</span>
|
|
<span class="owner"><a class="owner-link" href="https://vexascan.com/account/{{ r.owner }}" target="_blank" rel="noopener">{{ r.owner }}</a> <span class="group-tag tag-{{ r.group }}">{{ {'baru': 'BARU', 'revote': 'REVOTE', 'valid': 'VALID', 'kadaluarsa': 'KADALUARSA'}[r.group] }}</span>{% if r.expiring %}<span class="warn-badge">VOTE ULANG SEGERA</span>{% endif %}{% if r.expired %}<span class="expired-badge">VOTE ULANG</span>{% endif %}</span>
|
|
<span class="stake" data-label="STAKE (VEX)">{{ r.staked|vex }}</span>
|
|
<span class="reward" data-label="TOTAL REWARD (VEX)">{{ r.total_reward|vex }}</span>
|
|
<span class="vote-date" data-label="VOTE TERAKHIR">{{ r.last_vote|shortdate }}</span>
|
|
</div>
|
|
{% else %}
|
|
<div class="empty">TAK ADA AKUN COCOK — "{{ q }}"</div>
|
|
{% endfor %}
|
|
</div>
|
|
</section>
|
|
|
|
{% else %}
|
|
|
|
{% if new_rows %}
|
|
<section class="spec-list band-list news-list">
|
|
<p class="caption section-caption">PEMILIH BARU · BELUM MATANG (0-3 HARI) · {{ new_count }}</p>
|
|
<div class="list-header">
|
|
<span>RANK</span>
|
|
<span>AKUN</span>
|
|
<span>STAKE (VEX)</span>
|
|
<span>TOTAL REWARD (VEX)</span>
|
|
<span>VOTE TERAKHIR</span>
|
|
</div>
|
|
<div class="list-rows">
|
|
{% for row in new_rows %}
|
|
<div class="list-row">
|
|
<span class="rank">{{ loop.index }}</span>
|
|
<span class="owner"><a class="owner-link" href="https://vexascan.com/account/{{ row[0] }}" target="_blank" rel="noopener">{{ row[0] }}</a> <span class="group-tag tag-baru">BARU</span></span>
|
|
<span class="stake" data-label="STAKE (VEX)">{{ row[1]|vex }}</span>
|
|
<span class="reward" data-label="TOTAL REWARD (VEX)">{{ row[3]|vex }}</span>
|
|
<span class="vote-date" data-label="VOTE TERAKHIR">{{ row[2]|shortdate }}</span>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
</section>
|
|
{% endif %}
|
|
|
|
{% if revote_count %}
|
|
<p class="caption section-legend mint-legend">TAG MINT = REVOTE KURANG DARI 1 HARI · VALID LANGSUNG · {{ revote_count }} AKUN</p>
|
|
{% endif %}
|
|
|
|
<section class="spec-list voter-list" id="spec-list">
|
|
{% if expiring_count %}
|
|
<p class="caption section-legend warn-legend">TAG AMBER = KADALUARSA DALAM {{ warn_days }} HARI — VOTE ULANG DATABISNISID · {{ expiring_count }} PEMILIH</p>
|
|
{% endif %}
|
|
{% if expired_rows %}
|
|
<p class="caption section-legend">BARIS AMBER = VOTE LEWAT {{ stale_days }} HARI — VOTE ULANG DATABISNISID UNTUK TETAP MENERIMA PROFIT SHARE · {{ expired_count }} SUARA KADALUARSA</p>
|
|
{% endif %}
|
|
<div class="list-header">
|
|
<span>RANK</span>
|
|
<span>AKUN</span>
|
|
<span>STAKE (VEX)</span>
|
|
<span>TOTAL REWARD (VEX)</span>
|
|
<span>VOTE TERAKHIR</span>
|
|
</div>
|
|
<div class="list-rows" id="rows">
|
|
{% for row in expired_rows %}
|
|
<div class="list-row expired">
|
|
<span class="rank">{{ loop.index }}</span>
|
|
<span class="owner"><a class="owner-link" href="https://vexascan.com/account/{{ row[0] }}" target="_blank" rel="noopener">{{ row[0] }}</a> <span class="expired-badge">VOTE ULANG</span></span>
|
|
<span class="stake" data-label="STAKE (VEX)">{{ row[1]|vex }}</span>
|
|
<span class="reward" data-label="TOTAL REWARD (VEX)">{{ row[3]|vex }}</span>
|
|
<span class="vote-date" data-label="VOTE TERAKHIR">{{ row[2]|shortdate }}</span>
|
|
</div>
|
|
{% endfor %}
|
|
{% for row in rows %}
|
|
<div class="list-row">
|
|
<span class="rank">{{ row[4] + expired_count }}</span>
|
|
<span class="owner"><a class="owner-link" href="https://vexascan.com/account/{{ row[0] }}" target="_blank" rel="noopener">{{ row[0] }}</a>{% if row[8] %} <span class="group-tag tag-revote">REVOTE</span>{% endif %}{% if row[9] %} <span class="warn-badge">VOTE ULANG SEGERA</span>{% endif %}</span>
|
|
<span class="stake" data-label="STAKE (VEX)">{{ row[1]|vex }}</span>
|
|
<span class="reward" data-label="TOTAL REWARD (VEX)">{{ row[6]|vex }}</span>
|
|
<span class="vote-date" data-label="VOTE TERAKHIR">{{ row[5]|shortdate }}</span>
|
|
</div>
|
|
{% else %}
|
|
{% if not expired_rows %}
|
|
<div class="empty">BELUM ADA DATA — JALANKAN get_voters.py</div>
|
|
{% endif %}
|
|
{% endfor %}
|
|
</div>
|
|
</section>
|
|
{% endif %}
|
|
|
|
{% if not q %}
|
|
<nav class="pager" id="pager" aria-label="Navigasi halaman">
|
|
{% set qp = q if q else None %}
|
|
<a class="pill {% if page <= 1 %}pill-disabled{% endif %}"
|
|
href="{{ url_for('index', page=page-1, q=qp) }}">← SEBELUMNYA</a>
|
|
<span class="page-count">{{ page }} / {{ total_pages }}</span>
|
|
<a class="pill {% if page >= total_pages %}pill-disabled{% endif %}"
|
|
href="{{ url_for('index', page=page+1, q=qp) }}">BERIKUTNYA →</a>
|
|
</nav>
|
|
{% endif %}
|
|
</main>
|
|
|
|
<footer class="footer">
|
|
<span>DATA TERVALIDASI DARI JARINGAN VEXANIUM · VEXCORE · VOTERS</span>
|
|
</footer>
|
|
|
|
<script src="{{ url_for('static', filename='app.js') }}"></script>
|
|
</body>
|
|
</html>
|