28 lines
827 B
JavaScript
28 lines
827 B
JavaScript
// stolen from svelte-copy-clipboard-action
|
|
|
|
export function clipboard(node, { trigger = "click", text = "" } = {}) {
|
|
const handle = async (e) => {
|
|
await navigator.clipboard.writeText(text).then(
|
|
() =>
|
|
node.dispatchEvent(
|
|
new CustomEvent("copied", { detail: { clipboard: text } })
|
|
),
|
|
(e) =>
|
|
node.dispatchEvent(new CustomEvent("error", { detail: { error: e } }))
|
|
);
|
|
};
|
|
|
|
node.addEventListener(trigger, handle, true);
|
|
|
|
return {
|
|
update: (params) => {
|
|
if (params.trigger !== undefined) trigger = params.trigger;
|
|
|
|
if (params.text !== undefined) text = params.text;
|
|
},
|
|
destroy() {
|
|
node.removeEventListener(trigger, handle, true);
|
|
},
|
|
};
|
|
}
|