2016-08-07 19:01:56 +03:00
|
|
|
<!--
|
2017-01-06 21:11:18 +03:00
|
|
|
Copyright (c) 2016-2017 Martin Donath <martin.donath@squidfunk.com>
|
2016-08-07 19:01:56 +03:00
|
|
|
|
|
|
|
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.
|
|
|
|
-->
|
|
|
|
|
2017-01-13 02:31:37 +03:00
|
|
|
{% import "partials/language.html" as lang %}
|
2017-01-06 21:18:17 +03:00
|
|
|
|
2016-01-29 01:27:15 +03:00
|
|
|
<!DOCTYPE html>
|
2017-04-22 15:51:41 +03:00
|
|
|
<html lang="{{ lang.t('language') }}" class="no-js">
|
2016-01-29 01:27:15 +03:00
|
|
|
<head>
|
|
|
|
|
2016-12-15 18:43:40 +03:00
|
|
|
<!-- Block: metatags -->
|
|
|
|
{% block site_meta %}
|
|
|
|
<meta charset="utf-8" />
|
2016-12-19 08:44:52 +03:00
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
2016-12-15 18:43:40 +03:00
|
|
|
|
2017-06-21 11:44:40 +03:00
|
|
|
<!-- Keep for compatibility, see http://bit.ly/2tMB6ag -->
|
|
|
|
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
|
|
|
|
2017-03-11 16:07:07 +03:00
|
|
|
<!-- Page description -->
|
|
|
|
{% if page and page.meta.description %}
|
|
|
|
<meta name="description"
|
|
|
|
content="{{ page.meta.description | first }}" />
|
|
|
|
{% elif config.site_description %}
|
2016-12-15 18:43:40 +03:00
|
|
|
<meta name="description" content="{{ config.site_description }}" />
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
<!-- Canonical -->
|
|
|
|
{% if page.canonical_url %}
|
|
|
|
<link rel="canonical" href="{{ page.canonical_url }}" />
|
|
|
|
{% endif %}
|
|
|
|
|
2017-03-11 16:07:07 +03:00
|
|
|
<!-- Page author -->
|
|
|
|
{% if page and page.meta.author %}
|
|
|
|
<meta name="author" content="{{ page.meta.author | first }}" />
|
|
|
|
{% elif config.site_author %}
|
2016-12-15 18:43:40 +03:00
|
|
|
<meta name="author" content="{{ config.site_author }}" />
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
<!-- Favicon -->
|
|
|
|
{% if config.site_favicon %}
|
|
|
|
<link rel="shortcut icon"
|
|
|
|
href="{{ base_url }}/{{ config.site_favicon }}">
|
|
|
|
{% else %}
|
|
|
|
<link rel="shortcut icon"
|
2017-01-28 19:56:34 +03:00
|
|
|
href="{{ base_url }}/assets/images/favicon.png">
|
2016-12-15 18:43:40 +03:00
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
<!-- Generator banner -->
|
2017-02-02 01:56:57 +03:00
|
|
|
<meta name="generator"
|
2017-03-11 16:07:07 +03:00
|
|
|
content="mkdocs-{{ mkdocs_version }}, $md-name$-$md-version$" />
|
2016-12-15 18:43:40 +03:00
|
|
|
{% endblock %}
|
|
|
|
|
|
|
|
<!-- Block: site title -->
|
|
|
|
{% block htmltitle %}
|
2017-03-11 16:07:07 +03:00
|
|
|
{% if page and page.meta.title %}
|
|
|
|
<title>{{ page.meta.title | first }}</title>
|
|
|
|
{% elif page and page.title and not page.is_homepage %}
|
2016-12-15 18:43:40 +03:00
|
|
|
<title>{{ page.title }} - {{ config.site_name }}</title>
|
|
|
|
{% else %}
|
|
|
|
<title>{{ config.site_name }}</title>
|
|
|
|
{% endif %}
|
|
|
|
{% endblock %}
|
|
|
|
|
|
|
|
<!-- Block: JavaScript libraries -->
|
|
|
|
{% block libs %}
|
|
|
|
<script src="{{ base_url }}/assets/javascripts/modernizr.js"></script>
|
|
|
|
{% endblock %}
|
|
|
|
|
2017-02-10 18:43:32 +03:00
|
|
|
<!-- Block: stylesheets -->
|
|
|
|
{% block styles %}
|
|
|
|
|
|
|
|
<!-- Theme-related stylesheets -->
|
|
|
|
<link rel="stylesheet" type="text/css"
|
|
|
|
href="{{ base_url }}/assets/stylesheets/application.css" />
|
|
|
|
|
|
|
|
<!-- Extra color palette -->
|
|
|
|
{% if config.extra.palette %}
|
|
|
|
<link rel="stylesheet" type="text/css"
|
|
|
|
href="{{ base_url }}/assets/stylesheets/application.palette.css" />
|
|
|
|
{% endif %}
|
|
|
|
{% endblock %}
|
|
|
|
|
2016-12-27 12:56:13 +03:00
|
|
|
<!-- Block: webfonts -->
|
2016-12-28 14:11:04 +03:00
|
|
|
{% block fonts %}
|
2017-03-11 20:36:56 +03:00
|
|
|
<!-- TODO: remove the second check in the next major version -->
|
|
|
|
{% if config.extra.font != false and config.extra.font != "none" %}
|
2017-01-13 02:31:37 +03:00
|
|
|
{% set text = config.extra.get("font", {}).text | default("Roboto") %}
|
|
|
|
{% set code = config.extra.get("font", {}).code
|
|
|
|
| default("Roboto Mono") %}
|
2017-06-01 23:17:08 +03:00
|
|
|
{% set font = text + ":300,400,400i,700|" + code | replace(" ", "+") %}
|
2017-01-13 02:31:37 +03:00
|
|
|
<link rel="stylesheet" type="text/css"
|
2017-02-26 17:06:50 +03:00
|
|
|
href="https://fonts.googleapis.com/css?family={{ font }}" />
|
2017-01-13 02:31:37 +03:00
|
|
|
<style>
|
|
|
|
body, input {
|
|
|
|
font-family: "{{ text }}", "Helvetica Neue",
|
|
|
|
Helvetica, Arial, sans-serif;
|
|
|
|
}
|
|
|
|
pre, code, kbd {
|
|
|
|
font-family: "{{ code }}", "Courier New",
|
|
|
|
Courier, monospace;
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
<!-- Material icons as a default iconset -->
|
|
|
|
<link rel="stylesheet" type="text/css"
|
|
|
|
href="https://fonts.googleapis.com/icon?family=Material+Icons" />
|
2016-12-27 12:56:13 +03:00
|
|
|
{% endblock %}
|
2016-12-15 18:43:40 +03:00
|
|
|
|
2017-02-10 18:43:32 +03:00
|
|
|
<!-- Custom stylesheets -->
|
|
|
|
{% for path in extra_css %}
|
|
|
|
<link rel="stylesheet" type="text/css" href="{{ path }}" />
|
|
|
|
{% endfor %}
|
2016-12-15 18:43:40 +03:00
|
|
|
|
|
|
|
<!-- Block: custom front matter -->
|
2016-12-17 14:53:24 +03:00
|
|
|
{% block extrahead %}{% endblock %}
|
2016-01-29 01:27:15 +03:00
|
|
|
</head>
|
2016-12-17 14:53:24 +03:00
|
|
|
|
2016-12-18 15:29:03 +03:00
|
|
|
<!-- Integrate color palette, if defined -->
|
2016-12-17 14:53:24 +03:00
|
|
|
{% set palette = config.extra.get("palette", {}) %}
|
|
|
|
{% set primary = palette.primary | replace(" ", "-") | lower %}
|
|
|
|
{% set accent = palette.accent | replace(" ", "-") | lower %}
|
|
|
|
{% if primary or accent %}
|
2016-12-18 15:29:03 +03:00
|
|
|
<body data-md-color-primary="{{ primary }}"
|
|
|
|
data-md-color-accent="{{ accent }}">
|
2016-12-17 14:53:24 +03:00
|
|
|
{% else %}
|
|
|
|
<body>
|
|
|
|
{% endif %}
|
2016-01-29 01:27:15 +03:00
|
|
|
|
2017-01-13 02:31:37 +03:00
|
|
|
<!-- 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>
|
2016-12-28 16:47:53 +03:00
|
|
|
|
2016-01-29 01:27:15 +03:00
|
|
|
<!-- State toggles -->
|
2016-12-15 17:55:40 +03:00
|
|
|
<input class="md-toggle" data-md-toggle="drawer"
|
|
|
|
type="checkbox" id="drawer" />
|
|
|
|
<input class="md-toggle" data-md-toggle="search"
|
|
|
|
type="checkbox" id="search" />
|
2016-01-29 01:27:15 +03:00
|
|
|
|
|
|
|
<!-- Overlay for expanded drawer -->
|
2016-12-26 16:47:50 +03:00
|
|
|
<label class="md-overlay" data-md-component="overlay" for="drawer"></label>
|
2016-01-29 01:27:15 +03:00
|
|
|
|
2016-08-07 19:01:56 +03:00
|
|
|
<!-- Application header -->
|
2016-12-19 09:20:09 +03:00
|
|
|
{% block header %}
|
|
|
|
{% include "partials/header.html" %}
|
|
|
|
{% endblock %}
|
2016-01-29 01:27:15 +03:00
|
|
|
|
2016-08-07 19:01:56 +03:00
|
|
|
<!-- Container, necessary for web-application context -->
|
|
|
|
<div class="md-container">
|
2017-01-26 23:10:52 +03:00
|
|
|
{% set feature = config.extra.get("feature", {}) %}
|
|
|
|
{% if feature.tabs %}
|
|
|
|
{% include "partials/tabs.html" %}
|
|
|
|
{% endif %}
|
2016-02-05 17:34:19 +03:00
|
|
|
|
2016-08-07 19:01:56 +03:00
|
|
|
<!-- Main container -->
|
|
|
|
<main class="md-main">
|
2016-12-26 16:47:50 +03:00
|
|
|
<div class="md-main__inner md-grid" data-md-component="container">
|
2016-01-29 01:27:15 +03:00
|
|
|
|
2016-12-15 18:43:40 +03:00
|
|
|
<!-- Block: navigation -->
|
|
|
|
{% block site_nav %}
|
|
|
|
|
|
|
|
<!-- Main navigation -->
|
|
|
|
{% if nav %}
|
|
|
|
<div class="md-sidebar md-sidebar--primary"
|
2016-12-26 16:47:50 +03:00
|
|
|
data-md-component="navigation">
|
2016-12-15 18:43:40 +03:00
|
|
|
<div class="md-sidebar__scrollwrap">
|
|
|
|
<div class="md-sidebar__inner">
|
|
|
|
{% include "partials/nav.html" %}
|
|
|
|
</div>
|
2016-09-23 12:56:25 +03:00
|
|
|
</div>
|
|
|
|
</div>
|
2016-12-15 18:43:40 +03:00
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
<!-- Table of contents -->
|
|
|
|
{% if page.toc %}
|
|
|
|
<div class="md-sidebar md-sidebar--secondary"
|
2016-12-26 16:47:50 +03:00
|
|
|
data-md-component="toc">
|
2016-12-15 18:43:40 +03:00
|
|
|
<div class="md-sidebar__scrollwrap">
|
|
|
|
<div class="md-sidebar__inner">
|
|
|
|
{% include "partials/toc.html" %}
|
|
|
|
</div>
|
2016-09-23 12:56:25 +03:00
|
|
|
</div>
|
|
|
|
</div>
|
2016-12-15 18:43:40 +03:00
|
|
|
{% endif %}
|
|
|
|
{% endblock %}
|
2016-01-29 01:27:15 +03:00
|
|
|
|
2016-08-07 19:01:56 +03:00
|
|
|
<!-- Article -->
|
2016-09-23 21:26:27 +03:00
|
|
|
<div class="md-content">
|
|
|
|
<article class="md-content__inner md-typeset">
|
2016-09-11 20:00:53 +03:00
|
|
|
|
2016-12-15 18:43:40 +03:00
|
|
|
<!-- Block: content -->
|
2016-09-23 12:56:25 +03:00
|
|
|
{% block content %}
|
2016-09-11 20:00:53 +03:00
|
|
|
|
2017-03-01 17:43:49 +03:00
|
|
|
<!-- Edit button, if URL was defined -->
|
|
|
|
{% if config.edit_uri %}
|
|
|
|
<a href="{{ page.edit_url }}"
|
|
|
|
title="{{ lang.t('edit.link.title') }}"
|
|
|
|
class="md-icon md-content__icon">edit</a>
|
|
|
|
{% endif %}
|
|
|
|
|
2016-12-15 20:29:46 +03:00
|
|
|
<!--
|
2017-02-09 01:13:13 +03:00
|
|
|
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.
|
2016-12-15 20:29:46 +03:00
|
|
|
-->
|
2017-02-09 01:13:13 +03:00
|
|
|
{% if not "\x3ch1" in page.content %}
|
2016-12-15 20:29:46 +03:00
|
|
|
<h1>{{ page.title | default(config.site_name, true)}}</h1>
|
|
|
|
{% endif %}
|
|
|
|
|
2016-09-23 12:56:25 +03:00
|
|
|
<!-- Content -->
|
2016-12-15 18:43:40 +03:00
|
|
|
{{ page.content }}
|
2017-02-27 00:09:51 +03:00
|
|
|
|
2017-03-11 16:07:07 +03:00
|
|
|
<!-- Source files -->
|
|
|
|
{% block source %}
|
|
|
|
{% if page.meta.source %}
|
2017-06-01 23:17:08 +03:00
|
|
|
<h2 id="__source">{{ lang.t("meta.source") }}</h2>
|
2017-03-11 16:07:07 +03:00
|
|
|
{% set path = (page.meta.path | default([""]) | first) %}
|
2017-02-27 00:09:51 +03:00
|
|
|
{% for file in page.meta.source %}
|
2017-04-22 15:31:29 +03:00
|
|
|
<a href="{{ [config.repo_url, path, file] | join('/') }}"
|
2017-04-05 12:32:45 +03:00
|
|
|
title="{{ file }}" class="md-source-file">
|
2017-03-11 16:07:07 +03:00
|
|
|
{{ file }}
|
|
|
|
</a>
|
2017-02-27 00:09:51 +03:00
|
|
|
{% endfor %}
|
2017-03-11 16:07:07 +03:00
|
|
|
{% endif %}
|
|
|
|
{% endblock %}
|
2016-09-23 12:56:25 +03:00
|
|
|
{% endblock %}
|
2017-02-25 00:53:12 +03:00
|
|
|
|
|
|
|
<!-- Disqus integration -->
|
2017-03-11 16:07:07 +03:00
|
|
|
{% block disqus %}
|
|
|
|
{% if config.extra.disqus and not page.is_homepage %}
|
2017-06-01 23:17:08 +03:00
|
|
|
<h2 id="__comments">{{ lang.t("meta.comments") }}</h2>
|
2017-03-11 16:07:07 +03:00
|
|
|
{% include "partials/disqus.html" %}
|
|
|
|
{% endif %}
|
|
|
|
{% endblock %}
|
2016-08-07 19:01:56 +03:00
|
|
|
</article>
|
2016-01-29 01:27:15 +03:00
|
|
|
</div>
|
|
|
|
</div>
|
2016-08-07 19:01:56 +03:00
|
|
|
</main>
|
|
|
|
|
|
|
|
<!-- Application footer -->
|
2016-12-15 18:43:40 +03:00
|
|
|
{% block footer %}
|
2017-01-06 21:18:17 +03:00
|
|
|
{% include "partials/footer.html" %}
|
2016-12-15 18:43:40 +03:00
|
|
|
{% endblock %}
|
2016-08-07 19:01:56 +03:00
|
|
|
</div>
|
2016-01-29 01:27:15 +03:00
|
|
|
|
2017-01-09 23:41:30 +03:00
|
|
|
<!-- Block: theme-related JavaScript -->
|
2016-12-15 18:43:40 +03:00
|
|
|
{% block scripts %}
|
|
|
|
<script src="{{ base_url }}/assets/javascripts/application.js"></script>
|
2017-06-01 01:40:10 +03:00
|
|
|
|
|
|
|
<!-- Load additional languages for search -->
|
2017-06-01 23:17:08 +03:00
|
|
|
{% set languages = lang.t("search.languages").split(",") %}
|
2017-06-01 01:40:10 +03:00
|
|
|
{% if languages | length and languages[0] != "" %}
|
|
|
|
{% set path = base_url + "/assets/javascripts/lunr" %}
|
|
|
|
<script src="{{ path }}/lunr.stemmer.support.js"></script>
|
|
|
|
{% for language in languages | map("trim") %}
|
|
|
|
{% if language != "en" %}
|
2017-06-07 13:29:34 +03:00
|
|
|
{% if language == "jp" %}
|
|
|
|
<script src="{{ path }}/tinyseg.js"></script>
|
|
|
|
{% endif %}
|
2017-06-01 01:40:10 +03:00
|
|
|
<script src="{{ path }}/lunr.{{ language }}.js"></script>
|
|
|
|
{% endif %}
|
|
|
|
{% endfor %}
|
|
|
|
{% if languages | length > 1 %}
|
|
|
|
<script src="{{ path }}/lunr.multi.js"></script>
|
|
|
|
{% endif %}
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
<!-- Initialize application -->
|
2016-12-15 18:43:40 +03:00
|
|
|
<script>
|
2017-05-16 03:31:10 +03:00
|
|
|
app.initialize({ url: { base: "{{ base_url }}" } });
|
2016-12-15 18:43:40 +03:00
|
|
|
</script>
|
|
|
|
{% for path in extra_javascript %}
|
|
|
|
<script src="{{ path }}"></script>
|
|
|
|
{% endfor %}
|
|
|
|
{% endblock %}
|
|
|
|
|
|
|
|
<!-- Block: analytic scripts -->
|
|
|
|
{% block analytics %}
|
|
|
|
{% if config.google_analytics %}
|
|
|
|
<script>
|
2016-12-17 14:53:24 +03:00
|
|
|
(function(i,s,o,g,r,a,m){
|
|
|
|
i["GoogleAnalyticsObject"]=r;i[r]=i[r]||function(){(i[r].q=i[r].q||
|
|
|
|
[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
|
|
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;
|
|
|
|
m.parentNode.insertBefore(a,m)
|
|
|
|
})(window, document,
|
|
|
|
"script", "https://www.google-analytics.com/analytics.js", "ga");
|
|
|
|
|
|
|
|
/* General initialization */
|
|
|
|
ga("create",
|
|
|
|
"{{ config.google_analytics[0] }}",
|
|
|
|
"{{ config.google_analytics[1] }}");
|
|
|
|
ga("set", "anonymizeIp", true);
|
|
|
|
ga("send", "pageview");
|
|
|
|
|
|
|
|
/* Track outbound links */
|
|
|
|
var links = document.getElementsByTagName("a");
|
|
|
|
Array.prototype.map.call(links, function(item) {
|
|
|
|
if (item.host != document.location.host) {
|
|
|
|
item.addEventListener("click", function() {
|
2016-12-27 12:56:13 +03:00
|
|
|
var action = item.getAttribute("data-md-action") || "follow";
|
2016-12-17 14:53:24 +03:00
|
|
|
ga("send", "event", "outbound", action, item.href);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
/* Register handler to log search on blur */
|
|
|
|
var query = document.forms.search.query;
|
|
|
|
query.addEventListener("blur", function() {
|
|
|
|
if (this.value) {
|
|
|
|
var path = document.location.pathname;
|
|
|
|
ga("send", "pageview", path + "?q=" + this.value);
|
|
|
|
}
|
|
|
|
});
|
2016-12-15 18:43:40 +03:00
|
|
|
</script>
|
2016-12-15 17:55:40 +03:00
|
|
|
{% endif %}
|
2016-12-15 18:43:40 +03:00
|
|
|
{% endblock %}
|
2016-01-29 01:27:15 +03:00
|
|
|
</body>
|
2016-09-23 12:56:25 +03:00
|
|
|
</html>
|