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();
});