New ghost casper style theme.

Still todo: fix baseurl, update theme consistency, fix pages
master
Craig Davison 2019-07-16 14:50:39 +01:00
parent ced5bc3aa6
commit 41008cdb3c
No known key found for this signature in database
GPG Key ID: B22B44578F8BBB74
95 changed files with 1601 additions and 2504 deletions

View File

@ -5,6 +5,8 @@ rvm:
install:
- gem install jekyll
- gem install jekyll-sitemap
- gem install jekyll-paginate
script:
- jekyll build

53
404.html Normal file
View File

@ -0,0 +1,53 @@
---
layout: error
current: error
title: "404 - Page Not Found"
permalink: 404.html
---
<!--
This error template is used for all 404 errors, which might occur on your site.
It's a good idea to keep this template as minimal as possible in terms of both file size and complexity.
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>{{ page.title }}</title>
<meta name="HandheldFriendly" content="True" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="{{ site.baseurl }}assets/css/screen.css" />
<link rel="stylesheet" type="text/css" href="{{ site.baseurl }}assets/css/screen.edited.css" />
<link rel="stylesheet" type="text/css" href="{{ site.baseurl }}assets/css/custom.css" />
<!-- This tag outputs SEO meta+structured data and other important settings -->
{% include head.html %}
</head>
<body class="error-template">
<div class="site-wrapper">
<header class="site-header outer {% if page.cover %}" style="background-image: url({{ site.baseurl }}{{ page.cover }})){% else %}no-cover{% endif %}">
<div class="inner">
<nav class="site-nav-center">
{% if site.logo %}
<a class="site-nav-logo" href="{{ site.baseurl }}"><img src="{{site.baseurl}}{{ site.logo }}" alt="{{ site.title }}" /></a>
{% else %}
<a class="site-nav-logo" href="{{ site.baseurl }}">{{ site.title }}</a>
{% endif %}
</nav>
</div>
</header>
<main id="site-main" class="site-main outer" role="main">
<div class="inner">
<section class="error-message">
<h1 class="error-code">404</h1>
<p class="error-description">Page not found</p>
<a class="error-link" href="{{ site.baseurl }}">Go to the front page →</a>
</section>
</div>
</main>
</div>
</body>
</html>

View File

@ -2,7 +2,7 @@
url: https://davison.io
# This is only needed if you are serving this site in a subdirectory.
baseurl: ""
baseurl: "/"
# These files will be excluded from the generated site.
# Files or directories starting with a _ or . are automatically excluded.
@ -10,20 +10,44 @@ exclude:
- readme.md
- contributing.md
include:
- _pages
- .well-known
#include:
# - _pages
# - .well-known
# It's good practice to set a permalink manually for each post but if not, here:
permalink: /:title/
timezone: Europe/London
#
# Site-defined variables
#
google_analytics_tracking_id: "UA-87918631-1"
google_analytics: "UA-87918631-1"
plugins:
- jekyll-sitemap
- jekyll-paginate
# Paginate after x posts
paginate: 100
# Reading speed
words_per_minute: 200
# Website info
title: Craig Davison
description: Entrepreneur and Digital Strategist
cover:
logo:
logo_dark:
favicon: assets/images/favicon.png
# Gems and other configs
plugins_dir: [_plugins]
# Authors and tags info in _data
# Disqus
disqus: False
disqus_shortname:
# Social info
navigation: True
subscribers: False

10
_data/authors.yml Normal file
View File

@ -0,0 +1,10 @@
craig:
username: craig
name: Craig Davison
url_full: https://davison.io
url: davison.io
bio: Entrepreneur and Digital Strategist
picture: assets/img/craig-macbook.jpg
facebook:
twitter:
cover: False

1
_data/tags.yml Normal file
View File

@ -0,0 +1 @@

9
_includes/analytics.html Normal file
View File

@ -0,0 +1,9 @@
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.google_analytics }}"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '{{ site.google_analytics }}');
</script>

View File

@ -0,0 +1,13 @@
<nav class="pagination" role="pagination">
{% if paginator.previous_page %}
{% if paginator.previous_page == 1 %}
<a class="newer-posts" href="{{ site.baseurl }}author/{{ page.author }}" title="Previous Page">&laquo; Newer Posts</a>
{% else %}
<a class="newer-posts" href="{{ site.baseurl }}author/{{ page.author }}/page{{ paginator.previous_page }}/" title="Previous Page">&laquo; Newer Posts</a>
{% endif %}
{% endif %}
<span class="page-number"> Page {{ paginator.page }} of {{ paginator.total_pages }} </span>
{% if paginator.next_page %}
<a class="older-posts" href="{{ site.baseurl }}author/{{ page.author }}/page{{ paginator.next_page }}/" title="Next Page">Older Posts &raquo;</a>
{% endif %}
</nav>

View File

@ -1,12 +0,0 @@
<script>
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s);
js.id = id;
js.src = "//connect.facebook.net/en_GB/sdk.js#xfbml=1&version=v2.8";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
<div class="fb-like" data-href="https://www.facebook.com/{{ include.username }}/" data-layout="button_count" data-action="like" data-show-faces="false" data-share="false"></div>

View File

@ -1,3 +0,0 @@
<script src="https://apis.google.com/js/platform.js" async defer></script>
<div class="g-follow" data-href="https://plus.google.com/{{ include.id }}"></div>

View File

