arsxy-theme 1.0.0.pre.rc
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 +7 -0
- data/LICENSE +21 -0
- data/README.md +166 -0
- data/_config.yml +131 -0
- data/_includes/footer.html +45 -0
- data/_includes/header.html +68 -0
- data/_includes/image.html +8 -0
- data/_includes/related-posts.html +83 -0
- data/_includes/search.html +32 -0
- data/_includes/social-sharing.html +86 -0
- data/_includes/toc.html +83 -0
- data/_layouts/default.html +76 -0
- data/_layouts/docs.html +90 -0
- data/_layouts/home.html +172 -0
- data/_layouts/post.html +114 -0
- data/_sass/_base.scss +264 -0
- data/_sass/_dark-mode.scss +749 -0
- data/_sass/_layout.scss +118 -0
- data/_sass/_responsive.scss +157 -0
- data/_sass/_syntax-highlighting.scss +147 -0
- data/_sass/_typography.scss +226 -0
- data/_sass/_utilities.scss +138 -0
- data/_sass/_variables.scss +63 -0
- data/_sass/components/_code.scss +245 -0
- data/_sass/components/_docs.scss +263 -0
- data/_sass/components/_footer.scss +170 -0
- data/_sass/components/_header.scss +313 -0
- data/_sass/components/_homepage.scss +597 -0
- data/_sass/components/_image.scss +22 -0
- data/_sass/components/_pagination.scss +146 -0
- data/_sass/components/_post.scss +1039 -0
- data/_sass/components/_related-posts.scss +70 -0
- data/_sass/components/_search.scss +276 -0
- data/_sass/components/_social-sharing.scss +95 -0
- data/_sass/components/_toc.scss +193 -0
- data/assets/css/main.scss +24 -0
- data/assets/images/favicon/android-chrome-192x192.png +0 -0
- data/assets/images/favicon/android-chrome-512x512.png +0 -0
- data/assets/images/favicon/apple-touch-icon.png +0 -0
- data/assets/images/favicon/favicon-16x16.png +0 -0
- data/assets/images/favicon/favicon-32x32.png +0 -0
- data/assets/images/favicon/favicon.ico +0 -0
- data/assets/images/favicon/site.webmanifest +19 -0
- data/assets/images/new-features-update.svg +58 -0
- data/assets/images/related-posts-example.svg +37 -0
- data/assets/images/seo-optimization.png +0 -0
- data/assets/images/social-sharing-sample.png +0 -0
- data/assets/images/ss-arsxy-theme.png +0 -0
- data/assets/images/table-of-content-thumbnail.png +0 -0
- data/assets/images/theme-demo-2.jpeg +0 -0
- data/assets/images/theme-demo.jpeg +0 -0
- data/assets/images/welcome-to-arsxy-theme.png +0 -0
- data/assets/js/main.js +369 -0
- data/assets/js/search-index.json +31 -0
- data/assets/js/search.js +207 -0
- metadata +226 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c46eb40bf3ecc2df4daea0d790e1a6c94ebc593a5bd4e32e9ec5ef37cfc7f874
|
4
|
+
data.tar.gz: cbce8cb037fafce1e82cc34ecc9b5df233c4ad102de3048f408fb87340e07bf8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 11c2fa08e5145b3e563ab5138564e7c730ccf4dbbcb71b6ee2ae468b7b77b30e2e6c7aa52fe413a2d531965c3f2ca9b5345a2a02d22d6aee9017a671adebafa4
|
7
|
+
data.tar.gz: ae02444b64c37c97925565cc3286c7b32de12ff5181478b1a4d73cb36648dca43aa14cea7711cd753c51bc0c636442b15845a517acb50cc2fe25432abfdab9c6
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2025 Awcodify
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
# Arsxy Theme for Jekyll
|
2
|
+
|
3
|
+
A clean, modern Jekyll theme optimized for technical blogs and documentation sites. This theme prioritizes readability, performance, and responsive design.
|
4
|
+
|
5
|
+
> **Current Status**: This theme is currently in beta (v1.0.0-beta). While it's functional and feature-rich, it may receive some refinements before the final stable release.
|
6
|
+
|
7
|
+
> **Built with AI**: This theme was developed with the assistance of GitHub Copilot and Claude 3.7 Sonnet.
|
8
|
+
|
9
|
+

