jekyll-theme-zer0 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +29 -0
- data/README.md +4 -4
- data/_includes/components/js-cdn.html +8 -1
- data/_includes/content/backlinks.html +4 -0
- data/_includes/navigation/local-graph.html +55 -20
- data/_layouts/default.html +104 -100
- data/_sass/core/_obsidian.scss +77 -4
- data/_sass/core/_offcanvas-panels.scss +8 -4
- data/assets/js/obsidian-local-graph.js +72 -20
- data/assets/js/obsidian-wiki-links.js +21 -4
- data/scripts/README.md +22 -0
- data/scripts/bin/test +62 -0
- data/scripts/bin/validate +596 -0
- data/scripts/lib/README.md +16 -0
- data/scripts/validate +11 -0
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 398f5967ae3eedcc43ca6b6ef344d62207ab1d36a457203ab7023dd926a9742b
|
|
4
|
+
data.tar.gz: b4a234aef6bbb109ae6410a46d2c48a292fdd048fa47729bbe6ac728c92f20e1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 12f0348d5fff7c3f3c2219dcd873e25363a4af52f8df636841955e3b69a7b4860816de2d543ba4e067f887fc5ae4f181f4a9db2df50dbf84fb64a1806b084c06
|
|
7
|
+
data.tar.gz: e97964b79d62031aac4f469ab561e6bbb96fd61b17c56aa71a1418d72a588a0723f3b85be38a189f4e502d13886911da6a862d255c2e75b962b58ae51d00bb2a
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.4.0] - 2026-04-25
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
- Version bump: minor release
|
|
7
|
+
|
|
8
|
+
### Commits in this release
|
|
9
|
+
- d39dfa9 Add standalone Obsidian local graph panel (#77)
|
|
10
|
+
|
|
11
|
+
|
|
3
12
|
## [1.3.0] - 2026-04-24
|
|
4
13
|
|
|
5
14
|
### Changed
|
|
@@ -40,6 +49,12 @@
|
|
|
40
49
|
## [Unreleased]
|
|
41
50
|
|
|
42
51
|
### Added
|
|
52
|
+
- **Development Automation**: Added `scripts/bin/validate` and `scripts/validate`
|
|
53
|
+
as the canonical preflight validation command for repository files, version
|
|
54
|
+
consistency, YAML/data parsing, active configuration contracts, config-file
|
|
55
|
+
classification, navigation data shape, Jekyll build/doctor, compiled assets,
|
|
56
|
+
and optional tests/Obsidian/HTMLProofer checks. CI fast checks now call
|
|
57
|
+
`./scripts/bin/validate --quick`.
|
|
43
58
|
- **Obsidian Integration** — The repo's markdown content is now editable as an [Obsidian](https://obsidian.md) vault and rendered identically on GitHub Pages.
|
|
44
59
|
- Shared vault config (`.obsidian/app.json`, `core-plugins.json`, `community-plugins.json`, `appearance.json`, `hotkeys.json`, `templates.json`) and a Templates-compatible note template at `pages/_notes/_templates/note-template.md`.
|
|
45
60
|
- Liquid-generated `assets/data/wiki-index.json` listing every collection document and standalone page (title, basename, permalink, tags, aliases, excerpt) — works on the default GitHub Pages remote_theme build, no plugin whitelist changes required.
|
|
@@ -76,6 +91,20 @@
|
|
|
76
91
|
`Your Site Title`, `My Awesome Site`, `Welcome`, `Untitled`, or empty).
|
|
77
92
|
|
|
78
93
|
### Fixed
|
|
94
|
+
- **Obsidian Local Graph**: Moved the local graph out of the documentation
|
|
95
|
+
navigation sidebar into its own collapsible side panel with a larger canvas
|
|
96
|
+
and resize-on-open behavior so Cytoscape renders cleanly. Pages with no
|
|
97
|
+
local wiki-link neighbors now keep the graph control visible and render a
|
|
98
|
+
current-page-only graph instead of hiding the panel.
|
|
99
|
+
- **Obsidian Resolver**: The client-side wiki-link resolver now receives
|
|
100
|
+
baseurl-safe index, attachment, and tag URLs from Liquid and derives a safe
|
|
101
|
+
fallback from its script path for GitHub Pages project sites.
|
|
102
|
+
- **Backlinks**: The linked-mentions include now skips draft and unpublished
|
|
103
|
+
candidates unless `site.show_drafts` is enabled.
|
|
104
|
+
- **Validation**: `scripts/bin/validate --quick` now accepts YAML anchors and
|
|
105
|
+
date values used by repository config/data files.
|
|
106
|
+
- **Tests**: `test/test_runner.sh` now includes an `obsidian` suite key/name so
|
|
107
|
+
suite keys, scripts, and labels stay aligned.
|
|
79
108
|
- **Footer Quick Links no longer 404 on bare-minimum sites.**
|
|
80
109
|
`_includes/core/footer.html` previously hard-coded links to
|
|
81
110
|
`/about/`, `/services/`, `/news/`, `/contact/`, `/privacy-policy`, and
|
data/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
title: zer0-mistakes
|
|
3
3
|
sub-title: AI-Native Jekyll Theme
|
|
4
4
|
description: AI-native Jekyll theme for GitHub Pages — Docker-first development, AI-powered installation, multi-agent integration (Copilot, Codex, Cursor, Claude), AI preview-image generation, and AIEO content optimization with Bootstrap 5.3.
|
|
5
|
-
version: 1.
|
|
5
|
+
version: 1.4.0
|
|
6
6
|
layout: landing
|
|
7
7
|
tags:
|
|
8
8
|
- jekyll
|
|
@@ -20,7 +20,7 @@ categories:
|
|
|
20
20
|
- bootstrap
|
|
21
21
|
- ai-tooling
|
|
22
22
|
created: 2024-02-10T23:51:11.480Z
|
|
23
|
-
lastmod: 2026-04-
|
|
23
|
+
lastmod: 2026-04-25T19:55:07.000Z
|
|
24
24
|
draft: false
|
|
25
25
|
permalink: /
|
|
26
26
|
slug: zer0
|
|
@@ -1138,7 +1138,7 @@ git push origin feature/awesome-feature
|
|
|
1138
1138
|
|
|
1139
1139
|
| Metric | Value |
|
|
1140
1140
|
|--------|-------|
|
|
1141
|
-
| **Current Version** | 1.
|
|
1141
|
+
| **Current Version** | 1.4.0 ([RubyGems](https://rubygems.org/gems/jekyll-theme-zer0), [CHANGELOG](/CHANGELOG)) |
|
|
1142
1142
|
| **Documented Features** | 43 ([Feature Registry](https://github.com/bamr87/zer0-mistakes/blob/main/_data/features.yml)) |
|
|
1143
1143
|
| **Setup Time** | 2-5 minutes ([install.sh benchmarks](https://github.com/bamr87/zer0-mistakes/blob/main/install.sh)) |
|
|
1144
1144
|
| **Documentation Pages** | 70+ ([browse docs](/pages/)) |
|
|
@@ -1189,6 +1189,6 @@ And these AI partners that make zer0-mistakes truly AI-native:
|
|
|
1189
1189
|
|
|
1190
1190
|
**Built with ❤️ — and a little help from our AI partners — for the Jekyll community**
|
|
1191
1191
|
|
|
1192
|
-
**v1.
|
|
1192
|
+
**v1.4.0** • [Changelog](CHANGELOG.md) • [License](LICENSE) • [Contributing](CONTRIBUTING.md) • [AI Agent Guide](AGENTS.md)
|
|
1193
1193
|
|
|
1194
1194
|
|
|
@@ -35,4 +35,11 @@
|
|
|
35
35
|
|
|
36
36
|
<!-- Obsidian wiki-link / embed / tag client-side resolver (fallback for the
|
|
37
37
|
remote_theme GH Pages build, where _plugins/obsidian_links.rb cannot run). -->
|
|
38
|
-
|
|
38
|
+
{%- assign obsidian_attachments_path = site.obsidian.attachments_path | default: '/assets/images/notes' -%}
|
|
39
|
+
<script>
|
|
40
|
+
window.OBSIDIAN_CONFIG = window.OBSIDIAN_CONFIG || {};
|
|
41
|
+
window.OBSIDIAN_CONFIG.wikiIndexUrl = {{ '/assets/data/wiki-index.json' | relative_url | jsonify }};
|
|
42
|
+
window.OBSIDIAN_CONFIG.attachmentsPath = {{ obsidian_attachments_path | relative_url | jsonify }};
|
|
43
|
+
window.OBSIDIAN_CONFIG.tagBase = {{ '/tags/' | relative_url | jsonify }};
|
|
44
|
+
</script>
|
|
45
|
+
<script defer src="{{ '/assets/js/obsidian-wiki-links.js' | relative_url }}"></script>
|
|
@@ -41,6 +41,10 @@
|
|
|
41
41
|
{%- assign _backlinks = "" | split: "" -%}
|
|
42
42
|
{%- for _doc in _candidates -%}
|
|
43
43
|
{%- if _doc.url == _self_url -%}{%- continue -%}{%- endif -%}
|
|
44
|
+
{%- comment -%} Hide draft/unpublished references unless this build includes drafts. {%- endcomment -%}
|
|
45
|
+
{%- unless site.show_drafts == true -%}
|
|
46
|
+
{%- if _doc.published == false or _doc.draft == true -%}{%- continue -%}{%- endif -%}
|
|
47
|
+
{%- endunless -%}
|
|
44
48
|
{%- assign _body = _doc.content | default: "" -%}
|
|
45
49
|
{%- assign _body_lower = _body | downcase -%}
|
|
46
50
|
{%- assign _matched = false -%}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
{%- comment -%}
|
|
2
2
|
===================================================================
|
|
3
|
-
LOCAL GRAPH
|
|
3
|
+
LOCAL GRAPH SIDEBAR — collapsible page-scoped graph
|
|
4
4
|
===================================================================
|
|
5
5
|
|
|
6
6
|
File: local-graph.html
|
|
7
7
|
Path: _includes/navigation/local-graph.html
|
|
8
|
-
Purpose: Renders a
|
|
9
|
-
immediate wiki-link neighbors in
|
|
10
|
-
style local graph view).
|
|
8
|
+
Purpose: Renders a collapsible, page-scoped graph of the current page and
|
|
9
|
+
its immediate wiki-link neighbors in a separate side panel.
|
|
11
10
|
|
|
12
11
|
Behavior:
|
|
13
12
|
- Reads /assets/data/wiki-index.json
|
|
14
13
|
- Finds the current page by window.location.pathname (with title/basename
|
|
15
14
|
fallback for permalink quirks)
|
|
16
15
|
- BFS depth=1 by default (current + direct neighbors, in & out)
|
|
17
|
-
-
|
|
18
|
-
|
|
16
|
+
- Renders the current page as a single-node graph when it has no neighbors
|
|
17
|
+
- Hides itself if the current page is not in the wiki-index or the index
|
|
18
|
+
can't be loaded
|
|
19
19
|
- Lazily loads cytoscape.js from CDN with SRI + crossorigin
|
|
20
20
|
|
|
21
21
|
Opt-out: set `local_graph: false` in page front matter.
|
|
@@ -25,20 +25,55 @@
|
|
|
25
25
|
{%- endcomment -%}
|
|
26
26
|
{%- if page.local_graph != false -%}
|
|
27
27
|
{%- assign lg_depth = page.local_graph_depth | default: 1 -%}
|
|
28
|
-
<div class="obsidian-local-graph-
|
|
29
|
-
<
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
data-depth="{{ lg_depth }}"
|
|
39
|
-
data-index-url="{{ '/assets/data/wiki-index.json' | relative_url }}"
|
|
40
|
-
role="img"
|
|
41
|
-
aria-label="Local graph of pages linked to this page"></div>
|
|
28
|
+
<div class="obsidian-local-graph-fab d-print-none" data-obsidian-local-graph-toggle>
|
|
29
|
+
<button class="btn btn-primary rounded-circle shadow-lg obsidian-local-graph-toggle"
|
|
30
|
+
type="button"
|
|
31
|
+
data-bs-toggle="offcanvas"
|
|
32
|
+
data-bs-target="#obsidianLocalGraphPanel"
|
|
33
|
+
aria-controls="obsidianLocalGraphPanel"
|
|
34
|
+
aria-label="Open local graph"
|
|
35
|
+
title="Open local graph">
|
|
36
|
+
<i class="bi bi-diagram-3 fs-5" aria-hidden="true"></i>
|
|
37
|
+
</button>
|
|
42
38
|
</div>
|
|
39
|
+
|
|
40
|
+
<aside class="offcanvas offcanvas-start obsidian-local-graph-panel"
|
|
41
|
+
tabindex="-1"
|
|
42
|
+
id="obsidianLocalGraphPanel"
|
|
43
|
+
aria-labelledby="obsidianLocalGraphLabel"
|
|
44
|
+
data-bs-scroll="true"
|
|
45
|
+
data-bs-backdrop="false"
|
|
46
|
+
data-obsidian-local-graph-panel>
|
|
47
|
+
<div class="offcanvas-header">
|
|
48
|
+
<h2 class="offcanvas-title h5 mb-0" id="obsidianLocalGraphLabel">
|
|
49
|
+
<i class="bi bi-diagram-3 me-2" aria-hidden="true"></i>Local graph
|
|
50
|
+
</h2>
|
|
51
|
+
<button type="button"
|
|
52
|
+
class="btn-close"
|
|
53
|
+
data-bs-dismiss="offcanvas"
|
|
54
|
+
data-bs-target="#obsidianLocalGraphPanel"
|
|
55
|
+
aria-label="Close local graph"></button>
|
|
56
|
+
</div>
|
|
57
|
+
<div class="offcanvas-body">
|
|
58
|
+
<div class="obsidian-local-graph-widget" aria-label="Local graph">
|
|
59
|
+
<div class="obsidian-local-graph-meta d-flex align-items-center justify-content-between gap-2 mb-3">
|
|
60
|
+
<span class="badge text-bg-secondary">Depth {{ lg_depth }}</span>
|
|
61
|
+
<a href="{{ '/docs/obsidian/graph/' | relative_url }}"
|
|
62
|
+
class="btn btn-outline-primary btn-sm"
|
|
63
|
+
title="Open the full site graph">
|
|
64
|
+
<i class="bi bi-arrows-fullscreen me-1" aria-hidden="true"></i>Full graph
|
|
65
|
+
</a>
|
|
66
|
+
</div>
|
|
67
|
+
<div id="obsidian-local-graph"
|
|
68
|
+
data-depth="{{ lg_depth }}"
|
|
69
|
+
data-index-url="{{ '/assets/data/wiki-index.json' | relative_url }}"
|
|
70
|
+
role="img"
|
|
71
|
+
aria-label="Local graph of pages linked to this page"></div>
|
|
72
|
+
<p class="obsidian-local-graph-status small text-secondary mt-2 mb-0"
|
|
73
|
+
data-obsidian-local-graph-status
|
|
74
|
+
role="status">Loading graph...</p>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
</aside>
|
|
43
78
|
<script src="{{ '/assets/js/obsidian-local-graph.js' | relative_url }}" defer></script>
|
|
44
79
|
{%- endif -%}
|
data/_layouts/default.html
CHANGED
|
@@ -1,100 +1,104 @@
|
|
|
1
|
-
---
|
|
2
|
-
layout: root
|
|
3
|
-
---
|
|
4
|
-
<!--
|
|
5
|
-
===================================================================
|
|
6
|
-
DEFAULT LAYOUT - Standard content layout with sidebars
|
|
7
|
-
===================================================================
|
|
8
|
-
|
|
9
|
-
File: default.html
|
|
10
|
-
Path: _layouts/default.html
|
|
11
|
-
Inherits: root.html
|
|
12
|
-
Purpose: Primary content layout with sidebar navigation and table of contents
|
|
13
|
-
|
|
14
|
-
Template Logic:
|
|
15
|
-
- Creates a responsive three-column layout using Bootstrap grid
|
|
16
|
-
- Left sidebar: Site navigation and content outline (collapsible on mobile)
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
-
|
|
38
|
-
- bd-
|
|
39
|
-
- bd-
|
|
40
|
-
- bd-
|
|
41
|
-
- bd-
|
|
42
|
-
- bd-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
<!--
|
|
48
|
-
<!--
|
|
49
|
-
<!--
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
<!--
|
|
54
|
-
<!--
|
|
55
|
-
<!--
|
|
56
|
-
<!--
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
<!--
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
<!--
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
<!--
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
{%
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
{%-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
1
|
+
---
|
|
2
|
+
layout: root
|
|
3
|
+
---
|
|
4
|
+
<!--
|
|
5
|
+
===================================================================
|
|
6
|
+
DEFAULT LAYOUT - Standard content layout with sidebars
|
|
7
|
+
===================================================================
|
|
8
|
+
|
|
9
|
+
File: default.html
|
|
10
|
+
Path: _layouts/default.html
|
|
11
|
+
Inherits: root.html
|
|
12
|
+
Purpose: Primary content layout with sidebar navigation and table of contents
|
|
13
|
+
|
|
14
|
+
Template Logic:
|
|
15
|
+
- Creates a responsive three-column layout using Bootstrap grid
|
|
16
|
+
- Left sidebar: Site navigation and content outline (collapsible on mobile)
|
|
17
|
+
- Local graph: Independent Obsidian side panel with its own collapsible control
|
|
18
|
+
- Center: Main content area with page title and body content
|
|
19
|
+
- Right sidebar: Table of contents and page shortcuts (hidden on mobile)
|
|
20
|
+
- Implements scroll spy for navigation highlighting
|
|
21
|
+
- Responsive design that stacks vertically on mobile devices
|
|
22
|
+
|
|
23
|
+
Layout Structure:
|
|
24
|
+
1. Container wrapper with Bootstrap responsive classes
|
|
25
|
+
2. Left sidebar (bd-sidebar) - Navigation and outline
|
|
26
|
+
3. Main content area (bd-main) with:
|
|
27
|
+
- Intro section (page title, metadata)
|
|
28
|
+
- Right sidebar (bd-toc) - Table of contents
|
|
29
|
+
- Content area (bd-content) - Main page content
|
|
30
|
+
|
|
31
|
+
Dependencies:
|
|
32
|
+
- sidebar-left.html: Site navigation and content outline
|
|
33
|
+
- intro.html: Page title, breadcrumbs, and metadata
|
|
34
|
+
- sidebar-right.html: Table of contents and page shortcuts
|
|
35
|
+
|
|
36
|
+
Bootstrap Classes Used:
|
|
37
|
+
- container-xxl: Extra large responsive container
|
|
38
|
+
- bd-gutter: Custom Bootstrap spacing
|
|
39
|
+
- bd-layout: Custom layout utility class
|
|
40
|
+
- bd-sidebar: Custom sidebar styling
|
|
41
|
+
- bd-main: Main content area
|
|
42
|
+
- bd-toc: Table of contents styling
|
|
43
|
+
- bd-content: Content area styling
|
|
44
|
+
===================================================================
|
|
45
|
+
-->
|
|
46
|
+
|
|
47
|
+
<!-- ================================================ -->
|
|
48
|
+
<!-- MAIN LAYOUT CONTAINER -->
|
|
49
|
+
<!-- Bootstrap responsive container with custom grid -->
|
|
50
|
+
<!-- ================================================ -->
|
|
51
|
+
<div class="container-xxl bd-gutter mt-3 my-md-4 bd-layout">
|
|
52
|
+
|
|
53
|
+
<!-- ================================ -->
|
|
54
|
+
<!-- LEFT SIDEBAR - Navigation -->
|
|
55
|
+
<!-- ================================ -->
|
|
56
|
+
<!-- Site navigation, content outline, and offcanvas menu for mobile -->
|
|
57
|
+
<!-- Sidebar visibility controlled by page.sidebar front matter -->
|
|
58
|
+
{% unless page.sidebar == false %}
|
|
59
|
+
<aside class="bd-sidebar">
|
|
60
|
+
{% include navigation/sidebar-left.html %}
|
|
61
|
+
</aside>
|
|
62
|
+
|
|
63
|
+
<!-- Separate Obsidian local graph panel; intentionally outside bdSidebar. -->
|
|
64
|
+
{% include navigation/local-graph.html %}
|
|
65
|
+
{% endunless %}
|
|
66
|
+
|
|
67
|
+
<!-- ================================ -->
|
|
68
|
+
<!-- MAIN CONTENT AREA -->
|
|
69
|
+
<!-- ================================ -->
|
|
70
|
+
<!-- Primary content section with scroll spy for table of contents navigation -->
|
|
71
|
+
<main class="bd-main order-1" data-bs-spy="scroll" data-bs-target="#TableOfContents" data-bs-offset="100" data-bs-smooth-scroll="true">
|
|
72
|
+
|
|
73
|
+
<!-- Page introduction: title, breadcrumbs, metadata -->
|
|
74
|
+
{% include content/intro.html %}
|
|
75
|
+
|
|
76
|
+
<!-- =============================== -->
|
|
77
|
+
<!-- RIGHT SIDEBAR - Table of Contents -->
|
|
78
|
+
<!-- =============================== -->
|
|
79
|
+
<!-- Page outline, shortcuts, and related links (hidden on mobile) -->
|
|
80
|
+
<!-- Right sidebar visibility also controlled by page.sidebar -->
|
|
81
|
+
{% unless page.sidebar == false %}
|
|
82
|
+
<div class="bd-toc text-body-secondary">
|
|
83
|
+
{% include navigation/sidebar-right.html %}
|
|
84
|
+
</div>
|
|
85
|
+
{% endunless %}
|
|
86
|
+
|
|
87
|
+
<!-- =============================== -->
|
|
88
|
+
<!-- MAIN CONTENT BODY -->
|
|
89
|
+
<!-- =============================== -->
|
|
90
|
+
<!-- Where the actual page content is rendered -->
|
|
91
|
+
<div class="bd-content ps-lg-2">
|
|
92
|
+
{{ content }}
|
|
93
|
+
|
|
94
|
+
{%- comment -%}
|
|
95
|
+
Optional Obsidian-style backlinks panel. Opt-in for the generic
|
|
96
|
+
default layout via `backlinks: true` in front matter (the `note`
|
|
97
|
+
layout enables it by default).
|
|
98
|
+
{%- endcomment -%}
|
|
99
|
+
{% if page.backlinks == true %}
|
|
100
|
+
{% include content/backlinks.html %}
|
|
101
|
+
{% endif %}
|
|
102
|
+
</div>
|
|
103
|
+
</main>
|
|
104
|
+
</div>
|
data/_sass/core/_obsidian.scss
CHANGED
|
@@ -152,18 +152,91 @@
|
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
// ----------------------------------------------------------------------------
|
|
155
|
-
// Local graph
|
|
155
|
+
// Local graph side panel — Obsidian-style local graph view.
|
|
156
156
|
// Rendered by _includes/navigation/local-graph.html via assets/js/obsidian-local-graph.js.
|
|
157
157
|
// ----------------------------------------------------------------------------
|
|
158
|
+
.obsidian-local-graph-fab {
|
|
159
|
+
position: fixed;
|
|
160
|
+
left: 1rem;
|
|
161
|
+
bottom: 1rem;
|
|
162
|
+
z-index: 1032;
|
|
163
|
+
|
|
164
|
+
&[hidden] {
|
|
165
|
+
display: none !important;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.obsidian-local-graph-toggle {
|
|
170
|
+
width: 3.25rem;
|
|
171
|
+
height: 3.25rem;
|
|
172
|
+
display: inline-flex;
|
|
173
|
+
align-items: center;
|
|
174
|
+
justify-content: center;
|
|
175
|
+
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
|
176
|
+
|
|
177
|
+
&:hover,
|
|
178
|
+
&:focus-visible {
|
|
179
|
+
transform: translateY(-1px);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
&:active {
|
|
183
|
+
transform: translateY(0);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.obsidian-local-graph-panel {
|
|
188
|
+
--bs-offcanvas-width: min(28rem, calc(100vw - 1.5rem));
|
|
189
|
+
|
|
190
|
+
&[hidden] {
|
|
191
|
+
display: none !important;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.offcanvas-body {
|
|
195
|
+
display: flex;
|
|
196
|
+
flex-direction: column;
|
|
197
|
+
min-height: 0;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
158
201
|
.obsidian-local-graph-widget {
|
|
202
|
+
display: flex;
|
|
203
|
+
flex: 1 1 auto;
|
|
204
|
+
flex-direction: column;
|
|
205
|
+
min-height: 0;
|
|
206
|
+
|
|
207
|
+
.obsidian-local-graph-meta {
|
|
208
|
+
flex: 0 0 auto;
|
|
209
|
+
}
|
|
210
|
+
|
|
159
211
|
#obsidian-local-graph {
|
|
212
|
+
flex: 1 1 auto;
|
|
160
213
|
width: 100%;
|
|
161
|
-
height:
|
|
162
|
-
min-height:
|
|
214
|
+
height: min(62vh, 34rem);
|
|
215
|
+
min-height: 22rem;
|
|
163
216
|
border: 1px solid var(--bs-border-color, #dee2e6);
|
|
164
|
-
border-radius: var(--bs-border-radius, 0.
|
|
217
|
+
border-radius: var(--bs-border-radius-lg, 0.5rem);
|
|
165
218
|
background: var(--bs-tertiary-bg, #f8f9fa);
|
|
166
219
|
overflow: hidden;
|
|
167
220
|
position: relative;
|
|
168
221
|
}
|
|
222
|
+
|
|
223
|
+
.obsidian-local-graph-status {
|
|
224
|
+
min-height: 1.25rem;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
@media (max-width: 575.98px) {
|
|
229
|
+
.obsidian-local-graph-fab {
|
|
230
|
+
left: 0.875rem;
|
|
231
|
+
bottom: 0.875rem;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.obsidian-local-graph-panel {
|
|
235
|
+
--bs-offcanvas-width: min(100vw, 24rem);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.obsidian-local-graph-widget #obsidian-local-graph {
|
|
239
|
+
height: 58vh;
|
|
240
|
+
min-height: 18rem;
|
|
241
|
+
}
|
|
169
242
|
}
|
|
@@ -4,13 +4,15 @@
|
|
|
4
4
|
// =============================================================================
|
|
5
5
|
|
|
6
6
|
#bdSidebar .offcanvas-header,
|
|
7
|
-
#tocContents .offcanvas-header
|
|
7
|
+
#tocContents .offcanvas-header,
|
|
8
|
+
#obsidianLocalGraphPanel .offcanvas-header {
|
|
8
9
|
border-bottom: 2px solid var(--bs-border-color);
|
|
9
10
|
padding: 1.25rem 1rem;
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
#bdSidebar .offcanvas-title,
|
|
13
|
-
#tocContents .offcanvas-title
|
|
14
|
+
#tocContents .offcanvas-title,
|
|
15
|
+
#obsidianLocalGraphPanel .offcanvas-title {
|
|
14
16
|
font-size: 1.125rem;
|
|
15
17
|
font-weight: 600;
|
|
16
18
|
color: var(--bs-emphasis-color);
|
|
@@ -19,7 +21,8 @@
|
|
|
19
21
|
|
|
20
22
|
@media (max-width: 991.98px) {
|
|
21
23
|
#bdSidebar .offcanvas-header .btn-close,
|
|
22
|
-
#tocContents .offcanvas-header .btn-close
|
|
24
|
+
#tocContents .offcanvas-header .btn-close,
|
|
25
|
+
#obsidianLocalGraphPanel .offcanvas-header .btn-close {
|
|
23
26
|
width: 48px;
|
|
24
27
|
height: 48px;
|
|
25
28
|
padding: 0;
|
|
@@ -36,7 +39,8 @@
|
|
|
36
39
|
}
|
|
37
40
|
}
|
|
38
41
|
|
|
39
|
-
#tocContents .offcanvas-body
|
|
42
|
+
#tocContents .offcanvas-body,
|
|
43
|
+
#obsidianLocalGraphPanel .offcanvas-body {
|
|
40
44
|
padding: 1rem;
|
|
41
45
|
}
|
|
42
46
|
|