Files
ShooterHub/frontend/gears.html
2026-04-02 11:24:30 +02:00

235 lines
11 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 lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Gears ShooterHub</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
<link rel="stylesheet" href="/css/app.css">
</head>
<body>
<div id="navbar"></div>
<div class="container py-4">
<h2 class="fw-bold mb-4"><i class="bi bi-archive me-2"></i><span data-i18n="gear.title">Gears &amp; Rigs</span></h2>
<!-- Tabs -->
<ul class="nav nav-tabs mb-4" id="gearsTabs">
<li class="nav-item">
<button class="nav-link active" data-bs-toggle="tab" data-bs-target="#invTab">
<i class="bi bi-list-ul me-1"></i><span data-i18n="gear.tab.inv">My Inventory</span>
</button>
</li>
<li class="nav-item">
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#rigTab">
<i class="bi bi-diagram-3 me-1"></i><span data-i18n="gear.tab.rigs">My Rigs</span>
</button>
</li>
</ul>
<div class="tab-content">
<!-- ── Inventory tab ─────────────────────────────────────────────────── -->
<div class="tab-pane fade show active" id="invTab">
<div class="d-flex justify-content-between align-items-center mb-3">
<h5 class="mb-0">My gear</h5>
<button class="btn btn-primary btn-sm" id="addGearBtn">
<i class="bi bi-plus-lg me-1"></i>Add gear
</button>
</div>
<div id="invSpinner" class="text-center py-4"><div class="spinner-border text-primary"></div></div>
<div id="invEmpty" class="alert alert-secondary d-none">You haven't added any gear yet.</div>
<div class="table-responsive d-none" id="invTableWrap">
<table class="table table-hover align-middle">
<thead class="table-light">
<tr>
<th>Nickname</th><th>Brand</th><th>Model</th><th>Type</th>
<th>Serial #</th><th>Purchased</th><th></th>
</tr>
</thead>
<tbody id="invBody"></tbody>
</table>
</div>
</div>
<!-- ── Rigs tab ──────────────────────────────────────────────────────── -->
<div class="tab-pane fade" id="rigTab">
<div class="d-flex justify-content-between align-items-center mb-3">
<h5 class="mb-0">My rigs</h5>
<button class="btn btn-primary btn-sm" id="createRigBtn">
<i class="bi bi-plus-lg me-1"></i>New rig
</button>
</div>
<div id="rigSpinner" class="text-center py-4"><div class="spinner-border text-primary"></div></div>
<div id="rigEmpty" class="alert alert-secondary d-none">You haven't created any rig yet.</div>
<div class="row g-3" id="rigCards"></div>
</div>
</div>
</div>
<!-- ── Modal: Add Gear (catalog search) ──────────────────────────────────── -->
<div class="modal fade" id="addGearModal" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Add gear from catalog</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<div class="input-group mb-3">
<input type="text" class="form-control" id="catalogSearch" placeholder="Search brand or model…">
<button class="btn btn-outline-secondary" id="catalogSearchBtn"><i class="bi bi-search"></i></button>
</div>
<div id="catalogSpinner" class="text-center d-none"><div class="spinner-border text-primary"></div></div>
<div id="catalogResults"></div>
<!-- Step 2: extra details after choosing an item -->
<div id="gearDetailsForm" class="d-none border-top pt-3 mt-3">
<h6 class="fw-semibold mb-3">Details for <span id="chosenGearName"></span></h6>
<input type="hidden" id="chosenGearId">
<div class="row g-3">
<div class="col-md-6">
<label class="form-label">Nickname <span class="text-muted small">(optional)</span></label>
<input type="text" class="form-control" id="gearNickname">
</div>
<div class="col-md-6">
<label class="form-label">Serial number <span class="text-muted small">(optional)</span></label>
<input type="text" class="form-control" id="gearSerial">
</div>
<div class="col-md-6">
<label class="form-label">Purchase date <span class="text-muted small">(optional)</span></label>
<input type="date" class="form-control" id="gearPurchase">
</div>
<div class="col-12">
<label class="form-label">Notes <span class="text-muted small">(optional)</span></label>
<textarea class="form-control" id="gearNotes" rows="2"></textarea>
</div>
</div>
<div id="addGearAlert" class="alert alert-danger mt-3 d-none"></div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-primary d-none" id="confirmAddGearBtn">Add to inventory</button>
</div>
</div>
</div>
</div>
<!-- ── Modal: Edit UserGear ───────────────────────────────────────────────── -->
<div class="modal fade" id="editGearModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Edit gear</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<input type="hidden" id="editGearId">
<div class="mb-3">
<label class="form-label">Nickname</label>
<input type="text" class="form-control" id="editNickname">
</div>
<div class="mb-3">
<label class="form-label">Serial number</label>
<input type="text" class="form-control" id="editSerial">
</div>
<div class="mb-3">
<label class="form-label">Purchase date</label>
<input type="date" class="form-control" id="editPurchase">
</div>
<div class="mb-3">
<label class="form-label">Notes</label>
<textarea class="form-control" id="editNotes" rows="3"></textarea>
</div>
<div id="editGearAlert" class="alert alert-danger d-none"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-primary" id="saveEditGearBtn">Save</button>
</div>
</div>
</div>
</div>
<!-- ── Modal: Create / Edit Rig ───────────────────────────────────────────── -->
<div class="modal fade" id="rigModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="rigModalTitle">New rig</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<input type="hidden" id="rigId">
<div class="mb-3">
<label class="form-label">Name <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="rigName" required>
</div>
<div class="mb-3">
<label class="form-label">Description</label>
<textarea class="form-control" id="rigDesc" rows="2"></textarea>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="rigPublic">
<label class="form-check-label" for="rigPublic">Public (visible to other shooters)</label>
</div>
<div id="rigModalAlert" class="alert alert-danger mt-3 d-none"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-primary" id="saveRigBtn">Save</button>
</div>
</div>
</div>
</div>
<!-- ── Modal: Manage Rig Items ────────────────────────────────────────────── -->
<div class="modal fade" id="rigItemsModal" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Items in "<span id="rigItemsName"></span>"</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<input type="hidden" id="rigItemsRigId">
<h6 class="fw-semibold">Current items</h6>
<ul class="list-group mb-4" id="rigItemsList"></ul>
<h6 class="fw-semibold">Add from inventory</h6>
<div class="input-group mb-2">
<select class="form-select" id="rigItemSelect"></select>
<select class="form-select" id="rigItemRole">
<option value="">Role (optional)</option>
<option value="PRIMARY">Primary Firearm</option>
<option value="OPTIC">Optic / Scope</option>
<option value="SUPPRESSOR">Suppressor</option>
<option value="BIPOD">Bipod</option>
<option value="MAGAZINE">Magazine</option>
<option value="OTHER">Other Accessory</option>
</select>
<button class="btn btn-outline-primary" id="addRigItemBtn"><i class="bi bi-plus-lg"></i> Add</button>
</div>
<div id="rigItemsAlert" class="alert alert-danger d-none"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<div id="toastContainer"></div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="/js/api.js"></script>
<script src="/js/i18n.js"></script>
<script src="/js/calibers.js"></script>
<script src="/js/nav.js"></script>
<script src="/js/gears.js"></script>
</body>
</html>