mirror of
https://github.com/garraflavatra/rolens.git
synced 2025-02-23 05:09:26 +00:00
Squashed commit of the following: commit 93b2d67cef77d89df728ffbf831e5ce79904673e Author: Romein van Buren <romein@vburen.nl> Date: Sat Jul 1 20:07:33 2023 +0200 Add filter functionality commit 30b65a198fc8d494fe660babd409e42a85c85d14 Author: Romein van Buren <romein@vburen.nl> Date: Sat Jul 1 19:27:20 2023 +0200 Renamed `form-row` class to `formrow` commit 21afb01ea191c6d5b597884fae637ae1b8f49a7a Author: Romein van Buren <romein@vburen.nl> Date: Sat Jul 1 19:26:04 2023 +0200 Hide object types in object grid commit 037d5432a454720ad58f3c201bc60980759cc44f Author: Romein van Buren <romein@vburen.nl> Date: Sat Jul 1 19:21:54 2023 +0200 Make auto reload interval input smaller commit 49d50220272d87c34cd84678baf01557d4c24051 Author: Romein van Buren <romein@vburen.nl> Date: Sat Jul 1 15:08:00 2023 +0200 Implement logs autoreload commit 1f8984766bbd8a1f6ce232daa40b8c49bf079d9f Author: Romein van Buren <romein@vburen.nl> Date: Sat Jul 1 15:04:00 2023 +0200 Return on error commit 9c8525996494f023634ac3ea64370fc2778e717c Author: Romein van Buren <romein@vburen.nl> Date: Sat Jul 1 15:03:37 2023 +0200 Add log error handling commit 7a98a63866b6fbfe3be5897feddbacf3fafd7dbf Author: Romein van Buren <romein@vburen.nl> Date: Sat Jul 1 14:46:39 2023 +0200 Update log tab icon commit f30827ae2ec1c6254e0aab451de6763556c90ac5 Author: Romein van Buren <romein@vburen.nl> Date: Sat Jul 1 14:41:59 2023 +0200 Add host log panel
79 lines
1.9 KiB
Svelte
79 lines
1.9 KiB
Svelte
<script>
|
|
import { looseJsonIsValid } from '$lib/strings';
|
|
import { EJSON } from 'bson';
|
|
import { createEventDispatcher, onDestroy } from 'svelte';
|
|
import Icon from './icon.svelte';
|
|
import Modal from './modal.svelte';
|
|
import ObjectEditor from './objecteditor.svelte';
|
|
|
|
export let data;
|
|
export let readonly = false;
|
|
export let saveable = false;
|
|
export let successMessage = '';
|
|
|
|
const dispatch = createEventDispatcher();
|
|
let copySucceeded = false;
|
|
let timeout;
|
|
let text = EJSON.stringify(data, undefined, '\t');
|
|
$: invalid = !looseJsonIsValid(text);
|
|
|
|
async function copy() {
|
|
await navigator.clipboard.writeText(text);
|
|
copySucceeded = true;
|
|
timeout = setTimeout(() => copySucceeded = false, 1500);
|
|
}
|
|
|
|
function close() {
|
|
data = undefined;
|
|
text = '';
|
|
}
|
|
|
|
function save() {
|
|
dispatch('save', { text, originalData: data });
|
|
}
|
|
|
|
onDestroy(() => clearTimeout(timeout));
|
|
</script>
|
|
|
|
{#if data}
|
|
<Modal bind:show={data} contentPadding={false}>
|
|
<div class="objectviewer">
|
|
<ObjectEditor bind:text on:updated={() => successMessage = ''} {readonly} />
|
|
</div>
|
|
|
|
<svelte:fragment slot="footer">
|
|
{#if saveable}
|
|
<button class="button" on:click={save} disabled={invalid}>
|
|
<Icon name="save" /> Save
|
|
</button>
|
|
{/if}
|
|
|
|
<button class="button secondary" on:click={close}>
|
|
<Icon name="x" /> Close
|
|
</button>
|
|
|
|
<button class="button secondary" on:click={copy}>
|
|
<Icon name={copySucceeded ? 'check' : 'clipboard'} /> Copy
|
|
</button>
|
|
|
|
{#if successMessage}
|
|
<span class="flash-green">{successMessage}</span>
|
|
{/if}
|
|
</svelte:fragment>
|
|
</Modal>
|
|
{/if}
|
|
|
|
<style>
|
|
.objectviewer {
|
|
display: flex;
|
|
position: relative;
|
|
justify-content: stretch;
|
|
align-items: stretch;
|
|
height: 100%;
|
|
}
|
|
|
|
.flash-green {
|
|
margin-left: 0.5rem;
|
|
}
|
|
</style>
|