reduced duplicate insert errors of portals, still present because of two players disovering the same portal at the same time, other changes to inventory

This commit is contained in:
erik 2025-09-22 18:21:04 +00:00
parent e7ca39318f
commit 6c646719dd
6 changed files with 1093 additions and 232 deletions

View file

@ -90,53 +90,89 @@
border: 1px solid #ccc;
}
/* Filter Section Styling */
.filter-card {
background: #f8f9fa;
border: 1px solid #dee2e6;
border-radius: 4px;
padding: 8px;
margin-bottom: 8px;
}
.filter-card-header {
font-weight: bold;
font-size: 11px;
color: #495057;
margin-bottom: 6px;
border-bottom: 1px solid #dee2e6;
padding-bottom: 2px;
}
.filter-row {
display: flex;
gap: 10px;
margin-bottom: 5px;
gap: 8px;
margin-bottom: 6px;
align-items: center;
flex-wrap: wrap;
}
.filter-group {
display: flex;
align-items: center;
gap: 3px;
gap: 4px;
min-width: 0;
}
.filter-group label {
font-weight: bold;
font-size: 10px;
color: #000;
font-weight: 600;
font-size: 11px;
color: #343a40;
min-width: 60px;
text-align: right;
}
.filter-group-wide label {
min-width: 80px;
}
input[type="text"],
input[type="number"],
select {
border: 1px solid #999;
padding: 1px 3px;
border: 1px solid #ced4da;
border-radius: 3px;
padding: 4px 6px;
font-size: 11px;
height: 18px;
height: 24px;
background: white;
}
input[type="text"]:focus,
input[type="number"]:focus,
select:focus {
outline: none;
border-color: #80bdff;
box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);
}
input[type="text"] {
width: 120px;
width: 140px;
}
input[type="number"] {
width: 40px;
width: 50px;
}
select {
width: 100px;
width: 110px;
}
.filter-section {
display: flex;
align-items: flex-start;
gap: 5px;
margin-bottom: 3px;
.range-separator {
color: #6c757d;
font-weight: bold;
margin: 0 4px;
}
.section-label {
font-weight: bold;
font-size: 10px;
@ -145,11 +181,18 @@
color: #000;
}
.checkbox-sections-container {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
}
.checkbox-container {
display: flex;
flex-wrap: wrap;
gap: 10px;
flex: 1;
gap: 4px;
max-height: 150px;
overflow-y: auto;
}
.checkbox-item {
@ -157,6 +200,8 @@
align-items: center;
font-size: 9px;
white-space: nowrap;
width: calc(50% - 2px);
min-width: 80px;
}
.checkbox-item input[type="checkbox"] {
@ -180,8 +225,9 @@
.search-actions {
display: flex;
gap: 5px;
margin-top: 3px;
gap: 10px;
margin-top: 15px;
justify-content: flex-start;
}
.btn {
@ -429,32 +475,52 @@
<div class="main-content">
<form class="search-form" id="inventorySearchForm">
<!-- Row 0: Equipment Type Selection -->
<div class="filter-row">
<div class="filter-group">
<label>Type:</label>
<div style="display: flex; gap: 10px;">
<label style="display: flex; align-items: center; font-weight: normal;">
<input type="radio" name="equipmentType" id="armorOnly" value="armor" checked style="margin-right: 3px;">
Armor Only
</label>
<label style="display: flex; align-items: center; font-weight: normal;">
<input type="radio" name="equipmentType" id="jewelryOnly" value="jewelry" style="margin-right: 3px;">
Jewelry Only
</label>
<label style="display: flex; align-items: center; font-weight: normal;">
<input type="radio" name="equipmentType" id="allItems" value="all" style="margin-right: 3px;">
All Items
</label>
</div>
</div>
</div>
<!-- Row 0.5: Slot Selection -->
<div class="filter-row">
<div class="filter-group">
<label>Slot:</label>
<select id="slotFilter">
<!-- Basic Filters -->
<div class="filter-card">
<div class="filter-card-header">Basic Search</div>
<div class="filter-row">
<div class="filter-group">
<label>Name:</label>
<input type="text" id="searchText" placeholder="Item name">
</div>
<div class="filter-group">
<label>Status:</label>
<select id="searchEquipStatus">
<option value="all">All</option>
<option value="equipped">Equipped</option>
<option value="unequipped">Inventory</option>
</select>
</div>
<div class="filter-group">
<label>Type:</label>
<div style="display: flex; gap: 8px;">
<label style="display: flex; align-items: center; font-weight: normal;">
<input type="radio" name="equipmentType" id="armorOnly" value="armor" checked style="margin-right: 3px;">
Armor Only
</label>
<label style="display: flex; align-items: center; font-weight: normal;">
<input type="radio" name="equipmentType" id="jewelryOnly" value="jewelry" style="margin-right: 3px;">
Jewelry Only
</label>
<label style="display: flex; align-items: center; font-weight: normal;">
<input type="radio" name="equipmentType" id="shirtOnly" value="shirt" style="margin-right: 3px;">
Shirts Only
</label>
<label style="display: flex; align-items: center; font-weight: normal;">
<input type="radio" name="equipmentType" id="pantsOnly" value="pants" style="margin-right: 3px;">
Pants Only
</label>
<label style="display: flex; align-items: center; font-weight: normal;">
<input type="radio" name="equipmentType" id="allItems" value="all" style="margin-right: 3px;">
All Items
</label>
</div>
</div>
<div class="filter-group">
<label>Slot:</label>
<select id="slotFilter">
<option value="">All Slots</option>
<optgroup label="Armor Slots">
<option value="Head">Head</option>
@ -480,66 +546,61 @@
</div>
</div>
<!-- Row 1: Basic filters -->
<div class="filter-row">
<div class="filter-group">
<label>Name:</label>
<input type="text" id="searchText" placeholder="Item name">
<!-- Stats Filters -->
<div class="filter-card">
<div class="filter-card-header">Item Stats</div>
<div class="filter-row">
<div class="filter-group">
<label>Armor:</label>
<input type="number" id="searchMinArmor" placeholder="Min">
<span class="range-separator">-</span>
<input type="number" id="searchMaxArmor" placeholder="Max">
</div>
<div class="filter-group">
<label>Crit Dmg:</label>
<input type="number" id="searchMinCritDamage" placeholder="Min">
<span class="range-separator">-</span>
<input type="number" id="searchMaxCritDamage" placeholder="Max">
</div>
</div>
<div class="filter-group">
<label>Status:</label>
<select id="searchEquipStatus">
<option value="all">All</option>
<option value="equipped">Equipped</option>
<option value="unequipped">Inventory</option>
</select>
<div class="filter-row">
<div class="filter-group">
<label>Dmg Rating:</label>
<input type="number" id="searchMinDamageRating" placeholder="Min">
<span class="range-separator">-</span>
<input type="number" id="searchMaxDamageRating" placeholder="Max">
</div>
<div class="filter-group">
<label>Heal Boost:</label>
<input type="number" id="searchMinHealBoost" placeholder="Min">
<span class="range-separator">-</span>
<input type="number" id="searchMaxHealBoost" placeholder="Max">
</div>
</div>
</div>
<!-- Row 2: Stats -->
<div class="filter-row">
<div class="filter-group">
<label>Armor:</label>
<input type="number" id="searchMinArmor" placeholder="Min">
<span>-</span>
<input type="number" id="searchMaxArmor" placeholder="Max">
</div>
<div class="filter-group">
<label>Crit:</label>
<input type="number" id="searchMinCritDamage" placeholder="Min">
<span>-</span>
<input type="number" id="searchMaxCritDamage" placeholder="Max">
</div>
<div class="filter-group">
<label>Dmg:</label>
<input type="number" id="searchMinDamageRating" placeholder="Min">
<span>-</span>
<input type="number" id="searchMaxDamageRating" placeholder="Max">
</div>
<div class="filter-group">
<label>Heal:</label>
<input type="number" id="searchMinHealBoost" placeholder="Min">
<span>-</span>
<input type="number" id="searchMaxHealBoost" placeholder="Max">
</div>
</div>
<!-- New Rating Filters -->
<div class="filter-row">
<div class="filter-group">
<label>Vitality:</label>
<input type="number" id="searchMinVitalityRating" placeholder="Min">
</div>
<div class="filter-group">
<label>Dmg Resist:</label>
<input type="number" id="searchMinDamageResistRating" placeholder="Min">
<div class="filter-row">
<div class="filter-group">
<label>Vitality:</label>
<input type="number" id="searchMinVitalityRating" placeholder="Min">
</div>
<div class="filter-group">
<label>Dmg Resist:</label>
<input type="number" id="searchMinDamageResistRating" placeholder="Min">
</div>
<div class="filter-group">
<label>Crit Dmg Resist:</label>
<input type="number" id="searchMinCritDamageResistRating" placeholder="Min">
</div>
</div>
</div>
<!-- Equipment Sets -->
<div class="filter-section">
<label class="section-label">Set:</label>
<div class="checkbox-container" id="equipmentSets">
<!-- Checkbox Sections in Grid Layout -->
<div class="checkbox-sections-container">
<!-- Equipment Sets -->
<div class="filter-card">
<div class="filter-card-header">Equipment Sets</div>
<div class="checkbox-container" id="equipmentSets">
<div class="checkbox-item">
<input type="checkbox" id="set_14" value="14">
<label for="set_14">Adept's</label>
@ -605,11 +666,11 @@
<label for="set_29">Lightning Proof</label>
</div>
</div>
</div>
</div>
<!-- Legendary Cantrips -->
<div class="filter-section">
<label class="section-label">Cantrips:</label>
<!-- Legendary Cantrips -->
<div class="filter-card">
<div class="filter-card-header">Legendary Cantrips</div>
<div class="checkbox-container" id="cantrips">
<!-- Legendary Attributes -->
<div class="checkbox-item">
@ -782,11 +843,11 @@
<label for="cantrip_legendary_storm_bane">Storm Bane</label>
</div>
</div>
</div>
</div>
<!-- Legendary Wards -->
<div class="filter-section">
<label class="section-label">Wards:</label>
<!-- Legendary Wards -->
<div class="filter-card">
<div class="filter-card-header">Legendary Wards</div>
<div class="checkbox-container" id="protections">
<div class="checkbox-item">
<input type="checkbox" id="protection_flame" value="Legendary Flame Ward">
@ -821,15 +882,12 @@
<label for="protection_armor">Armor</label>
</div>
</div>
</div>
</div>
<!-- Equipment Slots -->
<div class="filter-section">
<label class="section-label">Equipment Slots:</label>
<!-- Armor Slots -->
<div class="checkbox-container" id="armor-slots">
<label class="subsection-label">Armor:</label>
<!-- Equipment Slots -->
<div class="filter-card">
<div class="filter-card-header">Equipment Slots</div>
<div class="checkbox-container" id="all-slots">
<div class="checkbox-item">
<input type="checkbox" id="slot_head" value="Head">
<label for="slot_head">Head</label>
@ -870,11 +928,6 @@
<input type="checkbox" id="slot_shield" value="Shield">
<label for="slot_shield">Shield</label>
</div>
</div>
<!-- Jewelry Slots -->
<div class="checkbox-container" id="jewelry-slots">
<label class="subsection-label">Jewelry:</label>
<div class="checkbox-item">
<input type="checkbox" id="slot_neck" value="Neck">
<label for="slot_neck">Neck</label>
@ -892,6 +945,7 @@
<label for="slot_trinket">Trinket</label>
</div>
</div>
</div>
</div>
<div class="search-actions">