@ -1,40 +0,0 @@
<style>
.ig-b- {
display: inline-block;
margin-bottom: -10px;
}
.ig-b- img {
visibility: hidden;
}
.ig-b-:hover {
background-position: 0 -60px;
}
.ig-b-:active {
background-position: 0 -120px;
}
.ig-b-v-24 {
width: 137px;
height: 24px;
background: url(//badges.instagram.com/static/images/ig-badge-view-sprite-24.png) no-repeat 0 0;
}
@media only screen and (-webkit-min-device-pixel-ratio: 2),
only screen and (min--moz-device-pixel-ratio: 2),
only screen and (-o-min-device-pixel-ratio: 2 / 1),
only screen and (min-device-pixel-ratio: 2),
only screen and (min-resolution: 192dpi),
only screen and (min-resolution: 2dppx) {
.ig-b-v-24 {
background-image: url(//badges.instagram.com/static/images/ig-badge-view-sprite-24@2x.png);
background-size: 160px 178px;
}
}
</style>
<a href="https://www.instagram.com/{{ include.username }}/" class="ig-b- ig-b-v-24">
<img src="//badges.instagram.com/static/images/ig-badge-view-24.png" alt="Instagram">
</a>

View File

@ -1,3 +0,0 @@
<script src="//platform.linkedin.com/in.js" type="text/javascript"></script>
<p><script type="IN/FollowCompany" data-id="{{ include.id }}" data-counter="right"></script></p>

View File

@ -1,3 +0,0 @@
<script src="https://platform.twitter.com/widgets.js"></script>
<a href="https://twitter.com/{{ include.username }}" class="twitter-follow-button" data-show-screen-name='false'>Follow @{{ include.username }}</a>

View File

@ -1,3 +0,0 @@
<script src="https://apis.google.com/js/platform.js"></script>
<div class="g-ytsubscribe" data-channelid="{{ include.id }}" data-layout="default" data-count="default"></div>

View File

@ -0,0 +1,7 @@
<!-- dynamically loading backgrounds for tags, descriptions and page titles -->
{% for tag in site.data.tags %}
{% if page.url contains tag[1].name %}
{% assign cover = tag[1].cover %}
{% assign tag_description = tag[1].description %}
{% endif %}
{% endfor %}

View File

@ -0,0 +1,16 @@
<!-- dynamically fixing the title for tag/author pages -->
{% if page.url %}
{% if page.url contains "tag/" %}
{% assign title = page.url | remove: 'tag' | remove: '/' | replace: '-', ' ' | capitalizeall %}
{% elsif page.url contains "author/" %}
{% assign username = page.url | remove: 'author' | remove: '/' | replace: '-', ' ' | remove: ' ' %}
{% for author in site.data.authors %}
{% if author[1].username == username %}
{% assign title = author[1].name %}
{% endif %}
{% endfor %}
{% endif %}
{% endif %}
{% if title %}
{% assign title = title | append: ' - ' | append: site.title %}
{% endif %}

1
_includes/facebook.html Executable file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M19 6h5V0h-5c-3.86 0-7 3.14-7 7v3H8v6h4v16h6V16h5l1-6h-6V7c0-.542.458-1 1-1z"/></svg>

After

Width:  |  Height:  |  Size: 155 B

View File

@ -0,0 +1,28 @@
<div class="floating-header">
<div class="floating-header-logo">
<a href="{{ site.url }}{{ site.baseurl }}">
{% if site.logo_dark %}
<img src="{{ site.baseurl }}{{ site.logo_dark }}" alt="{{ site.title }} icon" />
{% endif %}
<span>{{ site.title }}</span>
</a>
</div>
<span class="floating-header-divider">&mdash;</span>
<div class="floating-header-title">{{ page.title }}</div>
<div class="floating-header-share">
<div class="floating-header-share-label">Share this {% include point.html %}</div>
<a class="floating-header-share-tw" href="https://twitter.com/share?text={{ page.title | url_encode }}&amp;url={{ site.url }}{{ page.url | remove_first: '/' }}"
onclick="window.open(this.href, 'share-twitter', 'width=550,height=235');return false;">
{% include twitter.html %}
</a>
<a class="floating-header-share-fb" href="https://www.facebook.com/sharer/sharer.php?u={{ site.url }}{{ page.url | remove_first: '/' }}"
onclick="window.open(this.href, 'share-facebook','width=580,height=296');return false;">
{% include facebook.html %}
</a>
</div>
<progress class="progress" value="0">
<div class="progress-container">
<span class="progress-bar"></span>
</div>
</progress>
</div>

1
_includes/ghost-logo.html Executable file
View File

@ -0,0 +1 @@
<svg class="ghost-svg" viewBox="0 0 493 161" xmlns="http://www.w3.org/2000/svg"><title>Ghost Logo</title><g fill="none" fill-rule="evenodd"><path d="M328.52 37.36c-27.017 0-40.97 19.323-40.97 43.16 0 23.837 13.61 43.162 40.97 43.162s40.968-19.325 40.968-43.163c0-23.84-13.954-43.16-40.97-43.16zm20.438 43.237c-.02 15.328-5.126 27.743-20.44 27.743-15.312 0-20.42-12.414-20.435-27.743v-.078c.016-15.33 5.124-27.74 20.437-27.74 15.312 0 20.42 12.41 20.438 27.74v.07zM207.553 5.19c0-1.103.885-2.124 1.984-2.282 0 0 13.577-1.95 14.784-2.115 1.37-.187 3.19.798 3.19 2.744v44.236c3.23-3.105 6.79-5.608 10.66-7.515 3.88-1.906 8.43-2.86 13.66-2.86 4.53 0 8.53.776 12.03 2.33 3.5 1.55 6.43 3.73 8.77 6.533 2.34 2.81 4.12 6.16 5.33 10.05 1.21 3.9 1.82 8.19 1.82 12.87v51.35c0 1.1-.89 2-2 2h-15.95c-1.1 0-2-.9-2-1.99V69.18c0-5.118-1.17-9.08-3.51-11.888-2.35-2.804-5.86-4.207-10.544-4.207-3.45 0-6.677.79-9.69 2.37-3.02 1.58-5.87 3.73-8.564 6.46v58.617c0 1.102-.894 2-2.002 2h-15.94c-1.11 0-2.005-.895-2.005-2V5.188zm244.007 95.327v-43.68h-13.482c-1.1 0-1.742-.87-1.443-1.916l3-10.49c.262-.9.942-1.87 2.308-2.07l9.597-1.35 3.508-23.49c.163-1.09 1.18-2.1 2.274-2.26 0 0 9.192-1.31 10.963-1.58 1.673-.25 3.19.97 3.19 2.81v24.52h17.565c1.106 0 2.002.9 2.002 2.01v11.82c0 1.11-.89 2.01-2.002 2.01h-17.566v43.08c0 6.02 3.623 8.32 7.095 8.32 2.12 0 5.02-1.14 7.19-2.16 1.34-.62 3.41-.16 3.95 1.73l2.45 8.65c.3 1.07-.25 2.37-1.23 2.86 0 0-7.29 4.37-17.06 4.37-13.73 0-22.33-8.08-22.33-23.16zm-44.584-47.74c-7.084 0-12.657 2.476-12.657 8.433 0 7.44 12.01 9.606 20.23 12.64 5.49 2.027 20.24 5.98 20.24 22.016 0 19.48-16 27.807-33.06 27.807-17.06 0-25.4-5.465-25.4-5.465-.96-.527-1.5-1.822-1.2-2.89 0 0 2.1-7.52 2.64-9.386.48-1.68 2.41-2.27 3.64-1.792 4.39 1.712 12.32 4.092 21.28 4.092 9.07 0 13.46-2.803 13.46-8.777 0-7.95-12.26-10.38-20.36-12.967-5.59-1.78-20.36-5.93-20.36-23.566 0-17.373 15.08-25.524 31.2-25.524 13.64 0 23.5 4.69 23.5 4.69 1.01.427 1.58 1.635 1.28 2.698l-2.658 9.357c-.488 1.74-1.898 2.537-3.666 1.957-3.89-1.277-11.2-3.322-18.15-3.322zm-210.313-15.28c-6.695.775-11.472 3.962-14.562 6.93-6.06-4.81-14.49-7.106-23.94-7.106-18.95 0-33.76 9.26-33.76 29.43 0 11.58 4.88 19.56 12.62 24.26-5.75 2.75-9.57 8.59-9.57 14.34 0 9.61 7.5 12.61 7.5 12.61s-13.11 6.44-13.11 19.32c0 16.49 15.01 23.16 33.34 23.16 26.43 0 44.61-11.04 44.61-31.31 0-12.47-9.44-19.36-30.01-20.18-12.2-.48-20.11-.93-22.07-1.58-2.59-.87-3.86-2.96-3.86-5.28 0-2.55 2.08-4.98 5.35-6.65 2.86.516 5.87.768 8.99.768 18.97 0 33.76-9.223 33.76-29.425 0-4.897-.87-9.15-2.46-12.78 2.79-1.506 8.34-2.25 8.34-2.25 1.09-.17 1.975-1.21 1.974-2.31V40.3c0-1.88-1.59-2.955-3.1-2.78zm-49.13 85.132s9.954.38 19.9.84c11.172.52 14.654 2.96 14.654 8.81 0 7.15-9.71 14.1-23.28 14.1-12.88 0-19.314-4.54-19.314-12.08 0-4.33 2.26-9.18 8.04-11.69zm10.66-40.54c-8.978 0-15.983-4.83-15.983-15.35 0-10.53 7.01-15.35 15.983-15.35 8.974 0 15.984 4.81 15.984 15.34 0 10.53-7.002 15.34-15.984 15.34z" fill="#2D3134"/><g opacity=".6" transform="translate(0 36)" fill="#2E3134"><rect x=".209" y="69.017" width="33.643" height="17.014" rx="4"/><rect x="50.672" y="69.017" width="33.622" height="17.014" rx="4"/><rect x=".184" y="34.99" width="84.121" height="17.014" rx="4"/><rect x=".209" y=".964" width="50.469" height="17.013" rx="4"/><rect x="67.494" y=".964" width="16.821" height="17.013" rx="4"/></g></g></svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

69
_includes/head.html Normal file
View File

@ -0,0 +1,69 @@
<meta name="description" content="{% if page.description %}{{ page.description }}{% else %}{{ site.description }}{% endif %}" />
<link rel="shortcut icon" href="{{ site.url }}{{ site.baseurl }}{{ site.favicon }}" type="image/png" />
<link rel="canonical" href="{{ site.url }}{% if site.baseurl %}{{ site.baseurl }}{% endif %}{{ page.url | remove_first: '/' }}" />
<meta name="referrer" content="no-referrer-when-downgrade" />
{% if page.content and page.current == 'post' or page.current == 'about' %}
{% assign excerpt = page.content | strip_html | truncatewords: 50, "" %}
{% endif %} <!--title below is coming from _includes/dynamic_title-->
<meta property="og:site_name" content="{{ site.title }}" />
<meta property="og:type" content="website" />
<meta property="og:title" content="{% if title %}{{ title }}{% elsif page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}" />
<meta property="og:description" content="{% if excerpt %}{{ excerpt }}{% elsif page.description %}{{ page.description }}{% else %}{{ site.description }}{% endif %}" />
<meta property="og:url" content="{{ site.url }}{% if site.baseurl %}{{ site.baseurl }}{% endif %}{{ page.url | remove_first: '/' }}" />
<meta property="og:image" content="{{ site.url }}{{ site.baseurl }}{% if page.cover %}{{ page.cover }}{% else %}{{ site.cover }}{% endif %}" />
<meta property="article:publisher" content="https://www.facebook.com/{{ site.facebook }}" />{% if excerpt %}
<meta property="article:author" content="https://www.facebook.com/{{ site.facebook }}" />
<meta property="article:published_time" content="{% if page.date %}{{ page.date | date_to_xmlschema }}{% elsif post.date %}{{ post.date | date_to_xmlschema }}{% endif %}" />
<meta property="article:modified_time" content="{% if page.date %}{{ page.date | date_to_xmlschema }}{% elsif post.date %}{{ post.date | date_to_xmlschema }}{% endif %}" />{% endif %}{% if page.tags.size > 0 %}
<meta property="article:tag" content="{{ page.tags | first | capitalizeall }}" />{% endif %}
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="{% if title %}{{ title }}{% elsif page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}" />
<meta name="twitter:description" content="{% if excerpt %}{{ excerpt }}{% elsif page.description %}{{ page.description }}{% else %}{{ site.description }}{% endif %}" />
<meta name="twitter:url" content="{{ site.url }}{{ site.baseurl }}" />
<meta name="twitter:image" content="{{ site.url }}{{ site.baseurl }}{% if page.cover %}{{ page.cover }}{% else %}{{ site.cover }}{% endif %}" />
<meta name="twitter:label1" content="Written by" />
<meta name="twitter:data1" content="{{ site.title }}" />{% if page.tags.size > 0 %}
<meta name="twitter:label2" content="Filed under" />
<meta name="twitter:data2" content="{{ page.tags | first | capitalizeall }}" />{% endif %}
<meta name="twitter:site" content="@{{ site.twitter }}" />
<meta name="twitter:creator" content="@{{ site.twitter }}" />{% if excerpt %}
<meta property="og:image:width" content="1400" />
<meta property="og:image:height" content="933" />{% else %}
<meta property="og:image:width" content="2000" />
<meta property="og:image:height" content="666" />{% endif %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Website",
"publisher": {
"@type": "Organization",
"name": "{{ site.title }}",
"logo": "{{ site.url }}{{ site.baseurl }}{{ site.logo }}"
},
"url": "{{ site.url }}{% if site.baseurl %}{{ site.baseurl }}{% endif %}{{ page.url | remove_first: '/' }}",
"image": {
"@type": "ImageObject",
"url": "{{ site.url }}{{ site.baseurl }}{% if page.cover %}{{ page.cover }}{% else %}{{ site.cover }}{% endif %}",
"width": 2000,
"height": 666
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "{{ site.url }}{% if site.baseurl %}{{ site.baseurl }}{% endif %}{{ page.url | remove_first: '/' }}"
},
"description": "{% if excerpt %}{{ excerpt }}{% elsif page.description %}{{ page.description }}{% else %}{{ site.description }}{% endif %}"
}
</script>
<!-- <script type="text/javascript" src="https://demo.ghost.io/public/ghost-sdk.min.js?v=724281a32e"></script>
<script type="text/javascript">
ghost.init({
clientId: "ghost-frontend",
clientSecret: "f84a07a72b17"
});
</script> -->
<meta name="generator" content="Jekyll 3.6.2" />
<link rel="alternate" type="application/rss+xml" title="{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}" href="{{ site.baseurl }}feed.xml" />

1
_includes/infinity.html Executable file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 14.5s2 3 5 3 5.5-2.463 5.5-5.5S21 6.5 18 6.5c-5 0-7 11-12 11C2.962 17.5.5 15.037.5 12S3 6.5 6 6.5s4.5 3.5 4.5 3.5"/></svg>

After

Width:  |  Height:  |  Size: 196 B

1
_includes/location.html Executable file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" fill="none"><path d="M19.5 8c0 4.144-7.5 15.5-7.5 15.5S4.5 12.144 4.5 8C4.5 3.858 7.857.5 12 .5c4.142 0 7.5 3.358 7.5 7.5z"/><circle cx="12" cy="8" r="3"/></svg>

After

Width:  |  Height:  |  Size: 329 B

View File

@ -0,0 +1,5 @@
<ul class="nav" role="menu">
<li class="nav-home" role="menuitem"><a href="{{site.url}}">Home</a></li>
<li class="nav-blog" role="menuitem"><a href="https://davison.io/blog/">Blog</a></li>
<li class="nav-about" role="menuitem"><a href="{{site.url}}/about/">About</a></li>
</ul>

View File

@ -0,0 +1,6 @@
<script>
$(function() {
var $postContent = $(".post-full-content");
$postContent.fitVids();
});
</script>

3
_includes/point.html Executable file
View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M7.5 15.5V4a1.5 1.5 0 1 1 3 0v4.5h2a1 1 0 0 1 1 1h2a1 1 0 0 1 1 1H18a1.5 1.5 0 0 1 1.5 1.5v3.099c0 .929-.13 1.854-.385 2.748L17.5 23.5h-9c-1.5-2-5.417-8.673-5.417-8.673a1.2 1.2 0 0 1 1.76-1.605L7.5 15.5zm6-6v2m-3-3.5v3.5m6-1v2"/>
</svg>

After

Width:  |  Height:  |  Size: 311 B

View File

@ -0,0 +1,59 @@
{% assign words_per_minute = site.words_per_minute | default: 200 %}
{% assign count = 0 %}
{% for post in site.posts %}
{% assign count = count | plus: 1 %}
{% if count <= 3 %}
<article class="post-card {{ page.class }}{% unless post.cover %} no-image{% endunless %}">
{% if post.cover %}
<a class="post-card-image-link" href="{{ site.baseurl }}{{ post.url | remove_first: '/' }}">
<div class="post-card-image" style="background-image: url({{ site.baseurl }}{{ post.cover }})"></div>
</a>
{% endif %}
<div class="post-card-content">
<a class="post-card-content-link" href="{{ site.baseurl }}{{ post.url | remove_first: '/' }}">
<header class="post-card-header">
{% if post.tags.size > 0 %}
{% for tag in post.tags %}
{% if forloop.index == post.tags.size %}
<span class="post-card-tags">{{ tag | capitalize }}</span>
{% else %}
<span class="post-card-tags">{{ tag | capitalize }}</span>
{% endif %}
{% endfor %}
{% endif %}
<h2 class="post-card-title">{{ post.title }}</h2>
</header>
<section class="post-card-excerpt">
{% if post.excerpt %}
<p>{{ post.excerpt | strip_html | truncatewords: 33, "" }}</p>
{% else %}
<p>{{ post.content | strip_html | truncatewords: 33, "" }}</p>
{% endif %}
</section>
</a>
<footer class="post-card-meta">
{% for author in site.data.authors %}
{% if author[1].username == post.author %}
{% if author[1].picture %}
<img class="author-profile-image" src="{{ site.baseurl }}{{ author[1].picture }}" alt="{{ author[1].name }}" />
{% endif %}
<span class="post-card-author">
<a href="{{ site.baseurl }}author/{{ post.author }}/">{{ author[1].name }}</a>
</span>
{% endif %}
{% endfor %}
<span class="reading-time">
{% assign words = post.content | strip_html | number_of_words %}
{% if words <= words_per_minute %}
1 min read
{% else %}
{{ words | divided_by:words_per_minute }} min read
{% endif %}
</span>
</footer>
</div>
</article>
{% endif %}
{% endfor %}

View File

@ -0,0 +1,53 @@
{% assign words_per_minute = site.words_per_minute | default: 200 %}
<article class="post-card {{ page.next.class }}{% unless page.next.cover %} no-image{% endunless %}">
{% if page.next.cover %}
<a class="post-card-image-link" href="{{ site.baseurl }}{{ page.next.url | remove_first: '/' }}">
<div class="post-card-image" style="background-image: url({{ site.baseurl }}{{ page.next.cover }})"></div>
</a>
{% endif %}
<div class="post-card-content">
<a class="post-card-content-link" href="{{ site.baseurl }}{{ page.next.url | remove_first: '/' }}">
<header class="post-card-header">
{% if page.next.tags.size > 0 %}
{% for tag in page.next.tags %}
{% if forloop.index == page.next.tags.size %}
<span class="post-card-tags">{{ tag | capitalize }}</span>
{% else %}
<span class="post-card-tags">{{ tag | capitalize }}</span>
{% endif %}
{% endfor %}
{% endif %}
<h2 class="post-card-title">{{ page.next.title }}</h2>
</header>
<section class="post-card-excerpt">
{% if post.excerpt %}
<p>{{ post.excerpt | strip_html | truncatewords: 33, "" }}</p>
{% else %}
<p>{{ post.content | strip_html | truncatewords: 33, "" }}</p>
{% endif %}
</section>
</a>
<footer class="post-card-meta">
{% for author in site.data.authors %}
{% if author[1].username == page.next.author %}
{% if author[1].picture %}
<img class="author-profile-image" src="{{ site.baseurl }}{{ author[1].picture }}" alt="{{ author[1].name }}" />
{% endif %}
<span class="post-card-author">
<a href="{{ site.baseurl }}author/{{ page.next.author }}/">{{ author[1].name }}</a>
</span>
{% endif %}
{% endfor %}
<span class="reading-time">
{% assign words = post.content | strip_html | number_of_words %}
{% if words <= words_per_minute %}
1 min read
{% else %}
{{ words | divided_by:words_per_minute }} min read
{% endif %}
</span>
</footer>
</div>
</article>

View File

@ -0,0 +1,53 @@
{% assign words_per_minute = site.words_per_minute | default: 200 %}
<article class="post-card {{ page.previous.class }}{% unless page.previous.cover %} no-image{% endunless %}">
{% if page.previous.cover %}
<a class="post-card-image-link" href="{{ site.baseurl }}{{ page.previous.url | remove_first: '/' }}">
<div class="post-card-image" style="background-image: url({{ site.baseurl }}{{ page.previous.cover }})"></div>
</a>
{% endif %}
<div class="post-card-content">
<a class="post-card-content-link" href="{{ site.baseurl }}{{ page.previous.url | remove_first: '/' }}">
<header class="post-card-header">
{% if page.previous.tags.size > 0 %}
{% for tag in page.previous.tags %}
{% if forloop.index == page.previous.tags.size %}
<span class="post-card-tags">{{ tag | capitalize }}</span>
{% else %}
<span class="post-card-tags">{{ tag | capitalize }}</span>
{% endif %}
{% endfor %}
{% endif %}
<h2 class="post-card-title">{{ page.previous.title }}</h2>
</header>
<section class="post-card-excerpt">
{% if post.excerpt %}
<p>{{ post.excerpt | strip_html | truncatewords: 33, "" }}</p>
{% else %}
<p>{{ post.content | strip_html | truncatewords: 33, "" }}</p>
{% endif %}
</section>
</a>
<footer class="post-card-meta">
{% for author in site.data.authors %}
{% if author[1].username == page.previous.author %}
{% if author[1].picture %}
<img class="author-profile-image" src="{{ site.baseurl }}{{ author[1].picture }}" alt="{{ author[1].name }}" />
{% endif %}
<span class="post-card-author">
<a href="{{ site.baseurl }}author/{{ page.previous.author }}/">{{ author[1].name }}</a>
</span>
{% endif %}
{% endfor %}
<span class="reading-time">
{% assign words = post.content | strip_html | number_of_words %}
{% if words <= words_per_minute %}
1 min read
{% else %}
{{ words | divided_by:words_per_minute }} min read
{% endif %}
</span>
</footer>
</div>
</article>

55
_includes/post-card.html Normal file
View File

@ -0,0 +1,55 @@
{% assign words_per_minute = site.words_per_minute | default: 200 %}
{% for post in paginator.posts %}
<article class="post-card {{ page.class }}{% unless post.cover %} no-image{% endunless %}">
{% if post.cover %}
<a class="post-card-image-link" href="{{ site.baseurl }}{{ post.url | remove_first: '/' }}">
<div class="post-card-image" style="background-image: url({{ site.baseurl }}{{ post.cover }})"></div>
</a>
{% endif %}
<div class="post-card-content">
<a class="post-card-content-link" href="{{ site.baseurl }}{{ post.url | remove_first: '/' }}">
<header class="post-card-header">
{% if post.tags.size > 0 %}
{% for tag in post.tags %}
{% if forloop.index == post.tags.size %}
<span class="post-card-tags">{{ tag | capitalize }}</span>
{% else %}
<span class="post-card-tags">{{ tag | capitalize }}</span>
{% endif %}
{% endfor %}
{% endif %}
<h2 class="post-card-title">{{ post.title }}</h2>
</header>
<section class="post-card-excerpt">
{% if post.excerpt %}
<p>{{ post.excerpt | strip_html | truncatewords: 33, "" }}</p>
{% else %}
<p>{{ post.content | strip_html | truncatewords: 33, "" }}</p>
{% endif %}
</section>
</a>
<footer class="post-card-meta">
{% for author in site.data.authors %}
{% if author[1].username == post.author %}
{% if author[1].picture %}
<img class="author-profile-image" src="{{ site.baseurl }}{{ author[1].picture }}" alt="{{ author[1].name }}" />
{% endif %}
<span class="post-card-author">
<a href="{{ site.baseurl }}author/{{ post.author }}/">{{ author[1].name }}</a>
</span>
{% endif %}
{% endfor %}
<span class="reading-time">
{% assign words = post.content | strip_html | number_of_words %}
{% if words <= words_per_minute %}
1 min read
{% else %}
{{ words | divided_by:words_per_minute }} min read
{% endif %}
</span>
</footer>
</div>
</article>
{% endfor %}

View File

@ -0,0 +1,63 @@
<script>
// NOTE: Scroll performance is poor in Safari
// - this appears to be due to the events firing much more slowly in Safari.
// Dropping the scroll event and using only a raf loop results in smoother
// scrolling but continuous processing even when not scrolling
$(document).ready(function () {
// Start fitVids
var $postContent = $(".post-full-content");
$postContent.fitVids();
// End fitVids
var progressBar = document.querySelector('progress');
var header = document.querySelector('.floating-header');
var title = document.querySelector('.post-full-title');
var lastScrollY = window.scrollY;
var lastWindowHeight = window.innerHeight;
var lastDocumentHeight = $(document).height();
var ticking = false;
function onScroll() {
lastScrollY = window.scrollY;
requestTick();
}
function onResize() {
lastWindowHeight = window.innerHeight;
lastDocumentHeight = $(document).height();
requestTick();
}
function requestTick() {
if (!ticking) {
requestAnimationFrame(update);
}
ticking = true;
}
function update() {
var trigger = title.getBoundingClientRect().top + window.scrollY;
var triggerOffset = title.offsetHeight + 35;
var progressMax = lastDocumentHeight - lastWindowHeight;
// show/hide floating header
if (lastScrollY >= trigger + triggerOffset) {
header.classList.add('floating-active');
} else {
header.classList.remove('floating-active');
}
progressBar.setAttribute('max', progressMax);
progressBar.setAttribute('value', lastScrollY);
ticking = false;
}
window.addEventListener('scroll', onScroll, {passive: true});
window.addEventListener('resize', onResize, false);
update();
});
</script>

View File

@ -0,0 +1,13 @@
<nav class="pagination" role="pagination">
{% if paginator.previous_page %}
{% if paginator.previous_page == 1 %}
<a class="newer-posts" href="{{ site.baseurl }}" title="Previous Page">&laquo; Newer Posts</a>
{% else %}
<a class="newer-posts" href="{{ site.baseurl }}page{{ paginator.previous_page }}/" title="Previous Page">&laquo; Newer Posts</a>
{% endif %}
{% endif %}
<span class="page-number"> Page {{ paginator.page }} of {{ paginator.total_pages }} </span>
{% if paginator.next_page %}
<a class="older-posts" href="{{ site.baseurl }}page{{ paginator.next_page }}/" title="Next Page">Older Posts &raquo;</a>
{% endif %}
</nav>

1
_includes/rss.html Executable file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="6.18" cy="17.82" r="2.18"/><path d="M4 4.44v2.83c7.03 0 12.73 5.7 12.73 12.73h2.83c0-8.59-6.97-15.56-15.56-15.56zm0 5.66v2.83c3.9 0 7.07 3.17 7.07 7.07h2.83c0-5.47-4.43-9.9-9.9-9.9z"/></svg>

After

Width:  |  Height:  |  Size: 263 B

19
_includes/site-nav.html Normal file
View File

@ -0,0 +1,19 @@
<nav class="site-nav">
<div class="site-nav-left">
{% if page.current != 'home' %}
{% if site.logo %}
<a class="site-nav-logo" href="{{ site.url }}{{ site.baseurl }}"><img src="{{ site.baseurl}}{{ site.logo }}" alt="{{ site.title }}" /></a>
{% else %}
<a class="site-nav-logo" href="{{ site.url }}{{ site.baseurl }}">{{ site.title }}</a>
{% endif %}
{% endif %}
{% if page.navigation %}
{% include navigation.html %}
{% endif %}
</div>
<div class="social-links">
<a class="social-link social-link-tw" href="https://twitter.com/davisonio" title="Twitter" target="_blank" rel="noopener"><i class="fab fa-twitter"></i></a>
<a class="social-link" href="https://www.instagram.com/craigdavisonio/" title="Instagram" target="_blank" rel="noopener"><i class="fab fa-instagram"></i></a>
<a class="social-link" href="https://davison.io/elsewhere/" title="Elsewhere" target="_blank" rel="noopener"><i class="fas fa-ellipsis-h"></i></a>
</div>
</nav>

View File

@ -0,0 +1,9 @@
<form method="post" action="/subscribe/" class="">
<input class="confirm" type="hidden" name="confirm" /><input class="location" type="hidden" name="location" /><input class="referrer" type="hidden" name="referrer" />
<div class="form-group">
<input class="subscribe-email" type="email" name="email" placeholder="youremail@example.com" />
</div>
<button class="" type="submit" {% unless site.subscribe %}disabled{% endunless %}><span>Subscribe</span></button>
<script type="text/javascript">(function(g,h,o,s,t){h[o]('.location')[s]=h[o]('.location')[s] || g.location.href;h[o]('.referrer')[s]=h[o]('.referrer')[s] || h.referrer;})(window,document,'querySelector','value');</script>
</form>

View File

@ -0,0 +1,13 @@
<nav class="pagination" role="pagination">
{% if paginator.previous_page %}
{% if paginator.previous_page == 1 %}
<a class="newer-posts" href="{{ site.baseurl }}tag/{{ page.tag | downcase | replace: ' ', '-' }}" title="Previous Page">&laquo; Newer Posts</a>
{% else %}
<a class="newer-posts" href="{{ site.baseurl }}tag/{{ page.tag | downcase | replace: ' ', '-' }}/page{{ paginator.previous_page }}/" title="Previous Page">&laquo; Newer Posts</a>
{% endif %}
{% endif %}
<span class="page-number"> Page {{ paginator.page }} of {{ paginator.total_pages }} </span>
{% if paginator.next_page %}
<a class="older-posts" href="{{ site.baseurl }}tag/{{ page.tag | downcase | replace: ' ', '-' }}/page{{ paginator.next_page }}/" title="Next Page">Older Posts &raquo;</a>
{% endif %}
</nav>

1
_includes/twitter.html Executable file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M30.063 7.313c-.813 1.125-1.75 2.125-2.875 2.938v.75c0 1.563-.188 3.125-.688 4.625a15.088 15.088 0 0 1-2.063 4.438c-.875 1.438-2 2.688-3.25 3.813a15.015 15.015 0 0 1-4.625 2.563c-1.813.688-3.75 1-5.75 1-3.25 0-6.188-.875-8.875-2.625.438.063.875.125 1.375.125 2.688 0 5.063-.875 7.188-2.5-1.25 0-2.375-.375-3.375-1.125s-1.688-1.688-2.063-2.875c.438.063.813.125 1.125.125.5 0 1-.063 1.5-.25-1.313-.25-2.438-.938-3.313-1.938a5.673 5.673 0 0 1-1.313-3.688v-.063c.813.438 1.688.688 2.625.688a5.228 5.228 0 0 1-1.875-2c-.5-.875-.688-1.813-.688-2.75 0-1.063.25-2.063.75-2.938 1.438 1.75 3.188 3.188 5.25 4.25s4.313 1.688 6.688 1.813a5.579 5.579 0 0 1 1.5-5.438c1.125-1.125 2.5-1.688 4.125-1.688s3.063.625 4.188 1.813a11.48 11.48 0 0 0 3.688-1.375c-.438 1.375-1.313 2.438-2.563 3.188 1.125-.125 2.188-.438 3.313-.875z"/></svg>

After

Width:  |  Height:  |  Size: 888 B

1
_includes/website.html Executable file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M23.5 11.957c0 6.375-5.163 11.544-11.532 11.544C5.599 23.5.5 18.125.5 11.75.5 5.542 5.37.758 11.505.511l.5-.011C18.374.5 23.5 5.582 23.5 11.957zM11.505.511c-6 6.5-6 14.98 0 22.98m1-22.98c6 6.5 6 14.977 0 22.977M2 17.479h20.063m-19.657-12h19.062m-20.968 6h22.938" stroke="#000" stroke-linejoin="round" stroke-miterlimit="10" fill="none"/></svg>

After

Width:  |  Height:  |  Size: 413 B

64
_layouts/author.html Normal file
View File

@ -0,0 +1,64 @@
---
layout: default
current: author
title: Author Page
cover: false
class: 'author-template'
navigation: True
label: Author
logo: 'assets/images/ghost.png'
---
<!-- < default}} -->
<!-- The tag above means - insert everything in this file into the {body} of the default.hbs template -->
<!-- #author -->
<!-- Everything inside the #author tags pulls data from the author -->
{% for author in site.data.authors %}
{% if author[1].username == page.author %}
<header class="site-header outer {% if author[1].cover or page.cover %}" style="background-image: url({{ site.baseurl }}{% if author[1].cover %}{{ author[1].cover }}{% elsif page.cover %}{{ page.cover }}{% endif %}) {% else %}no-cover{% endif %}">
<div class="inner">
{% include site-nav.html %}
<div class="site-header-content">
{% if author[1].picture %}
<img class="author-profile-image" src="{{ site.baseurl }}{{ author[1].picture }}" alt="{{ page.author }}" />
{% endif %}
<h1 class="site-title">{{ author[1].name }}</h1>
{% if author[1].bio %}
<h2 class="author-bio">{{ author[1].bio }}</h2>
{% endif %}
<div class="author-meta">
{% if author[1].location %}
<div class="author-location">{{ author[1].location }} <span class="bull">&bull;</span></div>
{% endif %}
<div class="author-stats">
{% if paginator.total_posts == 0 %}No posts{% elsif paginator.total_posts == 1 %}1 post{% else %}{{ paginator.total_posts }} posts{% endif %} <span class="bull">&bull;</span>
</div>
{% if author[1].url %}
<a class="social-link social-link-wb" href="{{ author[1].url_full }}" target="_blank" rel="noopener">{% include website.html %}</a>
{% endif %}
{% if author[1].twitter %}
<a class="social-link social-link-tw" href="https://twitter.com/{{ author[1].twitter }}" target="_blank" rel="noopener">{% include twitter.html %}</a>
{% endif %}
{% if author[1].facebook %}
<a class="social-link social-link-fb" href="https://facebook.com/{{ author[1].facebook }}" target="_blank" rel="noopener">{% include facebook.html %}</a>
{% endif %}
<a class="social-link social-link-rss" href="https://feedly.com/i/subscription/feed/{{ site.url }}{{ site.baseurl }}author/{{ page.author }}/feed.xml" target="_blank" rel="noopener">{% include rss.html %}</a>
</div>
</div>
</div>
</header>
{% endif %}
{% endfor %}
<!-- /author -->
<!-- The main content area -->
<main id="site-main" class="site-main outer" role="main">
<div class="inner">
<div class="post-feed">
<!-- The tag below includes the markup for each post - partials/post-card.hbs -->
{% include post-card.html %}
</div>
</div>
</main>

