' +
@@ -709,7 +711,30 @@ table.addEventListener('change', function (e) {
ev.preventDefault();
var action = btn.getAttribute('data-action');
var id = btn.getAttribute('data-id');
- if (!action || !id) return;
+ if (!action) return;
+
+ if (action === 'copy-ticket') {
+ var code = btn.getAttribute('data-code') || '';
+ if (!code) return;
+ if (navigator.clipboard && navigator.clipboard.writeText) {
+ navigator.clipboard.writeText(code)
+ .then(function () {
+ var original = btn.textContent;
+ btn.textContent = '✓';
+ setTimeout(function () { btn.textContent = original; }, 800);
+ })
+ .catch(function () {
+ // Fallback: select/copy via prompt
+ window.prompt('Copy ticket number:', code);
+ });
+ } else {
+ window.prompt('Copy ticket number:', code);
+ }
+ return;
+ }
+
+ if (!id) return;
+
if (action === 'resolve-ticket') {
if (!confirm('Mark ticket as resolved?')) return;
apiJson('/api/tickets/' + encodeURIComponent(id) + '/resolve', {method: 'POST', body: '{}'})
diff --git a/docs/changelog.md b/docs/changelog.md
index 034ccf0..1149530 100644
--- a/docs/changelog.md
+++ b/docs/changelog.md
@@ -45,6 +45,14 @@
- Inbox import: when the Graph body is effectively empty and an EML is stored, extract the first HTML attachment and store it as html_body.
- Inbox message detail: for already-stored messages with effectively empty bodies, dynamically fall back to extracting the HTML attachment from the stored EML so the Inbox popup shows the report without requiring a reset.
+---
+
+## v20260108-32-runchecks-ticket-copy-button
+
+- Added a small copy icon next to the ticket number in the Run Checks popup.
+- Implemented copy-to-clipboard functionality to copy only the ticket number.
+- Prevented accidental selection of the appended status text (e.g. “Active”) when copying tickets.
+
================================================================================================================================================
## v0.1.18