1
0
mirror of https://github.com/garraflavatra/rolens.git synced 2025-02-23 13:09:28 +00:00
rolens/frontend/src/components/objectviewer.svelte

65 lines
1.3 KiB
Svelte
Raw Normal View History

<script>
import Icon from './icon.svelte';
import Modal from './modal.svelte';
import ObjectTree from './objecttree.svelte';
import { onDestroy } from 'svelte';
import { deepClone } from '$lib/objects';
export let data;
let copySucceeded = false;
let timeout;
2023-01-20 13:54:57 +01:00
let _data;
$: if (data) {
_data = deepClone(data);
2023-01-20 13:54:57 +01:00
for (const key of Object.keys(_data)) {
if (typeof _data[key] === 'undefined') {
delete _data[key];
}
}
}
async function copy() {
2023-01-20 13:54:57 +01:00
await navigator.clipboard.writeText(JSON.stringify(_data));
copySucceeded = true;
timeout = setTimeout(() => copySucceeded = false, 1500);
}
onDestroy(() => clearTimeout(timeout));
</script>
{#if data}
2023-01-20 13:54:57 +01:00
<Modal bind:show={data} title="Object viewer">
<div class="objectviewer">
<div class="buttons">
<button class="btn" on:click={copy}>
<Icon name={copySucceeded ? 'check' : 'clipboard'} />
</button>
</div>
<div class="code">
2023-01-20 13:54:57 +01:00
<ObjectTree data={_data} />
</div>
</div>
</Modal>
{/if}
<style>
.objectviewer {
position: relative;
}
2023-01-31 16:58:23 +01:00
.objectviewer .code :global(span.root) {
display: block;
}
.buttons {
position: absolute;
top: 0;
right: 0;
}
.buttons button {
margin-left: 1rem;
}
</style>