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);
|
||
|
},
|
||
|
};
|
||
|
}
|