From 114dc8c8549a4a1271d43c42c7931209b5a9f5b5 Mon Sep 17 00:00:00 2001 From: memdmp Date: Wed, 12 Mar 2025 15:04:31 +0100 Subject: feat: properly handle skip-animation --- src/routes/IndexPage.svelte | 462 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 462 insertions(+) create mode 100644 src/routes/IndexPage.svelte (limited to 'src/routes/IndexPage.svelte') diff --git a/src/routes/IndexPage.svelte b/src/routes/IndexPage.svelte new file mode 100644 index 0000000..8a56f08 --- /dev/null +++ b/src/routes/IndexPage.svelte @@ -0,0 +1,462 @@ + + + + + /~mem/ + + + +{#snippet tagLeft(colour: string)} + * +{/snippet} +{#snippet okTagLeft()} + {@render tagLeft('#51f051')} +{/snippet} +{#snippet tagRight(innerText: string, innerColour: string)} + [ + {innerText} + ] +{/snippet} +{#snippet okTagRight()} + {@render tagRight('ok', '#51f051')} +{/snippet} +{#snippet okLine(text: string, classes?: string, rightClass?: string)} +
+
+ {@render okTagLeft()} + {text} +
+
+ {@render okTagRight()} +
+
+{/snippet} +{#snippet ttyTextInnerRenderer(section: RenderBlock)} + {#if section.raw}{@html section.value}{:else}{#each section.value + .split('\n') + .map( (l, i, a) => (i === a.length - 1 ? [0, l] : [1, l]), ) as [nl, l]}{l}{#if nl}
{/if}{/each}{/if}
+{/snippet} +{#snippet ttyTextMiddleRenderer( + section: RenderBlock, + line: TTYText & { kind: 'text' }, +)} + {#if section.url} + {#if typeof section.url === 'string'} + {#if section.url.startsWith('newtab:')} + {@const url = section.url.substring(7)} + {@render ttyTextInnerRenderer(section)} + {:else if section.url.startsWith('currenttab:')} + {@const url = section.url.substring(11)} + {@render ttyTextInnerRenderer(section)} + {:else} + ERR: Unknown Link Format + {/if} + {:else} + + typeof section.url !== 'function' ? void 0 : section.url(line)} + onkeypress={() => + typeof section.url !== 'function' ? void 0 : section.url(line)} + role="link" + tabindex="0">{@render ttyTextInnerRenderer(section)} + {/if} + {:else} + {@render ttyTextInnerRenderer(section)} + {/if} +{/snippet} +{#snippet ttyText(line: TTYText)} + {#if line.kind === 'text'} + {#if (line.renderrestriction ?? 'everywhere') === 'everywhere' || line.renderrestriction === 'noscript' || (line.renderrestriction === 'js-only' && isScripted)} + {#if line.renderrestriction === 'noscript'} + + {:else} + {#each line.value as v}{@render ttyTextMiddleRenderer( + v, + line, + )}{/each} + {/if} + {/if} + {/if} +{/snippet} + + + +
+ {#if !skipAnimation} +
+
+
+

+ BdsDxe: loading Boot0002 "UEFI Misc Device" from PciRoot + (0x0)/Pci(0x2,0x4)/Pci(0x0,0x0)
+ BdsDxe: starting Boot0002 "UEFI Misc Device" from PciRoot + (0x0)/Pci(0x2,0x4)/Pci(0x0,0x0) +

+
+
+
+ Bootloader Logo +
+
+
Start boot option
+
+ + +`)}");background-size:contain;`} + >
+
+
+
+
+

+ GNU GRUB  version 2.12 +

+
+
+ *Alpine Linux {versions.alpine.number}, with {versions.kernel + .humanReadable} +
+
+  UEFI Firmware Setup +
+
+ +
+
+
+

+   Booting `Alpine Linux {versions.alpine.number}, with {versions + .kernel.humanReadable}'

Loading {versions.kernel.humanReadable} ...
Loading initial ramdisk ... +

+
+ +
+
+
+
+   OpenRC + {versions.openrc} + is starting up Linux + {versions.kernel.id} ({architecture}) +
+
+ {@render okLine('/proc/ is already mounted')} + {@render okLine('Mounting /run ...')} + {@render okLine('/run/openrc: creating directory')} + {@render okLine('/run/lock: creating directory', 'openrc-boot-step-1')} + {@render okLine('/run/lock: correcting owner', 'openrc-boot-step-1')} + {@render okLine( + 'Caching service dependencies ...', + 'openrc-boot-step-1', + )} + {@render okLine( + 'Remounting devtmpfs on /dev ...', + 'openrc-boot-step-2', + )} + {@render okLine('Mounting /dev/mqueue ...', 'openrc-boot-step-3')} + {@render okLine( + 'Mounting security filesystem ...', + 'openrc-boot-step-4', + )} + {@render okLine('Mounting debug filesystem ...', 'openrc-boot-step-5')} + {@render okLine( + 'Mounting persistent storage (pstore) filesystem ...', + 'openrc-boot-step-5', + )} + {@render okLine( + 'Mounting efivarfs filesystem ...', + 'openrc-boot-step-5', + )} + {@render okLine('Starting busybox mdev ...', 'openrc-boot-step-6')} + {@render okLine('Scanning hardware for mdev ...', 'openrc-boot-step-6')} + {@render okLine('Loading hardware drivers ...', 'openrc-boot-step-7')} + {@render okLine('Loading modules ...', 'openrc-boot-step-8')} + {@render okLine( + 'Setting system clock using the hardware clock [UTC] ...', + 'openrc-boot-step-9', + )} + {@render okLine( + 'Checking local filesystems ...', + 'openrc-boot-step-10', + )} +
+ /dev/mapper/bepis: clean, {fsckFileCount}/{fsckTotalCount} files, {blocksCount}/{blocksTotal} + blocks +
+ {@render okLine( + 'Remounting root filesystem read/write ...', + 'openrc-boot-step-12', + )} + {@render okLine('Remounting filesystems ...', 'openrc-boot-step-13')} + {@render okLine('Activating swap devices ...', 'openrc-boot-step-14')} + {@render okLine( + 'Mounting local filesystems ...', + 'openrc-boot-step-15', + )} + {@render okLine( + 'Configuring kernel parameters ...', + 'openrc-boot-step-16', + )} + {@render okLine( + 'Creating user login records ...', + 'openrc-boot-step-17', + )} + {@render okLine('Setting hostname ...', 'openrc-boot-step-18')} + {@render okLine('Setting keymap ...', 'openrc-boot-step-19')} + {@render okLine('Starting networking ...', 'openrc-boot-step-20')} + {@render okLine('\xa0\xa0lo ...', 'openrc-boot-step-21')} + {@render okLine('\xa0\xa0eth0 ...', 'openrc-boot-step-22')} +
udhcpd: started
+
+ udhcpd: broadcasting discover +
+ +
+ udhcpd: broadcasting select for 192.168.1.{lanLeastSignificantIPPart}, + server 192.168.1.1 +
+
+ udhcpd: lease of 192.168.1.{lanLeastSignificantIPPart} obtained from 192.168.1.1, + lease time 3600 +
+ {@render okLine( + 'Seeding random number generator ...', + 'openrc-boot-step-26', + )} + {@render okLine( + 'Seeding 256 bits without crediting', + 'openrc-boot-step-26', + )} + {@render okLine( + 'Saving 256 bits of creditable seed for next boot', + 'openrc-boot-step-26', + )} + {@render okLine('Starting logbookd ...', 'openrc-boot-step-27')} + {@render okLine('Starting busybox acpid ...', 'openrc-boot-step-28')} + {@render okLine('Starting busybox crond ...', 'openrc-boot-step-29')} + {@render okLine('Starting busybox ntpd ...', 'openrc-boot-step-29')} +
+
+ Welcome to Alpine Linux {versions.alpine + .number}{#if versions.alpine.isEdge} (edge){/if} +
+
+ Kernel {versions.kernel.humanReadable} on an {architecture} (/dev/{tty}) +
+
+
+ {hostname} login: {#each login.username + .split('') + .map((v, i) => [v, i] as const) as [char, idx]}{char}{/each}
+ Password: _
+
+ +
+ +
_
+
+
+
+ {#each ttyLines.filter(((maxidx) => (_, i) => i < (maxidx === -1 ? Infinity : maxidx))(ttyLines.findIndex((v) => v.kind === 'clear'))) as line} + {@render ttyText(line)} + {/each} +
+
+
+ {/if} + + {#if ttyLines.find((v) => v.kind === 'clear')} + + {@const arr = ttyLines + .map((v, i) => [v, i] as const) + .filter(([v]) => v.kind === 'clear') + .map((v, i, a) => [v[1], a[i + 1]?.[1], i] as const)} + {#each skipAnimation ? [arr[arr.length - 1]] : arr as [idx, nextIdx, clearIdx]} +
+
+
+ {#each ttyLines.filter((_, i) => i >= idx && i < (nextIdx ?? Infinity)) as line} + {@render ttyText(line)} + {/each} +
+
+ {/each} + {/if} +
+ + -- cgit v1.2.3