From aed855d55d30146360100b0cb9f78f58d40784f0 Mon Sep 17 00:00:00 2001 From: Chaoming Li Date: Wed, 20 Nov 2024 23:09:07 +1100 Subject: [PATCH] added blog design in the theme --- assets/css/main.css | 117 ++++++++++++++++++ layouts/_default/list.html | 65 ++++++++++ layouts/_default/single.html | 86 +++++++++++++ layouts/index.html | 5 +- layouts/partials/components/cta.html | 28 +++++ .../partials/components/subscribe-form.html | 33 +++++ layouts/partials/post-card.html | 80 ++++++++++++ layouts/partials/post-meta.html | 45 +++++++ layouts/partials/sidebar.html | 86 +++++++++++++ layouts/shortcodes/code.html | 19 +++ layouts/shortcodes/cta.html | 39 +++--- layouts/shortcodes/figure.html | 18 +++ layouts/shortcodes/toc.html | 4 + layouts/taxonomy/list.html | 70 +++++++++++ layouts/taxonomy/terms.html | 39 ++++++ static/images/blog/blog-1.jpg | Bin 0 -> 77805 bytes static/images/blog/blog-2.webp | Bin 0 -> 401558 bytes static/images/blog/blog-3.webp | Bin 0 -> 75850 bytes static/images/blog/blog-4.jpg | Bin 0 -> 428724 bytes static/images/blog/blog-5.jpg | Bin 0 -> 285620 bytes 20 files changed, 708 insertions(+), 26 deletions(-) create mode 100644 layouts/_default/list.html create mode 100644 layouts/_default/single.html create mode 100644 layouts/partials/components/cta.html create mode 100644 layouts/partials/components/subscribe-form.html create mode 100644 layouts/partials/post-card.html create mode 100644 layouts/partials/post-meta.html create mode 100644 layouts/partials/sidebar.html create mode 100644 layouts/shortcodes/code.html create mode 100644 layouts/shortcodes/figure.html create mode 100644 layouts/shortcodes/toc.html create mode 100644 layouts/taxonomy/list.html create mode 100644 layouts/taxonomy/terms.html create mode 100644 static/images/blog/blog-1.jpg create mode 100644 static/images/blog/blog-2.webp create mode 100644 static/images/blog/blog-3.webp create mode 100644 static/images/blog/blog-4.jpg create mode 100644 static/images/blog/blog-5.jpg diff --git a/assets/css/main.css b/assets/css/main.css index 83f7903..77cf0cf 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -30,6 +30,10 @@ margin-bottom: 2rem; } + .cta-gradient { + background: linear-gradient(calc(var(--gradient-angle) * 1deg), var(--gradient-from), var(--gradient-to)); + } + .btn { @apply inline-flex items-center justify-center px-6 py-3 font-medium transition duration-200 ease-in-out; border-radius: 2rem; @@ -67,4 +71,117 @@ .feature-grid { @apply grid gap-8 md:grid-cols-2 lg:grid-cols-3; } + + /* Blog and Syntax Highlighting Styles */ + .highlight { + @apply text-sm font-mono text-gray-200; + } + + .highlight table { + @apply w-full border-separate border-spacing-0; + } + + .highlight table td { + @apply p-0; + } + + .highlight table td:first-child { + @apply pr-4 text-right select-none text-gray-500 border-r border-gray-700; + } + + .highlight table td:last-child { + @apply pl-4 w-full; + } + + .highlight .k, .highlight .kd { + @apply text-purple-400 font-semibold; + } + + .highlight .nf, .highlight .nx { + @apply text-blue-400; + } + + .highlight .s, .highlight .s1, .highlight .s2 { + @apply text-green-400; + } + + .highlight .mi, .highlight .mf { + @apply text-orange-400; + } + + .highlight .c, .highlight .c1, .highlight .cm { + @apply text-gray-500 italic; + } + + .highlight .o { + @apply text-yellow-400; + } + + .highlight .p { + @apply text-gray-400; + } + + .prose { + @apply max-w-none; + } + + .prose h1, .prose h2, .prose h3, .prose h4 { + @apply font-heading font-bold text-gray-900; + } + + .prose h1 { + @apply text-4xl mb-8; + } + + .prose h2 { + @apply text-3xl mt-12 mb-6; + } + + .prose h3 { + @apply text-2xl mt-8 mb-4; + } + + .prose p { + @apply text-gray-700 leading-relaxed mb-6; + } + + .prose a { + @apply text-primary-600 hover:text-primary-700 no-underline; + } + + .prose ul, .prose ol { + @apply my-6 ml-6; + } + + .prose li { + @apply mb-2; + } + + .prose blockquote { + @apply border-l-4 border-gray-200 pl-4 italic text-gray-700 my-8; + } + + .prose img { + @apply rounded-lg shadow-lg my-8; + } + + .prose code:not(pre code) { + @apply bg-gray-100 text-gray-900 px-1.5 py-0.5 rounded text-sm font-mono; + } + + .table-of-contents { + @apply bg-gray-50 p-6 rounded-lg my-8; + } + + .table-of-contents nav { + @apply space-y-2; + } + + .table-of-contents a { + @apply text-gray-700 hover:text-primary-600 no-underline; + } + + .table-of-contents ul { + @apply list-none ml-4 space-y-2; + } } diff --git a/layouts/_default/list.html b/layouts/_default/list.html new file mode 100644 index 0000000..86cb090 --- /dev/null +++ b/layouts/_default/list.html @@ -0,0 +1,65 @@ +{{ define "main" }} +
+
+ {{ if .IsHome }} +

