Commit Graph

198 Commits

Author SHA1 Message Date
34639edd74 remove the broken/deprecated redirect tag support
when this project *wasn't* a SSG, it could serve up redirects, which is
something that was only rarely needed, and looking now, I don't do it at
all on any of my current sites, so I'm just going to remove the tiny bit
of code for it that remained in the SSG project

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2026-02-25 09:54:16 -06:00
bcb2b1be7e add the ability to specify the content license in the footer
e.g. for marking all pages as CC BY-SA 4.0

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2026-02-24 10:08:20 -06:00
d22c3f84ac have floating img/figure clear their side, to avoid "waterfalls"
I have many things floating to the right on the ttrpg site, where the
first would be most right, the second would be right but left of the
first thing, and so on. this forces those to clear their respective side
and create a quasi-column of things rather than making a bizarre ratchet
of content.

.......... A
.......... A
.......... B
(good)

vs.

.......... A
........ B A
(bad)

I can't see why I'd want the bad behavior on my other sites, but I'll
just mention that I didn't check to see what they were doing

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2026-02-24 10:02:57 -06:00
2d5528fa82 style super links for footnotes
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2026-02-24 10:00:31 -06:00
23c4c57f2f give the plain HTML table some borders
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2026-02-24 10:00:30 -06:00
6a7d009f35 style hr in the main light/dark styles, used in footnotes
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2026-02-24 10:00:28 -06:00
7ec8c05bb4 slightly tweak footnote refs, and actually style footnotes
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2026-02-24 10:00:26 -06:00
b10fe555df tweak table header bg color to stand out less
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2026-02-24 10:00:24 -06:00
20e8cdbbf1 remove unnecessary type="text/javascript"
CSS validator says: Warning: The type attribute is unnecessary for JavaScript resources

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2026-02-24 10:00:15 -06:00
9b7ab74644 remove unused request_path_to_breadcrumb_display
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2026-01-28 16:10:53 -06:00
204e7bc416 use h1-as-title logic while generating breadcrumbs
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2026-01-28 16:08:41 -06:00
8238787900 use beautifulsoup to parse the description from the first paragraph
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2026-01-28 14:40:45 -06:00
20673c178a use beautifulsoup to derive title from HTML h1
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2026-01-28 14:40:45 -06:00
7b2bf6905a test the high level SSG build command
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2026-01-28 14:40:45 -06:00
424ec3621d replace links that have .md suffixes with clean links
to aid viewing the raw markdown source in e.g. a gitlab source browser,
or to aid navigation in vim with "gf" style commands to jump between
files, allow the markdown source to specify foo.md or whatever/index.md
explicitly, yet generate the clean URLs for linking in the HTML output

this assumes that nginx is serving "foo" with foo.html, and "bar/" with
bar/index.html

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-09-18 14:19:48 -05:00
88b678931e properly handle symlinks as relative to the output dir
the code meant to make symlinks relative to the output directory, but
only actually succeeded at it for targets in the root of the output
directory; since we already check that the target is not breaking out of
the instance, we can generate the output symlink relative to itself and
fix the subdirred-symlink behavior

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-03-21 11:43:18 -05:00
8c75947088 remove os.chdir usage, rely on absolute and relative paths more
os.chdir was getting confusing and hurting the log output, and
potentially the cause of a couple bugs left to fix, so this removes it,
but it means we need to pass around the pages/ absolute path into the
markdown parser, because it relies on knowing both the absolute path
now (to open files), and also the path relative to the pages dir in
order to know where to stop reading parent files/how to generate proper
URL-like references to other files.

probably this should be refactored at some point to inherit the pages/
path from the SSG somehow, rather than passing it through a bunch of
methods, but this seems to work for now

fixes #22

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-03-21 10:47:42 -05:00
201cd80804 when symlinking foo.md, also symlink foo.html if generating .html
fixes #24

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-03-21 08:31:31 -05:00
27d4d16572 go back to using the "or any later version" clause of GPLv3
I think arguments that "Such new versions will be similar in spirit to
the present version", in my own reading and readings such as in
https://www.draketo.de/software/gpl-or-later, convince me for now that
it is acceptable to allow the "or later" for compatibility and future
problem's sake

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-03-21 08:22:49 -05:00
c46a1c0bae don't handle custom-static dirs specially anymore
they're just more static files among all the static files we serve, they
should go into pages/ like everything else

fixes #20

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-03-18 21:26:25 -05:00
d49b9d48a8 don't add an artificial ./ subdir due to how os.path.relpath works
this fixes stuff like og:urls of https://foo/./ or https://foo/./page
and also removes an extra layer of depth in the breadcrumb hierarchy,
just by suppressing the '.' in relpath output at the root of pages/

