Browse Source

Updated styles, added home functionality

* Home now renders from content instead of all in-template
* Titles are parsed from HTML :D
* Updated stylesheet to have better fonts and scale better (e.g. add
  margin)
* Any content path with '_hidden' is ignored
* Added link to home page to all Blog Posts
* XSRF tokens are randomized for eventual security
master
Macoy Madson 1 year ago
parent
commit
70d8d8e4d2
6 changed files with 77 additions and 37 deletions
  1. +4
    -0
      ContentConverter.py
  2. +26
    -11
      SimpleBlogServer.py
  3. +2
    -0
      content/Home_hidden.org
  4. +16
    -8
      templates/BlogPost.html
  5. +7
    -5
      templates/Home.html
  6. +22
    -13
      webResources/styles.css

+ 4
- 0
ContentConverter.py View File

@ -87,6 +87,10 @@ Interface
def getAllPostsList():
allPosts = []
for key, value in renderedDictionary.items():
# Hide folders and files with '_hidden' (they can still be retrieved though)
if '_hidden' in key:
continue
allPosts.append(key)
return allPosts


+ 26
- 11
SimpleBlogServer.py View File

@ -1,14 +1,16 @@
#!/usr/bin/env python3
import tornado.gen
import tornado.httpclient
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.websocket
import tornado.httpclient
import tornado.httpserver
import tornado.gen
import os
from datetime import datetime
import random
import re
import ContentConverter
@ -16,25 +18,39 @@ import ContentConverter
# Tornado handlers
#
def getTitleFromBody(htmlBody):
# The cardinal sin: do not use regex to parse HTML! :D
match = re.match(r'<h1.*>(.*)</h1>', htmlBody)
return match[1]
def getBlogHtmlBody(requestedContent):
renderedBody = ContentConverter.getRenderedBody(requestedContent)
if not renderedBody:
renderedBody = "<p>The post under '{}' does not exist.</p>".format(requestedContent)
return renderedBody
class HomeHandler(tornado.web.RequestHandler):
def get(self):
allPosts = ContentConverter.getAllPostsList()
self.render("templates/Home.html", allPosts=allPosts)
renderedHomeBody = getBlogHtmlBody('Home_hidden')
self.render("templates/Home.html", allPosts=allPosts, homeBody=renderedHomeBody)
class BlogHandler(tornado.web.RequestHandler):
def get(self, request):
contentTitle = "Blog: " + request
renderedBody = ContentConverter.getRenderedBody(request)
if not renderedBody:
renderedBody = "<p>The post under '{}' does not exist.</p>".format(request)
renderedBody = getBlogHtmlBody(request)
self.render("templates/BlogPost.html", title=contentTitle, postBody=renderedBody)
self.render("templates/BlogPost.html",
title=getTitleFromBody(renderedBody), postBody=renderedBody)
#
# Startup
#
def make_app():
# Makes sure we don't have predictable cookies to combat spoofed requests
randomGenerator = random.SystemRandom()
cookieSecret = str(randomGenerator.getrandbits(128))
return tornado.web.Application([
# Home page
(r'/', HomeHandler),
@ -51,11 +67,10 @@ def make_app():
# (r'/output/(.*)', tornado.web.StaticFileHandler, {'path' : 'output'}),
# Static files. Keep this at the bottom because it handles everything else
# TODO put these in a subdir so everything isn't accessible
(r'/webResources/(.*)', tornado.web.StaticFileHandler, {'path' : 'webResources'}),
],
xsrf_cookies=True,
cookie_secret='this is my org blog')
cookie_secret=cookieSecret)
if __name__ == '__main__':


+ 2
- 0
content/Home_hidden.org View File

@ -0,0 +1,2 @@
* Simple Org Blog
The owner has not set up their ~Home_hidden.org~ file.

+ 16
- 8
templates/BlogPost.html View File

@ -1,9 +1,17 @@
<html>
<head>
<title>{{ title }}</title>
<link rel="stylesheet" type="text/css" href="/webResources/styles.css">
</head>
<body>
{% raw postBody %}
</body>
</html>
<head>
<title>{{ title }}</title>
<link rel="stylesheet" type="text/css" href="/webResources/styles.css">
</head>
<body>
<article>
{% raw postBody %}
</article>
<br />
<nav>
<a href="/">Back to Home</a>
</nav>
<br />
</body>
</html>

+ 7
- 5
templates/Home.html View File

@ -4,10 +4,12 @@
<link rel="stylesheet" type="text/css" href="/webResources/styles.css">
</head>
<body>
<h1>Simple Blog</h1>
<p>The owner hasn't set up their templates/Home.html template yet.</p>
{% for post in allPosts %}
<a href="blog/{{post}}">{{post}}</a><br />
{% end %}
{% raw homeBody %}
<nav>
{% for post in allPosts %}
<a href="blog/{{post}}">{{post}}</a><br />
{% end %}
</nav>
</body>
</html>

+ 22
- 13
webResources/styles.css View File

@ -1,18 +1,35 @@
html {
margin: 15 15 15 15;
background-color: #333333;
}
body {
/* Center body */
margin: 0 auto;
width: 80%;
height: 100%;
background-color: #333333;
max-width: 800px;
/* Make sure lines don't get too long */
max-width: 700px;
}
p,
blockquote,
h1,
h2,
h3,
a,
li {
li,
tr,
td,
th {
color: #cccccc;
font-family: Arial;
}
/* Font sizes for consistently sized text */
p,
blockquote,
a,
li {
font-size: medium;
}
label {
@ -20,14 +37,6 @@ label {
color: #cccccc;
}
li {
margin-top: 0px;
margin-bottom: 0px;
margin-left: 20px;
font-size: small;
color: #aaaaaa;
}
img {
width: 100%;
height: auto;


Loading…
Cancel
Save