jekyll-theme-profile 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +228 -0
- data/_config.yml +65 -0
- data/_includes/footer.html +3 -0
- data/_includes/header.html +121 -0
- data/_includes/link-card.html +38 -0
- data/_includes/links.html +7 -0
- data/_includes/masthead.html +58 -0
- data/_includes/nav.html +53 -0
- data/_includes/post-card.html +15 -0
- data/_includes/posts.html +10 -0
- data/_includes/repo-card.html +39 -0
- data/_includes/repositories.html +25 -0
- data/_includes/social.html +139 -0
- data/_layouts/default.html +97 -0
- data/_layouts/home.html +33 -0
- data/_layouts/page.html +7 -0
- data/_layouts/paginate.html +47 -0
- data/_layouts/post.html +25 -0
- data/_sass/_highlight-syntax.scss +66 -0
- data/_sass/_language-colors.scss +1443 -0
- data/_sass/_main.scss +45 -0
- data/_sass/jekyll-theme-profile.scss +5 -0
- data/assets/blog/index.html +4 -0
- data/assets/brands/behance.svg +1 -0
- data/assets/brands/docker.svg +1 -0
- data/assets/brands/dribbble.svg +1 -0
- data/assets/brands/facebook.svg +1 -0
- data/assets/brands/hackerrank.svg +1 -0
- data/assets/brands/instagram.svg +1 -0
- data/assets/brands/keybase.svg +1 -0
- data/assets/brands/linkedin.svg +1 -0
- data/assets/brands/mastodon.svg +1 -0
- data/assets/brands/medium.svg +1 -0
- data/assets/brands/stackoverflow.svg +1 -0
- data/assets/brands/telegram.svg +1 -0
- data/assets/brands/twitter.svg +1 -0
- data/assets/brands/unsplash.svg +1 -0
- data/assets/brands/vk.svg +1 -0
- data/assets/brands/vscode.svg +1 -0
- data/assets/brands/youtube.svg +1 -0
- data/assets/css/style.scss +4 -0
- data/assets/img/blog.png +0 -0
- data/assets/img/favicon.ico +0 -0
- data/assets/img/icon-sidebar.png +0 -0
- data/assets/img/icon-stacked.png +0 -0
- data/assets/img/icon-topbar.png +0 -0
- data/assets/img/links.png +0 -0
- data/assets/img/octocat.png +0 -0
- data/assets/img/repositories.png +0 -0
- data/assets/img/sidebar-laptop.png +0 -0
- data/assets/img/sidebar-phone.png +0 -0
- data/assets/img/sidebar-preview.png +0 -0
- data/assets/img/sidebar-tablet.png +0 -0
- data/assets/img/social-media.png +0 -0
- data/assets/img/stacked-laptop.png +0 -0
- data/assets/img/stacked-phone.png +0 -0
- data/assets/img/stacked-preview.png +0 -0
- data/assets/img/stacked-tablet.png +0 -0
- data/assets/img/tobpar-phone.png +0 -0
- data/assets/img/topbar-laptop.png +0 -0
- data/assets/img/topbar-preview.png +0 -0
- data/assets/img/topbar-tablet.png +0 -0
- data/assets/img/user-image.jpg +0 -0
- metadata +197 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0e9004b5e45f10d03b0219c115b7eacab47a1e909a946823d474f8aaad1f081c
|
4
|
+
data.tar.gz: a142e0d5f800dfdd3a29bbe4f3dd50c992ee9a7a11bf00897e6b7f2a1ef1f251
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 866b3a812f55767b4201d1bb394148dfc10df3d984d46596d20dc99e8810fa9017273a62511e70ef4783efaed7d23ce07941c3417361dbebdf2cf8eeb92a9ab1
|
7
|
+
data.tar.gz: 4ebf9e33034cc64a66c8a505568a8f55a9297f4b3b9857f7fb1f16b7d5f14f56f9515ea40f59204152bc130f3910a8690dc04290f32bbd6f00e766aa8a182783
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2023 Allison Thackston
|
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
|
13
|
+
all 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
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,228 @@
|
|
1
|
+
---
|
2
|
+
layout: page
|
3
|
+
permalink: index.html
|
4
|
+
---
|
5
|
+
![jekyll-theme-profile](screenshot.png)
|
6
|
+
|
7
|
+
# jekyll-theme-profile
|
8
|
+
{:.no_toc}
|
9
|
+
|
10
|
+
Meet "jekyll-theme-profile" – your ultimate Jekyll theme, based on GitHub's primer style. With both light and dark modes, and three stylish options: sidebar, topbar, and stacked, it's all about personalization. Setting up is a breeze, as it automatically populates your profile using your GitHub user info. Add custom links like Linktree and share engaging blog posts effortlessly. Get ready to rock your online presence with this user-friendly and charming theme, making Jekyll and GitHub Pages a joy to use!
|
11
|
+
|
12
|
+
1. TOC
|
13
|
+
{:toc}
|
14
|
+
|
15
|
+
## Installation
|
16
|
+
|
17
|
+
Add this line to your Jekyll site's `Gemfile`:
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
gem "jekyll-theme-profile"
|
21
|
+
```
|
22
|
+
|
23
|
+
And add this line to your Jekyll site's `_config.yml`:
|
24
|
+
|
25
|
+
```yaml
|
26
|
+
theme: jekyll-theme-profile
|
27
|
+
```
|
28
|
+
|
29
|
+
And then execute:
|
30
|
+
|
31
|
+
$ bundle
|
32
|
+
|
33
|
+
Or install it yourself as:
|
34
|
+
|
35
|
+
$ gem install jekyll-theme-profile
|
36
|
+
|
37
|
+
## Usage
|
38
|
+
|
39
|
+
Here's a sample config file you can copy and customize:
|
40
|
+
|
41
|
+
```yaml
|
42
|
+
repository: athackst/jekyll-theme-profile # Your repository name
|
43
|
+
url: https://username.github.io # The host url for your site
|
44
|
+
baseurl: "" # or your package name /jekyll-theme-profile (leave blank if it is the username.github.io package)
|
45
|
+
style: topbar # One of "stacked", "sidebar", "topbar"
|
46
|
+
# image: /assets/img/user-image.jpg # If you don't want to use your github image, set a custom one here
|
47
|
+
|
48
|
+
links:
|
49
|
+
# - name: Example full entry
|
50
|
+
# web_url: https://www.example.com
|
51
|
+
# image_url: /assets/img/icon-topbar.png
|
52
|
+
# description: Example description
|
53
|
+
# - name: Example entry with url and image
|
54
|
+
# web_url: https://www.example.com
|
55
|
+
# image_url: /assets/img/icon-sidebar.png
|
56
|
+
# - name: Example entry with image
|
57
|
+
# image_url: /assets/img/icon-stacked.png
|
58
|
+
# - name: Example entry with description
|
59
|
+
# description: Example Description
|
60
|
+
# - name: Example entry with only a name
|
61
|
+
|
62
|
+
repositories:
|
63
|
+
sort_by: stars
|
64
|
+
# sort_by options:
|
65
|
+
# - pushed
|
66
|
+
# - stars
|
67
|
+
limit: 24
|
68
|
+
exclude:
|
69
|
+
archived: true
|
70
|
+
forks: true
|
71
|
+
repositories:
|
72
|
+
# - respositories to exclude
|
73
|
+
|
74
|
+
social_media:
|
75
|
+
# behance: your_username
|
76
|
+
# dribbble: your_username
|
77
|
+
# docker: your_username
|
78
|
+
# facebook: your_username
|
79
|
+
# hackerrank: your_username
|
80
|
+
# instagram: your_username
|
81
|
+
# keybase: your_username
|
82
|
+
# linkedin: your_username
|
83
|
+
# mastodon: your_username
|
84
|
+
# medium: your_username
|
85
|
+
# stackoverflow: your_user_id
|
86
|
+
# telegram: your_username
|
87
|
+
# twitter: your_username
|
88
|
+
# unsplash: your_username
|
89
|
+
# vk: your_username
|
90
|
+
# vscode: your_username
|
91
|
+
# youtube: your_username
|
92
|
+
|
93
|
+
```
|
94
|
+
|
95
|
+
### Choose your style
|
96
|
+
|
97
|
+
Select the default style for your theme by adding `style` to your config file:
|
98
|
+
|
99
|
+
```yaml
|
100
|
+
style: sidebar # One of "stacked", "sidebar", "topbar"
|
101
|
+
```
|
102
|
+
|
103
|
+
You can also set the style of a particular page by adding `style` to your frontmatter.
|
104
|
+
|
105
|
+
```yaml
|
106
|
+
---
|
107
|
+
style: sidebar # One of "stacked", "sidebar", "topbar"
|
108
|
+
---
|
109
|
+
```
|
110
|
+
|
111
|
+
#### [Sidebar](/home-sidebar.md)
|
112
|
+
|
113
|
+
![Sidebar image](/assets/img/sidebar-preview.png)
|
114
|
+
|
115
|
+
#### [Stacked](/home-stacked.md)
|
116
|
+
|
117
|
+
![Stacked image](/assets/img/stacked-preview.png)
|
118
|
+
|
119
|
+
#### [Topbar](/home-topbar.md)
|
120
|
+
|
121
|
+
![Topbar image](/assets/img/topbar-preview.png)
|
122
|
+
|
123
|
+
### Links
|
124
|
+
|
125
|
+
In the `links` section, you can add links to showcase various pages on the web or your website.
|
126
|
+
|
127
|
+
![Links](/assets/img/links.png){: .border}
|
128
|
+
|
129
|
+
```yaml
|
130
|
+
links:
|
131
|
+
- name: Example full entry
|
132
|
+
web_url: https://www.example.com
|
133
|
+
image_url: /assets/img/icon-topbar.png
|
134
|
+
description: Example description
|
135
|
+
- name: Example entry with url and image
|
136
|
+
web_url: https://www.example.com
|
137
|
+
image_url: /assets/img/icon-sidebar.png
|
138
|
+
- name: Example entry with image
|
139
|
+
image_url: /assets/img/icon-stacked.png
|
140
|
+
- name: Example entry with description
|
141
|
+
description: Example Description
|
142
|
+
- name: Example entry with only a name
|
143
|
+
```
|
144
|
+
|
145
|
+
### Repositories
|
146
|
+
|
147
|
+
The `repositories` section allows you to display your GitHub repositories on your page. You can sort them by stars or latest pushes, set a limit to the number of repositories displayed, and exclude archived, forked, or specific repositories from the list
|
148
|
+
|
149
|
+
![Repositories](/assets/img/repositories.png){: .border}
|
150
|
+
|
151
|
+
```yaml
|
152
|
+
repositories:
|
153
|
+
sort_by: stars
|
154
|
+
# sort_by options:
|
155
|
+
# - pushed
|
156
|
+
# - stars
|
157
|
+
limit: 24
|
158
|
+
exclude:
|
159
|
+
archived: true
|
160
|
+
forks: true
|
161
|
+
repositories:
|
162
|
+
# - respositories to exclude
|
163
|
+
```
|
164
|
+
|
165
|
+
### Social media
|
166
|
+
|
167
|
+
Utilize the `social_media` section to add links to your various social media profiles. For each platform simply provide your username or user ID to have the corresponding icon and link appear on your profile.
|
168
|
+
|
169
|
+
![Social Media](/assets/img/social-media.png){: .border}
|
170
|
+
|
171
|
+
```yaml
|
172
|
+
social_media:
|
173
|
+
behance: your_username
|
174
|
+
dribbble: your_username
|
175
|
+
docker: your_username
|
176
|
+
facebook: your_username
|
177
|
+
hackerrank: your_username
|
178
|
+
instagram: your_username
|
179
|
+
keybase: your_username
|
180
|
+
linkedin: your_username
|
181
|
+
mastodon: your_username
|
182
|
+
medium: your_username
|
183
|
+
stackoverflow: your_user_id
|
184
|
+
telegram: your_username
|
185
|
+
twitter: your_username
|
186
|
+
unsplash: your_username
|
187
|
+
vk: your_username
|
188
|
+
vscode: your_username
|
189
|
+
youtube: your_username
|
190
|
+
```
|
191
|
+
|
192
|
+
### Blog
|
193
|
+
|
194
|
+
Make entries for the blog the same way you normally would by placing entries in the `_posts` folder. You can adjust the number of entries that show up in the main page by adjusting `posts_limit` in the `_config.yml` file. If you have more posts than the limit, a `Read more` button will link to the paginated blog post page /blog/index.html.
|
195
|
+
|
196
|
+
![Blog](/assets/img/blog.png){: .border}
|
197
|
+
|
198
|
+
```yaml
|
199
|
+
posts_limit: 3
|
200
|
+
```
|
201
|
+
|
202
|
+
Additionally, the theme provides a paginate layout you can use. By default, the theme serves pagination from `/assets/blog/index.html`.
|
203
|
+
|
204
|
+
But you can adjust the source by updating the config
|
205
|
+
|
206
|
+
```yaml
|
207
|
+
paginate: 6
|
208
|
+
paginate_path: "/assets/blog/page:num"
|
209
|
+
```
|
210
|
+
|
211
|
+
And adding a `index.html` page at the `pagenate_path`
|
212
|
+
|
213
|
+
```yaml
|
214
|
+
---
|
215
|
+
layout: paginate
|
216
|
+
title: My Blog
|
217
|
+
---
|
218
|
+
```
|
219
|
+
|
220
|
+
## Contributing
|
221
|
+
|
222
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/athackst/jekyll-theme-profile. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](https://www.contributor-covenant.org/) code of conduct.
|
223
|
+
|
224
|
+
See [Contributing](/CONTRIBUTING.md) for more information on contributing to this theme.
|
225
|
+
|
226
|
+
## License
|
227
|
+
|
228
|
+
The theme is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/_config.yml
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
repository: athackst/jekyll-theme-profile
|
2
|
+
url: https://www.althack.dev
|
3
|
+
baseurl: /jekyll-theme-profile
|
4
|
+
style: topbar # One of "stacked", "sidebar", "topbar"
|
5
|
+
image: /assets/img/user-image.jpg
|
6
|
+
|
7
|
+
plugins:
|
8
|
+
- jekyll-github-metadata
|
9
|
+
- jekyll-octicons
|
10
|
+
- jekyll-paginate
|
11
|
+
- jekyll-seo-tag
|
12
|
+
- jemoji
|
13
|
+
|
14
|
+
defaults:
|
15
|
+
- scope:
|
16
|
+
path: "" # an empty string here means all files in the project
|
17
|
+
type: "posts"
|
18
|
+
values:
|
19
|
+
layout: "post"
|
20
|
+
breadcrumbs: true
|
21
|
+
permalink: /blog/:year/:month/:day/:title.html
|
22
|
+
|
23
|
+
exclude:
|
24
|
+
- "Gemfile"
|
25
|
+
- "Gemfile.lock"
|
26
|
+
- "node_modules"
|
27
|
+
- "vendor/bundle/"
|
28
|
+
- "vendor/cache/"
|
29
|
+
- "vendor/gems/"
|
30
|
+
- "vendor/ruby/"
|
31
|
+
- .vscode
|
32
|
+
- .devcontainer
|
33
|
+
- .deprecated
|
34
|
+
- .github
|
35
|
+
- "*.gem"
|
36
|
+
|
37
|
+
paginate: 6
|
38
|
+
paginate_path: "/assets/blog/page:num"
|
39
|
+
|
40
|
+
markdown: kramdown
|
41
|
+
|
42
|
+
posts_limit: 3
|
43
|
+
|
44
|
+
links:
|
45
|
+
- name: Example page with topbar
|
46
|
+
web_url: /page-topbar
|
47
|
+
image_url: /assets/img/icon-topbar.png
|
48
|
+
- name: Example page with sidebar
|
49
|
+
web_url: /page-sidebar
|
50
|
+
image_url: /assets/img/icon-sidebar.png
|
51
|
+
- name: Example page with header stacked
|
52
|
+
web_url: /page-stacked
|
53
|
+
image_url: /assets/img/icon-stacked.png
|
54
|
+
|
55
|
+
repositories:
|
56
|
+
sort_by: stars
|
57
|
+
# sort_by options:
|
58
|
+
# - pushed
|
59
|
+
# - stars
|
60
|
+
limit: 24
|
61
|
+
exclude:
|
62
|
+
archived: true
|
63
|
+
forks: true
|
64
|
+
repositories:
|
65
|
+
# - respositories to exclude
|
@@ -0,0 +1,121 @@
|
|
1
|
+
{%- assign user = site.github.owner %}
|
2
|
+
{%- if page.path contains '_posts' %}
|
3
|
+
{%- assign page_title = page.title %}
|
4
|
+
{%- assign meta_description = page.content | strip_html | strip_newlines | xml_escape | truncate: 300 %}
|
5
|
+
{%- elsif site.title %}
|
6
|
+
{%- assign page_title = site.title %}
|
7
|
+
{%- assign meta_description = site.description %}
|
8
|
+
{%- else %}
|
9
|
+
{%- assign page_title = user.name %}
|
10
|
+
{%- assign meta_description = user.bio | strip_html | strip_newlines | xml_escape | truncate: 300 %}
|
11
|
+
{%- endif %}
|
12
|
+
<head>
|
13
|
+
<meta charset="utf-8">
|
14
|
+
<title>{{ page_title }}</title>
|
15
|
+
<meta name="description" content="{{ meta_description }}" />
|
16
|
+
<meta property="og:title" content="{{ user.name }}" />
|
17
|
+
<meta property="og:image" content="{%- if page.image %}{{ page.image }}{%- else %}{{ user.avatar_url }}{%- endif %}" />
|
18
|
+
<meta property="og:description" content="{{ meta_description }}" />
|
19
|
+
<meta property="og:type" content="profile" />
|
20
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
21
|
+
<link href="{{ '/assets/css/style.css' | relative_url }}" rel="stylesheet" type="text/css">
|
22
|
+
<link rel="icon" type="image/x-icon" href="/assets/img/favicon.ico">
|
23
|
+
<link rel="canonical" href="{{ site.url }}{{ site.baseurl }}{{ page.url }}">
|
24
|
+
|
25
|
+
|
26
|
+
{%- if site.analytics.provider == 'google' %}
|
27
|
+
<!-- Google tag (gtag.js) -->
|
28
|
+
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.analytics.property }}"></script>
|
29
|
+
<script>
|
30
|
+
window.dataLayer = window.dataLayer || [];
|
31
|
+
function gtag() { dataLayer.push(arguments); }
|
32
|
+
gtag('js', new Date());
|
33
|
+
|
34
|
+
gtag('config', '{{ site.analytics.property }}');
|
35
|
+
</script>
|
36
|
+
{%- endif %}
|
37
|
+
|
38
|
+
<script>
|
39
|
+
document.addEventListener('DOMContentLoaded', function () {
|
40
|
+
var themeToggle = document.getElementById('theme-toggle');
|
41
|
+
var themeIcon = document.getElementById('theme-icon');
|
42
|
+
var htmlElement = document.getElementsByTagName('html')[0];
|
43
|
+
|
44
|
+
function getCurrentMode() {
|
45
|
+
return htmlElement.getAttribute('data-color-mode');
|
46
|
+
}
|
47
|
+
|
48
|
+
function getModeFromCookie() {
|
49
|
+
var cookieValue = getCookie('colorMode');
|
50
|
+
if (cookieValue !== null && (cookieValue === 'auto' || cookieValue === 'dark' || cookieValue === 'light')) {
|
51
|
+
return cookieValue;
|
52
|
+
} else {
|
53
|
+
// Default to 'auto' mode if the cookie is not set or has an invalid value
|
54
|
+
return 'auto';
|
55
|
+
}
|
56
|
+
}
|
57
|
+
|
58
|
+
function setCookie(name, value, days) {
|
59
|
+
var expires = "";
|
60
|
+
if (days) {
|
61
|
+
var date = new Date();
|
62
|
+
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
|
63
|
+
expires = "; expires=" + date.toUTCString();
|
64
|
+
}
|
65
|
+
document.cookie = name + "=" + (value || "") + expires + "; path=/";
|
66
|
+
}
|
67
|
+
|
68
|
+
function getCookie(name) {
|
69
|
+
var nameEQ = name + "=";
|
70
|
+
var ca = document.cookie.split(';');
|
71
|
+
for (var i = 0; i < ca.length; i++) {
|
72
|
+
var c = ca[i];
|
73
|
+
while (c.charAt(0) === ' ') c = c.substring(1, c.length);
|
74
|
+
if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
|
75
|
+
}
|
76
|
+
return null;
|
77
|
+
}
|
78
|
+
|
79
|
+
function getNextMode() {
|
80
|
+
var currentMode = getCurrentMode();
|
81
|
+
var nextMode;
|
82
|
+
if (currentMode === 'auto') {
|
83
|
+
nextMode = 'dark';
|
84
|
+
} else if (currentMode === 'dark') {
|
85
|
+
nextMode = 'light'
|
86
|
+
} else {
|
87
|
+
nextMode = 'auto'
|
88
|
+
}
|
89
|
+
return nextMode;
|
90
|
+
}
|
91
|
+
|
92
|
+
function updateTheme(nextMode) {
|
93
|
+
htmlElement.setAttribute('data-color-mode', nextMode);
|
94
|
+
updateThemeIcon(nextMode);
|
95
|
+
setCookie('colorMode', nextMode, 365); // Save the preference for 365 days
|
96
|
+
}
|
97
|
+
|
98
|
+
function updateThemeIcon(nextMode) {
|
99
|
+
if (nextMode === 'dark') {
|
100
|
+
nextIcon = 'moon';
|
101
|
+
} else if (nextMode === 'light') {
|
102
|
+
nextIcon = 'sun'
|
103
|
+
} else {
|
104
|
+
nextIcon = 'zap';
|
105
|
+
}
|
106
|
+
// Set the span to the themeIcon class
|
107
|
+
themeIcon.classList = "octicon octicon-" + nextIcon + "-24";
|
108
|
+
}
|
109
|
+
|
110
|
+
themeToggle.addEventListener('click', function () {
|
111
|
+
updateTheme(getNextMode());
|
112
|
+
// updateThemeIcon(getNextMode());
|
113
|
+
});
|
114
|
+
|
115
|
+
// Initialize the theme icon based on the initial state
|
116
|
+
// updateThemeIcon(getModeFromCookie());
|
117
|
+
updateTheme(getModeFromCookie());
|
118
|
+
});
|
119
|
+
</script>
|
120
|
+
|
121
|
+
</head>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
{%- if link.web_url %}
|
2
|
+
<a href="{{ link.web_url | relative_url }}"
|
3
|
+
class="github-component position-relative hover-grow no-underline d-flex flex-column text-center border border-gray-light rounded-1 p-1">
|
4
|
+
<div class="d-inline-flex flex-items-center">
|
5
|
+
<div class="avatar-7">
|
6
|
+
{%- if link.image_url %}
|
7
|
+
<img src="{{ link.image_url | relative_url }}" width="48" height="48"
|
8
|
+
class="rounded-1 box-shadow-none img-contain float-left" alt="{{ link.name }}">
|
9
|
+
{%- endif %}
|
10
|
+
</div>
|
11
|
+
<div class="flex-auto p-2">
|
12
|
+
<p class="f3 lh-condensed text-center link-gray-dark mb-0">{{ link.name }}</p>
|
13
|
+
{%- if link.description %}
|
14
|
+
<p class="f5 text-gray text-center mb-0 mt-1">{{ link.description }}</p>
|
15
|
+
{%- endif %}
|
16
|
+
</div>
|
17
|
+
<div class="avatar-7"></div>
|
18
|
+
</div>
|
19
|
+
</a>
|
20
|
+
{%- else %}
|
21
|
+
<div class="github-component position-relative height-full d-flex flex-column text-center p-1">
|
22
|
+
<div class="d-inline-flex flex-items-center">
|
23
|
+
<div class="avatar-7">
|
24
|
+
{%- if link.image_url %}
|
25
|
+
<img src="{{ link.image_url | relative_url }}" width="48" height="48"
|
26
|
+
class="rounded-1 box-shadow-none img-contain float-left" alt="{{ link.name }}">
|
27
|
+
{%- endif %}
|
28
|
+
</div>
|
29
|
+
<div class="flex-auto">
|
30
|
+
<p class="f3 lh-condensed text-center mt-1">{{ link.name }}</p>
|
31
|
+
{%- if link.description %}
|
32
|
+
<p class="f5 text-gray text-center mt-1">{{ link.description }}</p>
|
33
|
+
{%- endif %}
|
34
|
+
</div>
|
35
|
+
<div class="avatar-7"></div>
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
{%- endif %}
|
@@ -0,0 +1,58 @@
|
|
1
|
+
{%- assign user = site.github.owner %}
|
2
|
+
|
3
|
+
{%- if site.title %}
|
4
|
+
{%- assign name = site.title %}
|
5
|
+
{%- elsif user.name %}
|
6
|
+
{%- assign name = user.name %}
|
7
|
+
{%- else %}
|
8
|
+
{%- assign name = user.login %}
|
9
|
+
{%- endif %}
|
10
|
+
|
11
|
+
{%- if site.image %}
|
12
|
+
{%- assign user_img = site.image %}
|
13
|
+
{%- else %}
|
14
|
+
{%- assign user_img = user.avatar_url %}
|
15
|
+
{%- endif %}
|
16
|
+
|
17
|
+
{%- assign metadata_styles = 'd-flex flex-items-center flex-justify-center mb-3' %}
|
18
|
+
<a href="{{ site.baseurl }}/">
|
19
|
+
<div class="img-masthead">
|
20
|
+
<img src="{{ user_img | relative_url }}" alt="{{ name }}" class="avatar avatar-user rounded-circle border color-border-default">
|
21
|
+
</div>
|
22
|
+
</a>
|
23
|
+
<h1 class="mb-2 lh-condensed">{{ name }}</h1>
|
24
|
+
<p class="mb-3 f4">
|
25
|
+
{{ user.bio }}
|
26
|
+
</p>
|
27
|
+
|
28
|
+
<div class="f4 mb-6">
|
29
|
+
{%- if include.metadata %}
|
30
|
+
|
31
|
+
{%- if user.name %}
|
32
|
+
<div class="{{ metadata_styles }}">
|
33
|
+
{% octicon mark-github height:20 class:"mr-2 v-align-middle" aria-label:GitHub %}
|
34
|
+
<a href="https://github.com/{{ user.login }}">
|
35
|
+
@{{ user.login }}
|
36
|
+
</a>
|
37
|
+
</div>
|
38
|
+
{%- endif %}
|
39
|
+
{%- if user.email %}
|
40
|
+
<div class="{{ metadata_styles }}">
|
41
|
+
{% octicon mail height:20 class:"mr-2 v-align-middle" aria-label:email %}
|
42
|
+
<a href="mailto:{{ user.email }}">
|
43
|
+
{{ user.email }}
|
44
|
+
</a>
|
45
|
+
</div>
|
46
|
+
{%- endif %}
|
47
|
+
{%- if user.location %}
|
48
|
+
<div class="{{ metadata_styles }}">
|
49
|
+
{% octicon location height:20 class:"mr-2 v-align-middle" aria-label:Location %}
|
50
|
+
{{ user.location }}
|
51
|
+
</div>
|
52
|
+
{%- endif %}
|
53
|
+
|
54
|
+
{%- endif %}
|
55
|
+
{%- if site.social_media %}
|
56
|
+
{%- include social.html %}
|
57
|
+
{%- endif %}
|
58
|
+
</div>
|
data/_includes/nav.html
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
<div class="f5 d-flex">
|
2
|
+
{%- if include.breadcrumbs %}
|
3
|
+
<div class="d-flex flex-items-center">
|
4
|
+
<nav aria-label="Breadcrumb">
|
5
|
+
<ol class="breadcrumb">
|
6
|
+
{%- assign crumbs = page.url | split: '/' %}
|
7
|
+
{%- assign url = "/" %}
|
8
|
+
{%- for crumb in crumbs %}
|
9
|
+
{%- if crumb == "" %}
|
10
|
+
<li class="breadcrumb-item">
|
11
|
+
<a href="{{ site.baseurl}}/">home</a>
|
12
|
+
</li>
|
13
|
+
{%- continue %}
|
14
|
+
{%- endif %}
|
15
|
+
{%- assign asset_crumb = crumb | prepend: "assets/" | append: "/" %}
|
16
|
+
{%- assign asset_url = url | append: asset_crumb %}
|
17
|
+
{%- assign isa_asset = site.pages | where: "url", asset_url | first %}
|
18
|
+
{%- assign url = url | append: crumb %}
|
19
|
+
{%- assign isa_page = site.pages | where: "url", url | first %}
|
20
|
+
{%- assign isa_post = site.posts | where: "url", url | first %}
|
21
|
+
|
22
|
+
{%- assign nice_crumb = crumb | url_decode | replace: ".html", "" | replace: "-", " " | replace: "_", " " | downcase %}
|
23
|
+
|
24
|
+
{%- if page.url == url %}
|
25
|
+
<li class="breadcrumb-item breadcrumb-item-selected" aria-current="page">
|
26
|
+
<a href="{{ page.url | relative_url }}">{{ nice_crumb }}</a>
|
27
|
+
</li>
|
28
|
+
{%- elsif isa_page or isa_post %}
|
29
|
+
<li class="breadcrumb-item">
|
30
|
+
<a href="{{ url | relative_url }}">{{ nice_crumb }}</a>
|
31
|
+
</li>
|
32
|
+
{%- elsif isa_asset %}
|
33
|
+
<li class="breadcrumb-item">
|
34
|
+
<a href="{{ asset_url | relative_url }}">{{ nice_crumb }}</a>
|
35
|
+
</li>
|
36
|
+
{%- else %}
|
37
|
+
<li class="breadcrumb-item">
|
38
|
+
{{ nice_crumb }}
|
39
|
+
</li>
|
40
|
+
{%- endif %}
|
41
|
+
{%- unless crumb == crumbs.last %}{%- assign url = url | append: "/" %}{%- endunless %}
|
42
|
+
{%- endfor %}
|
43
|
+
</ol>
|
44
|
+
</nav>
|
45
|
+
</div>
|
46
|
+
{%- endif %}
|
47
|
+
<div class="flex-1">
|
48
|
+
</div>
|
49
|
+
<div>
|
50
|
+
<button id="theme-toggle" class="btn btn-sm mr-2" type="button"><span id="theme-icon"
|
51
|
+
class="octicon octicon-moon-24"></span></button>
|
52
|
+
</div>
|
53
|
+
</div>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<!-- <div class="height-full text-left border border-gray-light rounded-1 p-3"> -->
|
2
|
+
<!-- <div class="d-flex flex-justify-between flex-items-start mb-1"> -->
|
3
|
+
<div class="TimelineItem">
|
4
|
+
<div class="TimelineItem-badge">{% octicon comment height:16 %}</div>
|
5
|
+
<div class="TimelinItem-body">
|
6
|
+
<span class="f3 lh-condensed mb-1">
|
7
|
+
<a href="{{ post.url | relative_url }}">
|
8
|
+
{{ post.title }}
|
9
|
+
</a>
|
10
|
+
</span>
|
11
|
+
<!-- </div> -->
|
12
|
+
<div class="text-gray mb-2 ws-normal">{{ post.date | date: "%b %d, %Y"}}</div>
|
13
|
+
<div class="summary"> {{ post.excerpt }}</div>
|
14
|
+
</div>
|
15
|
+
</div>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
{%- assign post_limit = 3 %}
|
2
|
+
{%- if include.limit %}
|
3
|
+
{%- assign post_limit = include.limit %}
|
4
|
+
{%- endif %}
|
5
|
+
|
6
|
+
<div class="gutter-condensed mb-4">
|
7
|
+
{%- for post in site.posts limit: {{post_limit}} %}
|
8
|
+
{%- include post-card.html %}
|
9
|
+
{%- endfor %}
|
10
|
+
</div>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<div class="github-component d-flex flex-column flex-justify-between height-full text-left border border-gray-light rounded-1 p-3">
|
2
|
+
<div>
|
3
|
+
<div class="d-flex flex-justify-between flex-items-start mb-1">
|
4
|
+
<h1 class="f4 lh-condensed mb-1">
|
5
|
+
{% octicon repo height:20 class:"mr-1 v-align-middle" fill:"#586069" aria-label:repo %}
|
6
|
+
<a href="{{repository.html_url}}">{{ repository.name }}</a>
|
7
|
+
</h1>
|
8
|
+
</div>
|
9
|
+
<div class="text-gray mb-2 ws-normal">{{ repository.description }}</div>
|
10
|
+
{%- if repository.homepage != blank %}
|
11
|
+
<div class="mb-2 d-flex flex-items-center Link--secondary">
|
12
|
+
{% octicon link height:16 class:"mr-2" %}
|
13
|
+
<span class="flex-auto min-width-0 css-truncate css-truncate-target width-fit">
|
14
|
+
<a title="{{ repository.homepage }}" role="link" target="_blank" class="text-bold" href="{{ repository.homepage }}">{{repository.homepage}}</a>
|
15
|
+
</span>
|
16
|
+
</div>
|
17
|
+
{%- endif %}
|
18
|
+
</div>
|
19
|
+
<div class="d-flex f6">
|
20
|
+
<p class="mb-0 mt-2 f6 color-fg-muted">
|
21
|
+
{%- if repository.language %}
|
22
|
+
<span class="d-inline-block mr-1">
|
23
|
+
<span class="repo-language-color" data-language="{{ repository.language }}"></span>
|
24
|
+
<span itemprop="programmingLanguage">{{ repository.language }}</span>
|
25
|
+
</span>
|
26
|
+
{%- endif %}
|
27
|
+
{%- if repository.stargazers_count %}
|
28
|
+
<a href="{{ repository.html_url }}/stargazers" class="mr-1 Link--muted">
|
29
|
+
{% octicon star height:16 fill:"#ffffff" %} {{ repository.stargazers_count }}
|
30
|
+
</a>
|
31
|
+
{%- endif %}
|
32
|
+
{%- if repository.forks_count %}
|
33
|
+
<a href="{{ repository.html_url }}/network/members" class="mr-1 Link--muted">
|
34
|
+
{% octicon repo-forked height:16 fill:"#ffffff" %} {{ repository.forks_count }}
|
35
|
+
</a>
|
36
|
+
{%- endif %}
|
37
|
+
</p>
|
38
|
+
</div>
|
39
|
+
</div>
|