fixes #21

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-03-18 21:09:50 -05:00
8aabd93273 don't copy .files into the SSG output dir
they may be vim swap files and that kind of garbage

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-03-18 08:20:58 -05:00
6d7987cfae don't require the host to be in the Image tag
now that we know our base host via config, we can stop hardcoding it in
each Image tag

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-03-18 08:13:18 -05:00
4f39bea3a9 fix up the object attributes for in/out dirs in the generator
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-03-17 10:39:18 -05:00
5b17041b66 move the style switcher to the a separate .js file
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-03-17 10:06:15 -05:00
d52fc4df9a fix where the feed generator outputs to, and also output error pages
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-03-17 09:07:56 -05:00
4644aea4b0 bump the copyright on some new/rewritten modules
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-03-17 08:06:06 -05:00
afc85faa2f make the style cookie apply to the whole site
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-03-17 01:00:10 -05:00
f3eed9d4f2 fix and test the linking to the style switcher
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-03-17 00:47:00 -05:00
41350d4b7a remove debug stuff from the style switcher JS
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-03-17 00:38:37 -05:00
168bca05f7 make the call to generate the RSS/ATOM feeds when building
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-03-17 00:33:01 -05:00
7eb485c6ae rewrite the project as a static site generator
this removes Flask, reworks a number of library methods accordingly, and
adds generators and build commands to process the instance directory
(largely unchanged, except config.py is now config.json) and spit out
files suitable to be served by a web server such as Nginx.

there are probably some rough edges here, but overall this works.

also note, as this is no longer server software on a network, the
license has changed from AGPLv3 to GPLv3, and the "or any later version"
allowance has been removed

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-03-16 23:56:37 -05:00
ed12272d4d default tables to 100% width
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-12-05 23:44:04 -06:00
d28ddf9392 remove "trailing slash on void elements" which "has no effect"
caught by the W3C validator

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-04-26 10:11:38 -05:00
f12b76680f use reuse lint for REUSE compliance
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-04-16 00:38:28 -05:00
6d7bfc58c8 add copyright and license tags to CSS and templates
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-04-16 00:10:34 -05:00
63a263724c simplify the expected feed structure
I don't think there's any need for a million directories, on second
thought, so just put YYMMDD prefixed files in the feed/ directory

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2023-12-30 22:17:28 -06:00
02c2176c4f link to the Atom and RSS feeds in the template
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2023-12-30 22:09:58 -06:00
30d6f99c9b return the proper atom and rss content types for the feeds
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2023-12-30 15:31:18 -06:00
575e2ad387 provide author information for the feed and entries
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2023-12-30 15:25:46 -06:00
b26975421c make the feed ID be a valid URL for compliance
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2023-12-30 15:19:57 -06:00
6dc443e59f implement a rudimentary Atom/RSS feed module
this provides a somewhat unconfigurable (at the moment) feed module
which provides Atom and RSS feeds. entries are determined by symlinks to
content pages, because my core CMS usage is still more general and not
blog-like. the symlinks allow for arbitrarily adding entries as I see
fit.

this also moves core Markdown parser stuff to the library module, since
that's used by the feed as well as normal pages

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2023-12-30 14:55:02 -06:00
5a9a36f463 deduplicate TITLE_SUFFIX from new DOMAIN_NAME
I will need the domain name for feed stuff, and I'm already crudely
using the title suffix in the nav as if it was a domain name, so let's just be
explicit in the case I ever change my mind on domain-in-title styling

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2023-12-30 11:55:01 -06:00
713632fe7a unpin tox in requirements
for some reason bandit wasn't earlier catching the SubElement usage but
now it is, but it's harmless anyway so we'll just suppress it.

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2023-12-30 11:12:59 -06:00
bf646db1e8 convert tooling to pyproject.toml based
still has dynamic versioning and etc.

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2023-12-30 10:33:28 -06:00
7b225a6de3 adding a compliant copyright line to all code
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2023-12-28 15:33:41 -06:00
e1dc2afc7b add SPDX-License-Identifier and DCO information
this includes my personal signoff on the MAINTAINERS.md for DCO purposes

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2023-12-18 11:15:56 -06:00
0fef13c71a version bumps, especially flask and werkzeug 3 2023-10-07 14:02:23 -05:00
55cfad90a9 use werkzeug safe_join to sanitize the requested path
no tests changed, so my implementation might have been good, but let's
use the provided check
2022-12-31 11:53:14 -06:00
b3dfab2611 simplify and better standardize the link underline 2022-12-31 11:33:36 -06:00