<!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('/gitiles') %}{% 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>