{{ .Site.Title }}

+ {{ else }} +

{{ .Title }}

+ {{ with .Description }} +
{{ . }}
+ {{ end }} + {{ end }} + +
+ {{ $paginator := .Paginate .Pages }} + {{ range $paginator.Pages }} + {{ partial "post-card.html" . }} + {{ end }} +
+ + {{ $paginator := .Paginate .Pages }} + {{ if gt $paginator.TotalPages 1 }} + + {{ end }} +
+
+{{ end }} diff --git a/layouts/_default/single.html b/layouts/_default/single.html new file mode 100644 index 0000000..e845867 --- /dev/null +++ b/layouts/_default/single.html @@ -0,0 +1,86 @@ +{{ define "main" }} +
+ +
+ +
+
+ {{ with .Params.categories }} +
+ {{ range . }} + + {{ . }} + + {{ end }} +
+ {{ end }} + +

{{ .Title }}

+ + {{ partial "post-meta.html" . }} +
+ + {{ with .Params.featured_image }} +
+ {{ $.Title }} +
+ {{ end }} + +
+ {{ .Content }} +
+
+ + + +
+ + + + + + {{ if and .Site.Params.blog.cta.enable .Site.Params.cta.enable }} +
+ {{ partial "components/cta.html" . }} +
+ {{ end }} +
+{{ end }} diff --git a/layouts/index.html b/layouts/index.html index 89327cd..9983b08 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -1,6 +1,3 @@ {{ define "main" }} - -{{ if .Content }} - {{ .Content }} -{{ end }} +{{ .Content }} {{ end }} diff --git a/layouts/partials/components/cta.html b/layouts/partials/components/cta.html new file mode 100644 index 0000000..b62bc4e --- /dev/null +++ b/layouts/partials/components/cta.html @@ -0,0 +1,28 @@ +{{ if .Site.Params.cta.enable }} +
+
+ {{ $angle := .Site.Params.cta.gradient_angle | default 45 }} + {{ $from := .Site.Params.cta.gradient_from }} + {{ $to := .Site.Params.cta.gradient_to }} +
+
+

{{ .Site.Params.cta.title }}

+

{{ .Site.Params.cta.description }}

+
+ {{ with .Site.Params.cta.primary_button }} + + {{ .text }} + + {{ end }} + {{ with .Site.Params.cta.secondary_button }} + + {{ .text }} + + {{ end }} +
+
+
+
+
+{{ end }} diff --git a/layouts/partials/components/subscribe-form.html b/layouts/partials/components/subscribe-form.html new file mode 100644 index 0000000..65bd176 --- /dev/null +++ b/layouts/partials/components/subscribe-form.html @@ -0,0 +1,33 @@ +
+