138
_layouts/default.html Normal file
View File

@ -0,0 +1,138 @@
<!DOCTYPE html>
<html>
<head>
<!-- Document Settings -->
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<!-- Base Meta -->
{% include dynamic_title.html %}
<title>{% if title %}{{ title }}{% elsif page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}</title>
<meta name="HandheldFriendly" content="True" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- Styles'n'Scripts -->
<link rel="stylesheet" type="text/css" href="{{ site.baseurl }}assets/css/screen.css" />
<link rel="stylesheet" type="text/css" href="{{ site.baseurl }}assets/css/screen.edited.css" />
<link rel="stylesheet" type="text/css" href="{{ site.baseurl }}assets/css/syntax.css" />
<link rel="stylesheet" type="text/css" href="{{ site.baseurl }}assets/css/custom.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.9.0/css/all.min.css" integrity="sha256-UzFD2WYH2U1dQpKDjjZK72VtPeWP50NoJjd26rnAdUI=" crossorigin="anonymous" />
<!-- highlight.js -->
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css">
<style>.hljs { background: none; }</style>
<!--[if IE]>
<style>
p, ol, ul{
width: 100%;
}
blockquote{
width: 100%;
}
</style>
<![endif]-->
<!-- This tag outputs SEO meta+structured data and other important settings -->
{% include head.html %}
</head>
<body class="{% if paginator.page > 1 %}paged archive-template{% elsif page.class %}{{ page.class }}{% else %}home-template{% endif %}">
<div class="site-wrapper">
<!-- All the main content gets inserted here, index.hbs, post.hbs, etc -->
{{ content }}
<!-- Previous/next page links - displayed on every page -->
{% if paginator.total_posts > site.paginate %}
{% if page.class == 'home-template' %}
{% include post_pagination.html %}
{% elsif page.class == 'page-template' %}
{% include post_pagination.html %}
{% elsif page.class == 'author-template' %}
{% include author_pagination.html %}
{% elsif page.class == 'tag-template' %}
{% include tag_pagination.html %}
{% else %}
{% include post_pagination.html %}
{% endif %}
{% endif %}
<!-- The footer at the very bottom of the screen -->
<footer class="site-footer outer">
<div class="site-footer-content inner">
<section class="copyright">&copy; {{ site.time | date: '%Y' }} {{ site.title }}</section>
<section class="poweredby"></section>
<nav class="site-footer-nav"></nav>
</div>
</footer>
</div>
<!-- The big email subscribe modal content -->
{% if site.subscribers %}
<div id="subscribe" class="subscribe-overlay">
<a class="subscribe-overlay-close" href="#"></a>
<div class="subscribe-overlay-content">
{% if site.logo %}
<img class="subscribe-overlay-logo" src="{{ site.baseurl }}{{ site.logo }}" alt="{{ site.title }}" />
{% endif %}
<h1 class="subscribe-overlay-title">Subscribe to {{ site.title }}</h1>
<p class="subscribe-overlay-description">Stay up to date! Get all the latest &amp; greatest posts delivered straight to your inbox</p>
{% include subscribe-form.html placeholder="youremail@example.com" %}
</div>
</div>
{% endif %}
<!-- highlight.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.10.0/components/prism-abap.min.js"></script>
<script>$(document).ready(function() {
$('pre code').each(function(i, block) {
hljs.highlightBlock(block);
});
});</script>
<!-- jQuery + Fitvids, which makes all video embeds responsive -->
<script
src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous">
</script>
<script type="text/javascript" src="{{ site.baseurl }}assets/js/jquery.fitvids.js"></script>
<script type="text/javascript" src="https://demo.ghost.io/assets/js/jquery.fitvids.js?v=724281a32e"></script>
<!-- Paginator increased to "infinit" in _config.yml -->
<!-- if paginator.posts -->
<!-- <script>
var maxPages = parseInt('{{ paginator.total_pages }}');
</script>
<script src="{{ site.baseurl }}assets/js/infinitescroll.js"></script> -->
<!-- /endif -->
{% if paginator.total_pages > site.paginate %}
<script>
var maxPages = parseInt('{{ paginator.total_pages }}');
</script>
<script src="{{ site.baseurl }}assets/js/infinitescroll.js"></script>
{% endif %}
<!-- Add Google Analytics -->
{% include analytics.html %}
<!-- The #block helper will pull in data from the #contentFor other template files. In this case, there's some JavaScript which we only want to use in post.hbs, but it needs to be included down here, after jQuery has already loaded. -->
{% if page.class == "post-template" %}
{% include post-scripts.html %}
{% elsif page.class == "page-template" %}
{% include page-scripts.html %}
{% endif %}
<!-- Ghost outputs important scripts and data with this tag - it should always be the very last thing before the closing body tag -->
<!-- ghost_foot -->
</body>
<!--
Copyright © 2015+ Craig Davison
License: https://github.com/davisonio/davison.io#license
-->
</html>

