2016-08-07 19:01:56 +03:00
|
|
|
<!--
|
|
|
|
Copyright (c) 2016 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.
|
|
|
|
-->
|
|
|
|
|
2016-01-29 01:27:15 +03:00
|
|
|
<!DOCTYPE html>
|
2016-09-08 20:43:23 +03:00
|
|
|
<html 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
|
|
|
|
|
|
|
<!-- Site description -->
|
|
|
|
{% if config.site_description %}
|
|
|
|
<meta name="description" content="{{ config.site_description }}" />
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
<!-- Canonical -->
|
|
|
|
{% if page.canonical_url %}
|
|
|
|
<link rel="canonical" href="{{ page.canonical_url }}" />
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
<!-- Author -->
|
|
|
|
{% if config.site_author %}
|
|
|
|
<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"
|
|
|
|
href="{{ base_url }}/assets/images/favicon.ico">
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
<!-- Generator banner -->
|
|
|
|
<meta name="generator" content="mkdocs+$theme-name$#$theme-version$" />
|
|
|
|
{% endblock %}
|
|
|
|
|
|
|
|
<!-- Block: site title -->
|
|
|
|
{% block htmltitle %}
|
|
|
|
{% if page.title %}
|
|
|
|
<title>{{ page.title }} - {{ config.site_name }}</title>
|
|
|
|
{% elif config.site_description %}
|
|
|
|
<title>{{ config.site_name }} - {{ config.site_description }}</title>
|
|
|
|
{% else %}
|
|
|
|
<title>{{ config.site_name }}</title>
|
|
|
|
{% endif %}
|
|
|
|
{% endblock %}
|
|
|
|
|
|
|
|
<!-- Block: JavaScript libraries -->
|
|
|
|
{% block libs %}
|
|
|
|
<script src="{{ base_url }}/assets/javascripts/modernizr.js"></script>
|
|
|
|
{% endblock %}
|
|
|
|
|
2016-12-27 12:56:13 +03:00
|
|
|
<!-- Block: webfonts -->
|
2016-12-28 14:11:04 +03:00
|
|
|
{% block fonts %}
|
|
|
|
{% include "partials/fonts.html" %}
|
2016-12-27 12:56:13 +03:00
|
|
|
{% endblock %}
|
2016-12-15 18:43:40 +03:00
|
|
|
|
2016-12-27 12:56:13 +03:00
|
|
|
<!-- Block: stylesheets -->
|
|
|
|
{% block styles %}
|
2016-12-26 20:26:34 +03:00
|
|
|
|
2016-12-15 18:43:40 +03:00
|
|
|
<!-- Theme-related stylesheets -->
|
|
|
|
<link rel="stylesheet" type="text/css"
|
|
|
|
href="{{ base_url }}/assets/stylesheets/application.css" />
|
|
|
|
|
2016-12-18 15:29:03 +03:00
|
|
|
<!-- Extra color palette -->
|
2016-12-17 14:53:24 +03:00
|
|
|
{% if config.extra.palette %}
|
|
|
|
<link rel="stylesheet" type="text/css"
|
2016-12-18 15:29:03 +03:00
|
|
|
href="{{ base_url }}/assets/stylesheets/application.palette.css" />
|
2016-12-17 14:53:24 +03:00
|
|
|
{% endif %}
|
|
|
|
|
2016-12-15 18:43:40 +03:00
|
|
|
<!-- Custom stylesheets -->
|
|
|
|
{% for path in extra_css %}
|
|
|
|
<link rel="stylesheet" type="text/css" href="{{ path }}" />
|
|
|
|
{% endfor %}
|
|
|
|
{% endblock %}
|
|
|
|
|
|
|
|
<!-- 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
|
|
|
|
2016-12-28 16:47:53 +03:00
|
|
|
<!-- Inline SVGs -->
|
|
|
|
{% include "partials/svgs.html" %}
|
|
|
|
|
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">
|
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-28 14:11:04 +03:00
|
|
|
<!-- Edit button, if URL was defined -->
|
|
|
|
{% if config.edit_uri %}
|
|
|
|
<a href="{{ page.edit_url }}" title="Edit this page"
|
2016-12-28 14:24:42 +03:00
|
|
|
class="md-icon md-content__edit">edit</a>
|
2016-12-28 14:11:04 +03:00
|
|
|
{% endif %}
|
|
|
|
|
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
|
|
|
|
2016-12-15 20:29:46 +03:00
|
|
|
<!--
|
|
|
|
This is a nasty hack that checks 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 id=" in page.content %}
|
|
|
|
<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 }}
|
2016-09-23 12:56:25 +03:00
|
|
|
{% 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 %}
|
|
|
|
{% include "partials/footer.html" %}
|
|
|
|
{% endblock %}
|
2016-08-07 19:01:56 +03:00
|
|
|
</div>
|
2016-01-29 01:27:15 +03:00
|
|
|
|
2016-12-15 18:43:40 +03:00
|
|
|
<!-- Block: extension- and theme-related JavaScript -->
|
|
|
|
{% block scripts %}
|
|
|
|
{% for extension in config.markdown_extensions %}
|
|
|
|
|
|
|
|
<!-- MathJax integration -->
|
|
|
|
{% if extension == "pymdownx.arithmatex" %}
|
|
|
|
{% set path = "mathjax/latest/MathJax.js?config=TeX-MML-AM_CHTML" %}
|
|
|
|
<script src="https://cdn.mathjax.org/{{ path }}"></script>
|
|
|
|
{% endif %}
|
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
<!-- Theme-related and custom JavaScript -->
|
|
|
|
<script src="{{ base_url }}/assets/javascripts/application.js"></script>
|
|
|
|
<script>
|
|
|
|
|
|
|
|
/* Configuration for application */
|
|
|
|
var config = {
|
|
|
|
url: {
|
|
|
|
base: "{{ base_url }}",
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
/* Initialize application */
|
|
|
|
var app = new Application(config);
|
|
|
|
app.initialize();
|
|
|
|
</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>
|