initialize hugoplate
This commit is contained in:
20
layouts/404.html
Executable file
20
layouts/404.html
Executable file
@@ -0,0 +1,20 @@
|
||||
{{ define "main" }}
|
||||
{{ with site.GetPage "404" }}
|
||||
<section class="section-sm text-center">
|
||||
<div class="container">
|
||||
<div class="row justify-center">
|
||||
<div class="sm:col-10 md:col-8 lg:col-6">
|
||||
{{ partial "image" (dict "Src" .Params.image "Alt" .Title "Class" "mb-8") }}
|
||||
<h1 class="h2 mb-4">{{ .Title }}</h1>
|
||||
<div class="content">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
<a href="{{ site.BaseURL }}" class="btn btn-primary mt-8">
|
||||
{{ i18n "back_to_home" }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ end }}
|
13
layouts/_default/about.html
Normal file
13
layouts/_default/about.html
Normal file
@@ -0,0 +1,13 @@
|
||||
{{ define "main" }}
|
||||
<section class="section-sm">
|
||||
<div class="container">
|
||||
<div class="row justify-center">
|
||||
<div class="md:col-10 lg:col-7 text-center">
|
||||
{{ partial "image" (dict "Src" .Params.image "Alt" .Title "Class" "mx-auto mb-6" "Size" "200x200") }}
|
||||
<h2 class="h3 mb-6">{{ .Title }}</h2>
|
||||
<div class="content">{{ .Content }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
47
layouts/_default/baseof.html
Executable file
47
layouts/_default/baseof.html
Executable file
@@ -0,0 +1,47 @@
|
||||
<!DOCTYPE html>
|
||||
<html
|
||||
itemscope
|
||||
lang="{{ site.LanguageCode | default `en-US` }}"
|
||||
itemtype="http://schema.org/WebPage">
|
||||
<head>
|
||||
<!-- head (don't cache it) -->
|
||||
{{ partial "essentials/head.html" . }}
|
||||
|
||||
|
||||
<!-- style (always cache it) -->
|
||||
{{ partialCached "essentials/style.html" . }}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- cache partial only in production -->
|
||||
{{ if hugo.IsProduction }}
|
||||
{{ partialCached "preloader.html" . }}
|
||||
{{ partialCached "gtm-noscript.html" . }}
|
||||
{{ else }}
|
||||
{{ partial "preloader.html" . }}
|
||||
|
||||
|
||||
<!-- tailwind size indicator -->
|
||||
{{ partialCached "components/tw-size-indicator.html" . }}
|
||||
{{ end }}
|
||||
|
||||
|
||||
<!-- header (don't cache it) -->
|
||||
{{ partial "essentials/header.html" . }}
|
||||
{{ partial "search-modal.html" (dict "Context" . ) }}
|
||||
|
||||
|
||||
<main>
|
||||
{{ block "main" . }}{{ end }}
|
||||
</main>
|
||||
|
||||
<!-- cache partial only in production -->
|
||||
{{ if hugo.IsProduction }}
|
||||
{{ partialCached "essentials/footer.html" . }}
|
||||
{{ partialCached "essentials/script.html" . }}
|
||||
{{ else }}
|
||||
{{ partial "essentials/footer.html" . }}
|
||||
{{ partial "essentials/script.html" . }}
|
||||
{{ end }}
|
||||
</body>
|
||||
</html>
|
117
layouts/_default/contact.html
Executable file
117
layouts/_default/contact.html
Executable file
@@ -0,0 +1,117 @@
|
||||
{{ define "main" }}
|
||||
{{ partial "page-header" . }}
|
||||
|
||||
|
||||
<section class="section-sm">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="md:col-10 lg:col-6 mx-auto">
|
||||
<form action="{{ site.Params.contact_form_action }}" method="POST">
|
||||
<div class="mb-6">
|
||||
<label for="name" class="form-label">
|
||||
Full Name <span class="text-red-500">*</span>
|
||||
</label>
|
||||
<input
|
||||
id="name"
|
||||
class="form-input"
|
||||
placeholder="John Doe"
|
||||
type="text" />
|
||||
</div>
|
||||
<div class="mb-6">
|
||||
<label for="mail" class="form-label">
|
||||
Working Mail <span class="text-red-500">*</span>
|
||||
</label>
|
||||
<input
|
||||
id="mail"
|
||||
class="form-input"
|
||||
placeholder="john.doe@email.com"
|
||||
type="email" />
|
||||
</div>
|
||||
<div class="mb-6">
|
||||
<label for="message" class="form-label">
|
||||
Anything else? <span class="text-red-500">*</span>
|
||||
</label>
|
||||
<textarea
|
||||
class="form-input"
|
||||
placeholder="Message goes here..."
|
||||
id="message"
|
||||
rows="8"></textarea>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- google map -->
|
||||
{{ with site.Params.google_map }}
|
||||
{{ if .enable }}
|
||||
<div
|
||||
id="map"
|
||||
style="height: 400px;"
|
||||
data-latitude="{{ .map_latitude }}"
|
||||
data-longitude="{{ .map_longitude }}"
|
||||
data-marker="{{ .map_marker | relURL }}"
|
||||
data-marker-name="{{ site.Title }}"></div>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ with site.Params.subscription }}
|
||||
{{ if .enable }}
|
||||
<!-- subscription form -->
|
||||
<form
|
||||
action="{{ .mailchimp_form_action | safeURL }}"
|
||||
method="post"
|
||||
id="mc-embedded-subscribe-form"
|
||||
novalidate="novalidate">
|
||||
<div class="input-group w-75 mx-auto mb-3">
|
||||
<input
|
||||
type="email"
|
||||
name="EMAIL"
|
||||
placeholder="Email"
|
||||
class="form-control required email mce_inline_error"
|
||||
id="mce-EMAIL"
|
||||
aria-required="true"
|
||||
autocomplete="off"
|
||||
required />
|
||||
<button
|
||||
class="input-group-text"
|
||||
name="subscribe"
|
||||
id="mc-embedded-subscribe">
|
||||
{{ .button_label }}
|
||||
</button>
|
||||
</div>
|
||||
<input
|
||||
type="hidden"
|
||||
name="EMAILTYPE"
|
||||
id="mce-EMAILTYPE-0"
|
||||
value="html" />
|
||||
<div style="position:absolute;left:-5000px" aria-hidden="true">
|
||||
<input type="text" name="{{ .name }}" tabindex="-1" />
|
||||
</div>
|
||||
</form>
|
||||
<div id="mce-responses" class="clear">
|
||||
<div
|
||||
class="response text-white"
|
||||
id="mce-error-response"
|
||||
style="display:none"></div>
|
||||
<div
|
||||
class="response text-white"
|
||||
id="mce-success-response"
|
||||
style="display:none"></div>
|
||||
</div>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="//s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js"></script>
|
||||
<!-- /subscription form -->
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ if site.Params.google_map.enable }}
|
||||
{{ $gmap:= resources.Get "plugins/maps/google-map.js" }}
|
||||
<script defer src="{{ $gmap.RelPermalink }}"></script>
|
||||
<script src="https://maps.googleapis.com/maps/api/js?key={{ site.Params.google_map.map_api_key }}&libraries=places"></script>
|
||||
{{ end }}
|
||||
|
||||
{{ end }}
|
21
layouts/_default/list.html
Executable file
21
layouts/_default/list.html
Executable file
@@ -0,0 +1,21 @@
|
||||
{{ define "main" }}
|
||||
{{ partial "page-header" . }}
|
||||
|
||||
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<div class="row gx-5">
|
||||
<!-- blog posts -->
|
||||
<div class="lg:col-8">
|
||||
<div class="row">
|
||||
{{ range .Data.Pages }}
|
||||
<div class="md:col-6 mb-14">
|
||||
{{ partial "components/blog-card" . }}
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
16
layouts/_default/single.html
Executable file
16
layouts/_default/single.html
Executable file
@@ -0,0 +1,16 @@
|
||||
{{ define "main" }}
|
||||
{{ partial "page-header" . }}
|
||||
|
||||
|
||||
<section class="section-sm">
|
||||
<div class="container">
|
||||
<div class="row justify-center">
|
||||
<div class="lg:col-10">
|
||||
<div class="content">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
39
layouts/_default/terms.html
Executable file
39
layouts/_default/terms.html
Executable file
@@ -0,0 +1,39 @@
|
||||
{{ define "main" }}
|
||||
{{ partial "page-header" . }}
|
||||
<section class="section">
|
||||
<div class="container text-center">
|
||||
<ul>
|
||||
{{/* categories */}}
|
||||
{{ if eq .Permalink (`categories/` | absLangURL) }}
|
||||
{{ range site.Taxonomies.categories.ByCount }}
|
||||
<li class="m-3 inline-block">
|
||||
<a
|
||||
href="{{ .Page.Permalink }}"
|
||||
class="bg-theme-light text-dark dark:bg-darkmode-theme-light dark:text-darkmode-dark block rounded px-4 py-2 text-xl">
|
||||
{{ .Page.Title }}
|
||||
<span class="bg-body dark:bg-darkmode-body ml-2 rounded px-2">
|
||||
{{ .Count }}
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{/* tags */}}
|
||||
{{ if eq .Permalink (`tags/` | absLangURL) }}
|
||||
{{ range site.Taxonomies.tags.ByCount }}
|
||||
<li class="m-3 inline-block">
|
||||
<a
|
||||
href="{{ .Page.Permalink }}"
|
||||
class="bg-theme-light text-dark dark:bg-darkmode-theme-light dark:text-darkmode-dark block rounded px-4 py-2 text-xl">
|
||||
{{ .Page.Title }}
|
||||
<span class="bg-body dark:bg-darkmode-body ml-2 rounded px-2">
|
||||
{{ .Count }}
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
16
layouts/authors/list.html
Normal file
16
layouts/authors/list.html
Normal file
@@ -0,0 +1,16 @@
|
||||
{{ define "main" }}
|
||||
{{ partial "page-header" . }}
|
||||
|
||||
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
{{ range .RegularPages }}
|
||||
<div class="md:col-6 lg:col-4 mb-14">
|
||||
{{ partial "components/author-card" . }}
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
67
layouts/authors/single.html
Executable file
67
layouts/authors/single.html
Executable file
@@ -0,0 +1,67 @@
|
||||
{{ define "main" }}
|
||||
<section class="section-sm pb-0">
|
||||
<div class="container">
|
||||
<div
|
||||
class="row border-border dark:border-darkmode-border justify-center border-b pb-14">
|
||||
<div class="lg:col-4 text-center">
|
||||
{{ $image:= .Params.image }}
|
||||
{{ if $image }}
|
||||
{{ partial "image" (dict "Src" $image "Alt" .Title "Class" "mx-auto" "size" "200x200") }}
|
||||
{{ else if .Params.Email }}
|
||||
<img
|
||||
class="mx-auto"
|
||||
alt="{{ .Title }}"
|
||||
height="200"
|
||||
width="200"
|
||||
src="https://www.gravatar.com/avatar/{{ md5 .Params.email }}?s=128&pg&d=identicon" />
|
||||
{{ end }}
|
||||
<h1 class="h3 mt-10">{{ .Title }}</h1>
|
||||
<div class="content mt-6">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
<ul class="social-icons ml-4 mt-10 text-center">
|
||||
{{ if .Params.social.facebook }}
|
||||
<li>
|
||||
<a
|
||||
href="{{ . | safeURL }}"
|
||||
target="_blank"
|
||||
rel="noopener nofollow">
|
||||
<i class="fa-brands fa-facebook-f"></i>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ if .Params.social.twitter }}
|
||||
<li>
|
||||
<a
|
||||
href="{{ . | safeURL }}"
|
||||
target="_blank"
|
||||
rel="noopener nofollow">
|
||||
<i class="fa-brands fa-twitter"></i>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ if .Params.social.instagram }}
|
||||
<li>
|
||||
<a
|
||||
href="{{ . | safeURL }}"
|
||||
target="_blank"
|
||||
rel="noopener nofollow">
|
||||
<i class="fa-brands fa-instagram"></i>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row pb-16 pt-14">
|
||||
{{ $filterByAuthor := where site.RegularPages "Params.author" "==" .Title }}
|
||||
{{ range $filterByAuthor }}
|
||||
<div class="md:col-6 lg:col-4 mb-12">
|
||||
{{ partial "components/blog-card" . }}
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
29
layouts/blog/list.html
Normal file
29
layouts/blog/list.html
Normal file
@@ -0,0 +1,29 @@
|
||||
{{ define "main" }}
|
||||
{{ partial "page-header" . }}
|
||||
|
||||
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<div class="row gx-5">
|
||||
<!-- blog posts -->
|
||||
<div class="lg:col-8">
|
||||
<div class="row">
|
||||
{{ $paginator:= .Paginate .RegularPages }}
|
||||
{{ range $paginator.Pages }}
|
||||
<div class="md:col-6 mb-14">
|
||||
{{ partial "components/blog-card" . }}
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ partial "components/pagination.html" . }}
|
||||
</div>
|
||||
<!-- sidebar -->
|
||||
<div class="lg:col-4">
|
||||
<!-- widget -->
|
||||
{{ $widget:= site.Params.widgets.sidebar }}
|
||||
{{ partialCached "widgets/widget-wrapper" ( dict "Widgets" $widget "Scope" . ) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
87
layouts/blog/single.html
Normal file
87
layouts/blog/single.html
Normal file
@@ -0,0 +1,87 @@
|
||||
{{ define "main" }}
|
||||
<section class="section pt-7">
|
||||
<div class="container">
|
||||
<div class="row justify-center">
|
||||
<article class="lg:col-10">
|
||||
{{ $image:= .Params.image }}
|
||||
{{ if $image }}
|
||||
<div class="mb-10">
|
||||
{{ partial "image" (dict "Src" $image "Alt" .Title "Class" "w-full rounded") }}
|
||||
</div>
|
||||
{{ end }}
|
||||
<h1 class="h2 mb-4">
|
||||
{{ .Title }}
|
||||
</h1>
|
||||
<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-2"></i>
|
||||
{{ $categories:= .Params.categories }}
|
||||
{{ 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>
|
||||
<li class="mr-4 inline-block">
|
||||
<i class="fa-regular fa-clock mr-2"></i>
|
||||
{{ time.Format ":date_long" .PublishDate }}
|
||||
</li>
|
||||
</ul>
|
||||
<div class="content mb-10">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
<div class="row items-start justify-between">
|
||||
<div class="lg:col-5 mb-10 flex items-center lg:mb-0">
|
||||
<h5 class="mr-3">{{ i18n "tags" }} :</h5>
|
||||
<ul>
|
||||
{{ $tags:= .Params.tags }}
|
||||
{{ range $i,$p:= $tags }}
|
||||
<li class="inline-block">
|
||||
<a
|
||||
class="bg-theme-light hover:bg-primary dark:bg-darkmode-theme-light dark:hover:bg-darkmode-primary dark:hover:text-dark m-1 block rounded px-3 py-1 hover:text-white"
|
||||
href="{{ `tags/` | relLangURL }}{{ . | urlize | lower }}/">
|
||||
{{ . | humanize }}
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="lg:col-4 flex items-center">
|
||||
{{ partial "social-share" (dict "Class" "share-icons" "Title" (i18n "share") "Whatsapp" false "Telegram" false) }}
|
||||
</div>
|
||||
</div>
|
||||
<!-- comments -->
|
||||
{{ if site.DisqusShortname }}
|
||||
<div class="mt-20">
|
||||
{{ template "_internal/disqus.html" . }}
|
||||
</div>
|
||||
{{ end }}
|
||||
</article>
|
||||
</div>
|
||||
|
||||
<!-- Related posts -->
|
||||
<div class="section pb-0">
|
||||
<h2 class="h3 mb-12">{{ i18n "related_posts" }}</h2>
|
||||
<div class="row">
|
||||
{{ $related := (where site.RegularPages "Section" "in" site.Params.mainSections) | intersect (where site.RegularPages ".Title" "!=" .Title) | union (site.RegularPages.Related . ) }}
|
||||
{{ range first 3 $related }}
|
||||
<div class="lg:col-4">
|
||||
{{ partial "components/blog-card" . }}
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
131
layouts/index.html
Executable file
131
layouts/index.html
Executable file
@@ -0,0 +1,131 @@
|
||||
{{ define "main" }}
|
||||
<!-- Banner -->
|
||||
{{ with .Params.banner }}
|
||||
<section class="section pt-14">
|
||||
<div class="container">
|
||||
<div class="row justify-center">
|
||||
<div class="lg:col-7 mb-16 text-center">
|
||||
<h1 class="mb-4">
|
||||
{{ .title | markdownify }}
|
||||
</h1>
|
||||
<p class="mb-8">
|
||||
{{ .content | markdownify }}
|
||||
</p>
|
||||
{{ with .button }}
|
||||
{{ if .enable }}
|
||||
<a class="btn btn-primary" href="{{ .link | absURL }}">
|
||||
{{ .label }}
|
||||
<i class="fa fa-arrow-right"></i>
|
||||
</a>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
<div class="col-12">
|
||||
{{ partial "image" (dict "Src" .image "Alt" "Banner image") }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
<!-- /Banner -->
|
||||
|
||||
<!-- Features -->
|
||||
{{ range $i, $e:= .Params.features }}
|
||||
<section class="section-sm {{ if (modBool $i 2) }}bg-gradient{{ end }}">
|
||||
<div class="container">
|
||||
<div class="row items-center justify-between">
|
||||
<div
|
||||
class="mb:md-0 md:col-5 {{ if not (modBool $i 2) }}
|
||||
md:order-2
|
||||
{{ end }} mb-6">
|
||||
{{ partial "image" (dict "Src" .image "Alt" "feature image") }}
|
||||
</div>
|
||||
<div
|
||||
class="md:col-7 lg:col-6 {{ if not (modBool $i 2) }}
|
||||
md:order-1
|
||||
{{ end }}">
|
||||
<h2 class="mb-4">
|
||||
{{ .title | markdownify }}
|
||||
</h2>
|
||||
<p class="mb-8 text-lg">
|
||||
{{ .content | markdownify }}
|
||||
</p>
|
||||
<ul>
|
||||
{{ range .bulletpoints }}
|
||||
<li class="relative mb-4 pl-6">
|
||||
<i class="fa fa-check absolute left-0 top-1.5"></i>
|
||||
{{ . | markdownify }}
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
<!-- /Features -->
|
||||
|
||||
<!-- Testimonials -->
|
||||
{{ with site.GetPage "sections/testimonial" }}
|
||||
{{ if .Params.enable }}
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="md:col-10 lg:col-8 xl:col-6 mx-auto mb-12 text-center">
|
||||
<h2 class="mb-4">
|
||||
{{ .Title | markdownify }}
|
||||
</h2>
|
||||
<p>
|
||||
{{ .Params.description | markdownify }}
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<div class="swiper testimonial-slider">
|
||||
<div class="swiper-wrapper">
|
||||
{{ range .Params.testimonials }}
|
||||
<div class="swiper-slide">
|
||||
<div
|
||||
class="bg-theme-light dark:bg-darkmode-theme-light rounded-lg px-7 py-10">
|
||||
<div class="text-dark dark:text-white">
|
||||
<svg
|
||||
width="33"
|
||||
height="20"
|
||||
viewBox="0 0 33 20"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M1.28375 19.41L0.79375 18.64C1.21375 17.0067 1.75042 15.07 2.40375 12.83C3.05708 10.5433 3.75708 8.28 4.50375 6.04C5.29708 3.75333 6.06708 1.77 6.81375 0.0899959H15.3538C14.9338 2.09666 14.4904 4.26667 14.0238 6.6C13.5571 8.88666 13.1371 11.15 12.7638 13.39C12.4371 15.5833 12.1571 17.59 11.9238 19.41H1.28375ZM31.69 0.0899959L32.18 0.859998C31.76 2.54 31.2233 4.5 30.57 6.74C29.9167 8.98 29.2167 11.2433 28.47 13.53C27.7233 15.77 26.9533 17.73 26.16 19.41H17.69C18.0167 17.9167 18.3433 16.33 18.67 14.65C18.9967 12.9233 19.3 11.22 19.58 9.54C19.9067 7.81333 20.1867 6.15667 20.42 4.57C20.7 2.93666 20.91 1.44333 21.05 0.0899959H31.69Z"
|
||||
fill="currentColor" />
|
||||
</svg>
|
||||
</div>
|
||||
<blockquote class="mt-8">
|
||||
{{ .content | markdownify }}
|
||||
</blockquote>
|
||||
<div class="mt-11 flex items-center">
|
||||
<div class="text-dark dark:text-white">
|
||||
{{ partial "image" (dict "Src" .avatar "Size" "50x50" "Class" "rounded-full" "Alt" .name) }}
|
||||
</div>
|
||||
<div class="ml-4">
|
||||
<h3 class="h5 font-primary font-semibold">
|
||||
{{ .name }}
|
||||
</h3>
|
||||
<p class="text-dark dark:text-white">
|
||||
{{ .designation | markdownify }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
<div
|
||||
class="testimonial-slider-pagination mt-9 flex items-center justify-center text-center"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
<!-- /Testimonials -->
|
||||
{{ end }}
|
33
layouts/partials/call-to-action.html
Normal file
33
layouts/partials/call-to-action.html
Normal file
@@ -0,0 +1,33 @@
|
||||
<!-- Call to actions -->
|
||||
{{ with site.GetPage "sections/call-to-action" }}
|
||||
{{ if .Params.enable }}
|
||||
<section class="mb-28">
|
||||
<div class="container">
|
||||
<div
|
||||
class="bg-theme-light dark:bg-darkmode-theme-light rounded-xl px-4 py-16 xl:p-20">
|
||||
<div class="row items-center justify-between">
|
||||
<div class="md:col-5 lg:col-4 mb-10 md:order-2 md:mb-0">
|
||||
{{ partial "image" (dict "Src" .image "Alt" "call to action" "Class" "w-full") }}
|
||||
</div>
|
||||
<div class="md:col-7 md:order-1">
|
||||
<h2 class="mb-2">
|
||||
{{ .Title | markdownify }}
|
||||
</h2>
|
||||
<p class="mb-6">
|
||||
{{ .Params.description | markdownify }}
|
||||
</p>
|
||||
{{ with .Params.button }}
|
||||
{{ if .enable }}
|
||||
<a class="btn btn-primary" href="{{ .link | absURL }}"
|
||||
>{{ .label }}</a
|
||||
>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
<!-- /Call to actions -->
|
43
layouts/partials/components/author-card.html
Executable file
43
layouts/partials/components/author-card.html
Executable file
@@ -0,0 +1,43 @@
|
||||
<div
|
||||
class="bg-theme-light dark:bg-darkmode-theme-light rounded p-8 text-center">
|
||||
{{ $image:= .Params.image }}
|
||||
{{ if $image }}
|
||||
{{ partial "image" (dict "Src" $image "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">
|
||||
{{ if .Params.social.facebook }}
|
||||
<li>
|
||||
<a href="{{ . | safeURL }}" target="_blank" rel="noopener nofollow">
|
||||
<i class="fa-brands fa-facebook-f"></i>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ if .Params.social.twitter }}
|
||||
<li>
|
||||
<a href="{{ . | safeURL }}" target="_blank" rel="noopener nofollow">
|
||||
<i class="fa-brands fa-twitter"></i>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ if .Params.social.instagram }}
|
||||
<li>
|
||||
<a href="{{ . | safeURL }}" target="_blank" rel="noopener nofollow">
|
||||
<i class="fa-brands fa-instagram"></i>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
35
layouts/partials/components/blog-card.html
Normal file
35
layouts/partials/components/blog-card.html
Normal file
@@ -0,0 +1,35 @@
|
||||
<div class="bg-body dark:bg-darkmode-body">
|
||||
{{ $image:= .Params.image }}
|
||||
{{ if $image }}
|
||||
{{ partial "image" (dict "Src" $image "Alt" .Title "Class" "mb-6 w-full rounded") }}
|
||||
{{ end }}
|
||||
<h4 class="mb-3">
|
||||
<a href="{{ .RelPermalink }}">
|
||||
{{ .Title }}
|
||||
</a>
|
||||
</h4>
|
||||
<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-2"></i>
|
||||
{{ $categories:= .Params.categories }}
|
||||
{{ 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>
|
||||
<p class="mb-6">{{ .Summary }}</p>
|
||||
<a class="btn btn-outline-primary btn-sm" href="{{ .RelPermalink }}">
|
||||
{{ i18n "read_more" }}
|
||||
</a>
|
||||
</div>
|
21
layouts/partials/components/language-switcher.html
Normal file
21
layouts/partials/components/language-switcher.html
Normal file
@@ -0,0 +1,21 @@
|
||||
<!-- Language List -->
|
||||
{{ $class := .Class }}
|
||||
{{ $context := .Context }}
|
||||
|
||||
{{ if $context.IsTranslated }}
|
||||
<select class="{{ $class }}" onchange="location = this.value">
|
||||
{{ $siteLanguages := site.Home.AllTranslations }}
|
||||
{{ $pageLang := $context.Lang }}
|
||||
{{ range $siteLanguages }}
|
||||
{{ if eq (string $pageLang) (string .Language) }}
|
||||
<option id="{{ .Language }}" value="{{ .RelPermalink }}" selected>
|
||||
{{ .Language.LanguageName }}
|
||||
</option>
|
||||
{{ else }}
|
||||
<option id="{{ .Language }}" value="{{ .RelPermalink }}">
|
||||
{{ .Language.LanguageName }}
|
||||
</option>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</select>
|
||||
{{ end }}
|
138
layouts/partials/components/pagination.html
Executable file
138
layouts/partials/components/pagination.html
Executable 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-dark hover:bg-theme-light dark:text-darkmode-dark dark:hover:bg-darkmode-theme-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-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-dark rounded px-4 py-2 text-white">
|
||||
{{ .PageNumber }}
|
||||
</span>
|
||||
{{ else }}
|
||||
<a
|
||||
href="#"
|
||||
aria-current="page"
|
||||
class="text-dark hover:bg-theme-light dark:text-darkmode-dark dark:hover:bg-darkmode-theme-light rounded px-4 py-2">
|
||||
{{ .PageNumber }}
|
||||
</a>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
|
||||
<!-- Next page. -->
|
||||
{{ if $paginator.HasNext }}
|
||||
<a
|
||||
class="text-dark hover:bg-theme-light dark:text-darkmode-dark dark:hover:bg-darkmode-theme-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-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 }}
|
65
layouts/partials/components/theme-switcher.html
Normal file
65
layouts/partials/components/theme-switcher.html
Normal file
@@ -0,0 +1,65 @@
|
||||
<!-- theme switcher -->
|
||||
{{ $class := .Class }}
|
||||
{{ if site.Params.theme_switcher }}
|
||||
<div class="theme-switcher {{ $class }}">
|
||||
<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-[4px] top-[4px] 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-[4px] top-[4px] 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 -->
|
||||
{{ if site.Params.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.toggle("dark")}
|
||||
var themeSwitch = document.querySelectorAll("[data-theme-switcher]");
|
||||
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
[].forEach.call(themeSwitch, function (ts) {
|
||||
ts.checked = darkMode ? true : false;
|
||||
ts.addEventListener("click", () => {
|
||||
document.documentElement.classList.toggle("dark");
|
||||
localStorage.setItem(
|
||||
"theme",
|
||||
document.documentElement.classList.contains("dark") ? "dark" : "light"
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{{ end }}
|
||||
|
||||
{{ end }}
|
9
layouts/partials/components/tw-size-indicator.html
Normal file
9
layouts/partials/components/tw-size-indicator.html
Normal file
@@ -0,0 +1,9 @@
|
||||
<div
|
||||
class="fixed top-0 left-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>
|
57
layouts/partials/essentials/footer.html
Executable file
57
layouts/partials/essentials/footer.html
Executable file
@@ -0,0 +1,57 @@
|
||||
<footer class="bg-theme-light dark:bg-darkmode-theme-light">
|
||||
<div class="container">
|
||||
<div class="row items-center py-10">
|
||||
<div class="lg:col-3 mb-8 text-center lg:mb-0 lg:text-left">
|
||||
<!-- navbar brand/logo -->
|
||||
<a
|
||||
class="navbar-brand inline-block"
|
||||
href="{{ site.BaseURL | relLangURL }}">
|
||||
{{ partial "logo" }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="lg:col-6 mb-8 text-center lg:mb-0">
|
||||
<ul>
|
||||
{{ range site.Menus.footer }}
|
||||
<li class="m-3 inline-block">
|
||||
<a
|
||||
{{ if findRE `^http` .URL }}
|
||||
target="_blank" rel="noopener"
|
||||
{{ end }}
|
||||
href="{{ if findRE `^#` .URL }}
|
||||
{{ if not $.IsHome }}
|
||||
{{ site.BaseURL | relLangURL }}
|
||||
{{ end }}{{ .URL }}
|
||||
{{ else }}
|
||||
{{ .URL | relLangURL }}
|
||||
{{ end }}"
|
||||
>{{ .Name }}</a
|
||||
>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="lg:col-3 mb-8 text-center lg:mb-0 lg:mt-0 lg:text-right">
|
||||
<ul class="social-icons">
|
||||
{{ range site.Params.social }}
|
||||
<li>
|
||||
<a
|
||||
target="_blank"
|
||||
aria-label="{{ .name }}"
|
||||
rel="nofollow noopener"
|
||||
href="{{ .link | safeURL }}">
|
||||
<i class="{{ .icon }}"></i>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-border dark:border-darkmode-border border-t py-7">
|
||||
<div class="text-light dark:text-darkmode-light container text-center">
|
||||
<p>
|
||||
{{ site.Params.copyright | markdownify }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
56
layouts/partials/essentials/head.html
Executable file
56
layouts/partials/essentials/head.html
Executable file
@@ -0,0 +1,56 @@
|
||||
<meta charset="utf-8" />
|
||||
<title>{{ .Title | default site.Title }}</title>
|
||||
|
||||
<!-- responsive meta -->
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1, maximum-scale=5" />
|
||||
|
||||
<!-- theme meta -->
|
||||
<meta name="theme-name" content="hugoplate" />
|
||||
|
||||
<!-- favicon -->
|
||||
{{ partialCached "favicon" . }}
|
||||
|
||||
|
||||
<!-- manifest -->
|
||||
{{ partialCached "manifest" . }}
|
||||
|
||||
|
||||
<!-- site verifications -->
|
||||
{{ partialCached "site-verifications.html" . }}
|
||||
|
||||
|
||||
<!-- opengraph and twitter card -->
|
||||
{{ partial "basic-seo.html" . }}
|
||||
|
||||
|
||||
<!-- custom script -->
|
||||
{{ partialCached "custom-script.html" . }}
|
||||
|
||||
|
||||
<!-- google analytics -->
|
||||
{{ template "_internal/google_analytics.html" . }}
|
||||
|
||||
|
||||
<!-- google tag manager -->
|
||||
{{ partialCached "gtm.html" . }}
|
||||
|
||||
|
||||
<!-- matomo analytics -->
|
||||
{{/* {{ partialCached "matomo-analytics.html" . }} */}}
|
||||
|
||||
<!-- Baidu analytics -->
|
||||
{{/* {{ partialCached "baidu-analytics.html" . }} */}}
|
||||
|
||||
<!-- Plausible Analytics -->
|
||||
{{/* {{ partialCached "plausible-analytics.html" . }} */}}
|
||||
|
||||
<!-- Counter Analytics -->
|
||||
{{/* {{ partialCached "counter-analytics.html" . }} */}}
|
||||
|
||||
<!-- Crisp Chat -->
|
||||
{{/* {{ partialCached "crisp-chat.html" . }} */}}
|
||||
|
||||
<!-- search index -->
|
||||
{{ partial "search-index.html" . }}
|
140
layouts/partials/essentials/header.html
Executable file
140
layouts/partials/essentials/header.html
Executable file
@@ -0,0 +1,140 @@
|
||||
<header
|
||||
class="header {{ if site.Params.navbar_fixed }}sticky top-0{{ end }} z-30">
|
||||
<nav class="navbar container">
|
||||
<!-- logo -->
|
||||
<div class="order-0">
|
||||
<!-- navbar brand/logo -->
|
||||
<a class="navbar-brand block" href="{{ site.BaseURL | relLangURL }}">
|
||||
{{ partial "logo" }}
|
||||
</a>
|
||||
</div>
|
||||
<!-- navbar toggler -->
|
||||
<input id="nav-toggle" type="checkbox" class="hidden" />
|
||||
<label
|
||||
id="show-button"
|
||||
for="nav-toggle"
|
||||
class="order-2 flex cursor-pointer items-center md:order-1 md:hidden">
|
||||
<svg class="h-6 fill-current" viewBox="0 0 20 20">
|
||||
<title>Menu Open</title>
|
||||
<path d="M0 3h20v2H0V3z m0 6h20v2H0V9z m0 6h20v2H0V0z"></path>
|
||||
</svg>
|
||||
</label>
|
||||
<label
|
||||
id="hide-button"
|
||||
for="nav-toggle"
|
||||
class="order-2 hidden cursor-pointer items-center md:order-1">
|
||||
<svg class="h-6 fill-current" viewBox="0 0 20 20">
|
||||
<title>Menu Close</title>
|
||||
<polygon
|
||||
points="11 9 22 9 22 11 11 11 11 22 9 22 9 11 -2 11 -2 9 9 9 9 -2 11 -2"
|
||||
transform="rotate(45 10 10)"></polygon>
|
||||
</svg>
|
||||
</label>
|
||||
<!-- /navbar toggler -->
|
||||
|
||||
<!-- main navbar -->
|
||||
<ul
|
||||
id="nav-menu"
|
||||
class="navbar-nav order-3 hidden w-full pb-6 lg:order-1 lg:flex lg:w-auto lg:space-x-2 lg:pb-0 xl:space-x-8">
|
||||
{{ $currentPage := . }}
|
||||
{{ range site.Menus.main }}
|
||||
{{ $menuURL := .URL | absLangURL }}
|
||||
{{ $pageURL:= $currentPage.Permalink | absLangURL }}
|
||||
{{ $active := eq $menuURL $pageURL }}
|
||||
{{ if .HasChildren }}
|
||||
<li class="nav-item nav-dropdown group relative">
|
||||
<span
|
||||
class="nav-link {{ range .Children }}
|
||||
{{ $childURL := .URL | absLangURL }}
|
||||
{{ $active := eq $childURL $pageURL }}
|
||||
{{ if $active }}active{{ end }}
|
||||
{{ end }} inline-flex items-center">
|
||||
{{ .Name }}
|
||||
<svg class="h-4 w-4 fill-current" viewBox="0 0 20 20">
|
||||
<path
|
||||
d="M9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828 5.757 6.586 4.343 8z" />
|
||||
</svg>
|
||||
</span>
|
||||
<ul
|
||||
class="nav-dropdown-list hidden group-hover:block lg:invisible lg:absolute lg:block lg:opacity-0 lg:group-hover:visible lg:group-hover:opacity-100">
|
||||
{{ range .Children }}
|
||||
{{ $childURL := .URL | absLangURL }}
|
||||
{{ $active := eq $childURL $pageURL }}
|
||||
<li class="nav-dropdown-item">
|
||||
<a
|
||||
class="nav-dropdown-link {{ if $active }}
|
||||
active
|
||||
{{ end }}"
|
||||
{{ if findRE `^http` .URL }}
|
||||
target="_blank" rel="noopener"
|
||||
{{ end }}
|
||||
href="{{ if findRE `^#` .URL }}
|
||||
{{ if not $.IsHome }}
|
||||
{{ site.BaseURL | relLangURL }}
|
||||
{{ end }}{{ .URL }}
|
||||
{{ else }}
|
||||
{{ .URL | relLangURL }}
|
||||
{{ end }}">
|
||||
{{ .Name }}
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</li>
|
||||
{{ else }}
|
||||
<li class="nav-item">
|
||||
<a
|
||||
class="nav-link {{ if $active }}active{{ end }}"
|
||||
{{ if findRE `^http` .URL }}
|
||||
target="_blank" rel="noopener"
|
||||
{{ end }}
|
||||
href="{{ if findRE `^#` .URL }}
|
||||
{{ if not $.IsHome }}
|
||||
{{ site.BaseURL | relLangURL }}
|
||||
{{ end }}{{ .URL }}
|
||||
{{ else }}
|
||||
{{ .URL | relLangURL }}
|
||||
{{ end }}"
|
||||
>{{ .Name }}</a
|
||||
>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ if site.Params.navigation_button.enable }}
|
||||
<li class="mt-4 inline-block lg:hidden">
|
||||
<a
|
||||
class="btn btn-outline-primary btn-sm"
|
||||
href="{{ site.Params.navigation_button.link | relLangURL }}">
|
||||
{{ site.Params.navigation_button.label }}
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
|
||||
<div class="order-1 ml-auto flex items-center md:order-2 lg:ml-0">
|
||||
{{ with site.Params.search }}
|
||||
{{ if .enable }}
|
||||
<button
|
||||
aria-label="search"
|
||||
class="border-border text-dark hover:text-primary dark:border-darkmode-border mr-5 inline-block border-r pr-5 text-xl dark:text-white"
|
||||
data-target="search-modal">
|
||||
<i class="fa-solid fa-search"></i>
|
||||
</button>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ partial "components/language-switcher" (dict "Context" . "Class" "mr-5 pl-2 py-1 dark:bg-darkmode-theme-light rounded") }}
|
||||
{{ partial "components/theme-switcher" (dict "Class" "mr-5") }}
|
||||
|
||||
|
||||
<!-- navigation btn -->
|
||||
{{ if site.Params.navigation_button.enable }}
|
||||
<a
|
||||
href="{{ site.Params.navigation_button.link | relLangURL }}"
|
||||
class="btn btn-outline-primary btn-sm hidden lg:inline-block">
|
||||
{{ site.Params.navigation_button.label }}
|
||||
</a>
|
||||
{{ end }}
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
37
layouts/partials/essentials/script.html
Executable file
37
layouts/partials/essentials/script.html
Executable file
@@ -0,0 +1,37 @@
|
||||
<!-- JS Plugins + Main script -->
|
||||
{{ $scripts := slice }}
|
||||
{{ range site.Params.plugins.js }}
|
||||
{{ if findRE "^http" .link }}
|
||||
<script
|
||||
src="{{ .link | relURL }}"
|
||||
type="application/javascript"
|
||||
{{ .attributes | safeHTMLAttr }}></script>
|
||||
{{ else }}
|
||||
{{ $scripts = $scripts | append (resources.Get .link) }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
|
||||
<!-- main script -->
|
||||
{{ $scripts = $scripts | append (resources.Get "js/main.js") }}
|
||||
{{ $scripts = $scripts | resources.Concat "js/script.js" }}
|
||||
{{ if hugo.IsProduction }}
|
||||
{{ $scripts = $scripts | minify | fingerprint }}
|
||||
{{ end }}
|
||||
|
||||
|
||||
<script
|
||||
crossorigin="anonymous"
|
||||
integrity="{{ $scripts.Data.Integrity }}"
|
||||
src="{{ $scripts.RelPermalink }}"></script>
|
||||
|
||||
<!-- progressive web app -->
|
||||
{{ partialCached "pwa.html" . }}
|
||||
|
||||
|
||||
<!-- cookie consent -->
|
||||
{{ partialCached "cookie-consent.html" . }}
|
||||
|
||||
|
||||
<!-- google adsense -->
|
||||
{{ partialCached "adsense-script.html" . }}
|
55
layouts/partials/essentials/style.html
Executable file
55
layouts/partials/essentials/style.html
Executable file
@@ -0,0 +1,55 @@
|
||||
<!-- DNS preconnect -->
|
||||
<meta http-equiv="x-dns-prefetch-control" content="on" />
|
||||
<link rel="preconnect" href="https://use.fontawesome.com" crossorigin />
|
||||
<link rel="preconnect" href="//cdnjs.cloudflare.com" />
|
||||
<link rel="preconnect" href="//www.googletagmanager.com" />
|
||||
<link rel="preconnect" href="//www.google-analytics.com" />
|
||||
<link rel="dns-prefetch" href="https://use.fontawesome.com" />
|
||||
<link rel="dns-prefetch" href="//ajax.googleapis.com" />
|
||||
<link rel="dns-prefetch" href="//cdnjs.cloudflare.com" />
|
||||
<link rel="dns-prefetch" href="//www.googletagmanager.com" />
|
||||
<link rel="dns-prefetch" href="//www.google-analytics.com" />
|
||||
<link rel="dns-prefetch" href="//fonts.googleapis.com" />
|
||||
<link rel="dns-prefetch" href="//connect.facebook.net" />
|
||||
<link rel="dns-prefetch" href="//platform.linkedin.com" />
|
||||
<link rel="dns-prefetch" href="//platform.twitter.com" />
|
||||
|
||||
<!-- google fonts -->
|
||||
{{ $pf:= site.Params.fonts.font_family.primary }}
|
||||
{{ $sf:= site.Params.fonts.font_family.secondary }}
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family={{- $pf | safeURL -}}{{- with $sf -}}
|
||||
&family={{- . | safeURL -}}
|
||||
{{- end -}}&display=swap"
|
||||
rel="stylesheet" />
|
||||
|
||||
<!-- plugins + stylesheet -->
|
||||
{{ $styles := slice }}
|
||||
{{ range site.Params.plugins.css }}
|
||||
{{ if findRE "^http" .link }}
|
||||
<link
|
||||
crossorigin="anonymous"
|
||||
media="all"
|
||||
rel="stylesheet"
|
||||
href="{{ .link | relURL }}"
|
||||
{{ .attributes | safeHTMLAttr }} />
|
||||
{{ else }}
|
||||
{{ $styles = $styles | append (resources.Get .link) }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ $styles := $styles | append (resources.Get "scss/main.scss" | toCSS) }}
|
||||
{{ $styles := $styles | resources.Concat "css/style.css" }}
|
||||
{{ $styles = $styles | resources.PostCSS }}
|
||||
{{ if hugo.IsProduction }}
|
||||
{{ $styles = $styles | resources.ExecuteAsTemplate "css/style.css" . | minify | fingerprint | resources.PostProcess }}
|
||||
{{ else }}
|
||||
{{ $styles = $styles | resources.ExecuteAsTemplate "css/style.css" . }}
|
||||
{{ end }}
|
||||
|
||||
|
||||
<link
|
||||
href="{{ $styles.RelPermalink }}"
|
||||
integrity="{{ $styles.Data.Integrity }}"
|
||||
rel="stylesheet" />
|
29
layouts/partials/page-header.html
Executable file
29
layouts/partials/page-header.html
Executable file
@@ -0,0 +1,29 @@
|
||||
<section>
|
||||
<div class="container text-center">
|
||||
<div
|
||||
class="from-body to-theme-light dark:from-darkmode-body dark:to-darkmode-theme-light rounded-2xl bg-gradient-to-b px-8 py-14">
|
||||
<h1>{{ .Title | title }}</h1>
|
||||
{{ $url := replace .Permalink ( printf "%s" .Site.BaseURL) "" }}
|
||||
{{ $.Scratch.Add "path" .Site.BaseURL }}
|
||||
<ul class="breadcrumb mt-6 inline-flex">
|
||||
<li class="mx-1 capitalize">
|
||||
<a class="text-primary dark:text-darkmode-primary" href="/">Home</a>
|
||||
</li>
|
||||
{{ range $index, $element := split $url "/" }}
|
||||
{{ $.Scratch.Add "path" $element }}
|
||||
{{ if ne $element "" }}
|
||||
<li class="text-light dark:text-darkmode-light mx-1 capitalize">
|
||||
<span class="inlin-block mr-1">/</span>
|
||||
<a
|
||||
class="text-primary dark:text-darkmode-primary"
|
||||
href="{{ $.Scratch.Get `path` }}"
|
||||
>{{ . }}</a
|
||||
>
|
||||
</li>
|
||||
{{ $.Scratch.Add "path" "/" }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
23
layouts/partials/widgets/categories.html
Executable file
23
layouts/partials/widgets/categories.html
Executable file
@@ -0,0 +1,23 @@
|
||||
<!-- categories -->
|
||||
{{ if isset site.Taxonomies "categories" }}
|
||||
{{ if not (eq (len site.Taxonomies.categories) 0) }}
|
||||
<div class="mb-8">
|
||||
<h5 class="mb-6">{{ i18n "categories" }}</h5>
|
||||
<div class="bg-theme-light dark:bg-darkmode-theme-light rounded p-8">
|
||||
<ul class="space-y-4">
|
||||
{{ range $name, $items := site.Taxonomies.categories }}
|
||||
<li>
|
||||
<a
|
||||
class="hover:text-primary dark:hover:text-darkmode-primary {{ if (and (eq $.Page.Kind `term`) (eq $.Page.Type `categories`) (eq $.Page.Title .Page.Title)) }}
|
||||
active
|
||||
{{ end }} flex justify-between"
|
||||
href="{{ .Page.RelPermalink }}">
|
||||
{{ .Page.Title }} <span>( {{ len $items }} )</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ end }}
|
23
layouts/partials/widgets/tags.html
Executable file
23
layouts/partials/widgets/tags.html
Executable file
@@ -0,0 +1,23 @@
|
||||
<!-- tags -->
|
||||
{{ if isset site.Taxonomies "tags" }}
|
||||
{{ if not (eq (len site.Taxonomies.tags) 0) }}
|
||||
<div class="mb-8">
|
||||
<h5 class="mb-6">Tags</h5>
|
||||
<div class="bg-theme-light dark:bg-darkmode-theme-light rounded p-6">
|
||||
<ul>
|
||||
{{ range $name, $items := site.Taxonomies.tags }}
|
||||
<li class="inline-block">
|
||||
<a
|
||||
class="hover:bg-primary dark:bg-darkmode-body dark:hover:bg-darkmode-primary dark:hover:text-dark {{ if (and (eq $.Page.Kind `term`) (eq $.Page.Type `tags`) (eq $.Page.Title .Page.Title)) }}
|
||||
active
|
||||
{{ end }} m-1 block rounded bg-white px-3 py-1 hover:text-white"
|
||||
href="{{ .Page.RelPermalink }}">
|
||||
{{ .Page.Title }}
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ end }}
|
3
layouts/partials/widgets/widget-wrapper.html
Executable file
3
layouts/partials/widgets/widget-wrapper.html
Executable file
@@ -0,0 +1,3 @@
|
||||
{{ range .Widgets }}
|
||||
{{ partial ( print "widgets/" . ) $.Scope }}
|
||||
{{ end }}
|
Reference in New Issue
Block a user