1
_layouts/error.html Normal file
View File

@ -0,0 +1 @@
{{ content }}

113
_layouts/feed.xml Normal file
View File

@ -0,0 +1,113 @@
---
layout: null
---
<?xml version="1.0" encoding="utf-8"?>
{% if page.xsl %}
<?xml-stylesheet type="text/xml" href="{{ '/feed.xslt.xml' | absolute_url }}"?>
{% endif %}
<feed xmlns="http://www.w3.org/2005/Atom" {% if site.lang %}xml:lang="{{ site.lang }}"{% endif %}>
<generator uri="https://jekyllrb.com/" version="{{ jekyll.version }}">Jekyll</generator>
<link href="{{ page.url | absolute_url }}" rel="self" type="application/atom+xml" />
<link href="{{ '/' | absolute_url }}" rel="alternate" type="text/html" {% if site.lang %}hreflang="{{ site.lang }}" {% endif %}/>
<updated>{{ site.time | date_to_xmlschema }}</updated>
<id>{{ page.url | absolute_url | xml_escape }}</id>
{% assign title = site.title | default: site.name %}
{% if page.collection != "posts" %}
{% assign collection = page.collection | capitalize %}
{% assign title = title | append: " | " | append: collection %}
{% endif %}
{% if page.category %}
{% assign category = page.category | capitalize %}
{% assign title = title | append: " | " | append: category %}
{% endif %}
{% if title %}
<title type="html">{{ title | smartify | xml_escape }}</title>
{% endif %}
{% if site.description %}
<subtitle>{{ site.description | xml_escape }}</subtitle>
{% endif %}
{% if site.author %}
<author>
<name>{{ site.author.name | default: site.author | xml_escape }}</name>
{% if site.author.email %}
<email>{{ site.author.email | xml_escape }}</email>
{% endif %}
{% if site.author.uri %}
<uri>{{ site.author.uri | xml_escape }}</uri>
{% endif %}
</author>
{% endif %}
{% if site.data.authors %}
{% for author in site.data.authors %}
{% if author[1].username == post.author %}
<author>{{ author[1].name | strip_html }}</author>
<author>
<name>{{ author[1].name | default: author[1].name | xml_escape }}</name>
{% if author[1].email %}
<email>{{ author[1].email | xml_escape }}</email>
{% endif %}
{% if author[1].uri %}
<uri>{{ author[1].uri | xml_escape }}</uri>
{% endif %}
</author>
{% endif %}
{% endfor %}
{% endif %}
{% assign posts = page.posts %}
{% if page.category %}
{% assign posts = posts | where: "category",page.category %}
{% endif %}
{% for post in posts limit: 10 %}
<entry{% if post.lang %}{{" "}}xml:lang="{{ post.lang }}"{% endif %}>
<title type="html">{{ post.title | smartify | strip_html | normalize_whitespace | xml_escape }}</title>
<link href="{{ post.url | absolute_url }}" rel="alternate" type="text/html" title="{{ post.title | xml_escape }}" />
<published>{{ post.date | date_to_xmlschema }}</published>
<updated>{{ post.last_modified_at | default: post.date | date_to_xmlschema }}</updated>
<id>{{ post.id | absolute_url | xml_escape }}</id>
<content type="html" xml:base="{{ post.url | absolute_url | xml_escape }}">{{ post.content | strip | xml_escape }}</content>
{% assign post_author = post.author | default: post.authors[0] | default: site.author %}
{% assign post_author = site.data.authors[post_author] | default: post_author %}
{% assign post_author_email = post_author.email | default: nil %}
{% assign post_author_uri = post_author.uri | default: nil %}
{% assign post_author_name = post_author.name | default: post_author %}
<author>
<name>{{ post_author_name | default: "" | xml_escape }}</name>
{% if post_author_email %}
<email>{{ post_author_email | xml_escape }}</email>
{% endif %}
{% if post_author_uri %}
<uri>{{ post_author_uri | xml_escape }}</uri>
{% endif %}
</author>
{% if post.category %}
<category term="{{ post.category | xml_escape }}" />
{% endif %}
{% for tag in post.tags %}
<category term="{{ tag | xml_escape }}" />
{% endfor %}
{% if post.excerpt and post.excerpt != empty %}
<summary type="html">{{ post.excerpt | strip_html | normalize_whitespace | xml_escape }}</summary>
{% endif %}
{% assign post_image = post.image.path | default: post.image %}
{% if post_image %}
{% unless post_image contains "://" %}
{% assign post_image = post_image | absolute_url %}
{% endunless %}
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="{{ post_image | xml_escape }}" />
{% endif %}
</entry>
{% endfor %}
</feed>

View File