{{ .title | default "Subscribe to Newsletter" }}

+

{{ .description | default "Get the latest posts delivered right to your inbox." }}

+ +
+ {{ with .hidden }} + {{ range $name, $value := . }} + + {{ end }} + {{ end }} + +
+ +
+ + + + {{ with .disclaimer }} +

{{ . }}

+ {{ end }} +
+
diff --git a/layouts/partials/post-card.html b/layouts/partials/post-card.html new file mode 100644 index 0000000..defd8e3 --- /dev/null +++ b/layouts/partials/post-card.html @@ -0,0 +1,80 @@ +
+ {{ with .Params.featured_image }} + + {{ $.Title }} + + {{ end }} + +
+ + {{ with .Params.categories }} +
+ {{ range first 1 . }} + + {{ . }} + + {{ end }} +
+ {{ end }} + + +

+ {{ .Title }} +

+ + +

+ {{ with .Description }} + {{ . }} + {{ else }} + {{ .Summary | truncate 160 }} + {{ end }} +

+ + +
+ {{ with .Params.author }} +
+ + + + {{ . }} +
+ {{ end }} + +
+ + + + +
+
+ + +
+ + Read More + + + + + + + + + + + {{ .ReadingTime }} min + +
+
+
diff --git a/layouts/partials/post-meta.html b/layouts/partials/post-meta.html new file mode 100644 index 0000000..30c9175 --- /dev/null +++ b/layouts/partials/post-meta.html @@ -0,0 +1,45 @@ +
+ + + +
+ {{ with .Params.author }} +
+ + + + {{ . }} +
+ {{ end }} + +
+
+ + + + {{ .ReadingTime }} min read +
+ +
+ + + + +
+
+
+ + + {{ with .Params.tags }} +
+ {{ range . }} + + #{{ . }} + + {{ end }} +
+ {{ end }} +
diff --git a/layouts/partials/sidebar.html b/layouts/partials/sidebar.html new file mode 100644 index 0000000..f2a360d --- /dev/null +++ b/layouts/partials/sidebar.html @@ -0,0 +1,86 @@ +
+ + {{ if .Site.Params.blog.sidebar.subscribe.enable }} + {{ $params := dict + "title" .Site.Params.blog.sidebar.subscribe.title + "description" .Site.Params.blog.sidebar.subscribe.description + "action" .Site.Params.blog.sidebar.subscribe.action + "emailName" .Site.Params.blog.sidebar.subscribe.emailName + "buttonText" .Site.Params.blog.sidebar.subscribe.buttonText + "placeholder" .Site.Params.blog.sidebar.subscribe.placeholder + "disclaimer" .Site.Params.blog.sidebar.subscribe.disclaimer + "hidden" .Site.Params.blog.sidebar.subscribe.hidden + }} + {{ partial "components/subscribe-form" $params }} + {{ end }} + + + {{ if .Site.Params.blog.sidebar.recent.enable }} +
+

{{ .Site.Params.blog.sidebar.recent.title | default "Recent Articles" }}

+
+ {{ $recentCount := .Site.Params.blog.sidebar.recent.count | default 5 }} + {{ range first $recentCount (where .Site.RegularPages "Type" "blog") }} + + {{ end }} +
+
+ {{ end }} + + + {{ if .Site.Params.blog.sidebar.categories.enable }} +
+

{{ .Site.Params.blog.sidebar.categories.title | default "Categories" }}

+
+ {{ range $name, $taxonomy := .Site.Taxonomies.categories }} + + {{ $name }} + ({{ $taxonomy.Count }}) + + {{ end }} +
+
+ {{ end }} + + + {{ if .Site.Params.blog.sidebar.tags.enable }} +
+

{{ .Site.Params.blog.sidebar.tags.title | default "Popular Tags" }}

