Better styles I guess

This commit is contained in:
John Doty 2024-09-24 18:51:15 -07:00
parent e8c91189c0
commit 86971c39d6

View file

@ -5,12 +5,13 @@ import functools
import html import html
import http.server import http.server
import io import io
import pathlib
import time import time
import traceback import traceback
import threading import threading
import urllib.parse import urllib.parse
from typing import Any, Callable, Concatenate, ParamSpec, Protocol from typing import Callable, Concatenate, ParamSpec
from . import database from . import database
from . import feed from . import feed
@ -194,7 +195,9 @@ class EventConsumer:
return Event(event=None, data=None, id=None) return Event(event=None, data=None, id=None)
###############################################################################
# Background Tasks # Background Tasks
###############################################################################
class BackgroundTask: class BackgroundTask:
@ -335,6 +338,8 @@ class Handler(http.server.BaseHTTPRequestHandler):
def do_GET(self): def do_GET(self):
if self.path == "/": if self.path == "/":
return self.serve_feeds() return self.serve_feeds()
elif self.path == "/style.css":
return self.serve_style()
elif self.path == "/refresh-status": elif self.path == "/refresh-status":
return self.serve_status() return self.serve_status()
elif self.path == "/subscribe-status": elif self.path == "/subscribe-status":
@ -433,26 +438,28 @@ class Handler(http.server.BaseHTTPRequestHandler):
self.wfile.flush() self.wfile.flush()
def serve_status(self): def serve_status(self):
global REFRESH_TASK # TODO: FIX STYLES TO BE INLINE FOR SPEED I GUESS
buffer = io.StringIO() buffer = io.StringIO()
buffer.write( buffer.write(
""" """
<!doctype html> <!doctype html>
<head> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Status</title> <title>Status</title>
<style> <link rel="stylesheet" href="/style.css" type="text/css" />
body { margin-left: 4rem; margin-right: 4rem; }
li.entry { display: inline; padding-right: 1rem; }
li.entry:before { content: '\\2022'; padding-right: 0.5rem; }
h1 { margin-bottom: 0.25rem; }
</style>
</head> </head>
<div style="display: flex; flex-flow: column; height: 100vh"> <body>
<h1 style="flex: 0 1 auto;">Status</h1> <header>
<h2 style="flex: 0 1 auto;">Status: <span id="status">Starting...</span></h2> <h1>Status</h1>
<pre style="flex: 1 1 auto; overflow-y: scroll;" id="log"></pre> <h2>Status: <span id="status">Starting...</span></h2>
<div style="flex: 0 1 auto;"><a href="/">Back to feeds</a></div> </header>
<pre class="content" id="log"></pre>
<footer>
<a href="/">Back to feeds</a>
</footer>
</div> </div>
<script> <script>
function append_log(txt) { function append_log(txt) {
@ -472,9 +479,10 @@ class Handler(http.server.BaseHTTPRequestHandler):
}); });
events.addEventListener("redirect", (e) => { events.addEventListener("redirect", (e) => {
console.log(e); console.log(e);
window.location = e.data; // window.location = e.data;
}); });
</script> </script>
</body>
""" """
) )
@ -494,12 +502,7 @@ class Handler(http.server.BaseHTTPRequestHandler):
<head> <head>
<meta charset="utf8"> <meta charset="utf8">
<title>Subscribed Feeds</title> <title>Subscribed Feeds</title>
<style> <link rel="stylesheet" href="/style.css" type="text/css" />
body { margin-left: 4rem; margin-right: 4rem; }
li.entry { display: inline; padding-right: 1rem; }
li.entry:before { content: '\\2022'; padding-right: 0.5rem; }
h1 { margin-bottom: 0.25rem; }
</style>
</head> </head>
<h1>Feeds</h1> <h1>Feeds</h1>
<div> <div>
@ -516,18 +519,16 @@ class Handler(http.server.BaseHTTPRequestHandler):
) )
for f in feeds: for f in feeds:
feed_title = html.escape(f.title) feed_title = html.escape(f.title)
if len(f.entries) > 0:
ago = f" ({f.entries[0].time_ago()})"
else:
ago = ""
buffer.write(f"<div class='feed'>") buffer.write(f"<div class='feed'>")
buffer.write(f'<h2><a href="{f.link}">{feed_title}</a>{ago}</h2>') buffer.write(
f'<h2><a href="{f.link}" target="_blank">{feed_title}</a></h2>'
)
if len(f.entries) > 0: if len(f.entries) > 0:
buffer.write(f"<ul>") buffer.write(f"<ul>")
for entry in f.entries: for entry in f.entries:
title = html.escape(entry.title) title = html.escape(entry.title)
buffer.write( buffer.write(
f'<li class="entry"><a href="{entry.link}">{title}</a> ({entry.time_ago()})</li>' f'<li class="entry"><a href="{entry.link}" target="_blank">{title}</a> ({entry.time_ago()})</li>'
) )
buffer.write(f"</ul>") buffer.write(f"</ul>")
else: else:
@ -555,12 +556,7 @@ class Handler(http.server.BaseHTTPRequestHandler):
<head> <head>
<meta charset="utf8"> <meta charset="utf8">
<title>Choose Feed</title> <title>Choose Feed</title>
<style> <link rel="stylesheet" href="/style.css" type="text/css" />
body { margin-left: 4rem; margin-right: 4rem; }
li.entry { display: inline; padding-right: 1rem; }
li.entry:before { content: '\\2022'; padding-right: 0.5rem; }
h1 { margin-bottom: 0.25rem; }
</style>
</head> </head>
<h1>Choose Feed</h1> <h1>Choose Feed</h1>
<p>More than one feed was found. Choose the feed to subscribe to.</p> <p>More than one feed was found. Choose the feed to subscribe to.</p>
@ -603,6 +599,22 @@ class Handler(http.server.BaseHTTPRequestHandler):
self.end_headers() self.end_headers()
self.wfile.write(response) self.wfile.write(response)
def serve_style(self):
self.write_file(
pathlib.Path(__file__).parent / "static" / "style.css",
content_type="text/css",
)
def write_file(self, path: pathlib.Path, content_type: str):
with open(path, "rb") as file:
content = file.read()
self.send_response(200)
self.send_header("content-type", content_type)
self.send_header("content-length", str(len(content)))
self.end_headers()
self.wfile.write(content)
def serve(): def serve():
with http.server.ThreadingHTTPServer(("", 8000), Handler) as server: with http.server.ThreadingHTTPServer(("", 8000), Handler) as server: