This commit is contained in:
2025-03-16 15:39:32 -04:00
parent b9809a22d1
commit a7d03e39ae
92 changed files with 8 additions and 8 deletions

View File

@@ -0,0 +1,29 @@
<div class="bg-light dark:bg-darkmode-light rounded p-8 text-center">
{{ $image:= .Params.image }}
{{ if $image }}
{{ partial "image" (dict "Src" $image "Context" .Page "Alt" .Title "Class" "mx-auto mb-6 rounded" "size" "120x120") }}
{{ else if .Params.Email }}
<img
class="mx-auto mb-6 rounded"
alt="{{ .Title }}"
height="120"
width="120"
src="https://www.gravatar.com/avatar/{{ md5 .Params.email }}?s=128&pg&d=identicon" />
{{ end }}
<h4 class="mb-3">
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
</h4>
<p class="mb-4">
{{ .Summary }}
</p>
<ul class="social-icons">
{{ range .Params.social }}
<li>
<a href="{{ .link | safeURL }}" target="_blank" rel="noopener nofollow">
<span class="sr-only">{{ .title }}</span>
<i class="{{ .icon }}"></i>
</a>
</li>
{{ end }}
</ul>
</div>

View File

@@ -0,0 +1,37 @@
<div class="bg-body dark:bg-darkmode-body">
{{ $image:= .Params.image }}
{{ if $image }}
{{ partial "image" (dict "Src" $image "Context" .Page "Alt" .Title "Class" "mb-6 w-full rounded") }}
{{ end }}
<h4 class="mb-3">
<a href="{{ .RelPermalink }}">
{{ .Title }}
</a>
</h4>
{{ $categories:= .Params.categories }}
{{ if $categories }}
<ul class="mb-4">
<li class="mr-4 inline-block">
<a href="{{ `authors/` | relLangURL }}{{ .Params.Author | urlize }}/">
<i class="fa-regular fa-circle-user mr-2"></i>{{ .Params.author }}
</a>
</li>
<li class="mr-4 inline-block">
<i class="fa-regular fa-folder mr-1"></i>
{{ range $i,$p:= $categories }}
<a
href="{{ `categories/` | relLangURL }}{{ . | urlize | lower }}/"
class="ms-1"
>{{ . | humanize }}{{ if ne $i (sub (len $categories) 1) }}
{{ "," }}
{{ end }}
</a>
{{ end }}
</li>
</ul>
{{ end }}
<p class="mb-6">{{ .Summary | plainify }}</p>
<a class="btn btn-outline-primary btn-sm" href="{{ .RelPermalink }}">
{{ T "read_more" }}
</a>
</div>

View File

@@ -0,0 +1,30 @@
{{ $context := .Context }}
{{ $class := .Class }}
{{ $base := site.Home.Permalink }}
<ul class="{{ $class }} inline-flex space-x-1 capitalize">
<li>
<a class="text-primary dark:text-darkmode-primary" href="{{ $base }}">
{{ T "home" | default "Home" }}
</a>
<span class="inlin-block mr-1">/</span>
</li>
{{ range $i, $e:= $context.Ancestors.Reverse }}
{{ if and (not .IsHome) (ne .Title "Pages") }}
<li>
<a
class="text-primary dark:text-darkmode-primary"
href="{{ .RelPermalink }}">
{{ T (printf "%s" (lower .Title)) | default .Title }}
</a>
<span class="inlin-block mr-1">/</span>
</li>
{{ end }}
{{ end }}
<li>
<span class="text-primary dark:text-darkmode-primary">
{{ T (printf "%s" (lower $context.Title)) | default $context.Title }}
</span>
</li>
</ul>

View File

@@ -0,0 +1,35 @@
<!-- Language List -->
{{ if hugo.IsMultilingual }}
{{ $class := .Class }}
{{ $context := .Context }}
{{ $pageLang := $context.Lang }}
{{ $pageTranslations := newScratch }}
{{/* First, fill all translations of the Home page (failsafe) */}}
{{ range site.Home.AllTranslations }}
{{ $pageTranslations.Set .Language.Lang .Permalink }}
{{ end }}
{{/* Second, if a translation exists for the current page for the target language, replace failsafe */}}
{{ range $context.AllTranslations }}
{{ $pageTranslations.Set .Language.Lang .Permalink }}
{{ end }}
<select class="{{ $class }}" onchange="location = this.value">
{{ range site.Languages }}
{{/* Fill the dropdown with all known languages */}}
{{ $link := $pageTranslations.Get .Lang }}
{{ if $link }}
<option
id="{{ .Lang }}"
value="{{ $link }}"
{{ if eq .Lang $pageLang }}
selected
{{ end }}
>
{{ .LanguageName }}
</option>
{{ else }}
{{/* if we can't safely redirect the user to the translated page or at least to translated home, discard the language from options */}}
{{ end }}
{{ end }}
</select>
{{ end }}

