Spaces:
Running
Running
// scripts/ui.js | |
// --- DOM Element Getters --- | |
const getElement = (id) => document.getElementById(id); | |
// --- State --- | |
const streamingData = [ | |
// ... (keep the full streamingData array here) | |
]; | |
const rssFeedData = { | |
// ... (keep the full rssFeedData object here) | |
}; | |
// --- Functions --- | |
function showNotification(title, message) { | |
const notification = getElement('notification'); | |
getElement('notification-title').textContent = title; | |
getElement('notification-message').textContent = message; | |
notification.classList.remove('hidden'); | |
notification.classList.add('show'); | |
setTimeout(() => { | |
notification.classList.remove('show'); | |
setTimeout(() => notification.classList.add('hidden'), 300); | |
}, 3000); | |
} | |
function saveShow(title, broadcastTime) { | |
console.log(`Saved show: ${title}`); | |
showNotification("Reminder Set!", `We'll notify you when "${title}" is about to broadcast.`); | |
if (broadcastTime) { | |
const broadcastDate = new Date(broadcastTime); | |
const now = new Date(); | |
if (broadcastDate > now) { | |
const timeUntilBroadcast = broadcastDate - now; | |
setTimeout(() => { | |
showNotification("Starting Soon!", `"${title}" will begin broadcasting in 30 minutes!`); | |
}, timeUntilBroadcast - (30 * 60 * 1000)); | |
} | |
} | |
} | |
function loadRecommendations(filter = 'all') { | |
const container = getElement('recommendations-container'); | |
container.innerHTML = ''; | |
let filteredData = streamingData; | |
// ... (keep the filtering logic here) | |
filteredData.forEach(item => { | |
const card = document.createElement('div'); | |
card.className = 'stream-card bg-white rounded-lg overflow-hidden shadow-md hover:shadow-xl transition duration-300 fade-in p-4'; | |
// ... (keep the card.innerHTML logic here) | |
container.appendChild(card); | |
}); | |
} | |
function loadRSSFeed(filter) { | |
const container = getElement('rss-feed'); | |
container.innerHTML = ''; | |
const feedItems = rssFeedData[filter] || rssFeedData.all; | |
feedItems.forEach(item => { | |
const feedItem = document.createElement('div'); | |
// ... (keep the rss item creation logic here) | |
container.appendChild(feedItem); | |
}); | |
} | |
function setupTab(tabId, sectionId) { | |
getElement(tabId).addEventListener('click', () => { | |
// Deactivate all tabs and hide all sections | |
document.querySelectorAll('.tab').forEach(t => t.classList.replace('active', 'inactive')); | |
document.querySelectorAll('.production-panel > div[id$="-section"]').forEach(s => s.classList.add('hidden')); | |
// Activate the selected tab and show the corresponding section | |
getElement(tabId).classList.replace('inactive', 'active'); | |
getElement(sectionId).classList.remove('hidden'); | |
}); | |
} | |
// --- Initialization --- | |
export function initUI() { | |
loadRecommendations(); | |
loadRSSFeed('all'); | |
// Production panel toggle | |
getElement('production-button').addEventListener('click', () => { | |
getElement('production-panel').classList.toggle('open'); | |
}); | |
// RSS feed filter buttons | |
document.querySelectorAll('.rss-filter-btn').forEach(btn => { | |
btn.addEventListener('click', function() { | |
document.querySelectorAll('.rss-filter-btn').forEach(b => b.classList.replace('bg-indigo-100', 'bg-gray-100')); | |
this.classList.replace('bg-gray-100', 'bg-indigo-100'); | |
loadRSSFeed(this.dataset.filter); | |
}); | |
}); | |
// Setup production panel tabs | |
setupTab('record-tab', 'record-section'); | |
setupTab('edit-tab', 'edit-section'); | |
setupTab('share-tab', 'share-section'); | |
setupTab('rank-tab', 'rank-section'); | |
} |