|
10
|
+
|
11
|
+
## Features
|
12
|
+
|
13
|
+
- **Clean & Modern Design** - Minimal, distraction-free reading experience
|
14
|
+
- **Responsive Layout** - Optimized for all devices from mobile to desktop
|
15
|
+
- **Dark Mode Support** - Built-in dark mode toggle option
|
16
|
+
- **Code Highlighting** - Beautiful syntax highlighting for technical content
|
17
|
+
- **Table of Contents** - Automatically generated for longer articles
|
18
|
+
- **SEO Optimized** - Built-in support for meta tags and structured data
|
19
|
+
- **Performance Focused** - Fast loading times with minimal dependencies
|
20
|
+
- **Reading Time** - Automatic reading time estimation for each post
|
21
|
+
- **Featured Posts** - Highlight your best content on the homepage
|
22
|
+
- **Categories & Tags** - Organized content structure
|
23
|
+
|
24
|
+
## Installation
|
25
|
+
|
26
|
+
### As a remote theme (recommended)
|
27
|
+
|
28
|
+
Add this line to your Jekyll site's `_config.yml`:
|
29
|
+
|
30
|
+
```yaml
|
31
|
+
remote_theme: awcodify/arsxy-theme
|
32
|
+
```
|
33
|
+
|
34
|
+
And install the necessary plugins:
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
# In your Gemfile
|
38
|
+
group :jekyll_plugins do
|
39
|
+
gem "jekyll-remote-theme"
|
40
|
+
gem "jekyll-feed"
|
41
|
+
gem "jekyll-seo-tag"
|
42
|
+
gem "jekyll-sitemap"
|
43
|
+
gem "jekyll-paginate"
|
44
|
+
end
|
45
|
+
```
|
46
|
+
|
47
|
+
### As a regular theme
|
48
|
+
|
49
|
+
Add this line to your Jekyll site's `Gemfile`:
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
gem "arsxy-theme"
|
53
|
+
```
|
54
|
+
|
55
|
+
And add this line to your Jekyll site's `_config.yml`:
|
56
|
+
|
57
|
+
```yaml
|
58
|
+
theme: arsxy-theme
|
59
|
+
```
|
60
|
+
|
61
|
+
And then execute:
|
62
|
+
|
63
|
+
```bash
|
64
|
+
$ bundle install
|
65
|
+
```
|
66
|
+
|
67
|
+
## Usage
|
68
|
+
|
69
|
+
### Configuration
|
70
|
+
|
71
|
+
Here's a sample configuration with commonly used options:
|
72
|
+
|
73
|
+
```yaml
|
74
|
+
# Site settings
|
75
|
+
name: Your Site Name
|
76
|
+
title: Your Site Title
|
77
|
+
description: >-
|
78
|
+
Your site description for SEO and social sharing.
|
79
|
+
baseurl: "/"
|
80
|
+
url: "https://yourdomain.com"
|
81
|
+
|
82
|
+
# Theme settings
|
83
|
+
remote_theme: awcodify/arsxy-theme
|
84
|
+
# - OR if installing as a gem -
|
85
|
+
# theme: arsxy-theme
|
86
|
+
|
87
|
+
# Navigation menu
|
88
|
+
navigation:
|
89
|
+
- title: Home
|
90
|
+
url: /
|
91
|
+
- title: About
|
92
|
+
url: /about
|
93
|
+
- title: Articles
|
94
|
+
url: /articles
|
95
|
+
- title: Tags
|
96
|
+
url: /tags
|
97
|
+
- title: Contact
|
98
|
+
url: /contact
|
99
|
+
|
100
|
+
# Social links
|
101
|
+
social:
|
102
|
+
github: yourusername
|
103
|
+
twitter: yourusername
|
104
|
+
linkedin: yourusername
|
105
|
+
email: your.email@example.com
|
106
|
+
|
107
|
+
# Plugin settings
|
108
|
+
plugins:
|
109
|
+
- jekyll-feed
|
110
|
+
- jekyll-seo-tag
|
111
|
+
- jekyll-sitemap
|
112
|
+
- jekyll-paginate
|
113
|
+
```
|
114
|
+
|
115
|
+
### Creating Posts
|
116
|
+
|
117
|
+
Create a new file in the `_posts` directory with the format `YYYY-MM-DD-title.md`:
|
118
|
+
|
119
|
+
```markdown
|
120
|
+
---
|
121
|
+
layout: post
|
122
|
+
title: "Your Post Title"
|
123
|
+
description: "A brief description of your post for SEO and previews."
|
124
|
+
categories: Category
|
125
|
+
tags: tag1 tag2 tag3
|
126
|
+
image: path/to/featured-image.jpg
|
127
|
+
---
|
128
|
+
|
129
|
+
Your content goes here...
|
130
|
+
```
|
131
|
+
|
132
|
+
### Featured Images
|
133
|
+
|
134
|
+
For best results, use featured images in your posts. The recommended image size is 1200×630 pixels for optimal display on both the homepage and social media shares.
|
135
|
+
|
136
|
+
### Table of Contents
|
137
|
+
|
138
|
+
The table of contents is automatically generated for posts. If you want to disable it for a specific post, add `toc: false` to the front matter.
|
139
|
+
|
140
|
+
## Customization
|
141
|
+
|
142
|
+
### Colors and Typography
|
143
|
+
|
144
|
+
You can override the default colors and typography by creating a `_sass/_custom.scss` file in your site and importing it in your `assets/css/main.scss`.
|
145
|
+
|
146
|
+
## Important Notes
|
147
|
+
|
148
|
+
- This theme requires Jekyll 3.10 or compatible versions
|
149
|
+
- For best performance, optimize your images before adding them to your site
|
150
|
+
- The theme includes built-in dark mode that respects user system preferences
|
151
|
+
|
152
|
+
## License
|
153
|
+
|
154
|
+
This theme is available as open source under the terms of the [MIT License](LICENSE).
|
155
|
+
|
156
|
+
## Contributing
|
157
|
+
|
158
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/awcodify/arsxy-theme.
|
159
|
+
|
160
|
+
We appreciate your contributions to make Arsxy Theme better! Please check out our [Contributing Guidelines](CONTRIBUTING.md) for details on:
|
161
|
+
|
162
|
+
- How to submit pull requests
|
163
|
+
- Coding standards
|
164
|
+
- Development process
|
165
|
+
|
166
|
+
When submitting pull requests, please use the appropriate PR template to help maintainers understand and review your changes efficiently.
|
data/_config.yml
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
# Main configuration for Arsxy Theme
|
2
|
+
|
3
|
+
# Site settings
|
4
|
+
name: Arsxy Theme
|
5
|
+
title: Arsxy Theme
|
6
|
+
email: awcodify@gmail.com
|
7
|
+
description: >-
|
8
|
+
A clean, fast and SEO-friendly Jekyll theme focused on technical content and code readability.
|
9
|
+
baseurl: "" # the subpath of your site, e.g. /blog
|
10
|
+
url: "http://localhost:4000" # for local development
|
11
|
+
|
12
|
+
# GitHub Pages settings
|
13
|
+
repository: awcodify/arsxy-theme
|
14
|
+
github: [metadata]
|
15
|
+
|
16
|
+
# Theme settings - comment this line when developing locally
|
17
|
+
# remote_theme: awcodify/arsxy-theme
|
18
|
+
|
19
|
+
# Build settings
|
20
|
+
markdown: kramdown
|
21
|
+
highlighter: rouge
|
22
|
+
permalink: /:title/
|
23
|
+
paginate: 5
|
24
|
+
paginate_path: "/page/:num/"
|
25
|
+
|
26
|
+
# Theme-specific settings
|
27
|
+
date_format: "%b %-d, %Y" # e.g. May 5, 2025
|
28
|
+
toc_position: right # Options: 'left', 'right' (default)
|
29
|
+
|
30
|
+
# Enable search functionality
|
31
|
+
search_enabled: true
|
32
|
+
|
33
|
+
# Dark mode configuration
|
34
|
+
dark_mode:
|
35
|
+
enabled: true # If set to false, the toggle button will be hidden
|
36
|
+
default: true # If true, dark mode will be the default theme
|
37
|
+
|
38
|
+
# Related posts configuration
|
39
|
+
related_posts:
|
40
|
+
enabled: true
|
41
|
+
title: "Related Articles"
|
42
|
+
count: 3
|
43
|
+
min_common_tags: 1
|
44
|
+
|
45
|
+
# Social sharing configuration
|
46
|
+
social_sharing:
|
47
|
+
enabled: true
|
48
|
+
title: "Share this post"
|
49
|
+
|
50
|
+
|
51
|
+
# Homepage configuration
|
52
|
+
homepage:
|
53
|
+
# Hero section configuration
|
54
|
+
hero:
|
55
|
+
enabled: true
|
56
|
+
title: "Welcome to Arsxy Theme"
|
57
|
+
subtitle: "A clean, modern Jekyll theme for tech blogs and documentation"
|
58
|
+
image: "welcome-to-arsxy-theme.png"
|
59
|
+
buttons:
|
60
|
+
- label: "Learn More"
|
61
|
+
url: "/docs/"
|
62
|
+
primary: true
|
63
|
+
- label: "GitHub"
|
64
|
+
url: "https://github.com/awcodify/arsxy-theme"
|
65
|
+
primary: false
|
66
|
+
|
67
|
+
# About section configuration for sidebar
|
68
|
+
about_widget:
|
69
|
+
enabled: true
|
70
|
+
title: "About"
|
71
|
+
content: "A modern Jekyll theme perfect for tech blogs, documentation sites, and personal portfolios."
|
72
|
+
link_text: "More about Arsxy Theme →"
|
73
|
+
link_url: "/about/"
|
74
|
+
|
75
|
+
# Featured posts settings
|
76
|
+
featured_posts:
|
77
|
+
enabled: true
|
78
|
+
title: "Featured Posts"
|
79
|
+
limit: 3
|
80
|
+
|
81
|
+
# Latest articles settings
|
82
|
+
latest_articles:
|
83
|
+
enabled: true
|
84
|
+
title: "Latest Articles"
|
85
|
+
excerpt_length: 30
|
86
|
+
|
87
|
+
# Navigation menu
|
88
|
+
navigation:
|
89
|
+
- title: Home
|
90
|
+
url: /
|
91
|
+
- title: Documentation
|
92
|
+
url: /docs
|
93
|
+
- title: About
|
94
|
+
url: /about
|
95
|
+
- title: Categories
|
96
|
+
url: /categories
|
97
|
+
- title: Tags
|
98
|
+
url: /tags
|
99
|
+
- title: Contact
|
100
|
+
url: /contact
|
101
|
+
|
102
|
+
# Social links
|
103
|
+
social:
|
104
|
+
github: awcodify
|
105
|
+
twitter: # your Twitter handle
|
106
|
+
linkedin: # your LinkedIn username
|
107
|
+
email: awcodify@gmail.com
|
108
|
+
|
109
|
+
# Plugin settings
|
110
|
+
plugins:
|
111
|
+
- jekyll-feed
|
112
|
+
- jekyll-seo-tag
|
113
|
+
- jekyll-sitemap
|
114
|
+
- jekyll-paginate
|
115
|
+
- jekyll-remote-theme
|
116
|
+
|
117
|
+
# Content settings
|
118
|
+
excerpt_separator: <!--more-->
|
119
|
+
|
120
|
+
# Exclude from processing
|
121
|
+
exclude:
|
122
|
+
- .sass-cache/
|
123
|
+
- .jekyll-cache/
|
124
|
+
- gemfiles/
|
125
|
+
- Gemfile
|
126
|
+
- Gemfile.lock
|
127
|
+
- node_modules/
|
128
|
+
- vendor/
|
129
|
+
- example/
|
130
|
+
- LICENSE
|
131
|
+
- arsxy-theme.gemspec
|
@@ -0,0 +1,45 @@
|
|
1
|
+
<footer class="site-footer">
|
2
|
+
<div class="wrapper">
|
3
|
+
<div class="footer-content">
|
4
|
+
<div class="footer-col">
|
5
|
+
<h2 class="footer-heading">{{ site.title | escape }}</h2>
|
6
|
+
<p>{{ site.description | escape }}</p>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<div class="footer-col">
|
10
|
+
<h2 class="footer-heading">Links</h2>
|
11
|
+
<ul class="footer-links">
|
12
|
+
{%- for item in site.navigation -%}
|
13
|
+
<li><a href="{{ item.url | relative_url }}">{{ item.title | escape }}</a></li>
|
14
|
+
{%- endfor -%}
|
15
|
+
</ul>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<div class="footer-col">
|
19
|
+
<h2 class="footer-heading">Connect</h2>
|
20
|
+
<ul class="social-links">
|
21
|
+
{%- if site.social.github -%}
|
22
|
+
<li><a href="https://github.com/{{ site.social.github }}"><span class="icon-github">GitHub</span></a></li>
|
23
|
+
{%- endif -%}
|
24
|
+
|
25
|
+
{%- if site.social.twitter -%}
|
26
|
+
<li><a href="https://twitter.com/{{ site.social.twitter }}"><span class="icon-twitter">Twitter</span></a></li>
|
27
|
+
{%- endif -%}
|
28
|
+
|
29
|
+
{%- if site.social.linkedin -%}
|
30
|
+
<li><a href="https://linkedin.com/in/{{ site.social.linkedin }}"><span class="icon-linkedin">LinkedIn</span></a></li>
|
31
|
+
{%- endif -%}
|
32
|
+
|
33
|
+
{%- if site.social.email -%}
|
34
|
+
<li><a href="mailto:{{ site.social.email }}"><span class="icon-mail">Email</span></a></li>
|
35
|
+
{%- endif -%}
|
36
|
+
</ul>
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
|
40
|
+
<div class="footer-bottom">
|
41
|
+
<p>© {{ site.time | date: '%Y' }} {{ site.name | default: site.title }}. All rights reserved.</p>
|
42
|
+
<p class="powered-by">Using <a href="https://github.com/awcodify/arsxy-theme/">Arsxy Theme</a> by <a href="https://sysctl.id">sysctl.id</a></p>
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
</footer>
|
@@ -0,0 +1,68 @@
|
|
1
|
+
<header class="site-header">
|
2
|
+
<div class="wrapper">
|
3
|
+
<a class="site-title" rel="author" href="{{ "/" | relative_url }}">{{ site.title | escape }}</a>
|
4
|
+
|
5
|
+
<div class="site-header-right">
|
6
|
+
<div class="site-header-actions">
|
7
|
+
{% if site.search_enabled != false %}
|
8
|
+
<div class="search-toggle">
|
9
|
+
<button class="search-button" aria-label="Open search" id="search-toggle-button">
|
10
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
11
|
+
<circle cx="11" cy="11" r="8"></circle>
|
12
|
+
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
|
13
|
+
</svg>
|
14
|
+
</button>
|
15
|
+
</div>
|
16
|
+
{% endif %}
|
17
|
+
|
18
|
+
{% if site.dark_mode.enabled %}
|
19
|
+
<button class="theme-toggle" aria-label="Toggle Dark Mode">
|
20
|
+
<svg class="theme-toggle-icon sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"></circle><line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line><line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line></svg>
|
21
|
+
<svg class="theme-toggle-icon moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 A7 7 0 0 0 21 12.79z"></path></svg>
|
22
|
+
</button>
|
23
|
+
{% endif %}
|
24
|
+
</div>
|
25
|
+
|
26
|
+
<nav class="site-nav">
|
27
|
+
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
|
28
|
+
<label for="nav-trigger">
|
29
|
+
<span class="menu-icon">
|
30
|
+
<svg viewBox="0 0 18 15" width="18px" height="15px">
|
31
|
+
<path d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.032C17.335,0,18,0.665,18,1.484L18,1.484z M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.032C17.335,6.031,18,6.696,18,7.516L18,7.516z M18,13.516C18,14.335,17.335,15,16.516,15H1.484 C0.665,15,0,14.335,0,13.516l0,0c0-0.82,0.665-1.483,1.484-1.483h15.032C17.335,12.031,18,12.695,18,13.516L18,13.516z"/>
|
32
|
+
</svg>
|
33
|
+
</span>
|
34
|
+
</label>
|
35
|
+
|
36
|
+
<div class="trigger">
|
37
|
+
{%- for item in site.navigation -%}
|
38
|
+
<a class="page-link" href="{{ item.url | relative_url }}">{{ item.title | escape }}</a>
|
39
|
+
{%- endfor -%}
|
40
|
+
</div>
|
41
|
+
</nav>
|
42
|
+
</div>
|
43
|
+
</div>
|
44
|
+
|
45
|
+
{% if site.search_enabled != false %}
|
46
|
+
<div class="search-overlay" id="search-overlay">
|
47
|
+
<div class="search-overlay-content">
|
48
|
+
<div class="search-header">
|
49
|
+
<h2>Search</h2>
|
50
|
+
<button class="close-search" id="close-search" aria-label="Close search">
|
51
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
52
|
+
<line x1="18" y1="6" x2="6" y2="18"></line>
|
53
|
+
<line x1="6" y1="6" x2="18" y2="18"></line>
|
54
|
+
</svg>
|
55
|
+
</button>
|
56
|
+
</div>
|
57
|
+
<div class="search-form">
|
58
|
+
<input type="text" id="search-input-overlay" placeholder="Search for articles..." aria-label="Search" autocomplete="off">
|
59
|
+
<div id="search-results-overlay" class="search-results-container"></div>
|
60
|
+
|
61
|
+
<div class="advanced-search-link">
|
62
|
+
<a href="{{ '/search/' | relative_url }}">Advanced Search</a>
|
63
|
+
</div>
|
64
|
+
</div>
|
65
|
+
</div>
|
66
|
+
</div>
|
67
|
+
{% endif %}
|
68
|
+
</header>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
{% if include.url %}
|
2
|
+
<figure class="image">
|
3
|
+
<img src="{{ '/assets/images/' | append: include.url | relative_url }}" alt="{{ include.alt | default: 'Image' }}" {% if include.width %}width="{{ include.width }}"{% endif %} {% if include.class %}class="{{ include.class }}"{% endif %}>
|
4
|
+
{% if include.caption %}
|
5
|
+
<figcaption>{{ include.caption }}</figcaption>
|
6
|
+
{% endif %}
|
7
|
+
</figure>
|
8
|
+
{% endif %}
|
@@ -0,0 +1,83 @@
|
|
1
|
+
{% if site.related_posts.enabled %}
|
2
|
+
<div class="related-posts">
|
3
|
+
<h3>{{ site.related_posts.title | default: "Related Posts" }}</h3>
|
4
|
+
<div class="related-posts-grid">
|
5
|
+
{% assign maxRelated = site.related_posts.count | default: 3 %}
|
6
|
+
{% assign minCommonTags = site.related_posts.min_common_tags | default: 1 %}
|
7
|
+
{% assign maxRelatedCounter = 0 %}
|
8
|
+
|
9
|
+
{% for post in site.posts %}
|
10
|
+
{% if post.url != page.url %}
|
11
|
+
{% assign sameTagCount = 0 %}
|
12
|
+
{% for tag in post.tags %}
|
13
|
+
{% if page.tags contains tag %}
|
14
|
+
{% assign sameTagCount = sameTagCount | plus: 1 %}
|
15
|
+
{% endif %}
|
16
|
+
{% endfor %}
|
17
|
+
|
18
|
+
{% if sameTagCount >= minCommonTags %}
|
19
|
+
<a href="{{ post.url | relative_url }}" class="related-post-card">
|
20
|
+
{% if post.image %}
|
21
|
+
<div class="related-post-image">
|
22
|
+
<img src="{{ '/assets/images/' | append: post.image | relative_url }}" alt="{{ post.title }}">
|
23
|
+
</div>
|
24
|
+
{% endif %}
|
25
|
+
<div class="related-post-content">
|
26
|
+
<h4>{{ post.title }}</h4>
|
27
|
+
<span class="related-post-date">{{ post.date | date: site.date_format }}</span>
|
28
|
+
</div>
|
29
|
+
</a>
|
30
|
+
{% assign maxRelatedCounter = maxRelatedCounter | plus: 1 %}
|
31
|
+
{% if maxRelatedCounter >= maxRelated %}
|
32
|
+
{% break %}
|
33
|
+
{% endif %}
|
34
|
+
{% endif %}
|
35
|
+
{% endif %}
|
36
|
+
{% endfor %}
|
37
|
+
|
38
|
+
{% if maxRelatedCounter == 0 %}
|
39
|
+
{% for post in site.posts limit: maxRelated %}
|
40
|
+
{% if post.url != page.url %}
|
41
|
+
<a href="{{ post.url | relative_url }}" class="related-post-card">
|
42
|
+
{% if post.image %}
|
43
|
+
<div class="related-post-image">
|
44
|
+
<img src="{{ '/assets/images/' | append: post.image | relative_url }}" alt="{{ post.title }}">
|
45
|
+
</div>
|
46
|
+
{% endif %}
|
47
|
+
<div class="related-post-content">
|
48
|
+
<h4>{{ post.title }}</h4>
|
49
|
+
<span class="related-post-date">{{ post.date | date: site.date_format }}</span>
|
50
|
+
</div>
|
51
|
+
</a>
|
52
|
+
{% assign maxRelatedCounter = maxRelatedCounter | plus: 1 %}
|
53
|
+
{% endif %}
|
54
|
+
{% endfor %}
|
55
|
+
{% endif %}
|
56
|
+
</div>
|
57
|
+
</div>
|
58
|
+
{% else %}
|
59
|
+
<div class="related-posts">
|
60
|
+
<h3>Related Posts</h3>
|
61
|
+
<div class="related-posts-grid">
|
62
|
+
{% assign maxRelated = 3 %}
|
63
|
+
{% assign maxRelatedCounter = 0 %}
|
64
|
+
|
65
|
+
{% for post in site.posts limit: maxRelated %}
|
66
|
+
{% if post.url != page.url %}
|
67
|
+
<a href="{{ post.url | relative_url }}" class="related-post-card">
|
68
|
+
{% if post.image %}
|
69
|
+
<div class="related-post-image">
|
70
|
+
<img src="{{ '/assets/images/' | append: post.image | relative_url }}" alt="{{ post.title }}">
|
71
|
+
</div>
|
72
|
+
{% endif %}
|
73
|
+
<div class="related-post-content">
|
74
|
+
<h4>{{ post.title }}</h4>
|
75
|
+
<span class="related-post-date">{{ post.date | date: site.date_format }}</span>
|
76
|
+
</div>
|
77
|
+
</a>
|
78
|
+
{% assign maxRelatedCounter = maxRelatedCounter | plus: 1 %}
|
79
|
+
{% endif %}
|
80
|
+
{% endfor %}
|
81
|
+
</div>
|
82
|
+
</div>
|
83
|
+
{% endif %}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
{% if site.search_enabled != false %}
|
2
|
+
<div class="search-toggle">
|
3
|
+
<button class="search-button" aria-label="Open search" id="search-toggle-button">
|
4
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
5
|
+
<circle cx="11" cy="11" r="8"></circle>
|
6
|
+
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
|
7
|
+
</svg>
|
8
|
+
</button>
|
9
|
+
</div>
|
10
|
+
|
11
|
+
<div class="search-overlay" id="search-overlay">
|
12
|
+
<div class="search-overlay-content">
|
13
|
+
<div class="search-header">
|
14
|
+
<h2>Search</h2>
|
15
|
+
<button class="close-search" id="close-search" aria-label="Close search">
|
16
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
17
|
+
<line x1="18" y1="6" x2="6" y2="18"></line>
|
18
|
+
<line x1="6" y1="6" x2="18" y2="18"></line>
|
19
|
+
</svg>
|
20
|
+
</button>
|
21
|
+
</div>
|
22
|
+
<div class="search-form">
|
23
|
+
<input type="text" id="search-input-overlay" placeholder="Search for articles..." aria-label="Search" autocomplete="off">
|
24
|
+
<div id="search-results-overlay" class="search-results-container"></div>
|
25
|
+
|
26
|
+
<div class="advanced-search-link">
|
27
|
+
<a href="{{ '/search/' | relative_url }}">Advanced Search</a>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
</div>
|
31
|
+
</div>
|
32
|
+
{% endif %}
|
@@ -0,0 +1,86 @@
|
|
1
|
+
{% if site.social_sharing.enabled != false %}
|
2
|
+
<div class="social-sharing">
|
3
|
+
<h3>{{ site.social_sharing.title | default: "Share this post" }}</h3>
|
4
|
+
<ul class="share-buttons">
|
5
|
+
<!-- Twitter/X -->
|
6
|
+
<li>
|
7
|
+
<a href="https://twitter.com/intent/tweet?text={{ page.title | url_encode }}&url={{ page.url | absolute_url | url_encode }}"
|
8
|
+
target="_blank" rel="noopener" aria-label="Share on Twitter" class="share-button twitter">
|
9
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg>
|
10
|
+
<span>Twitter</span>
|
11
|
+
</a>
|
12
|
+
</li>
|
13
|
+
<!-- Facebook -->
|
14
|
+
<li>
|
15
|
+
<a href="https://www.facebook.com/sharer/sharer.php?u={{ page.url | absolute_url | url_encode }}"
|
16
|
+
target="_blank" rel="noopener" aria-label="Share on Facebook" class="share-button facebook">
|
17
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"/></svg>
|
18
|
+
<span>Facebook</span>
|
19
|
+
</a>
|
20
|
+
</li>
|
21
|
+
<!-- LinkedIn -->
|
22
|
+
<li>
|
23
|
+
<a href="https://www.linkedin.com/shareArticle?mini=true&url={{ page.url | absolute_url | url_encode }}&title={{ page.title | url_encode }}&summary={{ page.description | default: site.description | url_encode }}"
|
24
|
+
target="_blank" rel="noopener" aria-label="Share on LinkedIn" class="share-button linkedin">
|
25
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>
|
26
|
+
<span>LinkedIn</span>
|
27
|
+
</a>
|
28
|
+
</li>
|
29
|
+
<!-- Reddit -->
|
30
|
+
<li>
|
31
|
+
<a href="https://www.reddit.com/submit?url={{ page.url | absolute_url | url_encode }}&title={{ page.title | url_encode }}"
|
32
|
+
target="_blank" rel="noopener" aria-label="Share on Reddit" class="share-button reddit">
|
33
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M12 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0zm5.01 4.744c.688 0 1.25.561 1.25 1.249a1.25 1.25 0 0 1-2.498.056l-2.597-.547-.8 3.747c1.824.07 3.48.632 4.674 1.488.308-.309.73-.491 1.207-.491.968 0 1.754.786 1.754 1.754 0 .716-.435 1.333-1.01 1.614a3.111 3.111 0 0 1 .042.52c0 2.694-3.13 4.87-7.004 4.87-3.874 0-7.004-2.176-7.004-4.87 0-.183.015-.366.043-.534A1.748 1.748 0 0 1 4.028 12c0-.968.786-1.754 1.754-1.754.463 0 .898.196 1.207.49 1.207-.883 2.878-1.43 4.744-1.487l.885-4.182a.342.342 0 0 1 .14-.197.35.35 0 0 1 .238-.042l2.906.617a1.214 1.214 0 0 1 1.108-.701zM9.25 12C8.561 12 8 12.562 8 13.25c0 .687.561 1.248 1.25 1.248.687 0 1.248-.561 1.248-1.249 0-.688-.561-1.249-1.249-1.249zm5.5 0c-.687 0-1.248.561-1.248 1.25 0 .687.561 1.248 1.249 1.248.688 0 1.249-.561 1.249-1.249 0-.687-.562-1.249-1.25-1.249zm-5.466 3.99a.327.327 0 0 0-.231.094.33.33 0 0 0 0 .463c.842.842 2.484.913 2.961.913.477 0 2.105-.056 2.961-.913a.361.361 0 0 0 .029-.463.33.33 0 0 0-.464 0c-.547.533-1.684.73-2.512.73-.828 0-1.979-.196-2.512-.73a.326.326 0 0 0-.232-.095z"/></svg>
|
34
|
+
<span>Reddit</span>
|
35
|
+
</a>
|
36
|
+
</li>
|
37
|
+
<!-- Email -->
|
38
|
+
<li>
|
39
|
+
<a href="mailto:?subject={{ page.title | url_encode }}&body={{ page.description | default: site.description | url_encode }}%0A{{ page.url | absolute_url | url_encode }}"
|
40
|
+
target="_blank" rel="noopener" aria-label="Share via Email" class="share-button email">
|
41
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M0 3v18h24v-18h-24zm6.623 7.929l-4.623 5.712v-9.458l4.623 3.746zm-4.141-5.929h19.035l-9.517 7.713-9.518-7.713zm5.694 7.188l3.824 3.099 3.83-3.104 5.612 6.817h-18.779l5.513-6.812zm9.208-1.264l4.616-3.741v9.348l-4.616-5.607z"/></svg>
|
42
|
+
<span>Email</span>
|
43
|
+
</a>
|
44
|
+
</li>
|
45
|
+
<!-- Clipboard copy -->
|
46
|
+
<li>
|
47
|
+
<a href="#" class="share-button copy-link" id="copy-link" data-url="{{ page.url | absolute_url }}" onclick="copyToClipboard(event)">
|
48
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M7.024 3.75c0-.966.784-1.75 1.75-1.75H20.25c.966 0 1.75.784 1.75 1.75v11.498a1.75 1.75 0 0 1-1.75 1.75H8.774a1.75 1.75 0 0 1-1.75-1.75V3.75zm1.75-.25a.25.25 0 0 0-.25.25v11.498c0 .139.112.25.25.25H20.25a.25.25 0 0 0 .25-.25V3.75a.25.25 0 0 0-.25-.25H8.774z"/><path d="M1.995 10.749a1.75 1.75 0 0 1 1.75-1.751H5.25a.75.75 0 1 1 0 1.5H3.745a.25.25 0 0 0-.25.25L3.5 20.25c0 .138.111.25.25.25h9.5a.25.25 0 0 0 .25-.25v-1.51a.75.75 0 1 1 1.5 0v1.51A1.75 1.75 0 0 1 13.25 22h-9.5A1.75 1.75 0 0 1 2 20.25l-.005-9.501z"/></svg>
|
49
|
+
<span>Copy Link</span>
|
50
|
+
</a>
|
51
|
+
</li>
|
52
|
+
</ul>
|
53
|
+
</div>
|
54
|
+
|
55
|
+
<script>
|
56
|
+
function copyToClipboard(e) {
|
57
|
+
e.preventDefault();
|
58
|
+
const element = e.currentTarget;
|
59
|
+
const url = element.getAttribute('data-url');
|
60
|
+
|
61
|
+
// Create a temporary input element
|
62
|
+
const tempInput = document.createElement('input');
|
63
|
+
tempInput.value = url;
|
64
|
+
document.body.appendChild(tempInput);
|
65
|
+
|
66
|
+
// Select the text
|
67
|
+
tempInput.select();
|
68
|
+
tempInput.setSelectionRange(0, 99999); // For mobile devices
|
69
|
+
|
70
|
+
// Copy the text
|
71
|
+
document.execCommand('copy');
|
72
|
+
|
73
|
+
// Remove the temporary element
|
74
|
+
document.body.removeChild(tempInput);
|
75
|
+
|
76
|
+
// Update the button text temporarily
|
77
|
+
const originalText = element.querySelector('span').textContent;
|
78
|
+
element.querySelector('span').textContent = 'Copied!';
|
79
|
+
|
80
|
+
// Reset the button text after a delay
|
81
|
+
setTimeout(() => {
|
82
|
+
element.querySelector('span').textContent = originalText;
|
83
|
+
}, 2000);
|
84
|
+
}
|
85
|
+
</script>
|
86
|
+
{% endif %}
|