Coding
Coding
<script>
const sheetUrl = 'https://docs.google.com/spreadsheets/d/e/2PACX-
1vQGpS9aBJqQpVuxCFtUi91QkjNT0r0Ic1XE8PTRIHQq3k7co9wCIA5P2thy4s
ka9IG_2aKinDYdMeIX/pub?output=csv';
fetch(sheetUrl)
.then(res => res.text())
.then(csvText => {
const rows = csvText.trim().split('\n');
const headers = rows.shift().split(',');
const data = rows.map(row => {
const values = row.split(',');
return headers.reduce((acc, header, i) => {
acc[header.trim()] = values[i] ? values[i].trim() : '';
return acc;
}, {});
});
initTemplateTable(data);
});
function initTemplateTable(data) {
const container = document.getElementById('templateContainer');
function renderTable(filteredData) {
container.innerHTML = '';
const grouped = {};
filteredData.forEach(item => {
if (!grouped[item.Topic]) grouped[item.Topic] = [];
grouped[item.Topic].push(item);
});
heading.addEventListener('click', () => {
const isVisible = list.style.display !== 'none';
list.style.display = isVisible ? 'none' : 'block';
heading.classList.toggle('collapsed');
});
items.forEach(item => {
const listItem = document.createElement('li');
const dateParts = item.Date.split('/');
const fileDate = new Date(`20${dateParts[2]}`, dateParts[1] - 1,
dateParts[0]);
listItem.innerHTML = `
<a href="${item.Link}" target="_blank">${item.Title}</a>
<span class="date">(${fileDate.toLocaleDateString('en-GB',
{ month: 'long', year: 'numeric' })})</span>
${isNew ? '<span class="new-badge">NEW</span>' : ''}
`;
list.appendChild(listItem);
});
section.appendChild(heading);
section.appendChild(list);
container.appendChild(section);
});
}
renderTable(data);
document.getElementById('searchInput').addEventListener('input', (e)
=> {
const value = e.target.value.toLowerCase();
const filtered = data.filter(item =>
item.Title.toLowerCase().includes(value) ||
item.Topic.toLowerCase().includes(value)
);
renderTable(filtered);
});
}
</script>