mirror of
https://github.com/squidfunk/mkdocs-material.git
synced 2024-06-14 11:52:32 +03:00
461 lines
15 KiB
HTML
461 lines
15 KiB
HTML
<!--
|
|
Copyright (c) 2016-2019 Martin Donath <martin.donath@squidfunk.com>
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to
|
|
deal in the Software without restriction, including without limitation the
|
|
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
sell copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
IN THE SOFTWARE.
|
|
-->
|
|
|
|
{% import "partials/language.html" as lang with context %}
|
|
|
|
<!-- Theme options -->
|
|
{% set feature = config.theme.feature %}
|
|
{% set palette = config.theme.palette %}
|
|
{% set font = config.theme.font %}
|
|
|
|
<!doctype html>
|
|
<html lang="{{ lang.t('language') }}" class="no-js">
|
|
<head>
|
|
|
|
<!-- Metatags -->
|
|
{% block site_meta %}
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
|
|
<!-- Keep for compatibility, see http://bit.ly/2tMB6ag -->
|
|
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
|
|
|
<!-- Page description -->
|
|
{% if page and page.meta and page.meta.description %}
|
|
<meta name="description" content="{{ page.meta.description }}" />
|
|
{% elif config.site_description %}
|
|
<meta name="description" content="{{ config.site_description }}" />
|
|
{% endif %}
|
|
|
|
<!-- Redirect -->
|
|
{% if page and page.meta and page.meta.redirect %}
|
|
<script>
|
|
var anchor = window.location.hash.substr(1)
|
|
location.href = '{{ page.meta.redirect }}' +
|
|
(anchor ? '#' + anchor : '')
|
|
</script>
|
|
|
|
<!-- Fallback in case JavaScript is not available -->
|
|
<meta http-equiv="refresh" content="0; url={{ page.meta.redirect }}" />
|
|
<meta name="robots" content="noindex" />
|
|
<link rel="canonical" href="{{ page.meta.redirect }}" />
|
|
|
|
<!-- Canonical -->
|
|
{% elif page.canonical_url %}
|
|
<link rel="canonical" href="{{ page.canonical_url }}" />
|
|
{% endif %}
|
|
|
|
<!-- Page author -->
|
|
{% if page and page.meta and page.meta.author %}
|
|
<meta name="author" content="{{ page.meta.author | first }}" />
|
|
{% elif config.site_author %}
|
|
<meta name="author" content="{{ config.site_author }}" />
|
|
{% endif %}
|
|
|
|
<!-- Favicon -->
|
|
<link rel="shortcut icon" href="{{ config.theme.favicon | url }}">
|
|
|
|
<!-- Generator banner -->
|
|
<meta
|
|
name="generator"
|
|
content="mkdocs-{{ mkdocs_version }}, $md-name$-$md-version$"
|
|
/>
|
|
{% endblock %}
|
|
|
|
<!-- Site title -->
|
|
{% block htmltitle %}
|
|
{% if page and page.meta and page.meta.title %}
|
|
<title>{{ page.meta.title }}</title>
|
|
{% elif page and page.title and not page.is_homepage %}
|
|
<title>{{ page.title | striptags }} - {{ config.site_name }}</title>
|
|
{% else %}
|
|
<title>{{ config.site_name }}</title>
|
|
{% endif %}
|
|
{% endblock %}
|
|
|
|
<!-- Theme-related stylesheets -->
|
|
{% block styles %}
|
|
<link
|
|
rel="stylesheet"
|
|
type="text/css"
|
|
href="{{ 'assets/stylesheets/app.css' | url }}"
|
|
/>
|
|
|
|
<!-- Extra color palette -->
|
|
{% if palette.primary or palette.accent %}
|
|
<link
|
|
rel="stylesheet"
|
|
type="text/css"
|
|
href="{{ 'assets/stylesheets/app-palette.css' | url }}"
|
|
/>
|
|
{% endif %}
|
|
|
|
<!-- Theme-color meta tag for Android -->
|
|
{% if palette.primary %}
|
|
{% import "partials/palette.html" as map %}
|
|
{% set primary = map.primary(
|
|
palette.primary | replace(" ", "-") | lower
|
|
) %}
|
|
<meta name="theme-color" content="{{ primary }}" />
|
|
{% endif %}
|
|
{% endblock %}
|
|
|
|
<!-- JavaScript libraries -->
|
|
{% block libs %}{% endblock %}
|
|
|
|
<!-- Webfonts -->
|
|
{% block fonts %}
|
|
|
|
<!-- Load fonts from Google -->
|
|
{% if font != false %}
|
|
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin />
|
|
<link
|
|
rel="stylesheet"
|
|
type="text/css"
|
|
href="https://fonts.googleapis.com/css?family={{
|
|
font.text | replace(' ', '+') + ':300,400,400i,700%7C' +
|
|
font.code | replace(' ', '+')
|
|
}}&display=fallback"
|
|
/>
|
|
<style>
|
|
body, input {
|
|
font-family: "{{ font.text }}", "Helvetica Neue",
|
|
Helvetica, Arial, sans-serif;
|
|
}
|
|
pre, code, kbd {
|
|
font-family: "{{ font.code }}", "Courier New",
|
|
Courier, monospace;
|
|
}
|
|
</style>
|
|
{% endif %}
|
|
{% endblock %}
|
|
|
|
<!-- Material icons as iconset -->
|
|
<link
|
|
rel="stylesheet"
|
|
type="text/css"
|
|
href="{{ 'assets/fonts/material-icons.css' | url }}"
|
|
/>
|
|
|
|
<!-- Progressive Web App Manifest -->
|
|
{% if config.extra.manifest %}
|
|
<link rel="manifest" href="{{ config.extra.manifest | url }}">
|
|
{% endif %}
|
|
|
|
<!-- FontAwesome for social links -->
|
|
{% if config.extra.social %}
|
|
<link
|
|
rel="stylesheet"
|
|
type="text/css"
|
|
href="{{ 'assets/fonts/font-awesome.css' | url }}"
|
|
/>
|
|
{% endif %}
|
|
|
|
<!-- Custom stylesheets -->
|
|
{% for path in config["extra_css"] %}
|
|
<link rel="stylesheet" type="text/css" href="{{ path | url }}" />
|
|
{% endfor %}
|
|
|
|
<!-- Analytics -->
|
|
{% block analytics %}
|
|
{% if config.google_analytics %}
|
|
{% include "partials/integrations/analytics.html" %}
|
|
{% endif %}
|
|
{% endblock %}
|
|
|
|
<!-- Custom front matter -->
|
|
{% block extrahead %}{% endblock %}
|
|
</head>
|
|
|
|
<!-- Text direction and color palette, if defined -->
|
|
{% if palette.primary or palette.accent %}
|
|
{% set primary = palette.primary | replace(" ", "-") | lower %}
|
|
{% set accent = palette.accent | replace(" ", "-") | lower %}
|
|
<body
|
|
dir="{{ lang.t('direction') }}"
|
|
data-md-color-primary="{{ primary }}"
|
|
data-md-color-accent="{{ accent }}"
|
|
>
|
|
{% else %}
|
|
<body dir="{{ lang.t('direction') }}">
|
|
{% endif %}
|
|
|
|
<!-- Hidden container for inline SVGs -->
|
|
<svg class="md-svg">
|
|
<defs>
|
|
|
|
<!--
|
|
Check whether the repository is hosted on one of the supported code
|
|
hosting platforms (GitHub, GitLab or Bitbucket) to show icon.
|
|
-->
|
|
{% set platform = config.extra.repo_icon or config.repo_url %}
|
|
{% if "github" in platform %}
|
|
{% include "assets/images/icons/github.svg" %}
|
|
{% elif "gitlab" in platform %}
|
|
{% include "assets/images/icons/gitlab.svg" %}
|
|
{% elif "bitbucket" in platform %}
|
|
{% include "assets/images/icons/bitbucket.svg" %}
|
|
{% endif %}
|
|
</defs>
|
|
</svg>
|
|
|
|
<!--
|
|
State toggles - we need to set autocomplete="off" in order to reset the
|
|
drawer on back button invocation in some browsers
|
|
-->
|
|
<input
|
|
class="md-toggle"
|
|
data-md-toggle="drawer"
|
|
type="checkbox"
|
|
id="__drawer"
|
|
autocomplete="off"
|
|
/>
|
|
<input
|
|
class="md-toggle"
|
|
data-md-toggle="search"
|
|
type="checkbox"
|
|
id="__search"
|
|
autocomplete="off"
|
|
/>
|
|
|
|
<!-- Overlay for expanded drawer -->
|
|
<label
|
|
class="md-overlay"
|
|
data-md-component="overlay"
|
|
for="__drawer"
|
|
></label>
|
|
|
|
<!-- Link to skip to content -->
|
|
{% if page.toc | first is defined %}
|
|
<a href="{{ (page.toc | first).url }}" tabindex="1" class="md-skip">
|
|
{{ lang.t('skip.link.title') }}
|
|
</a>
|
|
{% endif %}
|
|
|
|
<!-- Application header -->
|
|
{% block header %}
|
|
{% include "partials/header.html" %}
|
|
{% endblock %}
|
|
|
|
<!-- Container, necessary for web-application context -->
|
|
<div class="md-container" data-md-component="container">
|
|
|
|
<!-- Hero teaser -->
|
|
{% block hero %}
|
|
{% if page and page.meta and page.meta.hero %}
|
|
{% include "partials/hero.html" with context %}
|
|
{% endif %}
|
|
{% endblock %}
|
|
|
|
<!-- Tabs with outline -->
|
|
{% if feature.tabs %}
|
|
{% include "partials/tabs.html" %}
|
|
{% endif %}
|
|
|
|
<!-- Main area -->
|
|
<main class="md-main" data-md-component="main">
|
|
<div class="md-main__inner md-grid">
|
|
|
|
<!-- Navigation -->
|
|
{% block site_nav %}
|
|
|
|
<!-- Main navigation -->
|
|
{% if nav %}
|
|
<div
|
|
class="md-sidebar md-sidebar--primary"
|
|
data-md-component="navigation"
|
|
>
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
{% include "partials/nav.html" %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
<!-- Table of contents -->
|
|
{% if page.toc %}
|
|
<div
|
|
class="md-sidebar md-sidebar--secondary"
|
|
data-md-component="toc"
|
|
>
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
{% include "partials/toc.html" %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
{% endblock %}
|
|
|
|
<!-- Article -->
|
|
<div class="md-content">
|
|
<article class="md-content__inner md-typeset">
|
|
|
|
<!-- Content -->
|
|
{% block content %}
|
|
|
|
<!-- Edit button, if URL was defined -->
|
|
{% if page.edit_url %}
|
|
<a
|
|
href="{{ page.edit_url }}"
|
|
title="{{ lang.t('edit.link.title') }}"
|
|
class="md-icon md-content__icon"
|
|
><!-- edit --></a>
|
|
{% endif %}
|
|
|
|
<!--
|
|
Hack: check whether the content contains a h1 headline. If it
|
|
doesn't, the page title (or respectively site name) is used
|
|
as the main headline.
|
|
-->
|
|
{% if not "\x3ch1" in page.content %}
|
|
<h1>{{ page.title | default(config.site_name, true)}}</h1>
|
|
{% endif %}
|
|
|
|
<!-- Content -->
|
|
{{ page.content }}
|
|
|
|
<!-- Source files -->
|
|
{% block source %}
|
|
{% if page and page.meta and page.meta.source %}
|
|
<h2 id="__source">{{ lang.t("meta.source") }}</h2>
|
|
{% set repo = config.repo_url %}
|
|
{% if repo | last == "/" %}
|
|
{% set repo = repo[:-1] %}
|
|
{% endif %}
|
|
{% set path = page.meta.path | default([""]) %}
|
|
{% set file = page.meta.source %}
|
|
<a
|
|
href="{{ [repo, path, file] | join('/') }}"
|
|
title="{{ file }}"
|
|
class="md-source-file"
|
|
>
|
|
{{ file }}
|
|
</a>
|
|
{% endif %}
|
|
{% endblock %}
|
|
|
|
<!-- Support for mkdocs-git-revision-date-localized-plugin -->
|
|
{% if page and page.meta and (
|
|
page.meta.git_revision_date_localized or
|
|
page.meta.revision_date
|
|
) %}
|
|
{% set label = lang.t("source.revision.date") %}
|
|
<hr />
|
|
<div class="md-source-date">
|
|
<small>
|
|
|
|
<!-- mkdocs-git-revision-date-localized-plugin -->
|
|
{% if page.meta.git_revision_date_localized %}
|
|
{{ label }}: {{ page.meta.git_revision_date_localized }}
|
|
|
|
<!-- mkdocs-git-revision-date-plugin -->
|
|
{% elif page.meta.revision_date %}
|
|
{{ label }}: {{ page.meta.revision_date }}
|
|
{% endif %}
|
|
</small>
|
|
</div>
|
|
{% endif %}
|
|
{% endblock %}
|
|
|
|
<!-- Disqus integration -->
|
|
{% block disqus %}
|
|
{% include "partials/integrations/disqus.html" %}
|
|
{% endblock %}
|
|
</article>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
|
|
<!-- Application footer -->
|
|
{% block footer %}
|
|
{% include "partials/footer.html" %}
|
|
{% endblock %}
|
|
</div>
|
|
|
|
<!-- Theme-related JavaScript -->
|
|
{% block scripts %}
|
|
<script src="{{ 'assets/javascripts/bundle.js' | url }}"></script>
|
|
|
|
<!-- Load additional languages for search -->
|
|
{% if lang.t("search.language") != "en" %}
|
|
{% set languages = lang.t("search.language").split(",") %}
|
|
{% if languages | length and languages[0] != "" %}
|
|
{% set path = "assets/javascripts/lunr/" %}
|
|
<script src="{{ (path ~ 'lunr.stemmer.support.js') | url }}"></script>
|
|
{% for language in languages | map("trim") %}
|
|
{% if language != "en" %}
|
|
{% if language == "ja" %}
|
|
<script src="{{ (path ~ 'tinyseg.js') | url }}"></script>
|
|
{% endif %}
|
|
{% if language in ($md-lunr-languages$) %}
|
|
<script src="{{ (path ~ 'lunr.' ~ language ~ '.js') | url }}">
|
|
</script>
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% if languages | length > 1 %}
|
|
<script src="{{ (path ~ 'lunr.multi.js') | url }}"></script>
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endif %}
|
|
|
|
<!-- Translations -->
|
|
<script id="__lang" type="application/json">
|
|
{%- set translations = {} -%}
|
|
{%- for key in [
|
|
"clipboard.copy",
|
|
"clipboard.copied",
|
|
"search.language",
|
|
"search.pipeline.stopwords",
|
|
"search.pipeline.trimmer",
|
|
"search.result.placeholder",
|
|
"search.result.none",
|
|
"search.result.one",
|
|
"search.result.other",
|
|
"search.tokenizer"
|
|
] -%}
|
|
{%- set _ = translations.update({ key: lang.t(key) }) -%}
|
|
{%- endfor -%}
|
|
{{ translations | tojson }}
|
|
</script>
|
|
|
|
<!-- Application initialization -->
|
|
<script>
|
|
app = initialize({
|
|
base: "{{ base_url }}",
|
|
worker: {
|
|
search: "{{ 'assets/javascripts/worker/search.js' | url }}",
|
|
packer: "{{ 'assets/javascripts/worker/packer.js' | url }}"
|
|
}
|
|
});
|
|
</script>
|
|
|
|
<!-- Custom JavaScript -->
|
|
{% for path in config["extra_javascript"] %}
|
|
<script src="{{ path | url }}"></script>
|
|
{% endfor %}
|
|
{% endblock %}
|
|
</body>
|
|
</html>
|