Files
FreshRSS/docs/_layouts/default.html
Inverle 5e9c3617ca Improve layout of documentation page and add search feature (#8247)
* Improve layout of documentation page and add search feature

Closes https://github.com/FreshRSS/FreshRSS/issues/7915, https://github.com/FreshRSS/FreshRSS/issues/5325

Also: anchor headings and fix building site locally

* Further improvements

* Set color of hyperlinks
* Consistent styling of close aside button across devices
* Mobile layout 600px -> 1200px
* Add suffix to docs `<title>`
    * Note: titles of pages probably need to be improved, since currently they are just derived from the names of the first heading on every page
* Add favicon

* Improve font

* Try to fix favicon not loading correctly on GH pages

* Use local font

* Attempt to fix GH pages

* Final improvements

* Copy to clipboard button
* Support for nojs search
* Dark mode
* Load search.json (200KB json) only on search input focus
* Keep scroll state of sidebar across navigations

* Clickable images and CSP

CSP so we avoid hotlinking resources and clickable images are useful for zooming on mobile for example

* Fix typos

* Disable Dark Reader extension if dark mode CSS is loaded

* Support internationalisation (via language dropdown)

* Add Gemfile.lock

* Make CI build work with the custom plugin

* Make menus closable with Esc

* Fix typos CI

* Suggestions

* Use `ruby/setup-ruby` action in workflow for installing and caching gems.

* Run build only when there are changes to `docs/`

See: https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows?versionId=free-pro-team%40latest&productId=actions#running-your-workflow-only-when-a-push-to-specific-branches-occurs

* Change font to `Open Sans`

* Increase line height

* Fix Liquid syntax error
2025-12-04 20:06:21 +01:00

85 lines
3.5 KiB
HTML

<!DOCTYPE html>
<html lang="{{ page.lang | default: 'en' }}">
<head>
<meta charset="UTF-8">
<title>{{ page.title | default: site.title }} · FreshRSS</title>
<meta name="description" content="{{ page.description | default: site.description | default: site.github.project_tagline }}">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src 'self' data:; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; font-src 'self'; connect-src 'self'">
<link rel="stylesheet" href="{{ '/assets/css/docs.css?v=' | append: site.github.build_revision | relative_url }}">
<link rel="stylesheet" href="{{ '/assets/css/highlight.css?v=' | append: site.github.build_revision | relative_url }}">
<link rel="stylesheet" href="{{ '/assets/css/normalize.css?v=' | append: site.github.build_revision | relative_url }}">
<link rel="stylesheet" media="(prefers-color-scheme: dark)" href="{{ '/assets/css/darkmode.css?v=' | append: site.github.build_revision | relative_url}}">
<link rel="icon" href="{{ '/favicon.ico' | relative_url }}">
<script>
var i18n = {
"copy_to_clipboard": "{%t copy_to_clipboard %}"
};
</script>
<script src="{{ '/assets/js/docs.js?v=' | append: site.github.build_revision | relative_url }}"></script>
</head>
<body>
<nav class="mobile-nav">
<a class="toggle-aside" href="#aside" title="{%t toggle_aside %}">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5m0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5m0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5"/>
</svg>
</a>
{% include lang_dropdown.html location="mobile" %}
</nav>
<a class="close" href="#close"></a>
<aside id="aside">
<a href="https://freshrss.org/">&lt; {%t back_to_freshrss %}</a>
{% include lang_dropdown.html location="aside" %}
<a class="close" href="#close" title="{%t close %}">&times;</a>
<section class="search">
<noscript>
<style>div.js-search { display: none; }</style>
<div class="nojs-search">
<form action="https://duckduckgo.com/" method="get">
<input type="search" name="q" placeholder="{%t search_docs %}">
<input type="hidden" name="sites" value="freshrss.github.io">
<button type="submit">{%t search %}</button>
</form>
</div>
</noscript>
<div class="js-search">
<input type="text" id="search-input" placeholder="{%t search_docs %}">
<ul id="results-container"></ul>
<script src="{{ '/assets/js/simple-jekyll-search.min.js?v=' | append: site.github.build_revision | relative_url }}"></script>
<script>
const search = document.querySelector('#search-input');
function init_search() {
search.removeEventListener('focus', init_search);
SimpleJekyllSearch({
searchInput: search,
resultsContainer: document.querySelector('#results-container'),
json: '{{ "/search." | append: page.lang | append: ".json?v=" | append: site.github.build_revision | relative_url }}',
searchResultTemplate: '<li><a href="{url}">{title}</a></li>'
});
}
search.addEventListener('focus', init_search);
</script>
</div>
</section>
<nav class="docs">
{% include docs_nav.html %}
</nav>
</aside>
<main>
{% include anchor_headings.html html=content anchorBody="#" %}
</main>
</body>
</html>