Some checks failed
Build Images and Deploy / Update-PROD-Stack (push) Failing after 14s
107 lines
4.1 KiB
Plaintext
107 lines
4.1 KiB
Plaintext
<%- include('../partials/header') %>
|
|
|
|
<div class="container">
|
|
<div style="margin-bottom: 1rem;">
|
|
<a href="/hunt/<%= pkg.hunt_short_name %>" style="color: var(--muted); text-decoration: none;">← Back to <%= pkg.hunt_name %></a>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<div class="package-hero">
|
|
<div class="card-number">#<%= pkg.card_number %></div>
|
|
<div class="hunt-name"><a href="/hunt/<%= pkg.hunt_short_name %>"><%= pkg.hunt_name %></a></div>
|
|
<div style="font-family: monospace; color: var(--muted); margin-top: 0.25rem;"><%= pkg.unique_code %></div>
|
|
</div>
|
|
|
|
<div class="stats-row">
|
|
<div class="stat-box">
|
|
<div class="value"><%= pkg.scan_count %></div>
|
|
<div class="label">Total Scans</div>
|
|
</div>
|
|
<div class="stat-box">
|
|
<div class="value"><%= pkg.first_scanner_name || '—' %></div>
|
|
<div class="label">First Finder</div>
|
|
</div>
|
|
<div class="stat-box">
|
|
<div class="value"><%= pkg.last_scanner_name || '—' %></div>
|
|
<div class="label">Most Recent</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<% if (pkg.first_scan_image) { %>
|
|
<div class="card">
|
|
<div class="card-header">📸 First Finder's Photo</div>
|
|
<img src="<%= pkg.first_scan_image %>" alt="Package photo" class="package-image">
|
|
</div>
|
|
<% } %>
|
|
|
|
<%/* First scanner can upload image */%>
|
|
<% if (isFirstScanner && !pkg.first_scan_image) { %>
|
|
<div class="card">
|
|
<div class="card-header">📸 Upload a Photo</div>
|
|
<p style="color: var(--muted); font-size: 0.9rem;">As the first finder, you can upload a photo for this package.</p>
|
|
<form method="POST" action="/loot/<%= pkg.hunt_short_name %>/<%= pkg.unique_code %>/image" enctype="multipart/form-data">
|
|
<div class="form-group">
|
|
<input type="file" name="image" accept="image/*" class="form-control" required>
|
|
</div>
|
|
<button type="submit" class="btn btn-primary">Upload Photo</button>
|
|
</form>
|
|
</div>
|
|
<% } %>
|
|
|
|
<div class="card">
|
|
<div class="card-header">💬 Package Hint</div>
|
|
<% if (pkg.last_scan_hint) { %>
|
|
<p style="font-style: italic; font-size: 1.05rem;">"<%= pkg.last_scan_hint %>"</p>
|
|
<p style="font-size: 0.8rem; color: var(--muted);">Left by <%= pkg.last_scanner_name %></p>
|
|
<% } else { %>
|
|
<p style="color: var(--muted);">No hint has been left yet.</p>
|
|
<% } %>
|
|
|
|
<% if (isLastScanner) { %>
|
|
<form method="POST" action="/loot/<%= pkg.hunt_short_name %>/<%= pkg.unique_code %>/hint" style="margin-top: 1rem;">
|
|
<div class="form-group">
|
|
<label>Update Hint/Message</label>
|
|
<textarea name="hint" class="form-control" rows="2" maxlength="500" placeholder="Leave a hint or message for the next finder..."><%= pkg.last_scan_hint || '' %></textarea>
|
|
</div>
|
|
<button type="submit" class="btn btn-primary btn-sm">Save Hint</button>
|
|
</form>
|
|
<% } %>
|
|
</div>
|
|
|
|
<% if (scanHistory.length > 0) { %>
|
|
<div class="card">
|
|
<div class="card-header">Scan History</div>
|
|
<div class="table-wrapper">
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>#</th>
|
|
<th>Player</th>
|
|
<th>Points</th>
|
|
<th>Time</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<% scanHistory.forEach((scan, i) => { %>
|
|
<tr>
|
|
<td><%= i + 1 %></td>
|
|
<td><%= scan.username %></td>
|
|
<td><% if (scan.points_awarded > 0) { %><span class="points-badge">+<%= scan.points_awarded %></span><% } else { %><span style="color: var(--muted);">0</span><% } %></td>
|
|
<td style="font-size: 0.85rem; color: var(--muted);"><%= new Date(scan.scanned_at).toLocaleString() %></td>
|
|
</tr>
|
|
<% }) %>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<% } %>
|
|
|
|
<div style="text-align: center; margin-top: 1rem;">
|
|
<a href="/hunt/<%= pkg.hunt_short_name %>" class="btn btn-outline">View All Packages</a>
|
|
<a href="/hunt/<%= pkg.hunt_short_name %>/leaderboard" class="btn btn-outline">Leaderboard</a>
|
|
</div>
|
|
</div>
|
|
|
|
<%- include('../partials/footer') %>
|