ai-copyright-lawsuits / index.html
fdaudens's picture
Update index.html
fe33d11 verified
raw
history blame
10.5 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AI Copyright Lawsuit Timeline</title>
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://unpkg.com/[email protected]/papaparse.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
.timeline-container {
position: relative;
max-width: 1200px;
margin: 0 auto;
}
.timeline-container::after {
content: '';
position: absolute;
width: 6px;
background-color: #3b82f6;
top: 0;
bottom: 0;
left: 50%;
margin-left: -3px;
border-radius: 10px;
}
.timeline-card {
padding: 10px 40px;
position: relative;
width: 50%;
box-sizing: border-box;
}
.timeline-card::after {
content: '';
position: absolute;
width: 25px;
height: 25px;
background-color: white;
border: 4px solid #3b82f6;
border-radius: 50%;
top: 15px;
z-index: 1;
}
.left {
left: 0;
}
.right {
left: 50%;
}
.left::after {
right: -12px;
}
.right::after {
left: -12px;
}
.timeline-content {
padding: 20px 30px;
background-color: white;
position: relative;
border-radius: 6px;
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
}
@media screen and (max-width: 768px) {
.timeline-container::after {
left: 31px;
}
.timeline-card {
width: 100%;
padding-left: 70px;
padding-right: 25px;
}
.timeline-card::after {
left: 18px;
}
.left::after, .right::after {
left: 18px;
}
.right {
left: 0%;
}
}
.status-pending {
background-color: #f59e0b;
}
.status-dismissed {
background-color: #6b7280;
}
.status-active {
background-color: #3b82f6;
}
.status-ruling {
background-color: #a855f7; /* purple-500 */
}
.expandable {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease-out;
}
</style>
</head>
<body class="bg-gray-50 min-h-screen">
<div class="container mx-auto px-4 py-8">
<header class="mb-12 text-center">
<h1 class="text-4xl font-bold text-blue-600 mb-4">AI Copyright Lawsuit Timeline</h1>
<p class="text-lg text-gray-600 max-w-2xl mx-auto">
<b>WIP - DUMMY DATA</b>Tracking legal cases involving artificial intelligence and copyright issues. This timeline visualizes key lawsuits, their status, and outcomes.
</p>
</header>
<div class="bg-blue-50 border border-blue-200 rounded-lg p-4 mb-6 max-w-4xl mx-auto">
<h3 class="text-lg font-bold text-blue-800 mb-2">Expert Commentary in Media (Sample Data)</h3>
<p class="text-gray-700 mb-3">Example of legal expert commentary on AI copyright cases (placeholder links):</p>
<ul class="space-y-2">
<li>
<a href="https://www.example.com/expert1" target="_blank" class="text-blue-600 hover:underline flex items-center">
<i class="fas fa-external-link-alt mr-2 text-xs"></i>
"The AI Copyright Battles That Could Shape the Future" - Law Review
</a>
</li>
<li>
<a href="https://www.example.com/expert2" target="_blank" class="text-blue-600 hover:underline flex items-center">
<i class="fas fa-external-link-alt mr-2 text-xs"></i>
"Why AI Training May Qualify as Fair Use" - Tech Policy Journal
</a>
</li>
<li>
<a href="https://www.example.com/expert3" target="_blank" class="text-blue-600 hover:underline flex items-center">
<i class="fas fa-external-link-alt mr-2 text-xs"></i>
"The Precedent Set by Authors Guild v. Google" - Copyright Today
</a>
</li>
</ul>
</div>
<div class="flex justify-center mb-8">
<div class="relative w-full max-w-md">
<input type="text" id="searchInput" placeholder="Search cases..." class="w-full px-4 py-2 rounded-lg border border-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500">
<i class="fas fa-search absolute right-3 top-3 text-gray-400"></i>
</div>
</div>
<div class="flex justify-center mb-6">
<div class="flex flex-wrap gap-2 justify-center">
<button class="filter-btn px-4 py-2 rounded-full bg-yellow-100 text-yellow-700 hover:bg-yellow-200 transition" data-filter="pending">
Pending
</button>
<button class="filter-btn px-4 py-2 rounded-full bg-blue-100 text-blue-700 hover:bg-blue-200 transition" data-filter="active">
Active
</button>
<button class="filter-btn px-4 py-2 rounded-full bg-purple-100 text-purple-700 hover:bg-purple-200 transition" data-filter="ruling">
Ruling
</button>
<button class="filter-btn px-4 py-2 rounded-full bg-gray-100 text-gray-700 hover:bg-gray-200 transition" data-filter="dismissed">
Dismissed
</button>
</div>
</div>
<div class="timeline-container" id="timeline"></div>
<script>
// 1. Build each card from the row
function createCard(data, idx) {
const side = idx % 2 === 0 ? 'left' : 'right';
const stamp = data.status.toLowerCase();
return `
<div class="timeline-card ${side}" data-status="${stamp}" data-search="
${data.caseName} ${data.plaintiffs} ${data.defendants} ${data.filed} ${data.court}
">
<div class="timeline-content">
<div class="flex justify-between items-start mb-2">
<h2 class="text-xl font-bold text-gray-800">${data.caseName}</h2>
<span class="px-3 py-1 rounded-full text-xs font-semibold text-white status-${stamp}">
${stamp.charAt(0).toUpperCase()+stamp.slice(1)}
</span>
</div>
<div class="flex flex-wrap gap-2 mb-3">
<span class="bg-gray-100 px-2 py-1 rounded text-xs">
<i class="fas fa-user-tie mr-1"></i>${data.plaintiffs}
</span>
<span class="bg-gray-100 px-2 py-1 rounded text-xs">
<i class="fas fa-user-shield mr-1"></i>${data.defendants}
</span>
</div>
<div class="text-sm text-gray-600 mb-3">
<span class="mr-3">
<i class="far fa-calendar mr-1"></i>Filed: ${data.filed}
</span>
<span>
<i class="fas fa-gavel mr-1"></i>Court: ${data.court}
</span>
</div>
<!-- ← insert the summary here -->
<p class="text-gray-700 mb-3">${data.summary}</p>
<a href="${data.link}" target="_blank" class="text-blue-600 hover:underline text-sm flex items-center">
<i class="fas fa-file-pdf mr-2"></i>View Documents
</a>
</div>
</div>`;
}
// then your Papa.parse call stays the same:
Papa.parse('cases.csv', {
download: true,
header: true,
skipEmptyLines: true,
complete: ({ data }) => {
const container = document.getElementById('timeline');
data.forEach((row, i) => {
container.insertAdjacentHTML('beforeend', createCard(row, i));
});
attachFiltersAndSearch();
}
});
// 3. Filters & search (identical to before)
function attachFiltersAndSearch() {
document.querySelectorAll('.filter-btn').forEach(btn => {
btn.addEventListener('click', () => {
const f = btn.dataset.filter;
document.querySelectorAll('.timeline-card').forEach(c => {
c.style.display = (f==='all' || c.dataset.status===f) ? 'block' : 'none';
});
document.querySelectorAll('.filter-btn').forEach(b => b.classList.remove('bg-blue-200','bg-orange-200','bg-green-200','bg-gray-200'));
const bg = btn.classList.contains('bg-blue-100') ? 'bg-blue-200'
: btn.classList.contains('bg-orange-100') ? 'bg-orange-200'
: btn.classList.contains('bg-green-100') ? 'bg-green-200'
: 'bg-gray-200';
btn.classList.add(bg);
});
});
document.getElementById('searchInput').addEventListener('input', e => {
const term = e.target.value.toLowerCase();
document.querySelectorAll('.timeline-card').forEach(c => {
c.style.display = c.dataset.search.toLowerCase().includes(term) ? 'block' : 'none';
});
});
}
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=fdaudens/ai-copyright-lawsuits" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>