diff --git a/website/index.php b/website/index.php index 2ca19a76..adc9da6a 100644 --- a/website/index.php +++ b/website/index.php @@ -121,15 +121,39 @@ if (isset($_SESSION['steamid'])) { } } ?> - @@ -290,188 +292,133 @@ if (isset($_SESSION['steamid'])) { const knivesData = ; const weaponCategories = ; - let currentFilter = 'all'; + function toggleCategory(category) { - const navItem = document.querySelector(`[data-category="${category}"]`); - const arrow = navItem.querySelector('.nav-arrow'); + const categoryHeader = document.querySelector(`.category-header[data-category="${category}"]`); + const weaponList = document.querySelector(`.weapon-list[data-category="${category}"]`); + const arrow = categoryHeader.querySelector('.nav-arrow'); - // Check if already active - if (navItem.classList.contains('active')) { - // Deactivate and show all + // Toggle the weapon list + if (weaponList.classList.contains('expanded')) { + // Collapse + weaponList.classList.remove('expanded'); arrow.textContent = '▶'; - hideCategoryWeapons(category); - showAllWeapons(); - currentFilter = 'all'; + categoryHeader.classList.remove('active'); } else { - // Activate and filter + // Collapse all other categories first + document.querySelectorAll('.weapon-list').forEach(list => { + list.classList.remove('expanded'); + }); + document.querySelectorAll('.category-header').forEach(header => { + header.classList.remove('active'); + header.querySelector('.nav-arrow').textContent = '▶'; + }); + + // Expand this category + weaponList.classList.add('expanded'); arrow.textContent = '▼'; - showCategoryWeapons(category); - filterWeaponsByCategory(category); - currentFilter = category; + categoryHeader.classList.add('active'); } } - function showCategoryWeapons(category) { - // Clear all active states - document.querySelectorAll('.nav-item').forEach(item => { - item.classList.remove('active'); - item.querySelector('.nav-arrow').textContent = '▶'; - }); + function showKnifeSkins() { + const overlay = document.getElementById('skinSelectionOverlay'); + const title = document.getElementById('overlayTitle'); + const skinGrid = document.getElementById('skinGrid'); + + title.textContent = 'Select Knife Skin'; - // Set active state - const navItem = document.querySelector(`[data-category="${category}"]`); - navItem.classList.add('active'); - navItem.querySelector('.nav-arrow').textContent = '▼'; + // Clear previous skins + skinGrid.innerHTML = ''; + + // Populate knife skins (all knife types) + Object.entries(knivesData).forEach(([knifeId, knife]) => { + if (knifeId != 0) { // Skip default knife + const skinItem = document.createElement('div'); + skinItem.className = 'skin-item'; + skinItem.onclick = () => equipKnife(knifeId); + + skinItem.innerHTML = ` + ${knife.paint_name} +
${knife.paint_name}
+ `; + + skinGrid.appendChild(skinItem); + } + }); + + overlay.classList.remove('hidden'); } - function hideCategoryWeapons(category) { - document.querySelector(`[data-category="${category}"]`).classList.remove('active'); - } + function equipKnife(knifeId) { + // Create form and submit + const form = document.createElement('form'); + form.method = 'POST'; + form.style.display = 'none'; - function filterWeaponsByCategory(category) { - const loadoutItems = document.querySelectorAll('.loadout-item'); - const browserItems = document.querySelectorAll('.browser-item'); - - // Filter loadout items - loadoutItems.forEach(item => { - const weaponId = item.dataset.weaponId; - const weaponType = item.dataset.weaponType; - let shouldShow = false; + const formaInput = document.createElement('input'); + formaInput.name = 'forma'; + formaInput.value = `knife-${knifeId}`; - if (category === 'knives' && weaponType === 'knife') { - shouldShow = true; - } else if (category !== 'knives' && weaponId && weaponCategories[category.charAt(0).toUpperCase() + category.slice(1)]) { - shouldShow = weaponCategories[category.charAt(0).toUpperCase() + category.slice(1)].includes(parseInt(weaponId)); - } - - if (shouldShow) { - item.style.display = 'block'; - item.style.opacity = '1'; - item.style.transform = 'scale(1)'; - } else { - item.style.opacity = '0.3'; - item.style.transform = 'scale(0.95)'; - } - }); - - // Filter browser items - browserItems.forEach(item => { - const weaponId = item.dataset.weaponId; - let shouldShow = false; - - if (category !== 'knives' && weaponId && weaponCategories[category.charAt(0).toUpperCase() + category.slice(1)]) { - shouldShow = weaponCategories[category.charAt(0).toUpperCase() + category.slice(1)].includes(parseInt(weaponId)); - } - - if (shouldShow) { - item.style.display = 'block'; - item.style.opacity = '1'; - item.style.transform = 'scale(1)'; - } else { - item.style.display = 'none'; - } - }); - - // Update headers - const loadoutHeader = document.querySelector('.loadout-header h2'); - const browserHeader = document.querySelector('.browser-header h2'); - loadoutHeader.textContent = `${category.charAt(0).toUpperCase() + category.slice(1)} Loadout`; - browserHeader.textContent = `${category.charAt(0).toUpperCase() + category.slice(1)} Browser`; - } - - function showAllWeapons() { - const loadoutItems = document.querySelectorAll('.loadout-item'); - const browserItems = document.querySelectorAll('.browser-item'); - - loadoutItems.forEach(item => { - item.style.display = 'block'; - item.style.opacity = '1'; - item.style.transform = 'scale(1)'; - }); - - browserItems.forEach(item => { - item.style.display = 'block'; - item.style.opacity = '1'; - item.style.transform = 'scale(1)'; - }); - - // Reset headers - const loadoutHeader = document.querySelector('.loadout-header h2'); - const browserHeader = document.querySelector('.browser-header h2'); - loadoutHeader.textContent = 'Current Loadout'; - browserHeader.textContent = 'Weapon Browser'; + form.appendChild(formaInput); + document.body.appendChild(form); + form.submit(); } function searchWeapons(query) { if (!query.trim()) { - // If search is empty, apply current filter or show all - if (currentFilter === 'all') { - showAllWeapons(); - } else { - filterWeaponsByCategory(currentFilter); - } + // Reset search - show all categories and hide all weapon lists + document.querySelectorAll('.nav-category').forEach(category => { + category.style.display = 'block'; + }); + document.querySelectorAll('.weapon-list').forEach(list => { + list.classList.remove('expanded'); + }); + document.querySelectorAll('.category-header').forEach(header => { + header.classList.remove('active'); + header.querySelector('.nav-arrow').textContent = '▶'; + }); return; } - const loadoutItems = document.querySelectorAll('.loadout-item'); - const browserItems = document.querySelectorAll('.browser-item'); const searchTerm = query.toLowerCase(); - // Search loadout items - loadoutItems.forEach(item => { - const weaponId = item.dataset.weaponId; - const weaponType = item.dataset.weaponType; - let weaponName = ''; - let skinName = ''; + // Search through categories and weapons + document.querySelectorAll('.nav-category').forEach(category => { + const categoryName = category.querySelector('.nav-text').textContent.toLowerCase(); + const weaponItems = category.querySelectorAll('.weapon-item'); + let categoryMatches = categoryName.includes(searchTerm); + let hasMatchingWeapons = false; - if (weaponType === 'knife') { - weaponName = 'knife'; - skinName = item.querySelector('.item-name').textContent.toLowerCase(); - } else if (weaponId && weaponsData[weaponId]) { - weaponName = weaponsData[weaponId].weapon_name.replace('weapon_', '').toLowerCase(); - skinName = item.querySelector('.item-name').textContent.toLowerCase(); - } + // Check if any weapons in this category match + weaponItems.forEach(weaponItem => { + const weaponName = weaponItem.querySelector('.weapon-name').textContent.toLowerCase(); + const matches = weaponName.includes(searchTerm); + + if (matches) { + hasMatchingWeapons = true; + weaponItem.style.display = 'flex'; + } else { + weaponItem.style.display = 'none'; + } + }); - const matches = weaponName.includes(searchTerm) || skinName.includes(searchTerm); - - if (matches) { - item.style.display = 'block'; - item.style.opacity = '1'; - item.style.transform = 'scale(1)'; + // Show/hide category based on matches + if (categoryMatches || hasMatchingWeapons) { + category.style.display = 'block'; + if (hasMatchingWeapons) { + // Expand the category to show matching weapons + const weaponList = category.querySelector('.weapon-list'); + const header = category.querySelector('.category-header'); + weaponList.classList.add('expanded'); + header.classList.add('active'); + header.querySelector('.nav-arrow').textContent = '▼'; + } } else { - item.style.opacity = '0.3'; - item.style.transform = 'scale(0.95)'; + category.style.display = 'none'; } }); - - // Search browser items - browserItems.forEach(item => { - const weaponId = item.dataset.weaponId; - let weaponName = ''; - let skinName = ''; - - if (weaponId && weaponsData[weaponId]) { - weaponName = weaponsData[weaponId].weapon_name.replace('weapon_', '').toLowerCase(); - skinName = item.querySelector('.browser-name').textContent.toLowerCase(); - } - - const matches = weaponName.includes(searchTerm) || skinName.includes(searchTerm); - - if (matches) { - item.style.display = 'block'; - item.style.opacity = '1'; - item.style.transform = 'scale(1)'; - } else { - item.style.display = 'none'; - } - }); - - // Update headers - const loadoutHeader = document.querySelector('.loadout-header h2'); - const browserHeader = document.querySelector('.browser-header h2'); - loadoutHeader.textContent = `Search Results: "${query}"`; - browserHeader.textContent = `Search Results: "${query}"`; } function showWeaponSkins(weaponId) { diff --git a/website/style.css b/website/style.css index fb05392f..3a511771 100644 --- a/website/style.css +++ b/website/style.css @@ -702,112 +702,59 @@ body { color: var(--text-muted); } -/* Weapon Browser Section */ -.weapon-browser { - margin-top: 3rem; - padding-top: 2rem; - border-top: 1px solid var(--border-color); -} - -.browser-header { - margin-bottom: 2rem; -} - -.browser-header h2 { - color: var(--text-primary); - font-size: 1.8rem; - font-weight: 700; +/* Sidebar Weapon Lists */ +.nav-category { margin-bottom: 0.5rem; } -.browser-header p { - color: var(--text-secondary); - font-size: 1rem; +.category-header { + margin-bottom: 0 !important; } -.browser-grid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); - gap: 1rem; - max-width: 1200px; -} - -.browser-item { - background: var(--bg-card); - border-radius: var(--border-radius); - border: 1px solid var(--border-color); +.weapon-list { + max-height: 0; overflow: hidden; - transition: all 0.3s ease; + transition: max-height 0.3s ease; + background: var(--bg-tertiary); + border-left: 3px solid var(--accent-blue); + margin-left: 1rem; +} + +.weapon-list.expanded { + max-height: 500px; + padding: 0.5rem 0; +} + +.weapon-item { + display: flex; + align-items: center; + padding: 0.75rem 1rem; cursor: pointer; - opacity: 0.8; + transition: var(--transition); + border-bottom: 1px solid var(--border-color); } -.browser-item:hover { - transform: translateY(-2px); - box-shadow: var(--shadow); - border-color: var(--accent-blue); - opacity: 1; +.weapon-item:last-child { + border-bottom: none; } -.browser-image-container { - position: relative; - aspect-ratio: 16/10; - background: linear-gradient(145deg, #2a2a2a, #1a1a1a); - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; +.weapon-item:hover { + background: var(--bg-hover); + padding-left: 1.25rem; } -.browser-image { - width: 70%; - height: auto; +.weapon-icon { + width: 32px; + height: 20px; object-fit: contain; - transition: var(--transition); + margin-right: 0.75rem; + background: linear-gradient(145deg, #333, #222); + border-radius: 4px; + padding: 2px; } -.browser-overlay { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(0, 0, 0, 0.7); - display: flex; - align-items: center; - justify-content: center; - opacity: 0; - transition: var(--transition); -} - -.browser-item:hover .browser-overlay { - opacity: 1; -} - -.equip-text { - color: white; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.5px; - font-size: 0.9rem; -} - -.browser-info { - padding: 0.75rem; -} - -.browser-category { - color: var(--text-muted); - font-size: 0.7rem; - text-transform: uppercase; - letter-spacing: 1px; - margin-bottom: 0.25rem; - font-weight: 500; -} - -.browser-name { +.weapon-name { color: var(--text-primary); - font-weight: 500; font-size: 0.85rem; - line-height: 1.3; + font-weight: 500; } \ No newline at end of file