View File

@@ -0,0 +1,138 @@
{{ $paginator := .Paginator }}
<!-- Number of links either side of the current page. -->
{{ $adjacent_links := 2 }}
<!-- $max_links = ($adjacent_links * 2) + 1 -->
{{ $max_links := (add (mul $adjacent_links 2) 1) }}
<!-- $lower_limit = $adjacent_links + 1 -->
{{ $lower_limit := (add $adjacent_links 1) }}
<!-- $upper_limit = $paginator.TotalPages - $adjacent_links -->
{{ $upper_limit := (sub $paginator.TotalPages $adjacent_links) }}
<!-- If there's more than one page. -->
{{ if gt $paginator.TotalPages 1 }}
<nav
class="flex items-center justify-center space-x-3"
aria-label="Pagination">
<!-- Previous page. -->
{{ if $paginator.HasPrev }}
<a
class="text-text-dark hover:bg-light dark:text-darkmode-text-dark dark:hover:bg-darkmode-light rounded px-2 py-1.5"
href="{{ $paginator.Prev.URL }}"
aria-label="Pagination Arrow">
<span class="sr-only">Previous</span>
<svg
viewBox="0 0 20 20"
fill="currentColor"
aria-hidden="true"
height="30"
width="30">
<path
fill-rule="evenodd"
d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z"
clip-rule="evenodd" />
</svg>
</a>
{{ else }}
<span class="text-text-light rounded px-2 py-1.5">
<span class="sr-only">Previous</span>
<svg
viewBox="0 0 20 20"
fill="currentColor"
aria-hidden="true"
height="30"
width="30">
<path
fill-rule="evenodd"
d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z"
clip-rule="evenodd" />
</svg>
</span>
{{ end }}
<!-- Page numbers -->
{{ range $paginator.Pagers }}
{{ $.Scratch.Set "page_number_flag" false }}
<!-- Advanced page numbers. -->
{{ if gt $paginator.TotalPages $max_links }}
<!-- Lower limit pages. -->
<!-- If the user is on a page which is in the lower limit. -->
{{ if le $paginator.PageNumber $lower_limit }}
<!-- If the current loop page is less than max_links. -->
{{ if le .PageNumber $max_links }}
{{ $.Scratch.Set "page_number_flag" true }}
{{ end }}
<!-- Upper limit pages. -->
<!-- If the user is on a page which is in the upper limit. -->
{{ else if ge $paginator.PageNumber $upper_limit }}
<!-- If the current loop page is greater than total pages minus $max_links -->
{{ if gt .PageNumber (sub $paginator.TotalPages $max_links) }}
{{ $.Scratch.Set "page_number_flag" true }}
{{ end }}
<!-- Middle pages. -->
{{ else }}
{{ if and ( ge .PageNumber (sub $paginator.PageNumber $adjacent_links) ) ( le .PageNumber (add $paginator.PageNumber $adjacent_links) ) }}
{{ $.Scratch.Set "page_number_flag" true }}
{{ end }}
{{ end }}
<!-- Simple page numbers. -->
{{ else }}
{{ $.Scratch.Set "page_number_flag" true }}
{{ end }}
<!-- Output page numbers. -->
{{ if eq ($.Scratch.Get "page_number_flag") true }}
{{ if eq . $paginator }}
<span
aria-current="page"
class="bg-primary dark:bg-darkmode-primary dark:text-text-dark rounded px-4 py-2 text-white">
{{ .PageNumber }}
</span>
{{ else }}
<a
href="{{ .URL }}"
aria-current="page"
class="text-text-dark hover:bg-light dark:text-darkmode-text-dark dark:hover:bg-darkmode-light rounded px-4 py-2">
{{ .PageNumber }}
</a>
{{ end }}
{{ end }}
{{ end }}
<!-- Next page. -->
{{ if $paginator.HasNext }}
<a
class="text-text-dark hover:bg-light dark:text-darkmode-text-dark dark:hover:bg-darkmode-light rounded px-2 py-1.5"
href="{{ $paginator.Next.URL }}"
aria-label="Pagination Arrow">
<span class="sr-only">Next</span>
<svg
viewBox="0 0 20 20"
fill="currentColor"
aria-hidden="true"
height="30"
width="30">
<path
fill-rule="evenodd"
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
clip-rule="evenodd" />
</svg>
</a>
{{ else }}
<span class="text-text-light rounded px-2 py-1.5">
<span class="sr-only">Next</span>
<svg
viewBox="0 0 20 20"
fill="currentColor"
aria-hidden="true"
height="30"
width="30">
<path
fill-rule="evenodd"
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
clip-rule="evenodd" />
</svg>
</span>
{{ end }}
</nav>
{{ end }}

