summaryrefslogblamecommitdiffstats
path: root/_layouts/default.html
blob: 2c060d68a7f868c3eb353f88da4d9342e1b05207 (plain) (tree)
1
2
3
4
5
6
7
8
9








                                                









                                      
                                                                       


                                                                 

                                                                                                                                                                                                                        



                                                

                                                                                                                                                                                                                          



                                              

                                                                                                                                                                                                                        



                                                     
                                                                                                                                                                                                                                 




                                                     

                                                                                                                                                                                                                        


                                  
                                          



                                                     

                                   
 


                                                                                                 




                                                     
                                                       
                                                                                      
          
          


                                                                            









                                                                                                                                    




                                              











                                                                                                                                                                                                                            

                                      




























                                                                                            






                                                             









                                                                                                                                         

                                                          
                                              














                                                                                                                                                                                        
                                          








                                                                                                             
                                                                                                                  

                 
                                                                                         





                                                                  
 
                   
                  







                                                             










                                                                                                                                                                                                                                                                      

                                                                                     




                                                                                    
 
                               
 





















                                                                                                                                                                                                                                                                                                                                               
 

            
 





                                                                                          
 


                                        
 


                                                                                                          
 














                                                                                                                                             
     





                                                                                                                                                                                                    
 
                                                                                
 
 


                                                                                                             
 
       
 

                     
     












                                                                                                                                 
 

                                                                                                                                                
 























                                                                                                                                                                                                                             
---
layout: table_wrappers
---

<!DOCTYPE html>

<html lang="{{ site.lang | default: 'en-US' }}">
{% include head.html %}
<body>
  {% if site.enable_rainbow == true %}
  <style>
    .rainbow-button {
      font-size: 150%;
    }
    .rainbow-button:hover {
      background-image: none;
    }
  </style>
  {% endif %}
  <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>
      {% if site.enable_rainbow == true %}
      <a class="site-button rainbow-button" href="#">
        🏳️‍🌈
      </a>
      {% endif %}
      <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_rainbow == true %}
            <li class="aux-nav-list-item">
              <a class="site-button rainbow-button" href="#">
                🏳️‍🌈
              </a>
            </li>
            {% endif %}
            {% 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">&times;</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>