aboutsummaryrefslogtreecommitdiff
path: root/_includes
diff options
context:
space:
mode:
Diffstat (limited to '_includes')
-rw-r--r--_includes/analytics-providers/custom.html3
-rw-r--r--_includes/analytics-providers/google-gtag.html9
-rw-r--r--_includes/analytics-providers/google-universal.html7
-rw-r--r--_includes/analytics-providers/google.html14
-rw-r--r--_includes/analytics.html14
-rw-r--r--_includes/archive-single.html38
-rw-r--r--_includes/author-profile-custom-links.html7
-rw-r--r--_includes/author-profile.html263
-rw-r--r--_includes/breadcrumbs.html39
-rw-r--r--_includes/browser-upgrade.html3
-rw-r--r--_includes/category-list.html26
-rw-r--r--_includes/comment.html22
-rw-r--r--_includes/comments-providers/custom.html3
-rw-r--r--_includes/comments-providers/discourse.html13
-rw-r--r--_includes/comments-providers/disqus.html15
-rw-r--r--_includes/comments-providers/facebook.html8
-rw-r--r--_includes/comments-providers/scripts.html18
-rw-r--r--_includes/comments-providers/staticman.html40
-rw-r--r--_includes/comments-providers/staticman_v2.html40
-rw-r--r--_includes/comments-providers/utterances.html20
-rw-r--r--_includes/comments.html159
-rw-r--r--_includes/documents-collection.html19
-rw-r--r--_includes/feature_row53
-rw-r--r--_includes/figure12
-rw-r--r--_includes/footer.html19
-rw-r--r--_includes/footer/custom.html3
-rw-r--r--_includes/gallery51
-rw-r--r--_includes/group-by-array47
-rw-r--r--_includes/head.html41
-rw-r--r--_includes/head/custom.html5
-rw-r--r--_includes/masthead.html46
-rw-r--r--_includes/nav_list47
-rw-r--r--_includes/page__hero.html72
-rw-r--r--_includes/page__hero_video.html4
-rw-r--r--_includes/page__taxonomy.html7
-rw-r--r--_includes/paginator.html69
-rw-r--r--_includes/post_pagination.html14
-rw-r--r--_includes/posts-category.html3
-rw-r--r--_includes/posts-tag.html3
-rw-r--r--_includes/read-time.html15
-rw-r--r--_includes/scripts.html39
-rw-r--r--_includes/search/algolia-search-scripts.html54
-rw-r--r--_includes/search/google-search-scripts.html30
-rw-r--r--_includes/search/lunr-search-scripts.html10
-rw-r--r--_includes/search/search_form.html26
-rw-r--r--_includes/seo.html161
-rw-r--r--_includes/sidebar.html24
-rw-r--r--_includes/skip-links.html8
-rw-r--r--_includes/social-share.html11
-rw-r--r--_includes/tag-list.html26
-rw-r--r--_includes/toc7
-rw-r--r--_includes/toc.html85
-rw-r--r--_includes/video13
53 files changed, 1785 insertions, 0 deletions
diff --git a/_includes/analytics-providers/custom.html b/_includes/analytics-providers/custom.html
new file mode 100644
index 0000000..c34b97a
--- /dev/null
+++ b/_includes/analytics-providers/custom.html
@@ -0,0 +1,3 @@
+<!-- start custom analytics snippet -->
+
+<!-- end custom analytics snippet --> \ No newline at end of file
diff --git a/_includes/analytics-providers/google-gtag.html b/_includes/analytics-providers/google-gtag.html
new file mode 100644
index 0000000..16d0cf1
--- /dev/null
+++ b/_includes/analytics-providers/google-gtag.html
@@ -0,0 +1,9 @@
+<!-- Global site tag (gtag.js) - Google Analytics -->
+<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.analytics.google.tracking_id }}"></script>
+<script>
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+
+ gtag('config', '{{ site.analytics.google.tracking_id }}', { 'anonymize_ip': {{ site.analytics.google.anonymize_ip | default: false }}});
+</script>
diff --git a/_includes/analytics-providers/google-universal.html b/_includes/analytics-providers/google-universal.html
new file mode 100644
index 0000000..68c2674
--- /dev/null
+++ b/_includes/analytics-providers/google-universal.html
@@ -0,0 +1,7 @@
+<script>
+ window.ga=function(){ga.q.push(arguments)};ga.q=[];ga.l=+new Date;
+ ga('create','{{ site.analytics.google.tracking_id }}','auto');
+ ga('set', 'anonymizeIp', {{ site.analytics.google.anonymize_ip | default: false }});
+ ga('send','pageview')
+</script>
+<script src="https://www.google-analytics.com/analytics.js" async></script>
diff --git a/_includes/analytics-providers/google.html b/_includes/analytics-providers/google.html
new file mode 100644
index 0000000..c5742b9
--- /dev/null
+++ b/_includes/analytics-providers/google.html
@@ -0,0 +1,14 @@
+<script>
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', '{{ site.analytics.google.tracking_id }}']);
+ {% if site.analytics.google.anonymize_ip == true %}
+ _gaq.push(['_gat._anonymizeIp']);
+ {% endif %}
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+</script>
diff --git a/_includes/analytics.html b/_includes/analytics.html
new file mode 100644
index 0000000..371469f
--- /dev/null
+++ b/_includes/analytics.html
@@ -0,0 +1,14 @@
+{% if jekyll.environment == 'production' and site.analytics.provider and page.analytics != false %}
+
+{% case site.analytics.provider %}
+{% when "google" %}
+ {% include /analytics-providers/google.html %}
+{% when "google-universal" %}
+ {% include /analytics-providers/google-universal.html %}
+{% when "google-gtag" %}
+ {% include /analytics-providers/google-gtag.html %}
+{% when "custom" %}
+ {% include /analytics-providers/custom.html %}
+{% endcase %}
+
+{% endif %} \ No newline at end of file
diff --git a/_includes/archive-single.html b/_includes/archive-single.html
new file mode 100644
index 0000000..489f000
--- /dev/null
+++ b/_includes/archive-single.html
@@ -0,0 +1,38 @@
+{% if post.header.teaser %}
+ {% capture teaser %}{{ post.header.teaser }}{% endcapture %}
+{% else %}
+ {% assign teaser = site.teaser %}
+{% endif %}
+
+{% if post.id %}
+ {% assign title = post.title | markdownify | remove: "<p>" | remove: "</p>" %}
+{% else %}
+ {% assign title = post.title %}
+{% endif %}
+
+<div class="{{ include.type | default: "list" }}__item">
+ <article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
+ {% if include.type == "grid" and teaser %}
+ <div class="archive__item-teaser">
+ <img src=
+ {% if teaser contains "://" %}
+ "{{ teaser }}"
+ {% else %}
+ "{{ teaser | relative_url }}"
+ {% endif %}
+ alt="">
+ </div>
+ {% endif %}
+ <h2 class="archive__item-title" itemprop="headline">
+ {% if post.link %}
+ <a href="{{ post.link }}">{{ title }}</a> <a href="{{ post.url | relative_url }}" rel="permalink"><i class="fas fa-link" aria-hidden="true" title="permalink"></i><span class="sr-only">Permalink</span></a>
+ {% else %}
+ <a href="{{ post.url | relative_url }}" rel="permalink">{{ title }}</a>
+ {% endif %}
+ </h2>
+ {% if post.read_time %}
+ <p class="page__meta"><i class="far fa-clock" aria-hidden="true"></i> {% include read-time.html %}</p>
+ {% endif %}
+ {% if post.excerpt %}<p class="archive__item-excerpt" itemprop="description">{{ post.excerpt | markdownify | strip_html | truncate: 160 }}</p>{% endif %}
+ </article>
+</div>
diff --git a/_includes/author-profile-custom-links.html b/_includes/author-profile-custom-links.html
new file mode 100644
index 0000000..b89ffcb
--- /dev/null
+++ b/_includes/author-profile-custom-links.html
@@ -0,0 +1,7 @@
+<!--
+ <li>
+ <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fas fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+ </a>
+ </li>
+--> \ No newline at end of file
diff --git a/_includes/author-profile.html b/_includes/author-profile.html
new file mode 100644
index 0000000..b7d6214
--- /dev/null
+++ b/_includes/author-profile.html
@@ -0,0 +1,263 @@
+{% assign author = page.author | default: page.authors[0] | default: site.author %}
+{% assign author = site.data.authors[author] | default: author %}
+
+<div itemscope itemtype="https://schema.org/Person">
+
+ {% if author.avatar %}
+ <div class="author__avatar">
+ {% if author.avatar contains "://" %}
+ {% assign author_src = author.avatar %}
+ {% else %}
+ {% assign author_src = author.avatar | relative_url %}
+ {% endif %}
+
+ {% if author.home %}
+ {% if author.home contains "://" %}
+ {% assign author_link = author.home %}
+ {% else %}
+ {% assign author_link = author.home | relative_url %}
+ {% endif %}
+ <a href="{{ author_link }}">
+ <img src="{{ author_src }}" alt="{{ author.name }}" itemprop="image">
+ </a>
+ {% else %}
+ <img src="{{ author_src }}" alt="{{ author.name }}" itemprop="image">
+ {% endif %}
+ </div>
+ {% endif %}
+
+ <div class="author__content">
+ {% if author.home %}
+ <a href="{{ author_link }}"><h3 class="author__name" itemprop="name">{{ author.name }}</h3></a>
+ {% else %}
+ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
+ {% endif %}
+ {% if author.bio %}
+ <div class="author__bio" itemprop="description">
+ {{ author.bio | markdownify }}
+ </div>
+ {% endif %}
+ </div>
+
+ <div class="author__urls-wrapper">
+ <button class="btn btn--inverse">{{ site.data.ui-text[site.locale].follow_label | remove: ":" | default: "Follow" }}</button>
+ <ul class="author__urls social-icons">
+ {% if author.location %}
+ <li itemprop="homeLocation" itemscope itemtype="https://schema.org/Place">
+ <i class="fas fa-fw fa-map-marker-alt" aria-hidden="true"></i> <span itemprop="name">{{ author.location }}</span>
+ </li>
+ {% endif %}
+
+ {% if author.links %}
+ {% for link in author.links %}
+ {% if link.label and link.url %}
+ <li><a href="{{ link.url }}" rel="nofollow noopener noreferrer"><i class="{{ link.icon | default: 'fas fa-link' }}" aria-hidden="true"></i> {{ link.label }}</a></li>
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+
+ {% if author.uri %}
+ <li>
+ <a href="{{ author.uri }}" itemprop="url">
+ <i class="fas fa-fw fa-link" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].website_label | default: "Website" }}
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.email %}
+ <li>
+ <a href="mailto:{{ author.email }}">
+ <meta itemprop="email" content="{{ author.email }}" />
+ <i class="fas fa-fw fa-envelope-square" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].email_label | default: "Email" }}
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.keybase %}
+ <li>
+ <a href="https://keybase.io/{{ author.keybase }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fas fa-fw fa-key" aria-hidden="true"></i> Keybase
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.twitter %}
+ <li>
+ <a href="https://twitter.com/{{ author.twitter }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.facebook %}
+ <li>
+ <a href="https://www.facebook.com/{{ author.facebook }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-facebook-square" aria-hidden="true"></i> Facebook
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.linkedin %}
+ <li>
+ <a href="https://www.linkedin.com/in/{{ author.linkedin }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-linkedin" aria-hidden="true"></i> LinkedIn
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.xing %}
+ <li>
+ <a href="https://www.xing.com/profile/{{ author.xing }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-xing-square" aria-hidden="true"></i> XING
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.instagram %}
+ <li>
+ <a href="https://instagram.com/{{ author.instagram }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-instagram" aria-hidden="true"></i> Instagram
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.tumblr %}
+ <li>
+ <a href="https://{{ author.tumblr }}.tumblr.com" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-tumblr-square" aria-hidden="true"></i> Tumblr
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.bitbucket %}
+ <li>
+ <a href="https://bitbucket.org/{{ author.bitbucket }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-bitbucket" aria-hidden="true"></i> Bitbucket
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.github %}
+ <li>
+ <a href="https://github.com/{{ author.github }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-github" aria-hidden="true"></i> GitHub
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.gitlab %}
+ <li>
+ <a href="https://gitlab.com/{{ author.gitlab }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-gitlab" aria-hidden="true"></i> GitLab
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.stackoverflow %}
+ <li>
+ <a href="https://stackoverflow.com/users/{{ author.stackoverflow }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-stack-overflow" aria-hidden="true"></i> Stack Overflow
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.lastfm %}
+ <li>
+ <a href="https://last.fm/user/{{ author.lastfm }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-lastfm-square" aria-hidden="true"></i> Last.fm
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.dribbble %}
+ <li>
+ <a href="https://dribbble.com/{{ author.dribbble }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-dribbble" aria-hidden="true"></i> Dribbble
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.pinterest %}
+ <li>
+ <a href="https://www.pinterest.com/{{ author.pinterest }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-pinterest" aria-hidden="true"></i> Pinterest
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.foursquare %}
+ <li>
+ <a href="https://foursquare.com/{{ author.foursquare }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-foursquare" aria-hidden="true"></i> Foursquare
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.steam %}
+ <li>
+ <a href="https://steamcommunity.com/id/{{ author.steam }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-steam" aria-hidden="true"></i> Steam
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.youtube %}
+ {% if author.youtube contains "://" %}
+ <li>
+ <a href="{{ author.youtube }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-youtube" aria-hidden="true"></i> YouTube
+ </a>
+ </li>
+ {% else author.youtube %}
+ <li>
+ <a href="https://www.youtube.com/user/{{ author.youtube }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-youtube" aria-hidden="true"></i> YouTube
+ </a>
+ </li>
+ {% endif %}
+ {% endif %}
+
+ {% if author.soundcloud %}
+ <li>
+ <a href="https://soundcloud.com/{{ author.soundcloud }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-soundcloud" aria-hidden="true"></i> SoundCloud
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.weibo %}
+ <li>
+ <a href="https://www.weibo.com/{{ author.weibo }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-weibo" aria-hidden="true"></i> Weibo
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.flickr %}
+ <li>
+ <a href="https://www.flickr.com/{{ author.flickr }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-flickr" aria-hidden="true"></i> Flickr
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.codepen %}
+ <li>
+ <a href="https://codepen.io/{{ author.codepen }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-codepen" aria-hidden="true"></i> CodePen
+ </a>
+ </li>
+ {% endif %}
+
+ {% if author.vine %}
+ <li>
+ <a href="https://vine.co/u/{{ author.vine }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+ <i class="fab fa-fw fa-vine" aria-hidden="true"></i> Vine
+ </a>
+ </li>
+ {% endif %}
+
+ {% include author-profile-custom-links.html %}
+ </ul>
+ </div>
+</div>
diff --git a/_includes/breadcrumbs.html b/_includes/breadcrumbs.html
new file mode 100644
index 0000000..cba3d41
--- /dev/null
+++ b/_includes/breadcrumbs.html
@@ -0,0 +1,39 @@
+{% case site.category_archive.type %}
+ {% when "liquid" %}
+ {% assign path_type = "#" %}
+ {% when "jekyll-archives" %}
+ {% assign path_type = nil %}
+{% endcase %}
+
+{% if page.collection != 'posts' %}
+ {% assign path_type = nil %}
+ {% assign crumb_path = '/' %}
+{% else %}
+ {% assign crumb_path = site.category_archive.path %}
+{% endif %}
+
+<nav class="breadcrumbs">
+ <ol itemscope itemtype="https://schema.org/BreadcrumbList">
+ {% assign crumbs = page.url | split: '/' %}
+ {% assign i = 1 %}
+ {% for crumb in crumbs offset: 1 %}
+ {% if forloop.first %}
+ <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
+ <a href="{{ site.url }}{{ site.baseurl }}/" itemprop="item"><span itemprop="name">{{ site.data.ui-text[site.locale].breadcrumb_home_label | default: "Home" }}</span></a>
+ <meta itemprop="position" content="{{ i }}" />
+ </li>
+ <span class="sep">{{ site.data.ui-text[site.locale].breadcrumb_separator | default: "/" }}</span>
+ {% endif %}
+ {% if forloop.last %}
+ <li class="current">{{ page.title }}</li>
+ {% else %}
+ {% assign i = i | plus: 1 %}
+ <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
+ <a href="{{ crumb | downcase | replace: '%20', '-' | prepend: path_type | prepend: crumb_path | relative_url }}" itemprop="item"><span itemprop="name">{{ crumb | replace: '-', ' ' | replace: '%20', ' ' | capitalize }}</span></a>
+ <meta itemprop="position" content="{{ i }}" />
+ </li>
+ <span class="sep">{{ site.data.ui-text[site.locale].breadcrumb_separator | default: "/" }}</span>
+ {% endif %}
+ {% endfor %}
+ </ol>
+</nav>
diff --git a/_includes/browser-upgrade.html b/_includes/browser-upgrade.html
new file mode 100644
index 0000000..ec6ad0a
--- /dev/null
+++ b/_includes/browser-upgrade.html
@@ -0,0 +1,3 @@
+<!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="https://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
diff --git a/_includes/category-list.html b/_includes/category-list.html
new file mode 100644
index 0000000..d684a28
--- /dev/null
+++ b/_includes/category-list.html
@@ -0,0 +1,26 @@
+{% case site.category_archive.type %}
+ {% when "liquid" %}
+ {% assign path_type = "#" %}
+ {% when "jekyll-archives" %}
+ {% assign path_type = nil %}
+{% endcase %}
+
+{% if site.category_archive.path %}
+ {% comment %}
+ <!-- Sort alphabetically regardless of case e.g. a B c d E -->
+ <!-- modified from http://www.codeofclimber.ru/2015/sorting-site-tags-in-jekyll/ -->
+ {% endcomment %}
+ {% capture page_categories %}{% for category in page.categories %}{{ category | downcase }}|{{ category }}{% unless forloop.last %},{% endunless %}{% endfor %}{% endcapture %}
+ {% assign category_hashes = page_categories | split: ',' | sort %}
+
+ <p class="page__taxonomy">
+ <strong><i class="fas fa-fw fa-folder-open" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].categories_label | default: "Categories:" }} </strong>
+ <span itemprop="keywords">
+ {% for hash in category_hashes %}
+ {% assign keyValue = hash | split: '|' %}
+ {% capture category_word %}{{ keyValue[1] | strip_newlines }}{% endcapture %}
+ <a href="{{ category_word | slugify | prepend: path_type | prepend: site.category_archive.path | relative_url }}" class="page__taxonomy-item" rel="tag">{{ category_word }}</a>{% unless forloop.last %}<span class="sep">, </span>{% endunless %}
+ {% endfor %}
+ </span>
+ </p>
+{% endif %} \ No newline at end of file
diff --git a/_includes/comment.html b/_includes/comment.html
new file mode 100644
index 0000000..cebedab
--- /dev/null
+++ b/_includes/comment.html
@@ -0,0 +1,22 @@
+<article id="comment{{ include.index }}" class="js-comment comment" itemprop="comment" itemscope itemtype="https://schema.org/Comment">
+ <div class="comment__avatar-wrapper">
+ <img class="comment__avatar" src="https://www.gravatar.com/avatar/{{ include.email }}?d=mm&s=80" alt="{{ include.name }}">
+ </div>
+ <div class="comment__content-wrapper">
+ <h3 class="comment__author" itemprop="author" itemscope itemtype="https://schema.org/Person">
+ {% unless include.url == blank %}
+ <span itemprop="name"><a rel="external nofollow" itemprop="url" href="{{ include.url }}">{{ include.name }}</a></span>
+ {% else %}
+ <span itemprop="name">{{ include.name }}</span>
+ {% endunless %}
+ </h3>
+ <p class="comment__date">
+ {% if include.date %}
+ {% if include.index %}<a href="#comment{{ include.index }}" itemprop="url">{% endif %}
+ <time datetime="{{ include.date | date_to_xmlschema }}" itemprop="datePublished">{{ include.date | date: "%B %d, %Y at %I:%M %p" }}</time>
+ {% if include.index %}</a>{% endif %}
+ {% endif %}
+ </p>
+ <div itemprop="text">{{ include.message | markdownify }}</div>
+ </div>
+</article>
diff --git a/_includes/comments-providers/custom.html b/_includes/comments-providers/custom.html
new file mode 100644
index 0000000..9099369
--- /dev/null
+++ b/_includes/comments-providers/custom.html
@@ -0,0 +1,3 @@
+<!-- start custom comments snippet -->
+
+<!-- end custom comments snippet --> \ No newline at end of file
diff --git a/_includes/comments-providers/discourse.html b/_includes/comments-providers/discourse.html
new file mode 100644
index 0000000..aca62cc
--- /dev/null
+++ b/_includes/comments-providers/discourse.html
@@ -0,0 +1,13 @@
+{% if site.comments.discourse.server %}
+{% capture canonical %}{% if site.permalink contains '.html' %}{{ page.url | absolute_url }}{% else %}{{ page.url | absolute_url | remove:'index.html' | strip_slash }}{% endif %}{% endcapture %}
+<script type="text/javascript">
+ DiscourseEmbed = { discourseUrl: '//{{ site.comments.discourse.server }}/',
+ discourseEmbedUrl: '{{ canonical }}' };
+ (function () {
+ var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
+ d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
+ })();
+</script>
+<noscript>Please enable JavaScript to view the comments powered by <a href="https://www.discourse.org/">Discourse.</a></noscript>
+{% endif %}
diff --git a/_includes/comments-providers/disqus.html b/_includes/comments-providers/disqus.html
new file mode 100644
index 0000000..8cf7aca
--- /dev/null
+++ b/_includes/comments-providers/disqus.html
@@ -0,0 +1,15 @@
+{% if site.comments.disqus.shortname %}
+ <script>
+ var disqus_config = function () {
+ this.page.url = "{{ page.url | absolute_url }}"; // Replace PAGE_URL with your page's canonical URL variable
+ this.page.identifier = "{{ page.id }}"; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
+ };
+ (function() { // DON'T EDIT BELOW THIS LINE
+ var d = document, s = d.createElement('script');
+ s.src = 'https://{{ site.comments.disqus.shortname }}.disqus.com/embed.js';
+ s.setAttribute('data-timestamp', +new Date());
+ (d.head || d.body).appendChild(s);
+ })();
+ </script>
+<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
+{% endif %}
diff --git a/_includes/comments-providers/facebook.html b/_includes/comments-providers/facebook.html
new file mode 100644
index 0000000..009dc1c
--- /dev/null
+++ b/_includes/comments-providers/facebook.html
@@ -0,0 +1,8 @@
+<div id="fb-root"></div>
+<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_US/sdk.js#xfbml=1&version=v2.5{% if site.comments.facebook.appid %}&appId={{ site.comments.facebook.appid }}{% endif %}";
+ fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script> \ No newline at end of file
diff --git a/_includes/comments-providers/scripts.html b/_includes/comments-providers/scripts.html
new file mode 100644
index 0000000..4e3f585
--- /dev/null
+++ b/_includes/comments-providers/scripts.html
@@ -0,0 +1,18 @@
+{% if site.comments.provider and page.comments %}
+{% case site.comments.provider %}
+ {% when "disqus" %}
+ {% include /comments-providers/disqus.html %}
+ {% when "discourse" %}
+ {% include /comments-providers/discourse.html %}
+ {% when "facebook" %}
+ {% include /comments-providers/facebook.html %}
+ {% when "staticman" %}
+ {% include /comments-providers/staticman.html %}
+ {% when "staticman_v2" %}
+ {% include /comments-providers/staticman_v2.html %}
+ {% when "utterances" %}
+ {% include /comments-providers/utterances.html %}
+ {% when "custom" %}
+ {% include /comments-providers/custom.html %}
+{% endcase %}
+{% endif %} \ No newline at end of file
diff --git a/_includes/comments-providers/staticman.html b/_includes/comments-providers/staticman.html
new file mode 100644
index 0000000..ae3991d
--- /dev/null
+++ b/_includes/comments-providers/staticman.html
@@ -0,0 +1,40 @@
+{% if site.repository and site.staticman.branch %}
+ <script>
+ (function ($) {
+ $('#new_comment').submit(function () {
+ var form = this;
+
+ $(form).addClass('disabled');
+ $('#comment-form-submit').html('<i class="fas fa-spinner fa-spin fa-fw"></i> {{ site.data.ui-text[site.locale].loading_label | default: "Loading..." }}');
+
+ $.ajax({
+ type: $(this).attr('method'),
+ url: $(this).attr('action'),
+ data: $(this).serialize(),
+ contentType: 'application/x-www-form-urlencoded',
+ success: function (data) {
+ $('#comment-form-submit').html('{{ site.data.ui-text[site.locale].comment_btn_submitted | default: "Submitted" }}');
+ $('.page__comments-form .js-notice').removeClass('notice--danger');
+ $('.page__comments-form .js-notice').addClass('notice--success');
+ showAlert('{{ site.data.ui-text[site.locale].comment_success_msg | default: "Thanks for your comment! It will show on the site once it has been approved." }}');
+ },
+ error: function (err) {
+ console.log(err);
+ $('#comment-form-submit').html('{{ site.data.ui-text[site.locale].comment_btn_submit | default: "Submit Comment" }}');
+ $('.page__comments-form .js-notice').removeClass('notice--success');
+ $('.page__comments-form .js-notice').addClass('notice--danger');
+ showAlert('{{ site.data.ui-text[site.locale].comment_error_msg | default: "Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again." }}');
+ $(form).removeClass('disabled');
+ }
+ });
+
+ return false;
+ });
+
+ function showAlert(message) {
+ $('.page__comments-form .js-notice').removeClass('hidden');
+ $('.page__comments-form .js-notice-text').html(message);
+ }
+ })(jQuery);
+ </script>
+{% endif %}
diff --git a/_includes/comments-providers/staticman_v2.html b/_includes/comments-providers/staticman_v2.html
new file mode 100644
index 0000000..ae3991d
--- /dev/null
+++ b/_includes/comments-providers/staticman_v2.html
@@ -0,0 +1,40 @@
+{% if site.repository and site.staticman.branch %}
+ <script>
+ (function ($) {
+ $('#new_comment').submit(function () {
+ var form = this;
+
+ $(form).addClass('disabled');
+ $('#comment-form-submit').html('<i class="fas fa-spinner fa-spin fa-fw"></i> {{ site.data.ui-text[site.locale].loading_label | default: "Loading..." }}');
+
+ $.ajax({
+ type: $(this).attr('method'),
+ url: $(this).attr('action'),
+ data: $(this).serialize(),
+ contentType: 'application/x-www-form-urlencoded',
+ success: function (data) {
+ $('#comment-form-submit').html('{{ site.data.ui-text[site.locale].comment_btn_submitted | default: "Submitted" }}');
+ $('.page__comments-form .js-notice').removeClass('notice--danger');
+ $('.page__comments-form .js-notice').addClass('notice--success');
+ showAlert('{{ site.data.ui-text[site.locale].comment_success_msg | default: "Thanks for your comment! It will show on the site once it has been approved." }}');
+ },
+ error: function (err) {
+ console.log(err);
+ $('#comment-form-submit').html('{{ site.data.ui-text[site.locale].comment_btn_submit | default: "Submit Comment" }}');
+ $('.page__comments-form .js-notice').removeClass('notice--success');
+ $('.page__comments-form .js-notice').addClass('notice--danger');
+ showAlert('{{ site.data.ui-text[site.locale].comment_error_msg | default: "Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again." }}');
+ $(form).removeClass('disabled');
+ }
+ });
+
+ return false;
+ });
+
+ function showAlert(message) {
+ $('.page__comments-form .js-notice').removeClass('hidden');
+ $('.page__comments-form .js-notice-text').html(message);
+ }
+ })(jQuery);
+ </script>
+{% endif %}
diff --git a/_includes/comments-providers/utterances.html b/_includes/comments-providers/utterances.html
new file mode 100644
index 0000000..129ab77
--- /dev/null
+++ b/_includes/comments-providers/utterances.html
@@ -0,0 +1,20 @@
+<script>
+ 'use strict';
+
+ (function() {
+ var commentContainer = document.querySelector('#utterances-comments');
+
+ if (!commentContainer) {
+ return;
+ }
+
+ var script = document.createElement('script');
+ script.setAttribute('src', 'https://utteranc.es/client.js');
+ script.setAttribute('repo', '{{ site.repository }}');
+ script.setAttribute('issue-term', '{{ site.comments.utterances.issue_term | default: "pathname" }}');
+ script.setAttribute('theme', '{{ site.comments.utterances.theme | default: "github-light" }}');
+ script.setAttribute('crossorigin', 'anonymous');
+
+ commentContainer.appendChild(script);
+ })();
+</script>
diff --git a/_includes/comments.html b/_includes/comments.html
new file mode 100644
index 0000000..40b0359
--- /dev/null
+++ b/_includes/comments.html
@@ -0,0 +1,159 @@
+<div class="page__comments">
+ {% capture comments_label %}{{ site.data.ui-text[site.locale].comments_label | default: "Comments" }}{% endcapture %}
+ {% case site.comments.provider %}
+ {% when "discourse" %}
+ <h4 class="page__comments-title">{{ comments_label }}</h4>
+ <section id="discourse-comments"></section>
+ {% when "disqus" %}
+ <h4 class="page__comments-title">{{ comments_label }}</h4>
+ <section id="disqus_thread"></section>
+ {% when "facebook" %}
+ <h4 class="page__comments-title">{{ comments_label }}</h4>
+ <section class="fb-comments" data-href="{{ page.url | absolute_url }}" data-mobile="true" data-num-posts="{{ site.comments.facebook.num_posts | default: 5 }}" data-width="100%" data-colorscheme="{{ site.comments.facebook.colorscheme | default: 'light' }}"></section>
+ {% when "staticman_v2" %}
+ <section id="static-comments">
+ {% if site.repository and site.staticman.branch %}
+ <!-- Start static comments -->
+ <div class="js-comments">
+ {% if site.data.comments[page.slug] %}
+ <h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_title | default: "Comments" }}</h4>
+ {% assign comments = site.data.comments[page.slug] | sort %}
+
+ {% for comment in comments %}
+ {% assign email = comment[1].email %}
+ {% assign name = comment[1].name %}
+ {% assign url = comment[1].url %}
+ {% assign date = comment[1].date %}
+ {% assign message = comment[1].message %}
+ {% include comment.html index=forloop.index email=email name=name url=url date=date message=message %}
+ {% endfor %}
+ {% endif %}
+ </div>
+ <!-- End static comments -->
+
+ <!-- Start new comment form -->
+ <div class="page__comments-form">
+ <h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_label | default: "Leave a Comment" }}</h4>
+ <p class="small">{{ site.data.ui-text[site.locale].comment_form_info | default: "Your email address will not be published. Required fields are marked" }} <span class="required">*</span></p>
+ <form id="new_comment" class="page__comments-form js-form form" method="post" action="{{ site.staticman.endpoint | default: 'https://api.staticman.net/v2/entry/' }}{{ site.repository }}/{{ site.staticman.branch }}/comments">
+ <div class="form__spinner">
+ <i class="fas fa-spinner fa-spin fa-3x fa-fw"></i>
+ <span class="sr-only">{{ site.data.ui-text[site.locale].loading_label | default: "Loading..." }}</span>
+ </div>
+
+ <div class="form-group">
+ <label for="comment-form-message">{{ site.data.ui-text[site.locale].comment_form_comment_label | default: "Comment" }} <small class="required">*</small></label>
+ <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+ <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">{{ site.data.ui-text[site.locale].comment_form_md_info | default: "Markdown is supported." }}</a></div>
+ </div>
+ <div class="form-group">
+ <label for="comment-form-name">{{ site.data.ui-text[site.locale].comment_form_name_label | default: "Name" }} <small class="required">*</small></label>
+ <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+ </div>
+ <div class="form-group">
+ <label for="comment-form-email">{{ site.data.ui-text[site.locale].comment_form_email_label | default: "Email address" }} <small class="required">*</small></label>
+ <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+ </div>
+ <div class="form-group">
+ <label for="comment-form-url">{{ site.data.ui-text[site.locale].comment_form_website_label | default: "Website (optional)" }}</label>
+ <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+ </div>
+ <div class="form-group hidden" style="display: none;">
+ <input type="hidden" name="options[slug]" value="{{ page.slug }}">
+ <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+ <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+ {% if site.reCaptcha.siteKey %}<input type="hidden" name="options[reCaptcha][siteKey]" value="{{ site.reCaptcha.siteKey }}">{% endif %}
+ {% if site.reCaptcha.secret %}<input type="hidden" name="options[reCaptcha][secret]" value="{{ site.reCaptcha.secret }}">{% endif %}
+ </div>
+ <!-- Start comment form alert messaging -->
+ <p class="hidden js-notice">
+ <strong class="js-notice-text"></strong>
+ </p>
+ <!-- End comment form alert messaging -->
+ {% if site.reCaptcha.siteKey %}
+ <div class="form-group">
+ <div class="g-recaptcha" data-sitekey="{{ site.reCaptcha.siteKey }}"></div>
+ </div>
+ {% endif %}
+ <div class="form-group">
+ <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--primary btn--large">{{ site.data.ui-text[site.locale].comment_btn_submit | default: "Submit Comment" }}</button>
+ </div>
+ </form>
+ </div>
+ <!-- End new comment form -->
+ {% if site.reCaptcha.siteKey %}<script async src="https://www.google.com/recaptcha/api.js"></script>{% endif %}
+ {% endif %}
+ </section>
+ {% when "staticman" %}
+ <section id="static-comments">
+ {% if site.repository and site.staticman.branch %}
+ <!-- Start static comments -->
+ <div class="js-comments">
+ {% if site.data.comments[page.slug] %}
+ <h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_title | default: "Comments" }}</h4>
+ {% assign comments = site.data.comments[page.slug] | sort %}
+
+ {% for comment in comments %}
+ {% assign email = comment[1].email %}
+ {% assign name = comment[1].name %}
+ {% assign url = comment[1].url %}
+ {% assign date = comment[1].date %}
+ {% assign message = comment[1].message %}
+ {% include comment.html index=forloop.index email=email name=name url=url date=date message=message %}
+ {% endfor %}
+ {% endif %}
+ </div>
+ <!-- End static comments -->
+
+ <!-- Start new comment form -->
+ <div class="page__comments-form">
+ <h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_label | default: "Leave a Comment" }}</h4>
+ <p class="small">{{ site.data.ui-text[site.locale].comment_form_info | default: "Your email address will not be published. Required fields are marked" }} <span class="required">*</span></p>
+ <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/{{ site.repository }}/{{ site.staticman.branch }}">
+ <div class="form__spinner">
+ <i class="fas fa-spinner fa-spin fa-3x fa-fw"></i>
+ <span class="sr-only">{{ site.data.ui-text[site.locale].loading_label | default: "Loading..." }}</span>
+ </div>
+
+ <div class="form-group">
+ <label for="comment-form-message">{{ site.data.ui-text[site.locale].comment_form_comment_label | default: "Comment" }} <small class="required">*</small></label>
+ <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+ <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">{{ site.data.ui-text[site.locale].comment_form_md_info | default: "Markdown is supported." }}</a></div>
+ </div>
+ <div class="form-group">
+ <label for="comment-form-name">{{ site.data.ui-text[site.locale].comment_form_name_label | default: "Name" }} <small class="required">*</small></label>
+ <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+ </div>
+ <div class="form-group">
+ <label for="comment-form-email">{{ site.data.ui-text[site.locale].comment_form_email_label | default: "Email address" }} <small class="required">*</small></label>
+ <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+ </div>
+ <div class="form-group">
+ <label for="comment-form-url">{{ site.data.ui-text[site.locale].comment_form_website_label | default: "Website (optional)" }}</label>
+ <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+ </div>
+ <div class="form-group hidden" style="display: none;">
+ <input type="hidden" name="options[slug]" value="{{ page.slug }}">
+ <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+ <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+ </div>
+ <!-- Start comment form alert messaging -->
+ <p class="hidden js-notice">
+ <strong class="js-notice-text"></strong>
+ </p>
+ <!-- End comment form alert messaging -->
+ <div class="form-group">
+ <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--primary btn--large">{{ site.data.ui-text[site.locale].comment_btn_submit | default: "Submit Comment" }}</button>
+ </div>
+ </form>
+ </div>
+ <!-- End new comment form -->
+ {% endif %}
+ </section>
+ {% when "utterances" %}
+ <h4 class="page__comments-title">{{ comments_label }}</h4>
+ <section id="utterances-comments"></section>
+ {% when "custom" %}
+ <section id="custom-comments"></section>
+ {% endcase %}
+</div>
diff --git a/_includes/documents-collection.html b/_includes/documents-collection.html
new file mode 100644
index 0000000..13b4006
--- /dev/null
+++ b/_includes/documents-collection.html
@@ -0,0 +1,19 @@
+{% assign entries = site[include.collection] %}
+
+{% if include.sort_by == 'title' %}
+ {% if include.sort_order == 'reverse' %}
+ {% assign entries = entries | sort: 'title' | reverse %}
+ {% else %}
+ {% assign entries = entries | sort: 'title' %}
+ {% endif %}
+{% elsif include.sort_by == 'date' %}
+ {% if include.sort_order == 'reverse' %}
+ {% assign entries = entries | sort: 'date' | reverse %}
+ {% else %}
+ {% assign entries = entries | sort: 'date' %}
+ {% endif %}
+{% endif %}
+
+{%- for post in entries -%}
+ {% include archive-single.html %}
+{%- endfor -%}
diff --git a/_includes/feature_row b/_includes/feature_row
new file mode 100644
index 0000000..89dfc1b
--- /dev/null
+++ b/_includes/feature_row
@@ -0,0 +1,53 @@
+{% if include.id %}
+ {% assign feature_row = page[include.id] %}
+{% else %}
+ {% assign feature_row = page.feature_row %}
+{% endif %}
+
+<div class="feature__wrapper">
+
+ {% for f in feature_row %}
+
+ {% if f.url contains "://" %}
+ {% capture f_url %}{{ f.url }}{% endcapture %}
+ {% else %}
+ {% capture f_url %}{{ f.url | relative_url }}{% endcapture %}
+ {% endif %}
+
+ <div class="feature__item{% if include.type %}--{{ include.type }}{% endif %}">
+ <div class="archive__item">
+ {% if f.image_path %}
+ <div class="archive__item-teaser">
+ <img src=
+ {% if f.image_path contains "://" %}
+ "{{ f.image_path }}"
+ {% else %}
+ "{{ f.image_path | relative_url }}"
+ {% endif %}
+ alt="{% if f.alt %}{{ f.alt }}{% endif %}">
+ {% if f.image_caption %}
+ <span class="archive__item-caption">{{ f.image_caption | markdownify | remove: "<p>" | remove: "</p>" }}</span>
+ {% endif %}
+ </div>
+ {% endif %}
+
+ <div class="archive__item-body">
+ {% if f.title %}
+ <h2 class="archive__item-title">{{ f.title }}</h2>
+ {% endif %}
+
+ {% if f.excerpt %}
+ <div class="archive__item-excerpt">
+ {{ f.excerpt | markdownify }}
+ </div>
+ {% endif %}
+
+ {% if f.url %}
+ <p><a href="{{ f_url }}" class="btn {{ f.btn_class }}">{{ f.btn_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}</a></p>
+ {% endif %}
+ </div>
+ </div>
+ </div>
+ {% endfor %}
+
+</div> \ No newline at end of file
diff --git a/_includes/figure b/_includes/figure
new file mode 100644
index 0000000..8e9bdd5
--- /dev/null
+++ b/_includes/figure
@@ -0,0 +1,12 @@
+<figure class="{{ include.class }}">
+ <img src=
+ {% if include.image_path contains "://" %}
+ "{{ include.image_path }}"
+ {% else %}
+ "{{ include.image_path | relative_url }}"
+ {% endif %}
+ alt="{% if include.alt %}{{ include.alt }}{% endif %}">
+ {% if include.caption %}
+ <figcaption>
+ {{ include.caption | markdownify | remove: "<p>" | remove: "</p>" }}
+ </figcaption>{% endif %}</figure>
diff --git a/_includes/footer.html b/_includes/footer.html
new file mode 100644
index 0000000..2bc7896
--- /dev/null
+++ b/_includes/footer.html
@@ -0,0 +1,19 @@
+<div class="page__footer-follow">
+ <ul class="social-icons">
+ {% if site.data.ui-text[site.locale].follow_label %}
+ <li><strong>{{ site.data.ui-text[site.locale].follow_label }}</strong></li>
+ {% endif %}
+
+ {% if site.footer.links %}
+ {% for link in site.footer.links %}
+ {% if link.label and link.url %}
+ <li><a href="{{ link.url }}" rel="nofollow noopener noreferrer"><i class="{{ link.icon | default: 'fas fa-link' }}" aria-hidden="true"></i> {{ link.label }}</a></li>
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+
+ <li><a href="{% if site.atom_feed.path %}{{ site.atom_feed.path }}{% else %}{{ '/feed.xml' | relative_url }}{% endif %}"><i class="fas fa-fw fa-rss-square" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].feed_label | default: "Feed" }}</a></li>
+ </ul>
+</div>
+
+<div class="page__footer-copyright">&copy; {{ site.time | date: '%Y' }} {{ site.name | default: site.title }}. {{ site.data.ui-text[site.locale].powered_by | default: "Powered by" }} <a href="https://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
diff --git a/_includes/footer/custom.html b/_includes/footer/custom.html
new file mode 100644
index 0000000..d512599
--- /dev/null
+++ b/_includes/footer/custom.html
@@ -0,0 +1,3 @@
+<!-- start custom footer snippets -->
+
+<!-- end custom footer snippets --> \ No newline at end of file
diff --git a/_includes/gallery b/_includes/gallery
new file mode 100644
index 0000000..97022aa
--- /dev/null
+++ b/_includes/gallery
@@ -0,0 +1,51 @@
+{% if include.id %}
+ {% assign gallery = page[include.id] %}
+{% else %}
+ {% assign gallery = page.gallery %}
+{% endif %}
+
+{% if include.layout %}
+ {% assign gallery_layout = include.layout %}
+{% else %}
+ {% if gallery.size == 2 %}
+ {% assign gallery_layout = 'half' %}
+ {% elsif gallery.size >= 3 %}
+ {% assign gallery_layout = 'third' %}
+ {% else %}
+ {% assign gallery_layout = '' %}
+ {% endif %}
+{% endif %}
+
+<figure class="{{ gallery_layout }} {{ include.class }}">
+ {% for img in gallery %}
+ {% if img.url %}
+ <a href=
+ {% if img.url contains "://" %}
+ "{{ img.url }}"
+ {% else %}
+ "{{ img.url | relative_url }}"
+ {% endif %}
+ {% if img.title %}title="{{ img.title }}"{% endif %}
+ >
+ <img src=
+ {% if img.image_path contains "://" %}
+ "{{ img.image_path }}"
+ {% else %}
+ "{{ img.image_path | relative_url }}"
+ {% endif %}
+ alt="{% if img.alt %}{{ img.alt }}{% endif %}">
+ </a>
+ {% else %}
+ <img src=
+ {% if img.image_path contains "://" %}
+ "{{ img.image_path }}"
+ {% else %}
+ "{{ img.image_path | relative_url }}"
+ {% endif %}
+ alt="{% if img.alt %}{{ img.alt }}{% endif %}">
+ {% endif %}
+ {% endfor %}
+ {% if include.caption %}
+ <figcaption>{{ include.caption | markdownify | remove: "<p>" | remove: "</p>" }}</figcaption>
+ {% endif %}
+</figure> \ No newline at end of file
diff --git a/_includes/group-by-array b/_includes/group-by-array
new file mode 100644
index 0000000..708de41
--- /dev/null
+++ b/_includes/group-by-array
@@ -0,0 +1,47 @@
+<!--
+# Jekyll Group-By-Array 0.1.0
+# https://github.com/mushishi78/jekyll-group-by-array
+# © 2015 Max White <mushishi78@gmail.com>
+# MIT License
+-->
+
+<!-- Initialize -->
+{% assign __empty_array = '' | split: ',' %}
+{% assign group_names = __empty_array %}
+{% assign group_items = __empty_array %}
+
+<!-- Map -->
+{% assign __names = include.collection | map: include.field %}
+
+<!-- Flatten -->
+{% assign __names = __names | join: ',' | join: ',' | split: ',' %}
+
+<!-- Uniq -->
+{% assign __names = __names | sort %}
+{% for name in __names %}
+
+<!-- If not equal to previous then it must be unique as sorted -->
+{% unless name == previous %}
+
+<!-- Push to group_names -->
+{% assign group_names = group_names | push: name %}
+{% endunless %}
+
+{% assign previous = name %}
+{% endfor %}
+
+
+<!-- group_items -->
+{% for name in group_names %}
+
+<!-- Collect if contains -->
+{% assign __item = __empty_array %}
+{% for __element in include.collection %}
+{% if __element[include.field] contains name %}
+{% assign __item = __item | push: __element %}
+{% endif %}
+{% endfor %}
+
+<!-- Push to group_items -->
+{% assign group_items = group_items | push: __item %}
+{% endfor %} \ No newline at end of file
diff --git a/_includes/head.html b/_includes/head.html
new file mode 100644
index 0000000..8963379
--- /dev/null
+++ b/_includes/head.html
@@ -0,0 +1,41 @@
+<meta charset="utf-8">
+
+{% include seo.html %}
+
+<link href="{% if site.atom_feed.path %}{{ site.atom_feed.path }}{% else %}{{ '/feed.xml' | relative_url }}{% endif %}" type="application/atom+xml" rel="alternate" title="{{ site.title }} Feed">
+
+<!-- https://t.co/dKP3o1e -->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+ document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+
+<!-- For all browsers -->
+<link rel="stylesheet" href="{{ '/assets/css/main.css' | relative_url }}">
+
+<!--[if IE]>
+ <style>
+ /* old IE unsupported flexbox fixes */
+ .greedy-nav .site-title {
+ padding-right: 3em;
+ }
+ .greedy-nav button {
+ position: absolute;
+ top: 0;
+ right: 0;
+ height: 100%;
+ }
+ </style>
+<![endif]-->
+
+{% if site.head_scripts %}
+ {% for script in site.head_scripts %}
+ {% if script contains "://" %}
+ {% capture script_path %}{{ script }}{% endcapture %}
+ {% else %}
+ {% capture script_path %}{{ script | relative_url }}{% endcapture %}
+ {% endif %}
+ <script src="{{ script_path }}"></script>
+ {% endfor %}
+{% endif %}
diff --git a/_includes/head/custom.html b/_includes/head/custom.html
new file mode 100644
index 0000000..978d84f
--- /dev/null
+++ b/_includes/head/custom.html
@@ -0,0 +1,5 @@
+<!-- start custom head snippets -->
+
+<!-- insert favicons. use https://realfavicongenerator.net/ -->
+
+<!-- end custom head snippets -->
diff --git a/_includes/masthead.html b/_includes/masthead.html
new file mode 100644
index 0000000..3fe9fc1
--- /dev/null
+++ b/_includes/masthead.html
@@ -0,0 +1,46 @@
+{% if site.logo contains "://" %}
+ {% capture logo_path %}{{ site.logo }}{% endcapture %}
+{% else %}
+ {% capture logo_path %}{{ site.logo }}{% endcapture %}
+{% endif %}
+
+<div class="masthead">
+ <div class="masthead__inner-wrap">
+ <div class="masthead__menu">
+ <nav id="site-nav" class="greedy-nav">
+ {% unless logo_path == empty %}
+ <a class="site-logo" href="{{ '/' | relative_url }}"><img src="{{ logo_path | relative_url }}" alt=""></a>
+ {% endunless %}
+ <a class="site-title" href="{{ '/' | relative_url }}">
+ {{ site.masthead_title | default: site.title }}
+ {% if site.subtitle %}<span class="site-subtitle">{{ site.subtitle }}</span>{% endif %}
+ </a>
+ <ul class="visible-links">
+ {%- for link in site.data.navigation.main -%}
+ {%- if link.url contains '://' -%}
+ {%- assign url = link.url -%}
+ {%- else -%}
+ {%- assign url = link.url | relative_url -%}
+ {%- endif -%}
+ <li class="masthead__menu-item">
+ <a href="{{ url }}" {% if link.description %}title="{{ link.description }}"{% endif %}>{{ link.title }}</a>
+ </li>
+ {%- endfor -%}
+ </ul>
+ {% if site.search == true %}
+ <button class="search__toggle" type="button">
+ <span class="visually-hidden">{{ site.data.ui-text[site.locale].search_label | default: "Toggle search" }}</span>
+ <svg class="icon" width="16" height="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.99 16">
+ <path d="M15.5,13.12L13.19,10.8a1.69,1.69,0,0,0-1.28-.55l-0.06-.06A6.5,6.5,0,0,0,5.77,0,6.5,6.5,0,0,0,2.46,11.59a6.47,6.47,0,0,0,7.74.26l0.05,0.05a1.65,1.65,0,0,0,.5,1.24l2.38,2.38A1.68,1.68,0,0,0,15.5,13.12ZM6.4,2A4.41,4.41,0,1,1,2,6.4,4.43,4.43,0,0,1,6.4,2Z" transform="translate(-.01)"></path>
+ </svg>
+ </button>
+ {% endif %}
+ <button class="greedy-nav__toggle hidden" type="button">
+ <span class="visually-hidden">{{ site.data.ui-text[site.locale].menu_label | default: "Toggle menu" }}</span>
+ <div class="navicon"></div>
+ </button>
+ <ul class="hidden-links hidden"></ul>
+ </nav>
+ </div>
+ </div>
+</div>
diff --git a/_includes/nav_list b/_includes/nav_list
new file mode 100644
index 0000000..b1d06c3
--- /dev/null
+++ b/_includes/nav_list
@@ -0,0 +1,47 @@
+{% assign navigation = site.data.navigation[include.nav] %}
+
+<nav class="nav__list">
+ {% if page.sidebar.title %}<h3 class="nav__title" style="padding-left: 0;">{{ page.sidebar.title }}</h3>{% endif %}
+ <input id="ac-toc" name="accordion-toc" type="checkbox" />
+ <label for="ac-toc">{{ site.data.ui-text[site.locale].menu_label | default: "Toggle Menu" }}</label>
+ <ul class="nav__items">
+ {% for nav in navigation %}
+ <li>
+ {% if nav.url %}
+ {% comment %} internal/external URL check {% endcomment %}
+ {% if nav.url contains "://" %}
+ {% assign nav_url = nav.url %}
+ {% else %}
+ {% assign nav_url = nav.url | relative_url %}
+ {% endif %}
+
+ <a href="{{ nav_url }}"><span class="nav__sub-title">{{ nav.title }}</span></a>
+ {% else %}
+ <span class="nav__sub-title">{{ nav.title }}</span>
+ {% endif %}
+
+ {% if nav.children != null %}
+ <ul>
+ {% for child in nav.children %}
+ {% comment %} internal/external URL check {% endcomment %}
+ {% if child.url contains "://" %}
+ {% assign child_url = child.url %}
+ {% else %}
+ {% assign child_url = child.url | relative_url %}
+ {% endif %}
+
+ {% comment %} set "active" class on current page {% endcomment %}
+ {% if child.url == page.url %}
+ {% assign active = "active" %}
+ {% else %}
+ {% assign active = "" %}
+ {% endif %}
+
+ <li><a href="{{ child_url }}" class="{{ active }}">{{ child.title }}</a></li>
+ {% endfor %}
+ </ul>
+ {% endif %}
+ </li>
+ {% endfor %}
+ </ul>
+</nav> \ No newline at end of file
diff --git a/_includes/page__hero.html b/_includes/page__hero.html
new file mode 100644
index 0000000..98bff72
--- /dev/null
+++ b/_includes/page__hero.html
@@ -0,0 +1,72 @@
+{% if page.header.image contains "://" %}
+ {% capture img_path %}{{ page.header.image }}{% endcapture %}
+{% else %}
+ {% capture img_path %}{{ page.header.image | relative_url }}{% endcapture %}
+{% endif %}
+
+{% if page.header.cta_url contains "://" %}
+ {% capture cta_path %}{{ page.header.cta_url }}{% endcapture %}
+{% else %}
+ {% capture cta_path %}{{ page.header.cta_url | relative_url }}{% endcapture %}
+{% endif %}
+
+{% if page.header.overlay_image contains "://" %}
+ {% capture overlay_img_path %}{{ page.header.overlay_image }}{% endcapture %}
+{% elsif page.header.overlay_image %}
+ {% capture overlay_img_path %}{{ page.header.overlay_image | relative_url }}{% endcapture %}
+{% endif %}
+
+{% if page.header.overlay_filter contains "rgba" %}
+ {% capture overlay_filter %}{{ page.header.overlay_filter }}{% endcapture %}
+{% elsif page.header.overlay_filter %}
+ {% capture overlay_filter %}rgba(0, 0, 0, {{ page.header.overlay_filter }}){% endcapture %}
+{% endif %}
+
+{% if page.header.image_description %}
+ {% assign image_description = page.header.image_description %}
+{% else %}
+ {% assign image_description = page.title %}
+{% endif %}
+
+{% assign image_description = image_description | markdownify | strip_html | strip_newlines | escape_once %}
+
+<div class="page__hero{% if page.header.overlay_color or page.header.overlay_image %}--overlay{% endif %}"
+ style="{% if page.header.overlay_color %}background-color: {{ page.header.overlay_color | default: 'transparent' }};{% endif %} {% if overlay_img_path %}background-image: {% if overlay_filter %}linear-gradient({{ overlay_filter }}, {{ overlay_filter }}), {% endif %}url('{{ overlay_img_path }}');{% endif %}"
+>
+ {% if page.header.overlay_color or page.header.overlay_image %}
+ <div class="wrapper">
+ <h1 id="page-title" class="page__title" itemprop="headline">
+ {% if paginator and site.paginate_show_page_num %}
+ {{ site.title }}{% unless paginator.page == 1 %} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %}
+ {% else %}
+ {{ page.title | default: site.title | markdownify | remove: "<p>" | remove: "</p>" }}
+ {% endif %}
+ </h1>
+ {% if page.header.show_overlay_excerpt != false and page.excerpt %}
+ <p class="page__lead">{{ page.excerpt | markdownify | remove: "<p>" | remove: "</p>" }}</p>
+ {% endif %}
+ {% if page.read_time %}
+ <p class="page__meta"><i class="far fa-clock" aria-hidden="true"></i> {% include read-time.html %}</p>
+ {% endif %}
+ {% if page.header.cta_url %}
+ <p><a href="{{ cta_path }}" class="btn btn--light-outline btn--large">{{ page.header.cta_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}</a></p>
+ {% endif %}
+ {% if page.header.actions %}
+ <p>
+ {% for action in page.header.actions %}
+ {% if action.url contains "://" %}
+ {% assign url = action.url %}
+ {% else %}
+ {% assign url = action.url | relative_url %}
+ {% endif %}
+ <a href="{{ url }}" class="btn btn--light-outline btn--large">{{ action.label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}</a>
+ {% endfor %}
+ {% endif %}
+ </div>
+ {% else %}
+ <img src="{{ img_path }}" alt="{{ image_description }}" class="page__hero-image">
+ {% endif %}
+ {% if page.header.caption %}
+ <span class="page__hero-caption">{{ page.header.caption | markdownify | remove: "<p>" | remove: "</p>" }}</span>
+ {% endif %}
+</div>
diff --git a/_includes/page__hero_video.html b/_includes/page__hero_video.html
new file mode 100644
index 0000000..8586a95
--- /dev/null
+++ b/_includes/page__hero_video.html
@@ -0,0 +1,4 @@
+{% capture video_id %}{{ page.header.video.id }}{% endcapture %}
+{% capture video_provider %}{{ page.header.video.provider }}{% endcapture %}
+
+{% include video id=video_id provider=video_provider %}
diff --git a/_includes/page__taxonomy.html b/_includes/page__taxonomy.html
new file mode 100644
index 0000000..75c76c8
--- /dev/null
+++ b/_includes/page__taxonomy.html
@@ -0,0 +1,7 @@
+{% if site.tag_archive.type and page.tags[0] %}
+ {% include tag-list.html %}
+{% endif %}
+
+{% if site.category_archive.type and page.categories[0] %}
+ {% include category-list.html %}
+{% endif %} \ No newline at end of file
diff --git a/_includes/paginator.html b/_includes/paginator.html
new file mode 100644
index 0000000..592a2cf
--- /dev/null
+++ b/_includes/paginator.html
@@ -0,0 +1,69 @@
+{% if paginator.total_pages > 1 %}
+<nav class="pagination">
+ {% assign first_page_path = site.paginate_path | replace: 'page:num', '' | replace: '//', '/' | relative_url %}
+ <ul>
+ {% comment %} Link for previous page {% endcomment %}
+ {% if paginator.previous_page %}
+ {% if paginator.previous_page == 1 %}
+ <li><a href="{{ first_page_path }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
+ {% else %}
+ <li><a href="{{ site.paginate_path | replace: ':num', paginator.previous_page | replace: '//', '/' | relative_url }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
+ {% endif %}
+ {% else %}
+ <li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</span></a></li>
+ {% endif %}
+
+ {% comment %} First page {% endcomment %}
+ {% if paginator.page == 1 %}
+ <li><a href="#" class="disabled current">1</a></li>
+ {% else %}
+ <li><a href="{{ first_page_path }}">1</a></li>
+ {% endif %}
+
+ {% assign page_start = 2 %}
+ {% if paginator.page > 4 %}
+ {% assign page_start = paginator.page | minus: 2 %}
+ {% comment %} Ellipsis for truncated links {% endcomment %}
+ <li><a href="#" class="disabled">&hellip;</a></li>
+ {% endif %}
+
+ {% assign page_end = paginator.total_pages | minus: 1 %}
+ {% assign pages_to_end = paginator.total_pages | minus: paginator.page %}
+ {% if pages_to_end > 4 %}
+ {% assign page_end = paginator.page | plus: 2 %}
+ {% endif %}
+
+ {% for index in (page_start..page_end) %}
+ {% if index == paginator.page %}
+ <li><a href="{{ site.paginate_path | replace: ':num', index | replace: '//', '/' | relative_url }}" class="disabled current">{{ index }}</a></li>
+ {% else %}
+ {% comment %} Distance from current page and this link {% endcomment %}
+ {% assign dist = paginator.page | minus: index %}
+ {% if dist < 0 %}
+ {% comment %} Distance must be a positive value {% endcomment %}
+ {% assign dist = 0 | minus: dist %}
+ {% endif %}
+ <li><a href="{{ site.paginate_path | replace: ':num', index | relative_url }}">{{ index }}</a></li>
+ {% endif %}
+ {% endfor %}
+
+ {% comment %} Ellipsis for truncated links {% endcomment %}
+ {% if pages_to_end > 3 %}
+ <li><a href="#" class="disabled">&hellip;</a></li>
+ {% endif %}
+
+ {% if paginator.page == paginator.total_pages %}
+ <li><a href="#" class="disabled current">{{ paginator.page }}</a></li>
+ {% else %}
+ <li><a href="{{ site.paginate_path | replace: ':num', paginator.total_pages | replace: '//', '/' | relative_url }}">{{ paginator.total_pages }}</a></li>
+ {% endif %}
+
+ {% comment %} Link next page {% endcomment %}
+ {% if paginator.next_page %}
+ <li><a href="{{ site.paginate_path | replace: ':num', paginator.next_page | replace: '//', '/' | relative_url }}">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a></li>
+ {% else %}
+ <li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</span></a></li>
+ {% endif %}
+ </ul>
+</nav>
+{% endif %}
diff --git a/_includes/post_pagination.html b/_includes/post_pagination.html
new file mode 100644
index 0000000..a93c627
--- /dev/null
+++ b/_includes/post_pagination.html
@@ -0,0 +1,14 @@
+{% if page.previous or page.next %}
+ <nav class="pagination">
+ {% if page.previous %}
+ <a href="{{ page.previous.url | relative_url }}" class="pagination--pager" title="{{ page.previous.title | markdownify | strip_html }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a>
+ {% else %}
+ <a href="#" class="pagination--pager disabled">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a>
+ {% endif %}
+ {% if page.next %}
+ <a href="{{ page.next.url | relative_url }}" class="pagination--pager" title="{{ page.next.title | markdownify | strip_html }}">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a>
+ {% else %}
+ <a href="#" class="pagination--pager disabled">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a>
+ {% endif %}
+ </nav>
+{% endif %} \ No newline at end of file
diff --git a/_includes/posts-category.html b/_includes/posts-category.html
new file mode 100644
index 0000000..98be3e9
--- /dev/null
+++ b/_includes/posts-category.html
@@ -0,0 +1,3 @@
+{%- for post in site.categories[include.taxonomy] -%}
+ {% include archive-single.html %}
+{%- endfor -%}
diff --git a/_includes/posts-tag.html b/_includes/posts-tag.html
new file mode 100644
index 0000000..180a2f3
--- /dev/null
+++ b/_includes/posts-tag.html
@@ -0,0 +1,3 @@
+{%- for post in site.tags[include.taxonomy] -%}
+ {% include archive-single.html %}
+{%- endfor -%}
diff --git a/_includes/read-time.html b/_includes/read-time.html
new file mode 100644
index 0000000..5885744
--- /dev/null
+++ b/_includes/read-time.html
@@ -0,0 +1,15 @@
+{% assign words_per_minute = page.words_per_minute | default: site.words_per_minute | default: 200 %}
+
+{% if post.read_time %}
+ {% assign words = post.content | strip_html | number_of_words %}
+{% elsif page.read_time %}
+ {% assign words = page.content | strip_html | number_of_words %}
+{% endif %}
+
+{% if words < words_per_minute %}
+ {{ site.data.ui-text[site.locale].less_than | default: "less than" }} 1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
+{% elsif words == words_per_minute %}
+ 1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
+{% else %}
+ {{ words | divided_by:words_per_minute }} {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
+{% endif %}
diff --git a/_includes/scripts.html b/_includes/scripts.html
new file mode 100644
index 0000000..5530028
--- /dev/null
+++ b/_includes/scripts.html
@@ -0,0 +1,39 @@
+{% if site.footer_scripts %}
+ {% for script in site.footer_scripts %}
+ {% if script contains "://" %}
+ {% capture script_path %}{{ script }}{% endcapture %}
+ {% else %}
+ {% capture script_path %}{{ script | relative_url }}{% endcapture %}
+ {% endif %}
+ <script src="{{ script_path }}"></script>
+ {% endfor %}
+{% else %}
+ <script src="{{ '/assets/js/main.min.js' | relative_url }}"></script>
+ <script src="https://kit.fontawesome.com/4eee35f757.js"></script>
+{% endif %}
+
+{% if site.search == true or page.layout == "search" %}
+ {%- assign search_provider = site.search_provider | default: "lunr" -%}
+ {%- case search_provider -%}
+ {%- when "lunr" -%}
+ {% include_cached search/lunr-search-scripts.html %}
+ {%- when "google" -%}
+ {% include_cached search/google-search-scripts.html %}
+ {%- when "algolia" -%}
+ {% include_cached search/algolia-search-scripts.html %}
+ {%- endcase -%}
+{% endif %}
+
+{% include analytics.html %}
+{% include /comments-providers/scripts.html %}
+
+{% if site.after_footer_scripts %}
+ {% for script in site.after_footer_scripts %}
+ {% if script contains "://" %}
+ {% capture script_path %}{{ script }}{% endcapture %}
+ {% else %}
+ {% capture script_path %}{{ script | relative_url }}{% endcapture %}
+ {% endif %}
+ <script src="{{ script_path }}"></script>
+ {% endfor %}
+{% endif %}
diff --git a/_includes/search/algolia-search-scripts.html b/_includes/search/algolia-search-scripts.html
new file mode 100644
index 0000000..a6bc9d2
--- /dev/null
+++ b/_includes/search/algolia-search-scripts.html
@@ -0,0 +1,54 @@
+<!-- Including InstantSearch.js library and styling -->
+<script src="https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch.min.js"></script>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch.min.css">
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch-theme-algolia.min.css">
+
+<script>
+// Instanciating InstantSearch.js with Algolia credentials
+const search = instantsearch({
+ appId: '{{ site.algolia.application_id }}',
+ apiKey: '{{ site.algolia.search_only_api_key }}',
+ indexName: '{{ site.algolia.index_name }}',
+ searchParameters: {
+ restrictSearchableAttributes: [
+ 'title',
+ 'content'
+ ]
+ }
+});
+
+const hitTemplate = function(hit) {
+ const url = hit.url;
+ const title = hit._highlightResult.title.value;
+ const content = hit._highlightResult.html.value;
+
+ return `
+ <div class="list__item">
+ <article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
+ <h2 class="archive__item-title" itemprop="headline"><a href="{{ site.baseurl }}${url}">${title}</a></h2>
+ <div class="archive__item-excerpt" itemprop="description">${content}</div>
+ </article>
+ </div>
+ `;
+}
+
+// Adding searchbar and results widgets
+search.addWidget(
+ instantsearch.widgets.searchBox({
+ container: '.search-searchbar',
+ {% unless site.algolia.powered_by == false %}poweredBy: true,{% endunless %}
+ placeholder: '{{ site.data.ui-text[site.locale].search_placeholder_text | default: "Enter your search term..." }}'
+ })
+);
+search.addWidget(
+ instantsearch.widgets.hits({
+ container: '.search-hits',
+ templates: {
+ item: hitTemplate
+ }
+ })
+);
+
+// Starting the search
+search.start();
+</script>
diff --git a/_includes/search/google-search-scripts.html b/_includes/search/google-search-scripts.html
new file mode 100644
index 0000000..4af7423
--- /dev/null
+++ b/_includes/search/google-search-scripts.html
@@ -0,0 +1,30 @@
+<script>
+ (function () {
+ var cx = '{{ site.google.search_engine_id }}';
+ var gcse = document.createElement('script');
+ gcse.type = 'text/javascript';
+ gcse.async = true;
+ gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
+ var s = document.getElementsByTagName('script')[0];
+ s.parentNode.insertBefore(gcse, s);
+ })();
+
+ function googleCustomSearchExecute() {
+ var input = document.getElementById('cse-search-input-box-id');
+ var element = google.search.cse.element.getElement('searchresults-only0');
+ if (input.value == '') {
+ element.clearAllResults();
+ } else {
+ element.execute(input.value);
+ }
+ return false;
+ }
+
+ {% if site.google.instant_search %}
+ $(document).ready(function () {
+ $('input#cse-search-input-box-id').on('keyup', function () {
+ googleCustomSearchExecute();
+ });
+ });
+ {% endif %}
+</script> \ No newline at end of file
diff --git a/_includes/search/lunr-search-scripts.html b/_includes/search/lunr-search-scripts.html
new file mode 100644
index 0000000..574c390
--- /dev/null
+++ b/_includes/search/lunr-search-scripts.html
@@ -0,0 +1,10 @@
+{% assign lang = site.locale | slice: 0,2 | default: "en" %}
+{% case lang %}
+{% when "gr" %}
+ {% assign lang = "gr" %}
+{% else %}
+ {% assign lang = "en" %}
+{% endcase %}
+<script src="{{ '/assets/js/lunr/lunr.min.js' | relative_url }}"></script>
+<script src="{{ '/assets/js/lunr/lunr-store.js' | relative_url }}"></script>
+<script src="{{ '/assets/js/lunr/lunr-' | append: lang | append: '.js' | relative_url }}"></script> \ No newline at end of file
diff --git a/_includes/search/search_form.html b/_includes/search/search_form.html
new file mode 100644
index 0000000..c346379
--- /dev/null
+++ b/_includes/search/search_form.html
@@ -0,0 +1,26 @@
+<div class="search-content__inner-wrap">
+ {%- assign search_provider = site.search_provider | default: "lunr" -%}
+ {%- case search_provider -%}
+ {%- when "lunr" -%}
+ <form class="search-content__form" onkeydown="return event.key != 'Enter';">
+ <label class="sr-only" for="search">
+ {{ site.data.ui-text[site.locale].search_label_text | default: 'Enter your search term...' }}
+ </label>
+ <input type="search" id="search" class="search-input" tabindex="-1" placeholder="{{ site.data.ui-text[site.locale].search_placeholder_text | default: 'Enter your search term...' }}" />
+ </form>
+ <div id="results" class="results"></div>
+ {%- when "google" -%}
+ <form onsubmit="return googleCustomSearchExecute();" id="cse-search-box-form-id">
+ <label class="sr-only" for="cse-search-input-box-id">
+ {{ site.data.ui-text[site.locale].search_label_text | default: 'Enter your search term...' }}
+ </label>
+ <input type="search" id="cse-search-input-box-id" class="search-input" tabindex="-1" placeholder="{{ site.data.ui-text[site.locale].search_placeholder_text | default: 'Enter your search term...' }}" />
+ </form>
+ <div id="results" class="results">
+ <gcse:searchresults-only></gcse:searchresults-only>
+ </div>
+ {%- when "algolia" -%}
+ <div class="search-searchbar"></div>
+ <div class="search-hits"></div>
+ {%- endcase -%}
+</div>
diff --git a/_includes/seo.html b/_includes/seo.html
new file mode 100644
index 0000000..ead2d1f
--- /dev/null
+++ b/_includes/seo.html
@@ -0,0 +1,161 @@
+<!-- begin _includes/seo.html -->
+{%- if site.url -%}
+ {%- assign seo_url = site.url | append: site.baseurl -%}
+{%- endif -%}
+{%- assign seo_url = seo_url | default: site.github.url -%}
+
+{% assign title_separator = site.title_separator | default: '-' | replace: '|', '&#124;' %}
+
+{%- if page.title -%}
+ {%- assign seo_title = page.title | append: " " | append: title_separator | append: " " | append: site.title -%}
+{%- endif -%}
+
+{%- if seo_title -%}
+ {%- assign seo_title = seo_title | markdownify | strip_html | strip_newlines | escape_once -%}
+{%- endif -%}
+
+{% if page.canonical_url %}
+ {%- assign canonical_url = page.canonical_url %}
+{% else %}
+ {%- assign canonical_url = page.url | replace: "index.html", "" | absolute_url %}
+{% endif %}
+
+{%- assign seo_description = page.description | default: page.excerpt | default: site.description -%}
+{%- if seo_description -%}
+ {%- assign seo_description = seo_description | markdownify | strip_html | strip_newlines | escape_once -%}
+{%- endif -%}
+
+{%- assign author = page.author | default: page.authors[0] | default: site.author -%}
+{%- assign author = site.data.authors[author] | default: author -%}
+
+{%- if author.twitter -%}
+ {%- assign author_twitter = author.twitter | replace: "@", "" -%}
+{%- endif -%}
+
+{%- assign page_large_image = page.header.og_image | default: page.header.overlay_image | default: page.header.image -%}
+{%- unless page_large_image contains '://' -%}
+ {%- assign page_large_image = page_large_image | absolute_url -%}
+{%- endunless -%}
+{%- assign page_large_image = page_large_image | escape -%}
+
+{%- assign page_teaser_image = page.header.teaser | default: site.og_image -%}
+{%- unless page_teaser_image contains '://' -%}
+ {%- assign page_teaser_image = page_teaser_image | absolute_url -%}
+{%- endunless -%}
+{%- assign page_teaser_image = page_teaser_image | escape -%}
+
+{%- assign site_og_image = site.og_image -%}
+{%- unless site_og_image contains '://' -%}
+ {%- assign site_og_image = site_og_image | absolute_url -%}
+{%- endunless -%}
+{%- assign site_og_image = site_og_image | escape -%}
+
+{%- if page.date -%}
+ {%- assign og_type = "article" -%}
+{%- else -%}
+ {%- assign og_type = "website" -%}
+{%- endif -%}
+
+<title>{{ seo_title | default: site.title }}{% if paginator %}{% unless paginator.page == 1 %} {{ title_separator }} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %}{% endif %}</title>
+<meta name="description" content="{{ seo_description }}">
+
+{% if author.name %}
+ <meta name="author" content="{{ author.name | default: author }}">
+{% endif %}
+
+<meta property="og:type" content="{{ og_type }}">
+<meta property="og:locale" content="{{ site.locale | replace: "-", "_" | default: "en_US" }}">
+<meta property="og:site_name" content="{{ site.title }}">
+<meta property="og:title" content="{{ page.title | default: site.title | markdownify | strip_html | strip_newlines | escape_once }}">
+<meta property="og:url" content="{{ canonical_url }}">
+
+{% if page.excerpt %}
+ <meta property="og:description" content="{{ seo_description }}">
+{% endif %}
+
+{% if page_large_image %}
+ <meta property="og:image" content="{{ page_large_image }}">
+{% elsif page_teaser_image %}
+ <meta property="og:image" content="{{ page_teaser_image }}">
+{% endif %}
+
+{% if site.twitter.username %}
+ <meta name="twitter:site" content="@{{ site.twitter.username | replace: "@", "" }}">
+ <meta name="twitter:title" content="{{ page.title | default: site.title | markdownify | strip_html | strip_newlines | escape_once }}">
+ <meta name="twitter:description" content="{{ seo_description }}">
+ <meta name="twitter:url" content="{{ canonical_url }}">
+
+ {% if page_large_image %}
+ <meta name="twitter:card" content="summary_large_image">
+ <meta name="twitter:image" content="{{ page_large_image }}">
+ {% else %}
+ <meta name="twitter:card" content="summary">
+ {% if page_teaser_image %}
+ <meta name="twitter:image" content="{{ page_teaser_image }}">
+ {% endif %}
+ {% endif %}
+
+ {% if author_twitter %}
+ <meta name="twitter:creator" content="@{{ author_twitter }}">
+ {% endif %}
+{% endif %}
+
+{% if page.date %}
+ <meta property="article:published_time" content="{{ page.date | date_to_xmlschema }}">
+{% endif %}
+
+{% if og_type == "article" and page.last_modified_at %}
+ <meta property="article:modified_time" content="{{ page.last_modified_at | date_to_xmlschema }}">
+{% endif %}
+
+{% if site.facebook %}
+ {% if site.facebook.publisher %}
+ <meta property="article:publisher" content="{{ site.facebook.publisher }}">
+ {% endif %}
+
+ {% if site.facebook.app_id %}
+ <meta property="fb:app_id" content="{{ site.facebook.app_id }}">
+ {% endif %}
+{% endif %}
+
+<link rel="canonical" href="{{ canonical_url }}">
+
+{% if paginator.previous_page %}
+ <link rel="prev" href="{{ paginator.previous_page_path | absolute_url }}">
+{% endif %}
+{% if paginator.next_page %}
+ <link rel="next" href="{{ paginator.next_page_path | absolute_url }}">
+{% endif %}
+
+<script type="application/ld+json">
+ {
+ "@context": "https://schema.org",
+ {% if site.social.type == "Organization" %}
+ "@type": "Organization",
+ "url": {{ '/' | absolute_url | jsonify }}{% if site.og_image %},
+ "logo": {{ site_og_image | jsonify }}{% endif %}
+ {% else %}
+ "@type": "Person",
+ "name": {{ site.social.name | default: site.name | jsonify }},
+ "url": {{ '/' | absolute_url |jsonify }}{% if site.social.links %},
+ "sameAs": {{ site.social.links | jsonify }}{% endif %}
+ {% endif %}
+ }
+</script>
+
+{% if site.google_site_verification %}
+ <meta name="google-site-verification" content="{{ site.google_site_verification }}" />
+{% endif %}
+{% if site.bing_site_verification %}
+ <meta name="msvalidate.01" content="{{ site.bing_site_verification }}">
+{% endif %}
+{% if site.alexa_site_verification %}
+ <meta name="alexaVerifyID" content="{{ site.alexa_site_verification }}">
+{% endif %}
+{% if site.yandex_site_verification %}
+ <meta name="yandex-verification" content="{{ site.yandex_site_verification }}">
+{% endif %}
+{% if site.naver_site_verification %}
+ <meta name="naver-site-verification" content="{{ site.naver_site_verification }}">
+{% endif %}
+<!-- end _includes/seo.html -->
diff --git a/_includes/sidebar.html b/_includes/sidebar.html
new file mode 100644
index 0000000..2a1884e
--- /dev/null
+++ b/_includes/sidebar.html
@@ -0,0 +1,24 @@
+{% if page.author_profile or layout.author_profile or page.sidebar %}
+ <div class="sidebar sticky">
+ {% if page.author_profile or layout.author_profile %}{% include author-profile.html %}{% endif %}
+ {% if page.sidebar %}
+ {% for s in page.sidebar %}
+ {% if s.image %}
+ <img src=
+ {% if s.image contains "://" %}
+ "{{ s.image }}"
+ {% else %}
+ "{{ s.image | relative_url }}"
+ {% endif %}
+ alt="{% if s.image_alt %}{{ s.image_alt }}{% endif %}">
+ {% endif %}
+ {% if s.title %}<h3>{{ s.title }}</h3>{% endif %}
+ {% if s.text %}{{ s.text | markdownify }}{% endif %}
+ {% if s.nav %}{% include nav_list nav=s.nav %}{% endif %}
+ {% endfor %}
+ {% if page.sidebar.nav %}
+ {% include nav_list nav=page.sidebar.nav %}
+ {% endif %}
+ {% endif %}
+ </div>
+{% endif %} \ No newline at end of file
diff --git a/_includes/skip-links.html b/_includes/skip-links.html
new file mode 100644
index 0000000..2cd9f17
--- /dev/null
+++ b/_includes/skip-links.html
@@ -0,0 +1,8 @@
+<nav class="skip-links">
+ <h2 class="screen-reader-text">{{ site.data.ui-text[site.locale].skip_links | default: 'Skip links' }}</h2>
+ <ul>
+ <li><a href="#site-nav" class="screen-reader-shortcut">{{ site.data.ui-text[site.locale].skip_primary_nav | default: 'Skip to primary navigation' }}</a></li>
+ <li><a href="#main" class="screen-reader-shortcut">{{ site.data.ui-text[site.locale].skip_content | default: 'Skip to content' }}</a></li>
+ <li><a href="#footer" class="screen-reader-shortcut">{{ site.data.ui-text[site.locale].skip_footer | default: 'Skip to footer' }}</a></li>
+ </ul>
+</nav>
diff --git a/_includes/social-share.html b/_includes/social-share.html
new file mode 100644
index 0000000..0b37798
--- /dev/null
+++ b/_includes/social-share.html
@@ -0,0 +1,11 @@
+<section class="page__share">
+ {% if site.data.ui-text[site.locale].share_on_label %}
+ <h4 class="page__share-title">{{ site.data.ui-text[site.locale].share_on_label | default: "Share on" }}</h4>
+ {% endif %}
+
+ <a href="https://twitter.com/intent/tweet?{% if site.twitter.username %}via={{ site.twitter.username | url_encode }}&{% endif %}text={{ page.title | url_encode }}%20{{ page.url | absolute_url | url_encode }}" class="btn btn--twitter" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} Twitter"><i class="fab fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+ <a href="https://www.facebook.com/sharer/sharer.php?u={{ page.url | absolute_url | url_encode }}" class="btn btn--facebook" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} Facebook"><i class="fab fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+ <a href="https://www.linkedin.com/shareArticle?mini=true&url={{ page.url | absolute_url | url_encode }}" class="btn btn--linkedin" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} LinkedIn"><i class="fab fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
diff --git a/_includes/tag-list.html b/_includes/tag-list.html
new file mode 100644
index 0000000..e0d02bf
--- /dev/null
+++ b/_includes/tag-list.html
@@ -0,0 +1,26 @@
+{% case site.tag_archive.type %}
+ {% when "liquid" %}
+ {% assign path_type = "#" %}
+ {% when "jekyll-archives" %}
+ {% assign path_type = nil %}
+{% endcase %}
+
+{% if site.tag_archive.path %}
+ {% comment %}
+ <!-- Sort alphabetically regardless of case e.g. a B c d E -->
+ <!-- modified from http://www.codeofclimber.ru/2015/sorting-site-tags-in-jekyll/ -->
+ {% endcomment %}
+ {% capture page_tags %}{% for tag in page.tags %}{{ tag | downcase }}|{{ tag }}{% unless forloop.last %},{% endunless %}{% endfor %}{% endcapture %}
+ {% assign tag_hashes = page_tags | split: ',' | sort %}
+
+ <p class="page__taxonomy">
+ <strong><i class="fas fa-fw fa-tags" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].tags_label | default: "Tags:" }} </strong>
+ <span itemprop="keywords">
+ {% for hash in tag_hashes %}
+ {% assign keyValue = hash | split: '|' %}
+ {% capture tag_word %}{{ keyValue[1] | strip_newlines }}{% endcapture %}
+ <a href="{{ tag_word | slugify | prepend: path_type | prepend: site.tag_archive.path | relative_url }}" class="page__taxonomy-item" rel="tag">{{ tag_word }}</a>{% unless forloop.last %}<span class="sep">, </span>{% endunless %}
+ {% endfor %}
+ </span>
+ </p>
+{% endif %} \ No newline at end of file
diff --git a/_includes/toc b/_includes/toc
new file mode 100644
index 0000000..6423ccd
--- /dev/null
+++ b/_includes/toc
@@ -0,0 +1,7 @@
+<aside class="sidebar__right">
+<nav class="toc" markdown="1">
+<header><h4 class="nav__title"><i class="fas fa-{{ include.icon | default: 'file-alt' }}"></i> {{ include.title | default: site.data.ui-text[site.locale].toc_label }}</h4></header>
+* Auto generated table of contents
+{:toc .toc__menu}
+</nav>
+</aside> \ No newline at end of file
diff --git a/_includes/toc.html b/_includes/toc.html
new file mode 100644
index 0000000..54ab8b0
--- /dev/null
+++ b/_includes/toc.html
@@ -0,0 +1,85 @@
+{% capture tocWorkspace %}
+ {% comment %}
+ Version 1.0.5
+ https://github.com/allejo/jekyll-toc
+
+ "...like all things liquid - where there's a will, and ~36 hours to spare, there's usually a/some way" ~jaybe
+
+ Usage:
+ {% include toc.html html=content sanitize=true class="inline_toc" id="my_toc" h_min=2 h_max=3 %}
+
+ Parameters:
+ * html (string) - the HTML of compiled markdown generated by kramdown in Jekyll
+
+ Optional Parameters:
+ * sanitize (bool) : false - when set to true, the headers will be stripped of any HTML in the TOC
+ * class (string) : '' - a CSS class assigned to the TOC
+ * id (string) : '' - an ID to assigned to the TOC
+ * h_min (int) : 1 - the minimum TOC header level to use; any header lower than this value will be ignored
+ * h_max (int) : 6 - the maximum TOC header level to use; any header greater than this value will be ignored
+ * ordered (bool) : false - when set to true, an ordered list will be outputted instead of an unordered list
+ * item_class (string) : '' - add custom class for each list item; has support for '%level%' placeholder, which is the current heading level
+ * baseurl (string) : '' - add a base url to the TOC links for when your TOC is on another page than the actual content
+
+ Output:
+ An ordered or unordered list representing the table of contents of a markdown block. This snippet will only generate the table of contents and will NOT output the markdown given to it
+ {% endcomment %}
+
+ {% capture my_toc %}{% endcapture %}
+ {% assign orderedList = include.ordered | default: false %}
+ {% assign minHeader = include.h_min | default: 1 %}
+ {% assign maxHeader = include.h_max | default: 6 %}
+ {% assign nodes = include.html | split: '<h' %}
+ {% assign firstHeader = true %}
+
+ {% capture listModifier %}{% if orderedList %}1.{% else %}-{% endif %}{% endcapture %}
+
+ {% for node in nodes %}
+ {% if node == "" %}
+ {% continue %}
+ {% endif %}
+
+ {% assign headerLevel = node | replace: '"', '' | slice: 0, 1 | times: 1 %}
+
+ {% if headerLevel < minHeader or headerLevel > maxHeader %}
+ {% continue %}
+ {% endif %}
+
+ {% if firstHeader %}
+ {% assign firstHeader = false %}
+ {% assign minHeader = headerLevel %}
+ {% endif %}
+
+ {% assign indentAmount = headerLevel | minus: minHeader | add: 1 %}
+ {% assign _workspace = node | split: '</h' %}
+
+ {% assign _idWorkspace = _workspace[0] | split: 'id="' %}
+ {% assign _idWorkspace = _idWorkspace[1] | split: '"' %}
+ {% assign html_id = _idWorkspace[0] %}
+
+ {% capture _hAttrToStrip %}{{ _workspace[0] | split: '>' | first }}>{% endcapture %}
+ {% assign header = _workspace[0] | replace: _hAttrToStrip, '' %}
+
+ {% assign space = '' %}
+ {% for i in (1..indentAmount) %}
+ {% assign space = space | prepend: ' ' %}
+ {% endfor %}
+
+ {% unless include.item_class == blank %}
+ {% capture listItemClass %}{:.{{ include.item_class | replace: '%level%', headerLevel }}}{% endcapture %}
+ {% endunless %}
+
+ {% capture my_toc %}{{ my_toc }}
+{{ space }}{{ listModifier }} {{ listItemClass }} [{% if include.sanitize %}{{ header | strip_html }}{% else %}{{ header }}{% endif %}]({% if include.baseurl %}{{ include.baseurl }}{% endif %}#{{ html_id }}){% endcapture %}
+ {% endfor %}
+
+ {% if include.class %}
+ {% capture my_toc %}{:.{{ include.class }}}
+{{ my_toc | lstrip }}{% endcapture %}
+ {% endif %}
+
+ {% if include.id %}
+ {% capture my_toc %}{: #{{ include.id }}}
+{{ my_toc | lstrip }}{% endcapture %}
+ {% endif %}
+{% endcapture %}{% assign tocWorkspace = '' %}{{ my_toc | markdownify | strip }} \ No newline at end of file
diff --git a/_includes/video b/_includes/video
new file mode 100644
index 0000000..8955c7c
--- /dev/null
+++ b/_includes/video
@@ -0,0 +1,13 @@
+{% capture video_id %}{{ include.id }}{% endcapture %}
+{% capture video_provider %}{{ include.provider }}{% endcapture %}
+
+<!-- Courtesy of embedresponsively.com //-->
+<div class="responsive-video-container">
+{% if video_provider == "vimeo" %}
+ <iframe src="https://player.vimeo.com/video/{{ video_id }}?dnt=true" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
+{% elsif video_provider == "youtube" %}
+ <iframe src="https://www.youtube-nocookie.com/embed/{{ video_id }}" frameborder="0" allowfullscreen></iframe>
+{% elsif video_provider == "google-drive" %}
+ <iframe src="https://drive.google.com/file/d/{{ video_id }}/preview" frameborder="0" allowfullscreen></iframe>
+{% endif %}
+</div>