feat: migrate Hugo Bootstrap theme to latest Hugo with Tailwind CSS and refactor codebase
* replace Bootstrap-based styling with Tailwind CSS * update theme compatibility for latest Hugo version * refactor templates and partials * fix outdated code and broken components * improve project structure and maintainability * optimize styling and frontend build setup
This commit is contained in:
23
layouts/404.en.html
Executable file
23
layouts/404.en.html
Executable file
@@ -0,0 +1,23 @@
|
||||
{{ define "main" }}
|
||||
<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">
|
||||
<span class="text-[8rem] block font-bold text-text-dark "> 404 </span>
|
||||
<h1 class="h2 mb-4">Page not found</h1>
|
||||
<div class="content">
|
||||
<p>
|
||||
The page you are looking for might have been removed, had its name
|
||||
changed, or is temporarily unavailable.
|
||||
</p>
|
||||
</div>
|
||||
<a
|
||||
href="{{ site.BaseURL | relLangURL }}"
|
||||
class="btn btn-primary mt-8">
|
||||
Back to home
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
@@ -1,11 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ with .Site.LanguageCode }}{{ . }}{{ else }}en-US{{ end }}">
|
||||
{{- partial "head.html" . -}}
|
||||
<body>
|
||||
{{- partial "header.html" . -}}
|
||||
<main>
|
||||
{{- block "main" . }}{{- end }}
|
||||
</main>
|
||||
{{- partial "footer.html" . -}}
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,3 +0,0 @@
|
||||
{{ define "main" }}
|
||||
|
||||
{{ end }}
|
||||
@@ -1,3 +0,0 @@
|
||||
{{ define "main" }}
|
||||
|
||||
{{ end }}
|
||||
41
layouts/_partials/call-to-action.html
Normal file
41
layouts/_partials/call-to-action.html
Normal file
@@ -0,0 +1,41 @@
|
||||
{{ with site.GetPage "sections/call-to-action" }}
|
||||
{{ if .Params.enable }}
|
||||
{{ $ctaImage := resources.Get (strings.TrimPrefix "/" .Params.image) }}
|
||||
<section
|
||||
class="section bg-center bg-cover bg-no-repeat"
|
||||
{{ with $ctaImage }}
|
||||
style="background-image: url('{{ .RelPermalink }}');"
|
||||
{{ end }}>
|
||||
<div class="container text-center">
|
||||
<h2 class="h1 mb-2 xl:text-[70px]">
|
||||
{{ .Title | markdownify }}
|
||||
</h2>
|
||||
|
||||
<div class="mt-10 flex gap-6 justify-center flex-wrap">
|
||||
{{ with .Params.button_secondary }}
|
||||
{{ if .enable }}
|
||||
<a class="btn btn-secondary" href="{{ .link | absURL }}">
|
||||
<span class="btn-area">
|
||||
<span data-text="{{ .label }}">
|
||||
{{ .label }}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ with .Params.button_primary }}
|
||||
{{ if .enable }}
|
||||
<a class="btn btn-primary" href="{{ .link | absURL }}">
|
||||
<span class="btn-area">
|
||||
<span data-text="{{ .label }}">
|
||||
{{ .label }}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
16
layouts/_partials/clients.html
Normal file
16
layouts/_partials/clients.html
Normal file
@@ -0,0 +1,16 @@
|
||||
{{ with site.GetPage "sections/clients" }}
|
||||
{{ if .Params.enable }}
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<h2 class="uppercase font-extralight tracking-widest mb-18">{{ .Params.title }}</h2>
|
||||
<ul class="grid grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-3 gap-y-14">
|
||||
{{ range .Params.client_logos }}
|
||||
<li>
|
||||
{{ partial "image" (dict "Src" . "Class" "object-contain mx-auto" "Alt" "client-logo") }}
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
29
layouts/_partials/components/blog-card.html
Normal file
29
layouts/_partials/components/blog-card.html
Normal file
@@ -0,0 +1,29 @@
|
||||
<article class="relative group transition duration-300 hover:shadow-xl">
|
||||
<!-- Image -->
|
||||
{{ $image:= .Params.image }}
|
||||
{{ if $image }}
|
||||
{{ partial "image" (dict "Src" $image "Context" .Page "Alt" .Title "Class" "w-full") }}
|
||||
{{ end }}
|
||||
|
||||
|
||||
<!-- Content -->
|
||||
<div
|
||||
class="absolute bottom-0 w-full bg-tertiary p-6 transition-all duration-300 group-hover:pb-20">
|
||||
<time class="text-primary/80" datetime= "{{ time.Format ":date_long" .PublishDate }}"> {{ time.Format ":date_long" .PublishDate }}</time>
|
||||
|
||||
<h4 class="font-semibold mt-1 mb-3">
|
||||
{{ .Title | markdownify }}
|
||||
</h4>
|
||||
|
||||
<p class="line-clamp-2">
|
||||
{{ .Description | markdownify}}
|
||||
</p>
|
||||
|
||||
<!-- Read More -->
|
||||
<a
|
||||
href="{{ .RelPermalink }}"
|
||||
class="absolute bottom-6 left-6 w-full opacity-0 translate-y-5 transition-all duration-300 group-hover:opacity-100 group-hover:translate-y-0 hover:text-primary hover:underline">
|
||||
{{ T "read_more" | default "Read More" }}
|
||||
</a>
|
||||
</div>
|
||||
</article>
|
||||
35
layouts/_partials/components/language-switcher.html
Normal file
35
layouts/_partials/components/language-switcher.html
Normal 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 }}
|
||||
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="{{ T "pagination" | default "Pagination" }}">
|
||||
<!-- Previous page. -->
|
||||
{{ if $paginator.HasPrev }}
|
||||
<a
|
||||
class="text-text-dark hover:bg-light px-2 py-1.5"
|
||||
href="{{ $paginator.Prev.URL }}"
|
||||
aria-label="{{ T "pagination-arrow" | default "Pagination Arrow" }}">
|
||||
<span class="sr-only">{{ T "previous" | default "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 px-2 py-1.5">
|
||||
<span class="sr-only">{{ T "previous" | default "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 px-4 py-2 text-white">
|
||||
{{ .PageNumber }}
|
||||
</span>
|
||||
{{ else }}
|
||||
<a
|
||||
href="{{ .URL }}"
|
||||
aria-current="page"
|
||||
class="text-text-dark hover:bg-light px-4 py-2">
|
||||
{{ .PageNumber }}
|
||||
</a>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
|
||||
<!-- Next page. -->
|
||||
{{ if $paginator.HasNext }}
|
||||
<a
|
||||
class="text-text-dark hover:bg-light rounded px-2 py-1.5"
|
||||
href="{{ $paginator.Next.URL }}"
|
||||
aria-label="{{ T "pagination-arrow" | default "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 }}
|
||||
27
layouts/_partials/components/portfolio-card.html
Normal file
27
layouts/_partials/components/portfolio-card.html
Normal file
@@ -0,0 +1,27 @@
|
||||
<article class="relative group transition duration-300 hover:shadow-xl">
|
||||
<!-- Image -->
|
||||
{{ $image:= .Params.image }}
|
||||
{{ if $image }}
|
||||
{{ partial "image" (dict "Src" $image "Context" .Page "Alt" .Title "Class" "w-full") }}
|
||||
{{ end }}
|
||||
|
||||
|
||||
<!-- Content -->
|
||||
<div
|
||||
class="absolute bottom-0 w-full bg-tertiary p-6 transition-all duration-300 group-hover:pb-20">
|
||||
<ul class="block text-primary mb-2">
|
||||
<li>{{ delimit .Params.category ", " }}</li>
|
||||
</ul>
|
||||
|
||||
<h4 class="font-semibold">
|
||||
{{ .Title | markdownify }}
|
||||
</h4>
|
||||
|
||||
<!-- Read More -->
|
||||
<a
|
||||
href="{{ .Permalink }}"
|
||||
class="absolute bottom-6 left-6 w-full opacity-0 translate-y-5 transition-all duration-300 group-hover:opacity-100 group-hover:translate-y-0 hover:text-primary hover:underline">
|
||||
{{ .Params.button_label }}
|
||||
</a>
|
||||
</div>
|
||||
</article>
|
||||
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 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>
|
||||
152
layouts/_partials/essentials/footer.html
Executable file
152
layouts/_partials/essentials/footer.html
Executable file
@@ -0,0 +1,152 @@
|
||||
<footer class="section bg-secondary/70">
|
||||
<div class="container">
|
||||
{{ if site.Params.footer.footer_logo }}
|
||||
{{ partial "image" (dict
|
||||
"Src" site.Params.footer.footer_logo
|
||||
"Size" "120x50"
|
||||
"Alt" "footer logo"
|
||||
"DataAos" "fade-in-sm"
|
||||
"Class" "mb-4"
|
||||
)
|
||||
}}
|
||||
{{ else }}
|
||||
<a
|
||||
class="navbar-brand inline-block mb-4"
|
||||
href="{{ site.Home.RelPermalink }}">
|
||||
{{ partial "logo" }}
|
||||
</a>
|
||||
{{ end }}
|
||||
|
||||
|
||||
<div class="mt-12 grid grid-cols-2 lg:grid-cols-3 xl:grid-cols-5 gap-y-14 gap-4 xl:gap-6">
|
||||
<!-- Contact Section -->
|
||||
<div>
|
||||
{{ $section_title := "" }}
|
||||
{{ range site.Menus.footer_01 }}
|
||||
{{ if .Title }}
|
||||
{{ $section_title = .Name }}
|
||||
{{ break }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
<h6 class="mb-8 text-text-light">{{ $section_title }}</h6>
|
||||
<ul>
|
||||
{{ range site.Menus.footer_01 }}
|
||||
{{ if not .Title }}
|
||||
<li
|
||||
class="mb-3 last:mb-0 text-text-light text-wrap">
|
||||
<a class="hover:underline" href="{{ .URL | relLangURL }}" target="_blank">
|
||||
{{ .Name }}
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Services Section -->
|
||||
<div>
|
||||
{{ $section_title := "" }}
|
||||
{{ range site.Menus.footer_02 }}
|
||||
{{ if .Title }}
|
||||
{{ $section_title = .Name }}
|
||||
{{ break }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
<h6 class="mb-8 text-text-light">{{ $section_title }}</h6>
|
||||
<ul>
|
||||
{{ range site.Menus.footer_02 }}
|
||||
{{ if not .Title }}
|
||||
<li
|
||||
class="mb-3 last:mb-0 text-text-light">
|
||||
<a hover:underline href="{{ .URL | relLangURL }}">
|
||||
{{ .Name }}
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Social Section -->
|
||||
<div>
|
||||
<h6 class="mb-8 text-text-light">
|
||||
{{ with hugo.Data.social.title }}
|
||||
{{ . }}
|
||||
{{ else }}
|
||||
Social
|
||||
{{ end }}
|
||||
</h6>
|
||||
<ul>
|
||||
{{ range hugo.Data.social.main }}
|
||||
<li
|
||||
class="mb-3 last:mb-0 text-text-light">
|
||||
<a
|
||||
href="{{ .link | safeURL }}"
|
||||
class="capitalize hover:underline"
|
||||
target="_blank">
|
||||
{{ .name }}
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- About Section -->
|
||||
<div>
|
||||
<h6 class="mb-8 text-text-light">
|
||||
{{ site.Params.footer.footer_title }}
|
||||
</h6>
|
||||
<p
|
||||
class="mb-3 last:mb-0 text-text-light">
|
||||
{{ site.Params.footer.footer_description }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Back-To-Top Section -->
|
||||
<div>
|
||||
<a href="#" class="text-text-light js-back-to-top" aria-label="Back to top">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="26.071"
|
||||
height="32.634"
|
||||
viewBox="0 0 26.071 32.634">
|
||||
<g id="upload" transform="translate(-3.282)">
|
||||
<path
|
||||
id="Path_3"
|
||||
data-name="Path 3"
|
||||
d="M16.317,32.634a.5.5,0,0,1-.5-.5V.5a.5.5,0,0,1,1,0V32.134A.5.5,0,0,1,16.317,32.634Z"
|
||||
fill="currentColor" />
|
||||
<path
|
||||
id="Path_4"
|
||||
data-name="Path 4"
|
||||
d="M28.852,13.536a.5.5,0,0,1-.354-.146L16.319,1.207,4.135,13.39a.5.5,0,0,1-.707-.707L15.966.146A.5.5,0,0,1,16.319,0h0a.5.5,0,0,1,.354.146L29.206,12.682a.5.5,0,0,1-.354.854Z"
|
||||
fill="currentColor" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
<p class="mt-4">
|
||||
{{ .Site.Params.footer.back_to_top | safeHTML }}
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{{/* Smooth scroll script for back-to-top (prevents hash in URL) */}}
|
||||
<script>
|
||||
(function(){
|
||||
function onClick(e){
|
||||
e.preventDefault();
|
||||
window.scrollTo({ top: 0, behavior: 'smooth' });
|
||||
}
|
||||
document.addEventListener('DOMContentLoaded', function(){
|
||||
var els = document.querySelectorAll('.js-back-to-top');
|
||||
for(var i=0;i<els.length;i++) els[i].addEventListener('click', onClick, {passive:false});
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</div>
|
||||
|
||||
<p class="text-text-light text-center [&>a]:underline mt-14">
|
||||
{{ site.Params.copyright | markdownify }}
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
65
layouts/_partials/essentials/head.html
Executable file
65
layouts/_partials/essentials/head.html
Executable file
@@ -0,0 +1,65 @@
|
||||
<meta charset="utf-8" />
|
||||
|
||||
<!-- responsive meta -->
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1, maximum-scale=5" />
|
||||
|
||||
<!-- theme meta -->
|
||||
<meta name="theme-name" content="roxo-hugo" />
|
||||
|
||||
<!-- favicon -->
|
||||
{{/* https://github.com/gethugothemes/hugo-modules/tree/master/images */}}
|
||||
{{ partialCached "favicon" . }}
|
||||
|
||||
|
||||
<!-- manifest -->
|
||||
{{/* https://github.com/gethugothemes/hugo-modules/tree/master/pwa */}}
|
||||
{{ partialCached "manifest" . }}
|
||||
|
||||
|
||||
<!-- site verifications -->
|
||||
{{/* https://github.com/gethugothemes/hugo-modules/tree/master/seo-tools/site-verifications */}}
|
||||
{{ partialCached "site-verifications.html" . }}
|
||||
|
||||
|
||||
<!-- opengraph and twitter card -->
|
||||
{{/* https://github.com/gethugothemes/hugo-modules/tree/master/seo-tools/basic-seo */}}
|
||||
{{ partial "basic-seo.html" . }}
|
||||
|
||||
|
||||
<!-- custom script -->
|
||||
{{/* https://github.com/gethugothemes/hugo-modules/tree/master/components/custom-script */}}
|
||||
{{ partialCached "custom-script.html" . }}
|
||||
|
||||
|
||||
<!-- google analytics -->
|
||||
{{/* https://gohugo.io/templates/embedded/#configuration-google-analytics */}}
|
||||
{{ if and site.Config.Services.GoogleAnalytics.ID (ne site.Config.Services.GoogleAnalytics.ID "G-MEASUREMENT_ID") }}
|
||||
{{ partial "google_analytics.html" . }}
|
||||
{{ end }}
|
||||
|
||||
|
||||
<!-- google tag manager -->
|
||||
{{/* https://github.com/gethugothemes/hugo-modules/tree/master/seo-tools/google-tag-manager */}}
|
||||
{{ partialCached "gtm.html" . }}
|
||||
|
||||
<!-- matomo analytics -->
|
||||
{{/* https://github.com/gethugothemes/hugo-modules/tree/master/seo-tools/matomo-analytics */}}
|
||||
{{/* {{ partialCached "matomo-analytics.html" . }} */}}
|
||||
|
||||
<!-- Baidu analytics -->
|
||||
{{/* https://github.com/gethugothemes/hugo-modules/tree/master/seo-tools/baidu-analytics */}}
|
||||
{{/* {{ partialCached "baidu-analytics.html" . }} */}}
|
||||
|
||||
<!-- Plausible Analytics -->
|
||||
{{/* https://github.com/gethugothemes/hugo-modules/tree/master/seo-tools/plausible-analytics */}}
|
||||
{{/* {{ partialCached "plausible-analytics.html" . }} */}}
|
||||
|
||||
<!-- Counter Analytics -->
|
||||
{{/* https://github.com/gethugothemes/hugo-modules/tree/master/seo-tools/counter-analytics */}}
|
||||
{{/* {{ partialCached "counter-analytics.html" . }} */}}
|
||||
|
||||
<!-- Crisp Chat -->
|
||||
{{/* https://github.com/gethugothemes/hugo-modules/tree/master/components/crisp-chat */}}
|
||||
{{/* {{ partialCached "crisp-chat.html" . }} */}}
|
||||
179
layouts/_partials/essentials/header.html
Executable file
179
layouts/_partials/essentials/header.html
Executable file
@@ -0,0 +1,179 @@
|
||||
<header
|
||||
id="site-header"
|
||||
data-navbar-fixed="{{ if site.Params.navbar_fixed }}
|
||||
true
|
||||
{{ else }}
|
||||
false
|
||||
{{ end }}"
|
||||
class="header {{ if site.Params.navbar_fixed }}
|
||||
fixed top-0
|
||||
{{ end }} inset-x-0 z-50 py-6 lg:py-6 transition-all duration-300 ease-in-out">
|
||||
<nav class="navbar container">
|
||||
<!-- logo -->
|
||||
<div class="order-0">
|
||||
<!-- navbar brand/logo -->
|
||||
<a class="navbar-brand block" href="{{ site.Home.RelPermalink }}">
|
||||
{{/* https://github.com/gethugothemes/hugo-modules/tree/master/images */}}
|
||||
{{ partial "logo" }}
|
||||
</a>
|
||||
</div>
|
||||
<!-- navbar toggler -->
|
||||
<input id="nav-toggle" type="checkbox" class="hidden" />
|
||||
<label
|
||||
for="nav-toggle"
|
||||
class="order-2 cursor-pointer flex items-center lg:hidden text-text-dark lg:order-1 ml-auto">
|
||||
<svg id="show-button" class="h-6 fill-current block" viewBox="0 0 20 20">
|
||||
<title>{{ T "menu-open" | default "Menu Open" }}</title>
|
||||
<path d="M0 3h20v2H0V3z m0 6h20v2H0V9z m0 6h20v2H0V0z"></path>
|
||||
</svg>
|
||||
<svg id="hide-button" class="h-6 fill-current hidden" viewBox="0 0 20 20">
|
||||
<title>{{ T "menu-close" | default "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 -->
|
||||
|
||||
<div class="order-3 flex flex-col lg:flex-row items-center lg:order-2 w-full lg:w-auto lg:justify-between">
|
||||
<!-- main navbar -->
|
||||
<ul
|
||||
id="nav-menu"
|
||||
class="navbar-nav hidden lg:flex w-full pb-6 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">
|
||||
<input
|
||||
type="checkbox"
|
||||
id="submenu-{{ .Name | urlize }}"
|
||||
class="peer lg:hidden" />
|
||||
<label
|
||||
for="submenu-{{ .Name | urlize }}"
|
||||
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>
|
||||
</label>
|
||||
<ul
|
||||
class="nav-dropdown-list hidden peer-checked: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.Home.RelPermalink -}}
|
||||
{{- 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.Home.RelPermalink -}}
|
||||
{{- 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-primary"
|
||||
href="{{ site.Params.navigation_button.link | relLangURL }}"
|
||||
{{ if (hasPrefix site.Params.navigation_button.link `http`) }}
|
||||
target="_blank" rel="noopener"
|
||||
{{ end }}>
|
||||
{{ site.Params.navigation_button.label }}
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
{{ partial "components/language-switcher" (dict "Context" . "Class" "mr-5 pl-2 py-1 rounded") }}
|
||||
|
||||
|
||||
<!-- navigation btn -->
|
||||
{{ if site.Params.navigation_button.enable }}
|
||||
<a
|
||||
href="{{ site.Params.navigation_button.link | relLangURL }}"
|
||||
class="btn btn-primary hidden lg:inline-block rounded-full"
|
||||
{{ if (hasPrefix site.Params.navigation_button.link `http`) }}
|
||||
target="_blank" rel="noopener"
|
||||
{{ end }}
|
||||
>
|
||||
<span class="btn-area">
|
||||
<span data-text="{{ site.Params.navigation_button.label }}">
|
||||
{{ site.Params.navigation_button.label }}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
{{ end }}
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
{{/* Header shrink on scroll */}}
|
||||
<script>
|
||||
(function(){
|
||||
var header = document.getElementById('site-header');
|
||||
var lastScrollTop = 0;
|
||||
var shrunk = false;
|
||||
|
||||
if(!header) return;
|
||||
|
||||
function handleScroll(){
|
||||
var scrollTop = window.scrollY || document.documentElement.scrollTop;
|
||||
|
||||
if(scrollTop > 50){
|
||||
if(!shrunk){
|
||||
header.classList.remove('py-6', 'lg:py-6');
|
||||
header.classList.add('py-3', 'lg:py-3', 'shadow-md');
|
||||
shrunk = true;
|
||||
}
|
||||
} else {
|
||||
if(shrunk){
|
||||
header.classList.remove('py-3', 'lg:py-3', 'shadow-md');
|
||||
header.classList.add('py-6', 'lg:py-6');
|
||||
shrunk = false;
|
||||
}
|
||||
}
|
||||
lastScrollTop = scrollTop;
|
||||
}
|
||||
|
||||
window.addEventListener('scroll', handleScroll, {passive: true});
|
||||
})();
|
||||
</script>
|
||||
</header>
|
||||
57
layouts/_partials/essentials/script.html
Executable file
57
layouts/_partials/essentials/script.html
Executable file
@@ -0,0 +1,57 @@
|
||||
<!-- JS Plugins + Main script -->
|
||||
{{ $scripts := slice }}
|
||||
{{ $scriptsLazy := slice }}
|
||||
{{ range site.Params.plugins.js }}
|
||||
{{ if findRE "^http" .link }}
|
||||
<script
|
||||
src="{{ .link | relURL }}"
|
||||
type="application/javascript"
|
||||
{{ .attributes | safeHTMLAttr }}></script>
|
||||
{{ else }}
|
||||
{{ if not .lazy }}
|
||||
{{ $scripts = $scripts | append (resources.Get .link) }}
|
||||
{{ else }}
|
||||
{{ $scriptsLazy = $scriptsLazy | append (resources.Get .link) }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
|
||||
<!-- main script -->
|
||||
{{ $scripts = $scripts | append (resources.Get "js/main.js") }}
|
||||
{{ $scripts = $scripts | resources.Concat "js/script.js" }}
|
||||
|
||||
{{ $scriptsLazy = $scriptsLazy | resources.Concat "js/script-lazy.js" }}
|
||||
|
||||
{{ if hugo.IsProduction }}
|
||||
{{ $scripts = $scripts | minify | fingerprint }}
|
||||
{{ $scriptsLazy = $scriptsLazy | minify | fingerprint }}
|
||||
{{ end }}
|
||||
|
||||
{{/* scripts */}}
|
||||
<script
|
||||
crossorigin="anonymous"
|
||||
integrity="{{ $scripts.Data.Integrity }}"
|
||||
src="{{ $scripts.RelPermalink }}"></script>
|
||||
|
||||
{{/* scripts lazy */}}
|
||||
<script
|
||||
defer
|
||||
async
|
||||
crossorigin="anonymous"
|
||||
integrity="{{ $scriptsLazy.Data.Integrity }}"
|
||||
src="{{ $scriptsLazy.RelPermalink }}"></script>
|
||||
|
||||
<!-- progressive web app -->
|
||||
{{/* https://github.com/gethugothemes/hugo-modules/tree/master/pwa */}}
|
||||
{{ partialCached "pwa.html" . }}
|
||||
|
||||
|
||||
<!-- cookie consent -->
|
||||
{{/* https://github.com/gethugothemes/hugo-modules/tree/master/components/cookie-consent */}}
|
||||
{{ partialCached "cookie-consent.html" . }}
|
||||
|
||||
|
||||
<!-- google adsense -->
|
||||
{{/* https://github.com/gethugothemes/hugo-modules/tree/master/adsense */}}
|
||||
{{ partialCached "adsense-script.html" . }}
|
||||
80
layouts/_partials/essentials/style.html
Executable file
80
layouts/_partials/essentials/style.html
Executable file
@@ -0,0 +1,80 @@
|
||||
<!-- 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:= hugo.Data.theme.fonts.font_family.primary }}
|
||||
{{ $sf:= hugo.Data.theme.fonts.font_family.secondary }}
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<script>
|
||||
(function () {
|
||||
const googleFont = document.createElement("link");
|
||||
googleFont.href = "https://fonts.googleapis.com/css2?family={{$pf | safeURL}}{{with $sf}}&family={{. | safeURL}}{{end}}&display=swap";
|
||||
googleFont.type = "text/css";
|
||||
googleFont.rel = "stylesheet";
|
||||
document.head.appendChild(googleFont);
|
||||
})();
|
||||
</script>
|
||||
|
||||
<!-- main styles -->
|
||||
{{ $styles := slice }}
|
||||
{{ $stylesLazy := slice }}
|
||||
|
||||
{{ range site.Params.plugins.css }}
|
||||
{{ if findRE "^http" .link }}
|
||||
<link
|
||||
crossorigin="anonymous"
|
||||
media="all"
|
||||
rel="stylesheet"
|
||||
href="{{ .link | relURL }}"
|
||||
{{ .attributes | safeHTMLAttr }} />
|
||||
{{ else }}
|
||||
{{ if not .lazy }}
|
||||
{{ $styles = $styles | append (resources.Get .link) }}
|
||||
{{ else }}
|
||||
{{ $stylesLazy = $stylesLazy | append (resources.Get .link) }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ $mainCSS := resources.Get "css/main.css" }}
|
||||
{{ $tailwindOpts := dict "inlineImports" true }}
|
||||
{{ $tailwindCSS := $mainCSS | css.TailwindCSS $tailwindOpts }}
|
||||
|
||||
{{ $styles = $styles | append $tailwindCSS }}
|
||||
{{ $styles = $styles | resources.Concat "css/style.css" }}
|
||||
|
||||
{{ $stylesLazy = $stylesLazy | resources.Concat "css/style-lazy.css" }}
|
||||
|
||||
{{ if hugo.IsProduction }}
|
||||
{{ $styles = $styles | fingerprint }}
|
||||
{{ $stylesLazy = $stylesLazy | minify | fingerprint }}
|
||||
{{ end }}
|
||||
|
||||
|
||||
<!-- link main style -->
|
||||
<link
|
||||
href="{{ $styles.RelPermalink }}"
|
||||
integrity="{{ $styles.Data.Integrity }}"
|
||||
rel="stylesheet" />
|
||||
|
||||
<!-- link lazy style -->
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="{{ $stylesLazy.RelPermalink }}"
|
||||
integrity="{{ $stylesLazy.Data.Integrity }}"
|
||||
media="print"
|
||||
onload="this.media='all'; this.onload=null;" />
|
||||
38
layouts/_partials/team.html
Normal file
38
layouts/_partials/team.html
Normal file
@@ -0,0 +1,38 @@
|
||||
{{ with site.GetPage "sections/team" }}
|
||||
{{ if .Params.enable }}
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<h2 class="uppercase font-extralight tracking-widest mb-18">
|
||||
{{ .Params.title }}
|
||||
</h2>
|
||||
|
||||
<div class="grid gap-10 lg:gap-6 h-auto md:grid-cols-2 lg:grid-cols-3 auto-rows-fr items-stretch">
|
||||
{{ range .Params.members }}
|
||||
<div class="relative h-full flex flex-col pt-14">
|
||||
<figure class="absolute -top-4 lg:top-0 left-6 z-10">
|
||||
{{ partial "image" (dict "Src" .image "Class" "rounded-full" "Alt" .name) }}
|
||||
</figure>
|
||||
<div class="bg-tertiary p-6 pt-16 flex-1">
|
||||
<h3 class="h6 font-normal text-primary">{{ .name }}</h3>
|
||||
<p class="text-text-dark font-extralight mt-2 mb-4">{{ .designation }}</p>
|
||||
<ul class="social-icons">
|
||||
{{ range .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>
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
38
layouts/about.html
Normal file
38
layouts/about.html
Normal file
@@ -0,0 +1,38 @@
|
||||
{{ define "main" }}
|
||||
<section class="section bg-tertiary">
|
||||
<div class="container">
|
||||
{{ if .Params.image }}
|
||||
{{ partial "image" (dict "Src" .Params.image "Context" .Page "Alt" .Title "Class" "mx-auto mb-6" ) }}
|
||||
{{ end }}
|
||||
|
||||
|
||||
<div class="flex max-lg:flex-col items-center gap-10">
|
||||
<h2
|
||||
class="h5 mb-6 p-10 bg-primary/60 text-text-light tracking-widest leading-15">
|
||||
{{ .Title }}
|
||||
</h2>
|
||||
<p class="h5 font-extralight">{{ .Description }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section pt-0! bg-tertiary">
|
||||
<div class="container">
|
||||
<div class="flex max-lg:flex-col gap-4">
|
||||
{{ with .Params.expertise_title }}
|
||||
<h2 class="lg:w-[45%] uppercase font-extralight">{{ . }}</h2>
|
||||
{{ end }}
|
||||
<div class="lg:w-[65%]">
|
||||
<ul class="space-y-6">
|
||||
{{ range .Params.expertise_sectors }}
|
||||
<li class="h5 text-text-dark font-extralight">{{ . }}</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ partial "clients" . }}
|
||||
{{ partial "team" . }}
|
||||
{{ end }}
|
||||
@@ -1,51 +0,0 @@
|
||||
{{ define "main" }}
|
||||
|
||||
<section class="site-about-header">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="site-about-wrapper">
|
||||
<div class="site-about-company">
|
||||
<h1>
|
||||
{{ .Params.heading }}
|
||||
</h1>
|
||||
</div>
|
||||
<div class="site-about-description">
|
||||
<p>
|
||||
{{ .Description }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="site-expertise">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
{{ with .Params.expertise_title }}
|
||||
<div class="col-md-5">
|
||||
<div class="section-title">
|
||||
<h2>{{ . }}</h2>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
<div class="col-md-6">
|
||||
<ul class="site-expertise-list">
|
||||
{{ range .Params.expertise_sectors }}
|
||||
<li>{{ . }}</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ partial "clients.html" . }}
|
||||
|
||||
{{ partial "team.html" . }}
|
||||
|
||||
{{ partial "call-to-action.html" . }}
|
||||
|
||||
{{ end }}
|
||||
48
layouts/baseof.html
Executable file
48
layouts/baseof.html
Executable file
@@ -0,0 +1,48 @@
|
||||
<!doctype html>
|
||||
<html
|
||||
itemscope
|
||||
class="{{- if not site.Params.theme_switcher -}}
|
||||
{{- site.Params.theme_default -}}
|
||||
{{- end -}}"
|
||||
lang="{{ site.Language.Locale | 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 class="flex flex-col min-h-screen">
|
||||
<!-- cache partial only in production -->
|
||||
{{ if hugo.IsProduction }}
|
||||
{{ partialCached "preloader.html" . }}
|
||||
{{ partialCached "gtm-noscript.html" . }}
|
||||
{{ else }}
|
||||
{{ partial "preloader.html" . }}
|
||||
|
||||
|
||||
<!-- tailwind size indicator -->
|
||||
{{ partial "components/tw-size-indicator.html" . }}
|
||||
{{ end }}
|
||||
|
||||
|
||||
<!-- header (don't cache it) -->
|
||||
{{ partial "essentials/header.html" . }}
|
||||
|
||||
|
||||
<main class="grow">
|
||||
{{ block "main" . }}{{ end }}
|
||||
</main>
|
||||
|
||||
<!-- footer -->
|
||||
{{ partial "essentials/footer.html" . }}
|
||||
|
||||
|
||||
<!-- script (always cache it) -->
|
||||
{{/* {{ partialCached "essentials/script.html" . }} */}}
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,49 +1,24 @@
|
||||
{{ define "main" }}
|
||||
<section class="section pt-46">
|
||||
<div class="container">
|
||||
<h2 class="h1 mb-4 text-center uppercase">
|
||||
{{ .Title | markdownify }}
|
||||
</h2>
|
||||
<p class="text-balance text-center">
|
||||
{{ .Description | markdownify }}
|
||||
</p>
|
||||
<div class="grid gap-8 md:grid-cols-2 mt-14">
|
||||
{{ $paginator:= .Paginate .RegularPages }}
|
||||
{{ range $paginator.Pages }}
|
||||
{{ partial "components/blog-card" . }}
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
<section class="site-blog-header">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-8 text-center">
|
||||
<h1>{{ .Title }}</h1>
|
||||
<p>
|
||||
{{ .Params.description }}
|
||||
</p>
|
||||
<div class="mt-14 flex justify-center">
|
||||
{{ partial "components/pagination.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="site-blog">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
{{ range (.Paginator 4).Pages }}
|
||||
<div class="col-lg-6">
|
||||
<article class="site-blog-post">
|
||||
{{ with .Params.image }}
|
||||
<div class="site-blog-post-thumb">
|
||||
<img src="{{ . | absURL }}" alt="post-thumb">
|
||||
</div>
|
||||
{{ end }}
|
||||
<div class="site-blog-post-content">
|
||||
<span>{{ .PublishDate.Format "January 2, 2006" }}</span>
|
||||
<h3><a href="{{ .Permalink }}">{{ .Title }}</a></h3>
|
||||
<p>
|
||||
{{ .Summary }} ...
|
||||
</p>
|
||||
<a href="{{ .Permalink }}" class="read-more">{{ .Site.Params.blog.read_more }}</a>
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
{{ end }}
|
||||
<div class="col-12">
|
||||
<div class="site-blog-pagination">
|
||||
{{ template "_internal/pagination.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ partial "call-to-action.html" . }}
|
||||
</section>
|
||||
|
||||
{{ partial "call-to-action" . }}
|
||||
{{ end }}
|
||||
|
||||
@@ -1,20 +1,60 @@
|
||||
{{ define "main" }}
|
||||
<section class="section pt-46">
|
||||
<div class="container">
|
||||
<div class="row justify-center">
|
||||
<article class="lg:col-10">
|
||||
<ul class="mb-4">
|
||||
<li class="mr-4 inline-block">
|
||||
<p>
|
||||
<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-clock mr-2"></i>
|
||||
{{ time.Format ":date_long" .PublishDate }}
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<section class="site-blog details">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-8">
|
||||
<article class="site-blog-details">
|
||||
<p><span>{{ .PublishDate.Format "January 2, 2006" }}</span> by <span>{{ .Params.author }}</span></p>
|
||||
<h2 class="blog-title">{{ .Title }}</h2>
|
||||
<img class="feature-image" src="{{ .Params.feature_image | absURL }}" alt="blog-feature-image">
|
||||
{{ .Content }}
|
||||
{{ $image:= .Params.image }}
|
||||
{{ if $image }}
|
||||
<div class="mb-10">
|
||||
{{ partial "image" (dict "Src" $image "Context" .Page "Alt" .Title "Class" "w-full") }}
|
||||
</div>
|
||||
{{ end }}
|
||||
<h1 class="h2 mb-4">
|
||||
{{ .Title }}
|
||||
</h1>
|
||||
<div class="content mb-10">
|
||||
{{ partial "toc.html" (dict "Class" "blog" "Collapsed" false "TableOfContents" .TableOfContents ) }}
|
||||
{{ .Content }}
|
||||
</div>
|
||||
<div class="row justify-end">
|
||||
<div class="lg:col-6 flex items-center lg:justify-end">
|
||||
<h5>{{ T "share" | default "Share" }} :</h5>
|
||||
{{ partial "social-share" (dict "Context" . "Class" "share-icons" "Title" .Title "Whatsapp" false "Telegram" false "Linkedin" false "Pinterest" false "Tumblr" false "Vk" false "Reddit" false) }}
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
<!-- Related posts -->
|
||||
{{ $related := .Site.RegularPages.Related . | first 10 }}
|
||||
{{ $related = $related | shuffle | first 2 }}
|
||||
{{ with $related }}
|
||||
<div class="section pb-0">
|
||||
<h2 class="h3 mb-12">
|
||||
{{ T "related_posts" | default "Related Posts" }}
|
||||
</h2>
|
||||
<div class="row">
|
||||
{{ range . }}
|
||||
<div class="md:col-6 mb-14">
|
||||
{{ partial "components/blog-card" . }}
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ partial "call-to-action.html" . }}
|
||||
|
||||
{{ end }}
|
||||
</section>
|
||||
{{ end }}
|
||||
|
||||
164
layouts/contact.html
Executable file
164
layouts/contact.html
Executable file
@@ -0,0 +1,164 @@
|
||||
{{ define "main" }}
|
||||
<section class="section pt-46 bg-tertiary">
|
||||
<div class="container">
|
||||
<div class="flex justify-between lg:gap-14">
|
||||
<h2 class="h1 lg:w-[40%]">
|
||||
{{ .Title | markdownify }}
|
||||
</h2>
|
||||
|
||||
<form
|
||||
id="contact-form"
|
||||
class="lg:w-[50%] mt-4"
|
||||
action="{{ site.Params.contact_form_action }}"
|
||||
method="POST">
|
||||
<h3 class="h5 font-extralight tracking-widest mb-8">
|
||||
{{ .Params.form_heading | markdownify }}
|
||||
</h3>
|
||||
|
||||
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6">
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
name="first-name"
|
||||
id="first-name"
|
||||
placeholder="{{ T "first-name" | default "First Name" }}"
|
||||
required />
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
name="last-name"
|
||||
id="last-name"
|
||||
placeholder="{{ T "last-name" | default "Last Name" }}"
|
||||
required />
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6">
|
||||
<input
|
||||
type="email"
|
||||
class="form-control"
|
||||
name="email"
|
||||
id="email"
|
||||
placeholder="{{ T "email" | default "Email" }}"
|
||||
required />
|
||||
<div class="select-wrapper">
|
||||
<select
|
||||
class="form-control w-full"
|
||||
id="projectType"
|
||||
name="project-type"
|
||||
required>
|
||||
<option value="" selected disabled hidden>
|
||||
{{ T "project-type" | default "Select Project Type" }}
|
||||
</option>
|
||||
<option value="web-design">
|
||||
{{ T "web-design" | default "Web Design" }}
|
||||
</option>
|
||||
<option value="web-development">
|
||||
{{ T "web-development" | default "Web Development" }}
|
||||
</option>
|
||||
<option value="mobile-app">
|
||||
{{ T "mobile-app" | default "Mobile App" }}
|
||||
</option>
|
||||
<option value="branding">
|
||||
{{ T "branding" | default "Branding" }}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-6">
|
||||
<textarea
|
||||
class="form-control w-full resize-none"
|
||||
id="aboutProject"
|
||||
name="about-project"
|
||||
rows="6"
|
||||
placeholder="{{ T "about-project" | default "Tell us about your project..." }}"
|
||||
required></textarea>
|
||||
</div>
|
||||
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-primary"
|
||||
id="contact-form-button">
|
||||
<span class="btn-area">
|
||||
<span data-text=" {{ T "submit" | default "Send Message" }}">
|
||||
{{ T "submit" | default "Send Message" }}
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
<p id="contact-form-status" class="mt-4"></p>
|
||||
</form>
|
||||
</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="{{ T "email" | default "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 }}
|
||||
@@ -1,57 +0,0 @@
|
||||
{{ define "main" }}
|
||||
<section class="site-contact">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-5">
|
||||
<h1 class="site-contact-title">
|
||||
{{ .Params.heading | safeHTML }}
|
||||
</h1>
|
||||
</div>
|
||||
<div class="col-lg-6 ml-auto">
|
||||
<div class="site-contact-form">
|
||||
<h4>{{ .Params.form_heading }}</h4>
|
||||
<form id="contact-form" action="{{ .Site.Params.fabform }}" method="post">
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<input type="text" class="form-control" name="first-name" id="first-name" placeholder="{{ .Site.Params.contactForm.placeholder_first_name }}" required>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<input type="text" class="form-control" name="last-name" id="last-name" placeholder="{{ .Site.Params.contactForm.placeholder_last_name }}" required>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<input type="email" class="form-control" name="email" id="email" placeholder="{{ .Site.Params.contactForm.placeholder_email }}" required>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="select-wrapper">
|
||||
<select class="form-control" id="projectType" name="project-type" required>
|
||||
<option value="" selected disabled hidden>{{ .Site.Params.contactForm.placeholder_project_type }}</option>
|
||||
{{ range .Site.Params.contactForm.projectType }}
|
||||
<option value="{{ .value }}">{{ .title }}</option>
|
||||
{{ end }}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<textarea class="form-control" id="aboutProject" name="about-project" rows="6" placeholder="{{ .Site.Params.contactForm.placeholder_about_the_project }}"></textarea>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<button formtarget="_blank" type="submit" class="btn btn-primary" id="contact-form-button">
|
||||
<span class="btn-area">
|
||||
<span data-text="{{ .Site.Params.contactForm.send_message }}">
|
||||
{{ .Site.Params.contactForm.send_message }}
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<p id="contact-form-status"></p>
|
||||
</div>
|
||||
</form>
|
||||
<p class="contact-form-generator">
|
||||
<a href="https://fabform.io/" target="_blank">form backend service</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
218
layouts/home.html
Executable file
218
layouts/home.html
Executable file
@@ -0,0 +1,218 @@
|
||||
{{ define "main" }}
|
||||
<!-- Banner -->
|
||||
{{ with .Params.banner }}
|
||||
{{ $bannerImage := resources.Get (strings.TrimPrefix "/" .image) }}
|
||||
<section
|
||||
class="min-h-screen flex items-center bg-center bg-no-repeat bg-cover"
|
||||
{{ with $bannerImage }}
|
||||
style="background-image: url('{{ .RelPermalink }}');"
|
||||
{{ end }}>
|
||||
<div class="container">
|
||||
<div class="row justify-center">
|
||||
<div class="lg:col-10 md:col-9 mb-8 text-center">
|
||||
<p class="mb-2 text-text-dark font-extralight">
|
||||
{{ .content | markdownify }}
|
||||
</p>
|
||||
<h1 class="text-h3 lg:text-h1">
|
||||
{{ .title | markdownify }}
|
||||
</h1>
|
||||
|
||||
<div class="mt-18! flex gap-5 flex-wrap justify-center">
|
||||
{{ with .button_secondary }}
|
||||
{{ if .enable }}
|
||||
<a
|
||||
class="btn btn-secondary"
|
||||
href="{{ .link | absURL }}"
|
||||
{{ if strings.HasPrefix .link `http` }}
|
||||
target="_blank" rel="noopener"
|
||||
{{ end }}>
|
||||
<span class="btn-area">
|
||||
<span data-text="{{ .label }}">
|
||||
{{ .label }}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ with .button_primary }}
|
||||
{{ if .enable }}
|
||||
<a
|
||||
class="btn btn-primary"
|
||||
href="{{ .link | absURL }}"
|
||||
{{ if strings.HasPrefix .link `http` }}
|
||||
target="_blank" rel="noopener"
|
||||
{{ end }}>
|
||||
<span class="btn-area">
|
||||
<span data-text="{{ .label }}">
|
||||
{{ .label }}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button
|
||||
class="absolute bottom-15 left-1/2 -translate-x-1/2 js-scroll-to-next cursor-pointer bg-none border-none p-0"
|
||||
type="button"
|
||||
aria-label="Scroll to next section">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="26.07"
|
||||
height="32.634"
|
||||
viewBox="0 0 26.07 32.634">
|
||||
<g id="download" transform="translate(-3.282)">
|
||||
<path
|
||||
id="Path_1"
|
||||
data-name="Path 1"
|
||||
d="M16.317,32.634a.5.5,0,0,1-.5-.5V.5a.5.5,0,0,1,1,0V32.134A.5.5,0,0,1,16.317,32.634Z"
|
||||
fill="#00113e" />
|
||||
<path
|
||||
id="Path_2"
|
||||
data-name="Path 2"
|
||||
d="M16.315,32.634h0a.5.5,0,0,1-.354-.146L3.428,19.951a.5.5,0,0,1,.707-.707L16.314,31.427,28.5,19.244a.5.5,0,1,1,.707.707L16.668,32.487A.5.5,0,0,1,16.315,32.634Z"
|
||||
fill="#00113e" />
|
||||
</g>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
{{/* Smooth scroll to company stats section with header offset */}}
|
||||
<script>
|
||||
(function(){
|
||||
function onClick(e){
|
||||
e.preventDefault();
|
||||
var statsSection = document.querySelector('.bg-secondary\\/70');
|
||||
if(statsSection) {
|
||||
var header = document.querySelector('nav, [role="banner"], header');
|
||||
var headerHeight = header ? header.offsetHeight : 0;
|
||||
var targetPosition = statsSection.getBoundingClientRect().top + window.scrollY - headerHeight;
|
||||
window.scrollTo({ top: targetPosition, behavior: 'smooth' });
|
||||
}
|
||||
}
|
||||
document.addEventListener('DOMContentLoaded', function(){
|
||||
var btn = document.querySelector('.js-scroll-to-next');
|
||||
if(btn) btn.addEventListener('click', onClick, {passive:false});
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</section>
|
||||
{{ end }}
|
||||
<!-- /Banner -->
|
||||
|
||||
<!-- Company Stats -->
|
||||
{{ with .Params.company_stats }}
|
||||
{{ if .enable }}
|
||||
<section class="section-sm bg-secondary/70">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<h2 class="mb-10 text-text-light font-extralight tracking-widest">
|
||||
{{ .title }}
|
||||
</h2>
|
||||
<div class="row g-4">
|
||||
{{ range .stats }}
|
||||
<div class="md:col-3 col-6">
|
||||
<div class="">
|
||||
<h6 class="text-text-light font-extralight text-lg">
|
||||
{{ .name }}
|
||||
</h6>
|
||||
<p class="h1 text-text-light font-bold -mt-2!">
|
||||
{{ .count }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
<!-- /Company Stats -->
|
||||
|
||||
<!-- Recent Works -->
|
||||
{{ with .Params.recent_works }}
|
||||
{{ if .enable }}
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<div class="row items-center justify-between">
|
||||
<h2 class="mb-4 font-extralight tracking-widest">
|
||||
{{ .title | markdownify }}
|
||||
</h2>
|
||||
<p class="h6">
|
||||
{{ .description | markdownify }}
|
||||
</p>
|
||||
|
||||
<div class="mt-14 grid gap-8 md:grid-cols-2">
|
||||
{{ range where (where site.RegularPages "Type" "portfolio") "Params.featured" true }}
|
||||
{{ partial "components/portfolio-card" . }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
<!-- /Features -->
|
||||
|
||||
<!-- Testimonials -->
|
||||
{{ with site.GetPage "sections/testimonial" }}
|
||||
{{ if .Params.enable }}
|
||||
<section class="section bg-tertiary">
|
||||
<style>
|
||||
@media (min-width: 1024px) {
|
||||
.testimonials-grid:hover .testimonial-card {
|
||||
opacity: 0.4;
|
||||
}
|
||||
|
||||
.testimonials-grid:hover .testimonial-card:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="mb-12">
|
||||
<h2 class="mb-4 font-extralight">
|
||||
{{ .Title | markdownify }}
|
||||
</h2>
|
||||
<p class="h6">
|
||||
{{ .Params.description | markdownify }}
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<div class="testimonials-grid grid gap-8 md:grid-cols-2 lg:grid-cols-3">
|
||||
{{ range .Params.testimonials }}
|
||||
<article class="testimonial-card bg-body px-7 py-10 transition-opacity duration-300">
|
||||
<div class="mb-6 flex items-center">
|
||||
{{ partial "image" (dict "Src" .avatar "Size" "80x80" "Class" "" "Alt" .name) }}
|
||||
<div class="ml-4">
|
||||
<h3 class="h6 font-primary font-semibold">
|
||||
{{ .name }}
|
||||
</h3>
|
||||
<p>
|
||||
{{ .designation | markdownify }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<blockquote>
|
||||
{{ .content | markdownify }}
|
||||
</blockquote>
|
||||
</article>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
<!-- /Testimonials -->
|
||||
|
||||
<!-- Call to action -->
|
||||
{{ partial "call-to-action" . }}
|
||||
<!-- /Call to action -->
|
||||
{{ end }}
|
||||
@@ -1,13 +0,0 @@
|
||||
{{ define "main" }}
|
||||
|
||||
{{ partial "hero.html" . }}
|
||||
|
||||
{{ partial "counter.html" . }}
|
||||
|
||||
{{ partial "portfolio.html" . }}
|
||||
|
||||
{{ partial "testimonial.html" . }}
|
||||
|
||||
{{ partial "call-to-action.html" . }}
|
||||
|
||||
{{ end }}
|
||||
17
layouts/list.html
Executable file
17
layouts/list.html
Executable file
@@ -0,0 +1,17 @@
|
||||
{{ define "main" }}
|
||||
|
||||
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<ul class="text-center">
|
||||
{{ range .RegularPages }}
|
||||
<li class="m-3">
|
||||
<a href="{{ .Permalink }}" class="text-text-dark block text-xl">
|
||||
{{ .Title }}
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
@@ -1,33 +0,0 @@
|
||||
{{ with .Site.Params.call_to_action }}
|
||||
{{ if .enable }}
|
||||
<section class="site-cta" style='background-image: url("{{ .background_image | absURL }}");'>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12 text-center">
|
||||
<h1 class="site-cta-title">{{ .title }}</h1>
|
||||
<ul class="site-cta-buttons">
|
||||
<li>
|
||||
<a href="{{ .primary_button_url | absURL }}" class="btn btn-secondary">
|
||||
<span class="btn-area">
|
||||
<span data-text="{{ .primary_button }}">
|
||||
{{ .primary_button }}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{ .secondary_button_url | absURL }}" class="btn btn-primary">
|
||||
<span class="btn-area">
|
||||
<span data-text="{{ .secondary_button }}">
|
||||
{{ .secondary_button }}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
@@ -1,22 +0,0 @@
|
||||
{{ with .Site.Data.clients }}
|
||||
{{ if .enable }}
|
||||
<section class="site-client">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="section-title">
|
||||
<h2>{{ .title }}</h2>
|
||||
</div>
|
||||
<div class="site-client-wrapper">
|
||||
{{ range .client_logos }}
|
||||
<div class="site-client-item">
|
||||
<img src="{{ . | absURL }}" alt="client-logo">
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
@@ -1,23 +0,0 @@
|
||||
{{ with .Site.Data.counter }}
|
||||
{{ if .enable }}
|
||||
<section class="site-counter" id="counter">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="section-title">
|
||||
<h2 class="text-white">{{ .heading }}</h2>
|
||||
</div>
|
||||
</div>
|
||||
{{ range .counter_item }}
|
||||
<div class="col-lg-3 col-md-6">
|
||||
<div class="site-counter-item">
|
||||
<span class="site-counter-item-title">{{ .title }}</span>
|
||||
<h3 class="site-counter-item-number">{{ .number }}+</h3>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
@@ -1,104 +0,0 @@
|
||||
<footer class="site-footer">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="site-footer-logo"><a href="{{ .Site.BaseURL }}"><img src="{{ .Site.Params.logo_footer | absURL }}" alt="logo-footer"></a></div>
|
||||
</div>
|
||||
{{ with .Site.Params.footer.contactInfo }}
|
||||
<div class="col-lg-3 col-md-6">
|
||||
<div class="site-footer-widget">
|
||||
<h5 class="site-footer-widget-title">{{ .title }}</h5>
|
||||
<p class="site-footer-widget-description">
|
||||
{{ if .address }}
|
||||
{{ .address | safeHTML }}
|
||||
<br>
|
||||
{{ end }}
|
||||
{{ if .phone }}
|
||||
<a href="tel:{{ .phone }}">{{ .phone }}</a>
|
||||
<br>
|
||||
{{ end }}
|
||||
{{ if .email }}
|
||||
<a href="mailto:{{ .email }}">{{ .email }}</a>
|
||||
{{ end }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.footer.sitemap }}
|
||||
<div class="col-lg-2 col-md-6">
|
||||
<div class="site-footer-widget">
|
||||
<h5 class="site-footer-widget-title">{{ .title }}</h5>
|
||||
<ul class="site-footer-widget-links">
|
||||
{{ range .link }}
|
||||
<li><a href="{{ .url | absURL }}">{{ .name }}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.footer.social }}
|
||||
<div class="col-lg-2 col-md-6">
|
||||
<div class="site-footer-widget">
|
||||
<h5 class="site-footer-widget-title">{{ .title }}</h5>
|
||||
<ul class="site-footer-widget-links">
|
||||
{{ range .link }}
|
||||
<li><a href="{{ .url }}">{{ .name }}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.footer.service }}
|
||||
<div class="col-lg-3 col-md-6">
|
||||
<div class="site-footer-widget">
|
||||
<h5 class="site-footer-widget-title">{{ .title }}</h5>
|
||||
<p class="site-footer-widget-description">
|
||||
{{ .description | safeHTML }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
<div class="col-lg-2 col-12">
|
||||
<a href="#top" class="site-footer-widget-top">
|
||||
<img src="{{ "images/to-top.svg" | absURL }}" alt="back-to-top">
|
||||
<p>
|
||||
{{ .Site.Params.footer.back_to_top.description | safeHTML }}
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<div class="site-footer-copyright">
|
||||
<p>© Copyright {{ dateFormat "2006" now }} - All Rights Reserved by <a href="https://staticmania.com/" target="_blank">StaticMania</a> </p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ if .Site.Params.footer.qr_print }}
|
||||
<div class="row d-none d-print-block">
|
||||
<div class="col col-lg-2">
|
||||
{{ $qrcode := resources.Get "js/qrcode.js" | minify }}
|
||||
<script src="{{ $qrcode.Permalink }}"></script>
|
||||
|
||||
<div id="qrcode">
|
||||
<script type="text/javascript">
|
||||
new QRCode(document.getElementById("qrcode"), {
|
||||
text: "{{ .Page.RelPermalink | absURL }}",
|
||||
width: 128,
|
||||
height: 128,
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col col-md-auto">
|
||||
{{ .Page.RelPermalink | absURL }}
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- {{ $formhandler := resources.Get "js/formhandler.js" | minify }}
|
||||
<script src="{{ $formhandler.Permalink }}"></script> -->
|
||||
{{ $vendor := resources.Get "js/vendor.js" | minify }}
|
||||
<script src="{{ $vendor.Permalink }}"></script>
|
||||
{{ $script := resources.Get "js/script.js" | minify }}
|
||||
<script src="{{ $script.Permalink }}"></script>
|
||||
@@ -1,30 +0,0 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>{{ .Title }}</title>
|
||||
|
||||
{{ "<!-- mobile responsive meta -->" | safeHTML }}
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
|
||||
{{ with .Site.Params.author }}
|
||||
<meta name="author" content="{{ . }}">
|
||||
{{ end }}
|
||||
{{ hugo.Generator }}
|
||||
|
||||
{{ "<!-- Bootstrap -->" | safeHTML }}
|
||||
{{ $bootstrap := resources.Get "css/bootstrap.css" | minify }}
|
||||
<link rel="stylesheet" href="{{ $bootstrap.Permalink }}" />
|
||||
{{ "<!-- font-awesome -->" | safeHTML }}
|
||||
<link rel="stylesheet" href="{{ "font-awesome/css/font-awesome.min.css" | absURL }}" />
|
||||
{{ "<!-- Main Stylesheets -->" | safeHTML }}
|
||||
{{ $style := resources.Get "scss/style.scss" | resources.ToCSS | minify }}
|
||||
<link href="{{ $style.Permalink }}" rel="stylesheet" />
|
||||
|
||||
{{ range .Site.Params.custom_stylesheets -}}
|
||||
{{ $style := resources.Get . | resources.ToCSS | minify }}
|
||||
<link href="{{ $style.Permalink }}" rel="stylesheet" />
|
||||
{{- end }}
|
||||
|
||||
<!--Favicon-->
|
||||
<link rel="shortcut icon" href="{{ .Site.Params.favicon_shortcut_icon | absURL }}" type="image/x-icon" />
|
||||
<link rel="icon" href="{{ .Site.Params.favicon_icon | absURL }}" type="image/x-icon" />
|
||||
</head>
|
||||
@@ -1,46 +0,0 @@
|
||||
<nav class="navbar navbar-expand-lg site-navigation">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="{{ .Site.BaseURL }}">
|
||||
<img src="{{ .Site.Params.logo | absURL }}" alt="logo" />
|
||||
</a>
|
||||
<button
|
||||
class="navbar-toggler collapsed"
|
||||
type="button"
|
||||
data-toggle="collapse"
|
||||
data-target="#sitenavbar"
|
||||
>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
|
||||
<div class="collapse navbar-collapse" id="sitenavbar">
|
||||
<ul class="navbar-nav ml-auto main-nav">
|
||||
{{$menu := (.Site.Menus.nav)}}
|
||||
{{$len := (len $menu)}}
|
||||
{{ range $index, $element := $menu }}
|
||||
{{ if eq (add $index 1) $len }}
|
||||
<li class="nav-item">
|
||||
<a
|
||||
class="nav-link btn btn-sm btn-primary btn-sm-rounded"
|
||||
href="{{ .URL | absURL }}"
|
||||
>
|
||||
<span class="btn-area">
|
||||
<span data-text="{{ .Name }}">
|
||||
{{ .Name }}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ else }}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ .URL | absURL }}"
|
||||
>{{ .Name }}</a
|
||||
>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -1,43 +0,0 @@
|
||||
{{ with .Site.Params.banner }}
|
||||
{{ if .enable }}
|
||||
{{ "<!-- Site Hero Start -->" | safeHTML }}
|
||||
<section class="site-hero" style="background-image: url('{{ .background_image }}');">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-10 mx-auto">
|
||||
<div class="site-hero-content text-center">
|
||||
<h6>{{ .tagline }}</h6>
|
||||
<h1>
|
||||
{{ .heading }}
|
||||
</h1>
|
||||
<ul class="site-hero-content-buttons">
|
||||
<li>
|
||||
<a href="{{ .primary_button_url | absURL }}" class="btn btn-secondary">
|
||||
<span class="btn-area">
|
||||
<span data-text="{{ .primary_button }}">
|
||||
{{ .primary_button }}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{ .secondary_button_url | absURL }}" class="btn btn-primary">
|
||||
<span class="btn-area">
|
||||
<span data-text="{{ .secondary_button }}">
|
||||
{{ .secondary_button }}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#counter" class="site-hero-scroll scroll-to">
|
||||
<img src="{{ "images/arrow-down.svg" | absURL }}" alt="arrow-down">
|
||||
</a>
|
||||
</section>
|
||||
{{ "<!-- Site Hero End -->" | safeHTML }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
@@ -1,33 +0,0 @@
|
||||
{{ with .Site.Params.portfolio }}
|
||||
{{ if .enable }}
|
||||
<section class="site-project" id="project">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="section-title">
|
||||
<h2>{{ .title }}</h2>
|
||||
<p>{{ .subtitle }}</p>
|
||||
</div>
|
||||
</div>
|
||||
{{ range first 4 (where $.Site.RegularPages "Type" "portfolio") }}
|
||||
<div class="col-lg-6 col-md-10 mx-auto">
|
||||
<div class="site-project-item">
|
||||
<div class="site-project-item-thumb">
|
||||
<img src="{{ .Params.Image | absURL }}" alt="project-thumb">
|
||||
</div>
|
||||
<div class="site-project-item-content">
|
||||
<span>{{ delimit .Params.category ", " }}</span>
|
||||
<h3>{{ .Title }}</h3>
|
||||
<a href="{{ .Permalink }}" class="read-more">{{ .Site.Params.portfolio.view_project }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
<div class="col-12 text-center text-lg-left">
|
||||
<a href="portfolio" class="site-project-cta">{{ .Site.Params.portfolio.more_works }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
@@ -1,35 +0,0 @@
|
||||
{{ with .Site.Data.team }}
|
||||
{{ if .enable }}
|
||||
<section class="site-team">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="section-title">
|
||||
<h2>
|
||||
{{ .title }}
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
{{ range .members }}
|
||||
<div class="col-lg-4 col-md-6">
|
||||
<div class="site-team-member">
|
||||
<div class="site-team-member-image">
|
||||
<img src="{{ .image | absURL }}" alt="team-member">
|
||||
</div>
|
||||
<div class="site-team-member-content">
|
||||
<h3>{{ .name }}</h3>
|
||||
<p>{{ .designation }}</p>
|
||||
<ul class="site-team-member-social">
|
||||
<li><a href="{{ .medium | absURL }}"><i class="fa fa-medium"></i></a></li>
|
||||
<li><a href="{{ .linkedin | absURL }}"><i class="fa fa-linkedin"></i></a></li>
|
||||
<li><a href="{{ .instagram | absURL }}"><i class="fa fa-instagram"></i></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
@@ -1,38 +0,0 @@
|
||||
{{ with .Site.Data.testimonial }}
|
||||
{{ if .enable }}
|
||||
<section class="site-testimonial">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="section-title">
|
||||
<h2>
|
||||
{{ .title }}
|
||||
</h2>
|
||||
<p>
|
||||
{{ .subtitle }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{{ range .testimonial_item }}
|
||||
<div class="col-lg-4 col-md-6">
|
||||
<div class="site-testimonial-item">
|
||||
<div class="site-testimonial-item-header">
|
||||
<div class="thumb">
|
||||
<img src="{{ .thumb | absURL }}" alt="user-thumb-one">
|
||||
</div>
|
||||
<div class="person">
|
||||
<h5>{{ .name }}</h5>
|
||||
<p>{{ .company_position }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<p class="site-testimonial-item-body">
|
||||
{{ .quote }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
@@ -1,51 +1,76 @@
|
||||
{{ define "main" }}
|
||||
|
||||
<section class="site-project-header">
|
||||
<div class="container">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-lg-8">
|
||||
<div class="site-project-header-content">
|
||||
<h1>
|
||||
<section class="section pt-46 bg-tertiary">
|
||||
<div class="container">
|
||||
<div class="grid items-center gap-8 lg:grid-cols-12 lg:gap-12">
|
||||
<div class="lg:col-span-8">
|
||||
<h2>
|
||||
{{ .Title | safeHTML }}
|
||||
</h1>
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-4">
|
||||
<a href="#project" class="site-project-header-action scroll-to">
|
||||
<span>{{ .Site.Params.portfolio.scroll_down }}</span>
|
||||
<img src="{{ "images/arrow-down.svg" | absURL }}" alt="arrow-down">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="site-project" id="project">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
{{ range (.Paginator 4).Pages }}
|
||||
<div class="col-lg-6 col-md-10 mx-auto">
|
||||
<div class="site-project-item">
|
||||
<div class="site-project-item-thumb">
|
||||
<img src="{{ .Params.Image | absURL }}" alt="project-thumb">
|
||||
</div>
|
||||
<div class="site-project-item-content">
|
||||
<span>{{ delimit .Params.category ", " }}</span>
|
||||
<h3>{{ .Title }}</h3>
|
||||
<a href="{{ .Permalink }}" class="read-more">{{ .Site.Params.portfolio.view_project }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
<div class="col-12">
|
||||
<div class="site-project-pagination">
|
||||
{{ template "_internal/pagination.html" . }}
|
||||
<div class="lg:col-span-4 lg:justify-self-end">
|
||||
<a
|
||||
href="#project"
|
||||
class="js-scroll-to-project flex flex-col items-center gap-3 h4 font-extralight text-text-dark">
|
||||
<span>Scroll Down</span>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="26.07"
|
||||
height="32.634"
|
||||
viewBox="0 0 26.07 32.634">
|
||||
<g id="download" transform="translate(-3.282)">
|
||||
<path
|
||||
id="Path_1"
|
||||
data-name="Path 1"
|
||||
d="M16.317,32.634a.5.5,0,0,1-.5-.5V.5a.5.5,0,0,1,1,0V32.134A.5.5,0,0,1,16.317,32.634Z"
|
||||
fill="currentColor" />
|
||||
<path
|
||||
id="Path_2"
|
||||
data-name="Path 2"
|
||||
d="M16.315,32.634h0a.5.5,0,0,1-.354-.146L3.428,19.951a.5.5,0,0,1,.707-.707L16.314,31.427,28.5,19.244a.5.5,0,1,1,.707.707L16.668,32.487A.5.5,0,0,1,16.315,32.634Z"
|
||||
fill="currentColor" />
|
||||
</g>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
{{ partial "call-to-action.html" . }}
|
||||
<script>
|
||||
(function () {
|
||||
function scrollToProject(event) {
|
||||
event.preventDefault();
|
||||
|
||||
var projectSection = document.getElementById("project");
|
||||
if (!projectSection) return;
|
||||
|
||||
var header = document.getElementById("site-header") || document.querySelector("header");
|
||||
var headerHeight = header ? header.offsetHeight : 0;
|
||||
var targetY = projectSection.getBoundingClientRect().top + window.scrollY - headerHeight;
|
||||
|
||||
window.scrollTo({ top: targetY, behavior: "smooth" });
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
var trigger = document.querySelector(".js-scroll-to-project");
|
||||
if (trigger) trigger.addEventListener("click", scrollToProject, { passive: false });
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
|
||||
<section id="project" class="py-20 lg:py-28">
|
||||
<div class="container">
|
||||
<div class="grid gap-8 md:grid-cols-2">
|
||||
{{ range (.Paginator 4).Pages }}
|
||||
{{ partial "components/portfolio-card" . }}
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
<div class="mt-14 flex justify-center">
|
||||
{{ partial "components/pagination.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ partial "call-to-action.html" . }}
|
||||
{{ end }}
|
||||
|
||||
@@ -1,39 +1,27 @@
|
||||
{{ define "main" }}
|
||||
|
||||
<section class="site-project-single-section">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto">
|
||||
<div class="site-project-single">
|
||||
<h1>
|
||||
<section class="section pt-46">
|
||||
<div class="container">
|
||||
<div class="mx-auto max-w-4xl">
|
||||
<div class="mb-10 space-y-6">
|
||||
<h1 class="font-medium tracking-wider h2">
|
||||
{{ .Title }}
|
||||
</h1>
|
||||
<div class="site-project-single-description">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
<div class="site-project-single-image">
|
||||
{{ range .Params.project_images }}
|
||||
<img src="{{ . | absURL }}" alt="project image">
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ if .NextInSection }}
|
||||
<div class="site-project-single-action">
|
||||
<a href="{{.NextInSection.Permalink}}">
|
||||
<span class="link-area">
|
||||
<span data-text="Next Project">
|
||||
Next Project
|
||||
</span>
|
||||
</span>
|
||||
<img src="{{ "images/to-top.svg" | absURL }}" alt="next project">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{{ with .Params.image }}
|
||||
<img
|
||||
src="{{ . | absURL }}"
|
||||
alt="{{ $.Title }}"
|
||||
class="w-full object-cover shadow-lg" />
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
<div class="content space-y-8">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
{{ partial "call-to-action.html" . }}
|
||||
{{ partial "call-to-action.html" . }}
|
||||
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
15
layouts/single.html
Executable file
15
layouts/single.html
Executable file
@@ -0,0 +1,15 @@
|
||||
{{ define "main" }}
|
||||
|
||||
|
||||
<section class="section pt-46">
|
||||
<div class="container">
|
||||
<div class="row justify-center">
|
||||
<div class="lg:col-10">
|
||||
<div class="content">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
19
layouts/term.html
Executable file
19
layouts/term.html
Executable file
@@ -0,0 +1,19 @@
|
||||
{{ define "main" }}
|
||||
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<div class="row gx-5">
|
||||
<!-- posts for this term -->
|
||||
<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 }}
|
||||
Reference in New Issue
Block a user