jekyll-theme-systemhalted 0.1.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ac7ded62652553410b0060512372e1684a01a9ab3f29a4ec11bd030dae6ec5b8
4
- data.tar.gz: c10c055db1cf0141a51c03f71df949288a3c2318f5923d510719867bca3914ce
3
+ metadata.gz: a93bdbc5e0531a1c25af0c6766c7d1d61b29382c47afe4c04cc98b591fc9bb47
4
+ data.tar.gz: dee1e85a07ccd2c78203093ffc28aa664ac8f8274dc7b8381d1f687d0bfdd3d3
5
5
  SHA512:
6
- metadata.gz: 7b2ed72ce0772f3a3d88f34d7538b405abd1f2560433a72f074cf6b5d61f0637e26bc287829ee5ad85fdeb1c7e5373180623a2928509aa9d3c5de0300c3564ed
7
- data.tar.gz: 61e03be56d0ca29e36ad4ff1875c27e338eeab71abfc7bd63666bdfeeefac2ca94d152b380aed05f7cbc7d7adb09d07e8ed4a8f052a050cadb886900b3ccee2e
6
+ metadata.gz: b75519fa5b391002c952125a4468538f8ed6c8abd1de27b855bcd0c23e0fa65be6b603bafea4f45111b5ce9039b78b5c60a71cf9750b0fb3ba8571e1ee179367
7
+ data.tar.gz: bfba7332e3a1ed430c57a6a3ff2194418ea5f38d8b12afab0c178ee704fae7e42c2b7b0f5a942c01e34708cdd1581f54df001df781bc685efbb6d10d908aa3df
data/CHANGELOG.md CHANGED
@@ -2,3 +2,9 @@
2
2
 
3
3
  ## 0.1.0
4
4
  - Initial release of the Systemhalted Jekyll theme gem.
