hugo: add collapse attribute for code blocks

Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com>
This commit is contained in:
David Karlsson 2024-04-02 18:01:15 +02:00
parent 4267ce33e4
commit 66b5b990de
2 changed files with 42 additions and 11 deletions

View File

@ -5,6 +5,7 @@
"!mt-0", "!mt-0",
"--mount", "--mount",
"--tmpfs", "--tmpfs",
"-mt-4",
"-top-16", "-top-16",
"-v", "-v",
"-z-10", "-z-10",
@ -122,8 +123,10 @@
"bg-black/70", "bg-black/70",
"bg-blue-light", "bg-blue-light",
"bg-blue-light-500", "bg-blue-light-500",
"bg-cover",
"bg-gradient-to-br", "bg-gradient-to-br",
"bg-gradient-to-r", "bg-gradient-to-r",
"bg-gradient-to-t",
"bg-gray-light-100", "bg-gray-light-100",
"bg-gray-light-200", "bg-gray-light-200",
"bg-gray-light-200/50", "bg-gray-light-200/50",
@ -169,6 +172,7 @@
"dark:decoration-blue-dark", "dark:decoration-blue-dark",
"dark:fill-blue-dark", "dark:fill-blue-dark",
"dark:from-accent-dark", "dark:from-accent-dark",
"dark:from-background-dark",
"dark:from-blue-dark-400", "dark:from-blue-dark-400",
"dark:hidden", "dark:hidden",
"dark:hover:bg-blue-dark", "dark:hover:bg-blue-dark",
@ -199,6 +203,7 @@
"flex", "flex",
"flex-1", "flex-1",
"flex-col", "flex-col",
"flex-col-reverse",
"flex-initial", "flex-initial",
"flex-row-reverse", "flex-row-reverse",
"font-medium", "font-medium",
@ -206,6 +211,7 @@
"footnote-ref", "footnote-ref",
"footnotes", "footnotes",
"from-accent-light", "from-accent-light",
"from-background-light",
"from-blue-light-400", "from-blue-light-400",
"gap-10", "gap-10",
"gap-12", "gap-12",
@ -224,6 +230,7 @@
"grow", "grow",
"h-16", "h-16",
"h-2", "h-2",
"h-32",
"h-8", "h-8",
"h-[334px]", "h-[334px]",
"h-full", "h-full",
@ -311,6 +318,7 @@
"p-8", "p-8",
"p-[2px]", "p-[2px]",
"pb-2", "pb-2",
"pb-4",
"pl-1", "pl-1",
"pl-2", "pl-2",
"pl-3", "pl-3",
@ -336,6 +344,7 @@
"rotate-45", "rotate-45",
"rounded", "rounded",
"rounded-[6px]", "rounded-[6px]",
"rounded-b-lg",
"rounded-full", "rounded-full",
"rounded-sm", "rounded-sm",
"scroll-mt-20", "scroll-mt-20",
@ -378,8 +387,10 @@
"text-xl", "text-xl",
"text-xs", "text-xs",
"tip", "tip",
"to-75%",
"to-blue-light-500", "to-blue-light-500",
"to-magenta-light-400", "to-magenta-light-400",
"to-transparent",
"top-0", "top-0",
"top-16", "top-16",
"top-3", "top-3",
@ -400,6 +411,7 @@
"xl:grid-cols-1", "xl:grid-cols-1",
"xl:grid-cols-2", "xl:grid-cols-2",
"xl:grid-cols-3", "xl:grid-cols-3",
"youtube-video",
"z-10", "z-10",
"z-20", "z-20",
"z-30" "z-30"

View File

@ -1,17 +1,36 @@
<div class="group relative"> <div class="group relative">
<button <button x-data="{ code: '{{encoding.Base64Encode .Inner}}', copying: false }"
x-data="{ code: '{{encoding.Base64Encode .Inner}}', copying: false }" class="absolute right-3 top-3 z-20 text-gray-light-300 dark:text-gray-dark-600" title="Copy" @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^\$\s*/gm, ''));
class="absolute top-3 right-3 text-gray-light-300 dark:text-gray-dark-600"
title="Copy"
@click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^\$\s*/gm, ''));
copying = true; copying = true;
setTimeout(() => copying = false, 2000);" setTimeout(() => copying = false, 2000);">
> <span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden">{{ partialCached "icon" "content_copy" "content_copy" }}</span>
<span :class="{ 'group-hover:block' : !copying }" class="hidden icon-svg">{{ partialCached "icon" "content_copy" "content_copy" }}</span> <span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden">{{ partialCached "icon" "check_circle" "check_circle" }}</span>
<span :class="{ 'group-hover:block' : copying }" class="hidden icon-svg">{{ partialCached "icon" "check_circle" "check_circle" }}</span>
</button> </button>
{{ $lang := .Type | default "text" }} {{ $lang := .Type | default "text" }} {{ $result := transform.Highlight .Inner
$lang .Options }}
<div class="syntax-light dark:syntax-dark"> <div class="syntax-light dark:syntax-dark">
{{ transform.Highlight .Inner $lang .Options }} {{ with .Attributes.collapse }}
<div x-data="{ collapse: true }" class="relative scroll-mt-20 overflow-clip"
x-init="$watch('collapse', value => $root.scrollIntoView({ behavior: 'smooth'}))">
<div x-show="collapse"
class="to-transparent absolute z-10 flex h-32 w-full flex-col-reverse items-center overflow-clip bg-gradient-to-t from-background-light to-75% bg-cover pb-4 dark:from-background-dark">
<button @click="collapse = false"
class="flex items-center rounded-full bg-blue-light px-2 text-sm text-white dark:bg-blue-dark-400">
<span>Show more</span>
<span class="icon-svg">{{ partialCached "icon" "expand_more" "expand_more" }}</span>
</button>
</div>
<div :class="{ 'h-32': collapse }">
{{ $result }}
<button @click="collapse = true" x-show="!collapse"
class="mx-auto -mt-4 flex items-center rounded-b-lg bg-blue-light px-2 text-sm text-white dark:bg-blue-dark-400">
<span>Hide</span>
<span class="icon-svg">{{ partialCached "icon" "expand_less" "expand_less" }}</span>
</button>
</div>
</div>
{{ else }}
{{ $result }}
{{ end }}
</div> </div>
</div> </div>