jekyll-theme-zer0 0.2.0 → 0.2.1
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 +4 -4
- data/CHANGELOG.md +16 -0
- data/README.md +443 -417
- data/_data/navigation/main.yml +15 -11
- data/_data/navigation/quickstart.yml +12 -0
- data/_includes/README.md +97 -0
- data/_includes/{info-section.html → components/info-section.html} +4 -4
- data/_includes/content/giscus.html +60 -0
- data/_includes/content/intro.html +66 -0
- data/_includes/{sitemap.html → content/sitemap.html} +1 -1
- data/_includes/{toc.html → content/toc.html} +1 -1
- data/_includes/{branding.html → core/branding.html} +2 -2
- data/_includes/core/footer.html +167 -0
- data/_includes/core/head.html +158 -0
- data/_includes/core/header.html +125 -0
- data/_includes/landing/landing-install-cards.html +52 -0
- data/_includes/landing/landing-quick-links.html +28 -0
- data/_includes/navigation/navbar.html +96 -0
- data/_includes/navigation/sidebar-left.html +83 -0
- data/_includes/{sidebar-right.html → navigation/sidebar-right.html} +3 -10
- data/_layouts/blog.html +2 -2
- data/_layouts/default.html +3 -3
- data/_layouts/journals.html +9 -80
- data/_layouts/landing.html +122 -45
- data/_layouts/root.html +6 -8
- data/assets/js/back-to-top.js +16 -19
- metadata +40 -66
- data/_includes/footer.html +0 -57
- data/_includes/giscus.html +0 -16
- data/_includes/head.html +0 -95
- data/_includes/header.html +0 -79
- data/_includes/intro.html +0 -68
- data/_includes/navbar.html +0 -34
- data/_includes/sidebar-left.html +0 -41
- data/_includes/toc +0 -7
- data/_layouts/javascript.html +0 -63
- /data/_includes/{google-analytics.html → analytics/google-analytics.html} +0 -0
- /data/_includes/{google-tag-manager-body.html → analytics/google-tag-manager-body.html} +0 -0
- /data/_includes/{google-tag-manager-head.html → analytics/google-tag-manager-head.html} +0 -0
- /data/_includes/{dev-shortcuts.html → components/dev-shortcuts.html} +0 -0
- /data/_includes/{halfmoon.html → components/halfmoon.html} +0 -0
- /data/_includes/{js-cdn.html → components/js-cdn.html} +0 -0
- /data/_includes/{powered-by.html → components/powered-by.html} +0 -0
- /data/_includes/{quick-index.html → components/quick-index.html} +0 -0
- /data/_includes/{searchbar.html → components/searchbar.html} +0 -0
- /data/_includes/{svg.html → components/svg.html} +0 -0
- /data/_includes/{zer0-env-var.html → components/zer0-env-var.html} +0 -0
- /data/_includes/{seo.html → content/seo.html} +0 -0
- /data/_includes/{style.html → docs/bootstrap-docs.html} +0 -0
- /data/_includes/{breadcrumbs.html → navigation/breadcrumbs.html} +0 -0
- /data/_includes/{nav_list.html → navigation/nav_list.html} +0 -0
- /data/_includes/{sidebar-categories.html → navigation/sidebar-categories.html} +0 -0
- /data/_includes/{sidebar-folders.html → navigation/sidebar-folders.html} +0 -0
data/_data/navigation/main.yml
CHANGED
|
@@ -1,27 +1,31 @@
|
|
|
1
|
-
- title: Quick
|
|
2
|
-
url: /quickstart
|
|
1
|
+
- title: Quick Start
|
|
2
|
+
url: /quickstart/
|
|
3
3
|
sublinks:
|
|
4
4
|
- title: zer0
|
|
5
5
|
url: /zer0/
|
|
6
|
-
- title:
|
|
7
|
-
url: /quickstart/machine-setup
|
|
6
|
+
- title: Machine Setup
|
|
7
|
+
url: /quickstart/machine-setup/
|
|
8
|
+
- title: "Jekyll Setup"
|
|
9
|
+
url: /quickstart/jekyll-setup/
|
|
10
|
+
- title: "GitHub Setup"
|
|
11
|
+
url: /quickstart/github-setup/
|
|
8
12
|
- title: Blog
|
|
9
|
-
url: /
|
|
13
|
+
url: /blog/
|
|
10
14
|
sublinks:
|
|
11
|
-
- title:
|
|
12
|
-
url: /
|
|
15
|
+
- title: All Posts
|
|
16
|
+
url: /posts/
|
|
13
17
|
- title: Docs
|
|
14
18
|
url: /docs/
|
|
15
19
|
sublinks:
|
|
16
20
|
- title: Jekyll
|
|
17
|
-
url: /docs/jekyll
|
|
21
|
+
url: /docs/jekyll/
|
|
18
22
|
|
|
19
23
|
- title: About
|
|
20
24
|
url: /about/
|
|
21
25
|
sublinks:
|
|
22
26
|
- title: Config
|
|
23
|
-
url: /about/config
|
|
27
|
+
url: /about/config/
|
|
24
28
|
- title: Theme
|
|
25
|
-
url: /about/theme
|
|
29
|
+
url: /about/theme/
|
|
26
30
|
- title: Sitemap
|
|
27
|
-
url: /about/sitemap
|
|
31
|
+
url: /about/sitemap/
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
- title: "Quick Start"
|
|
2
|
+
url: /quickstart/
|
|
3
|
+
sublinks:
|
|
4
|
+
- title: "Machine Setup"
|
|
5
|
+
url: /quickstart/machine-setup/
|
|
6
|
+
description: "Platform-specific setup and Docker installation"
|
|
7
|
+
- title: "Jekyll Setup"
|
|
8
|
+
url: /quickstart/jekyll-setup/
|
|
9
|
+
description: "Jekyll theme configuration and development environment"
|
|
10
|
+
- title: "GitHub Setup"
|
|
11
|
+
url: /quickstart/github-setup/
|
|
12
|
+
description: "Version control, GitHub integration, and deployment"
|
data/_includes/README.md
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# _includes Directory Organization
|
|
2
|
+
|
|
3
|
+
This directory has been reorganized for better maintainability and clarity. Files are now grouped by functionality into subdirectories.
|
|
4
|
+
|
|
5
|
+
## Directory Structure
|
|
6
|
+
|
|
7
|
+
### `core/`
|
|
8
|
+
|
|
9
|
+
Essential layout components that form the foundation of the site:
|
|
10
|
+
|
|
11
|
+
- `head.html` - HTML document head with meta tags, scripts, and styles
|
|
12
|
+
- `header.html` - Main site header with navigation
|
|
13
|
+
- `footer.html` - Site footer (if exists)
|
|
14
|
+
- `branding.html` - Site branding and title display
|
|
15
|
+
|
|
16
|
+
### `navigation/`
|
|
17
|
+
|
|
18
|
+
All navigation-related components:
|
|
19
|
+
|
|
20
|
+
- `navbar.html` - Main navigation menu
|
|
21
|
+
- `sidebar-left.html` - Left sidebar with dynamic navigation
|
|
22
|
+
- `sidebar-right.html` - Right sidebar content
|
|
23
|
+
- `sidebar-folders.html` - Dynamic folder structure generation
|
|
24
|
+
- `sidebar-categories.html` - Category-based navigation
|
|
25
|
+
- `nav_list.html` - Manual navigation list rendering
|
|
26
|
+
- `breadcrumbs.html` - Navigation breadcrumbs
|
|
27
|
+
|
|
28
|
+
### `analytics/`
|
|
29
|
+
|
|
30
|
+
Analytics and tracking integrations:
|
|
31
|
+
|
|
32
|
+
- `google-analytics.html` - Google Analytics tracking
|
|
33
|
+
- `google-tag-manager-head.html` - GTM head section
|
|
34
|
+
- `google-tag-manager-body.html` - GTM body section
|
|
35
|
+
|
|
36
|
+
### `components/`
|
|
37
|
+
|
|
38
|
+
Reusable UI components and widgets:
|
|
39
|
+
|
|
40
|
+
- `searchbar.html` - Search functionality
|
|
41
|
+
- `powered-by.html` - "Powered by" credits display
|
|
42
|
+
- `quick-index.html` - Quick page index
|
|
43
|
+
- `dev-shortcuts.html` - Developer shortcuts
|
|
44
|
+
- `info-section.html` - Settings/info modal
|
|
45
|
+
- `halfmoon.html` - Dark mode toggle
|
|
46
|
+
- `zer0-env-var.html` - Environment variable configuration
|
|
47
|
+
- `svg.html` - SVG icon definitions
|
|
48
|
+
- `js-cdn.html` - CDN JavaScript libraries
|
|
49
|
+
|
|
50
|
+
### `content/`
|
|
51
|
+
|
|
52
|
+
Content-specific features and enhancements:
|
|
53
|
+
|
|
54
|
+
- `seo.html` - SEO meta tags and structured data
|
|
55
|
+
- `toc.html` - Table of contents generation
|
|
56
|
+
- `giscus.html` - GitHub Discussions comment system
|
|
57
|
+
- `intro.html` - Page introduction section
|
|
58
|
+
- `sitemap.html` - Sitemap generation
|
|
59
|
+
|
|
60
|
+
### `landing/`
|
|
61
|
+
|
|
62
|
+
Landing page specific components:
|
|
63
|
+
|
|
64
|
+
- `landing-install-cards.html` - Installation method cards
|
|
65
|
+
- `landing-quick-links.html` - Quick links bar
|
|
66
|
+
|
|
67
|
+
### `docs/`
|
|
68
|
+
|
|
69
|
+
Documentation and reference materials:
|
|
70
|
+
|
|
71
|
+
- `bootstrap-docs.html` - Bootstrap documentation (moved from style.html)
|
|
72
|
+
|
|
73
|
+
## Usage
|
|
74
|
+
|
|
75
|
+
When including files in layouts or other templates, use the full path:
|
|
76
|
+
|
|
77
|
+
```liquid
|
|
78
|
+
{% include core/head.html %}
|
|
79
|
+
{% include navigation/sidebar-left.html %}
|
|
80
|
+
{% include components/searchbar.html %}
|
|
81
|
+
{% include analytics/google-analytics.html %}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Benefits of This Organization
|
|
85
|
+
|
|
86
|
+
1. **Logical Grouping**: Related functionality is grouped together
|
|
87
|
+
2. **Easier Maintenance**: Finding and editing specific components is simpler
|
|
88
|
+
3. **Reduced Conflicts**: Clear separation reduces naming conflicts
|
|
89
|
+
4. **Better Documentation**: Each directory has a clear purpose
|
|
90
|
+
5. **Scalability**: Easy to add new components to appropriate directories
|
|
91
|
+
|
|
92
|
+
## Migration Notes
|
|
93
|
+
|
|
94
|
+
- All include paths in layouts have been updated to reflect the new structure
|
|
95
|
+
- The duplicate `toc` file has been removed
|
|
96
|
+
- Large Bootstrap documentation moved to `docs/` directory
|
|
97
|
+
- No functionality has been changed, only organization
|
|
@@ -18,13 +18,13 @@
|
|
|
18
18
|
|
|
19
19
|
<div class="container">
|
|
20
20
|
<!-- _include/breadcrumbs.html -->
|
|
21
|
-
{% include breadcrumbs.html %}
|
|
22
|
-
{% include searchbar.html %}
|
|
21
|
+
{% include navigation/breadcrumbs.html %}
|
|
22
|
+
{% include components/searchbar.html %}
|
|
23
23
|
|
|
24
24
|
<!-- Shortcuts to source bode -->
|
|
25
|
-
{% include dev-shortcuts.html %}
|
|
25
|
+
{% include components/dev-shortcuts.html %}
|
|
26
26
|
<!-- Dark Mode Switch -->
|
|
27
|
-
{% include halfmoon.html %}
|
|
27
|
+
{% include components/halfmoon.html %}
|
|
28
28
|
</div>
|
|
29
29
|
</div>
|
|
30
30
|
<div class="modal-footer">
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
╔═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
|
|
3
|
+
║ giscus.html ║
|
|
4
|
+
║ GitHub Discussions Comment System ║
|
|
5
|
+
╠═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════╣
|
|
6
|
+
║ ║
|
|
7
|
+
║ Purpose: Integrates Giscus comment system powered by GitHub Discussions ║
|
|
8
|
+
║ Location: /_includes/giscus.html ║
|
|
9
|
+
║ Usage: {% include giscus.html %} (typically at bottom of posts/pages) ║
|
|
10
|
+
║ Dependencies: GitHub repository with Discussions enabled, site.repository, site.giscus configuration ║
|
|
11
|
+
║ ║
|
|
12
|
+
║ Features: ║
|
|
13
|
+
║ • GitHub Discussions-based commenting system ║
|
|
14
|
+
║ • Automatic theme detection (preferred_color_scheme) ║
|
|
15
|
+
║ • Pathname-based mapping for unique comment threads ║
|
|
16
|
+
║ • Reaction support for enhanced user engagement ║
|
|
17
|
+
║ • Top-positioned input for better UX ║
|
|
18
|
+
║ ║
|
|
19
|
+
║ Configuration Options: ║
|
|
20
|
+
║ • data-repo: GitHub repository (site.repository) ║
|
|
21
|
+
║ • data-repo-id: GitHub repository ID (site.giscus.data-repo-id) ║
|
|
22
|
+
║ • data-category-id: Discussions category ID (site.giscus.data-category-id) ║
|
|
23
|
+
║ • data-mapping: "pathname" - maps comments to page URL ║
|
|
24
|
+
║ • data-strict: "1" - enables strict mapping mode ║
|
|
25
|
+
║ ║
|
|
26
|
+
║ Setup Requirements: ║
|
|
27
|
+
║ • GitHub repository with Discussions feature enabled ║
|
|
28
|
+
║ • Giscus app installed on the repository ║
|
|
29
|
+
║ • Correct repo-id and category-id in _config.yml ║
|
|
30
|
+
║ ║
|
|
31
|
+
║ Reference: Feature Request #FR000001 ║
|
|
32
|
+
║ Documentation: https://giscus.app/ ║
|
|
33
|
+
║ ║
|
|
34
|
+
╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
|
|
35
|
+
-->
|
|
36
|
+
|
|
37
|
+
<!-- ===================================================================================================== -->
|
|
38
|
+
<!-- GISCUS COMMENT SYSTEM -->
|
|
39
|
+
<!-- ===================================================================================================== -->
|
|
40
|
+
<!-- GitHub Discussions-powered comment system integration -->
|
|
41
|
+
<!-- Feature Request: #FR000001 -->
|
|
42
|
+
<!-- Documentation: https://giscus.app/ -->
|
|
43
|
+
<!-- Async loading: Non-blocking comment system initialization -->
|
|
44
|
+
|
|
45
|
+
<!-- giscus app - https://giscus.app/ - Feature # FR000001 -->
|
|
46
|
+
|
|
47
|
+
<script src="https://giscus.app/client.js"
|
|
48
|
+
data-repo="{{ site.repository }}"
|
|
49
|
+
data-repo-id="{{ site.giscus.data-repo-id }}"
|
|
50
|
+
data-category-id="{{ site.giscus.data-category-id }}"
|
|
51
|
+
data-mapping="pathname"
|
|
52
|
+
data-strict="1"
|
|
53
|
+
data-reactions-enabled="1"
|
|
54
|
+
data-emit-metadata="0"
|
|
55
|
+
data-input-position="top"
|
|
56
|
+
data-theme="preferred_color_scheme"
|
|
57
|
+
data-lang="en"
|
|
58
|
+
crossorigin="anonymous"
|
|
59
|
+
async>
|
|
60
|
+
</script>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
file: _includes/intro.html
|
|
3
|
+
description: Enhanced intro section with improved share functionality and better button alignment
|
|
4
|
+
path: _includes/intro.html
|
|
5
|
+
features:
|
|
6
|
+
- Responsive share dropdown with multiple social platforms
|
|
7
|
+
- Properly aligned action buttons at bottom right
|
|
8
|
+
- Improved accessibility with icons and labels
|
|
9
|
+
- Clean button grouping with consistent spacing
|
|
10
|
+
-->
|
|
11
|
+
{% if page.collection %}
|
|
12
|
+
{% capture page_dir %}{{ site.collections_dir }}{% endcapture %}
|
|
13
|
+
{% assign testvar = "collection exists" %}
|
|
14
|
+
{% endif %}
|
|
15
|
+
|
|
16
|
+
<!-- Intro Section -->
|
|
17
|
+
|
|
18
|
+
<div class="bd-intro pt-5 ps-lg-2 position-relative" style="
|
|
19
|
+
background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url('{{site.baseurl}}/{{ site.public_folder }}/{{ page.preview | default: site.info_banner }}') no-repeat center center / cover;
|
|
20
|
+
color: #fff;">
|
|
21
|
+
|
|
22
|
+
<br>
|
|
23
|
+
<h1>{{ page.title }}</h1>
|
|
24
|
+
<p>By {{ page.author | default: site.author.name }}</p>
|
|
25
|
+
<p>{{ page.description }}</p>
|
|
26
|
+
<p>Estimated reading time: {{ content | number_of_words | divided_by:200 }} minutes</p>
|
|
27
|
+
<!-- Action Buttons Group -->
|
|
28
|
+
<div class="position-absolute bottom-0 end-0 m-3 d-flex gap-2">
|
|
29
|
+
<!-- Share Button -->
|
|
30
|
+
<div class="dropdown">
|
|
31
|
+
<button class="btn btn-info dropdown-toggle" type="button" id="shareDropdownBottom" data-bs-toggle="dropdown" aria-expanded="false">
|
|
32
|
+
<i class="bi bi-share"></i>
|
|
33
|
+
<span class="d-none d-sm-inline ms-1">Share</span>
|
|
34
|
+
</button>
|
|
35
|
+
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="shareDropdownBottom">
|
|
36
|
+
<li>
|
|
37
|
+
<a class="dropdown-item" href="https://reddit.com/submit?url={{ page.url | absolute_url | url_encode }}&title={{ page.title | url_encode }}" target="_blank">
|
|
38
|
+
<i class="bi bi-reddit me-2"></i>Share on Reddit
|
|
39
|
+
</a>
|
|
40
|
+
</li>
|
|
41
|
+
<li>
|
|
42
|
+
<a class="dropdown-item" href="https://www.linkedin.com/sharing/share-offsite/?url={{ page.url | absolute_url | url_encode }}" target="_blank">
|
|
43
|
+
<i class="bi bi-linkedin me-2"></i>Share on LinkedIn
|
|
44
|
+
</a>
|
|
45
|
+
</li>
|
|
46
|
+
<li>
|
|
47
|
+
<a class="dropdown-item" href="https://twitter.com/intent/tweet?url={{ page.url | absolute_url | url_encode }}&text={{ page.title | url_encode }}" target="_blank">
|
|
48
|
+
<i class="bi bi-twitter me-2"></i>Share on Twitter
|
|
49
|
+
</a>
|
|
50
|
+
</li>
|
|
51
|
+
<li><hr class="dropdown-divider"></li>
|
|
52
|
+
<li>
|
|
53
|
+
<button class="dropdown-item" onclick='navigator.clipboard.writeText("{{ page.url | absolute_url }}"); alert("Link copied to clipboard!");'>
|
|
54
|
+
<i class="bi bi-clipboard me-2"></i>Copy Link
|
|
55
|
+
</button>
|
|
56
|
+
</li>
|
|
57
|
+
</ul>
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<!-- Edit on Github Button -->
|
|
61
|
+
<a href="https://github.com/{{ site.repository }}/blob/master/{{ page_dir }}/{{ page.path }}" class="btn btn-dark">
|
|
62
|
+
<i class="bi bi-github"></i>
|
|
63
|
+
<span class="d-none d-sm-inline ms-1">Edit on GitHub</span>
|
|
64
|
+
</a>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"...like all things liquid - where there's a will, and ~36 hours to spare, there's usually a/some way" ~jaybe
|
|
31
31
|
|
|
32
32
|
Usage:
|
|
33
|
-
{% include toc.html html=content sanitize=true class="inline_toc" id="my_toc" h_min=2 h_max=3 %}
|
|
33
|
+
{% include content/toc.html html=content sanitize=true class="inline_toc" id="my_toc" h_min=2 h_max=3 %}
|
|
34
34
|
|
|
35
35
|
Parameters:
|
|
36
36
|
* html (string) - the HTML of compiled markdown generated by kramdown in Jekyll
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
<!-- Title Section -->
|
|
23
23
|
|
|
24
24
|
<div class="navbar-brand">
|
|
25
|
-
<a class="nav-link" href="{{ site.
|
|
26
|
-
<i class="d-sm-inline d-md-none {{ site.default_icon }} {{ site.default_icon }}-{{ site.title_icon | default: site.powered_by.default }}" aria-hidden="true"></i>
|
|
25
|
+
<a class="nav-link" href="{{ site.domain_url}}{{ page.url }}">
|
|
26
|
+
<i class="d-sm-inline d-md-none {{ site.default_icon }} {{ site .default_icon }}-{{ site.title_icon | default: site.powered_by.default }}" aria-hidden="true"></i>
|
|
27
27
|
<!-- display name if there's enough space, else icon only -->
|
|
28
28
|
<span class="d-none d-md-inline">
|
|
29
29
|
{{ site.title | default: site.title }}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
===================================================================
|
|
3
|
+
FOOTER - Comprehensive Site Footer with Branding & Navigation
|
|
4
|
+
===================================================================
|
|
5
|
+
|
|
6
|
+
File: footer.html
|
|
7
|
+
Path: _includes/footer.html
|
|
8
|
+
Purpose: Rich footer inspired by bashconsultants with Powered-by row,
|
|
9
|
+
branding/contact, quick links, social/RSS, subscribe form, and
|
|
10
|
+
policy links. Fully responsive with Bootstrap 5 utilities.
|
|
11
|
+
|
|
12
|
+
Template Logic:
|
|
13
|
+
- Top row: "Powered by" credits from site.powered_by
|
|
14
|
+
- Branding block: Site title, optional address/phone/email
|
|
15
|
+
- Quick links: Common pages (adjust as needed)
|
|
16
|
+
- Social links: site.links with icons + RSS feed
|
|
17
|
+
- Subscribe form: Non-functional placeholder endpoint (/subscribe)
|
|
18
|
+
- Bottom bar: Dynamic copyright year
|
|
19
|
+
|
|
20
|
+
Dependencies:
|
|
21
|
+
- site.powered_by: Framework and service credits
|
|
22
|
+
- site.links: Social media and affiliate links
|
|
23
|
+
- site.default_icon: Icon framework (Bootstrap Icons)
|
|
24
|
+
- site.data.ui-text: Internationalization support for RSS label
|
|
25
|
+
- Bootstrap 5 classes provided by the theme
|
|
26
|
+
|
|
27
|
+
Notes:
|
|
28
|
+
- Guard optional fields (address/phone/email) to avoid empty output
|
|
29
|
+
- Use relative_url for internal links to respect baseurl
|
|
30
|
+
===================================================================
|
|
31
|
+
-->
|
|
32
|
+
|
|
33
|
+
<footer class="bd-footer container-xl border-top" role="contentinfo">
|
|
34
|
+
<!-- Powered by Row -->
|
|
35
|
+
<div class="container row my-3">
|
|
36
|
+
<ul class="nav col-sm justify-content-end list-unstyled d-flex align-items-center" aria-label="Powered by technologies">
|
|
37
|
+
<span class="align-start">
|
|
38
|
+
© {{ site.time | date: "%Y" }} {{ site.name | default: site.title }} — Powered by:
|
|
39
|
+
</span>
|
|
40
|
+
{% for power in site.powered_by %}
|
|
41
|
+
<li class="btn align-items-end">
|
|
42
|
+
{% if power.url %}
|
|
43
|
+
<a href="{{ power.url }}" rel="nofollow">
|
|
44
|
+
<i class="{{ site.default_icon }} {{ power.icon | default: site.powered_by.default }}" aria-hidden="true"></i>
|
|
45
|
+
<span class="d-none d-md-inline">{{ power.name }}</span>
|
|
46
|
+
</a>
|
|
47
|
+
{% else %}
|
|
48
|
+
<span class="text-muted">
|
|
49
|
+
<i class="{{ site.default_icon }} {{ power.icon | default: site.powered_by.default }}" aria-hidden="true"></i>
|
|
50
|
+
<span class="d-none d-md-inline">{{ power.name }}</span>
|
|
51
|
+
</span>
|
|
52
|
+
{% endif %}
|
|
53
|
+
</li>
|
|
54
|
+
{% endfor %}
|
|
55
|
+
</ul>
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
<!-- Branding and Navigation Block -->
|
|
59
|
+
<div class="container row">
|
|
60
|
+
<div class="container bg-dark text-light py-5 rounded-3">
|
|
61
|
+
<div class="container">
|
|
62
|
+
<!-- Top: Site info + Quick Links + Social -->
|
|
63
|
+
<div class="row mb-4">
|
|
64
|
+
<!-- Site Info -->
|
|
65
|
+
<div class="col-12 col-md-6 col-lg-3 mb-3">
|
|
66
|
+
<h5 class="text-uppercase mb-3">{{ site.title }}</h5>
|
|
67
|
+
{% if site.address %}<p class="mb-1">{{ site.address }}</p>{% endif %}
|
|
68
|
+
{% if site.phone %}<p class="mb-1"><a href="tel:{{ site.phone }}" class="text-light text-decoration-none">{{ site.phone }}</a></p>{% endif %}
|
|
69
|
+
{% if site.email %}<p class="mb-0"><a href="mailto:{{ site.email }}" class="text-light text-decoration-none">{{ site.email }}</a></p>{% endif %}
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
<!-- Quick Links -->
|
|
73
|
+
<div class="col-12 col-md-6 col-lg-3 mb-3">
|
|
74
|
+
<h5 class="text-uppercase mb-3">Quick Links</h5>
|
|
75
|
+
<ul class="list-unstyled" aria-label="Footer quick links">
|
|
76
|
+
<li><a href="{{ '/' | relative_url }}" class="text-light text-decoration-none">Home</a></li>
|
|
77
|
+
<li><a href="{{ '/about' | relative_url }}" class="text-light text-decoration-none">About</a></li>
|
|
78
|
+
<li><a href="{{ '/services' | relative_url }}" class="text-light text-decoration-none">Services</a></li>
|
|
79
|
+
<li><a href="{{ '/blog' | relative_url }}" class="text-light text-decoration-none">Blog</a></li>
|
|
80
|
+
<li><a href="{{ '/contact' | relative_url }}" class="text-light text-decoration-none">Contact</a></li>
|
|
81
|
+
<li><a href="{{ '/sitemap.xml' | relative_url }}" class="text-light text-decoration-none">Sitemap (XML)</a></li>
|
|
82
|
+
</ul>
|
|
83
|
+
</div>
|
|
84
|
+
|
|
85
|
+
<!-- Latest Posts (dynamic) -->
|
|
86
|
+
{% assign posts_count = site.posts | size %}
|
|
87
|
+
{% if posts_count and posts_count > 0 %}
|
|
88
|
+
<div class="col-12 col-md-6 col-lg-3 mb-3">
|
|
89
|
+
<h5 class="text-uppercase mb-3">Latest Posts</h5>
|
|
90
|
+
<ul class="list-unstyled" aria-label="Latest posts">
|
|
91
|
+
{% for post in site.posts limit:3 %}
|
|
92
|
+
<li class="mb-1">
|
|
93
|
+
<a href="{{ post.url | relative_url }}" class="text-light text-decoration-none">{{ post.title }}</a>
|
|
94
|
+
</li>
|
|
95
|
+
{% endfor %}
|
|
96
|
+
</ul>
|
|
97
|
+
</div>
|
|
98
|
+
{% endif %}
|
|
99
|
+
|
|
100
|
+
<!-- Social & RSS -->
|
|
101
|
+
<div class="col-12 col-md-6 col-lg-3 mb-3">
|
|
102
|
+
<h5 class="text-uppercase mb-3">Follow Us</h5>
|
|
103
|
+
<ul class="list-inline mb-0" aria-label="Social links">
|
|
104
|
+
{% for link in site.links %}
|
|
105
|
+
{% if link.url %}
|
|
106
|
+
<li class="list-inline-item">
|
|
107
|
+
<a href="{{ link.url }}" rel="nofollow" class="text-light text-decoration-none">
|
|
108
|
+
<i class="{{ site.default_icon }} {{ link.icon | default: site.links.default }}" aria-hidden="true"></i>
|
|
109
|
+
<span class="d-none d-md-inline">{{ link.label }}</span>
|
|
110
|
+
</a>
|
|
111
|
+
</li>
|
|
112
|
+
{% endif %}
|
|
113
|
+
{% endfor %}
|
|
114
|
+
<li class="list-inline-item">
|
|
115
|
+
<a class="text-light text-decoration-none" href="{{ '/feed.xml' | relative_url }}">
|
|
116
|
+
<i class="{{ site.default_icon }} bi-rss" aria-hidden="true"></i>
|
|
117
|
+
<span class="d-none d-md-inline">{{ site.data.ui-text[site.locale].feed_label | default: "Feed" }}</span>
|
|
118
|
+
</a>
|
|
119
|
+
</li>
|
|
120
|
+
</ul>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
<!-- Middle: Subscribe + Policies -->
|
|
125
|
+
<div class="row mb-4 align-items-center g-2">
|
|
126
|
+
<div class="col-md-8">
|
|
127
|
+
<form action="/subscribe" method="post" class="row g-2" aria-label="Subscribe form">
|
|
128
|
+
<div class="col-md-8">
|
|
129
|
+
<label for="footer-email" class="visually-hidden">Email</label>
|
|
130
|
+
<input type="email" name="email" id="footer-email" class="form-control" placeholder="Enter your email" required>
|
|
131
|
+
</div>
|
|
132
|
+
<div class="col-md-4">
|
|
133
|
+
<button type="submit" class="btn btn-primary w-100">Subscribe</button>
|
|
134
|
+
</div>
|
|
135
|
+
</form>
|
|
136
|
+
</div>
|
|
137
|
+
<div class="col-md-4 text-md-end">
|
|
138
|
+
<ul class="list-inline mb-0">
|
|
139
|
+
<li class="list-inline-item"><a href="{{ '/privacy-policy' | relative_url }}" class="text-light text-decoration-none">Privacy Policy</a></li>
|
|
140
|
+
<li class="list-inline-item"><a href="{{ '/terms-of-service' | relative_url }}" class="text-light text-decoration-none">Terms of Service</a></li>
|
|
141
|
+
</ul>
|
|
142
|
+
</div>
|
|
143
|
+
</div>
|
|
144
|
+
|
|
145
|
+
<!-- Bottom: Copyright -->
|
|
146
|
+
<div class="text-center">
|
|
147
|
+
<p class="mb-0">© {{ site.time | date: "%Y" }} {{ site.title | default: site.name }}. All Rights Reserved.</p>
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
</div>
|
|
151
|
+
</div>
|
|
152
|
+
|
|
153
|
+
<!-- Back to Top Button (controlled by assets/js/back-to-top.js) -->
|
|
154
|
+
<a
|
|
155
|
+
id="backToTopBtn"
|
|
156
|
+
href="#"
|
|
157
|
+
class="btn btn-primary position-fixed bottom-0 end-0 m-3"
|
|
158
|
+
aria-label="Back to top"
|
|
159
|
+
title="Back to top"
|
|
160
|
+
role="button"
|
|
161
|
+
style="display: none;"
|
|
162
|
+
>
|
|
163
|
+
<i class="{{ site.default_icon }} bi-arrow-up" aria-hidden="true"></i>
|
|
164
|
+
<span class="visually-hidden">Back to top</span>
|
|
165
|
+
</a>
|
|
166
|
+
</footer>
|
|
167
|
+
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
===================================================================
|
|
3
|
+
HEAD - HTML Document Head Section
|
|
4
|
+
===================================================================
|
|
5
|
+
|
|
6
|
+
File: head.html
|
|
7
|
+
Path: _includes/head.html
|
|
8
|
+
Purpose: Complete HTML document head section with meta tags, styles,
|
|
9
|
+
and essential JavaScript libraries
|
|
10
|
+
|
|
11
|
+
Template Logic:
|
|
12
|
+
- Loads critical JavaScript libraries before page render
|
|
13
|
+
- Includes SEO optimization and social media meta tags
|
|
14
|
+
- Configures third-party integrations (Analytics, MathJax)
|
|
15
|
+
- Sets up progress bar and UI enhancement scripts
|
|
16
|
+
|
|
17
|
+
Dependencies:
|
|
18
|
+
- seo.html: SEO meta tags and Open Graph data
|
|
19
|
+
- google-analytics.html: Google Analytics tracking
|
|
20
|
+
- google-tag-manager-head.html: GTM head section
|
|
21
|
+
|
|
22
|
+
Performance Notes:
|
|
23
|
+
- Scripts loaded in head for immediate availability
|
|
24
|
+
- MathJax loaded asynchronously to prevent render blocking
|
|
25
|
+
- Nanobar provides visual loading feedback
|
|
26
|
+
===================================================================
|
|
27
|
+
-->
|
|
28
|
+
|
|
29
|
+
<!-- ================================ -->
|
|
30
|
+
<!-- ANALYTICS AND TRACKING -->
|
|
31
|
+
<!-- ================================ -->
|
|
32
|
+
<!-- Google Tag Manager - Must be in head section for proper tracking -->
|
|
33
|
+
{% include analytics/google-tag-manager-head.html %}
|
|
34
|
+
|
|
35
|
+
<!-- ================================ -->
|
|
36
|
+
<!-- JAVASCRIPT LIBRARIES -->
|
|
37
|
+
<!-- ================================ -->
|
|
38
|
+
<!-- Custom theme JavaScript - Loaded early for UI functionality -->
|
|
39
|
+
<script src="{{ '/assets/js/myScript.js' | relative_url }}"></script>
|
|
40
|
+
<script src="{{ '/assets/js/auto-hide-nav.js' | relative_url }}"></script>
|
|
41
|
+
<script src="{{ '/assets/js/back-to-top.js' | relative_url }}"></script>
|
|
42
|
+
<script src="{{ '/assets/js/halfmoon.js' | relative_url }}"></script>
|
|
43
|
+
<script src="{{ '/assets/js/side-bar-folders.js' | relative_url }}"></script>
|
|
44
|
+
<script src="{{ '/assets/js/code-copy.js' | relative_url }}"></script>
|
|
45
|
+
|
|
46
|
+
<!-- ================================ -->
|
|
47
|
+
<!-- THIRD PARTY INTEGRATIONS -->
|
|
48
|
+
<!-- ================================ -->
|
|
49
|
+
|
|
50
|
+
<!-- Mermaid Diagrams - Currently disabled for performance -->
|
|
51
|
+
<!-- Enable for pages requiring diagram generation -->
|
|
52
|
+
<!-- <script src="https://cdn.jsdelivr.net/npm/mermaid@8/dist/mermaid.min.js"></script>
|
|
53
|
+
<script>mermaid.initialize({ startOnLoad: true });</script> -->
|
|
54
|
+
|
|
55
|
+
<!-- Nano Progress Bar - Visual loading indicator -->
|
|
56
|
+
<script src="{{'/assets/js/nanobar.min.js' | relative_url }}"></script>
|
|
57
|
+
|
|
58
|
+
<!-- Progress Bar Initialization - Creates visual loading feedback -->
|
|
59
|
+
<script>
|
|
60
|
+
// Wait for DOM to be ready before initializing Nanobar
|
|
61
|
+
document.addEventListener('DOMContentLoaded', function() {
|
|
62
|
+
// Check if the progress bar element exists before initializing
|
|
63
|
+
var progressElement = document.getElementById('top-progress-bar');
|
|
64
|
+
if (progressElement) {
|
|
65
|
+
var options = {
|
|
66
|
+
classname: 'nanobar',
|
|
67
|
+
id: 'top-progress-bar'
|
|
68
|
+
};
|
|
69
|
+
var nanobar = new Nanobar(options);
|
|
70
|
+
nanobar.go( 30 ); // Initial loading state
|
|
71
|
+
nanobar.go( 76 ); // Partial completion
|
|
72
|
+
nanobar.go(100); // Complete loading
|
|
73
|
+
} else {
|
|
74
|
+
console.warn('Progress bar element #top-progress-bar not found. Skipping Nanobar initialization.');
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
</script>
|
|
78
|
+
|
|
79
|
+
<!-- MathJax - Mathematical notation rendering (async for performance) -->
|
|
80
|
+
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
|
81
|
+
|
|
82
|
+
<!-- ================================ -->
|
|
83
|
+
<!-- HTML DOCUMENT META DATA -->
|
|
84
|
+
<!-- ================================ -->
|
|
85
|
+
<!-- Essential meta tags for proper document rendering and mobile support -->
|
|
86
|
+
<meta charset="utf-8">
|
|
87
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
88
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
89
|
+
|
|
90
|
+
<!-- ================================ -->
|
|
91
|
+
<!-- SEO AND SOCIAL MEDIA META TAGS -->
|
|
92
|
+
<!-- ================================ -->
|
|
93
|
+
<!-- Comprehensive SEO optimization including Open Graph and Twitter Cards -->
|
|
94
|
+
{% include content/seo.html %}
|
|
95
|
+
|
|
96
|
+
<!-- ========================== -->
|
|
97
|
+
<!-- STRUCTURED DATA MARKUP -->
|
|
98
|
+
<!-- ========================== -->
|
|
99
|
+
<!-- Enhanced meta data for rich snippets and social media -->
|
|
100
|
+
{% if page.title %}
|
|
101
|
+
<meta itemprop="headline" content="{{ page.title | markdownify | strip_html | strip_newlines | escape_once }}">
|
|
102
|
+
{% endif %}
|
|
103
|
+
{% if page.description %}
|
|
104
|
+
<meta itemprop="description" content="{{ page.description | markdownify | strip_html | strip_newlines | escape_once }}">
|
|
105
|
+
{% elsif page.excerpt %}
|
|
106
|
+
<meta itemprop="description" content="{{ page.excerpt | markdownify | strip_html | strip_newlines | escape_once}} ">
|
|
107
|
+
{% endif %}
|
|
108
|
+
{% if page.date %}
|
|
109
|
+
<meta itemprop="datePublished" content="{{ page.date | date_to_xmlschema }}">
|
|
110
|
+
{% endif %}
|
|
111
|
+
{% if page.last_modified_at %}
|
|
112
|
+
<meta itemprop="dateModified" content="{{ page.lastmod | date_to_xmlschema }}">
|
|
113
|
+
{% endif %}
|
|
114
|
+
|
|
115
|
+
<!-- ========================== -->
|
|
116
|
+
<!-- ANALYTICS INTEGRATION -->
|
|
117
|
+
<!-- ========================== -->
|
|
118
|
+
<!-- Google Analytics tracking - Configured in _config.yml -->
|
|
119
|
+
{% include analytics/google-analytics.html %}
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
<!-- ================================ -->
|
|
123
|
+
<!-- CSS FRAMEWORKS AND LIBRARIES -->
|
|
124
|
+
<!-- ================================ -->
|
|
125
|
+
|
|
126
|
+
<!-- ========================== -->
|
|
127
|
+
<!-- BOOTSTRAP 5 FRAMEWORK -->
|
|
128
|
+
<!-- ========================== -->
|
|
129
|
+
<!-- Bootstrap 5.3.3 - Primary CSS framework via CDN for performance -->
|
|
130
|
+
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
|
131
|
+
|
|
132
|
+
<!-- Local Bootstrap Installation - Alternative for offline development -->
|
|
133
|
+
<!-- <script src="/assets/js/bootstrap.js"></script> -->
|
|
134
|
+
|
|
135
|
+
<!-- ========================== -->
|
|
136
|
+
<!-- ICON LIBRARIES -->
|
|
137
|
+
<!-- ========================== -->
|
|
138
|
+
<!-- Bootstrap Icons 1.10.3 - Complete icon set for UI elements -->
|
|
139
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.3/font/bootstrap-icons.css">
|
|
140
|
+
|
|
141
|
+
<!-- ========================== -->
|
|
142
|
+
<!-- CUSTOM THEME STYLES -->
|
|
143
|
+
<!-- ========================== -->
|
|
144
|
+
<!-- Primary theme stylesheet - Core styling and layout -->
|
|
145
|
+
<link rel="stylesheet" href="{{ '/assets/css/main.css' | relative_url }}">
|
|
146
|
+
|
|
147
|
+
<!-- Custom CSS overrides - Theme customizations and tweaks -->
|
|
148
|
+
<link rel="stylesheet" href="{{'/assets/css/custom.css' | relative_url }}">
|
|
149
|
+
|
|
150
|
+
<!-- ========================== -->
|
|
151
|
+
<!-- EXPERIMENTAL FRAMEWORKS -->
|
|
152
|
+
<!-- ========================== -->
|
|
153
|
+
<!-- Tailwind CSS - Currently disabled, enable for utility-first styling -->
|
|
154
|
+
<!-- <script src="https://cdn.tailwindcss.com"></script> -->
|
|
155
|
+
|
|
156
|
+
<!-- Docs CSS - Alternative stylesheet, currently disabled due to scroll spy issues -->
|
|
157
|
+
<!-- TODO: Replace with compiled Sass when scroll spy functionality is fixed -->
|
|
158
|
+
<!-- <link rel="stylesheet" href="/assets/css/docs.css"> -->
|