|
@@ -2,14 +2,8 @@
|
|
|
|
|
|
{{/* Config LaTeX math rendering. */}}
|
|
|
{{ if or .Params.math .Site.Params.math }}
|
|
|
- <script type="text/x-mathjax-config">
|
|
|
- MathJax.Hub.Config({
|
|
|
- CommonHTML: { linebreaks: { automatic: true } },
|
|
|
- tex2jax: { inlineMath: [ ['$', '$'], ['\\(','\\)'] ], displayMath: [ ['$$','$$'], ['\\[', '\\]'] ], processEscapes: false },
|
|
|
- TeX: { noUndefined: { attributes: { mathcolor: 'red', mathbackground: '#FFEEEE', mathsize: '90%' } } },
|
|
|
- messageStyle: 'none'
|
|
|
- });
|
|
|
- </script>
|
|
|
+ {{ $mathjax_config := resources.Get "js/mathjax-config.js" }}
|
|
|
+ <script src="{{ $mathjax_config.RelPermalink }}"></script>
|
|
|
{{ end }}
|
|
|
|
|
|
{{/* Attempt to load local vendor JS, otherwise load from CDN. */}}
|
|
@@ -37,11 +31,6 @@
|
|
|
{{ end }}
|
|
|
{{ end }}
|
|
|
|
|
|
- <script src="{{ "/js/hugo-academic.js" | relURL }}"></script>
|
|
|
- {{ range .Site.Params.custom_js }}
|
|
|
- <script src="{{ "/js/" | relURL }}{{ . }}"></script>
|
|
|
- {{ end }}
|
|
|
-
|
|
|
{{/* Maps JS. */}}
|
|
|
{{ if eq .Site.Params.map 1 }}
|
|
|
<script async defer src="//maps.googleapis.com/maps/api/js?key={{ .Site.Params.map_api_key }}"></script>
|
|
@@ -66,9 +55,10 @@
|
|
|
{{ if ne .Site.Params.search.engine 0 }}
|
|
|
{{/* Configure search engine. */}}
|
|
|
<script>
|
|
|
- const search_index_filename = {{ "/search.json" | relURL }};
|
|
|
+ const search_index_filename = {{ "/index.json" | relURL }};
|
|
|
const i18n = {
|
|
|
'placeholder': {{ i18n "search_placeholder" }},
|
|
|
+ 'results': {{ i18n "search_results" }},
|
|
|
'no_results': {{ i18n "search_no_results" }}
|
|
|
};
|
|
|
const content_type = {
|
|
@@ -80,11 +70,46 @@
|
|
|
</script>
|
|
|
{{ end }}
|
|
|
|
|
|
+ {{/* Load hash anchors for documentation pages. */}}
|
|
|
+ {{ if eq .Type "docs" }}
|
|
|
+ {{ printf "<script src=\"%s\" integrity=\"%s\" crossorigin=\"anonymous\"></script>" (printf $js.anchor.url $js.anchor.version) $js.anchor.sri | safeHTML }}
|
|
|
+ <script>
|
|
|
+ anchors.add();
|
|
|
+ </script>
|
|
|
+ {{ end }}
|
|
|
+
|
|
|
+ {{ if eq $.Site.Params.search.engine 1 }}
|
|
|
+ {{/* Fuse search result template. */}}
|
|
|
+ <script id="search-hit-fuse-template" type="text/x-template">
|
|
|
+ <div class="search-hit" id="summary-{{"{{key}}"}}">
|
|
|
+ <div class="search-hit-content">
|
|
|
+ <div class="search-hit-name">
|
|
|
+ {{ printf "<a href=\"%s\">%s</a>" "{{relpermalink}}" "{{title}}" | safeHTML }}
|
|
|
+ <div class="article-metadata search-hit-type">{{"{{type}}"}}</div>
|
|
|
+ <p class="search-hit-description">{{"{{snippet}}"}}</p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </script>
|
|
|
+ {{ else if eq $.Site.Params.search.engine 2 }}
|
|
|
+ {{/* Algolia search result template. */}}
|
|
|
+ <script id="search-hit-algolia-template" type="text/html">
|
|
|
+ <div class="search-hit">
|
|
|
+ <div class="search-hit-content">
|
|
|
+ <div class="search-hit-name">
|
|
|
+ {{ printf "<a href=\"%s\">{{{_highlightResult.title.value}}}</a>" "{{relpermalink}}" | safeHTML }}
|
|
|
+ </div>
|
|
|
+ <div class="article-metadata search-hit-type">{{"{{type}}"}}</div>
|
|
|
+ <p class="search-hit-description">{{ safeHTML "{{{_highlightResult.summary.value}}}" }}</p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </script>
|
|
|
+ {{ end }}
|
|
|
+
|
|
|
{{/* Fuse search engine. */}}
|
|
|
{{ if eq .Site.Params.search.engine 1 }}
|
|
|
{{ printf "<script src=\"%s\" integrity=\"%s\" crossorigin=\"anonymous\"></script>" (printf $js.fuse.url $js.fuse.version) $js.fuse.sri | safeHTML }}
|
|
|
{{ printf "<script src=\"%s\" integrity=\"%s\" crossorigin=\"anonymous\"></script>" (printf $js.mark.url $js.mark.version) $js.mark.sri | safeHTML }}
|
|
|
- <script src="{{ "/js/search.js" | relURL }}"></script>
|
|
|
{{ end }}
|
|
|
|
|
|
{{/* Algolia search engine. */}}
|
|
@@ -93,71 +118,27 @@
|
|
|
{{ printf "<script src=\"%s\" integrity=\"%s\" crossorigin=\"anonymous\"></script>" (printf $js.instantsearch.url $js.instantsearch.version) $js.instantsearch.sri | safeHTML }}
|
|
|
{{ end }}
|
|
|
<script>
|
|
|
- if ( $('#search-box').length ) {
|
|
|
- function getTemplate(templateName) {
|
|
|
- return document.querySelector(`#${templateName}-template`).innerHTML;
|
|
|
- }
|
|
|
-
|
|
|
- const options = {
|
|
|
- appId: {{ .Site.Params.search.algolia.app_id }},
|
|
|
- apiKey: {{ .Site.Params.search.algolia.api_key }},
|
|
|
- indexName: {{ .Site.Params.search.algolia.index_name }},
|
|
|
- routing: true,
|
|
|
- searchParameters: {
|
|
|
- hitsPerPage: 10
|
|
|
- },
|
|
|
- searchFunction: function(helper) {
|
|
|
- let searchResults = document.querySelector('#search-hits')
|
|
|
- if (helper.state.query === '') {
|
|
|
- searchResults.style.display = 'none';
|
|
|
- return;
|
|
|
- }
|
|
|
- helper.search();
|
|
|
- searchResults.style.display = 'block';
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- const search = instantsearch(options);
|
|
|
-
|
|
|
- // Initialize search box.
|
|
|
- search.addWidget(
|
|
|
- instantsearch.widgets.searchBox({
|
|
|
- container: '#search-box',
|
|
|
- autofocus: false,
|
|
|
- poweredBy: {{ .Site.Params.search.algolia.show_logo | default false }},
|
|
|
- placeholder: i18n.placeholder
|
|
|
- })
|
|
|
- );
|
|
|
-
|
|
|
- // Initialize search results.
|
|
|
- search.addWidget(
|
|
|
- instantsearch.widgets.infiniteHits({
|
|
|
- container: '#search-hits',
|
|
|
- escapeHits: true,
|
|
|
- templates: {
|
|
|
- empty: '<div class="search-no-results">' + i18n.no_results + '</div>',
|
|
|
- item: getTemplate('search-hit-algolia')
|
|
|
- },
|
|
|
- cssClasses: {
|
|
|
- showmoreButton: 'btn btn-primary btn-outline'
|
|
|
- }
|
|
|
- })
|
|
|
- );
|
|
|
+ const algoliaConfig = {
|
|
|
+ appId: {{ .Site.Params.search.algolia.app_id }},
|
|
|
+ apiKey: {{ .Site.Params.search.algolia.api_key }},
|
|
|
+ indexName: {{ .Site.Params.search.algolia.index_name }},
|
|
|
+ poweredBy: {{ .Site.Params.search.algolia.show_logo | default false }}
|
|
|
+ };
|
|
|
+ </script>
|
|
|
+ {{ end }}
|
|
|
|
|
|
- // On render search results, localize the content type metadata.
|
|
|
- search.on('render', function() {
|
|
|
- $('.search-hit-type').each(function( index ) {
|
|
|
- let content_key = $( this ).text();
|
|
|
- if (content_key in content_type) {
|
|
|
- $( this ).text(content_type[content_key]);
|
|
|
- }
|
|
|
- });
|
|
|
- });
|
|
|
+ {{ $js_comment := printf "/* Source Themes Academic v%s | https://sourcethemes.com/academic/ */\n" .Site.Data.academic.version }}
|
|
|
+ {{ $js_bundle_head := $js_comment | resources.FromString "js/bundle-head.js" }}
|
|
|
+ {{ $js_academic := resources.Get "js/academic.js" }}
|
|
|
+ {{ $js_academic_search := resources.Get "js/academic-search.js" }}
|
|
|
+ {{ $js_algolia_search := resources.Get "js/algolia-search.js" }}
|
|
|
+ {{ $js_bundle := slice $js_academic $js_academic_search }}
|
|
|
+ {{ $js_bundle := $js_bundle | resources.Concat "js/academic-bundle-pre.js" | minify }}
|
|
|
+ {{ $js_bundle := slice $js_bundle_head $js_bundle | resources.Concat "js/academic.min.js" | fingerprint "md5" }}
|
|
|
+ <script src="{{ $js_bundle.RelPermalink }}"></script>
|
|
|
|
|
|
- // Start search.
|
|
|
- search.start();
|
|
|
- }
|
|
|
- </script>
|
|
|
+ {{ range .Site.Params.custom_js }}
|
|
|
+ <script src="{{ "/js/" | relURL }}{{ . }}"></script>
|
|
|
{{ end }}
|
|
|
|
|
|
</body>
|