5
+
6
+ ## 0.1.1
7
+ - Documentation update
8
+
9
+ ## 1.0.0
10
+ - Update template to include archives, index and tags as layout.
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
- # Systemhalted Theme
2
- [![Gem Version](https://badge.fury.io/rb/jekyll-theme-systemhalted.svg)](https://badge.fury.io/rb/jekyll-theme-systemhalted)
1
+ # Systemhalted Theme [![Gem Version](https://badge.fury.io/rb/jekyll-theme-systemhalted.svg?icon=si%3Arubygems)](https://badge.fury.io/rb/jekyll-theme-systemhalted)
2
+
3
3
  A Jekyll theme for personal blogs with a bold homepage grid, archive views, tags/categories, a search overlay, theme toggle, and optional Disqus comments.
4
4
 
5
5
  ## Features
@@ -71,17 +71,53 @@ description: One-line summary for previews.
71
71
  Drafts live in `example/collections/_drafts/` for the demo site. Preview drafts with:
72
72
  `bundle exec jekyll serve --source example --destination example/_site --livereload --drafts`
73
73
 
74
+ ### Featured Images
75
+
76
+ You can save your images anywhere. Just provide the correct link. For demo example, we have created an assets/images folder where demo images are currently saved.
77
+
74
78
  ## Pages
75
79
  The demo site's pages live under `example/`. In your own site, create pages at your site root.
76
80
  Use `layout: page` for standard content pages or `layout: default` if you want a fully custom layout.
77
81
 
78
- Key pages included in the demo site (copy these into your own site if you want them):
79
- - `index.html`: paginated home grid.
80
- - `archives.html`: year-grouped archive with client-side sorting.
81
- - `categories.html`: category taxonomy grouped by theme.
82
- - `tags.html`: tag archive.
83
- - `featured.html`: posts with `featured: true`.
84
- - `about.md`, `404.md`: static pages.
82
+ The theme provides layouts for the common archive pages, so you only need a front-matter stub (no HTML):
83
+ ```yaml
84
+ # index.html
85
+ ---
86
+ layout: index
87
+ title: Home
88
+ ---
89
+
90
+ # archives.md
91
+ ---
92
+ layout: archives
93
+ title: Archives
94
+ ---
95
+
96
+ # categories.md
97
+ ---
98
+ layout: categories
99
+ title: Categories
100
+ permalink: /categories/
101
+ ---
102
+
103
+ # tags.md
104
+ ---
105
+ layout: tags
106
+ title: Tags
107
+ ---
108
+ ```
109
+
110
+ Key layouts included in the theme:
111
+ - `layout: index`: paginated home grid.
112
+ - `layout: archives`: year-grouped archive with client-side sorting.
113
+ - `layout: categories`: category taxonomy grouped by theme.
114
+ - `layout: tags`: tag archive.
115
+ - `layout: about`: standard about page (markdown content goes in the page file).
116
+ - `layout: page`, `layout: default`: generic pages.
117
+
118
+ Featured posts and error pages are still demo templates you can copy:
119
+ - `example/featured.html`: posts with `featured: true`.
120
+ - `example/404.md`: not found page.
85
121
 
86
122
  ## Collections
87
123
  Collections live under `example/collections/` in the demo site (see `collections_dir` in `example/_config.yml`).
@@ -119,8 +155,8 @@ sidebar:
119
155
  The sidebar also includes an "Annotate me" toggle that loads Hypothes.is on demand. Remove it from `_includes/sidebar.html` if you do not want annotation support.
120
156
 
121
157
  ## Categories and tags
122
- Category themes are defined in `_data/taxonomy.yml` and used on `categories.html` and in related-post logic.
123
- Tags are generated from post front matter and listed on `tags.html`.
158
+ Category themes are defined in `_data/taxonomy.yml` and used on the `categories` layout and in related-post logic.
159
+ Tags are generated from post front matter and listed on the `tags` layout.
124
160
 
125
161
  ## Comments and analytics
126
162
  Disqus comments are supported:
@@ -150,6 +186,16 @@ If deploying to GitHub Pages:
150
186
  - For `username.github.io`, set `url: https://username.github.io` and `baseurl: ""`.
151
187
  - For `username.github.io/repo`, set `url: https://username.github.io` and `baseurl: "/repo"`.
152
188
 
189
+
153
190
  ## Notes
154
191
  - Use relative URLs (`| relative_url`) for internal links and assets.
155
192
  - Keep filenames kebab-case and asset names short.
193
+
194
+ ## Screenshots
195
+
196
+ !["Demo"](docs/demo.png)
197
+ !["Dark Demo"](docs/dark_demo.png)
198
+ !["Demo Sidebar"](docs/demo_sidebar.png)
199
+ !["Demo Post"](docs/demo_post.png)
200
+ !["Dark Demo Post"](docs/dark_demo_post.png)
201
+ !["Demo Archive"](docs/demo_archives.png)
@@ -0,0 +1,5 @@
1
+ ---
2
+ layout: page
3
+ ---
4
+
5
+ {{ content }}
@@ -0,0 +1,49 @@
1
+ ---
2
+ layout: page
3
+ ---
4
+
5
+ {{ content }}
6
+
7
+ <h4>There are {{ site.posts | size }} published articles. </h4>
8
+
9
+ <div class="archive-controls">
10
+ <label for="archive-sort">Sort by</label>
11
+ <select id="archive-sort" class="archive-sort">
12
+ <option value="year-desc" selected>Year (newest)</option>
13
+ <option value="year-asc">Year (oldest)</option>
14
+ <option value="count-desc">Post count (high to low)</option>
15
+ <option value="count-asc">Post count (low to high)</option>
16
+ </select>
17
+ </div>
18
+
19
+ {% assign posts_by_year = site.posts | group_by_exp: "post", "post.date | date: '%Y'" %}
20
+
21
+ <div id="archive-years">
22
+ {% for year in posts_by_year %}
23
+ {% assign year_count = year.items | size %}
24
+ <details class="archive-year" data-year="{{ year.name }}" data-count="{{ year_count }}"{% if forloop.first %} open{% endif %}>
25
+ <summary id="year-{{ year.name }}" class="archive-year-summary">
26
+ <span class="archive-year-title">{{ year.name }}</span>
27
+ <span class="archive-year-count">({{ year_count }})</span>
28
+ </summary>
29
+ <ul class="archive-posts">
30
+ {% for post in year.items %}
31
+ {% assign post_summary = post.description | default: post.excerpt | strip_html | strip_newlines | truncatewords: 40 %}
32
+ <li class="archive-post">
33
+ <details class="archive-post-details">
34
+ <summary class="archive-post-summary">
35
+ <span class="archive-post-meta">
36
+ <time class="post-list-date" datetime="{{ post.date | date_to_xmlschema }}" itemprop="datePublished">{{ post.date | date: "%B %d, %Y" }}</time>
37
+ <a class="archive-post-title" href="{{ post.url | relative_url }}">{{ post.title }}</a>
38
+ </span>
39
+ </summary>
40
+ {% if post_summary and post_summary != "" %}
41
+ <p class="archive-post-description">{{ post_summary }}</p>
42
+ {% endif %}
43
+ </details>
44
+ </li>
45
+ {% endfor %}
46
+ </ul>
47
+ </details>
48
+ {% endfor %}
49
+ </div>
@@ -0,0 +1,107 @@
1
+ ---
2
+ layout: page
3
+ ---
4
+
5
+ {{ content }}
6
+
7
+ {% assign themes = site.data.taxonomy.themes %}
8
+
9
+ {% for theme in themes %}
10
+ {%- comment -%}
11
+ Compute how many posts exist across all categories in this theme
12
+ {%- endcomment -%}
13
+ {% assign total_posts = 0 %}
14
+ {% for cat in theme.categories %}
15
+ {% assign posts = site.categories[cat] %}
16
+ {% if posts %}
17
+ {% assign post_count = posts | size %}
18
+ {% assign total_posts = total_posts | plus: post_count %}
19
+ {% endif %}
20
+ {% endfor %}
21
+
22
+ {% if total_posts > 0 %}
23
+ <h2 id="{{ theme.id }}">{{ theme.title }}</h2>
24
+
25
+ {% if theme.description %}
26
+ <p>{{ theme.description }}</p>
27
+ {% endif %}
28
+
29
+ {% for cat in theme.categories %}
30
+ {% assign posts = site.categories[cat] %}
31
+ {% if posts %}
32
+ {% assign posts = posts | sort: "date" | reverse %}
33
+ {% endif %}
34
+ {% if posts and posts.size > 0 %}
35
+ <details id="cat-{{ cat | slugify }}" class="archive-year">
36
+ <summary class="archive-year-summary">
37
+ <span class="archive-year-title">{{ cat }}</span>
38
+ <span class="archive-year-count">({{ posts.size }})</span>
39
+ </summary>
40
+ <ul class="archive-posts">
41
+ {% for post in posts %}
42
+ {% assign post_summary = post.description | default: post.excerpt | strip_html | strip_newlines | truncatewords: 40 %}
43
+ <li class="archive-post">
44
+ <details class="archive-post-details">
45
+ <summary class="archive-post-summary">
46
+ <span class="archive-post-meta">
47
+ <time class="post-list-date" datetime="{{ post.date | date_to_xmlschema }}" itemprop="datePublished">{{ post.date | date: "%B %d, %Y" }}</time>
48
+ <a class="archive-post-title" href="{{ post.url | relative_url }}">{{ post.title }}</a>
49
+ </span>
50
+ </summary>
51
+ {% if post_summary and post_summary != "" %}
52
+ <p class="archive-post-description">{{ post_summary }}</p>
53
+ {% endif %}
54
+ </details>
55
+ </li>
56
+ {% endfor %}
57
+ </ul>
58
+ </details>
59
+ {% endif %}
60
+ {% endfor %}
61
+ {% endif %}
62
+ {% endfor %}
63
+
64
+ <h2>Other categories</h2>
65
+
66
+ {% assign taxonomy_cats = "" | split: "," %}
67
+ {% for theme in themes %}
68
+ {% assign taxonomy_cats = taxonomy_cats | concat: theme.categories %}
69
+ {% endfor %}
70
+
71
+ {% for cat in site.categories %}
72
+ {% assign cat_name = cat[0] %}
73
+ {% assign posts = cat[1] | sort: "date" | reverse %}
74
+ {% assign in_taxonomy = false %}
75
+
76
+ {% if taxonomy_cats contains cat_name %}
77
+ {% assign in_taxonomy = true %}
78
+ {% endif %}
79
+
80
+ {% unless in_taxonomy %}
81
+ <details id="cat-{{ cat_name | slugify }}" class="archive-year">
82
+ <summary class="archive-year-summary">
83
+ <span class="archive-year-title">{{ cat_name }}</span>
84
+ <span class="archive-year-count">({{ posts.size }})</span>
85
+ </summary>
86
+
87
+ <ul class="archive-posts">
88
+ {% for post in posts %}
89
+ {% assign post_summary = post.description | default: post.excerpt | strip_html | strip_newlines | truncatewords: 40 %}
90
+ <li class="archive-post">
91
+ <details class="archive-post-details">
92
+ <summary class="archive-post-summary">
93
+ <span class="archive-post-meta">
94
+ <time class="post-list-date" datetime="{{ post.date | date_to_xmlschema }}" itemprop="datePublished">{{ post.date | date: "%B %d, %Y" }}</time>
95
+ <a class="archive-post-title" href="{{ post.url | relative_url }}">{{ post.title }}</a>
96
+ </span>
97
+ </summary>
98
+ {% if post_summary and post_summary != "" %}
99
+ <p class="archive-post-description">{{ post_summary }}</p>
100
+ {% endif %}
101
+ </details>
102
+ </li>
103
+ {% endfor %}
104
+ </ul>
105
+ </details>
106
+ {% endunless %}
107
+ {% endfor %}
@@ -0,0 +1,99 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ {{ content }}
6
+
7
+ <div class="post-grid">
8
+ {% for post in paginator.posts %}
9
+ {% assign summary = post.description | default: post.excerpt | strip_html | truncate: 140 %}
10
+ {% assign author_name = post.author | default: site.author.name %}
11
+ {% assign thumb = post.featured_image %}
12
+ <article class="post-card">
13
+ <a class="card-media" href="{{ post.url | relative_url }}">
14
+ {% if thumb %}
15
+ <img src="{{ thumb | relative_url }}" alt="{{ post.featured_image_alt | default: post.title }}">
16
+ {% else %}
17
+ <div class="card-thumb-placeholder">
18
+ <span>{{ post.title | slice: 0, 1 | upcase }}</span>
19
+ </div>
20
+ {% endif %}
21
+ </a>
22
+ <div class="card-body">
23
+ <div class="card-meta">
24
+ <span class="card-date">{{ post.date | date: "%b %d, %Y" }}</span>
25
+ </div>
26
+ <h2 class="card-title">
27
+ <a href="{{ post.url | relative_url }}">{{ post.title }}</a>
28
+ </h2>
29
+ {% if summary %}
30
+ <p class="card-excerpt">{{ summary }}</p>
31
+ {% endif %}
32
+ <div class="card-author">
33
+ <div class="author-avatar">{{ author_name | slice: 0, 1 | upcase }}</div>
34
+ <span class="author-name">{{ author_name }}</span>
35
+ </div>
36
+ </div>
37
+ </article>
38
+ {% endfor %}
39
+ </div>
40
+
41
+ <nav class="pager" aria-label="Pagination">
42
+ {% assign total_pages = paginator.total_pages %}
43
+ {% assign current = paginator.page %}
44
+ {% assign paginate_path = site.paginate_path | default: '/page:num' %}
45
+
46
+ {% assign window = 2 %}
47
+ {% assign start_page = current | minus: window %}
48
+ {% if start_page < 2 %}{% assign start_page = 2 %}{% endif %}
49
+ {% assign end_page = current | plus: window %}
50
+ {% assign last_inner = total_pages | minus: 1 %}
51
+ {% if end_page > last_inner %}{% assign end_page = last_inner %}{% endif %}
52
+
53
+ {% if current > 1 %}
54
+ <a class="page-btn" href="{{ '/' | relative_url }}">First</a>
55
+ <a class="page-btn" href="{{ paginator.previous_page_path | relative_url }}">‹ Back</a>
56
+ {% else %}
57
+ <span class="page-btn disabled">First</span>
58
+ <span class="page-btn disabled">‹ Back</span>
59
+ {% endif %}
60
+
61
+ {% if current == 1 %}
62
+ <span class="page-btn active">1</span>
63
+ {% else %}
64
+ <a class="page-btn" href="{{ '/' | relative_url }}">1</a>
65
+ {% endif %}
66
+
67
+ {% if start_page > 2 %}
68
+ <span class="page-ellipsis">…</span>
69
+ {% endif %}
70
+
71
+ {% for page_num in (start_page..end_page) %}
72
+ {% assign page_link = paginate_path | replace: ':num', page_num %}
73
+ {% if page_num == current %}
74
+ <span class="page-btn active">{{ page_num }}</span>
75
+ {% else %}
76
+ <a class="page-btn" href="{{ page_link | relative_url }}">{{ page_num }}</a>
77
+ {% endif %}
78
+ {% endfor %}
79
+
80
+ {% if end_page < last_inner %}
81
+ <span class="page-ellipsis">…</span>
82
+ {% endif %}
83
+
84
+ {% if total_pages > 1 %}
85
+ {% if current == total_pages %}
86
+ <span class="page-btn active">{{ total_pages }}</span>
87
+ {% else %}
88
+ <a class="page-btn" href="{{ paginate_path | replace: ':num', total_pages | relative_url }}">{{ total_pages }}</a>
89
+ {% endif %}
90
+ {% endif %}
91
+
92
+ {% if paginator.next_page %}
93
+ <a class="page-btn" href="{{ paginator.next_page_path | relative_url }}">Next ›</a>
94
+ <a class="page-btn" href="{{ paginate_path | replace: ':num', total_pages | relative_url }}">Last</a>
95
+ {% else %}
96
+ <span class="page-btn disabled">Next ›</span>
97
+ <span class="page-btn disabled">Last</span>
98
+ {% endif %}
99
+ </nav>
@@ -0,0 +1,59 @@
1
+ ---
2
+ layout: page
3
+ ---
4
+
5
+ {{ content }}
6
+
7
+ {% assign tags_list = site.tags %}
8
+
9
+ <ul class="tag-box inline">
10
+ {% if tags_list.first[0] == null %}
11
+ {% for tag in tags_list %}
12
+ {% assign tag_id = tag | slugify %}
13
+ <li><a href="#{{ tag_id }}">{{ tag }}</a> <span>({{ site.tags[tag].size }})</span></li>
14
+ {% endfor %}
15
+ {% else %}
16
+ {% for tag in tags_list %}
17
+ {% assign tag_id = tag[0] | slugify %}
18
+ <li><a href="#{{ tag_id }}">{{ tag[0] }}</a> <span>({{ tag[1].size }})</span></li>
19
+ {% endfor %}
20
+ {% endif %}
21
+ </ul>
22
+
23
+ {% assign tags_list = nil %}
24
+
25
+ {% for tag in site.tags %}
26
+ {% assign tag_name = tag[0] %}
27
+ {% assign tag_id = tag_name | slugify %}
28
+ {% assign pages_list = tag[1] %}
29
+ <details id="{{ tag_id }}" class="archive-year">
30
+ <summary class="archive-year-summary">
31
+ <span class="archive-year-title">{{ tag_name }}</span>
32
+ <span class="archive-year-count">({{ pages_list | size }})</span>
33
+ </summary>
34
+ <ul class="archive-posts">
35
+ {% for post in pages_list %}
36
+ {% if post.title != null %}
37
+ {% if group == null or group == post.group %}
38
+ {% assign post_summary = post.description | default: post.excerpt | strip_html | strip_newlines | truncatewords: 40 %}
39
+ <li class="archive-post">
40
+ <details class="archive-post-details">
41
+ <summary class="archive-post-summary">
42
+ <span class="archive-post-meta">
43
+ <time class="post-list-date" datetime="{{ post.date | date_to_xmlschema }}" itemprop="datePublished">{{ post.date | date: "%B %d, %Y" }}</time>
44
+ <a class="archive-post-title" href="{{ post.url | relative_url }}">{{ post.title }}</a>
45
+ </span>
46
+ </summary>
47
+ {% if post_summary and post_summary != "" %}
48
+ <p class="archive-post-description">{{ post_summary }}</p>
49
+ {% endif %}
50
+ </details>
51
+ </li>
52
+ {% endif %}
53
+ {% endif %}
54
+ {% endfor %}
55
+ </ul>
56
+ </details>
57
+ {% assign pages_list = nil %}
58
+ {% assign group = nil %}
59
+ {% endfor %}
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JekyllThemeSystemhalted
4
- VERSION = "0.1.1"
4
+ VERSION = "1.0.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-theme-systemhalted
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Palak Mathur
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-01-05 00:00:00.000000000 Z
11
+ date: 2026-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -111,11 +111,16 @@ files:
111
111
  - _includes/head.html
112
112
  - _includes/share-buttons.html
113
113
  - _includes/sidebar.html
114
+ - _layouts/about.html
115
+ - _layouts/archives.html
116
+ - _layouts/categories.html
114
117
  - _layouts/category.html
115
118
  - _layouts/collections.html
116
119
  - _layouts/default.html
120
+ - _layouts/index.html
117
121
  - _layouts/page.html
118
122
  - _layouts/post.html
123
+ - _layouts/tags.html
119
124
  - assets/android-chrome-192x192.png
120
125
  - assets/android-chrome-512x512.png
121
126
  - assets/apple-touch-icon-precomposed.png
@@ -124,12 +129,6 @@ files:
124
129
  - assets/favicon-16x16.png
125
130
  - assets/favicon-32x32.png
126
131
  - assets/favicon.ico
127
- - assets/images/404.jpg
128
- - assets/images/bg-arrow.png
129
- - assets/images/bgimage1.jpg
130
- - assets/images/bgimage2.jpg
131
- - assets/images/example.png
132
- - assets/images/example1.png
133
132
  - assets/js/elasticlunr.min.js
134
133
  - assets/js/script.js
135
134
  - assets/js/search-data.js
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file