mirror of
https://github.com/hugo-fixit/FixIt.git
synced 2026-08-24 23:38:56 +00:00
refactor: add xml-content partial for enhanced content processing in RSS/Atom feeds
This commit is contained in:
@@ -55,36 +55,7 @@
|
||||
{{- end }}
|
||||
{{- if $fullText }}
|
||||
<description>
|
||||
{{- $content := dict "Content" .Content "Ruby" $params.ruby "Fraction" $params.fraction "Fontawesome" $params.fontawesome | partial "function/content.html" }}
|
||||
{{- /* {{- $content | replaceRE `<figure[^>]*>.*</figure>` "" | replaceRE `<img[^>]*( /)?>` "" | safeHTML -}} */ -}}
|
||||
{{- /* Keep only the code content: remove highlight/chroma/lntable wrapper and line numbers */ -}}
|
||||
{{- $content = $content | replaceRE `(?s)<div[^>]*class="highlight"[^>]*>.*?<div[^>]*class="chroma"[^>]*>.*?<table[^>]*class="lntable"[^>]*>.*?(?:<tbody[^>]*>\s*)?<tr[^>]*>\s*<td[^>]*class="lntd"[^>]*>.*?</td>\s*<td[^>]*class="lntd"[^>]*>(.*?)</td>\s*</tr>\s*(?:</tbody>\s*)?.*?</table>.*?</div>\s*</div>` "$1" | safeHTML }}
|
||||
{{- /* 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" | safeHTML }}
|
||||
{{- /* Remove echarts diagram containers entirely */ -}}
|
||||
{{- $content = $content | replaceRE `(?s)<div[^>]*class="diagram-container"[^>]*>.*?<div[^>]*class="echarts"[^>]*>.*?</div>\s*(?:<template[^>]*>.*?</template>\s*)?.*?</div>` "" | safeHTML }}
|
||||
{{- /* 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 tabindex=\"0\" class=\"chroma\"><code class=\"language-json\" data-lang=\"json\">%s</code></pre>" $pretty -}}
|
||||
{{- /* replace the full original match with the rendered block */ -}}
|
||||
{{- $content = replace $content $m $replacement -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- with $image }}
|
||||
{{- $content = add (printf "<img src=%q alt=%q referrerpolicy=%q>" . "featured image" "no-referrer") $content | safeHTML }}
|
||||
{{- end }}
|
||||
{{- $content | transform.XMLEscape | safeHTML -}}
|
||||
{{- dict "Content" .Content "Ruby" $params.ruby "Fraction" $params.fraction "Fontawesome" $params.fontawesome "FeaturedImage" $image | partial "function/xml-content.html" -}}
|
||||
</description>
|
||||
{{- else }}
|
||||
<description>{{ (.Summary | default .Description | default .Title) | transform.XMLEscape | safeHTML }}</description>
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
{{- $content := .Content -}}
|
||||
|
||||
{{- if $content -}}
|
||||
|
||||
{{- $content = dict "Content" .Content "Ruby" .Ruby "Fraction" .Fraction "Fontawesome" .Fontawesome | partial "function/content.html" }}
|
||||
|
||||
{{- /* Keep only the code content: remove highlight/chroma/lntable wrapper and line numbers */ -}}
|
||||
{{- $content = $content | replaceRE `(?s)<div[^>]*class="highlight"[^>]*>.*?<div[^>]*class="chroma"[^>]*>.*?<table[^>]*class="lntable"[^>]*>.*?(?:<tbody[^>]*>\s*)?<tr[^>]*>\s*<td[^>]*class="lntd"[^>]*>.*?</td>\s*<td[^>]*class="lntd"[^>]*>(.*?)</td>\s*</tr>\s*(?:</tbody>\s*)?.*?</table>.*?</div>\s*</div>` "$1" -}}
|
||||
{{- $codeBlocks := findRE `(?s)<code[^>]*>.*?</code>` $content -}}
|
||||
{{- if gt (len $codeBlocks) 0 -}}
|
||||
{{- range $i, $block := $codeBlocks -}}
|
||||
{{- $newBlock := $block -}}
|
||||
{{- $textMatches := findRE `>([^<]+)<` $block -}}
|
||||
{{- if gt (len $textMatches) 0 -}}
|
||||
{{- range $j, $m := $textMatches -}}
|
||||
{{- $inner := $m | replaceRE `^>([^<]+)<$` "$1" -}}
|
||||
{{- $newInner := replace $inner " " " " -}}
|
||||
{{- $newMatch := printf ">%s<" $newInner -}}
|
||||
{{- $newBlock = replace $newBlock $m $newMatch -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- $content = replace $content $block $newBlock -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- /* 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 }}
|
||||
|
||||
{{- $content = $content | transform.XMLEscape | safeHTML -}}
|
||||
|
||||
{{- end }}
|
||||
|
||||
|
||||
{{- return $content -}}
|
||||
@@ -1,4 +1,4 @@
|
||||
{{- hugo.Store.Set "version" "v0.4.0-alpha.2-20251022123721-f984fc6d" -}}
|
||||
{{- hugo.Store.Set "version" "v0.4.0-alpha.2-20251023040336-063af2cd" -}}
|
||||
{{- .Store.Set "this" dict -}}
|
||||
|
||||
{{- partial "init/detection-env.html" . -}}
|
||||
|
||||
Reference in New Issue
Block a user