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");