aboutsummaryrefslogtreecommitdiff
path: root/themes/docsy/layouts/partials
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2019-10-06 21:10:46 +0200
committerDimitri Staessens <dimitri@ouroboros.rocks>2019-10-06 21:10:46 +0200
commit568553394d0a8b34668a75c9839a0f1f426469b2 (patch)
tree175c08844f05611b059ba6900fb6519dbbc735d2 /themes/docsy/layouts/partials
parentd5d6f70371958eec0679831abd283498ff2731e5 (diff)
downloadwebsite-568553394d0a8b34668a75c9839a0f1f426469b2.tar.gz
website-568553394d0a8b34668a75c9839a0f1f426469b2.zip
theme: Switch to docsy theme
Diffstat (limited to 'themes/docsy/layouts/partials')
-rw-r--r--themes/docsy/layouts/partials/breadcrumb.html18
-rw-r--r--themes/docsy/layouts/partials/community_links.html29
-rw-r--r--themes/docsy/layouts/partials/disqus-comment.html23
-rw-r--r--themes/docsy/layouts/partials/favicons.html12
-rw-r--r--themes/docsy/layouts/partials/featured-image.html14
-rw-r--r--themes/docsy/layouts/partials/feedback.html57
-rw-r--r--themes/docsy/layouts/partials/footer.html39
-rw-r--r--themes/docsy/layouts/partials/head-css.html11
-rw-r--r--themes/docsy/layouts/partials/head.html26
-rw-r--r--themes/docsy/layouts/partials/hooks/body-end.html0
-rw-r--r--themes/docsy/layouts/partials/hooks/head-end.html0
-rw-r--r--themes/docsy/layouts/partials/navbar-lang-selector.html10
-rw-r--r--themes/docsy/layouts/partials/navbar-version-selector.html8
-rw-r--r--themes/docsy/layouts/partials/navbar.html33
-rw-r--r--themes/docsy/layouts/partials/page-meta-lastmod.html1
-rw-r--r--themes/docsy/layouts/partials/page-meta-links.html24
-rw-r--r--themes/docsy/layouts/partials/pager.html7
-rw-r--r--themes/docsy/layouts/partials/scripts.html14
-rw-r--r--themes/docsy/layouts/partials/search-input.html3
-rw-r--r--themes/docsy/layouts/partials/section-index.html29
-rw-r--r--themes/docsy/layouts/partials/sidebar-tree.html47
-rw-r--r--themes/docsy/layouts/partials/sidebar.html14
-rw-r--r--themes/docsy/layouts/partials/toc.html8
23 files changed, 427 insertions, 0 deletions
diff --git a/themes/docsy/layouts/partials/breadcrumb.html b/themes/docsy/layouts/partials/breadcrumb.html
new file mode 100644
index 0000000..0403f6a
--- /dev/null
+++ b/themes/docsy/layouts/partials/breadcrumb.html
@@ -0,0 +1,18 @@
+<nav aria-label="breadcrumb" class="d-none d-md-block d-print-none">
+ <ol class="breadcrumb spb-1">
+ {{ template "breadcrumbnav" (dict "p1" . "p2" .) }}
+ </ol>
+</nav >
+{{ define "breadcrumbnav" }}
+{{ if .p1.Parent }}
+{{ if not .p1.Parent.IsHome }}
+{{ template "breadcrumbnav" (dict "p1" .p1.Parent "p2" .p2 ) }}
+{{ end }}
+{{ else if not .p1.IsHome }}
+{{ template "breadcrumbnav" (dict "p1" .p1.Site.Home "p2" .p2 ) }}
+{{ end }}
+{{ $isActive := eq .p1 .p2 }}
+<li class="breadcrumb-item{{ if $isActive }} active{{ end }}" {{ if $isActive }}aria-current="page"{{ end }}>
+ <a href="{{ .p1.Permalink }}">{{ .p1.LinkTitle }}</a>
+</li>
+{{ end }} \ No newline at end of file
diff --git a/themes/docsy/layouts/partials/community_links.html b/themes/docsy/layouts/partials/community_links.html
new file mode 100644
index 0000000..48d6458
--- /dev/null
+++ b/themes/docsy/layouts/partials/community_links.html
@@ -0,0 +1,29 @@
+{{ $links := .Site.Params.links }}
+
+<section class="row td-box td-box--4 td-box--gradient td-box--height-auto linkbox">
+<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
+<h2>Learn and Connect</h2>
+<p>Using or want to use {{ .Site.Title }}? Find out more here:
+{{ with index $links "user"}}
+{{ template "community-links-list" . }}
+{{ end }}
+</div>
+<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
+<h2>Develop and Contribute</h2>
+<p>If you want to get more involved by contributing to {{ .Site.Title }}, join us here:
+{{ with index $links "developer"}}
+{{ template "community-links-list" . }}
+{{ end }}
+<p>You can find out how to contribute to these docs in our <a href="/docs/contribution-guidelines/">Contribution Guidelines</a>.
+</div>
+</section>
+
+{{ define "community-links-list" }}
+<ul>
+ {{ range . }}
+ <li title="{{ .name }}">
+ <a target="_blank" href="{{ .url }}"><i class="{{ .icon }}"></i> {{ .name }}:</a> {{ .desc }}
+ </li>
+ {{ end }}
+</ul>
+{{ end }}
diff --git a/themes/docsy/layouts/partials/disqus-comment.html b/themes/docsy/layouts/partials/disqus-comment.html
new file mode 100644
index 0000000..c3ae3f9
--- /dev/null
+++ b/themes/docsy/layouts/partials/disqus-comment.html
@@ -0,0 +1,23 @@
+<div class="page-blank">
+
+<div id="disqus_thread"></div>
+<script>
+
+/**
+* RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS.
+* LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables*/
+/*
+var disqus_config = function () {
+this.page.url = PAGE_URL; // Replace PAGE_URL with your page's canonical URL variable
+this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
+};
+*/
+(function() { // DON'T EDIT BELOW THIS LINE
+var d = document, s = d.createElement('script');
+s.src = 'https://' + {{ .Site.DisqusShortname }} + '.disqus.com/embed.js';
+s.setAttribute('data-timestamp', +new Date());
+(d.head || d.body).appendChild(s);
+})();
+</script>
+<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
+</div>
diff --git a/themes/docsy/layouts/partials/favicons.html b/themes/docsy/layouts/partials/favicons.html
new file mode 100644
index 0000000..43e5c90
--- /dev/null
+++ b/themes/docsy/layouts/partials/favicons.html
@@ -0,0 +1,12 @@
+
+<!-- Favicons as generated by http://cthedot.de/icongen -->
+<link rel="shortcut icon" href="/favicons/favicon.ico" >
+<link rel="apple-touch-icon" href="{{ "favicons/apple-touch-icon-180x180.png" | relURL }}" sizes="180x180">
+<link rel="icon" type="image/png" href="{{ "favicons/favicon-16x16.png" | relURL }}" sizes="16x16">
+<link rel="icon" type="image/png" href="{{ "favicons/favicon-32x32.png" | relURL }}" sizes="32x32">
+<link rel="icon" type="image/png" href="{{ "favicons/android-36x36.png" | relURL }}" sizes="36x36">
+<link rel="icon" type="image/png" href="{{ "favicons/android-48x48.png" | relURL }}" sizes="48x48">
+<link rel="icon" type="image/png" href="{{ "favicons/android-72x72.png" | relURL }}" sizes="72x72">
+<link rel="icon" type="image/png" href="{{ "favicons/android-96x196.png" | relURL }}" sizes="96x196">
+<link rel="icon" type="image/png" href="{{ "favicons/android-144x144.png" | relURL }}" sizes="144x144">
+<link rel="icon" type="image/png" href="{{ "favicons/android-192x192.png" | relURL }}"sizes="192x192">
diff --git a/themes/docsy/layouts/partials/featured-image.html b/themes/docsy/layouts/partials/featured-image.html
new file mode 100644
index 0000000..5756999
--- /dev/null
+++ b/themes/docsy/layouts/partials/featured-image.html
@@ -0,0 +1,14 @@
+{{ $w := .w | default 480 }}
+{{ $h := .h | default 180 }}
+{{ $p := .p }}
+{{ $class := .class | default "ml-3" }}
+{{ $image := ($p.Resources.ByType "image").GetMatch "**featured*" }}
+{{ with $image }}
+{{ $image := .Fill (printf "%dx%d" $w $h ) }}
+<figure class="{{ $class }}" style="width: {{ $image.Width }}px">
+<img src="{{ $image.RelPermalink }}" alt="Featured Image for {{ $p.Title }}" width="{{ $image.Width }}" height="{{ $image.Height }}">
+{{ with $image.Params.byline }}
+ <figcaption class="mt-2 mt-md-0"><small class="text-muted">{{ . | html }}</small></figcaption>
+{{ end }}
+</figure>
+{{ end }} \ No newline at end of file
diff --git a/themes/docsy/layouts/partials/feedback.html b/themes/docsy/layouts/partials/feedback.html
new file mode 100644
index 0000000..0978321
--- /dev/null
+++ b/themes/docsy/layouts/partials/feedback.html
@@ -0,0 +1,57 @@
+<style>
+ .feedback--answer {
+ display: inline-block;
+ }
+ .feedback--answer-no {
+ margin-left: 1em;
+ }
+ .feedback--response {
+ display: none;
+ margin-top: 1em;
+ }
+ .feedback--response__visible {
+ display: block;
+ }
+</style>
+<h2 class="feedback--title">Feedback</h2>
+<p class="feedback--question">Was this page helpful?</p>
+<button class="feedback--answer feedback--answer-yes">Yes</button>
+<button class="feedback--answer feedback--answer-no">No</button>
+<p class="feedback--response feedback--response-yes">
+ {{ .yes | safeHTML }}
+</p>
+<p class="feedback--response feedback--response-no">
+ {{ .no | safeHTML }}
+</p>
+<script>
+ const yesButton = document.querySelector('.feedback--answer-yes');
+ const noButton = document.querySelector('.feedback--answer-no');
+ const yesResponse = document.querySelector('.feedback--response-yes');
+ const noResponse = document.querySelector('.feedback--response-no');
+ const disableButtons = () => {
+ yesButton.disabled = true;
+ noButton.disabled = true;
+ };
+ const sendFeedback = (value) => {
+ if (typeof ga !== 'function') return;
+ const args = {
+ command: 'send',
+ hitType: 'event',
+ category: 'Helpful',
+ action: 'click',
+ label: window.location.pathname,
+ value: value
+ };
+ ga(args.command, args.hitType, args.category, args.action, args.label, args.value);
+ };
+ yesButton.addEventListener('click', () => {
+ yesResponse.classList.add('feedback--response__visible');
+ disableButtons();
+ sendFeedback(1);
+ });
+ noButton.addEventListener('click', () => {
+ noResponse.classList.add('feedback--response__visible');
+ disableButtons();
+ sendFeedback(0);
+ });
+</script>
diff --git a/themes/docsy/layouts/partials/footer.html b/themes/docsy/layouts/partials/footer.html
new file mode 100644
index 0000000..dfb1f64
--- /dev/null
+++ b/themes/docsy/layouts/partials/footer.html
@@ -0,0 +1,39 @@
+{{ $links := .Site.Params.links }}
+<footer class="bg-dark py-5 row d-print-none">
+ <div class="container-fluid mx-sm-5">
+ <div class="row">
+ <div class="col-6 col-sm-4 text-xs-center order-sm-2">
+ {{ with $links }}
+ {{ with index . "user"}}
+ {{ template "footer-links-block" . }}
+ {{ end }}
+ {{ end }}
+ </div>
+ <div class="col-6 col-sm-4 text-right text-xs-center order-sm-3">
+ {{ with $links }}
+ {{ with index . "developer"}}
+ {{ template "footer-links-block" . }}
+ {{ end }}
+ {{ end }}
+ </div>
+ <div class="col-12 col-sm-4 text-center py-2 order-sm-2">
+ {{ with .Site.Params.copyright }}<small class="text-white">&copy; {{ now.Year}} {{ .}} {{ T "footer_all_rights_reserved" }}</small>{{ end }}
+ {{ with .Site.Params.privacy_policy }}<small class="ml-1"><a href="{{ . }}" target="_blank">{{ T "footer_privacy_policy" }}</a></small>{{ end }}
+ {{ if not .Site.Params.ui.footer_about_disable }}
+ {{ with .Site.GetPage "about" }}<p class="mt-2"><a href="{{ .RelPermalink }}">{{ .Title }}</a></p>{{ end }}
+ {{ end }}
+ </div>
+ </div>
+ </div>
+</footer>
+{{ define "footer-links-block" }}
+<ul class="list-inline mb-0">
+ {{ range . }}
+ <li class="list-inline-item mx-2 h3" data-toggle="tooltip" data-placement="top" title="{{ .name }}" aria-label="{{ .name }}">
+ <a class="text-white" target="_blank" href="{{ .url }}">
+ <i class="{{ .icon }}"></i>
+ </a>
+ </li>
+ {{ end }}
+</ul>
+{{ end }}
diff --git a/themes/docsy/layouts/partials/head-css.html b/themes/docsy/layouts/partials/head-css.html
new file mode 100644
index 0000000..603da38
--- /dev/null
+++ b/themes/docsy/layouts/partials/head-css.html
@@ -0,0 +1,11 @@
+
+{{ $scssMain := "scss/main.scss"}}
+{{ if .Site.IsServer }}
+{{/* Note the missing postCSS. This makes it snappier to develop in Chrome, but makes it look sub-optimal in other browsers. */}}
+{{ $css := resources.Get $scssMain | toCSS (dict "enableSourceMap" true) }}
+<link href="{{ $css.RelPermalink }}" rel="stylesheet">
+{{ else }}
+{{ $css := resources.Get $scssMain | toCSS (dict "enableSourceMap" false) | postCSS | minify | fingerprint }}
+<link rel="preload" href="{{ $css.RelPermalink }}" as="style">
+<link href="{{ $css.RelPermalink }}" rel="stylesheet" integrity="{{ $css.Data.integrity }}">
+{{ end }} \ No newline at end of file
diff --git a/themes/docsy/layouts/partials/head.html b/themes/docsy/layouts/partials/head.html
new file mode 100644
index 0000000..b4b707f
--- /dev/null
+++ b/themes/docsy/layouts/partials/head.html
@@ -0,0 +1,26 @@
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+{{ hugo.Generator }}
+{{ if eq (getenv "HUGO_ENV") "production" }}
+<META NAME="ROBOTS" CONTENT="INDEX, FOLLOW">
+{{ else }}
+<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
+{{ end }}
+{{ range .AlternativeOutputFormats -}}
+<link rel="{{ .Rel }}" type="{{ .MediaType.Type }}" href="{{ .Permalink | safeURL }}">
+{{ end -}}
+{{ partialCached "favicons.html" . }}
+<title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{ . }} | {{ end }}{{ .Site.Title }}{{ end }}</title>
+{{- template "_internal/opengraph.html" . -}}
+{{- template "_internal/google_news.html" . -}}
+{{- template "_internal/schema.html" . -}}
+{{- template "_internal/twitter_cards.html" . -}}
+{{ if eq (getenv "HUGO_ENV") "production" }}
+{{ partial "matomo/analytics.html" . }}
+{{ end }}
+{{ partialCached "head-css.html" . "asdf" }}
+<script
+ src="https://code.jquery.com/jquery-3.3.1.min.js"
+ integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
+ crossorigin="anonymous"></script>
+{{ partial "hooks/head-end.html" . }}
diff --git a/themes/docsy/layouts/partials/hooks/body-end.html b/themes/docsy/layouts/partials/hooks/body-end.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/themes/docsy/layouts/partials/hooks/body-end.html
diff --git a/themes/docsy/layouts/partials/hooks/head-end.html b/themes/docsy/layouts/partials/hooks/head-end.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/themes/docsy/layouts/partials/hooks/head-end.html
diff --git a/themes/docsy/layouts/partials/navbar-lang-selector.html b/themes/docsy/layouts/partials/navbar-lang-selector.html
new file mode 100644
index 0000000..dc59294
--- /dev/null
+++ b/themes/docsy/layouts/partials/navbar-lang-selector.html
@@ -0,0 +1,10 @@
+{{/* Link directly to documentation etc., if possible. */}}
+{{ $langPage := cond (gt (len .Translations) 0) . .Site.Home }}
+<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+ {{ $langPage.Language.LanguageName }}
+</a>
+<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+ {{ range $langPage.Translations }}
+ <a class="dropdown-item" href="{{ .RelPermalink }}">{{ .Language.LanguageName }}</a>
+ {{ end }}
+</div> \ No newline at end of file
diff --git a/themes/docsy/layouts/partials/navbar-version-selector.html b/themes/docsy/layouts/partials/navbar-version-selector.html
new file mode 100644
index 0000000..6ac1ef6
--- /dev/null
+++ b/themes/docsy/layouts/partials/navbar-version-selector.html
@@ -0,0 +1,8 @@
+<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+ {{ .Site.Params.version_menu }}
+</a>
+<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+ {{ range .Site.Params.versions }}
+ <a class="dropdown-item" href="{{ .url }}">{{ .version }}</a>
+ {{ end }}
+</div>
diff --git a/themes/docsy/layouts/partials/navbar.html b/themes/docsy/layouts/partials/navbar.html
new file mode 100644
index 0000000..284283b
--- /dev/null
+++ b/themes/docsy/layouts/partials/navbar.html
@@ -0,0 +1,33 @@
+{{ $cover := .HasShortcode "blocks/cover" }}
+<nav class="js-navbar-scroll navbar navbar-expand navbar-dark {{ if $cover}} td-navbar-cover {{ end }}flex-column flex-md-row td-navbar">
+ <a class="navbar-brand" href="{{ .Site.Home.RelPermalink }}">
+ <span class="navbar-logo">{{ if .Site.Params.ui.navbar_logo }}{{ with resources.Get "icons/logo.svg" }}{{ ( . | minify).Content | safeHTML }}{{ end }}{{ end }}</span><span class="text-uppercase font-weight-bold">{{ .Site.Title }}</span>
+ </a>
+ <div class="td-navbar-nav-scroll ml-md-auto" id="main_navbar">
+ <ul class="navbar-nav mt-2 mt-lg-0">
+ {{ $p := . }}
+ {{ range .Site.Menus.main }}
+ <li class="nav-item mr-4 mb-2 mb-lg-0">
+ {{ $active := or ($p.IsMenuCurrent "main" .) ($p.HasMenuCurrent "main" .) }}
+ {{ with .Page }}
+ {{ $active = or $active ( $.IsDescendant .) }}
+ {{ end }}
+ {{ $url := urls.Parse .URL }}
+ {{ $baseurl := urls.Parse $.Site.Params.Baseurl }}
+ <a class="nav-link{{if $active }} active{{end}}" href="{{ with .Page }}{{ .RelPermalink }}{{ else }}{{ .URL | relLangURL }}{{ end }}" {{ if ne $url.Host $baseurl.Host }}target="_blank" {{ end }}><span{{if $active }} class="active"{{end}}>{{ .Name }}</span></a>
+ </li>
+ {{ end }}
+ {{ if .Site.Params.versions }}
+ <li class="nav-item dropdown d-none d-lg-block">
+ {{ partial "navbar-version-selector.html" . }}
+ </li>
+ {{ end }}
+ {{ if (gt (len .Site.Home.Translations) 0) }}
+ <li class="nav-item dropdown d-none d-lg-block">
+ {{ partial "navbar-lang-selector.html" . }}
+ </li>
+ {{ end }}
+ </ul>
+ </div>
+ <div class="navbar-nav d-none d-lg-block">{{ partial "search-input.html" . }}</div>
+</nav>
diff --git a/themes/docsy/layouts/partials/page-meta-lastmod.html b/themes/docsy/layouts/partials/page-meta-lastmod.html
new file mode 100644
index 0000000..b24e62d
--- /dev/null
+++ b/themes/docsy/layouts/partials/page-meta-lastmod.html
@@ -0,0 +1 @@
+{{ T "post_last_mod"}} {{ .Lastmod.Format .Site.Params.time_format_default }}{{ with .GitInfo }}: <a href="{{ $.Site.Params.github_repo }}/commit/{{ .Hash }}">{{ .Subject }} ({{ .AbbreviatedHash }})</a>{{end }}
diff --git a/themes/docsy/layouts/partials/page-meta-links.html b/themes/docsy/layouts/partials/page-meta-links.html
new file mode 100644
index 0000000..8e2650f
--- /dev/null
+++ b/themes/docsy/layouts/partials/page-meta-links.html
@@ -0,0 +1,24 @@
+{{ if .Path }}
+{{ $gh_repo := ($.Param "github_repo") }}
+{{ $gh_subdir := ($.Param "github_subdir") }}
+{{ $gh_project_repo := ($.Param "github_project_repo") }}
+{{ if $gh_repo }}
+<div class="td-page-meta ml-2 pb-1 pt-2 mb-0">
+{{ $editURL := printf "%s/edit/master/content/%s" $gh_repo .Path }}
+{{ if and ($gh_subdir) (.Site.Language.Lang) }}
+{{ $editURL = printf "%s/edit/master/%s/content/%s/%s" $gh_repo $gh_subdir ($.Site.Language.Lang) $.Path }}
+{{ else if .Site.Language.Lang }}
+{{ $editURL = printf "%s/edit/master/content/%s/%s" $gh_repo ($.Site.Language.Lang) .Path }}
+{{ else if $gh_subdir }}
+{{ $editURL = printf "%s/edit/master/%s/content/%s" $gh_repo $gh_subdir $.Path }}
+{{ end }}
+{{ $issuesURL := printf "%s/issues/new?title=%s" $gh_repo (htmlEscape $.Title )}}
+<a href="{{ $editURL }}" target="_blank"><i class="fa fa-edit fa-fw"></i> {{ T "post_edit_this" }}</a>
+<a href="{{ $issuesURL }}" target="_blank"><i class="fab fa-github fa-fw"></i> {{ T "post_create_issue" }}</a>
+{{ if $gh_project_repo }}
+{{ $project_issueURL := printf "%s/issues/new" $gh_project_repo }}
+<a href="{{ $project_issueURL }}" target="_blank"><i class="fas fa-tasks fa-fw"></i> {{ T "post_create_project_issue" }}</a>
+{{ end }}
+</div>
+{{ end }}
+{{ end }}
diff --git a/themes/docsy/layouts/partials/pager.html b/themes/docsy/layouts/partials/pager.html
new file mode 100644
index 0000000..fd547c5
--- /dev/null
+++ b/themes/docsy/layouts/partials/pager.html
@@ -0,0 +1,7 @@
+<ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5">
+ <li>
+ <a {{if .PrevInSection}}href="{{.PrevInSection.RelPermalink}}"{{end}} class="btn btn-primary {{if not .PrevInSection}} disabled{{end}}"><span class="mr-1">←</span> {{ T "ui_pager_prev" }}</a>
+ </li>
+ <a {{if .NextInSection}}href="{{.NextInSection.RelPermalink}}"{{end}} class="btn btn-primary {{if not .NextInSection}} disabled{{end}}">{{ T "ui_pager_next" }} <span class="ml-1">→</span></a>
+ </li>
+</ul>
diff --git a/themes/docsy/layouts/partials/scripts.html b/themes/docsy/layouts/partials/scripts.html
new file mode 100644
index 0000000..cc8dc07
--- /dev/null
+++ b/themes/docsy/layouts/partials/scripts.html
@@ -0,0 +1,14 @@
+
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
+<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
+{{ $jsBase := resources.Get "js/base.js" }}
+{{ $jsAnchor := resources.Get "js/anchor.js" }}
+{{ $jsSearch := resources.Get "js/search.js" | resources.ExecuteAsTemplate "js/search.js" .Site.Home }}
+{{ $js := (slice $jsBase $jsAnchor $jsSearch) | resources.Concat "js/main.js" }}
+{{ if .Site.IsServer }}
+<script src="{{ $js.RelPermalink }}"></script>
+{{ else }}
+{{ $js := $js | minify | fingerprint }}
+<script src="{{ $js.RelPermalink }}" integrity="{{ $js.Data.Integrity }}" crossorigin="anonymous"></script>
+{{ end }}
+{{ partial "hooks/body-end.html" . }}
diff --git a/themes/docsy/layouts/partials/search-input.html b/themes/docsy/layouts/partials/search-input.html
new file mode 100644
index 0000000..883ca3c
--- /dev/null
+++ b/themes/docsy/layouts/partials/search-input.html
@@ -0,0 +1,3 @@
+{{ with .Site.Params.gcs_engine_id }}
+ <input type="search" class="form-control td-search-input" placeholder="&#xf002 {{ T "ui_search" }}" aria-label="{{ T "ui_search" }}" autocomplete="off">
+{{ end }} \ No newline at end of file
diff --git a/themes/docsy/layouts/partials/section-index.html b/themes/docsy/layouts/partials/section-index.html
new file mode 100644
index 0000000..987f0a2
--- /dev/null
+++ b/themes/docsy/layouts/partials/section-index.html
@@ -0,0 +1,29 @@
+<div class="section-index">
+ {{ $pages := (where .Site.Pages "Section" .Section).ByWeight }}
+ {{ $parent := .Page }}
+ {{ if $parent.Params.no_list }}
+ {{/* If no_list is true we don't show a list of subpages */}}
+ {{ else if $parent.Params.simple_list }}
+ {{/* If simple_list is true we show a bulleted list of subpages */}}
+ <ul>
+ {{ range $pages }}
+ {{ if eq .Parent $parent }}
+ <li><a href="{{ .RelPermalink }}">{{- .Title -}}</a></li>
+ {{ end }}
+ {{ end }}
+ </ul>
+ {{ else }}
+ {{/* Otherwise we show a nice formatted list of subpages with page descriptions */}}
+ <hr class="panel-line">
+ {{ range $pages }}
+ {{ if eq .Parent $parent }}
+ <div class="entry">
+ <h5>
+ <a href="{{ .RelPermalink }}">{{- .Title -}}</a>
+ </h5>
+ <p>{{ .Description }}</p>
+ </div>
+ {{ end }}
+ {{ end }}
+ {{ end }}
+</div>
diff --git a/themes/docsy/layouts/partials/sidebar-tree.html b/themes/docsy/layouts/partials/sidebar-tree.html
new file mode 100644
index 0000000..a3eeb2a
--- /dev/null
+++ b/themes/docsy/layouts/partials/sidebar-tree.html
@@ -0,0 +1,47 @@
+{{/* We cache this partial for bigger sites and set the active class client side. */}}
+{{ $shouldDelayActive := ge (len .Site.Pages) 2000 }}
+<div id="td-sidebar-menu" class="td-sidebar__inner{{ if $shouldDelayActive }} d-none{{ end }}">
+ {{ if not .Site.Params.ui.sidebar_search_disable }}
+ <form class="td-sidebar__search d-flex align-items-center">
+ {{ partial "search-input.html" . }}
+ <button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type="button" data-toggle="collapse" data-target="#td-section-nav" aria-controls="td-docs-nav" aria-expanded="false" aria-label="Toggle section navigation">
+ </button>
+ </form>
+ {{ end }}
+ <nav class="collapse td-sidebar-nav pt-2 pl-4" id="td-section-nav">
+ {{ if (gt (len .Site.Home.Translations) 0) }}
+ <div class="nav-item dropdown d-block d-lg-none">
+ {{ partial "navbar-lang-selector.html" . }}
+ </div>
+ {{ end }}
+ {{ template "section-tree-nav-section" (dict "page" . "section" .FirstSection "delayActive" $shouldDelayActive) }}
+ </nav>
+</div>
+{{ define "section-tree-nav-section" }}
+{{ $s := .section }}
+{{ $p := .page }}
+{{ $shouldDelayActive := .delayActive }}
+{{ $active := eq $p.CurrentSection $s }}
+{{ $show := or (and (not $p.Site.Params.ui.sidebar_menu_compact) ($p.IsAncestor $s)) ($p.IsDescendant $s) }}
+{{ $sid := $s.RelPermalink | anchorize }}
+<ul class="td-sidebar-nav__section pr-md-3">
+ <li class="td-sidebar-nav__section-title">
+ <a href="{{ $s.RelPermalink }}" class="align-left pl-0 pr-2{{ if not $show }} collapsed{{ end }}{{ if $active}} active{{ end }} td-sidebar-link td-sidebar-link__section">{{ $s.LinkTitle }}</a>
+ </li>
+ <ul>
+ <li class="collapse {{ if $show }}show{{ end }}" id="{{ $sid }}">
+ {{ $pages := where (union $s.Pages $s.Sections).ByWeight ".Params.toc_hide" "!=" true }}
+ {{ $pages := $pages | first 50 }}
+ {{ range $pages }}
+ {{ if .IsPage }}
+ {{ $mid := printf "m-%s" (.RelPermalink | anchorize) }}
+ {{ $active := eq . $p }}
+ <a class="td-sidebar-link td-sidebar-link__page {{ if and (not $shouldDelayActive) $active }} active{{ end }}" id="{{ $mid }}" href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
+ {{ else }}
+ {{ template "section-tree-nav-section" (dict "page" $p "section" .) }}
+ {{ end }}
+ {{ end }}
+ </li>
+ </ul>
+</ul>
+{{ end }}
diff --git a/themes/docsy/layouts/partials/sidebar.html b/themes/docsy/layouts/partials/sidebar.html
new file mode 100644
index 0000000..bf568e2
--- /dev/null
+++ b/themes/docsy/layouts/partials/sidebar.html
@@ -0,0 +1,14 @@
+{{/* The "active" toggle here may delay rendering, so we only cache this side bar menu for bigger sites. */}}
+{{ $shouldCache := ge (len .Site.Pages) 2000 }}
+{{ if $shouldCache }}
+{{ $mid := printf "m-%s" (.RelPermalink | anchorize) }}
+<script>
+ $(function() {
+ $("#td-sidebar-menu #{{ $mid }}").toggleClass("active");
+ $("#td-sidebar-menu").toggleClass("d-none");
+});
+</script>
+{{ partialCached "sidebar-tree.html" . .CurrentSection.RelPermalink }}
+{{ else }}
+{{ partial "sidebar-tree.html" . }}
+{{ end }}
diff --git a/themes/docsy/layouts/partials/toc.html b/themes/docsy/layouts/partials/toc.html
new file mode 100644
index 0000000..f155f8b
--- /dev/null
+++ b/themes/docsy/layouts/partials/toc.html
@@ -0,0 +1,8 @@
+{{ partial "page-meta-links.html" . }}
+{{ if not .Params.notoc }}
+{{ with .TableOfContents }}
+{{ if ge (len .) 200 }}
+{{ . }}
+{{ end }}
+{{ end }}
+{{ end }} \ No newline at end of file