diff --git a/.kakrc b/.kakrc index 688bcbe..7a60b1f 100644 --- a/.kakrc +++ b/.kakrc @@ -15,10 +15,6 @@ define-command readme %{ root-edit README.md } -define-command kakrc %{ - root-edit .kakrc -} - # change working directory to the package hook global -once BufCreate .* %{ change-directory %exp{%opt{project_root}/src/zona} diff --git a/README.md b/README.md index c3facfb..bd7eb9b 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,10 @@ If you don't want discovery, you can specify the project root as the first argument to `zona build`. You may specify a path for the output using the `--output/-o` flag. The `--draft/-d` flag includes draft posts in the output. +_Note: the previous build is _not_ cleaned before the new site is built. If +you've deleted some pages, you may need to remove the output directory before +rebuilding._ + ### Live Preview To make the writing process as frictionless as possible, zona ships with a live @@ -117,10 +121,9 @@ By default, the build outputs to a temporary directory. Use `-o/--output` to override this. **Note**: if the live preview isn't working as expected, try restarting the -server. If you change the configuration, the server must also be restarted. The -live preview uses the same function as `zona build` internally; this means that -the output is also written to disk --- a temporary directory by default, unless -overridden with `-o/--output`. +server. If you change the configuration or any templates, the server must also +be restarted. The live preview uses the same function as `zona build` +internally; this means that the output is also written to disk. #### Live Reload @@ -193,17 +196,13 @@ the packaged defaults. To apply a certain template to a page, set the `template` option in its [frontmatter](#frontmatter). The following public variables are made available to the template engine: -| Name | Description | -| ----------- | -------------------------------------------------------- | -| `content` | The content of this page. | -| `url` | The resolved URL of this page. | -| `metadata` | The frontmatter of this page (_merged with defaults_). | -| `header` | The sitemap header in HTML form. Can be `False`. | -| `footer` | The footer in HTML form. Can be `False`. | -| `is_post` | Whether this page is a post. | -| `newer` | URL of the newer post in the post list. | -| `older` | URL of the older post in the post list. | -| `post_list` | A sorted list of `Item` objects. Meant for internal use. | +| Name | Description | +| ---------- | ------------------------------------------------------ | +| `content` | The content of this page. | +| `url` | The resolved URL of this page. | +| `metadata` | The frontmatter of this page (_merged with defaults_). | +| `header` | The sitemap header in HTML form. Can be `False`. | +| `footer` | The footer in HTML form. Can be `False`. | #### Markdown Footer diff --git a/pyproject.toml b/pyproject.toml index 7653d22..6b517bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "zona" -version = "1.2.0" +version = "1.1.0" description = "Opinionated static site generator." license = "BSD-3-Clause " license-files = ["LICENSE"] diff --git a/src/zona/builder.py b/src/zona/builder.py index 416edc8..5c8af6b 100644 --- a/src/zona/builder.py +++ b/src/zona/builder.py @@ -99,8 +99,6 @@ class ZonaBuilder: def _build(self): assert self.items - # sort according to date - # descending order post_list: list[Item] = sorted( [item for item in self.items if item.post], key=lambda item: item.metadata.date @@ -108,16 +106,12 @@ class ZonaBuilder: else date.min, reverse=True, ) - # number of posts posts = len(post_list) - # link post chronology for i, item in enumerate(post_list): - # prev: older post - older = post_list[i + 1] if i + 1 < posts else None - # next: newer post - newer = post_list[i - 1] if i > 0 else None - item.older = older - item.newer = newer + prev = post_list[i - 1] if i > 0 else None + next = post_list[i + 1] if i < posts - 2 else None + item.previous = prev + item.next = next templater = Templater( config=self.config, diff --git a/src/zona/data/content/static/style.css b/src/zona/data/content/static/style.css index 56644c3..f02717e 100644 --- a/src/zona/data/content/static/style.css +++ b/src/zona/data/content/static/style.css @@ -1,5 +1,4 @@ :root { - --main-placeholder-color: #b14242; --main-text-color: #b4b4b4; --main-text-opaque-color: rgba(180, 180, 180, 0.8); --main-bg-color: #121212; @@ -34,77 +33,27 @@ header { .post-nav { font-family: monospace; - font-size: 0.95em; - white-space: nowrap; -} - -.post-nav .bar { - position: relative; - bottom: 0.05em; - display: inline-block; - width: 1px; - height: 0.8em; - background-color: currentColor; - vertical-align: middle; - margin: 0 0.3em; -} - -.post-nav .placeholder { - color: var(--main-placeholder-color); } .post-nav .symbol { color: var(--main-bullet-color); - margin: 0; - padding: 0; - display: inline; } -.site-logo.hover-symbol::before { - content: "@"; - /* color: var(--main-bullet-color);*/ +.post-nav a { + margin: 0 2px; } -.title.hover-symbol::before { - content: ">"; - /* color: var(--main-bullet-color);*/ -} - -.hover-symbol { +.site-logo { color: inherit; - position: relative; font-weight: bold; text-decoration: none; - transition: color 0.15s ease; -} - -.hover-symbol::before { - font-family: monospace; - content: "#"; - position: absolute; - right: 100%; - margin-right: 0.25em; - top: 50%; - transform: translateY(-50%); - opacity: 0; - transition: opacity 0.15s ease, color 0.15s ease; - color: var(--main-text-color); -} - -.hover-symbol:hover::before { - opacity: 1; - color: var(--main-placeholder-color); /* only the symbol changes color */ -} -.hover-symbol:hover { - background-color: transparent; - /* color: var(--main-placeholder-color);*/ + /* font-size: 1.75rem;*/ } .toclink { position: relative; text-decoration: none; color: inherit; - transition: color 0.15s ease; } .toclink::before { @@ -115,16 +64,7 @@ header { top: 50%; transform: translateY(-50%); opacity: 0; - transition: opacity 0.15s ease, color 0.15s ease; - color: var(--main-link-color); -} - -.toclink:hover::before { - opacity: 1; - color: var(--main-placeholder-color); -} -.toclink:hover { - background-color: transparent; + transition: opacity 0.2s ease; } h1 .toclink::before { @@ -143,6 +83,13 @@ h4 .toclink::before { content: "###"; } +.toclink:hover::before { + opacity: 1; +} +.toclink:hover { + background-color: transparent; +} + /* h1, */ h2, h3, @@ -164,11 +111,6 @@ h1 { font-family: monospace; } -.title a { - color: inherit; - text-decoration: none; -} - article h1:first-of-type { margin-block-start: 1.67rem; } @@ -214,26 +156,38 @@ h6 { ul { list-style-type: disc; + /* or any other list style */ } li::marker { color: var(--main-bullet-color); + /* Change this to your desired color */ } a { color: var(--main-link-color); - text-decoration: underline; - text-decoration-color: rgba(0, 0, 0, 0); - text-underline-offset: 2px; + text-decoration: none; + position: relative; } -a { - transition: color 0.15s ease, text-decoration-color 0.15s ease; +a::after { + content: ""; + position: absolute; + left: 0; + bottom: -2px; + width: 100%; + height: 1px; + background-color: currentColor; + transform: scaleX(0); + transform-origin: center; + transition: transform 0.1s ease; } -a:hover { - text-decoration-color: var(--main-placeholder-color); - color: var(--main-bullet-color); +a:hover::after { + transform: scaleX(1); +} +a:has(> code)::after { + display: none; } max-width: 100%; @@ -470,3 +424,23 @@ caption { font-size: 0.8rem; color: var(--main-small-text-color); } + +a > code { + text-decoration: none; + color: var(--main-link-color); + position: relative; +} + +a:has(> code) { + text-decoration: none; + background: none; + /* position: static;*/ +} + +a:hover > code { + text-decoration: underline; +} + +a:hover:has(> code) { + background: none; +} diff --git a/src/zona/data/templates/post_nav.html b/src/zona/data/templates/post_nav.html index 1e96ff5..86ac330 100644 --- a/src/zona/data/templates/post_nav.html +++ b/src/zona/data/templates/post_nav.html @@ -1,11 +1,9 @@
- <{% if newer %}newr{% - else %}null{% endif %}{% if older %}oldr{% else %}null{% endif %}> + <{% if previous %}prev{% endif %}{% if previous and next %}|{% endif %}{% if next %}next{% endif + %}>
diff --git a/src/zona/data/templates/title.html b/src/zona/data/templates/title.html index 1541095..9753365 100644 --- a/src/zona/data/templates/title.html +++ b/src/zona/data/templates/title.html @@ -1,2 +1,2 @@ -

