jscom_ice 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +17 -1
- data/_includes/carousel.html +15 -0
- data/_includes/contact-me-form.html +64 -0
- data/_includes/embed-audio.html +4 -0
- data/_includes/footer.html +11 -0
- data/_includes/header.html +165 -0
- data/_includes/john_landing.html +9 -0
- data/_includes/navbar.html +47 -0
- data/_includes/post_navigation.html +20 -0
- data/_includes/posts.html +33 -0
- data/_includes/scripts.html +16 -0
- data/_includes/tags.html +22 -0
- data/_includes/yearly_content.html +19 -0
- data/_layouts/default.html +38 -0
- data/_layouts/home.html +13 -0
- data/_layouts/lore.html +19 -0
- data/_layouts/page.html +15 -0
- data/_layouts/post.html +48 -0
- data/_sass/base/_base.scss +164 -0
- data/_sass/component/_all-components.scss +11 -0
- data/_sass/component/_author.scss +37 -0
- data/_sass/component/_carousel.scss +17 -0
- data/_sass/component/_code.scss +25 -0
- data/_sass/component/_codeblock.scss +32 -0
- data/_sass/component/_contact.scss +9 -0
- data/_sass/component/_form.scss +42 -0
- data/_sass/component/_highlight.scss +164 -0
- data/_sass/component/_navbar.scss +77 -0
- data/_sass/component/_post-navigation.scss +40 -0
- data/_sass/component/_posts.scss +36 -0
- data/_sass/component/_table.scss +19 -0
- data/_sass/layout/_footer.scss +20 -0
- data/_sass/layout/_layout.scss +104 -0
- data/_sass/main.scss +68 -0
- data/_sass/pages/_home.scss +5 -0
- data/_sass/pages/_page.scss +20 -0
- data/_sass/pages/_post.scss +57 -0
- data/assets/css/bootstrap.css.map +1 -0
- data/assets/css/bootstrap.min.css +6 -0
- data/assets/css/style.scss +4 -0
- data/assets/js/bootstrap.js +3894 -0
- data/assets/js/bootstrap.js.map +1 -0
- data/assets/js/bootstrap.min.js +7 -0
- data/assets/js/bootstrap.min.js.map +1 -0
- data/assets/js/jquery-3.7.0.min.js +2 -0
- data/assets/js/popper.min.js +6 -0
- metadata +47 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4e9f9214e09092b7a94a193b13bde713f0fc48d7b8643badfcd535330c91d7c
|
4
|
+
data.tar.gz: a6eba41280d49bf1901052ae3fef27216f1ab6862b3b872221c52be69a2a727b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd4b36109e0758c3c56562c64935931e8cac11dd9fa97b5655307f735f32702e69f85e607312cd23e69e158d5ce826759dbf1a4755c66bff6f1687d814a60780
|
7
|
+
data.tar.gz: feaf2f875112cc7745daa7ac505e5c31eb69bc06ab3f73d188c6e67cc34e5dfb79f750d0902bf5ef3be38e054418496ee0bc6c6ba163b5371a2081c4aa14fb22
|
data/README.md
CHANGED
@@ -1,2 +1,18 @@
|
|
1
1
|
# jscom-ice
|
2
|
-
|
2
|
+
|
3
|
+
A Jekyll theme for (johnsosoka.com)[https://johnsosoka.com]
|
4
|
+
|
5
|
+
**NOTE:** This repository and theme are open source, but not meant for public consumption. If you would like to use this
|
6
|
+
theme, please fork the repository and make any changes you would like.
|
7
|
+
|
8
|
+
## Usage
|
9
|
+
|
10
|
+
1. Download the gem from github
|
11
|
+
2. manually install the gem `$ gem install ./jscom-ice-0.0.1.gem`
|
12
|
+
|
13
|
+
## Local Development
|
14
|
+
|
15
|
+
1. Make changes to the theme
|
16
|
+
2. build the gem `$ gem build jscom_ice_theme.gemspec`
|
17
|
+
3. Install the gem `$ gem install ./jscom-ice-0.0.1.gem`
|
18
|
+
4. Update the Gemfile to use the local gem
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
|
2
|
+
<div class="carousel-inner">
|
3
|
+
{% for image in include.images %}
|
4
|
+
<div class="carousel-item {% if forloop.first %}active{% endif %}" data-interval="4000">
|
5
|
+
<img class="d-block w-100" src="{{ image }}" alt="Slide {{ forloop.index }}">
|
6
|
+
</div>
|
7
|
+
{% endfor %}
|
8
|
+
</div>
|
9
|
+
<a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
|
10
|
+
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
11
|
+
</a>
|
12
|
+
<a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
|
13
|
+
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
14
|
+
</a>
|
15
|
+
</div>
|
@@ -0,0 +1,64 @@
|
|
1
|
+
<div class="container-fluid mt-5">
|
2
|
+
<form id="contactMeForm">
|
3
|
+
<!-- Alert on Success/Failure -->
|
4
|
+
<div id="notification" class="alert mt-3" role="alert" style="display: none;"></div>
|
5
|
+
<div class="form-group">
|
6
|
+
<input type="text" class="form-control" id="name" name="user_name" placeholder="Name">
|
7
|
+
</div>
|
8
|
+
<div class="form-group">
|
9
|
+
<input type="email" class="form-control" id="mail" name="user_email" placeholder="Email">
|
10
|
+
</div>
|
11
|
+
<div class="form-group">
|
12
|
+
<textarea class="form-control" id="msg" name="user_message" placeholder="Message"></textarea>
|
13
|
+
</div>
|
14
|
+
<button type="button" class="btn btn-primary btn-block" id="contact_submit">Send your message</button>
|
15
|
+
</form>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<!-- TODO - this isn't working when using the scripts.html include ... -->
|
19
|
+
<script src="/assets/js/jquery-3.7.0.min.js"></script>
|
20
|
+
|
21
|
+
<script>
|
22
|
+
function submitContact(payload) {
|
23
|
+
$.ajax({
|
24
|
+
url : "{{ site.contact.api.url }}",
|
25
|
+
type: "POST",
|
26
|
+
dataType: "json",
|
27
|
+
data: payload,
|
28
|
+
success: function(data){
|
29
|
+
console.log(data);
|
30
|
+
$('#notification').addClass('alert-success').text('Message Sent!').show();
|
31
|
+
clearForm();
|
32
|
+
},
|
33
|
+
error: function(){
|
34
|
+
console.log("Error in the request");
|
35
|
+
$('#notification').addClass('alert-danger').text('Something went wrong :(').show();
|
36
|
+
}
|
37
|
+
});
|
38
|
+
}
|
39
|
+
|
40
|
+
function clearForm() {
|
41
|
+
$('#name').val('');
|
42
|
+
$('#mail').val('');
|
43
|
+
$('#msg').val('');
|
44
|
+
}
|
45
|
+
|
46
|
+
|
47
|
+
function buildPayload() {
|
48
|
+
var contactMePayload = {
|
49
|
+
contact_name : $('#name').val(),
|
50
|
+
contact_email : $('#mail').val(),
|
51
|
+
contact_message : $('#msg').val()
|
52
|
+
};
|
53
|
+
|
54
|
+
return JSON.stringify(contactMePayload);
|
55
|
+
}
|
56
|
+
|
57
|
+
$('#contact_submit').click(function() {
|
58
|
+
var payload = buildPayload();
|
59
|
+
console.log(payload);
|
60
|
+
submitContact(payload);
|
61
|
+
});
|
62
|
+
</script>
|
63
|
+
|
64
|
+
<!-- TODO - this isn't working with my self hosted jquery?? -->
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<footer class="footer bg-transparent mt-auto py-3 text-light">
|
2
|
+
<div class="container text-center">
|
3
|
+
{% for link in site.data.footer_links %}
|
4
|
+
<a class="mb-1 mx-2 footer_item" href="{{ link.url }}">{{ link.title }}</a>
|
5
|
+
{% endfor %}
|
6
|
+
</div>
|
7
|
+
<small class="copyright-text">
|
8
|
+
John Sosoka<br>
|
9
|
+
© {{site.site_est_year}} - {{ site.time | date: "%Y" }}
|
10
|
+
</small>
|
11
|
+
</footer>
|
@@ -0,0 +1,165 @@
|
|
1
|
+
<head prefix="og: http://ogp.me/ns#">
|
2
|
+
<meta charset="UTF-8" />
|
3
|
+
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
|
4
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
5
|
+
<meta name="mobile-web-app-capable" content="yes" />
|
6
|
+
<meta name="apple-mobile-web-app-capable" content="yes" />
|
7
|
+
<meta name="application-name" content="{{ site.title }}" />
|
8
|
+
<meta name="apple-mobile-web-app-status-bar-style" content="#fff" />
|
9
|
+
<meta name="apple-mobile-web-app-title" content="{{ site.title }}" />
|
10
|
+
<title>
|
11
|
+
{% if page.title %}{{ page.title | escape }} - {{ site.title }}{% else %}{{
|
12
|
+
site.title | escape }}{% endif %}
|
13
|
+
</title>
|
14
|
+
<link
|
15
|
+
rel="alternate"
|
16
|
+
href="{{
|
17
|
+
page.url | remove: 'index.html' | remove: '.html' | absolute_url
|
18
|
+
}}"
|
19
|
+
hreflang="{{ site.lang }}"
|
20
|
+
/>
|
21
|
+
<link
|
22
|
+
rel="canonical"
|
23
|
+
href="{{
|
24
|
+
page.url | remove: 'index.html' | remove: '.html' | absolute_url
|
25
|
+
}}"
|
26
|
+
/>
|
27
|
+
{% if paginator.previous_page %}
|
28
|
+
<link
|
29
|
+
rel="prev"
|
30
|
+
href="{{
|
31
|
+
paginator.previous_page_path
|
32
|
+
| remove: 'index.html'
|
33
|
+
| remove: '.html'
|
34
|
+
}}"
|
35
|
+
/>
|
36
|
+
{% endif %} {% if paginator.next_page %}
|
37
|
+
<link
|
38
|
+
rel="next"
|
39
|
+
href="{{
|
40
|
+
paginator.next_page_path
|
41
|
+
| remove: 'index.html'
|
42
|
+
| remove: '.html'
|
43
|
+
}}"
|
44
|
+
/>
|
45
|
+
{% endif %}
|
46
|
+
<meta
|
47
|
+
name="description"
|
48
|
+
content="{{
|
49
|
+
page.description
|
50
|
+
| default: site.description
|
51
|
+
| strip_html
|
52
|
+
| normalize_whitespace
|
53
|
+
| truncate: 200
|
54
|
+
| escape
|
55
|
+
}}"
|
56
|
+
/>
|
57
|
+
<meta name="referrer" content="no-referrer-when-downgrade" />
|
58
|
+
<meta
|
59
|
+
property="og:site_name"
|
60
|
+
content="{% if page.title %}{{ page.title | escape }} | {{
|
61
|
+
site.author.name
|
62
|
+
}}{% else %}{{ site.title | escape }}{% endif %}"
|
63
|
+
/>
|
64
|
+
<meta
|
65
|
+
property="og:title"
|
66
|
+
content="{% if page.title %}{{ page.title | escape }} | {{
|
67
|
+
site.author.name
|
68
|
+
}}{% else %}{{ site.title | escape }}{% endif %}"
|
69
|
+
/>
|
70
|
+
{% if page.location %}
|
71
|
+
<meta property="og:type" content="article" />
|
72
|
+
<meta
|
73
|
+
property="article:publisher"
|
74
|
+
content="https://web.facebook.com/{{ site.author.facebook }}"
|
75
|
+
/>
|
76
|
+
{% else %}
|
77
|
+
<meta property="og:type" content="website" />
|
78
|
+
{% endif %}
|
79
|
+
<meta
|
80
|
+
property="og:url"
|
81
|
+
content="{{
|
82
|
+
page.url | remove: 'index.html' | remove: '.html' | absolute_url
|
83
|
+
}}"
|
84
|
+
/>
|
85
|
+
<meta
|
86
|
+
property="og:description"
|
87
|
+
content="{{
|
88
|
+
page.description
|
89
|
+
| default: site.description
|
90
|
+
| strip_html
|
91
|
+
| normalize_whitespace
|
92
|
+
| truncate: 200
|
93
|
+
| escape
|
94
|
+
}}"
|
95
|
+
/>
|
96
|
+
{% if page.image %}
|
97
|
+
<meta property="og:image" content="{{ page.image | absolute_url }}" />
|
98
|
+
{% else %}
|
99
|
+
<meta property="og:image" content="{{ site.og_image | absolute_url }}" />
|
100
|
+
{% endif %}
|
101
|
+
<meta property="og:image:width" content="640" />
|
102
|
+
<meta property="og:image:height" content="640" />
|
103
|
+
<meta name="twitter:card" content="summary" />
|
104
|
+
<meta
|
105
|
+
name="twitter:title"
|
106
|
+
content="{% if page.title %}{{ page.title | escape }} | {{
|
107
|
+
site.author.twitter
|
108
|
+
}}{% else %}{{ site.title | escape }}{% endif %}"
|
109
|
+
/>
|
110
|
+
<meta
|
111
|
+
name="twitter:url"
|
112
|
+
content="{{
|
113
|
+
page.url | remove: 'index.html' | remove: '.html' | absolute_url
|
114
|
+
}}"
|
115
|
+
/>
|
116
|
+
<meta name="twitter:site" content="@{{ site.author.twitter }}" />
|
117
|
+
<meta name="twitter:creator" content="@{{ site.author.twitter }}" />
|
118
|
+
<meta
|
119
|
+
name="twitter:description"
|
120
|
+
content="{{
|
121
|
+
page.description
|
122
|
+
| default: site.description
|
123
|
+
| strip_html
|
124
|
+
| normalize_whitespace
|
125
|
+
| truncate: 200
|
126
|
+
| escape
|
127
|
+
}}"
|
128
|
+
/>
|
129
|
+
{% if page.image %}
|
130
|
+
<meta name="twitter:image" content="{{ page.image | absolute_url }}" />
|
131
|
+
{% else %}
|
132
|
+
<meta name="twitter:image" content="{{ site.image | absolute_url }}" />
|
133
|
+
{% endif %} {% feed_meta %}
|
134
|
+
<link
|
135
|
+
rel="apple-touch-icon"
|
136
|
+
sizes="180x180"
|
137
|
+
href="https://media.johnsosoka.com/old/favicons/apple-touch-icon.png"
|
138
|
+
/>
|
139
|
+
<link
|
140
|
+
rel="icon"
|
141
|
+
type="image/png"
|
142
|
+
sizes="32x32"
|
143
|
+
href="https://media.johnsosoka.com/assets/favicons/favicon-32x32.png"
|
144
|
+
/>
|
145
|
+
<link
|
146
|
+
rel="icon"
|
147
|
+
type="image/png"
|
148
|
+
sizes="16x16"
|
149
|
+
href="https://media.johnsosoka.com/assets/favicons/favicon-16x16.png"
|
150
|
+
/>
|
151
|
+
<link
|
152
|
+
rel="icon"
|
153
|
+
type="image/png"
|
154
|
+
sizes="16x16"
|
155
|
+
href="https://media.johnsosoka.com/old/favicons/safari-pinned-tab.png"
|
156
|
+
/>
|
157
|
+
<meta name="apple-mobile-web-app-title" content="johnsosoka.com" />
|
158
|
+
<meta name="application-name" content="johnsosoka.com" />
|
159
|
+
<meta name="msapplication-TileColor" content="#da532c" />
|
160
|
+
<meta name="theme-color" content="#2c2c2c" />
|
161
|
+
<link rel="stylesheet" href="/assets/css/bootstrap.min.css" />
|
162
|
+
<link rel="stylesheet" href="/assets/css/style.css" />
|
163
|
+
|
164
|
+
|
165
|
+
</head>
|
@@ -0,0 +1,47 @@
|
|
1
|
+
<nav class="navbar navbar-expand-lg navbar-dark bg-transparent fixed-top">
|
2
|
+
<a class="navbar-brand" href="#"></a>
|
3
|
+
<button class="navbar-toggler"
|
4
|
+
type="button" data-toggle="collapse"
|
5
|
+
data-target="#navbarNav"
|
6
|
+
aria-controls="navbarNav"
|
7
|
+
aria-expanded="false"
|
8
|
+
aria-label="Toggle navigation">
|
9
|
+
<span class="navbar-toggler-icon"></span>
|
10
|
+
</button>
|
11
|
+
<div class="collapse navbar-collapse justify-content-end" id="navbarNav">
|
12
|
+
<ul class="navbar-nav">
|
13
|
+
{%- assign url = page.url -%}
|
14
|
+
{%- assign menus = site.data.menus -%}
|
15
|
+
{%- if menus %}
|
16
|
+
{%- for menu in menus -%}
|
17
|
+
{%- if menu.subitems -%}
|
18
|
+
<li class="nav-item dropdown">
|
19
|
+
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
20
|
+
{{ menu.title }}
|
21
|
+
</a>
|
22
|
+
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
|
23
|
+
{%- for subitem in menu.subitems -%}
|
24
|
+
<a class="dropdown-item" href="{{ subitem.url }}">{{ subitem.title }}</a>
|
25
|
+
{%- endfor -%}
|
26
|
+
</div>
|
27
|
+
</li>
|
28
|
+
{%- else -%}
|
29
|
+
<li class="nav-item {% if url == menu.url %}active{% endif %}">
|
30
|
+
<a class="nav-link" href="{{ menu.url }}">{{ menu.title }}</a>
|
31
|
+
</li>
|
32
|
+
{%- endif -%}
|
33
|
+
{%- endfor -%}
|
34
|
+
{%- endif -%}
|
35
|
+
<li class="nav-item">
|
36
|
+
<a class="nav-link" href="/feed.xml">
|
37
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 512 512" fill="#ED812E">
|
38
|
+
<title>RSS</title>
|
39
|
+
<path d="M108.56,342.78a60.34,60.34,0,1,0,60.56,60.44A60.63,60.63,0,0,0,108.56,342.78Z"/>
|
40
|
+
<path d="M48,186.67v86.55c52,0,101.94,15.39,138.67,52.11s52,86.56,52,138.67h86.66C325.33,312.44,199.67,186.67,48,186.67Z"/>
|
41
|
+
<path d="M48,48v86.56c185.25,0,329.22,144.08,329.22,329.44H464C464,234.66,277.67,48,48,48Z"/>
|
42
|
+
</svg>
|
43
|
+
</a>
|
44
|
+
</li>
|
45
|
+
</ul>
|
46
|
+
</div>
|
47
|
+
</nav>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<div class="post-navigation">
|
2
|
+
<div class="row">
|
3
|
+
<div class="col text-left">
|
4
|
+
{% if page.previous %}
|
5
|
+
<a class="post-nav-item post-nav-prev" href="{{ page.previous | relative_url }}">
|
6
|
+
<div class="nav-arrow">Previous</div>
|
7
|
+
<span class="post-title">{{ page.previous.title }}</span>
|
8
|
+
</a>
|
9
|
+
{% endif %}
|
10
|
+
</div>
|
11
|
+
<div class="col text-right">
|
12
|
+
{% if page.next %}
|
13
|
+
<a class="post-nav-item post-nav-next" href="{{ page.next | relative_url }}">
|
14
|
+
<div class="nav-arrow">Next</div>
|
15
|
+
<span class="post-title">{{ page.next.title }}</span>
|
16
|
+
</a>
|
17
|
+
{% endif %}
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
</div>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<!--
|
2
|
+
This include will display recent posts of a specified category & number..
|
3
|
+
|
4
|
+
Parameters:
|
5
|
+
- category: The category of the posts to display.
|
6
|
+
- post_display_limit: The maximum number of posts to display.
|
7
|
+
- post_collection_title: The title to display above the list of posts.
|
8
|
+
|
9
|
+
Example Usage:
|
10
|
+
{% raw %}
|
11
|
+
{% include posts.html category="blog" post_display_limit=5 post_collection_title="Recent Blog Posts" %}
|
12
|
+
{% endraw %}
|
13
|
+
|
14
|
+
The above example would display the 5 most recent posts from the 'blog' category, with the title 'Recent Blog Posts'
|
15
|
+
above the list.
|
16
|
+
|
17
|
+
-->
|
18
|
+
|
19
|
+
<div class="posts-wrapper">
|
20
|
+
<!-- <h3 class="posts-item-note" aria-label="Recent Posts">{{ include.post_collection_title }}</h3>-->
|
21
|
+
{%- for post in site.categories[include.category] limit: include.post_display_limit -%}
|
22
|
+
<article class="post-item row">
|
23
|
+
<div class="col-md-3">
|
24
|
+
<span class="post-item-date">{{ post.date | date: "%b %d, %Y" }}</span>
|
25
|
+
</div>
|
26
|
+
<div class="col-md-9">
|
27
|
+
<span class="post-item-title">
|
28
|
+
<a href="{{ post.url }}">{{ post.title | escape }}</a>
|
29
|
+
</span>
|
30
|
+
</div>
|
31
|
+
</article>
|
32
|
+
{%- endfor -%}
|
33
|
+
</div>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<!--
|
2
|
+
|
3
|
+
Scripts that are loaded throughout the website
|
4
|
+
|
5
|
+
-->
|
6
|
+
|
7
|
+
<script src="/assets/js/jquery-3.7.0.min.js" defer="defer"></script>
|
8
|
+
|
9
|
+
<script src="/assets/js/bootstrap.min.js" defer="defer"></script>
|
10
|
+
|
11
|
+
<script src="/assets/js/popper.min.js"></script>
|
12
|
+
|
13
|
+
<script src="/assets/js/bootstrap.js"></script>
|
14
|
+
|
15
|
+
<!-- TODO contact form page & move this to more local include? (it's only needed on 1 page)-->
|
16
|
+
<!--<script src="/assets/js/contact.js"></script>-->
|
data/_includes/tags.html
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
<div class="archive-tags">
|
2
|
+
<a class="tag-item" href="#">all</a>
|
3
|
+
{%- for tag in site.tags -%}
|
4
|
+
{% capture name %}{{ tag | first }}{% endcapture %}
|
5
|
+
<a class="tag-item" href="#{{name}}">{{ name }}</a>
|
6
|
+
{%- endfor -%}
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<!-- TODO Dates / Titles aren't aligned -->
|
10
|
+
|
11
|
+
{%- for tag in site.tags -%}
|
12
|
+
{%- capture name -%}{{ tag | first }}{%- endcapture -%}
|
13
|
+
<h2 id="{{ name }}">{{ name | upcase }}</h2>
|
14
|
+
{%- for post in site.tags[name] -%}
|
15
|
+
<article class="post-item" id="results-container">
|
16
|
+
<span class="post-item-date">{{ post.date | date: "%b %d, %Y" }}</span>
|
17
|
+
<h3 class="post-item-title">
|
18
|
+
<a href="{{ post.url }}">{{ post.title | escape }}</a>
|
19
|
+
</h3>
|
20
|
+
</article>
|
21
|
+
{%- endfor -%}
|
22
|
+
{%- endfor -%}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<div class="posts-wrapper">
|
2
|
+
{%- for post in site.posts -%}
|
3
|
+
{%- capture current_year -%}{{ post.date | date: "%Y" }}{%- endcapture -%}
|
4
|
+
{%- unless current_year == previous_year -%}
|
5
|
+
<h1 class="posts-item-note" aria-label="Posts from {{ current_year }}">{{ current_year }}</h1>
|
6
|
+
{%- assign previous_year = current_year -%}
|
7
|
+
{%- endunless -%}
|
8
|
+
<article class="post-item row">
|
9
|
+
<div class="col-md-3">
|
10
|
+
<span class="post-item-date">{{ post.date | date: "%b %d, %Y" }}</span>
|
11
|
+
</div>
|
12
|
+
<div class="col-md-9">
|
13
|
+
<span class="post-item-title">
|
14
|
+
<a href="{{ post.url }}">{{ post.title | escape }}</a>
|
15
|
+
</span>
|
16
|
+
</div>
|
17
|
+
</article>
|
18
|
+
{%- endfor -%}
|
19
|
+
</div>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
---
|
2
|
+
---
|
3
|
+
<!DOCTYPE html>
|
4
|
+
<html lang="{{ page.lang | default: site.lang | default: en }}" class="wrapper-2">
|
5
|
+
<head>
|
6
|
+
<meta charset="UTF-8">
|
7
|
+
<title>{{ page.title }}</title>
|
8
|
+
</head>
|
9
|
+
{% include header.html %}
|
10
|
+
<body>
|
11
|
+
<!-- Shared/Common Styles -->
|
12
|
+
<div class="container">
|
13
|
+
<header class="header row justify-content-center">
|
14
|
+
<div class="col-lg-8">
|
15
|
+
<!-- Site Navigation -->
|
16
|
+
{% include navbar.html %}
|
17
|
+
</div>
|
18
|
+
</header>
|
19
|
+
|
20
|
+
<main class="body row justify-content-center flex-grow-1">
|
21
|
+
<div class="col-lg-8">
|
22
|
+
<!-- Page Content -->
|
23
|
+
{{ content }}
|
24
|
+
</div>
|
25
|
+
</main>
|
26
|
+
|
27
|
+
<footer class="footer row justify-content-center">
|
28
|
+
<div class="col-lg-8">
|
29
|
+
<!-- Footer content -->
|
30
|
+
{% include footer.html %}
|
31
|
+
</div>
|
32
|
+
</footer>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<!-- Shared/Common Scripts -->
|
36
|
+
{% include scripts.html %}
|
37
|
+
</body>
|
38
|
+
</html>
|
data/_layouts/home.html
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
---
|
2
|
+
layout: default
|
3
|
+
---
|
4
|
+
|
5
|
+
<div class="wrapper home">
|
6
|
+
<main class="page-content d-flex justify-content-center align-items-center" aria-label="Content">
|
7
|
+
<div class="text-left">
|
8
|
+
{% include john_landing.html %}
|
9
|
+
{{ content }}
|
10
|
+
</div>
|
11
|
+
</main>
|
12
|
+
</div>
|
13
|
+
|
data/_layouts/lore.html
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
---
|
2
|
+
layout: default
|
3
|
+
---
|
4
|
+
|
5
|
+
<body class="notransition">
|
6
|
+
<div class="wrapper">
|
7
|
+
<header class="header">
|
8
|
+
<h1 class="header-title center" itemprop="headline">{{ page.title | escape }}.</h1>
|
9
|
+
</header>
|
10
|
+
<main class="page-content" aria-label="Content">
|
11
|
+
{{ content }}
|
12
|
+
<script>
|
13
|
+
document.write('<a href="' + document.referrer + '">{{ site.lore_go_back_text }}</a>');
|
14
|
+
</script>
|
15
|
+
</main>
|
16
|
+
|
17
|
+
</div>
|
18
|
+
</body>
|
19
|
+
|
data/_layouts/page.html
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
layout: default
|
3
|
+
---
|
4
|
+
|
5
|
+
<body class="notransition">
|
6
|
+
|
7
|
+
<div class="wrapper page">
|
8
|
+
<header class="header">
|
9
|
+
<h1 class="header-title center" itemprop="headline">{{ page.title | escape }}.</h1>
|
10
|
+
</header>
|
11
|
+
<main class="flex-grow-1 page-content" aria-label="Content">
|
12
|
+
{{ content }}
|
13
|
+
</main>
|
14
|
+
</div>
|
15
|
+
</body>
|
data/_layouts/post.html
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
---
|
2
|
+
layout: default
|
3
|
+
---
|
4
|
+
|
5
|
+
<body class="notransition">
|
6
|
+
|
7
|
+
<div class="wrapper post">
|
8
|
+
<header class="header">
|
9
|
+
{% if page.tags and page.tags != empty %}
|
10
|
+
<div class="tags">
|
11
|
+
{% assign tags = page.tags %}
|
12
|
+
<span itemprop="keywords">
|
13
|
+
{% for tag in tags %}
|
14
|
+
<a class="tag"
|
15
|
+
href="/tags/#{{tag | downcase | slugify}}">{{tag | upcase }}</a>{% unless forloop.last %},{% endunless %}
|
16
|
+
{% endfor %}
|
17
|
+
</span>
|
18
|
+
</div>
|
19
|
+
{% endif %}
|
20
|
+
<h1 class="header-title text-left display-12" itemprop="headline">{{ page.title | escape }}.</h1>
|
21
|
+
</header>
|
22
|
+
|
23
|
+
<div class="header-subtitle">
|
24
|
+
<div class="row">
|
25
|
+
<div class="col text-right">
|
26
|
+
<span itemprop="author" itemscope itemtype="https://schema.org/Person">
|
27
|
+
<span itemprop="name">{{ site.author.name }}</span>
|
28
|
+
</span>
|
29
|
+
</div>
|
30
|
+
</div>
|
31
|
+
<div class="row">
|
32
|
+
<div class="col text-right">
|
33
|
+
<span itemprop="publishDate" datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">
|
34
|
+
{{ page.date | date: "%b %d, %Y" }}
|
35
|
+
</span>
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
|
40
|
+
<main class="flex-grow-1 page-content" aria-label="Content">
|
41
|
+
{{ content }}
|
42
|
+
</main>
|
43
|
+
|
44
|
+
|
45
|
+
</div>
|
46
|
+
{% include post_navigation.html %}
|
47
|
+
</body>
|
48
|
+
|