(list: HTMLElement | null)
| 292 | } |
| 293 | |
| 294 | function setupActionHandlers(list: HTMLElement | null): void { |
| 295 | if (!list || actionHandlersReady) return; |
| 296 | |
| 297 | list.addEventListener("click", async (event) => { |
| 298 | const target = event.target as HTMLElement; |
| 299 | |
| 300 | const installButton = target.closest( |
| 301 | ".copy-install-url-btn" |
| 302 | ) as HTMLButtonElement | null; |
| 303 | |
| 304 | if (!installButton) return; |
| 305 | |
| 306 | event.stopPropagation(); |
| 307 | const installUrl = installButton.dataset.installUrl || ""; |
| 308 | if (!installUrl) { |
| 309 | showToast("No install URL available for this extension", "error"); |
| 310 | return; |
| 311 | } |
| 312 | const success = await copyToClipboard(installUrl); |
| 313 | showToast( |
| 314 | success ? "Extension URL copied!" : "Failed to copy extension URL", |
| 315 | success ? "success" : "error" |
| 316 | ); |
| 317 | return; |
| 318 | }); |
| 319 | |
| 320 | list.addEventListener("click", (event) => { |
| 321 | const target = event.target as HTMLElement; |
| 322 | |
| 323 | const thumbnailButton = target.closest( |
| 324 | ".resource-thumbnail-btn" |
| 325 | ) as HTMLElement | null; |
| 326 | if (thumbnailButton) { |
| 327 | event.preventDefault(); |
| 328 | event.stopPropagation(); |
| 329 | const extensionId = thumbnailButton.dataset.extensionId; |
| 330 | if (!extensionId) return; |
| 331 | const previewButton = thumbnailButton.closest(".resource-preview") as HTMLElement | null; |
| 332 | openDetailsModal(extensionId, undefined, previewButton || undefined); |
| 333 | return; |
| 334 | } |
| 335 | |
| 336 | if ( |
| 337 | target.closest(".resource-actions") || |
| 338 | target.closest(".extension-details-thumbnail-btn") |
| 339 | ) { |
| 340 | return; |
| 341 | } |
| 342 | |
| 343 | const card = target.closest(".resource-item") as HTMLElement | null; |
| 344 | const previewButton = card?.querySelector(".resource-preview") as HTMLElement | null; |
| 345 | const extensionId = card?.dataset.extensionId; |
| 346 | if (extensionId) { |
| 347 | openDetailsModal(extensionId, undefined, previewButton || undefined); |
| 348 | } |
| 349 | }); |
| 350 | |
| 351 | list.addEventListener("keydown", (event) => { |
no test coverage detected