This website
<script lang="ts">
  import Nav from '../../Nav.svelte';
  import Tabs from '../../Tabs.svelte';
  import { onMount } from 'svelte';
  import { server } from '../../../../helpers';
  const { data, params } = $props();
  let ended = $derived(data.ended);
  let status = $derived(data.status);
  import { AnsiUp } from 'ansi_up';

  let socket: WebSocket;
  let out: string[][] = $state([[], []]);
  let ansi_up = new AnsiUp();

  function websocket() {
    socket = new WebSocket(`${server}/api/job/${params.user}/${params.repo}/${params.job}/ws`);

    socket.onmessage = (event) => {
      console.log(event);
      const m = JSON.parse(event.data);
      if ('Chunk' in m) {
        console.log(m);
        out[m.Chunk.channel].push(ansi_up.ansi_to_html(m.Chunk.content));
      } else if ('Status' in m) {
        console.log(m);
        ended = m.Status.ended;
        status = m.Status.status;
      }
    };

    socket.onopen = () => {
      // socket.send('{ "State": { "stdout": 0, "stderr": 0 } }');
    };

    socket.onclose = () => {
      if (!ended) {
        out = [[], []];
        websocket();
      }
    };
  }

  onMount(() => {
    websocket();
  });
</script>

<svelte:head>
  <title>{params.user} / {params.repo}</title>
</svelte:head>

<div class="p-3">
  <Nav user={params.user} repo={params.repo} path={[]} link={true} />

  <Tabs
    login={data.login}
    user={params.user}
    repo={params.repo}
    channel={data.channel}
    active="jobs" />

  <h1 class="pt-10">Job {data.id}</h1>
  <div class="py-10">
    Started at {data.started}{#if ended}, ended at {ended} with status {status}{/if}.
  </div>

  <h2 class="mt-5">Stdout</h2>
  <div class="p-5">
    <div class="w-full whitespace-pre-wrap font-mono text-sm">
      {#each out[0] as m}{@html m}{/each}
    </div>
    {#if !out[0].length}
      <p>No stdout so far</p>
    {/if}
  </div>
  <h2 class="mt-10">Stderr</h2>
  <div class="p-5">
    <div class="w-full whitespace-pre-wrap font-mono text-sm">
      {#each out[1] as m}{@html m}{/each}
    </div>
    {#if !out[1].length}
      <p>No stderr so far</p>
    {/if}
  </div>
</div>