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.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +166 -0
  4. data/_config.yml +131 -0
  5. data/_includes/footer.html +45 -0
  6. data/_includes/header.html +68 -0
  7. data/_includes/image.html +8 -0
  8. data/_includes/related-posts.html +83 -0
  9. data/_includes/search.html +32 -0
  10. data/_includes/social-sharing.html +86 -0
  11. data/_includes/toc.html +83 -0
  12. data/_layouts/default.html +76 -0
  13. data/_layouts/docs.html +90 -0
  14. data/_layouts/home.html +172 -0
  15. data/_layouts/post.html +114 -0
  16. data/_sass/_base.scss +264 -0
  17. data/_sass/_dark-mode.scss +749 -0
  18. data/_sass/_layout.scss +118 -0
  19. data/_sass/_responsive.scss +157 -0
  20. data/_sass/_syntax-highlighting.scss +147 -0
  21. data/_sass/_typography.scss +226 -0
  22. data/_sass/_utilities.scss +138 -0
  23. data/_sass/_variables.scss +63 -0
  24. data/_sass/components/_code.scss +245 -0
  25. data/_sass/components/_docs.scss +263 -0
  26. data/_sass/components/_footer.scss +170 -0
  27. data/_sass/components/_header.scss +313 -0
  28. data/_sass/components/_homepage.scss +597 -0
  29. data/_sass/components/_image.scss +22 -0
  30. data/_sass/components/_pagination.scss +146 -0
  31. data/_sass/components/_post.scss +1039 -0
  32. data/_sass/components/_related-posts.scss +70 -0
  33. data/_sass/components/_search.scss +276 -0
  34. data/_sass/components/_social-sharing.scss +95 -0
  35. data/_sass/components/_toc.scss +193 -0
  36. data/assets/css/main.scss +24 -0
  37. data/assets/images/favicon/android-chrome-192x192.png +0 -0
  38. data/assets/images/favicon/android-chrome-512x512.png +0 -0
  39. data/assets/images/favicon/apple-touch-icon.png +0 -0
  40. data/assets/images/favicon/favicon-16x16.png +0 -0
  41. data/assets/images/favicon/favicon-32x32.png +0 -0
  42. data/assets/images/favicon/favicon.ico +0 -0
  43. data/assets/images/favicon/site.webmanifest +19 -0
  44. data/assets/images/new-features-update.svg +58 -0
  45. data/assets/images/related-posts-example.svg +37 -0
  46. data/assets/images/seo-optimization.png +0 -0
  47. data/assets/images/social-sharing-sample.png +0 -0
  48. data/assets/images/ss-arsxy-theme.png +0 -0
  49. data/assets/images/table-of-content-thumbnail.png +0 -0
  50. data/assets/images/theme-demo-2.jpeg +0 -0
  51. data/assets/images/theme-demo.jpeg +0 -0
  52. data/assets/images/welcome-to-arsxy-theme.png +0 -0
  53. data/assets/js/main.js +369 -0
  54. data/assets/js/search-index.json +31 -0
  55. data/assets/js/search.js +207 -0
  56. 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
+ ![Arsxy Theme Screenshot](assets/images/ss-arsxy-theme.png)
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>&copy; {{ 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 %}