On phones (at least iPhone, probably on Android), copy and pasting is a fiddly operation. (Heck I remember when the first iPhones didn't even have copy and paste, took them a while to get the loupe ui for that right)
One convenient widget I've seen adds a "click-to-copy" widget, like here's one for branch name in git:
I whipped up a version at jsitor.com but it was a little easier to share this codepen....Here's the JS:
const makeCopyToClipboardWidgets = () => { document.querySelectorAll(".click-to-copy").forEach((el, i) => { const widget = document.createElement('a'); widget.innerHTML = '⧉'; widget.className = 'click-to-copy-widget'; widget.addEventListener("click", () =>{ const text = el.tagName === 'A' ? el.href : el.innerText navigator.clipboard.writeText(text); widget.classList.add('active'); setTimeout(() => { widget.classList.remove('active');}, 500) }); el.after(widget); }); } document.addEventListener('DOMContentLoaded', makeCopyToClipboardWidgets);
And a little CSS flavoring:
.click-to-copy { border: black 1px dashed; } .click-to-copy-widget { cursor: pointer; position: relative; top: -4px; font-weight: bolder; font-size: 1.2em; } .click-to-copy-widget.active { color: red; }
So then any DOM object of class "click-to-copy" will get a border and a little icon to click:
(pardon my developer junkbox content)Some details:
- I dug around for the Unicode U+29C9, "Two Joined Squares" for the icon
- I add a little "active" class and the remove it half a second later to provide some visual feedback
- after I finished the first version, I realized a common usecase is when you want to copy a link - especially useful because it's all to easy to accidentally follow the link as you're trying to copy it on a phone. But sometimes link have a different caption than the content that is worth copying (leaving out "https://", for instance, to make it cleaner). So my code special cases A tags, and grabs the href for them instead of the text...
So, pleased with the outcome. "Vanilla JS" solutions work well for me, because there's a lot on my sites that don't have a node-ish build process... but I admit i still think a bit in terms of jQuery, so that You Might Not Need JQuery page is still a godsend, even though I haven't used jQuery in a while... it was just such a clean syntax for element selection, adding classes, and putting stuff on "ready"...
No comments:
Post a Comment