]> xn--ix-yja.es Git - alex.git/commitdiff
Add about
authoralex <alex@pdp7.net>
Sun, 8 Oct 2023 19:55:35 +0000 (21:55 +0200)
committeralex <alex@pdp7.net>
Sun, 8 Oct 2023 19:55:35 +0000 (21:55 +0200)
blog_experiment/blog/__init__.py
blog_experiment/blog/blog_pages.py
blog_experiment/blog/html.py

index 594d1a77dadd66fc91067f5fcf72951a7110b394..c16c2a232af428d82d17e2489bbc5243074704f2 100644 (file)
@@ -3,7 +3,31 @@ import re
 
 import bicephalus
 
-from blog import blog_pages, page
+import htmlgenerator as h
+
+from blog import blog_pages, page, html, pretty, gemtext
+
+
+class AboutPage(page.BasePage):
+    def get_gemini_content(self):
+        return (
+            bicephalus.Status.OK,
+            "text/gemini",
+            pathlib.Path("static/about/index.gmi").read_text(),
+        )
+
+    def get_http_content(self):
+        return (
+            bicephalus.Status.OK,
+            "text/html",
+            pretty.pretty_html(h.render(
+            h.HTML(
+                h.HEAD(
+                    h.TITLE("About Álex Córcoles"),
+                ),
+                h.BODY(*html.gemini_to_html(gemtext.parse(self.get_gemini_content()[2])))
+            ), {})),
+        )
 
 
 def handler(request: bicephalus.Request) -> bicephalus.Response:
@@ -15,4 +39,7 @@ def handler(request: bicephalus.Request) -> bicephalus.Response:
             return blog_pages.EntryPage(request, blog_file).response()
     if request.path == "/feed/" and request.proto == bicephalus.Proto.HTTP:
         return blog_pages.Root(request).feed()
+    if request.path == "/about/":
+        return AboutPage(request).response()
+
     return page.NotFound(request).response()
index 1edf0dfb88fc9ec56bef1ec4c7874cceffd4e2ff..7802c00b36ed46f26269292634e943d19bcc0198 100644 (file)
@@ -46,71 +46,7 @@ class Entry:
         assert isinstance(parsed[1], gemtext.Line)
         assert parsed[2] == gemtext.Line("")
 
-        result = []
-
-        parsed = parsed[3:]
-        i = 0
-        while i < len(parsed):
-            gem_element = parsed[i]
-
-            if isinstance(gem_element, gemtext.Header):
-                header = [h.H1, h.H2, h.H3, h.H4, h.H5, h.H6][gem_element.level - 1]
-                result.append(header(gem_element.text))
-                i = i + 1
-                continue
-
-            if isinstance(gem_element, gemtext.List):
-                result.append(h.UL(*[h.LI(i.text) for i in gem_element.items]))
-                i = i + 1
-                continue
-
-            if isinstance(gem_element, gemtext.Link):
-                url = gem_element.url
-                if url.startswith("gemini://"):
-                    if url.startswith("gemini://alex.corcoles.net/"):
-                        url = url.replace("gemini://alex.corcoles.net/", f"{meta.SCHEMA}://{meta.HOST}/")
-                    else:
-                        url = url.replace("gemini://", "https://portal.mozz.us/gemini/")
-
-                result.append(h.P(h.A(gem_element.text or gem_element.url, href=url)))
-                i = i + 1
-                continue
-
-            if gem_element == gemtext.Line(""):
-                i = i + 1
-                continue
-
-            if isinstance(gem_element, gemtext.BlockQuote):
-                content = []
-                for line in gem_element.lines:
-                    if line.text:
-                        content.append(line.text)
-                    content.append(h.BR())
-                result.append(h.BLOCKQUOTE(*content))
-                i = i + 1
-                continue
-
-            if isinstance(gem_element, gemtext.Line):
-                paragraph = [gem_element.text]
-                i = i + 1
-                while i < len(parsed):
-                    gem_element = parsed[i]
-                    if isinstance(gem_element, gemtext.Line) and gem_element.text != "":
-                        paragraph.append(h.BR())
-                        paragraph.append(gem_element.text)
-                        i = i + 1
-                    else:
-                        break
-                result.append(h.P(*paragraph))
-                continue
-
-            if isinstance(gem_element, gemtext.Pre):
-                result.append(h.PRE(gem_element.content))
-                i = i + 1
-                continue
-
-            assert False, f"unknown element {gem_element}"
-
+        result = html.gemini_to_html(parsed[3:])
         result.append(h.P(h.A("Editar", href=self.edit_url)))
         return result
 
index 5263ca9bdb7b4b56cc20597bb5eebe32d0e2b8e7..8aa92f4a93a43960a6020be3c9f3e49ea2ec2193 100644 (file)
@@ -2,7 +2,7 @@ import itertools
 
 import htmlgenerator as h
 
-from blog import meta, pretty
+from blog import meta, pretty, gemtext
 
 
 def html_template(*content, page_title=None):
@@ -33,3 +33,69 @@ def html_template(*content, page_title=None):
         {},
     ))
 
+
+def gemini_to_html(parsed):
+    i = 0
+    result = []
+    while i < len(parsed):
+        gem_element = parsed[i]
+
+        if isinstance(gem_element, gemtext.Header):
+            header = [h.H1, h.H2, h.H3, h.H4, h.H5, h.H6][gem_element.level - 1]
+            result.append(header(gem_element.text))
+            i = i + 1
+            continue
+
+        if isinstance(gem_element, gemtext.List):
+            result.append(h.UL(*[h.LI(i.text) for i in gem_element.items]))
+            i = i + 1
+            continue
+
+        if isinstance(gem_element, gemtext.Link):
+            url = gem_element.url
+            if url.startswith("gemini://"):
+                if url.startswith("gemini://alex.corcoles.net/"):
+                    url = url.replace("gemini://alex.corcoles.net/", f"{meta.SCHEMA}://{meta.HOST}/")
+                else:
+                    url = url.replace("gemini://", "https://portal.mozz.us/gemini/")
+
+            result.append(h.P(h.A(gem_element.text or gem_element.url, href=url)))
+            i = i + 1
+            continue
+
+        if gem_element == gemtext.Line(""):
+            i = i + 1
+            continue
+
+        if isinstance(gem_element, gemtext.BlockQuote):
+            content = []
+            for line in gem_element.lines:
+                if line.text:
+                    content.append(line.text)
+                content.append(h.BR())
+            result.append(h.BLOCKQUOTE(*content))
+            i = i + 1
+            continue
+
+        if isinstance(gem_element, gemtext.Line):
+            paragraph = [gem_element.text]
+            i = i + 1
+            while i < len(parsed):
+                gem_element = parsed[i]
+                if isinstance(gem_element, gemtext.Line) and gem_element.text != "":
+                    paragraph.append(h.BR())
+                    paragraph.append(gem_element.text)
+                    i = i + 1
+                else:
+                    break
+            result.append(h.P(*paragraph))
+            continue
+
+        if isinstance(gem_element, gemtext.Pre):
+            result.append(h.PRE(gem_element.content))
+            i = i + 1
+            continue
+
+        assert False, f"unknown element {gem_element}"
+
+    return result