Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
const DATA_FILE = 'clean_players.json'; let players = []; function setStatus(text, isError=false) { const status = document.getElementById('status'); status.textContent = text; status.style.color = isError ? '#b91c1c' : '#4b5563'; } function normalize(value) { return String(value ?? '').toLowerCase(); } function renderTable(rows) { const head = document.getElementById('resultsHead'); const body = document.getElementById('resultsBody'); head.innerHTML = ''; body.innerHTML = ''; if (!rows.length) { setStatus('No matching records found.', false); return; } const columns = Array.from(new Set(rows.flatMap(row => Object.keys(row)))); const headerRow = document.createElement('tr'); columns.forEach(col => { const th = document.createElement('th'); th.textContent = col; headerRow.appendChild(th); }); head.appendChild(headerRow); rows.forEach(row => { const tr = document.createElement('tr'); columns.forEach(col => { const td = document.createElement('td'); td.textContent = row[col] !== undefined ? row[col] : ''; tr.appendChild(td); }); body.appendChild(tr); }); setStatus(`${rows.length} record${rows.length === 1 ? '' : 's'} found.`); } function searchRecords(query) { const q = normalize(query).trim(); if (!q) { setStatus('Type the name and press Enter or wait for live filtering.', false); return []; } return players.filter(player => Object.values(player).some(value => normalize(value).includes(q)) ); } function handleSearch() { const query = document.getElementById('searchName').value; const results = searchRecords(query); renderTable(results); } function loadData() { setStatus('Loading data from output_data.json...'); fetch(DATA_FILE) .then(response => { if (!response.ok) { throw new Error(`HTTP ${response.status}: ${response.statusText}`); } return response.json(); }) .then(jsonData => { if (!Array.isArray(jsonData)) { throw new Error('Expected JSON array.'); } players = jsonData; setStatus('Data loaded. Type a name to search.'); renderTable([]); }) .catch(err => { setStatus(`Could not load data: ${err.message}. Run from a local server if using file:// path.`, true); console.error(err); }); } window.addEventListener('DOMContentLoaded', () => { document.getElementById('searchName').addEventListener('input', handleSearch); document.getElementById('clearBtn').addEventListener('click', () => { document.getElementById('searchName').value = ''; renderTable([]); setStatus('Cleared. Type a name to search.'); }); loadData(); });