View File

@@ -0,0 +1,70 @@
<!-- theme switcher -->
{{ $class := .Class }}
{{ if site.Params.theme_switcher }}
<div class="theme-switcher {{ $class }} hidden">
<input id="theme-switcher" data-theme-switcher type="checkbox" />
<label for="theme-switcher">
<span class="sr-only">theme switcher</span>
<span>
<!-- sun -->
<svg
class="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-10 opacity-100 dark:opacity-0"
viewBox="0 0 56 56"
fill="#fff"
height="16"
width="16">
<path
d="M30 4.6c0-1-.9-2-2-2a2 2 0 0 0-2 2v5c0 1 .9 2 2 2s2-1 2-2Zm9.6 9a2 2 0 0 0 0 2.8c.8.8 2 .8 2.9 0L46 13a2 2 0 0 0 0-2.9 2 2 0 0 0-3 0Zm-26 2.8c.7.8 2 .8 2.8 0 .8-.7.8-2 0-2.9L13 10c-.7-.7-2-.8-2.9 0-.7.8-.7 2.1 0 3ZM28 16a12 12 0 0 0-12 12 12 12 0 0 0 12 12 12 12 0 0 0 12-12 12 12 0 0 0-12-12Zm23.3 14c1.1 0 2-.9 2-2s-.9-2-2-2h-4.9a2 2 0 0 0-2 2c0 1.1 1 2 2 2ZM4.7 26a2 2 0 0 0-2 2c0 1.1.9 2 2 2h4.9c1 0 2-.9 2-2s-1-2-2-2Zm37.8 13.6a2 2 0 0 0-3 0 2 2 0 0 0 0 2.9l3.6 3.5a2 2 0 0 0 2.9 0c.8-.8.8-2.1 0-3ZM10 43.1a2 2 0 0 0 0 2.9c.8.7 2.1.8 3 0l3.4-3.5c.8-.8.8-2.1 0-2.9-.8-.8-2-.8-2.9 0Zm20 3.4c0-1.1-.9-2-2-2a2 2 0 0 0-2 2v4.9c0 1 .9 2 2 2s2-1 2-2Z" />
</svg>
<!-- moon -->
<svg
class="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-10 opacity-0 dark:opacity-100"
viewBox="0 0 24 24"
fill="none"
height="16"
width="16">
<path
fill="#000"
fill-rule="evenodd"
clip-rule="evenodd"
d="M8.2 2.2c1-.4 2 .6 1.6 1.5-1 3-.4 6.4 1.8 8.7a8.4 8.4 0 0 0 8.7 1.8c1-.3 2 .5 1.5 1.5v.1a10.3 10.3 0 0 1-9.4 6.2A10.3 10.3 0 0 1 3.2 6.7c1-2 2.9-3.5 4.9-4.4Z" />
</svg>
</span>
</label>
</div>
<!-- theme switcher -->
<script>
var darkMode = {{if eq site.Params.theme_default "dark"}}true{{else}}false{{end}};
{{ if eq site.Params.theme_default "system" }}
if (window.matchMedia("(prefers-color-scheme: dark)").matches){darkMode = true}
{{ end }}
if (localStorage.getItem("theme") === "dark"){darkMode = true}
else if (localStorage.getItem("theme") === "light"){darkMode = false}
if (darkMode){document.documentElement.classList.add("dark")}
else {document.documentElement.classList.remove("dark")}
// Show theme switcher after applying theme
document.addEventListener("DOMContentLoaded", () => {
var themeSwitch = document.querySelectorAll("[data-theme-switcher]");
var themeSwitcherContainer = document.querySelector('.theme-switcher');
[].forEach.call(themeSwitch, function (ts) {
ts.checked = darkMode;
ts.addEventListener("click", () => {
document.documentElement.classList.toggle("dark");
localStorage.setItem(
"theme",
document.documentElement.classList.contains("dark") ? "dark" : "light"
);
});
});
// Now make the switcher visible
themeSwitcherContainer.classList.remove('hidden');
});
</script>
{{ end }}

View File

@@ -0,0 +1,9 @@
<div
class="fixed left-0 top-0 z-50 flex w-[30px] items-center justify-center bg-gray-200 py-[2.5px] text-[12px] uppercase text-black sm:bg-red-200 md:bg-yellow-200 lg:bg-green-200 xl:bg-blue-200 2xl:bg-pink-200">
<span class="block sm:hidden">all</span>
<span class="hidden sm:block md:hidden">sm</span>
<span class="hidden md:block lg:hidden">md</span>
<span class="hidden lg:block xl:hidden">lg</span>
<span class="hidden xl:block 2xl:hidden">xl</span>
<span class="hidden 2xl:block">2xl</span>
</div>