{{ metadata.title }}

+

{{ metadata.title }}

diff --git a/src/zona/models.py b/src/zona/models.py index 7f67015..d009476 100644 --- a/src/zona/models.py +++ b/src/zona/models.py @@ -23,8 +23,8 @@ class Item: type: ItemType | None = None copy: bool = True post: bool = False - newer: Item | None = None - older: Item | None = None + next: Item | None = None + previous: Item | None = None # @dataclass diff --git a/src/zona/templates.py b/src/zona/templates.py index 4529143..d5e0f22 100644 --- a/src/zona/templates.py +++ b/src/zona/templates.py @@ -27,6 +27,7 @@ def get_footer(template_dir: Path) -> str | None: return html_footer.read_text() +# TODO: add next/prev post button logic to posts # TODO: add a recent posts element that can be included elsewhere? class Templater: def __init__( @@ -78,11 +79,11 @@ class Templater: header=header, footer=footer, is_post=item.post, - newer=util.normalize_url(item.newer.url) - if item.newer + next=util.normalize_url(item.next.url) + if item.next else None, - older=util.normalize_url(item.older.url) - if item.older + previous=util.normalize_url(item.previous.url) + if item.previous else None, post_list=self.post_list, ) diff --git a/uv.lock b/uv.lock index da3457f..c1a3f41 100644 --- a/uv.lock +++ b/uv.lock @@ -459,7 +459,7 @@ wheels = [ [[package]] name = "zona" -version = "1.2.0" +version = "1.1.0" source = { editable = "." } dependencies = [ { name = "dacite" },