alembic-jekyll-theme 1.2.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +33 -0
- data/_includes/nav-categories.html +9 -0
- data/_includes/nav-share.html +23 -0
- data/_includes/post-categories.html +18 -0
- data/_includes/post-list.html +15 -13
- data/_includes/post-meta.html +1 -1
- data/_includes/site-aside.html +21 -9
- data/_includes/site-icons.svg +4 -1
- data/_includes/site-search.html +59 -0
- data/_layouts/categories.html +27 -0
- data/_layouts/post.html +2 -2
- data/_layouts/search.html +27 -0
- data/assets/scripts/fetch.js +458 -0
- data/assets/search.json +32 -0
- data/assets/styles.scss +27 -3
- metadata +13 -5
- data/_includes/post-share-buttons.html +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 09c89e1db18aea3d4363f4bce101a4a2d5b3c0bc
|
4
|
+
data.tar.gz: b12c2b8cd6ed19b483a79923e394c2eaea95f6ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f397f5cc7a0a438f557587e79622a0fcb2c879db095be312122c3040b5a132ed8287196589f3de9699f2b13133d178e5721d43c8e60dfac4ac30b1ec6bf07676
|
7
|
+
data.tar.gz: 9be86623dbe49006fcaa772aec3c65a0b9edf37df30a4c6abcd9ec9129975cf189e591109ec8603bfba5d8e5977a1dfc6c7c889e533b40f29b6ad9472a643c50
|
data/README.md
CHANGED
@@ -32,10 +32,13 @@ Alembic is a starting point for [Jekyll](https://jekyllrb.com/) projects. Rather
|
|
32
32
|
- Configurable navigation via a single file
|
33
33
|
- Modular Jekyll components
|
34
34
|
- Easily interchangeable sidebar
|
35
|
+
- Post category support in the form of a single post index page grouped by category
|
36
|
+
- Built in live search using JavaScript
|
35
37
|
- Contact form built in using [Formspree](https://formspree.io/)
|
36
38
|
- Works on [GitHub Pages](https://pages.github.com/) out of the box
|
37
39
|
- Built with [Jekyll](https://jekyllrb.com/) 3.3
|
38
40
|
- Designed with [Siteleaf](http://www.siteleaf.com/) in mind
|
41
|
+
- Has 9 of the most popular networks as performant sharing buttons
|
39
42
|
- Has documentation
|
40
43
|
|
41
44
|
## Examples
|
@@ -124,6 +127,27 @@ Available options:
|
|
124
127
|
- `title`: The accessible label for the icon
|
125
128
|
- `color`: The desired colour of the icon
|
126
129
|
|
130
|
+
### `nav-share.html`
|
131
|
+
A set of buttons that share the current page to various social networks, which is controlled within the `_config.yml` file under the `sharing_links` keyword.
|
132
|
+
|
133
|
+
Example usage: `{% include nav-share.html %}`
|
134
|
+
|
135
|
+
Available options:
|
136
|
+
``` yml
|
137
|
+
Twitter: "#1DA1F2"
|
138
|
+
facebook: "#3B5998"
|
139
|
+
Google+: "#DC4E41"
|
140
|
+
Pinterest: "#BD081C"
|
141
|
+
LinkedIn: "#0077B5"
|
142
|
+
tumblr: "#36465D"
|
143
|
+
Reddit: "#FF4500"
|
144
|
+
Hacker News: "#ff6600"
|
145
|
+
Designer News: "#2D72D9"
|
146
|
+
Email: ""
|
147
|
+
```
|
148
|
+
|
149
|
+
_The first item is the name of the network (must be one of the ones stated above) and the second is the colour of the button. To remove a button just remove the line of the same name._
|
150
|
+
|
127
151
|
### `video.html`
|
128
152
|
A YouTube video.
|
129
153
|
|
@@ -147,12 +171,21 @@ Example usage: `{% include site-form.html %}`
|
|
147
171
|
|
148
172
|
This include has no options. Use the `email` option in the `/_config.yml` to change to the desired email.
|
149
173
|
|
174
|
+
### `site-search.html`
|
175
|
+
Adds a search form to the page.
|
176
|
+
|
177
|
+
Example usage: `{% include site-search.html %}`
|
178
|
+
|
179
|
+
This include has no options. This include will add a block of javascript to the page and javascript reference in order for the search field to work correctly.
|
180
|
+
|
150
181
|
## Page layouts
|
151
182
|
|
152
183
|
As well as `page`, `post`, `blog`, there are a few alternative layouts that can be used on pages:
|
153
184
|
|
154
185
|
- `page-aside-left`: Places the aside (sidebar) to the left of the content
|
155
186
|
- `home`: Removes the aside entirely, leaving the full width for the main content (typically used for home page designs)
|
187
|
+
- `categories`: Shows all posts grouped by category, with an index of categories in a left hand sidebar
|
188
|
+
- `search`: Adds a search field to the page as well as a simplified version of the sidebar to allow more focus on the search results
|
156
189
|
|
157
190
|
## Page and Post options
|
158
191
|
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<nav class="nav nav--categories">
|
2
|
+
<ul class="list list--categories">
|
3
|
+
{% for item in site.categories %}
|
4
|
+
<li class="item">
|
5
|
+
<a href="#{{ item | first | slugify }}" title="Category - {{ item | first }}">{{ item | first }}</a>
|
6
|
+
</li>
|
7
|
+
{% endfor %}
|
8
|
+
</ul>
|
9
|
+
</nav>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<div class="share">
|
2
|
+
{% for network in site.sharing_links %}
|
3
|
+
{% assign name = network[0] %}
|
4
|
+
{% assign id = network[0] | downcase | remove: " " %}
|
5
|
+
{% assign url = site.url | append: page.url %}
|
6
|
+
{% assign color = network[1] %}
|
7
|
+
|
8
|
+
{% capture share_link %}
|
9
|
+
{% if id contains "twitter" %}https://twitter.com/intent/tweet/?url={{ url }}&text={{ page.title | uri_escape }}{% if site.twitter.username %}&via={{ site.twitter.username}}{% endif %}{% endif %}
|
10
|
+
{% if id contains "facebook" %}https://facebook.com/sharer/sharer.php?u={{ url }}{% endif %}
|
11
|
+
{% if id contains "google+" %}https://plus.google.com/share?url={{ url }}{% endif %}
|
12
|
+
{% if id contains "pinterest" %}https://pinterest.com/pin/create/button/?url={{ url }}&description={{ page.title }}&media={{ page.image }}{% endif %}
|
13
|
+
{% if id contains "linkedin" %}https://www.linkedin.com/shareArticle?url={{ url }}&title={{ page.title }}&source={{ site.title }}&summary={{ page.excerpt }}&mini=true{% endif %}
|
14
|
+
{% if id contains "tumblr" %}https://tumblr.com/widgets/share/tool?canonicalUrl={{ url }}&tags={{ page.category }}&caption={{ page.title }}{% endif %}
|
15
|
+
{% if id contains "reddit" %}https://reddit.com/submit?url={{ url }}&title={{ page.title }}&resubmit=true{% endif %}
|
16
|
+
{% if id contains "hackernews" %}https://news.ycombinator.com/submitlink?u={{ url }}&t={{ page.title }}{% endif %}
|
17
|
+
{% if id contains "designernews" %}https://www.designernews.co/submit?url={{ url }}&title={{ page.title }}{% endif %}
|
18
|
+
{% if id contains "email" %}mailto:?subject={{ page.title }}&body={{ url | prepend: "Hey, check out this: "}}{% endif %}
|
19
|
+
{% endcapture %}
|
20
|
+
|
21
|
+
{% include button.html text=name icon=id link=share_link color=color %}
|
22
|
+
{% endfor %}
|
23
|
+
</div>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{% for category in site.categories %}
|
2
|
+
{% assign category_name = category | first %}
|
3
|
+
<section class="section typeset">
|
4
|
+
<h2 id="{{ category_name | slugify }}">{{ category_name }}</h2>
|
5
|
+
<ul class="list list--posts">
|
6
|
+
{% for page in site.categories[category_name] %}
|
7
|
+
<li class="item item--post">
|
8
|
+
<article class="article article--post typeset">
|
9
|
+
<h3><a href="{{ page.url }}" title="Post - {{ page.title }}">{{ page.title }}</a></h3>
|
10
|
+
{% include post-meta.html %}
|
11
|
+
{{ page.excerpt | markdownify | truncatewords: 60 }}
|
12
|
+
</article>
|
13
|
+
</li>
|
14
|
+
{% endfor %}
|
15
|
+
</ul>
|
16
|
+
{% unless forloop.last %}<hr/>{% endunless %}
|
17
|
+
</section>
|
18
|
+
{% endfor %}
|
data/_includes/post-list.html
CHANGED
@@ -1,26 +1,28 @@
|
|
1
1
|
{% if paginator.posts %}
|
2
2
|
|
3
|
-
<
|
4
|
-
|
5
|
-
|
6
|
-
<
|
3
|
+
<section class="section typeset">
|
4
|
+
<ul class="list list--posts">
|
5
|
+
{% for page in paginator.posts %}
|
6
|
+
<li class="item item--post">
|
7
|
+
<article class="article article--post">
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
<h2><a href="{{ page.url }}" title="Post - {{ page.title }}">{{ page.title }}</a></h2>
|
10
|
+
{% include post-meta.html %}
|
11
|
+
{{ page.excerpt | markdownify | truncatewords: 60 }}
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
</article>
|
14
|
+
</li>
|
15
|
+
{% endfor %}
|
16
|
+
</ul>
|
17
|
+
{% include post-pagination.html %}
|
18
|
+
</section>
|
17
19
|
|
18
20
|
{% else %}
|
19
21
|
<h3>Latest blog posts</h3>
|
20
22
|
<ul class="list list--posts">
|
21
23
|
{% for page in site.posts limit: 4 %}
|
22
24
|
<li class="item item--post">
|
23
|
-
<article class="article article--post
|
25
|
+
<article class="article article--post">
|
24
26
|
|
25
27
|
<h4><a href="{{ page.url }}" title="Post - {{ page.title }}">{{ page.title }}</a></h4>
|
26
28
|
{% include post-meta.html %}
|
data/_includes/post-meta.html
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
<small class="small post-meta">
|
2
|
-
{% if page.category %}<span class="label label--category">{{ page.category }}</span> · {% endif %}<time datetime="{{ page.date | date_to_xmlschema }}" class="time">{{ page.date | date_to_string }}</time>
|
2
|
+
{% if page.category %}<span class="label label--category"><a href="/categories#{{ page.category | downcase }}">{{ page.category }}</a></span> · {% endif %}<time datetime="{{ page.date | date_to_xmlschema }}" class="time">{{ page.date | date_to_string }}</time>
|
3
3
|
</small>
|
data/_includes/site-aside.html
CHANGED
@@ -1,19 +1,31 @@
|
|
1
1
|
<aside class="aside typeset">
|
2
|
-
<h3>About this site</h3>
|
3
|
-
<p>{{ site.description }}</p>
|
4
2
|
|
5
|
-
{% unless
|
6
|
-
|
7
|
-
|
8
|
-
{% else %}
|
9
|
-
{% include post-list.html %}
|
10
|
-
{% endif %}
|
3
|
+
{% unless page.layout == "categories" or page.collection == "posts" %}
|
4
|
+
<h3>About this site</h3>
|
5
|
+
<p>{{ site.description }}</p>
|
11
6
|
{% endunless %}
|
12
7
|
|
8
|
+
{% unless page.layout == "categories" or page.layout == "search" or page.collection == "posts" or paginator.posts %}
|
9
|
+
{% include post-list.html %}
|
10
|
+
{% endunless %}
|
11
|
+
|
12
|
+
{% if page.layout == "categories" %}
|
13
|
+
<section class="section section--category-index">
|
14
|
+
<h3>Index</h3>
|
15
|
+
{% include nav-categories.html %}
|
16
|
+
</section>
|
17
|
+
{% endif %}
|
18
|
+
|
19
|
+
{% if page.collection == "posts" %}
|
20
|
+
{% include post-related.html %}
|
21
|
+
{% endif %}
|
22
|
+
|
13
23
|
{% if page.collection == "posts" or paginator.posts %}
|
14
24
|
{% include button.html text="Subscribe to posts " icon="rss" link="/feed.xml" %}
|
15
25
|
{% endif %}
|
16
26
|
|
17
|
-
{%
|
27
|
+
{% unless page.layout == "categories" %}
|
28
|
+
{% include nav-social.html %}
|
29
|
+
{% endunless %}
|
18
30
|
|
19
31
|
</aside>
|
data/_includes/site-icons.svg
CHANGED
@@ -1,15 +1,18 @@
|
|
1
1
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="height: 0; position: absolute">
|
2
2
|
<symbol id="codepen" viewBox="0 0 16 16"><path d="M15.988 5.443c-.004-.02-.007-.04-.012-.058l-.01-.033c-.006-.017-.012-.034-.02-.05-.003-.012-.01-.023-.014-.034l-.023-.045-.02-.032-.03-.04-.024-.03c-.01-.013-.022-.026-.034-.038l-.027-.027-.04-.032-.03-.024-.012-.01L8.38.117c-.23-.155-.53-.155-.76 0L.305 4.99.296 5c-.012.007-.022.015-.032.023-.014.01-.027.02-.04.032l-.027.027-.034.037-.024.03-.03.04c-.006.012-.013.022-.02.033l-.023.045-.015.034c-.007.016-.012.033-.018.05l-.01.032c-.005.02-.01.038-.012.058l-.006.03C.002 5.5 0 5.53 0 5.56v4.875c0 .03.002.06.006.09l.007.03c.003.02.006.04.013.058l.01.033c.006.018.01.035.018.05l.015.033c.006.016.014.03.023.047l.02.03c.008.016.018.03.03.042.007.01.014.02.023.03.01.012.02.025.034.036.01.01.018.02.028.026l.04.033.03.023.01.01 7.31 4.876c.116.078.248.117.382.116.134 0 .266-.04.38-.116l7.314-4.875.01-.01c.012-.007.022-.015.032-.023.014-.01.027-.02.04-.032l.027-.027.034-.037.024-.03.03-.04.02-.032.023-.046.015-.033.018-.052.01-.033c.005-.02.01-.038.013-.058 0-.01.003-.02.004-.03.004-.03.006-.06.006-.09V5.564c0-.03-.002-.06-.006-.09l-.007-.03zM8 9.626L5.568 8 8 6.374 10.432 8 8 9.626zM7.312 5.18l-2.98 1.993-2.406-1.61 5.386-3.59v3.206zM3.095 8l-1.72 1.15v-2.3L3.095 8zm1.237.828l2.98 1.993v3.208l-5.386-3.59 2.406-1.61zm4.355 1.993l2.98-1.993 2.407 1.61-5.387 3.59v-3.206zM12.905 8l1.72-1.15v2.3L12.905 8zm-1.237-.827L8.688 5.18V1.97l5.386 3.59-2.406 1.61z" fill-rule="nonzero"/></symbol>
|
3
3
|
<symbol id="dribbble" viewBox="0 0 16 16"><path d="M8 16c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm6.747-6.905c-.234-.074-2.115-.635-4.257-.292.894 2.456 1.258 4.456 1.328 4.872 1.533-1.037 2.624-2.68 2.93-4.58zM10.67 14.3c-.102-.6-.5-2.688-1.46-5.18l-.044.014C5.312 10.477 3.93 13.15 3.806 13.4c1.158.905 2.614 1.444 4.194 1.444.947 0 1.85-.194 2.67-.543zm-7.747-1.72c.155-.266 2.03-3.37 5.555-4.51.09-.03.18-.056.27-.08-.173-.39-.36-.778-.555-1.16C4.78 7.85 1.47 7.807 1.17 7.8l-.003.208c0 1.755.665 3.358 1.756 4.57zM1.31 6.61c.307.005 3.122.017 6.318-.832-1.132-2.012-2.353-3.705-2.533-3.952-1.912.902-3.34 2.664-3.784 4.785zM6.4 1.368c.188.253 1.43 1.943 2.548 4 2.43-.91 3.46-2.293 3.582-2.468C11.323 1.827 9.736 1.176 8 1.176c-.55 0-1.087.066-1.6.19zm6.89 2.322c-.145.194-1.29 1.662-3.816 2.694.16.325.31.656.453.99.05.117.1.235.147.352 2.274-.286 4.533.172 4.758.22-.015-1.613-.59-3.094-1.543-4.257z"/></symbol>
|
4
|
+
<symbol id="designernews" viewBox="0 0 16 16"><path d="M7.514 7.988c0-2.555-1.57-4.287-4.56-4.287H0v8.6h3.016c2.903 0 4.498-1.75 4.498-4.31zM5.37 8c0 1.844-.946 2.642-2.467 2.642H2.13V5.358h.773C4.36 5.358 5.37 6.193 5.37 8zM16 12.3V3.7h-1.98v4.81L10.853 3.7h-2.07v8.6h1.982V7.152l3.39 5.146H16z"/></symbol>
|
4
5
|
<symbol id="facebook" viewBox="0 0 16 16"><path d="M15.117 0H.883C.395 0 0 .395 0 .883v14.234c0 .488.395.883.883.883h7.663V9.804H6.46V7.39h2.086V5.607c0-2.066 1.262-3.19 3.106-3.19.883 0 1.642.064 1.863.094v2.16h-1.28c-1 0-1.195.476-1.195 1.176v1.54h2.39l-.31 2.416h-2.08V16h4.077c.488 0 .883-.395.883-.883V.883C16 .395 15.605 0 15.117 0" fill-rule="nonzero"/></symbol>
|
5
6
|
<symbol id="flickr" viewBox="0 0 16 16"><path d="M0 8c0 2.05 1.662 3.71 3.71 3.71 2.05 0 3.713-1.66 3.713-3.71S5.76 4.29 3.71 4.29C1.663 4.29 0 5.95 0 8zm8.577 0c0 2.05 1.662 3.71 3.712 3.71C14.337 11.71 16 10.05 16 8s-1.662-3.71-3.71-3.71c-2.05 0-3.713 1.66-3.713 3.71z"/></symbol>
|
6
7
|
<symbol id="github" viewBox="0 0 16 16"><path d="M8 0C3.58 0 0 3.582 0 8c0 3.535 2.292 6.533 5.47 7.59.4.075.547-.172.547-.385 0-.19-.007-.693-.01-1.36-2.226.483-2.695-1.073-2.695-1.073-.364-.924-.89-1.17-.89-1.17-.725-.496.056-.486.056-.486.803.056 1.225.824 1.225.824.714 1.223 1.873.87 2.33.665.072-.517.278-.87.507-1.07-1.777-.2-3.644-.888-3.644-3.953 0-.873.31-1.587.823-2.147-.083-.202-.358-1.015.077-2.117 0 0 .672-.215 2.2.82.638-.178 1.323-.266 2.003-.27.68.004 1.364.092 2.003.27 1.527-1.035 2.198-.82 2.198-.82.437 1.102.163 1.915.08 2.117.513.56.823 1.274.823 2.147 0 3.073-1.87 3.75-3.653 3.947.287.246.543.735.543 1.48 0 1.07-.01 1.933-.01 2.195 0 .215.144.463.55.385C13.71 14.53 16 11.534 16 8c0-4.418-3.582-8-8-8"/></symbol>
|
7
|
-
<symbol id="
|
8
|
+
<symbol id="google+" viewBox="0 0 16 16"><g><path d="M5.09 7.273v1.745H7.98c-.116.75-.873 2.197-2.887 2.197-1.737 0-3.155-1.44-3.155-3.215S3.353 4.785 5.09 4.785c.99 0 1.652.422 2.03.786l1.382-1.33c-.887-.83-2.037-1.33-3.41-1.33C2.275 2.91 0 5.184 0 8s2.276 5.09 5.09 5.09c2.94 0 4.888-2.065 4.888-4.974 0-.334-.036-.59-.08-.843H5.09zM16 7.273h-1.455V5.818H13.09v1.455h-1.454v1.454h1.455v1.455h1.455V8.727H16"/></g></symbol>
|
9
|
+
<symbol id="hackernews" viewBox="0 0 16 16"><path d="M0 0v16h16V0H0zm8.92 8.96v3H7.25v-3l-2.75-5h1.96l1.66 3.48L9.7 3.96h1.88l-2.66 5z"/></symbol>
|
8
10
|
<symbol id="instagram" viewBox="0 0 16 16"><path d="M8 0C5.827 0 5.555.01 4.702.048 3.85.088 3.27.222 2.76.42c-.526.204-.973.478-1.417.923-.445.444-.72.89-.923 1.417-.198.51-.333 1.09-.372 1.942C.008 5.555 0 5.827 0 8s.01 2.445.048 3.298c.04.852.174 1.433.372 1.942.204.526.478.973.923 1.417.444.445.89.72 1.417.923.51.198 1.09.333 1.942.372.853.04 1.125.048 3.298.048s2.445-.01 3.298-.048c.852-.04 1.433-.174 1.942-.372.526-.204.973-.478 1.417-.923.445-.444.72-.89.923-1.417.198-.51.333-1.09.372-1.942.04-.853.048-1.125.048-3.298s-.01-2.445-.048-3.298c-.04-.852-.174-1.433-.372-1.942-.204-.526-.478-.973-.923-1.417-.444-.445-.89-.72-1.417-.923-.51-.198-1.09-.333-1.942-.372C10.445.008 10.173 0 8 0zm0 1.44c2.136 0 2.39.01 3.233.048.78.036 1.203.166 1.485.276.374.145.64.318.92.598.28.28.453.546.598.92.11.282.24.705.276 1.485.038.844.047 1.097.047 3.233s-.01 2.39-.048 3.233c-.036.78-.166 1.203-.276 1.485-.145.374-.318.64-.598.92-.28.28-.546.453-.92.598-.282.11-.705.24-1.485.276-.844.038-1.097.047-3.233.047s-2.39-.01-3.233-.048c-.78-.036-1.203-.166-1.485-.276-.374-.145-.64-.318-.92-.598-.28-.28-.453-.546-.598-.92-.11-.282-.24-.705-.276-1.485C1.45 10.39 1.44 10.136 1.44 8s.01-2.39.048-3.233c.036-.78.166-1.203.276-1.485.145-.374.318-.64.598-.92.28-.28.546-.453.92-.598.282-.11.705-.24 1.485-.276C5.61 1.45 5.864 1.44 8 1.44zm0 2.452c-2.27 0-4.108 1.84-4.108 4.108 0 2.27 1.84 4.108 4.108 4.108 2.27 0 4.108-1.84 4.108-4.108 0-2.27-1.84-4.108-4.108-4.108zm0 6.775c-1.473 0-2.667-1.194-2.667-2.667 0-1.473 1.194-2.667 2.667-2.667 1.473 0 2.667 1.194 2.667 2.667 0 1.473-1.194 2.667-2.667 2.667zm5.23-6.937c0 .53-.43.96-.96.96s-.96-.43-.96-.96.43-.96.96-.96.96.43.96.96z"/></symbol>
|
9
11
|
<symbol id="linkedin" viewBox="0 0 16 16"><path d="M13.632 13.635h-2.37V9.922c0-.886-.018-2.025-1.234-2.025-1.235 0-1.424.964-1.424 1.96v3.778h-2.37V6H8.51V7.04h.03c.318-.6 1.092-1.233 2.247-1.233 2.4 0 2.845 1.58 2.845 3.637v4.188zM3.558 4.955c-.762 0-1.376-.617-1.376-1.377 0-.758.614-1.375 1.376-1.375.76 0 1.376.617 1.376 1.375 0 .76-.617 1.377-1.376 1.377zm1.188 8.68H2.37V6h2.376v7.635zM14.816 0H1.18C.528 0 0 .516 0 1.153v13.694C0 15.484.528 16 1.18 16h13.635c.652 0 1.185-.516 1.185-1.153V1.153C16 .516 15.467 0 14.815 0z" fill-rule="nonzero"/></symbol>
|
10
12
|
<symbol id="medium" viewBox="0 0 16 16"><path d="M11.824 12.628l-.276.45.798.398 2.744 1.372c.15.076.294.11.418.11.278 0 .467-.177.467-.492V5.883l-4.15 6.745zm4.096-8.67c-.004-.003 0-.01-.003-.012l-4.825-2.412c-.06-.03-.123-.038-.187-.044-.016 0-.03-.01-.047-.01-.184 0-.368.092-.467.254l-.24.39-.5.814-1.89 3.08 1.89 3.076.5.813.5.812.59.95 4.71-7.64c.02-.03.01-.06-.02-.08zm-6.27 7.045L7.17 6.97l-.295-.477-.294-.477-.25-.416v4.867l3.32 1.663.5.25.5.25-.5-.813-.5-.813zM.737 1.68L.59 1.608c-.085-.042-.166-.062-.24-.062-.206 0-.35.16-.35.427v10.162c0 .272.2.594.442.716l4.145 2.08c.107.06.208.08.3.08.257 0 .438-.2.438-.53V4.01c0-.02-.012-.04-.03-.047L.738 1.68z"/></symbol>
|
11
13
|
<symbol id="pinterest" viewBox="0 0 16 16"><path d="M8 0C3.582 0 0 3.582 0 8c0 3.39 2.108 6.285 5.084 7.45-.07-.633-.133-1.604.028-2.295.146-.625.938-3.977.938-3.977s-.24-.48-.24-1.188c0-1.11.646-1.943 1.448-1.943.683 0 1.012.513 1.012 1.127 0 .687-.436 1.713-.662 2.664-.19.797.4 1.445 1.185 1.445 1.42 0 2.514-1.498 2.514-3.662 0-1.915-1.376-3.254-3.342-3.254-2.276 0-3.61 1.707-3.61 3.472 0 .687.263 1.424.593 1.825.066.08.075.15.057.23-.06.252-.196.796-.223.907-.035.146-.115.178-.268.107-.998-.465-1.624-1.926-1.624-3.1 0-2.524 1.834-4.84 5.287-4.84 2.774 0 4.932 1.977 4.932 4.62 0 2.757-1.74 4.977-4.153 4.977-.81 0-1.572-.422-1.833-.92l-.5 1.902c-.18.695-.667 1.566-.994 2.097.75.232 1.545.357 2.37.357 4.417 0 8-3.582 8-8s-3.583-8-8-8z" fill-rule="nonzero"/></symbol>
|
12
14
|
<symbol id="rss" viewBox="0 0 16 16"><path d="M12.8 16C12.8 8.978 7.022 3.2 0 3.2V0c8.777 0 16 7.223 16 16h-3.2zM2.194 11.61c1.21 0 2.195.985 2.195 2.196 0 1.21-.985 2.194-2.196 2.194C.984 16 0 15.017 0 13.806c0-1.21.983-2.195 2.194-2.195zM10.606 16h-3.11c0-4.113-3.383-7.497-7.496-7.497v-3.11c5.818 0 10.606 4.79 10.606 10.607z"/></symbol>
|
15
|
+
<symbol id="reddit" viewBox="0 0 16 16"><path d="M1.473 9.368c-.04.185-.06.374-.06.566 0 2.3 2.94 4.173 6.554 4.173 3.613 0 6.553-1.872 6.553-4.173 0-.183-.02-.364-.055-.54l-.01-.022c-.013-.036-.02-.073-.02-.11-.2-.784-.745-1.497-1.533-2.072-.03-.01-.058-.026-.084-.047-.017-.013-.03-.028-.044-.043-1.198-.824-2.91-1.34-4.807-1.34-1.88 0-3.576.506-4.772 1.315-.01.012-.02.023-.033.033-.026.022-.056.04-.087.05-.805.576-1.364 1.293-1.572 2.086 0 .038-.01.077-.025.114l-.005.01zM8 13.003c-1.198 0-2.042-.26-2.58-.8-.116-.116-.116-.305 0-.422.117-.11.307-.11.424 0 .42.42 1.125.63 2.155.63 1.03 0 1.73-.2 2.15-.62.11-.11.3-.11.42 0 .11.12.11.31 0 .43-.54.54-1.38.8-2.58.8zM5.592 7.945c-.61 0-1.12.51-1.12 1.12 0 .608.51 1.102 1.12 1.102.61 0 1.103-.494 1.103-1.102 0-.61-.494-1.12-1.103-1.12zm4.83 0c-.61 0-1.12.51-1.12 1.12 0 .608.51 1.102 1.12 1.102.61 0 1.103-.494 1.103-1.102 0-.61-.494-1.12-1.103-1.12zM13.46 6.88c.693.556 1.202 1.216 1.462 1.94.3-.225.48-.578.48-.968 0-.67-.545-1.214-1.214-1.214-.267 0-.52.087-.728.243zM1.812 6.64c-.67 0-1.214.545-1.214 1.214 0 .363.16.7.43.927.268-.72.782-1.37 1.478-1.92-.202-.14-.443-.22-.694-.22zm6.155 8.067c-3.944 0-7.152-2.14-7.152-4.77 0-.183.016-.363.046-.54-.53-.33-.86-.91-.86-1.545 0-1 .82-1.812 1.82-1.812.45 0 .87.164 1.2.455 1.24-.796 2.91-1.297 4.75-1.33l1.21-3.69.27.063s.01 0 .01.002l2.82.663c.23-.533.76-.908 1.38-.908.82 0 1.49.67 1.49 1.492 0 .823-.67 1.492-1.49 1.492s-1.49-.67-1.49-1.49L9.4 2.18l-.98 2.99c1.77.07 3.37.57 4.57 1.35.33-.31.764-.48 1.225-.48 1 0 1.814.81 1.814 1.81 0 .66-.36 1.26-.92 1.58.02.17.04.33.04.5-.01 2.63-3.21 4.77-7.16 4.77zM13.43 1.893c-.494 0-.895.4-.895.894 0 .493.4.894.894.894.49 0 .89-.4.89-.89s-.4-.89-.9-.89z"/></symbol>
|
13
16
|
<symbol id="skype" viewBox="0 0 16 16"><path d="M8.035 12.6c-2.685 0-3.885-1.322-3.885-2.313 0-.51.374-.865.89-.865 1.15 0 .85 1.653 2.995 1.653 1.096 0 1.703-.597 1.703-1.208 0-.368-.18-.775-.904-.954l-2.387-.597C4.524 7.833 4.175 6.79 4.175 5.812c0-2.034 1.91-2.798 3.704-2.798 1.65 0 3.6.916 3.6 2.136 0 .523-.452.827-.97.827-.98 0-.798-1.36-2.773-1.36-.98 0-1.523.444-1.523 1.08 0 .636.774.84 1.446.993l1.767.392c1.936.433 2.427 1.566 2.427 2.633 0 1.652-1.266 2.886-3.82 2.886m7.4-3.264l-.014.084-.028-.16c.015.024.028.05.042.076.082-.45.125-.912.125-1.373 0-1.023-.2-2.014-.595-2.948-.38-.902-.925-1.712-1.62-2.407-.692-.696-1.5-1.242-2.4-1.623C10.015.59 9.025.39 8.005.39c-.48 0-.963.045-1.43.135H6.57l.08.04-.16-.023.08-.016C5.927.183 5.205 0 4.472 0 3.278 0 2.155.466 1.31 1.313.465 2.16 0 3.286 0 4.483c0 .763.195 1.512.563 2.175l.013-.083.028.16c-.015-.026-.027-.052-.04-.077-.076.43-.115.867-.115 1.305 0 1.022.2 2.014.593 2.948.38.903.925 1.713 1.62 2.408.693.695 1.5 1.242 2.4 1.623.932.397 1.92.597 2.94.597.445 0 .89-.04 1.325-.118l-.077-.043.162.028-.084.014c.67.378 1.426.58 2.2.58 1.194 0 2.317-.466 3.162-1.313.845-.846 1.31-1.972 1.31-3.17 0-.765-.197-1.517-.566-2.18" fill-rule="nonzero"/></symbol>
|
14
17
|
<symbol id="tumblr" viewBox="0 0 16 16"><path d="M9.708 16c-3.396 0-4.687-2.504-4.687-4.274V6.498H3.403V4.432C5.83 3.557 6.412 1.368 6.55.12c.01-.086.077-.12.115-.12H9.01v4.076h3.2v2.422H8.997v4.98c.01.667.25 1.58 1.472 1.58h.067c.424-.012.994-.136 1.29-.278l.77 2.283c-.288.424-1.594.916-2.77.936h-.12z" fill-rule="nonzero"/></symbol>
|
15
18
|
<symbol id="twitch" viewBox="0 0 16 16"><g fill-rule="nonzero"><path d="M1.393 0L.35 2.783v11.13h3.824V16h2.088l2.085-2.088h3.13L15.65 9.74V0H1.394zm1.39 1.39H14.26v7.653l-2.435 2.435H8l-2.085 2.085v-2.085H2.783V1.39z"/><path d="M6.61 8.348H8V4.175H6.61v4.173zm3.824 0h1.39V4.175h-1.39v4.173z"/></g></symbol>
|
@@ -0,0 +1,59 @@
|
|
1
|
+
<div class="form form--search">
|
2
|
+
<form id="contact-form" action="">
|
3
|
+
<label class="label" for="search">Search term:</label>
|
4
|
+
<input class="input" id="search" type="search" name="search" placeholder="e.g. About us" autocomplete="off" />
|
5
|
+
|
6
|
+
<ul class="list list--results" id="list">
|
7
|
+
<!-- results go here -->
|
8
|
+
</ul>
|
9
|
+
</form>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<script type="text/javascript" src="{{ "/assets/scripts/fetch.js" | relative_url }}"></script>
|
13
|
+
<script type="text/javascript">
|
14
|
+
const endpoint = '{{ "/assets/search.json" | relative_url }}';
|
15
|
+
|
16
|
+
const pages = [];
|
17
|
+
|
18
|
+
fetch(endpoint)
|
19
|
+
.then(blob => blob.json())
|
20
|
+
.then(data => pages.push(...data))
|
21
|
+
|
22
|
+
function findResults(termToMatch, pages) {
|
23
|
+
return pages.filter(item => {
|
24
|
+
const regex = new RegExp(termToMatch, 'gi');
|
25
|
+
return item.title.match(regex) || item.content.match(regex);
|
26
|
+
});
|
27
|
+
}
|
28
|
+
|
29
|
+
function displayResults() {
|
30
|
+
const resultsArray = findResults(this.value, pages);
|
31
|
+
const html = resultsArray.map(item => {
|
32
|
+
return `
|
33
|
+
<li class="item">
|
34
|
+
<article class="article typeset">
|
35
|
+
<h4><a href="{{ site.url }}${item.url}" title="Result - ${item.title}">${item.title}</a></h4>
|
36
|
+
<p>${item.excerpt}</p>
|
37
|
+
</article>
|
38
|
+
</li>`;
|
39
|
+
}).join('');
|
40
|
+
if ((resultsArray.length == 0) || (this.value == '')) {
|
41
|
+
resultsList.innerHTML = `<p>Sorry, nothing was found</p>`;
|
42
|
+
} else {
|
43
|
+
resultsList.innerHTML = html;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
const field = document.querySelector('#search');
|
48
|
+
const resultsList = document.querySelector('#list');
|
49
|
+
|
50
|
+
field.addEventListener('change', displayResults);
|
51
|
+
field.addEventListener('keyup', displayResults);
|
52
|
+
|
53
|
+
field.addEventListener('keypress', function(event) {
|
54
|
+
if (event.keyCode == 13) {
|
55
|
+
event.preventDefault();
|
56
|
+
}
|
57
|
+
});
|
58
|
+
</script>
|
59
|
+
<noscript>Please enable JavaScript to use the search form.</noscript>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
---
|
2
|
+
layout: default
|
3
|
+
---
|
4
|
+
|
5
|
+
{% include site-header.html %}
|
6
|
+
|
7
|
+
<main class="main container">
|
8
|
+
|
9
|
+
<div class="content content--aside-left">
|
10
|
+
|
11
|
+
<article class="article article--page typeset">
|
12
|
+
|
13
|
+
<h1>{{ page.title }}</h1>
|
14
|
+
|
15
|
+
{{ content }}
|
16
|
+
|
17
|
+
</article>
|
18
|
+
|
19
|
+
{% include post-categories.html %}
|
20
|
+
|
21
|
+
</div>
|
22
|
+
|
23
|
+
{% include site-aside.html %}
|
24
|
+
|
25
|
+
</main>
|
26
|
+
|
27
|
+
{% include site-footer.html %}
|
data/_layouts/post.html
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
---
|
2
|
+
layout: default
|
3
|
+
---
|
4
|
+
|
5
|
+
{% include site-header.html %}
|
6
|
+
|
7
|
+
<main class="main container">
|
8
|
+
|
9
|
+
<div class="content">
|
10
|
+
|
11
|
+
<article class="article article--page typeset">
|
12
|
+
|
13
|
+
<h1>{{ page.title }}</h1>
|
14
|
+
|
15
|
+
{{ content }}
|
16
|
+
|
17
|
+
</article>
|
18
|
+
|
19
|
+
{% include site-search.html %}
|
20
|
+
|
21
|
+
</div>
|
22
|
+
|
23
|
+
{% include site-aside.html %}
|
24
|
+
|
25
|
+
</main>
|
26
|
+
|
27
|
+
{% include site-footer.html %}
|
@@ -0,0 +1,458 @@
|
|
1
|
+
(function(self) {
|
2
|
+
'use strict';
|
3
|
+
|
4
|
+
if (self.fetch) {
|
5
|
+
return
|
6
|
+
}
|
7
|
+
|
8
|
+
var support = {
|
9
|
+
searchParams: 'URLSearchParams' in self,
|
10
|
+
iterable: 'Symbol' in self && 'iterator' in Symbol,
|
11
|
+
blob: 'FileReader' in self && 'Blob' in self && (function() {
|
12
|
+
try {
|
13
|
+
new Blob()
|
14
|
+
return true
|
15
|
+
} catch(e) {
|
16
|
+
return false
|
17
|
+
}
|
18
|
+
})(),
|
19
|
+
formData: 'FormData' in self,
|
20
|
+
arrayBuffer: 'ArrayBuffer' in self
|
21
|
+
}
|
22
|
+
|
23
|
+
if (support.arrayBuffer) {
|
24
|
+
var viewClasses = [
|
25
|
+
'[object Int8Array]',
|
26
|
+
'[object Uint8Array]',
|
27
|
+
'[object Uint8ClampedArray]',
|
28
|
+
'[object Int16Array]',
|
29
|
+
'[object Uint16Array]',
|
30
|
+
'[object Int32Array]',
|
31
|
+
'[object Uint32Array]',
|
32
|
+
'[object Float32Array]',
|
33
|
+
'[object Float64Array]'
|
34
|
+
]
|
35
|
+
|
36
|
+
var isDataView = function(obj) {
|
37
|
+
return obj && DataView.prototype.isPrototypeOf(obj)
|
38
|
+
}
|
39
|
+
|
40
|
+
var isArrayBufferView = ArrayBuffer.isView || function(obj) {
|
41
|
+
return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
function normalizeName(name) {
|
46
|
+
if (typeof name !== 'string') {
|
47
|
+
name = String(name)
|
48
|
+
}
|
49
|
+
if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) {
|
50
|
+
throw new TypeError('Invalid character in header field name')
|
51
|
+
}
|
52
|
+
return name.toLowerCase()
|
53
|
+
}
|
54
|
+
|
55
|
+
function normalizeValue(value) {
|
56
|
+
if (typeof value !== 'string') {
|
57
|
+
value = String(value)
|
58
|
+
}
|
59
|
+
return value
|
60
|
+
}
|
61
|
+
|
62
|
+
// Build a destructive iterator for the value list
|
63
|
+
function iteratorFor(items) {
|
64
|
+
var iterator = {
|
65
|
+
next: function() {
|
66
|
+
var value = items.shift()
|
67
|
+
return {done: value === undefined, value: value}
|
68
|
+
}
|
69
|
+
}
|
70
|
+
|
71
|
+
if (support.iterable) {
|
72
|
+
iterator[Symbol.iterator] = function() {
|
73
|
+
return iterator
|
74
|
+
}
|
75
|
+
}
|
76
|
+
|
77
|
+
return iterator
|
78
|
+
}
|
79
|
+
|
80
|
+
function Headers(headers) {
|
81
|
+
this.map = {}
|
82
|
+
|
83
|
+
if (headers instanceof Headers) {
|
84
|
+
headers.forEach(function(value, name) {
|
85
|
+
this.append(name, value)
|
86
|
+
}, this)
|
87
|
+
|
88
|
+
} else if (headers) {
|
89
|
+
Object.getOwnPropertyNames(headers).forEach(function(name) {
|
90
|
+
this.append(name, headers[name])
|
91
|
+
}, this)
|
92
|
+
}
|
93
|
+
}
|
94
|
+
|
95
|
+
Headers.prototype.append = function(name, value) {
|
96
|
+
name = normalizeName(name)
|
97
|
+
value = normalizeValue(value)
|
98
|
+
var oldValue = this.map[name]
|
99
|
+
this.map[name] = oldValue ? oldValue+','+value : value
|
100
|
+
}
|
101
|
+
|
102
|
+
Headers.prototype['delete'] = function(name) {
|
103
|
+
delete this.map[normalizeName(name)]
|
104
|
+
}
|
105
|
+
|
106
|
+
Headers.prototype.get = function(name) {
|
107
|
+
name = normalizeName(name)
|
108
|
+
return this.has(name) ? this.map[name] : null
|
109
|
+
}
|
110
|
+
|
111
|
+
Headers.prototype.has = function(name) {
|
112
|
+
return this.map.hasOwnProperty(normalizeName(name))
|
113
|
+
}
|
114
|
+
|
115
|
+
Headers.prototype.set = function(name, value) {
|
116
|
+
this.map[normalizeName(name)] = normalizeValue(value)
|
117
|
+
}
|
118
|
+
|
119
|
+
Headers.prototype.forEach = function(callback, thisArg) {
|
120
|
+
for (var name in this.map) {
|
121
|
+
if (this.map.hasOwnProperty(name)) {
|
122
|
+
callback.call(thisArg, this.map[name], name, this)
|
123
|
+
}
|
124
|
+
}
|
125
|
+
}
|
126
|
+
|
127
|
+
Headers.prototype.keys = function() {
|
128
|
+
var items = []
|
129
|
+
this.forEach(function(value, name) { items.push(name) })
|
130
|
+
return iteratorFor(items)
|
131
|
+
}
|
132
|
+
|
133
|
+
Headers.prototype.values = function() {
|
134
|
+
var items = []
|
135
|
+
this.forEach(function(value) { items.push(value) })
|
136
|
+
return iteratorFor(items)
|
137
|
+
}
|
138
|
+
|
139
|
+
Headers.prototype.entries = function() {
|
140
|
+
var items = []
|
141
|
+
this.forEach(function(value, name) { items.push([name, value]) })
|
142
|
+
return iteratorFor(items)
|
143
|
+
}
|
144
|
+
|
145
|
+
if (support.iterable) {
|
146
|
+
Headers.prototype[Symbol.iterator] = Headers.prototype.entries
|
147
|
+
}
|
148
|
+
|
149
|
+
function consumed(body) {
|
150
|
+
if (body.bodyUsed) {
|
151
|
+
return Promise.reject(new TypeError('Already read'))
|
152
|
+
}
|
153
|
+
body.bodyUsed = true
|
154
|
+
}
|
155
|
+
|
156
|
+
function fileReaderReady(reader) {
|
157
|
+
return new Promise(function(resolve, reject) {
|
158
|
+
reader.onload = function() {
|
159
|
+
resolve(reader.result)
|
160
|
+
}
|
161
|
+
reader.onerror = function() {
|
162
|
+
reject(reader.error)
|
163
|
+
}
|
164
|
+
})
|
165
|
+
}
|
166
|
+
|
167
|
+
function readBlobAsArrayBuffer(blob) {
|
168
|
+
var reader = new FileReader()
|
169
|
+
var promise = fileReaderReady(reader)
|
170
|
+
reader.readAsArrayBuffer(blob)
|
171
|
+
return promise
|
172
|
+
}
|
173
|
+
|
174
|
+
function readBlobAsText(blob) {
|
175
|
+
var reader = new FileReader()
|
176
|
+
var promise = fileReaderReady(reader)
|
177
|
+
reader.readAsText(blob)
|
178
|
+
return promise
|
179
|
+
}
|
180
|
+
|
181
|
+
function readArrayBufferAsText(buf) {
|
182
|
+
var view = new Uint8Array(buf)
|
183
|
+
var chars = new Array(view.length)
|
184
|
+
|
185
|
+
for (var i = 0; i < view.length; i++) {
|
186
|
+
chars[i] = String.fromCharCode(view[i])
|
187
|
+
}
|
188
|
+
return chars.join('')
|
189
|
+
}
|
190
|
+
|
191
|
+
function bufferClone(buf) {
|
192
|
+
if (buf.slice) {
|
193
|
+
return buf.slice(0)
|
194
|
+
} else {
|
195
|
+
var view = new Uint8Array(buf.byteLength)
|
196
|
+
view.set(new Uint8Array(buf))
|
197
|
+
return view.buffer
|
198
|
+
}
|
199
|
+
}
|
200
|
+
|
201
|
+
function Body() {
|
202
|
+
this.bodyUsed = false
|
203
|
+
|
204
|
+
this._initBody = function(body) {
|
205
|
+
this._bodyInit = body
|
206
|
+
if (!body) {
|
207
|
+
this._bodyText = ''
|
208
|
+
} else if (typeof body === 'string') {
|
209
|
+
this._bodyText = body
|
210
|
+
} else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
|
211
|
+
this._bodyBlob = body
|
212
|
+
} else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
|
213
|
+
this._bodyFormData = body
|
214
|
+
} else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
|
215
|
+
this._bodyText = body.toString()
|
216
|
+
} else if (support.arrayBuffer && support.blob && isDataView(body)) {
|
217
|
+
this._bodyArrayBuffer = bufferClone(body.buffer)
|
218
|
+
// IE 10-11 can't handle a DataView body.
|
219
|
+
this._bodyInit = new Blob([this._bodyArrayBuffer])
|
220
|
+
} else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
|
221
|
+
this._bodyArrayBuffer = bufferClone(body)
|
222
|
+
} else {
|
223
|
+
throw new Error('unsupported BodyInit type')
|
224
|
+
}
|
225
|
+
|
226
|
+
if (!this.headers.get('content-type')) {
|
227
|
+
if (typeof body === 'string') {
|
228
|
+
this.headers.set('content-type', 'text/plain;charset=UTF-8')
|
229
|
+
} else if (this._bodyBlob && this._bodyBlob.type) {
|
230
|
+
this.headers.set('content-type', this._bodyBlob.type)
|
231
|
+
} else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
|
232
|
+
this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')
|
233
|
+
}
|
234
|
+
}
|
235
|
+
}
|
236
|
+
|
237
|
+
if (support.blob) {
|
238
|
+
this.blob = function() {
|
239
|
+
var rejected = consumed(this)
|
240
|
+
if (rejected) {
|
241
|
+
return rejected
|
242
|
+
}
|
243
|
+
|
244
|
+
if (this._bodyBlob) {
|
245
|
+
return Promise.resolve(this._bodyBlob)
|
246
|
+
} else if (this._bodyArrayBuffer) {
|
247
|
+
return Promise.resolve(new Blob([this._bodyArrayBuffer]))
|
248
|
+
} else if (this._bodyFormData) {
|
249
|
+
throw new Error('could not read FormData body as blob')
|
250
|
+
} else {
|
251
|
+
return Promise.resolve(new Blob([this._bodyText]))
|
252
|
+
}
|
253
|
+
}
|
254
|
+
|
255
|
+
this.arrayBuffer = function() {
|
256
|
+
if (this._bodyArrayBuffer) {
|
257
|
+
return consumed(this) || Promise.resolve(this._bodyArrayBuffer)
|
258
|
+
} else {
|
259
|
+
return this.blob().then(readBlobAsArrayBuffer)
|
260
|
+
}
|
261
|
+
}
|
262
|
+
}
|
263
|
+
|
264
|
+
this.text = function() {
|
265
|
+
var rejected = consumed(this)
|
266
|
+
if (rejected) {
|
267
|
+
return rejected
|
268
|
+
}
|
269
|
+
|
270
|
+
if (this._bodyBlob) {
|
271
|
+
return readBlobAsText(this._bodyBlob)
|
272
|
+
} else if (this._bodyArrayBuffer) {
|
273
|
+
return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))
|
274
|
+
} else if (this._bodyFormData) {
|
275
|
+
throw new Error('could not read FormData body as text')
|
276
|
+
} else {
|
277
|
+
return Promise.resolve(this._bodyText)
|
278
|
+
}
|
279
|
+
}
|
280
|
+
|
281
|
+
if (support.formData) {
|
282
|
+
this.formData = function() {
|
283
|
+
return this.text().then(decode)
|
284
|
+
}
|
285
|
+
}
|
286
|
+
|
287
|
+
this.json = function() {
|
288
|
+
return this.text().then(JSON.parse)
|
289
|
+
}
|
290
|
+
|
291
|
+
return this
|
292
|
+
}
|
293
|
+
|
294
|
+
// HTTP methods whose capitalization should be normalized
|
295
|
+
var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']
|
296
|
+
|
297
|
+
function normalizeMethod(method) {
|
298
|
+
var upcased = method.toUpperCase()
|
299
|
+
return (methods.indexOf(upcased) > -1) ? upcased : method
|
300
|
+
}
|
301
|
+
|
302
|
+
function Request(input, options) {
|
303
|
+
options = options || {}
|
304
|
+
var body = options.body
|
305
|
+
|
306
|
+
if (input instanceof Request) {
|
307
|
+
if (input.bodyUsed) {
|
308
|
+
throw new TypeError('Already read')
|
309
|
+
}
|
310
|
+
this.url = input.url
|
311
|
+
this.credentials = input.credentials
|
312
|
+
if (!options.headers) {
|
313
|
+
this.headers = new Headers(input.headers)
|
314
|
+
}
|
315
|
+
this.method = input.method
|
316
|
+
this.mode = input.mode
|
317
|
+
if (!body && input._bodyInit != null) {
|
318
|
+
body = input._bodyInit
|
319
|
+
input.bodyUsed = true
|
320
|
+
}
|
321
|
+
} else {
|
322
|
+
this.url = String(input)
|
323
|
+
}
|
324
|
+
|
325
|
+
this.credentials = options.credentials || this.credentials || 'omit'
|
326
|
+
if (options.headers || !this.headers) {
|
327
|
+
this.headers = new Headers(options.headers)
|
328
|
+
}
|
329
|
+
this.method = normalizeMethod(options.method || this.method || 'GET')
|
330
|
+
this.mode = options.mode || this.mode || null
|
331
|
+
this.referrer = null
|
332
|
+
|
333
|
+
if ((this.method === 'GET' || this.method === 'HEAD') && body) {
|
334
|
+
throw new TypeError('Body not allowed for GET or HEAD requests')
|
335
|
+
}
|
336
|
+
this._initBody(body)
|
337
|
+
}
|
338
|
+
|
339
|
+
Request.prototype.clone = function() {
|
340
|
+
return new Request(this, { body: this._bodyInit })
|
341
|
+
}
|
342
|
+
|
343
|
+
function decode(body) {
|
344
|
+
var form = new FormData()
|
345
|
+
body.trim().split('&').forEach(function(bytes) {
|
346
|
+
if (bytes) {
|
347
|
+
var split = bytes.split('=')
|
348
|
+
var name = split.shift().replace(/\+/g, ' ')
|
349
|
+
var value = split.join('=').replace(/\+/g, ' ')
|
350
|
+
form.append(decodeURIComponent(name), decodeURIComponent(value))
|
351
|
+
}
|
352
|
+
})
|
353
|
+
return form
|
354
|
+
}
|
355
|
+
|
356
|
+
function parseHeaders(rawHeaders) {
|
357
|
+
var headers = new Headers()
|
358
|
+
rawHeaders.split(/\r?\n/).forEach(function(line) {
|
359
|
+
var parts = line.split(':')
|
360
|
+
var key = parts.shift().trim()
|
361
|
+
if (key) {
|
362
|
+
var value = parts.join(':').trim()
|
363
|
+
headers.append(key, value)
|
364
|
+
}
|
365
|
+
})
|
366
|
+
return headers
|
367
|
+
}
|
368
|
+
|
369
|
+
Body.call(Request.prototype)
|
370
|
+
|
371
|
+
function Response(bodyInit, options) {
|
372
|
+
if (!options) {
|
373
|
+
options = {}
|
374
|
+
}
|
375
|
+
|
376
|
+
this.type = 'default'
|
377
|
+
this.status = 'status' in options ? options.status : 200
|
378
|
+
this.ok = this.status >= 200 && this.status < 300
|
379
|
+
this.statusText = 'statusText' in options ? options.statusText : 'OK'
|
380
|
+
this.headers = new Headers(options.headers)
|
381
|
+
this.url = options.url || ''
|
382
|
+
this._initBody(bodyInit)
|
383
|
+
}
|
384
|
+
|
385
|
+
Body.call(Response.prototype)
|
386
|
+
|
387
|
+
Response.prototype.clone = function() {
|
388
|
+
return new Response(this._bodyInit, {
|
389
|
+
status: this.status,
|
390
|
+
statusText: this.statusText,
|
391
|
+
headers: new Headers(this.headers),
|
392
|
+
url: this.url
|
393
|
+
})
|
394
|
+
}
|
395
|
+
|
396
|
+
Response.error = function() {
|
397
|
+
var response = new Response(null, {status: 0, statusText: ''})
|
398
|
+
response.type = 'error'
|
399
|
+
return response
|
400
|
+
}
|
401
|
+
|
402
|
+
var redirectStatuses = [301, 302, 303, 307, 308]
|
403
|
+
|
404
|
+
Response.redirect = function(url, status) {
|
405
|
+
if (redirectStatuses.indexOf(status) === -1) {
|
406
|
+
throw new RangeError('Invalid status code')
|
407
|
+
}
|
408
|
+
|
409
|
+
return new Response(null, {status: status, headers: {location: url}})
|
410
|
+
}
|
411
|
+
|
412
|
+
self.Headers = Headers
|
413
|
+
self.Request = Request
|
414
|
+
self.Response = Response
|
415
|
+
|
416
|
+
self.fetch = function(input, init) {
|
417
|
+
return new Promise(function(resolve, reject) {
|
418
|
+
var request = new Request(input, init)
|
419
|
+
var xhr = new XMLHttpRequest()
|
420
|
+
|
421
|
+
xhr.onload = function() {
|
422
|
+
var options = {
|
423
|
+
status: xhr.status,
|
424
|
+
statusText: xhr.statusText,
|
425
|
+
headers: parseHeaders(xhr.getAllResponseHeaders() || '')
|
426
|
+
}
|
427
|
+
options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')
|
428
|
+
var body = 'response' in xhr ? xhr.response : xhr.responseText
|
429
|
+
resolve(new Response(body, options))
|
430
|
+
}
|
431
|
+
|
432
|
+
xhr.onerror = function() {
|
433
|
+
reject(new TypeError('Network request failed'))
|
434
|
+
}
|
435
|
+
|
436
|
+
xhr.ontimeout = function() {
|
437
|
+
reject(new TypeError('Network request failed'))
|
438
|
+
}
|
439
|
+
|
440
|
+
xhr.open(request.method, request.url, true)
|
441
|
+
|
442
|
+
if (request.credentials === 'include') {
|
443
|
+
xhr.withCredentials = true
|
444
|
+
}
|
445
|
+
|
446
|
+
if ('responseType' in xhr && support.blob) {
|
447
|
+
xhr.responseType = 'blob'
|
448
|
+
}
|
449
|
+
|
450
|
+
request.headers.forEach(function(value, name) {
|
451
|
+
xhr.setRequestHeader(name, value)
|
452
|
+
})
|
453
|
+
|
454
|
+
xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)
|
455
|
+
})
|
456
|
+
}
|
457
|
+
self.fetch.polyfill = true
|
458
|
+
})(typeof self !== 'undefined' ? self : this);
|
data/assets/search.json
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
---
|
2
|
+
layout: ''
|
3
|
+
sitemap: false
|
4
|
+
---
|
5
|
+
|
6
|
+
{% capture json %}
|
7
|
+
[
|
8
|
+
{% assign collections = site.collections | where_exp:'collection','collection.output != false' %}
|
9
|
+
{% for collection in collections %}
|
10
|
+
{% assign docs = collection.docs | where_exp:'doc','doc.sitemap != false' %}
|
11
|
+
{% for doc in docs %}
|
12
|
+
{
|
13
|
+
"title": {{ doc.title | jsonify }},
|
14
|
+
"excerpt": {{ doc.excerpt | markdownify | strip_html | jsonify }},
|
15
|
+
"content": {{ doc.content | markdownify | strip_html | jsonify | replace:'\n',' ' | replace:' ',' ' | replace:' ',' ' }},
|
16
|
+
"url": {{ doc.url | jsonify }}
|
17
|
+
},
|
18
|
+
{% endfor %}
|
19
|
+
{% endfor %}
|
20
|
+
{% assign pages = site.html_pages | where_exp:'doc','doc.sitemap != false' | where_exp:'doc','doc.title != null' %}
|
21
|
+
{% for page in pages %}
|
22
|
+
{
|
23
|
+
"title": {{ page.title | jsonify }},
|
24
|
+
"excerpt": {{ doc.excerpt | markdownify | strip_html | jsonify }},
|
25
|
+
"content": {{ page.content | markdownify | strip_html | jsonify | replace:'\n',' ' | replace:' ',' ' | replace:' ',' ' }},
|
26
|
+
"url": {{ page.url | jsonify }}
|
27
|
+
}{% unless forloop.last %},{% endunless %}
|
28
|
+
{% endfor %}
|
29
|
+
]
|
30
|
+
{% endcapture %}
|
31
|
+
|
32
|
+
{{ json | lstrip }}
|
data/assets/styles.scss
CHANGED
@@ -74,7 +74,7 @@ body {
|
|
74
74
|
}
|
75
75
|
|
76
76
|
.small {
|
77
|
-
padding-top: .
|
77
|
+
padding-top: .8rem;
|
78
78
|
color: $color__site--captions;
|
79
79
|
display: inline-block;
|
80
80
|
}
|
@@ -157,10 +157,17 @@ body {
|
|
157
157
|
}
|
158
158
|
}
|
159
159
|
|
160
|
+
.share {
|
161
|
+
.button {
|
162
|
+
margin-right: .3rem;
|
163
|
+
}
|
164
|
+
}
|
165
|
+
|
160
166
|
.aside {
|
161
167
|
max-width: 100%;
|
162
168
|
@include breakpoint(break-1) {
|
163
169
|
max-width: 34%;
|
170
|
+
@include flex(1, 0, auto);
|
164
171
|
opacity: 0.5;
|
165
172
|
transition: opacity .1s;
|
166
173
|
&:hover {
|
@@ -169,18 +176,33 @@ body {
|
|
169
176
|
}
|
170
177
|
}
|
171
178
|
|
179
|
+
.section {
|
180
|
+
margin: 0;
|
181
|
+
&--category-index {
|
182
|
+
position: sticky;
|
183
|
+
top: 0;
|
184
|
+
}
|
185
|
+
}
|
186
|
+
|
172
187
|
|
173
188
|
// Lists
|
174
189
|
.list {
|
175
|
-
&--posts
|
190
|
+
&--posts,
|
191
|
+
&--results {
|
176
192
|
list-style: none;
|
177
193
|
}
|
178
|
-
&--nav
|
194
|
+
&--nav,
|
195
|
+
&--categories {
|
179
196
|
list-style: none;
|
180
197
|
}
|
181
198
|
.item--post {
|
182
199
|
margin-left: 0;
|
183
200
|
}
|
201
|
+
&--categories {
|
202
|
+
.item {
|
203
|
+
margin-left: 0;
|
204
|
+
}
|
205
|
+
}
|
184
206
|
}
|
185
207
|
|
186
208
|
.item {
|
@@ -296,6 +318,7 @@ button,
|
|
296
318
|
.button,
|
297
319
|
input[type="text"],
|
298
320
|
input[type="email"],
|
321
|
+
input[type="search"],
|
299
322
|
input[type="submit"],
|
300
323
|
textarea {
|
301
324
|
padding: .6rem 1.2rem;
|
@@ -347,6 +370,7 @@ a:hover:focus {
|
|
347
370
|
|
348
371
|
input[type="text"],
|
349
372
|
input[type="email"],
|
373
|
+
input[type="search"],
|
350
374
|
textarea {
|
351
375
|
width: 100%;
|
352
376
|
border: 1px solid $color__site--captions;
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alembic-jekyll-theme
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Darnes
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -136,8 +136,9 @@ dependencies:
|
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '1.12'
|
139
|
-
description:
|
140
|
-
from scratch, this boilerplate is designed to get
|
139
|
+
description: A Jekyll boilerplate theme designed to be a starting point for any Jekyll
|
140
|
+
website. Rather than starting from scratch, this boilerplate is designed to get
|
141
|
+
the ball rolling immediately.
|
141
142
|
email:
|
142
143
|
- me@daviddarnes.com
|
143
144
|
executables: []
|
@@ -150,16 +151,18 @@ files:
|
|
150
151
|
- _includes/figure.html
|
151
152
|
- _includes/icon.html
|
152
153
|
- _includes/map.html
|
154
|
+
- _includes/nav-categories.html
|
153
155
|
- _includes/nav-default.html
|
154
156
|
- _includes/nav-footer.html
|
155
157
|
- _includes/nav-header.html
|
158
|
+
- _includes/nav-share.html
|
156
159
|
- _includes/nav-social.html
|
160
|
+
- _includes/post-categories.html
|
157
161
|
- _includes/post-comments.html
|
158
162
|
- _includes/post-list.html
|
159
163
|
- _includes/post-meta.html
|
160
164
|
- _includes/post-pagination.html
|
161
165
|
- _includes/post-related.html
|
162
|
-
- _includes/post-share-buttons.html
|
163
166
|
- _includes/site-aside.html
|
164
167
|
- _includes/site-favicons.html
|
165
168
|
- _includes/site-feature.html
|
@@ -168,13 +171,16 @@ files:
|
|
168
171
|
- _includes/site-header.html
|
169
172
|
- _includes/site-icons.svg
|
170
173
|
- _includes/site-logo.html
|
174
|
+
- _includes/site-search.html
|
171
175
|
- _includes/video.html
|
172
176
|
- _layouts/blog.html
|
177
|
+
- _layouts/categories.html
|
173
178
|
- _layouts/default.html
|
174
179
|
- _layouts/home.html
|
175
180
|
- _layouts/page-aside-left.html
|
176
181
|
- _layouts/page.html
|
177
182
|
- _layouts/post.html
|
183
|
+
- _layouts/search.html
|
178
184
|
- _sass/_colors.scss
|
179
185
|
- _sass/_flex.scss
|
180
186
|
- _sass/_normalize.scss
|
@@ -188,6 +194,8 @@ files:
|
|
188
194
|
- _sass/sassline-base/_variables.scss
|
189
195
|
- assets/placeholder-logo.svg
|
190
196
|
- assets/placeholder-social.png
|
197
|
+
- assets/scripts/fetch.js
|
198
|
+
- assets/search.json
|
191
199
|
- assets/styles.scss
|
192
200
|
homepage: https://alembic.darn.es
|
193
201
|
licenses:
|
@@ -1,12 +0,0 @@
|
|
1
|
-
{% capture share_twitter %}
|
2
|
-
https://twitter.com/intent/tweet/?text={{ page.title | uri_escape }}&url={{ site.url }}{{ page.url }}{% endcapture %}
|
3
|
-
{% capture share_facebook %}
|
4
|
-
https://facebook.com/sharer/sharer.php?u={{ site.url }}{{ page.url }}{% endcapture %}
|
5
|
-
{% capture share_google %}
|
6
|
-
https://plus.google.com/share?url={{ site.url }}{{ page.url }}{% endcapture %}
|
7
|
-
|
8
|
-
<div class="share">
|
9
|
-
{% include button.html text="Tweet" icon="twitter" link=share_twitter color="#1DA1F2" %}
|
10
|
-
{% include button.html text="Share on Facebook" icon="facebook" link=share_facebook color="#3B5998" %}
|
11
|
-
{% include button.html text="Share on Google+" icon="googleplus" link=share_google color="#DC4E41" %}
|
12
|
-
</div>
|