@ -1,100 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>
{% if page.title == "Home" %}
{{ site.title }}
{% else %}
{{ page.title }} · {{ site.title }}
{% endif %}
</title>
<meta name="description" content="{% if page.description %}{{ page.description }} - {% endif %}{{ site.description }}">
<link rel="canonical" href="{{ site.url }}{{ site.baseurl }}{{ page.url | remove: 'index.html'}}">
<link rel="stylesheet" href="https://cdn.rawgit.com/FortAwesome/Font-Awesome/v4.6.3/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdn.rawgit.com/IanLunn/Hover/2.0.2/css/hover-min.css">
<link rel="stylesheet" href="https://cdn.rawgit.com/mblode/burger/v2.0.2/dist/css/burger.min.css">
<link rel="stylesheet" href="{{ site.baseurl }}/assets/css/amsf.css">
<link rel="stylesheet" href="{{ site.baseurl }}/assets/css/navigation.css">
<link rel="stylesheet" href="{{ site.baseurl }}/assets/css/main.css">
</head>
<body>
<span class="top-title-button">
<a href="{{ site.baseurl }}/">{{ site.title }}</a>
</span>
<div class="b-nav">
<ul>
<li><a class="b-link {% if page.title == 'Home' %}b-link--active{% endif %}" href="{{ site.baseurl }}/">Home</a></li>
<li><a class="b-link {% if page.title == 'Projects' %}b-link--active{% endif %}" href="{{ site.baseurl }}/projects/">Projects</a></li>
<li><a class="b-link {% if page.title == 'About Me' %}b-link--active{% endif %}" href="{{ site.baseurl }}/about/">About</a></li>
<li><a class="b-link {% if page.title == 'Contact Me' %}b-link--active{% endif %}" href="{{ site.baseurl }}/contact/">Contact</a></li>
</ul>
</div>
<div class="b-container">
<div class="b-menu">
<div class="b-bun b-bun--top"></div>
<div class="b-bun b-bun--mid"></div>
<div class="b-bun b-bun--bottom"></div>
</div>
</div>
<div class="content">
{{ content }}
</div>
<footer class="footer">
<ul>
<li><a href="{{ site.baseurl }}/" title='Home'>Home</a></li>
<li><a href="{{ site.baseurl }}/projects/" title="Projects">Projects</a></li>
<li><a href="{{ site.baseurl }}/about/" title="About">About</a></li>
<li><a href="{{ site.baseurl }}/contact/" title="Contact">Contact</a></li>
</ul>
<p class='text-footer'>Subscribe to my newsletter:</p>
<form action="//davison.us13.list-manage.com/subscribe/post?u=cc74974f892859e1b448d4a6a&amp;id=5854e5d70e" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
<input type="email" value="" placeholder='Your email' name="EMAIL" class="required email" id="mce-EMAIL">
<input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button">
</form>
<p class='text-footer'>Follow me elsewhere:</p>
<div class="social-heaven">
<a class="hvr-pop" href="https://medium.com/@davisonio">
<i title="Medium" class="fa fa-medium fa-2x"></i>
</a>
<a class="hvr-pop" href="https://github.com/davisonio">
<i title="GitHub" class="fa fa-github fa-2x"></i>
</a>
<a class="hvr-pop" href="https://ello.co/davisonio">
<i title="Ello" class="fa fa-circle fa-2x"></i>
</a>
<a class="hvr-pop" href="https://twitter.com/davisonio">
<i title="Twitter" class="fa fa-twitter fa-2x"></i>
</a>
<a class="hvr-pop" href="https://www.snapchat.com/add/davisonio">
<i title="Snapchat" class="fa fa-snapchat-ghost fa-2x"></i>
</a>
<a class="hvr-pop" href="https://www.instagram.com/craigdavisonio/">
<i title="Instagram" class="fa fa-instagram fa-2x"></i>
</a>
<a class="hvr-pop" href="https://www.facebook.com/craigdavisonio">
<i title="Facebook" class="fa fa-facebook fa-2x"></i>
</a>
<a class="hvr-pop" href="{{ site.baseurl }}/elsewhere/">
<i title="Elsewhere" class="fa fa-ellipsis-h fa-2x"></i>
</a>
</div>
</footer>
<script src="https://cdn.rawgit.com/mblode/burger/v2.0.2/dist/scripts/burger.min.js"></script>
<script src="{{ site.baseurl}}/assets/js/google-analytics.js"></script>
</body>
<!--
Copyright © 2015+ Craig Davison
License: https://github.com/davisonio/davison.io/blob/master/README.md#license--credits
-->
</html>

View File

@ -1,16 +1,48 @@
---
layout: main
layout: default
current: page
class: page-template
disqus: false
---
<article>
<header>
<h1>{{ page.title }}</h1>
{% if page.subtitle %}
<h2 class="sub-title">{{ page.subtitle }}</h2>
{% endif %}
<small>{{ page.description }}</small>
</header>
<div class="page-content">
{{ content }}
</div>
</article>
<!-- < default -->
<!-- The tag above means: insert everything in this file
into the {body} of the default.hbs template -->
<!-- The big featured header, it uses blog cover image as a BG if available -->
<header class="site-header outer">
<div class="inner">
{% include site-nav.html %}
</div>
</header>
<!-- Everything inside the #post tags pulls data from the post -->
<!-- #post -->
<main id="site-main" class="site-main outer" role="main">
<div class="inner">
<article class="post-full {{ page.subclass }} {% unless page.cover %}no-image{% endunless %}">
<header class="post-full-header">
<h1 class="post-full-title">{{ page.title }}</h1>
</header>
{% if page.cover %}
<figure class="post-full-image" style="background-image: url({{ site.baseurl }}{{ page.cover }})">
</figure>
{% endif %}
<section class="post-full-content">
{{ content }}
</section>
</article>
</div>
</main>
<!-- /post -->
<!-- The #contentFor helper here will send everything inside it up to the matching #block helper found in default.hbs -->
{% include page-scripts.html %}

195
_layouts/post.html Normal file
View File

