fix: remove extra space for rendered link

chore: update theme info

chore: use dataset

chore: support editURL config option

* add toc and search config option

chore: update head template
This commit is contained in:
Xin 2023-08-12 19:53:14 +01:00
parent 03ae8b3dd5
commit d66ae7146f
8 changed files with 44 additions and 23 deletions

View File

@ -79,7 +79,7 @@
const result = resultsElement.querySelector('.active');
if (!result) return { result: undefined, index: -1 };
const index = parseInt(result.getAttribute('data-index'));
const index = parseInt(result.dataset.index, 10);
return { result, index };
}
@ -101,7 +101,7 @@
function getResultsLength() {
const { resultsElement } = getActiveSearchElement();
if (!resultsElement) return 0;
return resultsElement.querySelectorAll('li').length;
return resultsElement.dataset.count;
}
// Finish the search by hiding the results and clearing the input.
@ -304,6 +304,7 @@
return;
}
// Highlight the query in the result text.
function highlightMatches(text, query) {
const escapedQuery = query.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&');
const regex = new RegExp(escapedQuery, 'gi');
@ -349,5 +350,6 @@
fragment.appendChild(li);
}
resultsElement.appendChild(fragment);
resultsElement.dataset.count = results.length;
}
})();

View File

@ -2,19 +2,19 @@ document.querySelectorAll('.tabs-toggle').forEach(function (button) {
button.addEventListener('click', function (e) {
// set parent tabs to unselected
const tabs = Array.from(e.target.parentElement.querySelectorAll('.tabs-toggle'));
tabs.map(tab => tab.setAttribute('data-state', ''));
tabs.map(tab => tab.dataset.state = '');
// set current tab to selected
e.target.setAttribute('data-state', 'selected');
e.target.dataset.state = 'selected';
// set all panels to unselected
const panelsContainer = e.target.parentElement.nextElementSibling;
Array.from(panelsContainer.children).forEach(function (panel) {
panel.setAttribute('data-state', '');
panel.dataset.state = '';
});
const panelId = e.target.getAttribute('aria-controls');
const panel = panelsContainer.querySelector(`#${panelId}`);
panel.setAttribute('data-state', 'selected');
panel.dataset.state = 'selected';
});
});

View File

@ -72,3 +72,13 @@ menu:
params:
displayUpdatedDate: true
dateFormat: "January 2, 2006"
toc:
disabled: false
search:
disabled: false
editURL:
disabled: false
base: "https://github.com/imfing/hextra/edit/dev/exampleSite/content"

View File

@ -1,2 +1,3 @@
article:
on_this_page: "On this page"
edit_this_page: "Edit this page on GitHub →"

View File

@ -1 +1,3 @@
<a href="{{ .Destination | safeURL }}" {{ with .Title }}title="{{ . }}"{{ end }}{{ if strings.HasPrefix .Destination "http" }}target="_blank" rel="noopener"{{ end }}>{{ .Text | safeHTML }}</a>
{{- with . -}}
<a href="{{ .Destination | safeURL }}" {{ with .Title }}title="{{ . }}"{{ end }}{{ if strings.HasPrefix .Destination "http" }}target="_blank" rel="noopener"{{ end }}>{{ .Text | safeHTML }}</a>
{{- end -}}

View File

@ -1,6 +1,11 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
{{ if hugo.IsProduction -}}
<meta name="robots" content="index, follow" />
{{ else -}}
<meta name="robots" content="noindex, nofollow" />
{{ end -}}
{{ partialCached "favicons.html" . }}
<title>
{{- if .IsHome -}}
@ -12,6 +17,7 @@
</title>
<meta name="description" content="{{ partial "utils/page-description.html" . }}" />
{{ partial "opengraph.html" . }}
{{ template "_internal/schema.html" . -}}
{{ partial "head-css.html" . }}
<script>
/* Initialize light/dark mode */

View File

@ -1,6 +1,7 @@
{{/* Table of Contents */}}
{{/* TODO: toc bottom part should be able to hide */}}
{{- $toc := .Params.toc | default true -}}
{{- with site.Params.toc.disabled -}}{{ $toc = not . }}{{- end -}}
<nav class="order-last hidden w-64 shrink-0 xl:block print:hidden px-4" aria-label="table of contents">
@ -22,9 +23,13 @@
{{ $borderClass = "" }}
{{ end }}
{{/* TOC bottom part */}}
<div class="{{ $borderClass }} sticky bottom-0 flex flex-col items-start gap-2 pb-8 dark:border-neutral-800 contrast-more:border-t contrast-more:border-neutral-400 contrast-more:shadow-none contrast-more:dark:border-neutral-400">
<a class="text-xs font-medium text-gray-500 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-100 contrast-more:text-gray-800 contrast-more:dark:text-gray-50" href="{{ .Params.editURL }}">Edit this page on GitHub →</a>
{{- if not site.Params.editURL.disabled -}}
{{- $editURL := urls.JoinPath site.Params.editURL.base .File.Path -}}
{{- with .Params.editURL -}}{{ $editURL = .Params.editURL }}{{- end -}}
<a class="text-xs font-medium text-gray-500 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-100 contrast-more:text-gray-800 contrast-more:dark:text-gray-50" href="{{ $editURL }}" target="_blank" rel="noreferer">{{ i18n "article.edit_this_page" }}</a>
{{- end -}}
</div>
</div>
{{ end }}

View File

@ -3,19 +3,14 @@
name = "Hextra"
license = "MIT"
licenselink = "https://github.com/yourname/yourtheme/blob/master/LICENSE"
description = ""
homepage = "http://example.com/"
tags = []
features = []
min_version = "0.115.3"
licenselink = "https://github.com/imfing/hextra/blob/main/LICENSE"
description = "Modern, versatile theme for building beautiful websites with Hugo"
homepage = "https://github.com/imfing/hextra/"
demosite = ""
tags = ["Modern", "Elegant", "Blog", "Documentation"]
features = ["Responsive", "Dark Mode", "Search", "Syntax Highlighting", "Multilingual"]
min_version = "0.111.0"
[author]
name = ""
homepage = ""
# If porting an existing theme
[original]
name = ""
homepage = ""
repo = ""
name = "Xin"
homepage = "https://imfing.com"