<!DOCTYPE html>
<html lang="{{ DEFAULT_LANG }}">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta name="author" content="{{ AUTHOR }}">
  <meta name="description" content="{% block description %}Posts by {{ AUTHOR }}{% endblock %}">

  {% block base %}{% endblock %}
  {% assets filters="pyscss,cssmin", output="css/styles.%(version)s.min.css", "css/style.scss", "css/pygments.css" %}
  <link rel="stylesheet" type="text/css" href="{{ THEMEURL }}/{{ ASSET_URL }}">
  {% endassets %}

  {% assets filters="slimit", output="js/scripts.%(version)s.min.js", "js/lw-timeago/lw-timeago.js", "js/scroll.js", "js/email.js" %}
  <script src="{{ THEMEURL }}/{{ ASSET_URL }}" type="text/javascript"></script>
  {% endassets%}

  <link href="https://use.fontawesome.com/releases/v5.8.2/css/all.css" rel="stylesheet">

  {% if FEED_ALL_ATOM %}
  <link href="{{ FEED_DOMAIN }}/{{ FEED_ALL_ATOM }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Full Atom Feed" />
  {% endif %}
  {% if FEED_ALL_RSS %}
  <link href="{{ FEED_DOMAIN }}/{{ FEED_ALL_RSS }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} Full RSS Feed" />
  {% endif %}

  {% block head %}
  <meta name="keywords" content="
    {%- if GLOBAL_KEYWORDS -%}
      {{ GLOBAL_KEYWORDS|join(', ') }}
      {%- if tags -%}{{', '}}{%- endif -%}
    {%- endif -%}
    {{tags|join(', ', attribute='0') }}">
  {% endblock %}

  <title>{% block title %}{{ SITENAME }}{% endblock %}</title>

  {% include "modules/analytics.html" %}
</head>

