You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.4 KiB
53 lines
1.4 KiB
<script>
|
|
import Code from "$/client/components/Code.svelte";
|
|
import Spinner from "$/client/components/Spinner.svelte";
|
|
import CodeFormatter from "$/client/components/CodeFormatter.svelte";
|
|
|
|
let code = "";
|
|
let test_code = "/test.js";
|
|
let message = "";
|
|
let timer;
|
|
|
|
const load_code = async () => {
|
|
let res = await fetch(test_code);
|
|
code = res.status == 200 ? await res.text() : `Error getting /test.js: ${res.status}`;
|
|
}
|
|
|
|
const code_copied = () => {
|
|
if(timer) clearTimeout(timer);
|
|
message = "You copied it!";
|
|
timer = setTimeout(() => message = "", 2000);
|
|
}
|
|
|
|
let code_promise = load_code();
|
|
</script>
|
|
|
|
{#await code_promise}
|
|
<Spinner />
|
|
{:then}
|
|
<p>You can display code with color, line numbers, and clipboard copying with <code>Code</code>, and you can click on the code to copy it to your clipboard:</p>
|
|
<Code content={ code } on:copy={ code_copied } language="javascript" />
|
|
|
|
<hr>
|
|
|
|
<p>It's designed similar to the <code>Markdown</code> component in that you can put the code in <code>content=""</code>, the inner slot, or as a <code>src=""</code> url to load.</p>
|
|
|
|
<Code on:copy={ code_copied } language="javascript">
|
|
{ code }
|
|
</Code>
|
|
|
|
<hr/>
|
|
|
|
<p>Here is the same code in <code>test.js</code> being loaded via a <code>src=""</code>.<p>
|
|
</p>
|
|
|
|
<Code src={ test_code } on:copy={ code_copied } language="javascript"/>
|
|
|
|
{#if message}
|
|
<toast class="bottom-right">
|
|
{ message }
|
|
</toast>
|
|
{/if}
|
|
|
|
<CodeFormatter />
|
|
{/await}
|
|
|