Commit Graph

191 Commits

Author SHA1 Message Date
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
715bc38d78 serve per-instance static files at custom-static/ 2022-12-31 10:51:36 -06:00
e9af2de21e don't assume all styles are in the static directory
this is to make room for a second, instance-configured spot for them
2022-12-31 10:16:35 -06:00
4a2f650a33 don't hardcode styles to present, use config
now that we can override the styles in practice, we also need to only
present what is possible in the HTML
2022-12-31 09:53:22 -06:00
fd0fb390ff allow for overriding PAGE_STYLES
moving this allows for per-instance customizations later, but that won't
be practical until serving styles from the instance dir is also allowed.
but, this sets the ground work and does allow for removing some styles
(e.g. if someone wanted to only allow 'plain').

also I still need to add the ability to present the themes list dynamically
2022-12-31 09:40:13 -06:00
0f19fcb174 fix bad copy and paste job on link styles 2022-09-16 14:16:13 -05:00
83eb464be9 style the potential for links in the footer 2022-09-16 13:40:23 -05:00
0f03ad6f38 allow pages to supply extra footer text 2022-09-16 13:35:40 -05:00