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

<head>
  {% if SERVER_LESS %}
  <link rel="stylesheet" type="text/css" href="{{ SITEURL }}/theme/css/style.css">
  {% else %}
  <link rel="stylesheet/less" type="text/css" href="{{ SITEURL }}/theme/css/style.less">
  <script src="//cdnjs.cloudflare.com/ajax/libs/less.js/1.6.1/less.min.js" type="text/javascript"></script>
  {% endif %}

  <link rel="stylesheet" type="text/css" href="{{ SITEURL }}/theme/css/pygments.css">
  <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=PT+Sans|PT+Serif|PT+Mono">
  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css" rel="stylesheet">

  <meta charset="utf-8" />
  <meta name="viewport" id="viewport" content="width=device-width, initial-scale=1.0">
  <meta name="author" content="{{ AUTHOR }}">
  <meta name="description" content="Posts and writings by {{ AUTHOR }}">

  {% if GOOGLE_PLUS_URL %}
  <link rel="author" href="{{ GOOGLE_PLUS_URL }}?rel=author">
  {% endif %}

  {% 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>

<body>
  <aside>
    <div id="user_meta">
      <a href="{{ SITEURL }}">
        {% if USER_LOGO_URL %}
        <img src="{{ USER_LOGO_URL }}" alt="logo" id="logo">
        {% else %}
        <img src="{{ SITEURL }}/theme/images/logo.png" alt="logo" id="logo">
        {% endif %}
      </a>
      <h2><a href="{{ SITEURL }}" class="nohover">{{ AUTHOR }}</a></h2>
      <p>{{ TAGLINE }}</p>
      <ul>
        {% for name, link in LINKS %}
        <li><a href="{{ link }}" target="_blank">{{ name }}<i class="fa fa-external-link-square fa-lg"></i></a></li>
        {% endfor %}

        {% for name, link in SOCIAL %}

        {% set temp = link|lower|replace('http://', '')|replace('https://', '') %}
        {% set class = 'fa-external-link-square' %}

        {% if MANGLE_EMAILS and temp.startswith('mailto:') %}
        <li><a data-email="{{ link|reverse }}" title="You need javascript enabled to view this email" href="#" class="email" target="_blank">{{ name }}<i class="fa fa-envelope fa-lg"></i></a></li>
        {% else %}

        {# Choosing a specific link icon #}
        {%   if temp.startswith('bitbucket.org') %}{% set class = 'fa-bitbucket' %}
        {% elif temp.startswith('facebook.com') %}{% set class = 'fa-facebook' %}
        {% elif temp.startswith('github.com') %}{% set class = 'fa-github' %}
        {% elif temp.startswith('linkedin.com') %}{% set class = 'fa-linkedin' %}
        {% elif temp.startswith('pinterest.com') %}{% set class = 'fa-pinterest' %}
        {% elif temp.startswith('plus.google.com') %}{% set class = 'fa-google-plus' %}
        {% elif temp.startswith('stackoverflow.com') %}{% set class = 'fa-stack-overflow' %}
        {% elif temp.startswith('twitter.com') %}{% set class = 'fa-twitter' %}
        {% elif temp.startswith('vimeo.com') %}{% set class = 'fa-vimeo-square' %}
        {% elif temp.startswith('youtube.com') %}{% set class = 'fa-youtube' %}
        
        {% elif temp.endswith('.pdf') %}{% set class = 'fa-file-text' %}
        
        {% elif '.stackexchange.com' in temp %}{% set class = 'fa-stack-exchange' %}
        {% elif '.tumblr.com' in temp %}{% set class = 'fa-tumblr' %}
        
        {% elif temp.startswith('bitcoin:') %}{% set class = 'fa-bitcoin' %}
        {% elif temp.startswith('irc:') %}{% set class = 'fa-comments' %}
        {% elif temp.startswith('mailto:') %}{% set class = 'fa-envelope' %}
        {% elif temp.startswith('skype:') %}{% set class = 'fa-skype' %}
        {% endif %}
        
        <li><a href="{{ link }}" target="_blank">{{ name }}<i class="fa {{ class }} fa-lg"></i></a></li>
        {% endif %}
        {% endfor %}
      </ul>
    </div>
  </aside>

  <main id="main">
    <header>
      {% block header %}
      <p id="header">
      <a href="{{ SITEURL }}">Home</a>
      
      {% for p in pages|sort %}
      {% if p.url != "index.html" %}
      &#124; <a href="{{ SITEURL }}/{{ p.url }}">{{ p.title }}</a>
      {% endif %}
      {% endfor %}
      {% 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 %}
      {% endblock subheader %}
    </header>

    {% block content %}
    {% endblock %}

    {% block footer %}
    {% endblock %}

    <div id="ending_message">
        <p>&copy; {{ AUTHOR }}. Built using <a href="http://getpelican.com" target="_blank">Pelican</a>. Theme by Carey Metcalfe, availible on <a href="https://github.com/pR0Ps/pelican-svbhack" target="_blank">GitHub</a>. Based on <a href="https://github.com/giulivo/pelican-svbhack" target="_blank">svbhack</a> by Giulio Fidente.</p>
    </div>
  </main>

  {% if SCROLL_TO_CONTENT %}
  <script type="text/javascript">
    if (window.location.pathname != '/' && window.location.pathname != '/index.html'){
      window.scroll(0, document.getElementById('main').offsetTop);
    }
  </script>
  {% endif %}

  {% if MANGLE_EMAILS %}
  <script type="text/javascript">
    window.onload = function(){
      var e = document.querySelectorAll(".email");
      for (var i = 0; i < e.length; i++) {
        e[i].href = e[i].getAttribute("data-email").split("").reverse().join("");
        e[i].removeAttribute("data-email");
        e[i].removeAttribute("title");
        e[i].removeAttribute("class");
      }
    };
  </script>
  {% endif %}

  {% if FORCE_PIXELS %}
  <script type="text/javascript">
    var ratio = 1/window.devicePixelRatio;
    var tag = document.getElementById("viewport")
    if (ratio != 1 && tag != null){
      tag.content = "width=device-width, initial-scale=" + ratio;
    }
  </script>
  {% endif %}
</body>
</html>
