| 1 | // Evidence board system
|
| 2 |
|
| 3 | const EvidencePage = {
|
| 4 | render() {
|
| 5 | const docs = Array.from(GameState.evidence.documents.values());
|
| 6 | const audio = Array.from(GameState.evidence.audioLogs.values());
|
| 7 | const photos = Array.from(GameState.evidence.photographs.values());
|
| 8 | const connections = GameState.evidence.connections;
|
| 9 |
|
| 10 | let html = `
|
| 11 | <section class="hero">
|
| 12 | <h1>EVIDENCE BOARD</h1>
|
| 13 | <p class="lead">Connect the pieces. Find the truth.</p>
|
| 14 | </section>
|
| 15 | `;
|
| 16 |
|
| 17 | if (docs.length > 0) {
|
| 18 | html += `
|
| 19 | <section class="panel">
|
| 20 | <p class="panel-title">DOCUMENTS (${docs.length})</p>
|
| 21 | <div class="evidence-list">
|
| 22 | `;
|
| 23 | docs.forEach(doc => {
|
| 24 | html += `
|
| 25 | <div class="evidence-item document" data-id="${doc.id}">
|
| 26 | <div class="evidence-icon">📄</div>
|
| 27 | <div class="evidence-content">
|
| 28 | <div class="evidence-title">${doc.title}</div>
|
| 29 | <div class="evidence-excerpt">${doc.excerpt || doc.description}</div>
|
| 30 | ${doc.date ? `<div class="evidence-meta">Date: ${doc.date}</div>` : ''}
|
| 31 | </div>
|
| 32 | </div>
|
| 33 | `;
|
| 34 | });
|
| 35 | html += '</div></section>';
|
| 36 | }
|
| 37 |
|
| 38 | if (audio.length > 0) {
|
| 39 | html += `
|
| 40 | <section class="panel">
|
| 41 | <p class="panel-title">AUDIO RECORDINGS (${audio.length})</p>
|
| 42 | <div class="evidence-list">
|
| 43 | `;
|
| 44 | audio.forEach(record => {
|
| 45 | html += `
|
| 46 | <div class="evidence-item audio">
|
| 47 | <div class="evidence-icon">🔊</div>
|
| 48 | <div class="evidence-content">
|
| 49 | <div class="evidence-title">${record.title}</div>
|
| 50 | <div class="evidence-excerpt">${record.transcript || 'Transcript unavailable'}</div>
|
| 51 | </div>
|
| 52 | </div>
|
| 53 | `;
|
| 54 | });
|
| 55 | html += '</div></section>';
|
| 56 | }
|
| 57 |
|
| 58 | if (connections.length > 0) {
|
| 59 | html += `
|
| 60 | <section class="panel">
|
| 61 | <p class="panel-title">CONNECTIONS (${connections.length})</p>
|
| 62 | <div class="connections-list">
|
| 63 | `;
|
| 64 | connections.forEach(conn => {
|
| 65 | html += `
|
| 66 | <div class="connection-item">
|
| 67 | <span class="conn-id1">${conn.id1}</span>
|
| 68 | <span class="conn-arrow">→</span>
|
| 69 | <span class="conn-desc">${conn.description}</span>
|
| 70 | <span class="conn-arrow">→</span>
|
| 71 | <span class="conn-id2">${conn.id2}</span>
|
| 72 | </div>
|
| 73 | `;
|
| 74 | });
|
| 75 | html += '</div></section>';
|
| 76 | }
|
| 77 |
|
| 78 | if (docs.length === 0 && audio.length === 0 && photos.length === 0) {
|
| 79 | html += `
|
| 80 | <section class="panel">
|
| 81 | <p>No evidence collected yet. Solve puzzles and discover documents to populate this board.</p>
|
| 82 | </section>
|
| 83 | `;
|
| 84 | }
|
| 85 |
|
| 86 | return html;
|
| 87 | }
|
| 88 | };
|