mirror of
https://github.com/hugo-fixit/FixIt.git
synced 2026-08-24 15:28:57 +00:00
refactor: add code block render hooks for xml feed content (#651)
This commit is contained in:
@@ -66,6 +66,7 @@ pre:not([data-processed]) {
|
||||
margin: 0.5rem 0;
|
||||
position: relative;
|
||||
|
||||
// lineNumbersInTable=true
|
||||
> .chroma {
|
||||
position: relative;
|
||||
background-color: var(#{$rootPrefix}code-block-background-color);
|
||||
@@ -91,24 +92,15 @@ pre:not([data-processed]) {
|
||||
@include border-radius(0);
|
||||
}
|
||||
|
||||
// ========== lineNumbersInTable ========== //
|
||||
// line numbers
|
||||
.lntd:first-child {
|
||||
position: sticky;
|
||||
left: 0;
|
||||
}
|
||||
// code content
|
||||
.lntd:last-child {
|
||||
width: 100%;
|
||||
code {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
// ========== lineNumbersInTable ========== //
|
||||
}
|
||||
}
|
||||
|
||||
// lineNumbersInTable=false
|
||||
// line numbers (lineNumbersInTable=false)
|
||||
.ln {
|
||||
padding-right: 0.75rem;
|
||||
display: inline-block;
|
||||
@@ -363,18 +355,20 @@ pre:not([data-processed]) {
|
||||
}
|
||||
.lntd:last-child pre.chroma,
|
||||
.code-wrapper > pre.chroma {
|
||||
max-width: 100%;
|
||||
box-sizing: border-box;
|
||||
|
||||
code {
|
||||
text-wrap: wrap;
|
||||
white-space: pre-wrap;
|
||||
@include overflow-wrap(break-word);
|
||||
word-break: break-all;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// line numbers (pseudo-elements) for code block with line wrapping or lineNos=false
|
||||
// line numbers (pseudo-elements) for code blocks
|
||||
&.line-wrapping:not(.line-nos-hidden) .lntd:last-child pre.chroma,
|
||||
&:not(.line-nos-hidden) .code-wrapper > pre.chroma:not(:has(.ln)) {
|
||||
padding-left: 0;
|
||||
> code > .line {
|
||||
display: flex;
|
||||
|
||||
@@ -405,12 +399,9 @@ pre:not([data-processed]) {
|
||||
|
||||
// when line numbers shown
|
||||
&:not(.line-nos-hidden) {
|
||||
> .chroma {
|
||||
.lntable {
|
||||
.lntd:last-child pre.chroma {
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
.lntd:last-child pre.chroma,
|
||||
.code-wrapper > pre.chroma:not(:has(.ln)) {
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
{{- $result := transform.HighlightCodeBlock . -}}
|
||||
<pre><code>{{ $result.Inner }}</code></pre>
|
||||
{{- /* EOF */ -}}
|
||||
@@ -0,0 +1,11 @@
|
||||
{{- if eq .Type "timeline" -}}
|
||||
{{- dict
|
||||
"Options" .Attributes
|
||||
"Inner" .Inner
|
||||
"Resources" .Page.Resources
|
||||
"Position" .Position
|
||||
| partial "plugin/timeline.html"
|
||||
-}}
|
||||
{{- else -}}
|
||||
<pre><code>{{ .Inner }}</code></pre>
|
||||
{{- end -}}
|
||||
@@ -4,41 +4,6 @@
|
||||
|
||||
{{- $content = dict "Content" .Content "Ruby" .Ruby "Fraction" .Fraction "Fontawesome" .Fontawesome | partial "function/content.html" }}
|
||||
|
||||
{{- /* Keep only the first <pre class="mermaid">...</pre> inside a diagram-container */ -}}
|
||||
{{- $content = $content | replaceRE `(?s)<div[^>]*class="diagram-container"[^>]*>.*?(<pre[^>]*class="mermaid"[^>]*>.*?</pre>).*?</div>\s*(?:<template[^>]*>.*?</template>\s*)?` "$1" }}
|
||||
{{- $mermaidMatches := findRE `(?s)<pre[^>]*class="mermaid"[^>]*>.*?</pre>` $content -}}
|
||||
{{- if gt (len $mermaidMatches) 0 -}}
|
||||
{{- range $i, $m := $mermaidMatches -}}
|
||||
{{- $attrs := $m | replaceRE `(?s)<pre([^>]*)>.*?</pre>` "$1" -}}
|
||||
{{- $inner := $m | replaceRE `(?s)<pre[^>]*>(.*?)</pre>` "$1" -}}
|
||||
{{- $inner = replace $inner " " " " -}}
|
||||
{{- $newPre := printf "<pre%s>%s</pre>" $attrs $inner -}}
|
||||
{{- $content = replace $content $m $newPre -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- /* Remove echarts diagram containers entirely */ -}}
|
||||
{{- $content = $content | replaceRE `(?s)<div[^>]*class="diagram-container"[^>]*>.*?<div[^>]*class="echarts"[^>]*>.*?</div>\s*(?:<template[^>]*>.*?</template>\s*)?.*?</div>` "" -}}
|
||||
|
||||
{{- /* Replace json-viewer components with JSON code blocks */ -}}
|
||||
{{- $matches := findRE `(?s)<json-viewer\b[^>]*\bvalue="[^"]*"[^>]*>(?:</json-viewer>)?` $content -}}
|
||||
{{- if gt (len $matches) 0 -}}
|
||||
{{- range $i, $m := $matches -}}
|
||||
{{- /* extract the value="...": use replaceRE on the full match to get the captured group */ -}}
|
||||
{{- $rawVal := $m | replaceRE `(?s).*value="([^"]*)".*` "$1" -}}
|
||||
{{- /* decode HTML entities, strip outer quotes if present, unescape JSON-style escapes */ -}}
|
||||
{{- $jsonStr := $rawVal | htmlUnescape | replaceRE `^"(.*)"$` "$1" | replaceRE `\\\\` `\` | replaceRE `\\\"` `"` | replaceRE `\\n` "\n" | replaceRE `\\r` "" | replaceRE `\\t` "\t" -}}
|
||||
{{- /* try to unmarshal into object */ -}}
|
||||
{{- $obj := transform.Unmarshal $jsonStr | default dict -}}
|
||||
{{- /* serialize back to JSON */ -}}
|
||||
{{- $pretty := $obj | jsonify (dict "indent" "  ") -}}
|
||||
{{- /* build replacement pre/code block */ -}}
|
||||
{{- $replacement := printf "<pre><code>%s</code></pre>" $pretty -}}
|
||||
{{- /* replace the full original match with the rendered block */ -}}
|
||||
{{- $content = replace $content $m $replacement -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- with .FeaturedImage }}
|
||||
{{- $content = add (printf "<img src=%q alt=%q referrerpolicy=%q>" . "featured image" "no-referrer") $content }}
|
||||
{{- end }}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{{- hugo.Store.Set "version" "v0.4.0-alpha.3-20251219153119-0a614e17" -}}
|
||||
{{- hugo.Store.Set "version" "v0.4.0-alpha.3-20251220063813-f2b6218e" -}}
|
||||
{{- .Store.Set "this" dict -}}
|
||||
|
||||
{{- partial "init/detection-env.html" . -}}
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
<pre><code>{{ strings.TrimSpace .Inner }}</code></pre>
|
||||
{{- /* EOF */ -}}
|
||||
@@ -0,0 +1,2 @@
|
||||
<pre><code>{{ strings.TrimSpace .Inner }}</code></pre>
|
||||
{{- /* EOF */ -}}
|
||||
Reference in New Issue
Block a user