From e032a1c5acb52b7bbef5fc8f63fedbb5068eba6d Mon Sep 17 00:00:00 2001 From: Max Value Date: Tue, 2 Dec 2025 17:31:06 +0000 Subject: [PATCH] rebuild for CRJ --- Makefile | 3 + site/__pycache__/categories.cpython-313.pyc | Bin 0 -> 1621 bytes site/__pycache__/media.cpython-313.pyc | Bin 0 -> 390 bytes site/__pycache__/page.cpython-313.pyc | Bin 0 -> 1281 bytes site/__pycache__/search.cpython-313.pyc | Bin 0 -> 1548 bytes site/__pycache__/utils.cpython-313.pyc | Bin 0 -> 1611 bytes site/{blog.py => main.py} | 114 +++++------- site/src/bayeux.md | 72 ++++++++ site/src/bayeux1.png | Bin 0 -> 349116 bytes site/src/beat.md | 1 - site/src/bread.md | 9 + site/src/champagne.md | 29 ++++ site/src/example.md | 57 ++++++ site/src/homepage.md | 7 + site/src/loaf.md | 142 +++++++++++++++ site/src/niceones.md | 12 ++ site/src/plotter.md | 9 + site/src/porn.md | 102 +++++++++++ site/src/smoked.md | 13 ++ site/src/stft.md | 39 +++++ site/src/weber.md | 15 ++ site/static/favicon.ico | Bin 0 -> 16958 bytes site/static/font.css | 129 ++++++++++++++ site/static/fonts/Literata-Black.eot | Bin 394166 -> 0 bytes site/static/fonts/Literata-Black.ttf | Bin 393988 -> 0 bytes site/static/fonts/Literata-Black.woff | Bin 120620 -> 0 bytes site/static/fonts/Literata-Black.woff2 | Bin 89312 -> 0 bytes site/static/fonts/Literata-BlackItalic.eot | Bin 380304 -> 0 bytes site/static/fonts/Literata-BlackItalic.ttf | Bin 380128 -> 0 bytes site/static/fonts/Literata-BlackItalic.woff | Bin 119288 -> 0 bytes site/static/fonts/Literata-BlackItalic.woff2 | Bin 90944 -> 0 bytes site/static/fonts/Literata-Bold.eot | Bin 392558 -> 0 bytes site/static/fonts/Literata-Bold.ttf | Bin 392404 -> 0 bytes site/static/fonts/Literata-Bold.woff | Bin 123504 -> 0 bytes site/static/fonts/Literata-Bold.woff2 | Bin 89840 -> 0 bytes site/static/fonts/Literata-BoldItalic.eot | Bin 379240 -> 0 bytes site/static/fonts/Literata-BoldItalic.ttf | Bin 379072 -> 0 bytes site/static/fonts/Literata-BoldItalic.woff | Bin 121312 -> 0 bytes site/static/fonts/Literata-BoldItalic.woff2 | Bin 90648 -> 0 bytes site/static/fonts/Literata-ExtraBold.eot | Bin 393434 -> 0 bytes site/static/fonts/Literata-ExtraBold.ttf | Bin 393248 -> 0 bytes site/static/fonts/Literata-ExtraBold.woff | Bin 123004 -> 0 bytes site/static/fonts/Literata-ExtraBold.woff2 | Bin 90252 -> 0 bytes .../static/fonts/Literata-ExtraBoldItalic.eot | Bin 379032 -> 0 bytes .../static/fonts/Literata-ExtraBoldItalic.ttf | Bin 378848 -> 0 bytes .../fonts/Literata-ExtraBoldItalic.woff | Bin 121440 -> 0 bytes .../fonts/Literata-ExtraBoldItalic.woff2 | Bin 91540 -> 0 bytes site/static/fonts/Literata-ExtraLight.eot | Bin 395836 -> 0 bytes site/static/fonts/Literata-ExtraLight.ttf | Bin 395648 -> 0 bytes site/static/fonts/Literata-ExtraLight.woff | Bin 118280 -> 0 bytes site/static/fonts/Literata-ExtraLight.woff2 | Bin 88004 -> 0 bytes .../fonts/Literata-ExtraLightItalic.eot | Bin 377510 -> 0 bytes .../fonts/Literata-ExtraLightItalic.ttf | Bin 377324 -> 0 bytes .../fonts/Literata-ExtraLightItalic.woff | Bin 117128 -> 0 bytes .../fonts/Literata-ExtraLightItalic.woff2 | Bin 87624 -> 0 bytes site/static/fonts/Literata-Italic.eot | Bin 372718 -> 0 bytes site/static/fonts/Literata-Italic.ttf | Bin 372560 -> 0 bytes site/static/fonts/Literata-Italic.woff | Bin 114148 -> 0 bytes site/static/fonts/Literata-Italic.woff2 | Bin 85484 -> 0 bytes site/static/fonts/Literata-Light.eot | Bin 392670 -> 0 bytes site/static/fonts/Literata-Light.ttf | Bin 392492 -> 0 bytes site/static/fonts/Literata-Light.woff | Bin 122300 -> 0 bytes site/static/fonts/Literata-Light.woff2 | Bin 88792 -> 0 bytes site/static/fonts/Literata-LightItalic.eot | Bin 377608 -> 0 bytes site/static/fonts/Literata-LightItalic.ttf | Bin 377432 -> 0 bytes site/static/fonts/Literata-LightItalic.woff | Bin 118708 -> 0 bytes site/static/fonts/Literata-LightItalic.woff2 | Bin 89000 -> 0 bytes site/static/fonts/Literata-Medium.eot | Bin 391100 -> 0 bytes site/static/fonts/Literata-Medium.ttf | Bin 390920 -> 0 bytes site/static/fonts/Literata-Medium.woff | Bin 123536 -> 0 bytes site/static/fonts/Literata-Medium.woff2 | Bin 89524 -> 0 bytes site/static/fonts/Literata-MediumItalic.eot | Bin 378482 -> 0 bytes site/static/fonts/Literata-MediumItalic.ttf | Bin 378304 -> 0 bytes site/static/fonts/Literata-MediumItalic.woff | Bin 120940 -> 0 bytes site/static/fonts/Literata-MediumItalic.woff2 | Bin 89844 -> 0 bytes site/static/fonts/Literata-Regular.eot | Bin 386850 -> 0 bytes site/static/fonts/Literata-Regular.ttf | Bin 386692 -> 0 bytes site/static/fonts/Literata-Regular.woff | Bin 116204 -> 0 bytes site/static/fonts/Literata-Regular.woff2 | Bin 85524 -> 0 bytes site/static/fonts/Literata-SemiBold.eot | Bin 391960 -> 0 bytes site/static/fonts/Literata-SemiBold.ttf | Bin 391776 -> 0 bytes site/static/fonts/Literata-SemiBold.woff | Bin 123568 -> 0 bytes site/static/fonts/Literata-SemiBold.woff2 | Bin 89500 -> 0 bytes site/static/fonts/Literata-SemiBoldItalic.eot | Bin 378558 -> 0 bytes site/static/fonts/Literata-SemiBoldItalic.ttf | Bin 378376 -> 0 bytes .../static/fonts/Literata-SemiBoldItalic.woff | Bin 121572 -> 0 bytes .../fonts/Literata-SemiBoldItalic.woff2 | Bin 90256 -> 0 bytes site/static/fonts/Literata-Variable.eot | Bin 1022948 -> 0 bytes site/static/fonts/Literata-Variable.ttf | Bin 1022716 -> 0 bytes site/static/fonts/Literata-Variable.woff | Bin 144760 -> 0 bytes site/static/fonts/Literata-Variable.woff2 | Bin 404452 -> 0 bytes site/static/fonts/Literata-VariableItalic.eot | Bin 981272 -> 0 bytes site/static/fonts/Literata-VariableItalic.ttf | Bin 981052 -> 0 bytes .../static/fonts/Literata-VariableItalic.woff | Bin 124528 -> 0 bytes .../fonts/Literata-VariableItalic.woff2 | Bin 404380 -> 0 bytes site/static/fonts/WorkSans-Black.ttf | Bin 0 -> 192176 bytes site/static/fonts/WorkSans-BlackItalic.ttf | Bin 0 -> 176952 bytes site/static/fonts/WorkSans-Bold.ttf | Bin 0 -> 191304 bytes site/static/fonts/WorkSans-BoldItalic.ttf | Bin 0 -> 175772 bytes site/static/fonts/WorkSans-ExtraBold.ttf | Bin 0 -> 192648 bytes .../static/fonts/WorkSans-ExtraBoldItalic.ttf | Bin 0 -> 177160 bytes site/static/fonts/WorkSans-ExtraLight.ttf | Bin 0 -> 188588 bytes .../fonts/WorkSans-ExtraLightItalic.ttf | Bin 0 -> 174536 bytes site/static/fonts/WorkSans-Italic.ttf | Bin 0 -> 174280 bytes site/static/fonts/WorkSans-Light.ttf | Bin 0 -> 188936 bytes site/static/fonts/WorkSans-LightItalic.ttf | Bin 0 -> 174416 bytes site/static/fonts/WorkSans-Medium.ttf | Bin 0 -> 189556 bytes site/static/fonts/WorkSans-MediumItalic.ttf | Bin 0 -> 175044 bytes site/static/fonts/WorkSans-Regular.ttf | Bin 0 -> 188916 bytes site/static/fonts/WorkSans-SemiBold.ttf | Bin 0 -> 191016 bytes site/static/fonts/WorkSans-SemiBoldItalic.ttf | Bin 0 -> 175504 bytes site/static/fonts/WorkSans-Thin.ttf | Bin 0 -> 188068 bytes site/static/fonts/WorkSans-ThinItalic.ttf | Bin 0 -> 174224 bytes site/static/literata.css | 164 ------------------ site/static/query.css | 43 +++++ site/static/script.js | 34 ++-- site/static/style.css | 118 +++++++------ site/templates/homepage.md | 4 - site/templates/page.html | 37 ++-- 119 files changed, 813 insertions(+), 340 deletions(-) create mode 100644 site/__pycache__/categories.cpython-313.pyc create mode 100644 site/__pycache__/media.cpython-313.pyc create mode 100644 site/__pycache__/page.cpython-313.pyc create mode 100644 site/__pycache__/search.cpython-313.pyc create mode 100644 site/__pycache__/utils.cpython-313.pyc rename site/{blog.py => main.py} (57%) create mode 100644 site/src/bayeux.md create mode 100644 site/src/bayeux1.png create mode 100644 site/src/bread.md create mode 100644 site/src/champagne.md create mode 100644 site/src/example.md create mode 100644 site/src/homepage.md create mode 100644 site/src/loaf.md create mode 100644 site/src/niceones.md create mode 100644 site/src/plotter.md create mode 100644 site/src/porn.md create mode 100644 site/src/smoked.md create mode 100644 site/src/stft.md create mode 100644 site/src/weber.md create mode 100644 site/static/favicon.ico create mode 100644 site/static/font.css delete mode 100644 site/static/fonts/Literata-Black.eot delete mode 100644 site/static/fonts/Literata-Black.ttf delete mode 100644 site/static/fonts/Literata-Black.woff delete mode 100644 site/static/fonts/Literata-Black.woff2 delete mode 100644 site/static/fonts/Literata-BlackItalic.eot delete mode 100644 site/static/fonts/Literata-BlackItalic.ttf delete mode 100644 site/static/fonts/Literata-BlackItalic.woff delete mode 100644 site/static/fonts/Literata-BlackItalic.woff2 delete mode 100644 site/static/fonts/Literata-Bold.eot delete mode 100644 site/static/fonts/Literata-Bold.ttf delete mode 100644 site/static/fonts/Literata-Bold.woff delete mode 100644 site/static/fonts/Literata-Bold.woff2 delete mode 100644 site/static/fonts/Literata-BoldItalic.eot delete mode 100644 site/static/fonts/Literata-BoldItalic.ttf delete mode 100644 site/static/fonts/Literata-BoldItalic.woff delete mode 100644 site/static/fonts/Literata-BoldItalic.woff2 delete mode 100644 site/static/fonts/Literata-ExtraBold.eot delete mode 100644 site/static/fonts/Literata-ExtraBold.ttf delete mode 100644 site/static/fonts/Literata-ExtraBold.woff delete mode 100644 site/static/fonts/Literata-ExtraBold.woff2 delete mode 100644 site/static/fonts/Literata-ExtraBoldItalic.eot delete mode 100644 site/static/fonts/Literata-ExtraBoldItalic.ttf delete mode 100644 site/static/fonts/Literata-ExtraBoldItalic.woff delete mode 100644 site/static/fonts/Literata-ExtraBoldItalic.woff2 delete mode 100644 site/static/fonts/Literata-ExtraLight.eot delete mode 100644 site/static/fonts/Literata-ExtraLight.ttf delete mode 100644 site/static/fonts/Literata-ExtraLight.woff delete mode 100644 site/static/fonts/Literata-ExtraLight.woff2 delete mode 100644 site/static/fonts/Literata-ExtraLightItalic.eot delete mode 100644 site/static/fonts/Literata-ExtraLightItalic.ttf delete mode 100644 site/static/fonts/Literata-ExtraLightItalic.woff delete mode 100644 site/static/fonts/Literata-ExtraLightItalic.woff2 delete mode 100644 site/static/fonts/Literata-Italic.eot delete mode 100644 site/static/fonts/Literata-Italic.ttf delete mode 100644 site/static/fonts/Literata-Italic.woff delete mode 100644 site/static/fonts/Literata-Italic.woff2 delete mode 100644 site/static/fonts/Literata-Light.eot delete mode 100644 site/static/fonts/Literata-Light.ttf delete mode 100644 site/static/fonts/Literata-Light.woff delete mode 100644 site/static/fonts/Literata-Light.woff2 delete mode 100644 site/static/fonts/Literata-LightItalic.eot delete mode 100644 site/static/fonts/Literata-LightItalic.ttf delete mode 100644 site/static/fonts/Literata-LightItalic.woff delete mode 100644 site/static/fonts/Literata-LightItalic.woff2 delete mode 100644 site/static/fonts/Literata-Medium.eot delete mode 100644 site/static/fonts/Literata-Medium.ttf delete mode 100644 site/static/fonts/Literata-Medium.woff delete mode 100644 site/static/fonts/Literata-Medium.woff2 delete mode 100644 site/static/fonts/Literata-MediumItalic.eot delete mode 100644 site/static/fonts/Literata-MediumItalic.ttf delete mode 100644 site/static/fonts/Literata-MediumItalic.woff delete mode 100644 site/static/fonts/Literata-MediumItalic.woff2 delete mode 100644 site/static/fonts/Literata-Regular.eot delete mode 100644 site/static/fonts/Literata-Regular.ttf delete mode 100644 site/static/fonts/Literata-Regular.woff delete mode 100644 site/static/fonts/Literata-Regular.woff2 delete mode 100644 site/static/fonts/Literata-SemiBold.eot delete mode 100644 site/static/fonts/Literata-SemiBold.ttf delete mode 100644 site/static/fonts/Literata-SemiBold.woff delete mode 100644 site/static/fonts/Literata-SemiBold.woff2 delete mode 100644 site/static/fonts/Literata-SemiBoldItalic.eot delete mode 100644 site/static/fonts/Literata-SemiBoldItalic.ttf delete mode 100644 site/static/fonts/Literata-SemiBoldItalic.woff delete mode 100644 site/static/fonts/Literata-SemiBoldItalic.woff2 delete mode 100644 site/static/fonts/Literata-Variable.eot delete mode 100644 site/static/fonts/Literata-Variable.ttf delete mode 100644 site/static/fonts/Literata-Variable.woff delete mode 100644 site/static/fonts/Literata-Variable.woff2 delete mode 100644 site/static/fonts/Literata-VariableItalic.eot delete mode 100644 site/static/fonts/Literata-VariableItalic.ttf delete mode 100644 site/static/fonts/Literata-VariableItalic.woff delete mode 100644 site/static/fonts/Literata-VariableItalic.woff2 create mode 100644 site/static/fonts/WorkSans-Black.ttf create mode 100644 site/static/fonts/WorkSans-BlackItalic.ttf create mode 100644 site/static/fonts/WorkSans-Bold.ttf create mode 100644 site/static/fonts/WorkSans-BoldItalic.ttf create mode 100644 site/static/fonts/WorkSans-ExtraBold.ttf create mode 100644 site/static/fonts/WorkSans-ExtraBoldItalic.ttf create mode 100644 site/static/fonts/WorkSans-ExtraLight.ttf create mode 100644 site/static/fonts/WorkSans-ExtraLightItalic.ttf create mode 100644 site/static/fonts/WorkSans-Italic.ttf create mode 100644 site/static/fonts/WorkSans-Light.ttf create mode 100644 site/static/fonts/WorkSans-LightItalic.ttf create mode 100644 site/static/fonts/WorkSans-Medium.ttf create mode 100644 site/static/fonts/WorkSans-MediumItalic.ttf create mode 100644 site/static/fonts/WorkSans-Regular.ttf create mode 100644 site/static/fonts/WorkSans-SemiBold.ttf create mode 100644 site/static/fonts/WorkSans-SemiBoldItalic.ttf create mode 100644 site/static/fonts/WorkSans-Thin.ttf create mode 100644 site/static/fonts/WorkSans-ThinItalic.ttf delete mode 100644 site/static/literata.css create mode 100644 site/static/query.css delete mode 100644 site/templates/homepage.md diff --git a/Makefile b/Makefile index 5ac3925..565ee29 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,8 @@ all : .venv/touchfile +test : .venv/touchfile + .venv/bin/python site/main.py + .venv/touchfile : requirements.txt python3 -m venv .venv .venv/bin/pip install -r requirements.txt diff --git a/site/__pycache__/categories.cpython-313.pyc b/site/__pycache__/categories.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5f55243b75b43057d2194d7e892d0169e8d536f GIT binary patch literal 1621 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 AO8@`> literal 0 HcmV?d00001 diff --git a/site/__pycache__/utils.cpython-313.pyc b/site/__pycache__/utils.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..134e04e213c8f93e51a9af366cb070145825ddda GIT binary patch literal 1611 zcmb7E-EZ4e6hGH?9NTTOrfo)<#+In9R!7yWX-%t@wqq(1Ak-Gc$}}k{ZD^dvG;t!^ zq1%K+roFTbshz}F9?JtlyzPt4f?74VZa5kx_T9CyvFkJOOjeIAtJ%%OG-_ElwwzEuW(%`f zOC26g#L&uGCsB#9>&(kMne6-7d?LGyx(ATR&UEG6iNuA~)r3kx6{%3E8W!bq)hd~y zkDK7Q5R2%XMl9}soH*Y-alt=v4lF*+F`VgJ0J#Q0nt$08q-0jtY0?A9?#x+2=J{l# z1>dWS9`-6?3pMO@^=3LSOZ1@UjbZB{Ev7=JF`4C0UWzsLU*xY@WNA{DJR}YA#s92N z_A42Hn?Z-uz~Khq?S6pD=F9edk6Rc7=)w9d&I&GZOJqs@N3ZZp7O-Es_xSyc!L9xY zZUlFT;cEp85QlLX>sFt~J{54~B4YZHv;0LU5LH>c8%kTQ>6VOqtXgqgDyOZyQ7|nd zZ?o%bvwKd-^l#qa2E0frZ5VepD|X(YWL%YOc71JjOKo;cRAMtD=&gyYTd@IB*58ElOvzRrA^LGaOJGcx)8XmXD{zVz_Y7wW-ivR>SeOxBBS9(tl} z5dum(3UY*P|DzN?<{>!QJ_mAm>&!lR<*(mm=$|?sKquDu!vD;o(jcfB!{^^BR z=ljH`Q@yBv*B4+ss?3iD7gZjAF|O_X4!pj619l&#owQAwDOd8fk}+qGpbzH(oY#=G bc|u5=3lOQH{{bl4;RqRO%>M}}y!5{T-StL! literal 0 HcmV?d00001 diff --git a/site/blog.py b/site/main.py similarity index 57% rename from site/blog.py rename to site/main.py index 1f35152..2db81ec 100755 --- a/site/blog.py +++ b/site/main.py @@ -1,69 +1,67 @@ #! .venv/bin/python3 -from flask import Flask, Response, request, render_template_string, redirect, send_from_directory +from flask import Flask, Response, request, render_template_string, redirect, send_file import markdown from os import listdir, environ -from os.path import getmtime +from os.path import getmtime, basename from markdown.extensions.toc import TocExtension +import glob import re import time app = Flask(__name__) -md = markdown.Markdown(extensions = ['meta', 'tables', 'footnotes', TocExtension(title = "Table of contents")]) - -blog_path = environ["BLOG_PATH"] - -repo = Repo.init(blog_path) +md = markdown.Markdown(extensions = ['meta', 'footnotes', TocExtension(title = "Table of contents")]) class Page(): def __init__( self, title: str = "Unamed page", - abstract: str = "", keywords: list = ["Undefined"], date: str = "n.d.", content: str = "", - template: str = "page.html", filename: str = "" ): self.title = title - self.abstract = abstract self.keywords = keywords self.date = date self.content = content - self.template = template self.filename = filename def from_metadata(self, metadata): if "title" in metadata: self.title = metadata["title"].title() - if "abstract" in metadata: self.abstract = metadata["abstract"] if "keywords" in metadata: self.keywords = [x.strip().title() for x in metadata["keywords"].split(",")] if "date" in metadata: self.date = metadata["date"] def make(self): - format_keywords = " - ".join([f"{key}" for key in self.keywords]) - - template_string = open(f"{blog_path}/templates/{self.template}", "r").read() + format_keywords = " - ".join([f"{key}" for key in self.keywords]) - with open(f"{blog_path}/templates/sidebar.md", "r") as f: - sidebar = md.convert(f.read()) + template_string = open(f"{app.root_path}/templates/page.html", "r").read() page = render_template_string( template_string, title = self.title, date = self.date, - abstract = self.abstract, keywords = format_keywords, content = self.content, filename = self.filename, - sidebar = sidebar + sidebar = get_categories() ) return Response(page, mimetype="text/html") +def get_files(): + data = glob.glob(f"{app.root_path}/src/**/*", recursive=True) + + data = { + basename(x): x + for x in data + } + + return data + def get_plaintext(file_name: str): - page = open(f"{blog_path}/pages/{file_name}", "r").read() + page = open(get_files()[file_name], "r").read() return re.sub( r"((?[\S ]*)|(``*)", "", @@ -71,10 +69,9 @@ def get_plaintext(file_name: str): def get_metadata(file_name: str): title = "Untitled post" - abstract = "..." keywords = ["Undefined"] - with open(f"{blog_path}/pages/{file_name}", "r") as f: + with open(get_files()[file_name], "r") as f: while keywords == ["Undefined"]: line = f.readline().split(":") # Split metdata into [key, value] if len(line) == 2: # len != 2 when metadata block is over @@ -82,45 +79,23 @@ def get_metadata(file_name: str): match key: case "title": title = value.strip().title() - case "abstract": - abstract = value.strip() case "keywords": keywords = [x.strip() for x in value.split(",")] else: break - return title, abstract, keywords - -def get_recent(n): - modification_times = {file_name: getmtime(f"{blog_path}/pages/{file_name}") for file_name in listdir(f"{blog_path}/pages")} - pages = sorted(modification_times.items(), key=lambda x: x[1])[:n] - - content = "

Recent Posts

    " - - for page in pages: - title, abstract, keywords = get_metadata(page[0]) - content += f""" -
  • - {title} -
  • - """ - - content += "
" - - return content + return title, keywords @app.route("/") def homepage(): - with open(f"{blog_path}/templates/homepage.md", "r") as f: + with open(f"{app.root_path}/src/homepage.md", "r") as f: homepage = md.convert(f.read()) page = Page( title = "Home", - abstract = "Blog and portfolio of Will Greenwood.", keywords = [], date = "", - content = homepage + get_recent(10), - template = "page.html" + content = homepage, ) return page.make() @@ -129,10 +104,11 @@ def get_search(): search = request.args.get("name") results = 0 - content = f"

Search '{search}'