| Earl Lee | 2e463fb | 2025-04-17 11:22:22 -0700 | [diff] [blame^] | 1 | import { TimelineMessage } from "../types"; |
| 2 | |
| 3 | /** |
| 4 | * Adds collapsible functionality to long content elements. |
| 5 | * This creates a toggle button that allows users to expand/collapse long text content. |
| 6 | * |
| 7 | * @param message - The timeline message containing the content |
| 8 | * @param textEl - The DOM element containing the text content |
| 9 | * @param containerEl - The container element for the text and copy button |
| 10 | * @param contentEl - The outer content element that will contain everything |
| 11 | */ |
| 12 | export function addCollapsibleFunctionality( |
| 13 | message: TimelineMessage, |
| 14 | textEl: HTMLElement, |
| 15 | containerEl: HTMLElement, |
| 16 | contentEl: HTMLElement |
| 17 | ): void { |
| 18 | // Don't collapse end_of_turn messages (final output) regardless of length |
| 19 | if (message.content.length > 1000 && !message.end_of_turn) { |
| 20 | textEl.classList.add("collapsed"); |
| 21 | |
| 22 | const toggleButton = document.createElement("button"); |
| 23 | toggleButton.className = "collapsible"; |
| 24 | toggleButton.textContent = "Show more..."; |
| 25 | toggleButton.addEventListener("click", () => { |
| 26 | textEl.classList.toggle("collapsed"); |
| 27 | toggleButton.textContent = textEl.classList.contains("collapsed") |
| 28 | ? "Show more..." |
| 29 | : "Show less"; |
| 30 | }); |
| 31 | |
| 32 | contentEl.appendChild(containerEl); |
| 33 | contentEl.appendChild(toggleButton); |
| 34 | } else { |
| 35 | contentEl.appendChild(containerEl); |
| 36 | } |
| 37 | } |