diff --git a/src/popup/views/addressDetail.js b/src/popup/views/addressDetail.js index 2deb222..913f949 100644 --- a/src/popup/views/addressDetail.js +++ b/src/popup/views/addressDetail.js @@ -216,12 +216,19 @@ function renderTransactions(txs) { const ago = escapeHtml(timeAgo(tx.timestamp)); const iso = escapeHtml(isoDate(tx.timestamp)); html += `
`; - html += `
${ago}${dirLabel}${err}
`; + html += `
${ago}${dirLabel}${err}
`; html += `
${dot}${addrStr}${amountStr}
`; html += `
`; i++; } list.innerHTML = html; + list.querySelectorAll("[data-copy]").forEach((el) => { + el.addEventListener("click", (e) => { + e.stopPropagation(); + navigator.clipboard.writeText(el.dataset.copy); + showFlash("Copied!"); + }); + }); list.querySelectorAll(".tx-row").forEach((row) => { row.addEventListener("click", () => { const idx = parseInt(row.dataset.tx, 10); diff --git a/src/popup/views/addressToken.js b/src/popup/views/addressToken.js index 72c95c0..68703e1 100644 --- a/src/popup/views/addressToken.js +++ b/src/popup/views/addressToken.js @@ -293,12 +293,19 @@ function renderTransactions(txs) { const ago = escapeHtml(timeAgo(tx.timestamp)); const iso = escapeHtml(isoDate(tx.timestamp)); html += `
`; - html += `
${ago}${dirLabel}${err}
`; + html += `
${ago}${dirLabel}${err}
`; html += `
${dot}${addrStr}${amountStr}
`; html += `
`; i++; } list.innerHTML = html; + list.querySelectorAll("[data-copy]").forEach((el) => { + el.addEventListener("click", (e) => { + e.stopPropagation(); + navigator.clipboard.writeText(el.dataset.copy); + showFlash("Copied!"); + }); + }); list.querySelectorAll(".tx-row").forEach((row) => { row.addEventListener("click", () => { const idx = parseInt(row.dataset.tx, 10); diff --git a/src/popup/views/home.js b/src/popup/views/home.js index ea923e0..0ba2df3 100644 --- a/src/popup/views/home.js +++ b/src/popup/views/home.js @@ -130,12 +130,19 @@ function renderHomeTxList(ctx) { const ago = escapeHtml(timeAgo(tx.timestamp)); const iso = escapeHtml(isoDate(tx.timestamp)); html += `
`; - html += `
${ago}${dirLabel}${err}
`; + html += `
${ago}${dirLabel}${err}
`; html += `
${dot}${addrStr}${amountStr}
`; html += `
`; i++; } list.innerHTML = html; + list.querySelectorAll("[data-copy]").forEach((el) => { + el.addEventListener("click", (e) => { + e.stopPropagation(); + navigator.clipboard.writeText(el.dataset.copy); + showFlash("Copied!"); + }); + }); list.querySelectorAll(".home-tx-row").forEach((row) => { row.addEventListener("click", () => { const idx = parseInt(row.dataset.tx, 10); diff --git a/src/popup/views/transactionDetail.js b/src/popup/views/transactionDetail.js index d24e040..bbfb0d9 100644 --- a/src/popup/views/transactionDetail.js +++ b/src/popup/views/transactionDetail.js @@ -158,8 +158,9 @@ function render() { loadCalldata(tx.hash, tx.to); } - $("tx-detail-time").textContent = - isoDate(tx.timestamp) + " (" + timeAgo(tx.timestamp) + ")"; + const isoStr = isoDate(tx.timestamp); + $("tx-detail-time").innerHTML = + copyableHtml(isoStr) + " (" + escapeHtml(timeAgo(tx.timestamp)) + ")"; $("tx-detail-status").textContent = tx.isError ? "Failed" : "Success"; showView("transaction");