+
+ {{ $tagCount := .Site.Params.blog.sidebar.tags.count | default 20 }} + {{ range first $tagCount .Site.Taxonomies.tags.ByCount }} + + #{{ .Name }} + ({{ .Count }}) + + {{ end }} +
+
+ {{ end }} +
diff --git a/layouts/shortcodes/code.html b/layouts/shortcodes/code.html new file mode 100644 index 0000000..bdada01 --- /dev/null +++ b/layouts/shortcodes/code.html @@ -0,0 +1,19 @@ +{{ $lang := .Get 0 }} +{{ $code := .Inner }} +{{ $filename := .Get 1 }} + +
+ {{ with $filename }} +
+
{{ . }}
+
+
+
+
+
+
+ {{ end }} +
+ {{ highlight $code $lang "linenos=table,linenostart=1,hl_lines=,lineanchors=line" }} +
+
diff --git a/layouts/shortcodes/cta.html b/layouts/shortcodes/cta.html index 0fd5ebf..9238bc9 100644 --- a/layouts/shortcodes/cta.html +++ b/layouts/shortcodes/cta.html @@ -1,22 +1,17 @@ -{{/* CTA Shortcode */}} -
-
-
- {{ with .Get "background-image" }} -
- {{ end }} -
-

{{ .Get "title" | default "Ready to Transform Your User Experience?" }}

-

{{ .Get "description" | default "Join thousands of companies already using our platform to drive growth." }}

- -
-
-
-
+{{ $params := dict + "title" (.Get "title") + "description" (.Get "description") + "primary_button" (dict + "text" (.Get "primary_button_text") + "url" (.Get "primary_button_url") + ) + "secondary_button" (dict + "text" (.Get "secondary_button_text") + "url" (.Get "secondary_button_url") + ) + "gradient_from" (.Get "gradient-from") + "gradient_to" (.Get "gradient-to") + "gradient_angle" (.Get "gradient-angle") +}} + +{{ partial "components/cta" (dict "Site" .Site "Params" (dict "cta" $params "enable" true)) }} diff --git a/layouts/shortcodes/figure.html b/layouts/shortcodes/figure.html new file mode 100644 index 0000000..d782dd9 --- /dev/null +++ b/layouts/shortcodes/figure.html @@ -0,0 +1,18 @@ +{{ $src := .Get "src" }} +{{ $alt := .Get "alt" }} +{{ $caption := .Get "caption" }} +{{ $class := .Get "class" | default "w-full" }} + +
+ {{ $alt }} + {{ with $caption }} +
+ {{ . | markdownify }} +
+ {{ end }} +
diff --git a/layouts/shortcodes/toc.html b/layouts/shortcodes/toc.html new file mode 100644 index 0000000..1b94a2b --- /dev/null +++ b/layouts/shortcodes/toc.html @@ -0,0 +1,4 @@ +
+

Table of Contents

+ {{ .Page.TableOfContents }} +
diff --git a/layouts/taxonomy/list.html b/layouts/taxonomy/list.html new file mode 100644 index 0000000..e81533f --- /dev/null +++ b/layouts/taxonomy/list.html @@ -0,0 +1,70 @@ +{{ define "main" }} +
+
+
+

+ {{ .Data.Singular | title }}: {{ .Title }} +

+
+ {{ $count := len .Pages }} + {{ if eq $count 1 }} + 1 post + {{ else }} + {{ $count }} posts + {{ end }} +
+
+ +
+ {{ $paginator := .Paginate .Pages }} + {{ range $paginator.Pages }} + {{ partial "post-card.html" . }} + {{ end }} +
+ + {{ $paginator := .Paginate .Pages }} + {{ if gt $paginator.TotalPages 1 }} + + {{ end }} +
+
+{{ end }} diff --git a/layouts/taxonomy/terms.html b/layouts/taxonomy/terms.html new file mode 100644 index 0000000..5fe1654 --- /dev/null +++ b/layouts/taxonomy/terms.html @@ -0,0 +1,39 @@ +{{ define "main" }} +
+
+
+

+ {{ .Title }} +

+
+ Browse all {{ .Data.Plural }} +
+
+ + + + {{ if not .Data.Terms }} +
+ No {{ .Data.Plural }} found +
+ {{ end }} +
+
+{{ end }} diff --git a/static/images/blog/blog-1.jpg b/static/images/blog/blog-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8776392539c5453bebe9252cbfa2c6ac8ed239e2 GIT binary patch literal 77805 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