2016-08-07 18:01:56 +02:00
|
|
|
<!--
|
2017-01-06 19:11:18 +01:00
|
|
|
Copyright (c) 2016-2017 Martin Donath <martin.donath@squidfunk.com>
|
2016-08-07 18:01:56 +02: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 00:31:37 +01:00
|
|
|
{% import "partials/language.html" as lang %}
|
2017-01-06 19:18:17 +01:00
|
|
|
|
2016-01-28 23:27:15 +01:00
|
|
|
<!DOCTYPE html>
|
2017-04-22 14:51:41 +02:00
|
|
|
<html lang="{{ lang.t('language') }}" class="no-js">
|
2016-01-28 23:27:15 +01:00
|
|
|
<head>
|
|
|
|
|
2017-09-01 10:07:29 +02:00
|
|
|
<!-- Metatags -->
|
2016-12-15 16:43:40 +01:00
|
|
|
{% block site_meta %}
|
|
|
|
<meta charset="utf-8" />
|
2016-12-19 06:44:52 +01:00
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
2016-12-15 16:43:40 +01:00
|
|
|
|
2017-06-21 10:44:40 +02:00
|
|
|
<!-- Keep for compatibility, see http://bit.ly/2tMB6ag -->
|
|
|
|
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
|
|
|
|
2017-03-11 14:07:07 +01:00
|
|
|
<!-- Page description -->
|
|
|
|
{% if page and page.meta.description %}
|
|
|
|
<meta name="description"
|
|
|
|
content="{{ page.meta.description | first }}" />
|
|
|
|
{% elif config.site_description %}
|
2016-12-15 16:43:40 +01: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 14:07:07 +01:00
|
|
|
<!-- Page author -->
|
|
|
|
{% if page and page.meta.author %}
|
|
|
|
<meta name="author" content="{{ page.meta.author | first }}" />
|
|
|
|
{% elif config.site_author %}
|
2016-12-15 16:43:40 +01: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 17:56:34 +01:00
|
|
|
href="{{ base_url }}/assets/images/favicon.png">
|
2016-12-15 16:43:40 +01:00
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
<!-- Generator banner -->
|
2017-02-01 23:56:57 +01:00
|
|
|
<meta name="generator"
|
2017-03-11 14:07:07 +01:00
|
|
|
content="mkdocs-{{ mkdocs_version }}, $md-name$-$md-version$" />
|
2016-12-15 16:43:40 +01:00
|
|
|
{% endblock %}
|
|
|
|
|
2017-09-01 10:07:29 +02:00
|
|
|
<!-- Site title -->
|
2016-12-15 16:43:40 +01:00
|
|
|
{% block htmltitle %}
|
2017-03-11 14:07:07 +01: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 16:43:40 +01:00
|
|
|
<title>{{ page.title }} - {{ config.site_name }}</title>
|
|
|
|
{% else %}
|
|
|
|
<title>{{ config.site_name }}</title>
|
|
|
|
{% endif %}
|
|
|
|
{% endblock %}
|
|
|
|
|
2017-09-01 10:07:29 +02:00
|
|
|
<!-- JavaScript libraries -->
|
2016-12-15 16:43:40 +01:00
|
|
|
{% block libs %}
|
|
|
|
<script src="{{ base_url }}/assets/javascripts/modernizr.js"></script>
|
|
|
|
{% endblock %}
|
|
|
|
|
2017-09-01 10:07:29 +02:00
|
|
|
<!-- Stylesheets -->
|
2017-02-10 16:43:32 +01:00
|
|
|
{% 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 %}
|
|
|
|
|
2017-09-01 10:07:29 +02:00
|
|
|
<!-- Webfonts -->
|
2016-12-28 12:11:04 +01:00
|
|
|
{% block fonts %}
|
2017-03-11 18:36:56 +01:00
|
|
|
<!-- TODO: remove the second check in the next major version -->
|
|
|
|
{% if config.extra.font != false and config.extra.font != "none" %}
|
2017-01-13 00:31:37 +01:00
|
|
|
{% set text = config.extra.get("font", {}).text | default("Roboto") %}
|
|
|
|
{% set code = config.extra.get("font", {}).code
|
|
|
|
| default("Roboto Mono") %}
|
2017-06-01 22:17:08 +02:00
|
|
|
{% set font = text + ":300,400,400i,700|" + code | replace(" ", "+") %}
|
2017-01-13 00:31:37 +01:00
|
|
|
<link rel="stylesheet" type="text/css"
|
2017-02-26 15:06:50 +01:00
|
|
|
href="https://fonts.googleapis.com/css?family={{ font }}" />
|
2017-01-13 00:31:37 +01: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 10:56:13 +01:00
|
|
|
{% endblock %}
|
2016-12-15 16:43:40 +01:00
|
|
|
|
2017-02-10 16:43:32 +01:00
|
|
|
<!-- Custom stylesheets -->
|
|
|
|
{% for path in extra_css %}
|
|
|
|
<link rel="stylesheet" type="text/css" href="{{ path }}" />
|
|
|
|
{% endfor %}
|
2016-12-15 16:43:40 +01:00
|
|
|
|
2017-09-01 10:07:29 +02:00
|
|
|
<!-- Custom front matter -->
|
2016-12-17 12:53:24 +01:00
|
|
|
{% block extrahead %}{% endblock %}
|
2016-01-28 23:27:15 +01:00
|
|
|
</head>
|
2016-12-17 12:53:24 +01:00
|
|
|
|
2016-12-18 13:29:03 +01:00
|
|
|
<!-- Integrate color palette, if defined -->
|
2016-12-17 12:53:24 +01: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 13:29:03 +01:00
|
|
|
<body data-md-color-primary="{{ primary }}"
|
|
|
|
data-md-color-accent="{{ accent }}">
|
2016-12-17 12:53:24 +01:00
|
|
|
{% else %}
|
|
|
|
<body>
|
|
|
|
{% endif %}
|
2016-01-28 23:27:15 +01:00
|
|
|
|
2017-01-13 00:31:37 +01: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 14:47:53 +01:00
|
|
|
|
2016-01-28 23:27:15 +01:00
|
|
|
<!-- State toggles -->
|
2016-12-15 15:55:40 +01: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-28 23:27:15 +01:00
|
|
|
|
|
|
|
<!-- Overlay for expanded drawer -->
|
2016-12-26 14:47:50 +01:00
|
|
|
<label class="md-overlay" data-md-component="overlay" for="drawer"></label>
|
2016-01-28 23:27:15 +01:00
|
|
|
|
2016-08-07 18:01:56 +02:00
|
|
|
<!-- Application header -->
|
2016-12-19 07:20:09 +01:00
|
|
|
{% block header %}
|
|
|
|
{% include "partials/header.html" %}
|
|
|
|
{% endblock %}
|
2016-01-28 23:27:15 +01:00
|
|
|
|
2016-08-07 18:01:56 +02:00
|
|
|
<!-- Container, necessary for web-application context -->
|
|
|
|
<div class="md-container">
|
2017-01-26 21:10:52 +01:00
|
|
|
{% set feature = config.extra.get("feature", {}) %}
|
2017-10-11 18:31:46 +02:00
|
|
|
|
|
|
|
<!-- Hero banner -->
|
|
|
|
{% if feature.hero %}
|
|
|
|
{% include "partials/hero.html" %}
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
<!-- Tabs with outline -->
|
2017-01-26 21:10:52 +01:00
|
|
|
{% if feature.tabs %}
|
|
|
|
{% include "partials/tabs.html" %}
|
|
|
|
{% endif %}
|
2016-02-05 15:34:19 +01:00
|
|
|
|
2016-08-07 18:01:56 +02:00
|
|
|
<!-- Main container -->
|
|
|
|
<main class="md-main">
|
2016-12-26 14:47:50 +01:00
|
|
|
<div class="md-main__inner md-grid" data-md-component="container">
|
2016-01-28 23:27:15 +01:00
|
|
|
|
2017-09-01 10:07:29 +02:00
|
|
|
<!-- Navigation -->
|
2016-12-15 16:43:40 +01:00
|
|
|
{% block site_nav %}
|
|
|
|
|
|
|
|
<!-- Main navigation -->
|
|
|
|
{% if nav %}
|
|
|
|
<div class="md-sidebar md-sidebar--primary"
|
2016-12-26 14:47:50 +01:00
|
|
|
data-md-component="navigation">
|
2016-12-15 16:43:40 +01:00
|
|
|
<div class="md-sidebar__scrollwrap">
|
|
|
|
<div class="md-sidebar__inner">
|
|
|
|
{% include "partials/nav.html" %}
|
|
|
|
</div>
|
2016-09-23 11:56:25 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
2016-12-15 16:43:40 +01:00
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
<!-- Table of contents -->
|
|
|
|
{% if page.toc %}
|
|
|
|
<div class="md-sidebar md-sidebar--secondary"
|
2016-12-26 14:47:50 +01:00
|
|
|
data-md-component="toc">
|
2016-12-15 16:43:40 +01:00
|
|
|
<div class="md-sidebar__scrollwrap">
|
|
|
|
<div class="md-sidebar__inner">
|
|
|
|
{% include "partials/toc.html" %}
|
|
|
|
</div>
|
2016-09-23 11:56:25 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
2016-12-15 16:43:40 +01:00
|
|
|
{% endif %}
|
|
|
|
{% endblock %}
|
2016-01-28 23:27:15 +01:00
|
|
|
|
2016-08-07 18:01:56 +02:00
|
|
|
<!-- Article -->
|
2016-09-23 20:26:27 +02:00
|
|
|
<div class="md-content">
|
|
|
|
<article class="md-content__inner md-typeset">
|
2016-09-11 19:00:53 +02:00
|
|
|
|
2017-09-01 10:07:29 +02:00
|
|
|
<!-- Content -->
|
2016-09-23 11:56:25 +02:00
|
|
|
{% block content %}
|
2016-09-11 19:00:53 +02:00
|
|
|
|
2017-03-01 15:43:49 +01:00
|
|
|
<!-- Edit button, if URL was defined -->
|
|
|
|
{% if config.edit_uri %}
|
|
|
|
<a href="{{ page.edit_url }}"
|
|
|
|
title="{{ lang.t('edit.link.title') }}"
|
2017-08-29 17:23:30 +02:00
|
|
|
class="md-icon md-content__icon"><!-- edit --></a>
|
2017-03-01 15:43:49 +01:00
|
|
|
{% endif %}
|
|
|
|
|
2016-12-15 18:29:46 +01:00
|
|
|
<!--
|
2017-02-08 23:13:13 +01: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 18:29:46 +01:00
|
|
|
-->
|
2017-02-08 23:13:13 +01:00
|
|
|
{% if not "\x3ch1" in page.content %}
|
2016-12-15 18:29:46 +01:00
|
|
|
<h1>{{ page.title | default(config.site_name, true)}}</h1>
|
|
|
|
{% endif %}
|
|
|
|
|
2016-09-23 11:56:25 +02:00
|
|
|
<!-- Content -->
|
2016-12-15 16:43:40 +01:00
|
|
|
{{ page.content }}
|
2017-02-26 22:09:51 +01:00
|
|
|
|
2017-03-11 14:07:07 +01:00
|
|
|
<!-- Source files -->
|
|
|
|
{% block source %}
|
|
|
|
{% if page.meta.source %}
|
2017-06-01 22:17:08 +02:00
|
|
|
<h2 id="__source">{{ lang.t("meta.source") }}</h2>
|
2017-03-11 14:07:07 +01:00
|
|
|
{% set path = (page.meta.path | default([""]) | first) %}
|
2017-02-26 22:09:51 +01:00
|
|
|
{% for file in page.meta.source %}
|
2017-04-22 14:31:29 +02:00
|
|
|
<a href="{{ [config.repo_url, path, file] | join('/') }}"
|
2017-04-05 11:32:45 +02:00
|
|
|
title="{{ file }}" class="md-source-file">
|
2017-03-11 14:07:07 +01:00
|
|
|
{{ file }}
|
|
|
|
</a>
|
2017-02-26 22:09:51 +01:00
|
|
|
{% endfor %}
|
2017-03-11 14:07:07 +01:00
|
|
|
{% endif %}
|
|
|
|
{% endblock %}
|
2016-09-23 11:56:25 +02:00
|
|
|
{% endblock %}
|
2017-02-24 22:53:12 +01:00
|
|
|
|
|
|
|
<!-- Disqus integration -->
|
2017-03-11 14:07:07 +01:00
|
|
|
{% block disqus %}
|
|
|
|
{% if config.extra.disqus and not page.is_homepage %}
|
2017-06-01 22:17:08 +02:00
|
|
|
<h2 id="__comments">{{ lang.t("meta.comments") }}</h2>
|
2017-03-11 14:07:07 +01:00
|
|
|
{% include "partials/disqus.html" %}
|
|
|
|
{% endif %}
|
|
|
|
{% endblock %}
|
2016-08-07 18:01:56 +02:00
|
|
|
</article>
|
2016-01-28 23:27:15 +01:00
|
|
|
</div>
|
|
|
|
</div>
|
2016-08-07 18:01:56 +02:00
|
|
|
</main>
|
|
|
|
|
|
|
|
<!-- Application footer -->
|
2016-12-15 16:43:40 +01:00
|
|
|
{% block footer %}
|
2017-01-06 19:18:17 +01:00
|
|
|
{% include "partials/footer.html" %}
|
2016-12-15 16:43:40 +01:00
|
|
|
{% endblock %}
|
2016-08-07 18:01:56 +02:00
|
|
|
</div>
|
2016-01-28 23:27:15 +01:00
|
|
|
|
2017-09-01 10:07:29 +02:00
|
|
|
<!-- Theme-related JavaScript -->
|
2016-12-15 16:43:40 +01:00
|
|
|
{% block scripts %}
|
|
|
|
<script src="{{ base_url }}/assets/javascripts/application.js"></script>
|
2017-06-01 00:40:10 +02:00
|
|
|
|
|
|
|
<!-- Load additional languages for search -->
|
2017-06-01 22:17:08 +02:00
|
|
|
{% set languages = lang.t("search.languages").split(",") %}
|
2017-06-01 00:40:10 +02: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 12:29:34 +02:00
|
|
|
{% if language == "jp" %}
|
|
|
|
<script src="{{ path }}/tinyseg.js"></script>
|
|
|
|
{% endif %}
|
2017-06-01 00:40:10 +02: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 16:43:40 +01:00
|
|
|
<script>
|
2017-05-16 02:31:10 +02:00
|
|
|
app.initialize({ url: { base: "{{ base_url }}" } });
|
2016-12-15 16:43:40 +01:00
|
|
|
</script>
|
|
|
|
{% for path in extra_javascript %}
|
|
|
|
<script src="{{ path }}"></script>
|
|
|
|
{% endfor %}
|
|
|
|
{% endblock %}
|
|
|
|
|
2017-09-01 10:07:29 +02:00
|
|
|
<!-- Analytic scripts -->
|
2016-12-15 16:43:40 +01:00
|
|
|
{% block analytics %}
|
|
|
|
{% if config.google_analytics %}
|
|
|
|
<script>
|
2016-12-17 12:53:24 +01: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 10:56:13 +01:00
|
|
|
var action = item.getAttribute("data-md-action") || "follow";
|
2016-12-17 12:53:24 +01: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 16:43:40 +01:00
|
|
|
</script>
|
2016-12-15 15:55:40 +01:00
|
|
|
{% endif %}
|
2016-12-15 16:43:40 +01:00
|
|
|
{% endblock %}
|
2016-01-28 23:27:15 +01:00
|
|
|
</body>
|
2016-09-23 11:56:25 +02:00
|
|
|
</html>
|