diff options
| author | netop://ウィビ <paul@webb.page> | 2026-04-11 14:42:43 -0700 |
|---|---|---|
| committer | netop://ウィビ <paul@webb.page> | 2026-04-11 14:42:43 -0700 |
| commit | b052f741d935abd2f51423abf3fcda9157844b5c (patch) | |
| tree | d01d9db0e4c4f4f9093662a049db366b8b2301af /src/lib/component/CV.svelte | |
Diffstat (limited to 'src/lib/component/CV.svelte')
| -rw-r--r-- | src/lib/component/CV.svelte | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/lib/component/CV.svelte b/src/lib/component/CV.svelte new file mode 100644 index 0000000..b24d2cf --- /dev/null +++ b/src/lib/component/CV.svelte @@ -0,0 +1,78 @@ +<script lang="ts"> + //// import + import { onMount } from "svelte"; + + //// var + let cv = ""; + + //// function + async function showContent() { + let cvContent = ""; + + try { + const response = await fetch("/api/cv.json", { + headers: { + "Accept": "application/json", + "Content-Type": "application/json" + }, + method: "POST" + }); + + const { content } = await response.json(); + cvContent = content; + } catch(error) { + console.error(error); + } + + return cvContent; + } + + onMount(async() => { + cv = await showContent(); + }); +</script> + +<style lang="scss"> + :root { + --cv-padding: calc(var(--padding) * 2); + } + + h2 { + margin: 0 0 var(--cv-padding); padding: var(--padding) var(--cv-padding); + + background-color: var(--color-border); + color: var(--uchu-yin-7); + font-size: 1rem; + line-height: inherit; + position: sticky; + top: 0; + z-index: 1; + } + + .content { + font-family: monospace; + line-height: 1.55; + overflow-x: hidden; + padding-left: var(--cv-padding); + padding-right: var(--cv-padding); + position: relative; + text-overflow: ellipsis; + white-space: pre-line; + + &.loading { + padding-bottom: var(--cv-padding); + } + } +</style> + +<h2> + <a href="https://cv.webb.page" target="_blank">cv.webb.page</a> +</h2> + +{#if cv === ""} + <div class="content loading">loading…</div> +{:else} + <div class="content"> + {cv} + </div> +{/if} |
