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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aab3d3a5d062e4da1bf7c7d41d4ab39c277e0bf4
4
- data.tar.gz: 82902d8ea5f5e232f354c719985624c7c2170d4d
3
+ metadata.gz: 09c89e1db18aea3d4363f4bce101a4a2d5b3c0bc
4
+ data.tar.gz: b12c2b8cd6ed19b483a79923e394c2eaea95f6ed
5
5
  SHA512:
6
- metadata.gz: 1293b208abe2fda423251085c904220e415c028f1c1592fb3cb4527f388c495c9750eea593ffeae4b3508fce1fb501ce78ba0978b4cdd9e0d7f6eec783485e50
7
- data.tar.gz: 95dfdf361d402b528eaad74eb95b2b86d6bf099e2a0e6196f4d65bad2bf01919c5c23a9a0750ae12070664d9abfb40c21ecabae6baf09af19af5d4d40ca4f73b
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 %}
@@ -1,26 +1,28 @@
1
1
  {% if paginator.posts %}
2
2
 
3
- <ul class="list list--posts">
4
- {% for page in paginator.posts %}
5
- <li class="item item--post">
6
- <article class="article article--post typeset">
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
- <h2><a href="{{ page.url }}" title="Post - {{ page.title }}">{{ page.title }}</a></h2>
9
- {% include post-meta.html %}
10
- {{ page.excerpt | markdownify | truncatewords: 60 }}
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
- </article>
13
- </li>
14
- {% endfor %}
15
- </ul>
16
- {% include post-pagination.html %}
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 typeset">
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 %}
@@ -1,3 +1,3 @@
1
1
  <small class="small post-meta">
2
- {% if page.category %}<span class="label label--category">{{ page.category }}</span>&nbsp;&nbsp;&middot;&nbsp;&nbsp;{% 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>&nbsp;&nbsp;&middot;&nbsp;&nbsp;{% endif %}<time datetime="{{ page.date | date_to_xmlschema }}" class="time">{{ page.date | date_to_string }}</time>
3
3
  </small>
@@ -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 paginator.posts %}
6
- {% if page.collection == "posts" %}
7
- {% include post-related.html %}
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 &nbsp;" icon="rss" link="/feed.xml" %}
15
25
  {% endif %}
16
26
 
17
- {% include nav-social.html %}
27
+ {% unless page.layout == "categories" %}
28
+ {% include nav-social.html %}
29
+ {% endunless %}
18
30
 
19
31
  </aside>
@@ -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="googleplus" 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>
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
@@ -12,8 +12,8 @@ layout: default
12
12
  {% include post-meta.html %}
13
13
  {{ content }}
14
14
 
15
- {% include post-share-buttons.html %}
16
-
15
+ {% include nav-share.html %}
16
+
17
17
  {% include post-comments.html %}
18
18
 
19
19
  </article>
@@ -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);
@@ -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: .6rem;
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.2.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-01-15 00:00:00.000000000 Z
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: Alembic is a starting point for Jekyll projects. Rather than starting
140
- from scratch, this boilerplate is designed to get the ball rolling immediately.
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 }}&amp;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>