@ -0,0 +1,195 @@
---
layout: default
current: post
class: post-template
disqus: false
---
<!-- default -->
<!-- The tag above means: insert everything in this file
into the {body} of the default.hbs template -->
<header class="site-header outer">
<div class="inner">
{% include site-nav.html %}
</div>
</header>
<!-- Everything inside the #post tags pulls data from the post -->
<!-- #post -->
<main id="site-main" class="site-main outer" role="main">
<div class="inner">
<article class="post-full {{ page.subclass }} {% unless page.cover %}no-image{% endunless %}">
<header class="post-full-header">
<section class="post-full-meta">
<time class="post-full-meta-date" datetime="{{ page.date | date:'%e %B %Y' }}">{{ page.date | date:'%e %B %Y' }}</time>
{% if page.tags.size > 0 %}
<span class="date-divider">/</span>
{% for tag in page.tags %}
{% if forloop.index == page.tags.size %}
<a href='{{ site.baseurl }}tag/{{ tag | downcase | replace: ' ', '-' }}/'>{{ tag | upcase }}</a>
{% else %}
<a href='{{ site.baseurl }}tag/{{ tag | downcase | replace: ' ', '-' }}/'>{{ tag | upcase }}</a>,
{% endif %}
{% endfor %}
{% endif %}
</section>
<h1 class="post-full-title">{{ page.title }}</h1>
</header>
{% if page.cover %}
<figure class="post-full-image" style="background-image: url({{ site.baseurl }}{{ page.cover }})">
</figure>
{% endif %}
<section class="post-full-content">
<div class="kg-card-markdown">
{{ content }}
</div>
</section>
<!-- Email subscribe form at the bottom of the page -->
{% if site.subscribers %}
<section class="subscribe-form">
<h3 class="subscribe-form-title">Subscribe to {{ site.title }}</h3>
<p>Get the latest posts delivered right to your inbox</p>
{% include subscribe-form.html placeholder="youremail@example.com" %}
</section>
{% endif %}
<footer class="post-full-footer">
<!-- Everything inside the #author tags pulls data from the author -->
<!-- #author-->
{% for author in site.data.authors %}
{% if author[1].username == page.author %}
<section class="author-card">
{% if author[1].picture %}
<img class="author-profile-image" src="{{ site.baseurl }}{{ author[1].picture }}" alt="{{ page.author }}" />
{% endif %}
<section class="author-card-content">
<h4 class="author-card-name"><a href="{{ site.baseurl }}author/{{ page.author }}">{{ author[1].name }}</a></h4>
{% if author[1].bio %}
<p>{{ author[1].bio }}</p>
{% else %}
<p>Read <a href="{{ site.baseurl }}author/{{ page.author }}">more posts</a> by this author.</p>
{% endif %}
</section>
</section>
<div class="post-full-footer-right">
<a class="author-card-button" href="{{ site.baseurl }}author/{{ page.author }}">Read More</a>
</div>
{% endif %}
{% endfor %}
<!-- /author -->
</footer>
<!-- If you use Disqus comments, just uncomment this block.
The only thing you need to change is "test-apkdzgmqhj" - which
should be replaced with your own Disqus site-id. -->
{% if site.disqus or page.disqus %}
<section class="post-full-comments">
<div id="disqus_thread"></div>
<script>
var disqus_config = function () {
this.page.url = '{{ site.url }}{{ site.baseurl }}';
this.page.identifier = '{{ site.title }}';
};
(function() {
var d = document, s = d.createElement('script');
s.src = 'https://{{ site.disqus_shortname }}.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
</section>
{% endif %}
</article>
</div>
</main>
<!-- Links to Previous/Next posts -->
<aside class="read-next outer">
<div class="inner">
<div class="read-next-feed">
{% if page.tags.size > 0 %}
{% assign primary = page.tags | first %}
{% assign related_posts = 0 %}
{% for post in site.posts %}
{% if post.tags.size > 0 %}
{% if post.tags contains primary %}
{% assign related_posts = related_posts | plus: 1 %}
{% endif %}
{% endif %}
{% endfor %}
{% if related_posts > 1 %}
<article class="read-next-card"
{% if site.cover %}
style="background-image: url({{ site.baseurl }}{{ site.cover }})"
{% else %}
{% if page.cover %}
style="background-image: url(url({{ site.baseurl }}{{ page.cover }})"{% endif %}
{% endif %}
>
<header class="read-next-card-header">
<small class="read-next-card-header-sitetitle">&mdash; {{ site.title }} &mdash;</small>
{% if primary %}
<h3 class="read-next-card-header-title"><a href="{{ site.baseurl }}tag/{{ primary | downcase | replace: ' ', '-' }}/">{{ primary | capitalize }}</a></h3>
{% endif %}
</header>
<div class="read-next-divider">{% include infinity.html %}</div>
<div class="read-next-card-content">
<ul>
{% assign count = 0 %}
{% for post in site.posts %}
{% if post.tags contains primary %}
{% if post.title != page.title %}
{% assign count = count | plus: 1 %}
{% if count <= 3 %}
<li><a href="{{ site.baseurl }}{{ post.url | remove_first: '/' }}">{{ post.title }}</a></li>
{% endif %}
{% endif %}
{% endif %}
{% endfor %}
</ul>
</div>
<footer class="read-next-card-footer">
<a href="{{ site.baseurl }}tag/{{ primary | downcase | replace: ' ', '-' }}/">
{% if related_posts > 1 %}
See all {{ related_posts | minus: 1 }} posts →
{% elsif related_posts == 1 %}
{{ related_posts }} post →
{% else %}
No posts.
{% endif %}
</a>
</footer>
</article>
{% endif %}
{% endif %}
<!-- If there's a next post, display it using the same markup included from - partials/post-card.hbs -->
{% if page.next %}
{% include post-card-next.html %}
{% endif %}
<!-- If there's a previous post, display it using the same markup included from - partials/post-card.hbs -->
{% if page.previous %}
{% include post-card-previous.html %}
{% endif %}
</div>
</div>
</aside>
<!-- Floating header which appears on-scroll, included from includes/floating-header.hbs -->
{% include floating-header.html %}
<!-- /post -->
<!-- The #contentFor helper here will send everything inside it up to the matching #block helper found in default.hbs -->

42
_layouts/tag.html Normal file
View File

@ -0,0 +1,42 @@
---
layout: default
current: tag
title: Tag Page
cover: false
class: 'tag-template'
navigation: True
logo: 'assets/images/ghost.png'
---
<!-- default -->
<!-- The tag above means - insert everything in this file into the {body} of the default.hbs template -->
<!-- The big featured header, it uses blog cover image as a BG if available -->
<!-- #tag -->
{% include dynamic_tag_info.html %}
<header class="site-header outer {% if cover or page.cover %}" style="background-image: url({{ site.baseurl }}{% if cover %}{{ cover }}{% else %}{{ page.cover }}{% endif%}) {% else %}no-cover{% endif %}">
<div class="inner">
{% include site-nav.html %}
<div class="site-header-content">
<h1 class="site-title">{{ page.tag | capitalizeall }}</h1>
<h2 class="site-description">
{% if tag_description %}
{{ tag_description }}
{% elsif page.tag %}
A collection of {{ paginator.total_posts }} posts
{% endif %}
</h2>
</div>
</div>
</header>
<!-- tag -->
<!-- The main content area -->
<main id="site-main" class="site-main outer" role="main">
<div class="inner">
<div class="post-feed">
<!-- The tag below includes the markup for each post - partials/post-card.hbs -->
{% include post-card.html %}
</div>
</div>
</main>

View File

@ -1,17 +0,0 @@
---
layout: page
title: Sent
permalink: /contact/sent/
sitemap: false
---
<style>
.content header {
background-image: url({{ site.baseurl }}/assets/img/drone-by-clem-onojeghuo.jpg);
background-size: cover;
background-position: center;
background-repeat:no-repeat;
}
</style>
<p class='largetype'>Thanks, email sent!</p>

17
_pages/index-2.md Normal file
View File

@ -0,0 +1,17 @@
---
layout: page
current: about
title: About
navigation: true
logo: 'assets/images/ghost.png'
class: page-template
subclass: 'post page'
---
Ghost is professional publishing platform designed for modern journalism. This is a demo site of a basic Ghost install to give you a general sense of what a new Ghost site looks like when set up for the first time.
> If you'd like to set up a site like this for yourself, head over to [Ghost.org](https://ghost.org/) and start a free 14 day trial to give Ghost a try!
If you're a developer: Ghost is a completely open source (MIT) Node.js application built on a JSON API with an Ember.js admin client. It works with MySQL and SQLite, and is publicly available [on Github](https://github.com/TryGhost/ghost).
If you need help with using Ghost, you'll find a ton of useful articles on [our knowledgebase](https://help.ghost.org/), as well as extensive [developer documentation](https://docs.ghost.org/).

76
_plugins/jekyll-autgenerator.rb Executable file
View File

@ -0,0 +1,76 @@
module Jekyll
class AuthorsGenerator < Generator
safe true
def generate(site)
site.data['authors'].each do |author, data|
posts = [author, posts_by_author(site, author)]
build_subpages(site, 'author', posts)
end
end
def build_subpages(site, type, posts)
posts[1] = posts[1].sort_by { |p| -p.date.to_f }
atomize(site, type, posts)
paginate(site, type, posts)
end
def atomize(site, type, posts)
path = "/author/#{posts[0]}"
atom = AtomPageAuthor.new(site, site.source, path, type, posts[0], posts[1])
site.pages << atom
end
def paginate(site, type, posts)
pages = Jekyll::Paginate::Pager.calculate_pages(posts[1], site.config['paginate'].to_i)
(1..pages).each do |num_page|
pager = Jekyll::Paginate::Pager.new(site, num_page, posts[1], pages)
path = "/author/#{posts[0]}"
if num_page > 1
path = path + "/page#{num_page}"
end
newpage = GroupSubPageAuthor.new(site, site.source, path, type, posts[0])
newpage.pager = pager
site.pages << newpage
end
end
private
def posts_by_author(site, author)
site.posts.docs.select { |post| post.data['author'] == author }
end
end
class GroupSubPageAuthor < Page
def initialize(site, base, dir, type, val)
@site = site
@base = base
@dir = dir
@name = 'index.html'
self.process(@name)
self.read_yaml(File.join(base, '_layouts'), "author.html")
self.data["grouptype"] = type
self.data[type] = val
end
end
class AtomPageAuthor < Page
def initialize(site, base, dir, type, val, posts)
@site = site
@base = base
@dir = dir
@name = 'feed.xml'
self.process(@name)
self.read_yaml(File.join(base, '_layouts'), "feed.xml")
self.data[type] = val
self.data["grouptype"] = type
self.data["posts"] = posts[0..9]
end
end
end

View File

@ -0,0 +1,11 @@
require 'liquid'
require 'uri'
# Capitalize all words of the input
module CapitalizeAll
def capitalizeall(words)
return words.split(' ').map(&:capitalize).join(' ')
end
end
Liquid::Template.register_filter(CapitalizeAll)

View File

@ -0,0 +1,69 @@
module Jekyll
class TagsGenerator < Generator
safe true
def generate(site)
site.tags.each do |tag|
build_subpages(site, "tag", tag)
end
end
def build_subpages(site, type, posts)
posts[1] = posts[1].sort_by { |p| -p.date.to_f }
atomize(site, type, posts)
paginate(site, type, posts)
end
def atomize(site, type, posts)
path = "/tag/#{posts[0]}".gsub(' ', '-').downcase
atom = AtomPageTags.new(site, site.source, path, type, posts[0], posts[1])
site.pages << atom
end
def paginate(site, type, posts)
pages = Jekyll::Paginate::Pager.calculate_pages(posts[1], site.config['paginate'].to_i)
(1..pages).each do |num_page|
pager = Jekyll::Paginate::Pager.new(site, num_page, posts[1], pages)
path = "/tag/#{posts[0]}".gsub(' ', '-').downcase
if num_page > 1
path = path + "/page#{num_page}"
end
newpage = GroupSubPageTags.new(site, site.source, path, type, posts[0])
newpage.pager = pager
site.pages << newpage
end
end
end
class GroupSubPageTags < Page
def initialize(site, base, dir, type, val)
@site = site
@base = base
@dir = dir
@name = 'index.html'
self.process(@name)
self.read_yaml(File.join(base, '_layouts'), "tag.html")
self.data["grouptype"] = type
self.data[type] = val
end
end
class AtomPageTags < Page
def initialize(site, base, dir, type, val, posts)
@site = site
@base = base
@dir = dir
@name = 'feed.xml'
self.process(@name)
self.read_yaml(File.join(base, '_layouts'), "feed.xml")
self.data[type] = val
self.data["grouptype"] = type
self.data["posts"] = posts[0..9]
end
end
end

File diff suppressed because it is too large Load Diff

17
assets/css/custom.css Normal file
View File

@ -0,0 +1,17 @@
.social-link {
font-size: 25px;
}
.social-link:hover {
text-decoration: none;
}
.site-title {
font-size: 6.5rem;
}
@media (max-width: 700px) {
.site-nav-right {
display: inherit;
}
}

View File

@ -1,7 +0,0 @@
body {
box-sizing: border-box;
min-width: 200px;
max-width: 980px;
margin: 0 auto;
padding: 45px;
}

View File

@ -1,656 +0,0 @@
@font-face {
font-family: octicons-link;
src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format('woff');
}
.markdown-body {
-webkit-text-size-adjust: 100%;
text-size-adjust: 100%;
color: #333;
font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-size: 16px;
line-height: 1.6;
word-wrap: break-word;
}
.markdown-body a {
background-color: transparent;
}
.markdown-body a:active,
.markdown-body a:hover {
outline: 0;
}
.markdown-body strong {
font-weight: bold;
}
.markdown-body h1 {
font-size: 2em;
margin: 0.67em 0;
}
.markdown-body img {
border: 0;
}
.markdown-body hr {
box-sizing: content-box;
height: 0;
}
.markdown-body pre {
overflow: auto;
}
.markdown-body code,
.markdown-body kbd,
.markdown-body pre {
font-family: monospace, monospace;
font-size: 1em;
}
.markdown-body input {
color: inherit;
font: inherit;
margin: 0;
}
.markdown-body html input[disabled] {
cursor: default;
}
.markdown-body input {
line-height: normal;
}
.markdown-body input[type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
.markdown-body table {
border-collapse: collapse;
border-spacing: 0;
}
.markdown-body td,
.markdown-body th {
padding: 0;
}
.markdown-body * {
box-sizing: border-box;
}
.markdown-body input {
font: 13px / 1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}
.markdown-body a {
color: #4078c0;
text-decoration: none;
}
.markdown-body a:hover,
.markdown-body a:active {
text-decoration: underline;
}
.markdown-body hr {
height: 0;
margin: 15px 0;
overflow: hidden;
background: transparent;
border: 0;
border-bottom: 1px solid #ddd;
}
.markdown-body hr:before {
display: table;
content: "";
}
.markdown-body hr:after {
display: table;
clear: both;
content: "";
}
.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
margin-top: 15px;
margin-bottom: 15px;
line-height: 1.1;
}
.markdown-body h1 {
font-size: 30px;
}
.markdown-body h2 {
font-size: 21px;
}
.markdown-body h3 {
font-size: 16px;
}
.markdown-body h4 {
font-size: 14px;
}
.markdown-body h5 {
font-size: 12px;
}
.markdown-body h6 {
font-size: 11px;
}
.markdown-body blockquote {
margin: 0;
}
.markdown-body ul,
.markdown-body ol {
padding: 0;
margin-top: 0;
margin-bottom: 0;
}
.markdown-body ol ol,
.markdown-body ul ol {
list-style-type: lower-roman;
}
.markdown-body ul ul ol,
.markdown-body ul ol ol,
.markdown-body ol ul ol,
.markdown-body ol ol ol {
list-style-type: lower-alpha;
}
.markdown-body dd {
margin-left: 0;
}
.markdown-body code {
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
font-size: 12px;
}
.markdown-body pre {
margin-top: 0;
margin-bottom: 0;
font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace;
}
.markdown-body .select::-ms-expand {
opacity: 0;
}
.markdown-body .octicon {
font: normal normal normal 16px/1 octicons-link;
display: inline-block;
text-decoration: none;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.markdown-body .octicon-link:before {
content: '\f05c';
}
.markdown-body:before {
display: table;
content: "";
}
.markdown-body:after {
display: table;
clear: both;
content: "";
}
.markdown-body>*:first-child {
margin-top: 0 !important;
}
.markdown-body>*:last-child {
margin-bottom: 0 !important;
}
.markdown-body a:not([href]) {
color: inherit;
text-decoration: none;
}
.markdown-body .anchor {
display: inline-block;
padding-right: 2px;
margin-left: -18px;
}
.markdown-body .anchor:focus {
outline: none;
}
.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
margin-top: 1em;
margin-bottom: 16px;
font-weight: bold;
line-height: 1.4;
}
.markdown-body h1 .octicon-link,
.markdown-body h2 .octicon-link,
.markdown-body h3 .octicon-link,
.markdown-body h4 .octicon-link,
.markdown-body h5 .octicon-link,
.markdown-body h6 .octicon-link {
color: #000;
vertical-align: middle;
visibility: hidden;
}
.markdown-body h1:hover .anchor,
.markdown-body h2:hover .anchor,
.markdown-body h3:hover .anchor,
.markdown-body h4:hover .anchor,
.markdown-body h5:hover .anchor,
.markdown-body h6:hover .anchor {
text-decoration: none;
}
.markdown-body h1:hover .anchor .octicon-link,
.markdown-body h2:hover .anchor .octicon-link,
.markdown-body h3:hover .anchor .octicon-link,
.markdown-body h4:hover .anchor .octicon-link,
.markdown-body h5:hover .anchor .octicon-link,
.markdown-body h6:hover .anchor .octicon-link {
visibility: visible;
}
.markdown-body h1 {
padding-bottom: 0.3em;
font-size: 2.25em;
line-height: 1.2;
border-bottom: 1px solid #eee;
}
.markdown-body h1 .anchor {
line-height: 1;
}
.markdown-body h2 {
padding-bottom: 0.3em;
font-size: 1.75em;
line-height: 1.225;
border-bottom: 1px solid #eee;
}
.markdown-body h2 .anchor {
line-height: 1;
}
.markdown-body h3 {
font-size: 1.5em;
line-height: 1.43;
}
.markdown-body h3 .anchor {
line-height: 1.2;
}
.markdown-body h4 {
font-size: 1.25em;
}
.markdown-body h4 .anchor {
line-height: 1.2;
}
.markdown-body h5 {
font-size: 1em;
}
.markdown-body h5 .anchor {
line-height: 1.1;
}
.markdown-body h6 {
font-size: 1em;
color: #777;
}
.markdown-body h6 .anchor {
line-height: 1.1;
}
.markdown-body p,
.markdown-body blockquote,
.markdown-body ul,
.markdown-body ol,
.markdown-body dl,
.markdown-body table,
.markdown-body pre {
margin-top: 0;
margin-bottom: 16px;
}
.markdown-body hr {
height: 4px;
padding: 0;
margin: 16px 0;
background-color: #e7e7e7;
border: 0 none;
}
.markdown-body ul,
.markdown-body ol {
padding-left: 2em;
}
.markdown-body ul ul,
.markdown-body ul ol,
.markdown-body ol ol,
.markdown-body ol ul {
margin-top: 0;
margin-bottom: 0;
}
.markdown-body li>p {
margin-top: 16px;
}
.markdown-body dl {
padding: 0;
}
.markdown-body dl dt {
padding: 0;
margin-top: 16px;
font-size: 1em;
font-style: italic;
font-weight: bold;
}
.markdown-body dl dd {
padding: 0 16px;
margin-bottom: 16px;
}
.markdown-body blockquote {
padding: 0 15px;
color: #777;
border-left: 4px solid #ddd;
}
.markdown-body blockquote>:first-child {
margin-top: 0;
}
.markdown-body blockquote>:last-child {
margin-bottom: 0;
}
.markdown-body table {
display: block;
width: 100%;
overflow: auto;
word-break: normal;
word-break: keep-all;
}
.markdown-body table th {
font-weight: bold;
}
.markdown-body table th,
.markdown-body table td {
padding: 6px 13px;
border: 1px solid #ddd;
}
.markdown-body table tr {
background-color: #fff;
border-top: 1px solid #ccc;
}
.markdown-body table tr:nth-child(2n) {
background-color: #f8f8f8;
}
.markdown-body img {
max-width: 100%;
box-sizing: content-box;
background-color: #fff;
}
.markdown-body code {
padding: 0;
padding-top: 0.2em;
padding-bottom: 0.2em;
margin: 0;
font-size: 85%;
background-color: rgba(0,0,0,0.04);
border-radius: 3px;
}
.markdown-body code:before,
.markdown-body code:after {
letter-spacing: -0.2em;
content: "\00a0";
}
.markdown-body pre>code {
padding: 0;
margin: 0;
font-size: 100%;
word-break: normal;
white-space: pre;
background: transparent;
border: 0;
}
.markdown-body .highlight {
margin-bottom: 16px;
}
.markdown-body .highlight pre,
.markdown-body pre {
padding: 16px;
overflow: auto;
font-size: 85%;
line-height: 1.45;
background-color: #f7f7f7;
border-radius: 3px;
}
.markdown-body .highlight pre {
margin-bottom: 0;
word-break: normal;
}
.markdown-body pre {
word-wrap: normal;
}
.markdown-body pre code {
display: inline;
max-width: initial;
padding: 0;
margin: 0;
overflow: initial;
line-height: inherit;
word-wrap: normal;
background-color: transparent;
border: 0;
}
.markdown-body pre code:before,
.markdown-body pre code:after {
content: normal;
}
.markdown-body kbd {
display: inline-block;
padding: 3px 5px;
font-size: 11px;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
.markdown-body .pl-c {
color: #969896;
}
.markdown-body .pl-c1,
.markdown-body .pl-s .pl-v {
color: #0086b3;
}
.markdown-body .pl-e,
.markdown-body .pl-en {
color: #795da3;
}
.markdown-body .pl-s .pl-s1,
.markdown-body .pl-smi {
color: #333;
}
.markdown-body .pl-ent {
color: #63a35c;
}
.markdown-body .pl-k {
color: #a71d5d;
}
.markdown-body .pl-pds,
.markdown-body .pl-s,
.markdown-body .pl-s .pl-pse .pl-s1,
.markdown-body .pl-sr,
.markdown-body .pl-sr .pl-cce,
.markdown-body .pl-sr .pl-sra,
.markdown-body .pl-sr .pl-sre {
color: #183691;
}
.markdown-body .pl-v {
color: #ed6a43;
}
.markdown-body .pl-id {
color: #b52a1d;
}
.markdown-body .pl-ii {
background-color: #b52a1d;
color: #f8f8f8;
}
.markdown-body .pl-sr .pl-cce {
color: #63a35c;
font-weight: bold;
}
.markdown-body .pl-ml {
color: #693a17;
}
.markdown-body .pl-mh,
.markdown-body .pl-mh .pl-en,
.markdown-body .pl-ms {
color: #1d3e81;
font-weight: bold;
}
.markdown-body .pl-mq {
color: #008080;
}
.markdown-body .pl-mi {
color: #333;
font-style: italic;
}
.markdown-body .pl-mb {
color: #333;
font-weight: bold;
}
.markdown-body .pl-md {
background-color: #ffecec;
color: #bd2c00;
}
.markdown-body .pl-mi1 {
background-color: #eaffea;
color: #55a532;
}
.markdown-body .pl-mdr {
color: #795da3;
font-weight: bold;
}
.markdown-body .pl-mo {
color: #1d3e81;
}
.markdown-body kbd {
display: inline-block;
padding: 3px 5px;
font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
.markdown-body .task-list-item {
list-style-type: none;
}
.markdown-body .task-list-item+.task-list-item {
margin-top: 3px;
}
.markdown-body .task-list-item input {
margin: 0 0.35em 0.25em -1.6em;
vertical-align: middle;
}
.markdown-body :checked+.radio-label {
z-index: 1;
position: relative;
border-color: #4078c0;
}

1
assets/css/global.css Executable file
View File

@ -0,0 +1 @@
a,abbr,acronym,address,applet,article,aside,audio,big,blockquote,body,canvas,caption,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,ul,var,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}img{max-width:100%}html{box-sizing:border-box;font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}*,:after,:before{box-sizing:inherit}a{background-color:transparent}a:active,a:hover{outline:0}b,strong{font-weight:700}dfn,em,i{font-style:italic}h1{margin:.67em 0;font-size:2em}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}mark{background-color:#fdffb6}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;color:inherit;font:inherit}button{overflow:visible;border:none}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input:focus{outline:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{padding:0;border:0}textarea{overflow:auto}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}html{overflow-y:scroll;font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body,html{overflow-x:hidden}body{color:#3c484e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-size:1.5rem;line-height:1.6em;font-weight:400;font-style:normal;letter-spacing:0;text-rendering:optimizeLegibility;background:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-moz-font-feature-settings:"liga" on}::selection{text-shadow:none;background:#cbeafb}hr{position:relative;display:block;width:100%;margin:2.5em 0 3.5em;padding:0;height:1px;border:0;border-top:1px solid #e3e9ed}audio,canvas,iframe,img,svg,video{vertical-align:middle}fieldset{margin:0;padding:0;border:0}textarea{resize:vertical}blockquote,dl,ol,p,ul{margin:0 0 1.5em}ol,ul{padding-left:1.3em;padding-right:1.5em}ol ol,ol ul,ul ol,ul ul{margin:.5em 0 1em}ul{list-style:disc}ol{list-style:decimal}li{margin:.5em 0;padding-left:.3em;line-height:1.6em}dt{float:left;margin:0 20px 0 0;width:120px;color:#15171a;font-weight:500;text-align:right}dd{margin:0 0 5px;text-align:left}blockquote{margin:1.5em 0;padding:0 1.6em;border-left:.5em solid #e5eff5}blockquote p{margin:.8em 0;font-size:1.2em;font-weight:300}blockquote small{display:inline-block;margin:.8em 0 .8em 1.5em;font-size:.9em;opacity:.8}blockquote small:before{content:"\2014 \00A0"}blockquote cite{font-weight:700}blockquote cite a{font-weight:400}a{color:#26a8ed;text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,h4,h5,h6{margin-top:0;line-height:1.15;font-weight:700;text-rendering:optimizeLegibility}h1{margin:0 0 .5em;font-size:5rem;font-weight:700}@media (max-width:500px){h1{font-size:2.2rem}}h2{margin:1.5em 0 .5em;font-size:2rem}@media (max-width:500px){h2{font-size:1.8rem}}h3{margin:1.5em 0 .5em;font-size:1.8rem;font-weight:500}@media (max-width:500px){h3{font-size:1.7rem}}h4{margin:1.5em 0 .5em;font-size:1.6rem;font-weight:500}h5,h6{margin:1.5em 0 .5em;font-size:1.4rem;font-weight:500}@media (-ms-high-contrast:active),(-ms-high-contrast:none){blockquote,ol,p,ul{width:100%}}

View File

@ -1,172 +0,0 @@
/* */
/* Global */
/* */
/* Override font to use Bootstrap defaults */
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
/* Make iframes and badges the right size */
.content iframe .iframe-badge {
display: inline-block;
margin: initial;
}
.content img[src^="https://img.shields.io/badge/"] {
display: block;
margin: initial;
width: inherit;
}
/* Not too much spacing */
p {
margin-top: 0.5rem;
margin-bottom: 0.5rem;
}
/* Helper */
.center {
text-align: center;
}
/* Mobile device changes */
.page-title {
margin-top: 4rem;
}
/* Footer */
.footer {
/* Remove edgy lowercasing */
text-transform: none;
padding-bottom: 5vmin;
}
.footer ul {
font-weight: bold;
margin-bottom: 40px;
}
.text-footer {
margin-top: 1rem;
margin-bottom: 0.7rem;
}
.footer .social-heaven {
margin-top: 0;
}
/* Main Content Block */
.content {
margin-bottom: 4vw;
}
.page-content {
margin-top: 4vw;
}
.content header {
margin-bottom: 0;
padding-bottom: 10vw;
}
.content h1 {
margin-top: 4vmin;
}
.content .sub-title {
margin-top: 2vmin;
}
/* */
/* Page: Home */
/* */
/* Social Heaven */
.social-heaven {
margin-top: 8vmin;
margin-left: -0.5rem;
}
.social-heaven .fa-end {
margin-left: 0;
margin-right: 0;
}
.social-heaven .fa {
/* Just the right amount of spacing for multiple icons! */
margin-left: 0.7rem;
margin-right: 0.7rem;
margin-top: 0.35rem;
margin-bottom: 0.35rem;
color: #555;
}
/* Colours are from the main colour of the site's logo */
.fa-medium:hover {
color: #0BE370;
}
.fa-github:hover {
color: #333333;
}
.fa-circle:hover {
color: black;
}
.fa-twitter:hover {
color: #55acee;
}
.fa-snapchat-ghost:hover {
color: #fffc00;
}
.fa-instagram:hover {
color: #EF0069;
}
.fa-facebook:hover {
color: #3C539A;
}
.fa-ellipsis-h:hover {
color: #268bd2;
}
/* */
/* Page: About */
/* */
img#my-profile-picture {
width: 300px;
height: auto;
}
img#awesome-logo {
width: 400px;
height: auto;
}
/* */
/* Page: Contact */
/* */
#contact-form {
margin-top: 20px;
font-size: 12px;
}
#contact-form input, #contact-form textarea {
padding: 5px;
width: 100%;
font-size: 1.4em;
margin: 0px 0px 10px 0px;
border: 2px solid #ccc;
}
#contact-form textarea {
height: 90px;
}
#contact-form textarea:focus, #contact-form input:focus {
border: 2px solid #268bd2;
}

