From c65aeb4bacd80df359740707ec6b527236d3daf8 Mon Sep 17 00:00:00 2001 From: etalon Date: Sat, 13 Jun 2026 12:34:11 +0200 Subject: [PATCH] feat: add Source button to the task detail view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tasks imported from a ticketing system now show a "Source ↗" button in the task detail actions (same affordance as the atomization board), linking to the upstream ticket. The small inline key link is kept too. Co-Authored-By: Claude Fable 5 --- web/static/js/task.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/web/static/js/task.js b/web/static/js/task.js index ab07488..2d7f85f 100644 --- a/web/static/js/task.js +++ b/web/static/js/task.js @@ -147,6 +147,18 @@ function renderActions() { catch (e) { toast(e.message, 'err'); } }; + // link to the upstream ticket (same affordance as the atomization board) + if (t.external && t.external.url) { + const a = document.createElement('a'); + a.className = 'btn'; + a.style.marginRight = '8px'; + a.href = t.external.url; + a.target = '_blank'; + a.rel = 'noopener'; + a.textContent = 'Source ↗'; + host.appendChild(a); + } + if (root.dataset.isDeveloper === '1') { if (t.status === 'published' && !myClaim()) add('Request assignment', post('claim', { note: '' }), true); if (myClaim() && ['published', 'claim_requested'].includes(t.status)) add('Withdraw request', post('claim/withdraw'));