<!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="{{ SITEURL }}/{{ 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="{{ SITEURL }}/{{ ASSET_URL }}" type="text/javascript"></script>
  {% endassets%}

  <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.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-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-500px' %}
  {% elif temp.startswith('behance.net') %}{% set class = 'fa-behance' %}
  {% elif temp.startswith('bitbucket.org') %}{% set class = 'fa-bitbucket' %}
  {% elif temp.startswith('codepen.io') %}{% set class = 'fa-codepen' %}
  {% elif temp.startswith('delicious.com') %}{% set class = 'fa-delicious' %}
  {% elif temp.startswith('deviantart.com') %}{% set class = 'fa-deviantart' %}
  {% elif temp.startswith('facebook.com') %}{% set class = 'fa-facebook' %}
  {% elif temp.startswith('flickr.com') %}{% set class = 'fa-flickr' %}
  {% elif temp.startswith('foursquare.com') %}{% set class = 'fa-foursquare' %}
  {% elif temp.startswith('github.com') %}{% set class = 'fa-github' %}
  {% elif temp.startswith('gitlab.com') %}{% set class = 'fa-gitlab' %}
  {% elif temp.startswith('instagram.com') %}{% set class = 'fa-instagram' %}
  {% elif temp.startswith('last.fm') %}{% set class = 'fa-lastfm' %}
  {% elif temp.startswith('linkedin.com') %}{% set class = 'fa-linkedin' %}
  {% elif temp.startswith('news.ycombinator.com') %}{% set class = 'fa-hacker-news' %}
  {% elif temp.startswith('pinterest.com') %}{% set class = 'fa-pinterest' %}
  {% elif temp.startswith('plus.google.com') %}{% set class = 'fa-google-plus-official' %}
  {% elif temp.startswith('reddit.com') %}{% set class = 'fa-reddit' %}
  {% elif temp.startswith('snapchat.com') %}{% set class = 'fa-snapchat-ghost' %}
  {% elif temp.startswith('spotify.com') %}{% set class = 'fa-spotify' %}
  {% elif temp.startswith('stackoverflow.com') %}{% set class = 'fa-stack-overflow' %}
  {% elif temp.startswith('steamcommunity.com') %}{% set class = 'fa-steam' %}
  {% elif temp.startswith('soundcloud.com') %}{% set class = 'fa-soundcloud' %}
  {% elif temp.startswith('twitch.tv') %}{% set class = 'fa-twitch' %}
  {% elif temp.startswith('twitter.com') %}{% set class = 'fa-twitter' %}
  {% elif temp.startswith('vimeo.com') %}{% set class = 'fa-vimeo-square' %}
  {% elif temp.startswith('vine.co') %}{% set class = 'fa-vine' %}
  {% elif temp.startswith('youtube.com') %}{% set class = 'fa-youtube' -%}
  {% elif temp.startswith('keybase.io') %}{% set class = 'fa-key' -%}

  {%- elif '.stackexchange.com' in temp %}{% set class = 'fa-stack-exchange' %}
  {% elif '.tumblr.com' in temp %}{% set class = 'fa-tumblr' %}
  {% endif -%}

  <i class="fa {{ class }} fa-lg"></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>
      <p>{{ TAGLINE }}</p>
      <div class="social">
        {% for name, link in SOCIAL %}
          {{ display_link(name, link, "") }}
        {% endfor %}
      </div>
      <ul>
        {% for name, link in LINKS %}
        <li>{{ display_link(name, link, name) }}</li>
        {% endfor %}
      </ul>
    </div>
  </aside>

  <main id="main">
    <header>
      {% block header %}
      <p id="header">
      <a href="{{ SITEURL }}">Home</a>

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

    {% block content %}
    {% endblock %}

    {% block footer %}
    {% endblock %}

    <div id="ending_message">
        <p>&copy; {{ AUTHOR }}. 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>
