Arena Concert Production Schedule Block

Arena Concert Production Schedule Block

Define time, action, and key personnel for show days on tour.

1. Show Metadata

2. Event Log (Sequential)

Time Description / Action Crew / Key Del.

Add New Event:

No events logged.

'; return; } schedule.forEach(e => { const item = document.createElement('div'); item.className = 'apscb-list-item bg-white border-l-4 border-gray-400 rounded-lg'; item.innerHTML = ` `; list.appendChild(item); }); } // --- Preview Generation --- window.apscbUpdatePreview = function() { // Metadata const venue = document.getElementById('apscb-venue').value || "Venue Name"; const dateRaw = document.getElementById('apscb-date').value; const date = dateRaw ? new Date(dateRaw).toLocaleDateString('en-US') : "N/A"; const pm = document.getElementById('apscb-pm').value || "N/A"; // Update Header/Metadata document.getElementById('disp-venue').textContent = venue; document.getElementById('disp-date').textContent = date; document.getElementById('disp-pm').textContent = pm; // Populate Schedule Table const tbody = document.getElementById('disp-schedule-tbody'); tbody.innerHTML = ''; schedule.forEach(e => { const tr = document.createElement('tr'); // Highlight key events (e.g., Load-in Start, Soundcheck, Doors, Show, Load-out) const isKey = e.action.toLowerCase().includes('load-in') || e.action.toLowerCase().includes('soundcheck') || e.action.toLowerCase().includes('doors') || e.action.toLowerCase().includes('show') || e.action.toLowerCase().includes('load-out'); if (isKey) { tr.classList.add('apscb-key-event'); } tr.innerHTML = ` ${e.time} ${isKey ? 'CRITICAL' : 'ROUTINE'} ${escapeHtml(e.action)} ${escapeHtml(e.crew)} `; tbody.appendChild(tr); }); }; // --- PDF Download --- window.apscbDownloadPDF = function() { // Ensure preview is up to date apscbUpdatePreview(); const element = document.getElementById('apscb-print-area'); const venueName = document.getElementById('apscb-venue').value.split(',')[0] || "Schedule"; document.body.classList.add('apscb-generating-pdf'); const opt = { margin: [0.5, 0.5], filename: `${venueName.replace(/\s+/g, '_')}_Production_Schedule.pdf`, image: { type: 'jpeg', quality: 0.98 }, html2canvas: { scale: 2, useCORS: true }, jsPDF: { unit: 'in', format: 'letter', orientation: 'landscape' } }; html2pdf().set(opt).from(element).save().then(() => { document.body.classList.remove('apscb-generating-pdf'); }); }; // Utility: HTML Escape function escapeHtml(text) { if (!text) return ''; return text.replace(/[&<>"']/g, function(m) { switch (m) { case '&': return '&'; case '<': return '<'; case '>': return '>'; case '"': return '"'; case "'": return '''; default: return m; } }); }
Scroll to Top