jekyll-theme-profile 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +228 -0
  4. data/_config.yml +65 -0
  5. data/_includes/footer.html +3 -0
  6. data/_includes/header.html +121 -0
  7. data/_includes/link-card.html +38 -0
  8. data/_includes/links.html +7 -0
  9. data/_includes/masthead.html +58 -0
  10. data/_includes/nav.html +53 -0
  11. data/_includes/post-card.html +15 -0
  12. data/_includes/posts.html +10 -0
  13. data/_includes/repo-card.html +39 -0
  14. data/_includes/repositories.html +25 -0
  15. data/_includes/social.html +139 -0
  16. data/_layouts/default.html +97 -0
  17. data/_layouts/home.html +33 -0
  18. data/_layouts/page.html +7 -0
  19. data/_layouts/paginate.html +47 -0
  20. data/_layouts/post.html +25 -0
  21. data/_sass/_highlight-syntax.scss +66 -0
  22. data/_sass/_language-colors.scss +1443 -0
  23. data/_sass/_main.scss +45 -0
  24. data/_sass/jekyll-theme-profile.scss +5 -0
  25. data/assets/blog/index.html +4 -0
  26. data/assets/brands/behance.svg +1 -0
  27. data/assets/brands/docker.svg +1 -0
  28. data/assets/brands/dribbble.svg +1 -0
  29. data/assets/brands/facebook.svg +1 -0
  30. data/assets/brands/hackerrank.svg +1 -0
  31. data/assets/brands/instagram.svg +1 -0
  32. data/assets/brands/keybase.svg +1 -0
  33. data/assets/brands/linkedin.svg +1 -0
  34. data/assets/brands/mastodon.svg +1 -0
  35. data/assets/brands/medium.svg +1 -0
  36. data/assets/brands/stackoverflow.svg +1 -0
  37. data/assets/brands/telegram.svg +1 -0
  38. data/assets/brands/twitter.svg +1 -0
  39. data/assets/brands/unsplash.svg +1 -0
  40. data/assets/brands/vk.svg +1 -0
  41. data/assets/brands/vscode.svg +1 -0
  42. data/assets/brands/youtube.svg +1 -0
  43. data/assets/css/style.scss +4 -0
  44. data/assets/img/blog.png +0 -0
  45. data/assets/img/favicon.ico +0 -0
  46. data/assets/img/icon-sidebar.png +0 -0
  47. data/assets/img/icon-stacked.png +0 -0
  48. data/assets/img/icon-topbar.png +0 -0
  49. data/assets/img/links.png +0 -0
  50. data/assets/img/octocat.png +0 -0
  51. data/assets/img/repositories.png +0 -0
  52. data/assets/img/sidebar-laptop.png +0 -0
  53. data/assets/img/sidebar-phone.png +0 -0
  54. data/assets/img/sidebar-preview.png +0 -0
  55. data/assets/img/sidebar-tablet.png +0 -0
  56. data/assets/img/social-media.png +0 -0
  57. data/assets/img/stacked-laptop.png +0 -0
  58. data/assets/img/stacked-phone.png +0 -0
  59. data/assets/img/stacked-preview.png +0 -0
  60. data/assets/img/stacked-tablet.png +0 -0
  61. data/assets/img/tobpar-phone.png +0 -0
  62. data/assets/img/topbar-laptop.png +0 -0
  63. data/assets/img/topbar-preview.png +0 -0
  64. data/assets/img/topbar-tablet.png +0 -0
  65. data/assets/img/user-image.jpg +0 -0
  66. 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,3 @@
1
+ <footer>
2
+
3
+ </footer>
@@ -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,7 @@
1
+ <div class="d-flex flex-wrap gutter-condensed mb-4">
2
+ {%- for link in site.links %}
3
+ <div class="col-12 mb-3">
4
+ {%- include link-card.html %}
5
+ </div>
6
+ {%- endfor %}
7
+ </div>
@@ -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>
@@ -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>