From 73e158062a74ceb7befe98d6519f68143338d2de Mon Sep 17 00:00:00 2001 From: Wayne Elgin <wayne.elgin@gmail.com> Date: Tue, 14 Jul 2020 18:07:33 -0500 Subject: [PATCH] Fix copy mailto email addresses --- src/js/main.js | 96 ++++++++++++++++++++++++-------------------------- 1 file changed, 47 insertions(+), 49 deletions(-) diff --git a/src/js/main.js b/src/js/main.js index 16d4b0b7..41202eda 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -2,52 +2,50 @@ // Copy email address ---------------------------------------------------------- -// function getEmailOnly(element) { -// var emailRegex = /^(?:mailto:?)([a-zA-Z0-9_\-.]+@[a-zA-Z0-9-]+\.[a-zA-Z\-.]{2,})(?:\?subject\=.*)?$/; -// return emailRegex.exec(element.getAttribute("href"))[1] -// } - -// function getEmailElements() { -// return document.querySelectorAll("[data-mailto]") -// } - -// function generateCopyEmailButton(element) { -// var email = getEmailOnly(element); -// var newEl = document.createElement("button"); -// newEl.className = "c-email-button"; -// newEl.setAttribute("data-copy-email", true); -// newEl.setAttribute("type", "button"); -// newEl.addEventListener("click", function(e) { -// navigator.clipboard.writeText(email).then(function () { -// console.log(email + ' copy successful!'); -// }).catch(function (error) { -// console.error('failed to copy ' + email); -// window.alert("Please enable clipboard access for this site."); -// }); -// }) -// newEl.innerText = "Copy" -// element.after(newEl); -// } - -// function processEmailHrefs() { -// var emailElements = getEmailElements(); -// emailElements.forEach(generateCopyEmailButton); -// } - -// navigator.clipboard && navigator.permissions && navigator.permissions.query({ -// name: 'clipboard-write' -// }).then(function (permissionStatus) { -// // Will be 'granted', 'denied' or 'prompt': -// if (permissionStatus.state === "granted") { -// processEmailHrefs(); -// } - -// // Listen for changes to the permission state -// permissionStatus.onchange = function () { -// if (permissionStatus.state === "granted") { -// processEmailHrefs(); -// } -// }; -// }); - -// generateCopyEmailButton(); +function getEmailOnly(element) { + var emailRegex = /^(?:mailto:?)([a-zA-Z0-9_\-.]+@[a-zA-Z0-9-]+\.[a-zA-Z\-.]{2,})(?:\?subject\=.*)?$/; + return emailRegex.exec(element.getAttribute("href"))[1] +} + +function getEmailElements() { + return document.querySelectorAll("[data-mailto]"); +} + +function generateCopyEmailButton(element) { + var email = getEmailOnly(element); + var newEl = document.createElement("button"); + newEl.className = "c-email-button"; + newEl.setAttribute("data-copy-email", true); + newEl.setAttribute("type", "button"); + newEl.addEventListener("click", function(e) { + navigator.clipboard.writeText(email).then(function () { + console.log('successfully copied: "' + email + '"'); + }).catch(function (error) { + console.error('failed to copy ' + email); + window.alert("Please enable clipboard access for this site."); + }); + }) + newEl.innerText = "Copy" + element.after(newEl); +} + +function processEmailHrefs() { + var emailElements = getEmailElements(); + emailElements.forEach(generateCopyEmailButton); +} + +navigator.clipboard && navigator.permissions && navigator.permissions.query({ + name: 'clipboard-write' +}).then(function (permissionStatus) { + // Will be 'granted', 'denied' or 'prompt': + if (permissionStatus.state === "granted") { + processEmailHrefs(); + } + + // Listen for changes to the permission state + permissionStatus.onchange = function () { + if (permissionStatus.state === "granted") { + processEmailHrefs(); + } + }; +}); -- GitLab