Files
onlyscavs/templates/index.html
serversdwn 84768ae587 Add Loadout Planner and Quest Trees templates
- Created loadout.html for a comprehensive loadout planner, allowing users to filter and view gear options across various categories including guns, armor, helmets, headwear, backpacks, and rigs.
- Implemented a build builder feature to calculate total loadout weight and save builds.
- Added quests.html to display quest trees with trader dependencies, filtering options, and quest completion tracking.
2026-02-22 08:51:28 +00:00

293 lines
7.3 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html>
<head>
<title>OnlyScavs Key Ratings</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
:root {
--bg: #121212;
--panel: #1a1a1a;
--text: #eee;
--muted: #bbb;
--border: #333;
--accent: #9ccfff;
}
body {
font-family: sans-serif;
background: var(--bg);
color: var(--text);
margin: 0;
padding: 16px;
}
.page {
max-width: 980px;
margin: 0 auto;
}
.key {
display: flex;
align-items: center;
gap: 10px;
padding: 12px 8px;
border-bottom: 1px solid var(--border);
}
.key-name {
display: flex;
flex-direction: column;
gap: 4px;
min-width: 0;
}
.key-name strong {
line-height: 1.2;
word-break: break-word;
}
.key-name a {
color: var(--accent);
font-size: 0.9rem;
}
.filters {
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap;
margin: 12px 0 20px;
}
.map-tags {
display: flex;
flex-wrap: wrap;
gap: 6px;
color: var(--muted);
font-size: 0.85rem;
}
.map-tag {
background: var(--panel);
border: 1px solid var(--border);
border-radius: 999px;
padding: 2px 8px;
line-height: 1.2;
}
img {
width: 64px;
height: 64px;
border-radius: 6px;
background: var(--panel);
}
select, input {
background: #222;
color: var(--text);
border: 1px solid #444;
border-radius: 6px;
padding: 8px;
}
a {
color: var(--accent);
}
button {
background: #333;
color: var(--text);
border: 1px solid #555;
cursor: pointer;
padding: 8px 12px;
border-radius: 6px;
}
.filters {
display: flex;
align-items: center;
gap: 8px;
}
.key-form {
flex: 1;
flex-wrap: wrap;
align-items: flex-start;
display: flex;
gap: 8px;
}
input[name^="reason_"] {
min-width: 180px;
}
.map-list {
display: flex;
flex-wrap: wrap;
gap: 8px;
width: 100%;
}
.map-checkbox,
.quest-flag {
display: flex;
align-items: center;
gap: 6px;
background: var(--panel);
border: 1px solid var(--border);
border-radius: 6px;
padding: 4px 8px;
}
.map-checkbox input,
.quest-flag input {
margin: 0;
}
.save-all {
display: inline-flex;
align-items: center;
gap: 8px;
margin: 4px 0 16px;
}
@media (max-width: 720px) {
body {
padding: 12px;
}
.key {
align-items: flex-start;
gap: 12px;
}
.filters,
.key-form {
flex-wrap: wrap;
justify-content: flex-start;
gap: 8px;
}
select, input, button {
min-height: 40px;
font-size: 1rem;
}
input[name^="reason_"] {
flex: 1 1 100%;
min-width: 0;
}
}
@media (max-width: 480px) {
.key {
flex-direction: column;
align-items: stretch;
}
img {
width: 72px;
height: 72px;
}
}
</style>
</head>
<body>
<div class="page">
<nav style="margin-bottom:12px">
<a href="/collector">Collector Checklist</a>
&nbsp;|&nbsp;
<a href="/quests">Quest Trees</a>
&nbsp;|&nbsp;
<a href="/loadout">Loadout Planner</a>
</nav>
<h1>OnlyScavs Keys</h1>
<form method="get" class="filters">
<label for="map_id">Filter by map</label>
<select id="map_id" name="map_id">
<option value="">All maps</option>
{% for map in maps %}
<option value="{{ map.id }}" {% if map_filter == map.id %}selected{% endif %}>
{{ map.name }}
</option>
{% endfor %}
</select>
<label for="show">Show</label>
<select id="show" name="show">
<option value="all" {% if show == "all" %}selected{% endif %}>All</option>
<option value="rated" {% if show == "rated" %}selected{% endif %}>Rated</option>
<option value="unrated" {% if show == "unrated" %}selected{% endif %}>NR (not rated)</option>
<option value="quest" {% if show == "quest" %}selected{% endif %}>Used in quest</option>
</select>
<label for="sort">Sort</label>
<select id="sort" name="sort">
<option value="priority_desc" {% if sort == "priority_desc" %}selected{% endif %}>
Priority high → low
</option>
<option value="priority_asc" {% if sort == "priority_asc" %}selected{% endif %}>
Priority low → high
</option>
<option value="name_asc" {% if sort == "name_asc" %}selected{% endif %}>
Name A → Z
</option>
<option value="name_desc" {% if sort == "name_desc" %}selected{% endif %}>
Name Z → A
</option>
</select>
<button type="submit">Apply</button>
</form>
<form method="post" action="/rate_all">
{% if map_filter %}
<input type="hidden" name="map_id" value="{{ map_filter }}">
{% endif %}
{% if sort %}
<input type="hidden" name="sort" value="{{ sort }}">
{% endif %}
{% if show %}
<input type="hidden" name="show" value="{{ show }}">
{% endif %}
<div class="save-all">
<button type="submit" name="save_all" value="1">Save all changes</button>
</div>
{% for key in keys %}
<div class="key" id="key-{{ key.id }}">
<img
src="{{ key.grid_image_url }}"
loading="lazy"
>
<div class="key-name" style="flex:1">
<strong>{{ key.name }}</strong>
{% if key.wiki_url %}
<a href="{{ key.wiki_url }}" target="_blank">wiki</a>
{% endif %}
{% set selected_maps = key_maps.get(key.id, []) %}
{% if selected_maps %}
<div class="map-tags">
{% for map in maps %}
{% if map.id in selected_maps %}
<span class="map-tag">{{ map.name }}</span>
{% endif %}
{% endfor %}
</div>
{% endif %}
</div>
<div class="key-form">
<input type="hidden" name="key_ids" value="{{ key.id }}">
<select name="priority_{{ key.id }}">
<option value="" {% if key.priority is none %}selected{% endif %}>NR (not rated)</option>
{% for i, label in [(0,'IGNORE'),(1,'LOW'),(2,'MED'),(3,'HIGH'),(4,'SUPER')] %}
<option value="{{ i }}" {% if key.priority == i %}selected{% endif %}>
{{ label }}
</option>
{% endfor %}
</select>
<label class="quest-flag">
<input type="checkbox" name="used_in_quest_{{ key.id }}" {% if key.used_in_quest %}checked{% endif %}>
<span>Used in quest?</span>
</label>
<input name="reason_{{ key.id }}" placeholder="note…" value="{{ key.reason or '' }}">
<div class="map-list">
{% for map in maps %}
<label class="map-checkbox">
<input
type="checkbox"
name="map_ids_{{ key.id }}"
value="{{ map.id }}"
{% if map.id in selected_maps %}checked{% endif %}
>
<span>{{ map.name }}</span>
</label>
{% endfor %}
</div>
<button type="submit" name="save_one" value="{{ key.id }}">Save</button>
</div>
</div>
{% endfor %}
<div class="save-all">
<button type="submit" name="save_all" value="1">Save all changes</button>
</div>
</form>
</div>
</body>
</html>