Using Collapsable Codeblock with Shortcode #638
-
I was trying to use collapsable code block with a shortcode and a css file in my website but cannot get the code highlighting to work. Any kind of help is greatly appreciated. [These are mostly taken from: https://github.com/panr/hugo-theme-hello-friend] {{ $id := delimit (shuffle (seq 1 9)) "" }}
{{ if .Get "language" }}
<div class="collapsable-code">
<input id="{{ .Get "id" | default $id }}" type="checkbox" {{ if ( eq ( .Get "isCollapsed" ) "true" ) -}} checked {{- end }} />
<label for="{{ .Get "id" | default $id }}">
<span class="collapsable-code__language">{{ .Get "language" }}</span>
{{ if .Get "title" }}<span class="collapsable-code__title">{{ .Get "title" | markdownify }}</span>{{ end }}
<span class="collapsable-code__toggle" data-label-expand="{{ .Get "expand" | default "△" }}" data-label-collapse="{{ .Get "collapse" | default "▽" }}"></span>
</label>
<pre {{ if .Get "language" }}class="language-{{ .Get "language" }}" {{ end }}><code>{{ .Inner | string }}</code></pre>
</div>
{{ else }}
{{ errorf "If you want to use the \"collapsable code\" shortcode, you need to pass a mandatory \"language\" param. The issue occured in %q (%q)" .Page.File .Page.Permalink }}
{{ end }} SCSS ( .collapsable-code {
position: relative;
width: 100%;
margin: 40px 0;
input[type="checkbox"] {
position: absolute;
visibility: hidden;
}
input[type="checkbox"]:checked {
~ pre,
~ .code-toolbar pre {
height: 0;
padding: 0;
border-top: none;
}
~ .code-toolbar {
padding: 0;
border-top: none;
.toolbar {
display: none;
}
}
~ label {
border-radius: 10px;
}
~ label .collapsable-code__toggle:after {
content: attr(data-label-expand);
}
}
label {
position: relative;
display: flex;
justify-content: space-between;
background: var(--card-background-selected);
padding: 10px;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
min-width: 30px;
min-height: 30px;
margin: 0;
cursor: pointer;
}
&__title {
flex: 1;
color: var(--code-text-color);
padding: 3px 10px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
&__language {
background: var(--code-background-color);
color: var(--code-text-color);
border-radius: 10px;
padding: 3px 10px;
}
&__toggle {
color: var(--code-text-color);
font-size: 16px;
padding: 3px 10px;
&:after {
content: attr(data-label-collapse);
}
}
pre {
margin-top: 0;
border-top-left-radius: 0;
border-top-right-radius: 0;
&::first-line {
line-height: 0;
}
}
code {
&::first-line {
line-height: 0;
}
}
.code-toolbar {
margin: 0;
}
} |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments
-
Try replacing (I haven't tried it.) |
Beta Was this translation helpful? Give feedback.
-
Thanks a lot! It works |
Beta Was this translation helpful? Give feedback.
Try replacing
{{ .Inner | string }}
with{{- highlight .Inner (.Get "language") -}}
(I haven't tried it.)