View File

@ -1,83 +0,0 @@
/* */
/* Navigation */
/* */
.top-title-button a {
position: fixed;
z-index: 500;
top: 10px;
left: 10px;
padding-top: 9px;
padding-right: 12px;
padding-bottom: 9px;
padding-left: 12px;
background: #29292a;
transition: background 0.75s ease-out;
color: #fff;
text-decoration: none;
font-size: 20px;
line-height: 1.5;
}
.top-title-button a:hover {
background: #225d85;
color: #fff;
text-decoration: none;
font-size: 20px;
line-height: 1.5;
}
.b-menu {
position: fixed;
z-index: 500;
top: 10px;
right: 10px;
padding-top: 12px;
padding-left: 9px;
background: #29292a;
transition: background 0.75s ease-out;
height: 48px;
width: 48px;
border: 2px solid transparent;
border-radius: 0;
}
.b-menu:hover {
background: #225d85;
border: 2px solid transparent;
}
.b-nav {
z-index: 400;
}
div.b-nav {
top: 100px;
left: 30px;
}
.b-nav, body:after {
position: fixed;
}
.b-nav li:first-child {
padding-top: 20px;
}
body:after {
background: white;
}
.b-link {
color: #515151;
font-weight: bold;
font-size: 50px;
}
.b-link--active,
.b-link:hover {
border-left: #515151 solid 2px;
}

