mirror of
https://github.com/alexandrev/xslt-lab.git
synced 2026-09-22 05:33:16 +00:00
Move Hugo blog source to main, fix workflow, add new articles and llms.txt
- Move site/ Hugo source from gh-pages to main so the workflow can trigger correctly - Fix publish-hugo.yml: now in main, builds and deploys to gh-pages:docs/ via peaceiris/actions-gh-pages - Add 3 new SEO articles: XSLT 3.0 features, beginners guide, template matching - Add llms.txt to blog and frontend so ChatGPT/Gemini can recommend the tool better - Remove stale /site mkdocs ignore rule, add site/public to gitignore instead Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ block "title" . }}{{ with .Title }}{{ . }} | {{ end }}{{ .Site.Title }}{{ end }}</title>
|
||||
<meta name="description" content="{{ with .Description }}{{ . }}{{ else }}{{ .Site.Params.subtitle }}{{ end }}">
|
||||
{{ partial "adsense/head.html" . }}
|
||||
<link rel="stylesheet" href="{{ "css/main.css" | relURL }}">
|
||||
</head>
|
||||
{{- $ethicalAds := and .Site.Params.ethicalads.publisher (ne hugo.Environment "development") -}}
|
||||
<body{{ if $ethicalAds }} class="has-ethicalads"{{ end }}>
|
||||
{{ partial "ethicalads.html" . }}
|
||||
<header class="site-header">
|
||||
<div class="container header-grid">
|
||||
<div>
|
||||
<a class="brand" href="{{ "/" | relURL }}">{{ .Site.Title }}</a>
|
||||
<p class="tagline">{{ .Site.Params.subtitle }}</p>
|
||||
</div>
|
||||
<nav>
|
||||
<ul class="nav">
|
||||
{{ range .Site.Menus.main }}
|
||||
<li><a href="{{ .URL }}">{{ .Name }}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
<main class="container">
|
||||
{{ block "main" . }}{{ end }}
|
||||
</main>
|
||||
<footer class="site-footer">
|
||||
<div class="container footer-grid">
|
||||
<p>Built with Hugo · {{ now.Format "2006-01-02" }}</p>
|
||||
<p class="muted">Repo: <a href="https://github.com/alexandrev/xslt-lab">alexandrev/xslt-lab</a></p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,19 @@
|
||||
{{ define "main" }}
|
||||
<section class="page-header">
|
||||
<p class="eyebrow">{{ .Section | title }}</p>
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ with .Description }}<p class="lead">{{ . }}</p>{{ end }}
|
||||
</section>
|
||||
|
||||
<ul class="post-list spaced">
|
||||
{{ range .Paginator.Pages }}
|
||||
<li>
|
||||
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
|
||||
<span class="muted">{{ .Date.Format "02 Jan 2006" }}</span>
|
||||
{{ with .Params.description }}<p class="muted">{{ . }}</p>{{ end }}
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
|
||||
{{ template "_internal/pagination.html" . }}
|
||||
{{ end }}
|
||||
@@ -0,0 +1,13 @@
|
||||
{{ define "main" }}
|
||||
<article class="post">
|
||||
<p class="eyebrow">{{ .Section | title }}</p>
|
||||
<h1>{{ .Title }}</h1>
|
||||
<p class="muted">{{ .Date.Format "02 Jan 2006" }}</p>
|
||||
{{ with .Params.description }}<p class="lead">{{ . }}</p>{{ end }}
|
||||
{{ partial "adsense/in-article.html" . }}
|
||||
<div class="content">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
<p class="muted back-link"><a href="{{ .CurrentSection.RelPermalink }}">← Back to {{ .CurrentSection.Title }}</a></p>
|
||||
</article>
|
||||
{{ end }}
|
||||
@@ -0,0 +1,42 @@
|
||||
{{ define "main" }}
|
||||
<section class="hero">
|
||||
<p class="eyebrow">Online XSLT Editor</p>
|
||||
<h1>{{ .Title }}</h1>
|
||||
<p class="lead">{{ .Params.description | default .Site.Params.lead }}</p>
|
||||
<div class="cta-row">
|
||||
<a class="button" href="https://xsltplayground.com">Open the playground</a>
|
||||
<a class="button ghost" href="{{ "/posts/" | relURL }}">Read updates</a>
|
||||
<a class="button ghost" href="https://alexandrev.github.io/xslt-lab/index.yaml">Helm chart index</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="grid">
|
||||
<article class="card">
|
||||
<p class="eyebrow">How the playground helps</p>
|
||||
<h2>Built for real XSLT work</h2>
|
||||
<p>Run XSLT online with multiple inputs and parameters, see results as you type, and get timing hints to spot regressions before they hit production.</p>
|
||||
<ul class="checks">
|
||||
<li>Multi-parameter transforms</li>
|
||||
<li>Live execution and inline output</li>
|
||||
<li>Timing to guide optimization</li>
|
||||
</ul>
|
||||
</article>
|
||||
<article class="card">
|
||||
<p class="eyebrow">Latest posts</p>
|
||||
<h2>Recent updates</h2>
|
||||
<ul class="post-list">
|
||||
{{ $posts := first 3 (where .Site.RegularPages "Section" "posts") }}
|
||||
{{ if gt (len $posts) 0 }}
|
||||
{{ range $posts }}
|
||||
<li>
|
||||
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
|
||||
<span class="muted">{{ .Date.Format "02 Jan 2006" }}</span>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
<li class="muted">No posts yet. Add more in <code>site/content/posts/</code>.</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</article>
|
||||
</section>
|
||||
{{ end }}
|
||||
@@ -0,0 +1,5 @@
|
||||
{{- $client := .Site.Params.adsense.client -}}
|
||||
{{- if and $client (ne hugo.Environment "development") -}}
|
||||
<meta name="google-adsense-account" content="{{ $client }}">
|
||||
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client={{ $client }}" crossorigin="anonymous"></script>
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,15 @@
|
||||
{{- $client := .Site.Params.adsense.client -}}
|
||||
{{- $slot := .Site.Params.adsense.inArticleSlot -}}
|
||||
{{- if and $client $slot (ne hugo.Environment "development") -}}
|
||||
<div class="ad ad-in-article">
|
||||
<ins class="adsbygoogle"
|
||||
style="display:block; text-align:center;"
|
||||
data-ad-layout="in-article"
|
||||
data-ad-format="fluid"
|
||||
data-ad-client="{{ $client }}"
|
||||
data-ad-slot="{{ $slot }}"></ins>
|
||||
</div>
|
||||
<script>
|
||||
(adsbygoogle = window.adsbygoogle || []).push({});
|
||||
</script>
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,13 @@
|
||||
{{- $publisher := .Site.Params.ethicalads.publisher -}}
|
||||
{{- if and $publisher (ne hugo.Environment "development") -}}
|
||||
{{ if not (.Scratch.Get "ethicalads_loaded") -}}
|
||||
<script async src="https://media.ethicalads.io/media/client/ethicalads.min.js"></script>
|
||||
{{ .Scratch.Set "ethicalads_loaded" true }}
|
||||
{{- end }}
|
||||
<div class="ad-bar">
|
||||
<div class="container ad-bar-inner">
|
||||
<span class="muted">Sponsored</span>
|
||||
<div class="ethical-ad" data-ea-publisher="{{ $publisher }}" data-ea-type="image"></div>
|
||||
</div>
|
||||
</div>
|
||||
{{- end -}}
|
||||
Reference in New Issue
Block a user