{% macro get_icon(link) %}
  {%- set class = 'fa-external-link-square' -%}

  {# Attempt to normalize link URLs #}
  {%- set temp = link|lower|replace('http://', '')|replace('https://', '')|replace('www.', '') -%}

  {# Choosing a specific link icon #}
  {%-  if temp.startswith('bitcoin:') %}{% set class = 'fa-btc' %}
  {% elif temp.startswith('irc:') %}{% set class = 'fa-comments' %}
  {% elif temp.startswith('mailto:') %}{% set class = 'fa fa-envelope' %}
  {% elif temp.startswith('skype:') %}{% set class = 'fa-skype' -%}

  {%- elif temp.endswith('.pdf') or
           temp.endswith('.txt') or
           temp.endswith('.doc') or
           temp.endswith('.docx') %}{% set class = 'fa-file-text' -%}

  {%- elif temp.startswith('500px.com') %}{% set class = 'fa fa-500px fa-lg' %}
  {% elif temp.startswith('behance.net') %}{% set class = 'fa behance fa-lg' %}
  {% elif temp.startswith('bitbucket.org') %}{% set class = 'fa bitbucket fa-lg' %}
  {% elif temp.startswith('codepen.io') %}{% set class = 'fa codepen fa-lg' %}
  {% elif temp.startswith('delicious.com') %}{% set class = 'fa delicious fa-lg' %}
  {% elif temp.startswith('deviantart.com') %}{% set class = 'fa deviantart fa-lg' %}
  {% elif temp.startswith('facebook.com') %}{% set class = 'fa facebook fa-lg' %}
  {% elif temp.startswith('flickr.com') %}{% set class = 'fa flickr fa-lg' %}
  {% elif temp.startswith('foursquare.com') %}{% set class = 'fa foursquare fa-lg' %}
  {% elif temp.startswith('github.com') %}{% set class = 'fa github fa-lg' %}
  {% elif temp.startswith('gitlab.com') %}{% set class = 'fa gitlab fa-lg' %}
  {% elif temp.startswith('instagram.com') %}{% set class = 'fa instagram fa-lg' %}
  {% elif temp.startswith('last.fm') %}{% set class = 'fa lastfm fa-lg' %}
  {% elif temp.startswith('linkedin.com') %}{% set class = 'fa linkedin fa-lg' %}
  {% elif temp.startswith('news.ycombinator.com') %}{% set class = 'fa hacker-news fa-lg' %}
  {% elif temp.startswith('pinterest.com') %}{% set class = 'fa pinterest fa-lg' %}
  {% elif temp.startswith('plus.google.com') %}{% set class = 'fa google-plus-official fa-lg' %}
  {% elif temp.startswith('reddit.com') %}{% set class = 'fa reddit fa-lg' %}
  {% elif temp.startswith('snapchat.com') %}{% set class = 'fa snapchat-ghost fa-lg' %}
  {% elif temp.startswith('spotify.com') %}{% set class = 'fa spotify fa-lg' %}
  {% elif temp.startswith('stackoverflow.com') %}{% set class = 'fa stack-overflow fa-lg' %}
  {% elif temp.startswith('steamcommunity.com') %}{% set class = 'fa steam fa-lg' %}
  {% elif temp.startswith('soundcloud.com') %}{% set class = 'fa soundcloud fa-lg' %}
  {% elif temp.startswith('twitch.tv') %}{% set class = 'fa twitch fa-lg' %}
  {% elif temp.startswith('twitter.com') %}{% set class = 'fa twitter fa-lg' %}
  {% elif temp.startswith('vimeo.com') %}{% set class = 'fa vimeo-square fa-lg' %}
  {% elif temp.startswith('vine.co') %}{% set class = 'fa vine fa-lg' %}
  {% elif temp.startswith('youtube.com') %}{% set class = 'fa youtube fa-lg' -%}
  {% elif temp.startswith('keybase.io') %}{% set class = 'fa key fa-lg' -%}
  {% elif temp.endswith('/gitles') %}{% set class = 'fas fa-code-branch' %}

  {%- elif '.stackexchange.com' in temp %}{% set class = 'fa fa-stack-exchange fa-lg' %}
  {% elif '.tumblr.com' in temp %}{% set class = 'fa fa-tumblr fa-lg' %}
  {% elif 'debian.org' in temp %}{% set class = 'fab fa-linux' %}
  {% endif -%}

<i class="{{ class }}" style="font-size:1.5em"></i>
{%- endmacro -%}

{%- macro display_link(name, link, text) -%}
  {%- if MANGLE_EMAILS and link.startswith('mailto:') -%}
  <a data-email="{{ link|reverse }}"{% if not text %} data-title="{{ name }}"{% endif %} title="You need javascript enabled to view this email" class="email" target="_blank" rel="noopener noreferrer">{{ text }}{{ get_icon(link) }}</a>
  {%- else -%}
  <a href="{{ link }}"{% if not text %} title="{{ name }}"{% endif %} target="_blank" rel="noopener noreferrer">{{ text }}{{ get_icon(link) }}</a>
  {%- endif -%}
{%- endmacro -%}

<body>
  <aside>
    <div id="user_meta">
      <a href="{{ SITEURL }}">
        {% if USER_LOGO_URL %}
        <img src="{{ USER_LOGO_URL }}" id="logo">
        {% endif %}
      </a>
      <h2><a href="{{ SITEURL }}" class="nohover">{{ SITENAME }}</a></h2>
      {{ TAGLINE }}
      {% if SOCIAL|length > 1 %}
      <div class="social">
        {% for name, link in SOCIAL %}
        {{ display_link(name, link, "") }}
        {% endfor %}
      </div>
      {% endif %}
      {% if LINKS|length > 1 %}
      <ul>
        {% for name, link in LINKS %}
        <li>{{ display_link(name, link, name) }}</li>
        {% endfor %}
      </ul>
      {% endif %}
    </div>
  </aside>

  <main id="main">
    <header>
      {% block header %}
      <p id="header">
      {% if DISPLAY_PAGES_ON_MENU %}
      {% for p in pages %}
      {% if p.url != "index.html" %}
      <a href="{{ SITEURL }}/{{ p.url }}">{{ p.title }}</a>&nbsp;&#124;
      {% endif %}
      {% endfor %}
      {% endif %}
      {% if INDEX_SAVE_AS and INDEX_SAVE_AS != "index.html" %}
      <a href="{{ SITEURL }}/{{ INDEX_LINK_URL }}">Blog</a>&nbsp;&#124;
      {% endif %}
      {% if FEED_ALL_ATOM %}
      <a href="{{ FEED_DOMAIN }}/{{ FEED_ALL_ATOM }}">Atom Feed</a>&nbsp;&#124;
      {% endif %}
      {% if FEED_ALL_RSS %}
      <a href="{{ FEED_DOMAIN }}/{{ FEED_ALL_RSS }}">RSS Feed</a>&nbsp;&#124;
      {% endif %}
      {% for title, link in MENUITEMS %}
      <a href="{{ SITEURL }}/{{ link }}">{{ title }}</a>
      {% if not loop.last %}&#124;{% endif %}
      {% endfor %}
      </p>
      {% endblock header %}
      {% block subheader %}{% include "modules/blogsubheader.html" %}{% endblock subheader %}
    </header>

    {% block content %}
    {% endblock %}

    {% block footer %}
    {% endblock %}

    <div id="ending_message">
        <p>{{ SITENAME }}. Built using <a href="http://getpelican.com">Pelican</a>. Theme is <a href="https://github.com/pR0Ps/pelican-subtle">subtle</a> by <a href="http://cmetcalfe.ca">Carey Metcalfe</a>. Based on <a href="https://github.com/giulivo/pelican-svbhack">svbhack</a> by Giulio Fidente.</p>
    </div>
  </main>

  {% block scripts %}
  <script type="text/javascript">
    window.addEventListener('load', skipHeader)
  </script>

  {% if MANGLE_EMAILS %}
  <script type="text/javascript">
  window.addEventListener('load', unmangleEmail)
  </script>
  {% endif %}
  {% endblock scripts %}
</body>
</html>
