quattle 1.5.4 → 1.6.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/LICENSE +21 -21
- data/README.md +44 -44
- data/_includes/author.html +10 -10
- data/_includes/cookie-consent.html +45 -45
- data/_layouts/compress.html +10 -10
- data/_layouts/default.html +82 -82
- data/_layouts/page.html +7 -7
- data/_layouts/post.html +62 -62
- data/_sass/_base.scss +93 -93
- data/_sass/_buttons.scss +59 -59
- data/_sass/_code.scss +250 -250
- data/_sass/_layout.scss +46 -46
- data/_sass/_masthead.scss +52 -52
- data/_sass/_message.scss +121 -121
- data/_sass/_pagination.scss +48 -48
- data/_sass/_posts.scss +189 -189
- data/_sass/_syntax.scss +96 -96
- data/_sass/_type.scss +211 -211
- data/_sass/_variables.scss +52 -52
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1e52c3a31b95d65e137d42f28338c925b0e170792572ac3430ded8ef38c70a0
|
4
|
+
data.tar.gz: c289e55ba88dbf8b98a6bb6a8dbc71aab4801a9e296ebf7373ee24ddcff8f2c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2fe1d6c1cf4b7d8f0fe23238c4b092d9aaf262a2ca4f6cd560a8b4a7a7560d8273ec7889561b95502485fe6195774e4e672977f543812c3c56063d1808b08db4
|
7
|
+
data.tar.gz: 67e1b3d45cf99d4403402d7e864ccab0596f9904ca668c643fbe5ae6f6a9d0806ea177ecc5a4295da57bc3bdb6ece306a9aac26f2099eb9facb144180adb0f0b
|
data/LICENSE
CHANGED
@@ -1,21 +1,21 @@
|
|
1
|
-
MIT License
|
2
|
-
|
3
|
-
Copyright (c) 2019-2022 Victor Wynne
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
7
|
-
in the Software without restriction, including without limitation the rights
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
10
|
-
furnished to do so, subject to the following conditions:
|
11
|
-
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
13
|
-
copies or substantial portions of the Software.
|
14
|
-
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
-
SOFTWARE.
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2019-2022 Victor Wynne
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
CHANGED
@@ -1,44 +1,44 @@
|
|
1
|
-
Quattle is a modern and customizable theme for the static site generator Jekyll.
|
2
|
-
|
3
|
-
## <small>Demo</small>
|
4
|
-
[quattle.victorwynne.com](https://quattle.victorwynne.com)
|
5
|
-
|
6
|
-
## <small>Download</small>
|
7
|
-
[GitHub](https://github.com/victorwynne/quattle/releases) or [RubyGems](https://rubygems.org/gems/quattle)
|
8
|
-
|
9
|
-
## <small>Features</small>
|
10
|
-
Fully responsive with an emphasis on mobile friendly design, typography and interaction
|
11
|
-
|
12
|
-
HTML, SASS, XML, supporting assets and config files are included for the theme's design and functionality
|
13
|
-
|
14
|
-
CSS media feature `prefers-color-scheme` to detect if the visitor has requested a light or dark color mode
|
15
|
-
|
16
|
-
`$variables` based color schemes for light and dark mode, syntax highlighting for code blocks and styling of elements
|
17
|
-
|
18
|
-
HTML/CSS compression (minification)
|
19
|
-
|
20
|
-
Valid RSS 2.0 syndicated feed
|
21
|
-
|
22
|
-
GDPR valid and compliant cookie consent banner
|
23
|
-
|
24
|
-
404, site map, navigation, archive, category, tag, about, style and privacy pages
|
25
|
-
|
26
|
-
Archive displays a tag cloud and number of posts per month, year, category, tag
|
27
|
-
|
28
|
-
Excerpt, pagination and per-post navigation to older/newer entries
|
29
|
-
|
30
|
-
Smart quotes across all content with the `{ | smartify }` liquid filter
|
31
|
-
|
32
|
-
Rich preview links when shared via iMessage and social media services
|
33
|
-
|
34
|
-
A wide variety of HTML elements commonly used in Markdown writing are styled (mark, source references, blockquotes, headers, tables, boxes/buttons, figure captions, code blocks, footnotes)
|
35
|
-
|
36
|
-
Additional supported and styled front matter:
|
37
|
-
* Author attribution
|
38
|
-
* Last modified date
|
39
|
-
* Permalinks for linked list style posts that have an external source reference
|
40
|
-
|
41
|
-
|
42
|
-
## <small>License</small>
|
43
|
-
|
44
|
-
Quattle is free software distributed under a [MIT license](https://github.com/victorwynne/quattle/blob/main/LICENSE).
|
1
|
+
Quattle is a modern and customizable theme for the static site generator Jekyll.
|
2
|
+
|
3
|
+
## <small>Demo</small>
|
4
|
+
[quattle.victorwynne.com](https://quattle.victorwynne.com)
|
5
|
+
|
6
|
+
## <small>Download</small>
|
7
|
+
[GitHub](https://github.com/victorwynne/quattle/releases) or [RubyGems](https://rubygems.org/gems/quattle)
|
8
|
+
|
9
|
+
## <small>Features</small>
|
10
|
+
Fully responsive with an emphasis on mobile friendly design, typography and interaction
|
11
|
+
|
12
|
+
HTML, SASS, XML, supporting assets and config files are included for the theme's design and functionality
|
13
|
+
|
14
|
+
CSS media feature `prefers-color-scheme` to detect if the visitor has requested a light or dark color mode
|
15
|
+
|
16
|
+
`$variables` based color schemes for light and dark mode, syntax highlighting for code blocks and styling of elements
|
17
|
+
|
18
|
+
HTML/CSS compression (minification)
|
19
|
+
|
20
|
+
Valid RSS 2.0 syndicated feed
|
21
|
+
|
22
|
+
GDPR valid and compliant cookie consent banner
|
23
|
+
|
24
|
+
404, site map, navigation, archive, category, tag, about, style and privacy pages
|
25
|
+
|
26
|
+
Archive displays a tag cloud and number of posts per month, year, category, tag
|
27
|
+
|
28
|
+
Excerpt, pagination and per-post navigation to older/newer entries
|
29
|
+
|
30
|
+
Smart quotes across all content with the `{ | smartify }` liquid filter
|
31
|
+
|
32
|
+
Rich preview links when shared via iMessage and social media services
|
33
|
+
|
34
|
+
A wide variety of HTML elements commonly used in Markdown writing are styled (mark, source references, blockquotes, headers, tables, boxes/buttons, figure captions, code blocks, footnotes)
|
35
|
+
|
36
|
+
Additional supported and styled front matter:
|
37
|
+
* Author attribution
|
38
|
+
* Last modified date
|
39
|
+
* Permalinks for linked list style posts that have an external source reference
|
40
|
+
|
41
|
+
|
42
|
+
## <small>License</small>
|
43
|
+
|
44
|
+
Quattle is free software distributed under a [MIT license](https://github.com/victorwynne/quattle/blob/main/LICENSE).
|
data/_includes/author.html
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
{% assign author = site[page.author] %}
|
2
|
-
{% if author %}
|
3
|
-
<span>
|
4
|
-
By {{ author.name }}
|
5
|
-
</span>
|
6
|
-
{% else %}
|
7
|
-
<span>
|
8
|
-
By
|
9
|
-
</span>
|
10
|
-
{% endif %}
|
1
|
+
{% assign author = site[page.author] %}
|
2
|
+
{% if author %}
|
3
|
+
<span>
|
4
|
+
By {{ author.name }}
|
5
|
+
</span>
|
6
|
+
{% else %}
|
7
|
+
<span>
|
8
|
+
By Post Author
|
9
|
+
</span>
|
10
|
+
{% endif %}
|
@@ -1,45 +1,45 @@
|
|
1
|
-
<style>
|
2
|
-
#cookie-notice {padding: 0.5rem 1rem; display: none; text-align: center; position: fixed; bottom: 0; width: calc(100%); background: color(srgb 0.165 0.165 0.165); color: rgba(255,255,255,0.8);}
|
3
|
-
#cookie-notice a {display: inline-block; cursor: pointer; margin-left: 0.5rem;}
|
4
|
-
@media (max-width: 767px) {
|
5
|
-
#cookie-notice span {display: block; padding-top: 3px; margin-bottom: 1rem;}
|
6
|
-
#cookie-notice a {position: relative; bottom: 4px;}
|
7
|
-
}
|
8
|
-
</style>
|
9
|
-
<div id="cookie-notice"><span>We would like to use third party cookies and scripts to improve the functionality of this website.</span><a id="cookie-notice-accept" class="btn btn-primary btn-sm">Approve</a><a href="/privacy" class="btn btn-primary btn-sm">More info</a></div>
|
10
|
-
<script>
|
11
|
-
function createCookie(name,value,days) {
|
12
|
-
var expires = "";
|
13
|
-
if (days) {
|
14
|
-
var date = new Date();
|
15
|
-
date.setTime(date.getTime() + (days*24*60*60*1000));
|
16
|
-
expires = "; expires=" + date.toUTCString();
|
17
|
-
}
|
18
|
-
document.cookie = name + "=" + value + expires + "; path=/";
|
19
|
-
}
|
20
|
-
function readCookie(name) {
|
21
|
-
var nameEQ = name + "=";
|
22
|
-
var ca = document.cookie.split(';');
|
23
|
-
for(var i=0;i < ca.length;i++) {
|
24
|
-
var c = ca[i];
|
25
|
-
while (c.charAt(0)==' ') c = c.substring(1,c.length);
|
26
|
-
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
|
27
|
-
}
|
28
|
-
return null;
|
29
|
-
}
|
30
|
-
function eraseCookie(name) {
|
31
|
-
createCookie(name,"",-1);
|
32
|
-
}
|
33
|
-
|
34
|
-
if(readCookie('cookie-notice-dismissed')=='true') {
|
35
|
-
|
36
|
-
} else {
|
37
|
-
document.getElementById('cookie-notice').style.display = 'block';
|
38
|
-
}
|
39
|
-
document.getElementById('cookie-notice-accept').addEventListener("click",function() {
|
40
|
-
createCookie('cookie-notice-dismissed','true',31);
|
41
|
-
document.getElementById('cookie-notice').style.display = 'none';
|
42
|
-
location.reload();
|
43
|
-
});
|
44
|
-
|
45
|
-
</script>
|
1
|
+
<style>
|
2
|
+
#cookie-notice {padding: 0.5rem 1rem; display: none; text-align: center; position: fixed; bottom: 0; width: calc(100%); background: color(srgb 0.165 0.165 0.165); color: rgba(255,255,255,0.8);}
|
3
|
+
#cookie-notice a {display: inline-block; cursor: pointer; margin-left: 0.5rem;}
|
4
|
+
@media (max-width: 767px) {
|
5
|
+
#cookie-notice span {display: block; padding-top: 3px; margin-bottom: 1rem;}
|
6
|
+
#cookie-notice a {position: relative; bottom: 4px;}
|
7
|
+
}
|
8
|
+
</style>
|
9
|
+
<div id="cookie-notice"><span>We would like to use third party cookies and scripts to improve the functionality of this website.</span><a id="cookie-notice-accept" class="btn btn-primary btn-sm">Approve</a><a href="/privacy" class="btn btn-primary btn-sm">More info</a></div>
|
10
|
+
<script>
|
11
|
+
function createCookie(name,value,days) {
|
12
|
+
var expires = "";
|
13
|
+
if (days) {
|
14
|
+
var date = new Date();
|
15
|
+
date.setTime(date.getTime() + (days*24*60*60*1000));
|
16
|
+
expires = "; expires=" + date.toUTCString();
|
17
|
+
}
|
18
|
+
document.cookie = name + "=" + value + expires + "; path=/";
|
19
|
+
}
|
20
|
+
function readCookie(name) {
|
21
|
+
var nameEQ = name + "=";
|
22
|
+
var ca = document.cookie.split(';');
|
23
|
+
for(var i=0;i < ca.length;i++) {
|
24
|
+
var c = ca[i];
|
25
|
+
while (c.charAt(0)==' ') c = c.substring(1,c.length);
|
26
|
+
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
|
27
|
+
}
|
28
|
+
return null;
|
29
|
+
}
|
30
|
+
function eraseCookie(name) {
|
31
|
+
createCookie(name,"",-1);
|
32
|
+
}
|
33
|
+
|
34
|
+
if(readCookie('cookie-notice-dismissed')=='true') {
|
35
|
+
|
36
|
+
} else {
|
37
|
+
document.getElementById('cookie-notice').style.display = 'block';
|
38
|
+
}
|
39
|
+
document.getElementById('cookie-notice-accept').addEventListener("click",function() {
|
40
|
+
createCookie('cookie-notice-dismissed','true',31);
|
41
|
+
document.getElementById('cookie-notice').style.display = 'none';
|
42
|
+
location.reload();
|
43
|
+
});
|
44
|
+
|
45
|
+
</script>
|
data/_layouts/compress.html
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
---
|
2
|
-
# Jekyll layout that compresses HTML
|
3
|
-
# v3.1.0
|
4
|
-
# http://jch.penibelst.de/
|
5
|
-
# © 2014–2015 Anatol Broder
|
6
|
-
# MIT License
|
7
|
-
---
|
8
|
-
|
9
|
-
{% capture _LINE_FEED %}
|
10
|
-
{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment or site.compress_html.ignore.envs == "all" %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}</{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "<!-- -->" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "<pre" %}{% assign _content = "" %}{% for _pre_before in _pre_befores %}{% assign _pres = _pre_before | split: "</pre>" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "</pre>" %}<pre{{ _pres.first }}</pre>{% endif %}{% unless _pre_before contains "</pre>" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " <e;<e; </e>;</e>;</e> ;</e>" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} <table id="compress_html_profile_{{ site.time | date: "%Y%m%d" }}" class="compress_html_profile"> <thead> <tr> <td>Step <td>Bytes <tbody> <tr> <td>raw <td>{{ content | size }}{% if _profile_endings %} <tr> <td>endings <td>{{ _profile_endings }}{% endif %}{% if _profile_startings %} <tr> <td>startings <td>{{ _profile_startings }}{% endif %}{% if _profile_comments %} <tr> <td>comments <td>{{ _profile_comments }}{% endif %}{% if _profile_collapse %} <tr> <td>collapse <td>{{ _profile_collapse }}{% endif %}{% if _profile_clippings %} <tr> <td>clippings <td>{{ _profile_clippings }}{% endif %} </table>{% endif %}{% endif %}
|
1
|
+
---
|
2
|
+
# Jekyll layout that compresses HTML
|
3
|
+
# v3.1.0
|
4
|
+
# http://jch.penibelst.de/
|
5
|
+
# © 2014–2015 Anatol Broder
|
6
|
+
# MIT License
|
7
|
+
---
|
8
|
+
|
9
|
+
{% capture _LINE_FEED %}
|
10
|
+
{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment or site.compress_html.ignore.envs == "all" %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}</{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "<!-- -->" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "<pre" %}{% assign _content = "" %}{% for _pre_before in _pre_befores %}{% assign _pres = _pre_before | split: "</pre>" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "</pre>" %}<pre{{ _pres.first }}</pre>{% endif %}{% unless _pre_before contains "</pre>" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " <e;<e; </e>;</e>;</e> ;</e>" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} <table id="compress_html_profile_{{ site.time | date: "%Y%m%d" }}" class="compress_html_profile"> <thead> <tr> <td>Step <td>Bytes <tbody> <tr> <td>raw <td>{{ content | size }}{% if _profile_endings %} <tr> <td>endings <td>{{ _profile_endings }}{% endif %}{% if _profile_startings %} <tr> <td>startings <td>{{ _profile_startings }}{% endif %}{% if _profile_comments %} <tr> <td>comments <td>{{ _profile_comments }}{% endif %}{% if _profile_collapse %} <tr> <td>collapse <td>{{ _profile_collapse }}{% endif %}{% if _profile_clippings %} <tr> <td>clippings <td>{{ _profile_clippings }}{% endif %} </table>{% endif %}{% endif %}
|
data/_layouts/default.html
CHANGED
@@ -1,82 +1,82 @@
|
|
1
|
-
---
|
2
|
-
layout: compress
|
3
|
-
---
|
4
|
-
|
5
|
-
<!doctype html>
|
6
|
-
<html lang="en">
|
7
|
-
|
8
|
-
<head>
|
9
|
-
<meta charset="UTF-8">
|
10
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
11
|
-
<meta property="og:image" content="https://quattle.victorwynne.com/assets/iMessage.png" />
|
12
|
-
|
13
|
-
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#f7f6f4">
|
14
|
-
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#1e1e1e">
|
15
|
-
|
16
|
-
<meta name="apple-mobile-web-app-title" content=“Quattle”>
|
17
|
-
<meta name="apple-mobile-web-app-capable" content="yes">
|
18
|
-
|
19
|
-
<link rel="manifest" href="manifest.json">
|
20
|
-
|
21
|
-
<title>
|
22
|
-
{% if page.title == "Home" %}
|
23
|
-
{{ site.title }}{% if site.tagline %} · {{ site.tagline }}{% endif %}
|
24
|
-
{% else %}
|
25
|
-
{{ page.title }} · {{ site.title }}
|
26
|
-
{% endif %}
|
27
|
-
</title>
|
28
|
-
|
29
|
-
<link rel="stylesheet" href="{{ site.baseurl }}/styles.css">
|
30
|
-
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="{{ site.baseurl }}/assets/apple-touch-icon-precomposed.png">
|
31
|
-
<link rel="shortcut icon" href="{{ site.baseurl }}/assets/fav.ico">
|
32
|
-
<link rel="alternate" type="application/atom+xml" title="{{ site.title }}" href="{{ site.baseurl }}/feed.xml">
|
33
|
-
|
34
|
-
{% seo title=false %}
|
35
|
-
|
36
|
-
</head>
|
37
|
-
|
38
|
-
<body>
|
39
|
-
|
40
|
-
<div class="container content">
|
41
|
-
<header class="masthead">
|
42
|
-
|
43
|
-
<h2 class="masthead-title">
|
44
|
-
<a href="{{ site.baseurl }}/" title="Home">{{ site.title }}</a><br>
|
45
|
-
<small>{{ site.tagline }}</small>
|
46
|
-
</h2>
|
47
|
-
|
48
|
-
<!-- Change navigation links here -->
|
49
|
-
<div class="navigation">
|
50
|
-
<ul id="navigation-list">
|
51
|
-
<li><a href="/archive/">archive</a></li>
|
52
|
-
<li><a href="/styles/">styles</a></li>
|
53
|
-
<li><a href="/about/">about</a></li>
|
54
|
-
</ul>
|
55
|
-
</div>
|
56
|
-
|
57
|
-
</header>
|
58
|
-
|
59
|
-
<main>
|
60
|
-
{{ content | smartify }}
|
61
|
-
</main>
|
62
|
-
|
63
|
-
<br><footer class="footer">
|
64
|
-
<p>Made with ❤️ on a Mac 💻</p>
|
65
|
-
</footer>
|
66
|
-
</div>
|
67
|
-
|
68
|
-
{% if site.ga_analytics %}
|
69
|
-
<script>
|
70
|
-
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
71
|
-
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
72
|
-
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
73
|
-
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
74
|
-
ga('create', '{{ site.ga_analytics }}', 'auto');
|
75
|
-
ga('send', 'pageview');
|
76
|
-
</script>
|
77
|
-
{% endif %}
|
78
|
-
|
79
|
-
{% include cookie-consent.html%}
|
80
|
-
|
81
|
-
</body>
|
82
|
-
</html>
|
1
|
+
---
|
2
|
+
layout: compress
|
3
|
+
---
|
4
|
+
|
5
|
+
<!doctype html>
|
6
|
+
<html lang="en">
|
7
|
+
|
8
|
+
<head>
|
9
|
+
<meta charset="UTF-8">
|
10
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
11
|
+
<meta property="og:image" content="https://quattle.victorwynne.com/assets/iMessage.png" />
|
12
|
+
|
13
|
+
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#f7f6f4">
|
14
|
+
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#1e1e1e">
|
15
|
+
|
16
|
+
<meta name="apple-mobile-web-app-title" content=“Quattle”>
|
17
|
+
<meta name="apple-mobile-web-app-capable" content="yes">
|
18
|
+
|
19
|
+
<link rel="manifest" href="/manifest.json">
|
20
|
+
|
21
|
+
<title>
|
22
|
+
{% if page.title == "Home" %}
|
23
|
+
{{ site.title }}{% if site.tagline %} · {{ site.tagline }}{% endif %}
|
24
|
+
{% else %}
|
25
|
+
{{ page.title }} · {{ site.title }}
|
26
|
+
{% endif %}
|
27
|
+
</title>
|
28
|
+
|
29
|
+
<link rel="stylesheet" href="{{ site.baseurl }}/styles.css">
|
30
|
+
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="{{ site.baseurl }}/assets/apple-touch-icon-precomposed.png">
|
31
|
+
<link rel="shortcut icon" href="{{ site.baseurl }}/assets/fav.ico">
|
32
|
+
<link rel="alternate" type="application/atom+xml" title="{{ site.title }}" href="{{ site.baseurl }}/feed.xml">
|
33
|
+
|
34
|
+
{% seo title=false %}
|
35
|
+
|
36
|
+
</head>
|
37
|
+
|
38
|
+
<body>
|
39
|
+
|
40
|
+
<div class="container content">
|
41
|
+
<header class="masthead">
|
42
|
+
|
43
|
+
<h2 class="masthead-title">
|
44
|
+
<a href="{{ site.baseurl }}/" title="Home">{{ site.title }}</a><br>
|
45
|
+
<small>{{ site.tagline }}</small>
|
46
|
+
</h2>
|
47
|
+
|
48
|
+
<!-- Change navigation links here -->
|
49
|
+
<div class="navigation">
|
50
|
+
<ul id="navigation-list">
|
51
|
+
<li><a href="/archive/">archive</a></li>
|
52
|
+
<li><a href="/styles/">styles</a></li>
|
53
|
+
<li><a href="/about/">about</a></li>
|
54
|
+
</ul>
|
55
|
+
</div>
|
56
|
+
|
57
|
+
</header>
|
58
|
+
|
59
|
+
<main>
|
60
|
+
{{ content | smartify }}
|
61
|
+
</main>
|
62
|
+
|
63
|
+
<br><footer class="footer">
|
64
|
+
<p>Made with ❤️ on a Mac 💻</p>
|
65
|
+
</footer>
|
66
|
+
</div>
|
67
|
+
|
68
|
+
{% if site.ga_analytics %}
|
69
|
+
<script>
|
70
|
+
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
71
|
+
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
72
|
+
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
73
|
+
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
74
|
+
ga('create', '{{ site.ga_analytics }}', 'auto');
|
75
|
+
ga('send', 'pageview');
|
76
|
+
</script>
|
77
|
+
{% endif %}
|
78
|
+
|
79
|
+
{% include cookie-consent.html%}
|
80
|
+
|
81
|
+
</body>
|
82
|
+
</html>
|
data/_layouts/page.html
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
---
|
2
|
-
layout: default
|
3
|
-
---
|
4
|
-
|
5
|
-
<article class="page">
|
6
|
-
{{ content | smartify }}
|
7
|
-
</article>
|
1
|
+
---
|
2
|
+
layout: default
|
3
|
+
---
|
4
|
+
|
5
|
+
<article class="page">
|
6
|
+
{{ content | smartify }}
|
7
|
+
</article>
|
data/_layouts/post.html
CHANGED
@@ -1,62 +1,62 @@
|
|
1
|
-
---
|
2
|
-
layout: default
|
3
|
-
---
|
4
|
-
|
5
|
-
<article class="post">
|
6
|
-
{% if page.link %}
|
7
|
-
<h2 class="post-title"><a href="{{ page.link }}">
|
8
|
-
{{ page.title | smartify }} <span class="link-arrow">→</span></a>
|
9
|
-
</h2>
|
10
|
-
{% else %}
|
11
|
-
<h2 class="post-title">{{ page.title | smartify }}</h2>
|
12
|
-
{% endif %}
|
13
|
-
|
14
|
-
<time datetime="{{ page.date | date_to_xmlschema }}" class="post-date">{{ page.date | date_to_long_string: "ordinal", "US" }}
|
15
|
-
{% if post %}
|
16
|
-
{% assign categories = post.categories %}
|
17
|
-
{% else %}
|
18
|
-
{% assign categories = page.categories %}
|
19
|
-
{% endif %}
|
20
|
-
{% if categories.size > 0 %}•{% endif %}
|
21
|
-
{% for category in categories %}
|
22
|
-
<a href="{{site.baseurl}}/categories/#{{category|slugize}}">{{category}}</a>{% unless forloop.last %},{% endunless %}
|
23
|
-
{% endfor %}
|
24
|
-
{%- if page.last_modified_at -%}
|
25
|
-
<br><i>Last updated on: {{ page.last_modified_at | date_to_long_string: "ordinal", "US" }}</i>
|
26
|
-
{%- endif -%}
|
27
|
-
<br><span class="author">{% include author.html %}</span>
|
28
|
-
</time>
|
29
|
-
|
30
|
-
{{ content | smartify }}
|
31
|
-
|
32
|
-
<br><br>
|
33
|
-
<div class="tag-list">
|
34
|
-
{% if post %}
|
35
|
-
{% assign tags = post.tags %}
|
36
|
-
{% else %}
|
37
|
-
{% assign tags = page.tags %}
|
38
|
-
{% endif %}
|
39
|
-
{% for tag in tags %}
|
40
|
-
<a href="{{site.baseurl}}/tags/#{{tag|slugize}}">{{tag}}</a>
|
41
|
-
{% unless forloop.last %} {% endunless %}
|
42
|
-
{% endfor %}
|
43
|
-
</div>
|
44
|
-
|
45
|
-
{% if page.link %}
|
46
|
-
<br>
|
47
|
-
<span class="source" role="doc-endnotes">
|
48
|
-
source: <a href="{{ page.link }}">{{ page.link | remove:'http://' | remove:'www.' | remove:'https://' | split:'/' | first }}</a>
|
49
|
-
</span><br>
|
50
|
-
{% endif %}
|
51
|
-
<br>
|
52
|
-
|
53
|
-
</article>
|
54
|
-
|
55
|
-
<div class="PageNavigation">
|
56
|
-
{% if page.previous.url %}
|
57
|
-
<br><a class="prev" href="{{page.previous.url}}">← Previous</a>
|
58
|
-
{% endif %}
|
59
|
-
{% if page.next.url %}
|
60
|
-
<br><a class="next" href="{{page.next.url}}">Next →</a>
|
61
|
-
{% endif %}
|
62
|
-
</div>
|
1
|
+
---
|
2
|
+
layout: default
|
3
|
+
---
|
4
|
+
|
5
|
+
<article class="post">
|
6
|
+
{% if page.link %}
|
7
|
+
<h2 class="post-title"><a href="{{ page.link }}">
|
8
|
+
{{ page.title | smartify }} <span class="link-arrow">→</span></a>
|
9
|
+
</h2>
|
10
|
+
{% else %}
|
11
|
+
<h2 class="post-title">{{ page.title | smartify }}</h2>
|
12
|
+
{% endif %}
|
13
|
+
|
14
|
+
<time datetime="{{ page.date | date_to_xmlschema }}" class="post-date">{{ page.date | date_to_long_string: "ordinal", "US" }}
|
15
|
+
{% if post %}
|
16
|
+
{% assign categories = post.categories %}
|
17
|
+
{% else %}
|
18
|
+
{% assign categories = page.categories %}
|
19
|
+
{% endif %}
|
20
|
+
{% if categories.size > 0 %}•{% endif %}
|
21
|
+
{% for category in categories %}
|
22
|
+
<a href="{{site.baseurl}}/categories/#{{category|slugize}}">{{category}}</a>{% unless forloop.last %},{% endunless %}
|
23
|
+
{% endfor %}
|
24
|
+
{%- if page.last_modified_at -%}
|
25
|
+
<br><i>Last updated on: {{ page.last_modified_at | date_to_long_string: "ordinal", "US" }}</i>
|
26
|
+
{%- endif -%}
|
27
|
+
<br><span class="author">{% include author.html %}</span>
|
28
|
+
</time>
|
29
|
+
|
30
|
+
{{ content | smartify }}
|
31
|
+
|
32
|
+
<br><br>
|
33
|
+
<div class="tag-list">
|
34
|
+
{% if post %}
|
35
|
+
{% assign tags = post.tags %}
|
36
|
+
{% else %}
|
37
|
+
{% assign tags = page.tags %}
|
38
|
+
{% endif %}
|
39
|
+
{% for tag in tags %}
|
40
|
+
<a href="{{site.baseurl}}/tags/#{{tag|slugize}}">{{tag}}</a>
|
41
|
+
{% unless forloop.last %} {% endunless %}
|
42
|
+
{% endfor %}
|
43
|
+
</div>
|
44
|
+
|
45
|
+
{% if page.link %}
|
46
|
+
<br>
|
47
|
+
<span class="source" role="doc-endnotes">
|
48
|
+
source: <a href="{{ page.link }}">{{ page.link | remove:'http://' | remove:'www.' | remove:'https://' | split:'/' | first }}</a>
|
49
|
+
</span><br>
|
50
|
+
{% endif %}
|
51
|
+
<br>
|
52
|
+
|
53
|
+
</article>
|
54
|
+
|
55
|
+
<div class="PageNavigation">
|
56
|
+
{% if page.previous.url %}
|
57
|
+
<br><a class="prev" href="{{page.previous.url}}">← Previous</a>
|
58
|
+
{% endif %}
|
59
|
+
{% if page.next.url %}
|
60
|
+
<br><a class="next" href="{{page.next.url}}">Next →</a>
|
61
|
+
{% endif %}
|
62
|
+
</div>
|