systemquery/src/static/js/ui/peer_name.mjs

44 lines
1.2 KiB
JavaScript

"use strict";
function handle_toggle_id(event) {
event.target.closest(`.peer-name`)
.querySelector(`.peer-name-id`)
.classList.toggle(`invisible-gone`);
}
async function handle_copy_id(event) {
await navigator.clipboard.writeText(event.target
.closest(`.peer-name`)
.dataset.peer_id);
// TODO: Show notification here
}
export default function peer_name(peer) {
const result = document.createElement("span");
result.classList.add(`peer-name`);
result.dataset.peer_id = peer.id;
result.dataset.peer_name = peer.name;
const peer_name = document.createElement("span");
peer_name.classList.add(`peer-name-name`);
peer_name.appendChild(document.createTextNode(peer.name));
const peer_id = document.createElement("span");
peer_id.classList.add(`peer-name-id`, `invisible-gone`);
peer_id.appendChild(document.createTextNode(
peer.id.substring(0, 7)
));
peer_name.addEventListener("click", handle_toggle_id);
peer_id.addEventListener("click", handle_copy_id);
// TODO: When the id is clicked, copy it to the clipboard - we may need a fancy tooltip library for this
// text-overflow: ellipsis; may be useful here
result.replaceChildren(peer_name, peer_id);
return result;
}