1
assets/css/screen.css Executable file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.pagination{position:relative;width:80%;max-width:800px;margin:4rem auto;font-family:Open Sans,sans-serif;font-size:1.3rem;color:#9eabb3;text-align:center}.pagination a{color:#3eb0ef;transition:all .2s ease}.newer-posts,.older-posts{position:absolute;display:inline-block;padding:0 15px;border:1px solid #bfc8cd;text-decoration:none;border-radius:4px;transition:border .3s ease}.older-posts{right:0}.page-number{display:inline-block;padding:2px 0;min-width:100px}.newer-posts{left:0}.newer-posts:hover,.older-posts:hover{color:#3eb0ef;border-color:#98a0a4}.extra-pagination{display:none;border-bottom:1px solid #ebf2f6}.extra-pagination:after{display:block;content:"";width:7px;height:7px;border:1px solid #e7eef2;position:absolute;bottom:-5px;left:50%;margin-left:-5px;background:#fff;border-radius:100%;box-shadow:0 0 0 5px #fff}.extra-pagination .pagination{width:auto}.paged .main-header{max-height:30vh}.paged .extra-pagination{display:block}.pagination{padding-top:4rem;border-top:1px solid #bfc8cd;word-wrap:break-word}.pagination:before{display:block;content:"";width:7px;height:7px;border:1px solid #bfc8cd;position:absolute;top:-5px;left:50%;margin-left:-5px;background:#f4f8fb;border-radius:100%;box-shadow:0 0 0 5px #f4f8fb}.highlight code,.highlight pre,.highlight table,.highlight tbody,.highlight tr,figure.highlight,td.code{border:none;min-width:100%;max-width:100%}.highlight table,.highlight td pre{padding:0;margin:0}.highlight table td{border:none;margin:none;padding:none}.highlight table td:first-child,.highlight table td:last-child{background:none}

1
assets/css/syntax.css Normal file

File diff suppressed because one or more lines are too long

BIN
assets/images/abraham.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 KiB

BIN
assets/images/advanced.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
assets/images/bear.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
assets/images/blog-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

BIN
assets/images/bus.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

BIN
assets/images/design.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

BIN
assets/images/edgar.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
assets/images/fables.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

BIN
assets/images/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

@ -0,0 +1 @@
<svg class="ghost-svg" viewBox="0 0 493 161" xmlns="http://www.w3.org/2000/svg"><title>Ghost Logo</title><g fill="none" fill-rule="evenodd"><path d="M328.52 37.36c-27.017 0-40.97 19.323-40.97 43.16 0 23.837 13.61 43.162 40.97 43.162s40.968-19.325 40.968-43.163c0-23.84-13.954-43.16-40.97-43.16zm20.438 43.237c-.02 15.328-5.126 27.743-20.44 27.743-15.312 0-20.42-12.414-20.435-27.743v-.078c.016-15.33 5.124-27.74 20.437-27.74 15.312 0 20.42 12.41 20.438 27.74v.07zM207.553 5.19c0-1.103.885-2.124 1.984-2.282 0 0 13.577-1.95 14.784-2.115 1.37-.187 3.19.798 3.19 2.744v44.236c3.23-3.105 6.79-5.608 10.66-7.515 3.88-1.906 8.43-2.86 13.66-2.86 4.53 0 8.53.776 12.03 2.33 3.5 1.55 6.43 3.73 8.77 6.533 2.34 2.81 4.12 6.16 5.33 10.05 1.21 3.9 1.82 8.19 1.82 12.87v51.35c0 1.1-.89 2-2 2h-15.95c-1.1 0-2-.9-2-1.99V69.18c0-5.118-1.17-9.08-3.51-11.888-2.35-2.804-5.86-4.207-10.544-4.207-3.45 0-6.677.79-9.69 2.37-3.02 1.58-5.87 3.73-8.564 6.46v58.617c0 1.102-.894 2-2.002 2h-15.94c-1.11 0-2.005-.895-2.005-2V5.188zm244.007 95.327v-43.68h-13.482c-1.1 0-1.742-.87-1.443-1.916l3-10.49c.262-.9.942-1.87 2.308-2.07l9.597-1.35 3.508-23.49c.163-1.09 1.18-2.1 2.274-2.26 0 0 9.192-1.31 10.963-1.58 1.673-.25 3.19.97 3.19 2.81v24.52h17.565c1.106 0 2.002.9 2.002 2.01v11.82c0 1.11-.89 2.01-2.002 2.01h-17.566v43.08c0 6.02 3.623 8.32 7.095 8.32 2.12 0 5.02-1.14 7.19-2.16 1.34-.62 3.41-.16 3.95 1.73l2.45 8.65c.3 1.07-.25 2.37-1.23 2.86 0 0-7.29 4.37-17.06 4.37-13.73 0-22.33-8.08-22.33-23.16zm-44.584-47.74c-7.084 0-12.657 2.476-12.657 8.433 0 7.44 12.01 9.606 20.23 12.64 5.49 2.027 20.24 5.98 20.24 22.016 0 19.48-16 27.807-33.06 27.807-17.06 0-25.4-5.465-25.4-5.465-.96-.527-1.5-1.822-1.2-2.89 0 0 2.1-7.52 2.64-9.386.48-1.68 2.41-2.27 3.64-1.792 4.39 1.712 12.32 4.092 21.28 4.092 9.07 0 13.46-2.803 13.46-8.777 0-7.95-12.26-10.38-20.36-12.967-5.59-1.78-20.36-5.93-20.36-23.566 0-17.373 15.08-25.524 31.2-25.524 13.64 0 23.5 4.69 23.5 4.69 1.01.427 1.58 1.635 1.28 2.698l-2.658 9.357c-.488 1.74-1.898 2.537-3.666 1.957-3.89-1.277-11.2-3.322-18.15-3.322zm-210.313-15.28c-6.695.775-11.472 3.962-14.562 6.93-6.06-4.81-14.49-7.106-23.94-7.106-18.95 0-33.76 9.26-33.76 29.43 0 11.58 4.88 19.56 12.62 24.26-5.75 2.75-9.57 8.59-9.57 14.34 0 9.61 7.5 12.61 7.5 12.61s-13.11 6.44-13.11 19.32c0 16.49 15.01 23.16 33.34 23.16 26.43 0 44.61-11.04 44.61-31.31 0-12.47-9.44-19.36-30.01-20.18-12.2-.48-20.11-.93-22.07-1.58-2.59-.87-3.86-2.96-3.86-5.28 0-2.55 2.08-4.98 5.35-6.65 2.86.516 5.87.768 8.99.768 18.97 0 33.76-9.223 33.76-29.425 0-4.897-.87-9.15-2.46-12.78 2.79-1.506 8.34-2.25 8.34-2.25 1.09-.17 1.975-1.21 1.974-2.31V40.3c0-1.88-1.59-2.955-3.1-2.78zm-49.13 85.132s9.954.38 19.9.84c11.172.52 14.654 2.96 14.654 8.81 0 7.15-9.71 14.1-23.28 14.1-12.88 0-19.314-4.54-19.314-12.08 0-4.33 2.26-9.18 8.04-11.69zm10.66-40.54c-8.978 0-15.983-4.83-15.983-15.35 0-10.53 7.01-15.35 15.983-15.35 8.974 0 15.984 4.81 15.984 15.34 0 10.53-7.002 15.34-15.984 15.34z" fill="#2D3134"/><g opacity=".6" transform="translate(0 36)" fill="#2E3134"><rect x=".209" y="69.017" width="33.643" height="17.014" rx="4"/><rect x="50.672" y="69.017" width="33.622" height="17.014" rx="4"/><rect x=".184" y="34.99" width="84.121" height="17.014" rx="4"/><rect x=".209" y=".964" width="50.469" height="17.013" rx="4"/><rect x="67.494" y=".964" width="16.821" height="17.013" rx="4"/></g></g></svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
assets/images/ghost.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

BIN
assets/images/grapes.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 KiB

BIN
assets/images/hannah.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

BIN
assets/images/john.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
assets/images/lewis.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

BIN
assets/images/locked.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

BIN
assets/images/martin.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
assets/images/piano.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
assets/images/sky.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
assets/images/speeches.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

BIN
assets/images/summit.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

BIN
assets/images/tags.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

BIN
assets/images/team.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

BIN
assets/images/water.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

BIN
assets/images/waves.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

BIN
assets/images/welcome.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

BIN
assets/images/writing.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

@ -1,10 +0,0 @@
---
sitemap: false
---
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', '{{ site.google_analytics_tracking_id }}', 'auto');
ga('send', 'pageview');

83
assets/js/infinitescroll.js Executable file
View File

@ -0,0 +1,83 @@
// Code snippet inspired by https://github.com/douglasrodrigues5/ghost-blog-infinite-scroll
$(function ($) {
var currentPage = 1;
var pathname = window.location.pathname;
var $document = $(document);
var $result = $('.post-feed');
var buffer = 100;
var ticking = false;
var isLoading = false;
var lastScrollY = window.scrollY;
var lastWindowHeight = window.innerHeight;
var lastDocumentHeight = $document.height();
// remove hash params from pathname
pathname = pathname.replace(/#(.*)$/g, '').replace('/\//g', '/');
function onScroll() {
lastScrollY = window.scrollY;
requestTick();
}
function onResize() {
lastWindowHeight = window.innerHeight;
lastDocumentHeight = $document.height();
requestTick();
}
function requestTick() {
if (!ticking) {
requestAnimationFrame(infiniteScroll)
}
ticking = true;
}
function infiniteScroll () {
// return if already loading
if (isLoading) {
return;
}
// return if not scroll to the bottom
if (lastScrollY + lastWindowHeight <= lastDocumentHeight - buffer) {
ticking = false;
return;
}
// return if currentPage is the last page already
if (currentPage === maxPages) {
return;
}
isLoading = true;
// next page
currentPage++;
// Load more
var nextPage = pathname + 'page' + currentPage + '/';
$.get(nextPage, function (content) {
$result.append($(content).find('.post').hide().fadeIn(100));
}).fail(function (xhr) {
// 404 indicates we've run out of pages
if (xhr.status === 404) {
window.removeEventListener('scroll', onScroll, {passive: true});
window.removeEventListener('resize', onResize);
}
}).always(function () {
lastDocumentHeight = $document.height();
isLoading = false;
ticking = false;
});
}
window.addEventListener('scroll', onScroll, {passive: true});
window.addEventListener('resize', onResize);
infiniteScroll();
});

89
assets/js/jquery.fitvids.js Executable file
View File

@ -0,0 +1,89 @@
/*jshint browser:true */
/*!
* FitVids 1.3
*
*
* Copyright 2017, Chris Coyier + Dave Rupert + Ghost Foundation
* This is an unofficial release, ported by John O'Nolan
* Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/
* Released under the MIT license
*
*/
;(function( $ ){
'use strict';
$.fn.fitVids = function( options ) {
var settings = {
customSelector: null,
ignore: null
};
if(!document.getElementById('fit-vids-style')) {
// appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js
var head = document.head || document.getElementsByTagName('head')[0];
var css = '.fluid-width-video-container{flex-grow: 1;width:100%;}.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}';
var div = document.createElement("div");
div.innerHTML = '<p>x</p><style id="fit-vids-style">' + css + '</style>';
head.appendChild(div.childNodes[1]);
}
if ( options ) {
$.extend( settings, options );
}
return this.each(function(){
var selectors = [
'iframe[src*="player.vimeo.com"]',
'iframe[src*="youtube.com"]',
'iframe[src*="youtube-nocookie.com"]',
'iframe[src*="kickstarter.com"][src*="video.html"]',
'object',
'embed'
];
if (settings.customSelector) {
selectors.push(settings.customSelector);
}
var ignoreList = '.fitvidsignore';
if(settings.ignore) {
ignoreList = ignoreList + ', ' + settings.ignore;
}
var $allVideos = $(this).find(selectors.join(','));
$allVideos = $allVideos.not('object object'); // SwfObj conflict patch
$allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video.
$allVideos.each(function(){
var $this = $(this);
if($this.parents(ignoreList).length > 0) {
return; // Disable FitVids on this video.
}
if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; }
if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width'))))
{
$this.attr('height', 9);
$this.attr('width', 16);
}
var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(),
width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(),
aspectRatio = height / width;
if(!$this.attr('name')){
var videoName = 'fitvid' + $.fn.fitVids._count;
$this.attr('name', videoName);
$.fn.fitVids._count++;
}
$this.wrap('<div class="fluid-width-video-container"><div class="fluid-width-video-wrapper"></div></div>').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%');
$this.removeAttr('height').removeAttr('width');
});
});
};
// Internal counter for unique video names.
$.fn.fitVids._count = 0;
// Works with either jQuery or Zepto
})( window.jQuery || window.Zepto );

33
index.html Normal file
View File

@ -0,0 +1,33 @@
---
layout: default
current: home
class: 'home-template'
navigation: True
---
<!-- < default -->
<!-- The tag above means: insert everything in this file
into the {body} of the default.hbs template -->
<!-- The big featured header, it uses blog cover image as a BG if available -->
<header class="site-header outer {% if page.cover or site.cover %}" style="background-image: url({{ site.baseurl }}{% if page.cover %}{{ page.cover }}{% elsif site.cover %}{{ site.cover }}{% endif %}) {% else %}no-cover{% endif %}">
<div class="inner">
<div class="site-header-content">
<h1 class="site-title">
{% if site.logo %}
<img class="site-logo" src="{{ site.baseurl }}{{ site.logo }}" alt="{{ site.title }}"/>
{% else %}
{{ site.title }}
{% endif %}
</h1>
<h2 class="site-description">{% if page.description %}{{ page.description }}{% else %}{{ site.description }}{% endif %}</h2>
</div>
{% include site-nav.html %}
</div>
</header>
<!-- The main content area -->
<main id="site-main" class="site-main outer" role="main">
<div class="inner">
</div>
</main>

View File

@ -4,13 +4,14 @@
Here's the source code of my website which you can find at [davison.io](https://davison.io).
Blog is powered by [Ghost](https://ghost.org). Static pages are generated by [Jekyll](https://jekyllrb.com).
Blog is powered by [Ghost](https://ghost.org). Static pages are generated by [Jekyll](https://jekyllrb.com) using [Jasper2](https://github.com/jekyller/jasper2).
## Install
Install plugins:
```
gem install jekyll-sitemap
gem install jekyll-paginate
```
## Credits

View File

@ -1,3 +1,4 @@
User-agent: *
Disallow: /contact/done/
Disallow:
Sitemap: https://davison.io/sitemap.xml
Sitemap: https://davison.io/blog/sitemap.xml