blob: 2242e5741d013f1ee8189a6dc9f00a5cf0ef2735 (
plain) (
tree)
|
|
---
layout: table_wrappers
---
<!DOCTYPE html>
<html lang="{{ site.lang | default: 'en-US' }}">
{% include head.html %}
<body>
<a class="skip-to-main" href="#main-content">Skip to main content</a>
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="svg-link" viewBox="0 0 24 24">
<title>Link</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
<path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
</svg>
</symbol>
<symbol id="svg-search" viewBox="0 0 24 24">
<title>Search</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
<circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
</svg>
</symbol>
<symbol id="svg-menu" viewBox="0 0 24 24">
<title>Menu</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
<line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
</svg>
</symbol>
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
<title>Expand</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
<polyline points="9 18 15 12 9 6"></polyline>
</svg>
</symbol>
<symbol id="svg-doc" viewBox="0 0 24 24">
<title>Document</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
<path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
</svg>
</symbol>
{% include icons/alert.html %}
{% include icons/external_link.html %}
{% include icons/code_copy.html %}
{% if site.enable_switch_color_scheme != false %}
{% include icons/switch_color_scheme.html %}
{% endif %}
{% include icons/custom.html %}
</svg>
<div class="side-bar">
<div class="site-header">
<a href="{{ '/' | relative_url }}" class="site-title lh-tight">{% include title.html %}</a>
<a href="#" id="menu-button" class="site-button">
<svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
</a>
</div>
<nav role="navigation" aria-label="Main" id="site-nav" class="site-nav">
{% include nav/main.html %}
</nav>
{% capture nav_footer_custom %}
{%- include nav_footer_custom.html -%}
{% endcapture %}
{% if nav_footer_custom != "" %}
{{ nav_footer_custom }}
{% else %}
<footer class="site-footer">
This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
</footer>
{% endif %}
</div>
<div class="main" id="top">
<div id="main-header" class="main-header">
{% if site.search_enabled != false %}
{% capture search_placeholder %}{% include search_placeholder_custom.html %}{% endcapture %}
<div class="search">
<div class="search-input-wrap">
<input type="text" id="search-input" class="search-input" tabindex="0" placeholder="{{ search_placeholder | strip_html | strip }}" aria-label="{{ search_placeholder | strip_html| strip }}" autocomplete="off">
<label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
</div>
<div id="search-results" class="search-results"></div>
</div>
{% else %}
<div></div>
{% endif %}
{% include header_custom.html %}
{% if site.aux_links or site.aux_buttons or site.enable_switch_color_scheme == true %}
<nav aria-label="Auxiliary" class="aux-nav">
<ul class="aux-nav-list">
{% for link in site.aux_buttons %}
<span class="site-button">
<a href="{{ link.link }}" class="btn btn-{{ link.color }}">{{ link.title }}
{% if link.logo %}
<img src="{{ link.logo }}" class="site-button-icon"></img>
{% endif %}
{% if link.icon %}
<svg class="site-button-icon">
<use xlink:href="#svg-{{ link.icon }}"></use>
</svg>
</svg>
{% endif %}
</a>
</span>
{% endfor %}
{% for link in site.aux_links %}
<li class="aux-nav-list-item">
<a href="{{ link.last }}" class="site-button"
{% if site.aux_links_new_tab %}
target="_blank" rel="noopener noreferrer"
{% endif %}
>
{{ link.first }}
</a>
</li>
{% endfor %}
{% if site.enable_switch_color_scheme == true %}
<li class="aux-nav-list-item">
<button class="site-button color-scheme-switch-theme-button">
<svg aria-hidden="true" class="site-button-icon"><use href="#svg-{{ site.color_scheme | default: 'light' }}"></use></svg>
</button>
</li>
{% endif %}
</ul>
</nav>
{% endif %}
</div>
<div id="main-content-wrap" class="main-content-wrap">
{% if page.parent and page.url != "/" %}
{% include nav/crumbs.html nodes=nav_page_ancestors %}
{% endif %}
<div id="main-content" class="main-content" role="main">
<header class="page-header" role="banner">
{% if
site.gh_edit_link and
site.gh_edit_link_text and
site.gh_edit_repository and
site.gh_edit_branch and
site.gh_edit_view_mode
%}
<a class="site-button github-edit"
href="{{ site.gh_edit_repository }}/{{ site.gh_edit_view_mode }}/{{ site.gh_edit_branch }}{% if site.gh_edit_source %}/{{ site.gh_edit_source }}{% endif %}/{{ page.path }}"
id="edit-this-page" title="{{ site.gh_edit_link_text }}"><svg xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24">
<use xlink:href="#svg-edit">
</svg></a>
{% endif %}
<h1 class="fs-9">{{ page.title | default: site.title | default: site.github.repository_name }}</h1>
{% if page.alias %}
<h2 class="fmt-0"><span class="fw-300">Also sold as: </span> {{ page.alias }}</h2>
{% endif %}
{% if site.last_edit_timestamp_script == true %}
<ul class="metadata text-small">
<li id="last-modified">Last Modified</li>
<li><a id="contributors" data-jtd-toggle="modal" data-jtd-target="#contributors-modal">Contributor</a>
</li>
</ul>
<div class="modal" data-jtd-modal="contributors-modal" id="contributors-modal">
<div class="modal-content">
<div class="modal-header">
<span class="close">×</span>
<h2>Contributor to this article</h2>
</div>
<ul class="modal-body" id="contributors-modal-list">
</ul>
</div>
</div>
{% endif %}
{% if page.description %}
<h2 class="fs-6 fw-300">{{ page.description }}</h2>
{% endif %}
</header>
<hr>
{% if site.heading_anchors != false %}
{% include vendor/anchor_headings.html html=content beforeHeading="true" anchorBody="<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><use xlink:href=\"#svg-link\"></use></svg>" anchorClass="anchor-heading" anchorAttrs="aria-labelledby=\"%html_id%\"" %}
{% else %}
{{ content }}
{% endif %}
{% unless page.has_toc == false %}
{% include nav/toc.html nodes=nav_page_children %}
{% endunless %}
{% capture footer_custom %}
{%- include footer_custom.html -%}
{% endcapture %}
{% if footer_custom != "" or site.last_edit_timestamp or site.gh_edit_link %}
<hr>
<footer>
{% if site.back_to_top %}
<p><a href="#top" id="back-to-top">{{ site.back_to_top_text }}</a></p>
{% endif %}
{{ footer_custom }}
{% if site.last_edit_timestamp or site.gh_edit_link %}
<div class="d-flex mt-2">
{% if site.last_edit_timestamp and site.last_edit_time_format and page.last_modified_date %}
<p class="text-small text-grey-400 mb-0 mr-2">
Page last modified: <span class="d-inline-block">{{ page.last_modified_date | date: site.last_edit_time_format }}</span>.
</p>
{% endif %}
{% if
site.gh_edit_link and
site.gh_edit_link_text and
site.gh_edit_repository and
site.gh_edit_branch and
site.gh_edit_view_mode
%}
<p class="text-small text-grey-400 mb-0">
<a href="{{ site.gh_edit_repository }}/{{ site.gh_edit_view_mode }}/{{ site.gh_edit_branch }}{% if site.gh_edit_source %}/{{ site.gh_edit_source }}{% endif %}{% if page.collection and site.collections_dir %}/{{ site.collections_dir }}{% endif %}/{{ page.path }}" id="edit-this-page">{{ site.gh_edit_link_text }}</a>
</p>
{% endif %}
</div>
{% endif %}
</footer>
{% endif %}
</div>
</div>
{% if site.search_enabled != false %}
{% if site.search.button %}
<a href="#" id="search-button" class="search-button">
<svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-search"></use></svg>
</a>
{% endif %}
<div class="search-overlay"></div>
{% endif %}
</div>
{%if site.last_edit_timestamp_script and site.gh_owner_name and site.gh_repository_name and page.path %}
<script>
var listOfScannedFilename = [];
async function parseFirstCommit(commit, filename) {
return fetch(commit.url).then((response) => {
return response.json();
}).then(async function (commits) {
var old_filename = commits.files.filter(it => it.filename === filename && it.status === 'renamed').map(it => it.previous_filename);
if (old_filename[0] !== undefined && !listOfScannedFilename.includes(old_filename[0])) {
listOfScannedFilename.push(old_filename[0]);
return fetch("https://api.github.com/repos/{{ site.gh_owner_name }}/{{ site.gh_repository_name }}/commits?path=" + old_filename[0])
.then((response) => {
return response.json();
}).then(async function (commits) {
return parseCommitsList(commits, old_filename);
});
}
});
}
async function parseCommitsList(commits, filename) {
var authors = commits.flatMap(x => [{ ...x.commit.author, ...x.author }, { ...x.commit.committer, ...x.committer }]).map(({ date, ...keepAttrs }) => keepAttrs).filter((value, index, self) =>
index === self.findIndex((t) => (
t.login === value.login
)) && value.login !== "web-flow"
);
var inner = await parseFirstCommit(commits[commits.length - 1], filename);
if (inner) {
inner = inner.filter(it => !authors.map(i => i.login).includes(it.login) && it.login !== "web-flow");
authors.push(...inner);
}
return authors;
}
async function setModifiedDate() {
if (document.getElementById('last-modified')) {
listOfScannedFilename.push("{{ page.path }}");
fetch("https://api.github.com/repos/{{ site.gh_owner_name }}/{{ site.gh_repository_name }}/commits?path={{ page.path }}")
.then((response) => {
return response.json();
})
.then(async function (commits) {
try{
var date = new Date(commits[0]['commit']['committer']['date']);
var modified = date.toLocaleDateString(undefined);
var authors = await parseCommitsList(commits, "{{ page.path }}");
document.getElementById('last-modified').textContent = "Last Modified: " + modified;
document.getElementById('contributors').textContent = authors.length + " " + (authors.length == 1 ? "Contributor" : "Contributors");
document.getElementById('contributors-modal-list').innerHTML = authors.map(x => "<li><a href='" + x.html_url + "'><img class='avatar' src='" + x.avatar_url + "'><span>" + x.name + "</span<</a></li>").join('');
} catch (err) {
document.getElementById('last-modified').textContent = "Sorry, last modified not currently available";
document.getElementById('contributors').textContent = "Contributors";
document.getElementById('contributors-modal-list').innerHTML = "<li>Sorry, list not currently available</li>";
}
});
}
}
window.addEventListener('load', function () {
setModifiedDate()
});
</script>
{% endif %}
{% if site.mermaid %}
<script>
var config = {% include mermaid_config.js %};
mermaid.initialize(config);
window.mermaid.init(undefined, document.querySelectorAll('.language-mermaid'));
</script>
{% endif %}
</body>
</html>
|