From f1c8d0c7eaee07fb526012b85cd10851cee384dd Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Mon, 4 May 2026 10:33:50 +0200 Subject: [PATCH] Feature: Add Discord sharing functionality and refactor entry action buttons --- ui/renderer.js | 63 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 48 insertions(+), 15 deletions(-) diff --git a/ui/renderer.js b/ui/renderer.js index 0a15f64..6abe9f9 100644 --- a/ui/renderer.js +++ b/ui/renderer.js @@ -223,23 +223,54 @@ window.addEventListener('DOMContentLoaded', async () => { entry.classList.add('entry'); entry.style.overflow = 'hidden'; + const entryActions = document.createElement('div'); + entryActions.classList.add('entry-actions'); + + const uploadButton = document.createElement('button'); + uploadButton.type = 'button'; + uploadButton.innerHTML = ''; + uploadButton.classList.add('entry-icon-button', 'upload-entry-button'); + uploadButton.title = 'Send to Discord'; + uploadButton.setAttribute('aria-label', 'Send to Discord'); + uploadButton.disabled = isLoading; + uploadButton.addEventListener('click', (e) => { + e.preventDefault(); + e.stopPropagation(); + if (isLoading) { + return; + } + + const webhookUrl = getDiscordWebhookUrl(); + if (!webhookUrl) { + alert('Add a Discord Webhook URL in Settings first.'); + openSettings(); + return; + } + + isLoading = true; + summarizeButton.disabled = true; + setLoadingMessage('Sending to Discord...'); + setActionLinksDisabled(true); + + window.api.sendSummaryToDiscord(item.id, webhookUrl) + .catch(err => { + alert('Error sending to Discord: ' + err.message); + }) + .finally(() => { + loadingIndicator.style.display = 'none'; + loadingIndicator.textContent = 'Loading...'; + summarizeButton.disabled = false; + isLoading = false; + setActionLinksDisabled(false); + }); + }); + const deleteButton = document.createElement('button'); deleteButton.type = 'button'; deleteButton.innerHTML = '×'; - deleteButton.classList.add('delete-entry-button'); - deleteButton.style.width = '24px'; - deleteButton.style.height = '24px'; - deleteButton.style.display = 'flex'; - deleteButton.style.alignItems = 'center'; - deleteButton.style.justifyContent = 'center'; - deleteButton.style.border = 'none'; - deleteButton.style.background = 'transparent'; - deleteButton.style.color = '#9f1239'; - deleteButton.style.fontSize = '22px'; - deleteButton.style.fontWeight = 'normal'; - deleteButton.style.cursor = 'pointer'; - deleteButton.style.padding = '0'; - deleteButton.style.lineHeight = '1'; + deleteButton.classList.add('entry-icon-button', 'delete-entry-button'); + deleteButton.title = 'Delete entry'; + deleteButton.setAttribute('aria-label', 'Delete entry'); deleteButton.disabled = isLoading; deleteButton.addEventListener('click', (e) => { e.preventDefault(); @@ -352,7 +383,9 @@ window.addEventListener('DOMContentLoaded', async () => { headlineMain.appendChild(arrow); headlineMain.appendChild(titleEl); headline.appendChild(headlineMain); - headline.appendChild(deleteButton); + entryActions.appendChild(uploadButton); + entryActions.appendChild(deleteButton); + headline.appendChild(entryActions); const channelEl = document.createElement('span'); channelEl.style.fontSize = '14px';