const logContainer = document.getElementById('log-container'); const queryInput = document.getElementById('query'); const queryString = window.location.search; const urlParams = new URLSearchParams(queryString); let query = urlParams.get('q'); if (query === null) { query = ''; } else { queryInput.value = query.trim(); } logContainer.innerHTML = ''; function escapeHtml(unsafe) { if (!unsafe) return ''; return unsafe .replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """) .replace(/'/g, "'"); } function ircAction(text) { const regex = /^(\[[^\]]+\])(\s*<)([^>]+)(>:\s*)(\u0001ACTION\s+)([^\u0001]+)(\u0001)(.*)$/gm; const replacement = '$1 * $3 $6$8'; return text.replace(regex, replacement); } function linkify(text) { const urlRegex = /(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; return text.replace(urlRegex, function(url) { return `${url}`; }); } function aggrLog(data) { const logsByDate = {}; const lines = data.trim().split('\n'); lines.forEach(line => { const match = line.match(/^\.\/(\d{4}\/\d{2}-\d{2})\.txt:(.*)/); if (match) { const fullDate = match[1].replace('/', '-'); const logContent = match[2].trim(); if (!logsByDate[fullDate]) { logsByDate[fullDate] = []; } logsByDate[fullDate].push(logContent); } }); const dates = Object.keys(logsByDate); const sortedDates = dates.sort().reverse(); let ret = ''; sortedDates.forEach(date => { year = date.substring(0, 4); month = date.substring(5, 7); day = date.substring(8, 10); url = '../view/?chan=main&y=' + year + '&m=' + month + '&d=' + day; ret = ret + '\n=== ' + date + ' ===' + '\n'; logsByDate[date].forEach(log => { ret = ret + log + '\n'; }); }); return ret; } function logProcess(text) { text = ircAction(text); text = escapeHtml(text); text = aggrLog(text); text = linkify(text); return text; } function loadLog() { if (query === '') return; let targetUrl = 'https://raye.mistivia.com/cgi-bin/irclogsearch/?' + encodeURIComponent(query); fetch(targetUrl) .then(response => { if (!response.ok) { throw new Error(`HTTP Error: ${response.status} ${response.statusText} for hash: ${urlHash}`); } return response.text(); }) .then(text => { logContainer.innerHTML = `
${logProcess(text.trim())}`;
})
.catch(error => {
console.error('Fetch error:', error);
logContainer.innerHTML = '';
});
}
loadLog();
function search() {
query = queryInput.value.trim();
window.history.replaceState(null, '', window.location.origin + window.location.pathname + '?q=' + encodeURIComponent(query));
loadLog();
}
function handleEnter(event) {
if (event.key === 'Enter' || event.keyCode === 13) {
event.preventDefault();
search();
}
}
queryInput.addEventListener('keyup', handleEnter);