Render pandoc output to index.html
Using index.html allows us to use the Google AdSense script and extend the styling by adding a CSS stylesheet.
This commit is contained in:
		
							parent
							
								
									837cfe07c7
								
							
						
					
					
						commit
						265d202908
					
				
					 3 changed files with 17 additions and 13 deletions
				
			
		| 
						 | 
				
			
			@ -3,14 +3,12 @@
 | 
			
		|||
  <head>
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1" />
 | 
			
		||||
    <meta name="description" content="Showcase of AI bots at DeepMind" />
 | 
			
		||||
    <link rel="stylesheet" href="/index.css">
 | 
			
		||||
    <title>AI Showcase</title>
 | 
			
		||||
    <meta name="description" content="wpcarro.dev | blog" />
 | 
			
		||||
    <title>wpcarro.dev | blog</title>
 | 
			
		||||
    <script data-ad-client="ca-pub-6018268443649487" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
 | 
			
		||||
  </head>
 | 
			
		||||
  <body>
 | 
			
		||||
    <noscript>You need to enable JavaScript to run this app.</noscript>
 | 
			
		||||
    <h1>Welcome</h1>
 | 
			
		||||
    <p>To my blog!</p>
 | 
			
		||||
    {{ blog }}
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,6 +2,7 @@
 | 
			
		|||
(defpackage #:server
 | 
			
		||||
  (:documentation "Robot condemned to a life of admin work for my blog.")
 | 
			
		||||
  (:use #:cl)
 | 
			
		||||
  (:use #:cl-ppcre)
 | 
			
		||||
  (:import-from #:cl-arrows #:->>)
 | 
			
		||||
  (:export :main))
 | 
			
		||||
(in-package #:server)
 | 
			
		||||
| 
						 | 
				
			
			@ -10,25 +11,29 @@
 | 
			
		|||
;; Nix-injected dependencies
 | 
			
		||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
			
		||||
 | 
			
		||||
;; TODO: Wrap this in an assert or ensure that there's a trailing slash so it's
 | 
			
		||||
;; treated as a directory.
 | 
			
		||||
(defvar *path-to-posts* "/tmp/"
 | 
			
		||||
  "File path pointing to the posts directory.")
 | 
			
		||||
 | 
			
		||||
(defvar *pandoc-bin* "/usr/bin/pandoc")
 | 
			
		||||
 | 
			
		||||
(defvar *html-template* "./index.html"
 | 
			
		||||
  "The path to the HTML template used for the blog posts.")
 | 
			
		||||
 | 
			
		||||
(defvar *posts* (uiop:directory-files *path-to-posts*)
 | 
			
		||||
  "List of the paths to the blog posts.")
 | 
			
		||||
 | 
			
		||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
			
		||||
;; Library
 | 
			
		||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
			
		||||
 | 
			
		||||
;; TODO: Support properly indenting the output from pandoc to nest within the
 | 
			
		||||
;; template. Or just use a proper templating library.
 | 
			
		||||
(defun render-post (path)
 | 
			
		||||
  "Render the markdown file stored at PATH to HTML using pandoc."
 | 
			
		||||
  (uiop:run-program (list *pandoc-bin* path "--to" "html")
 | 
			
		||||
                    :output :string))
 | 
			
		||||
 | 
			
		||||
;; TODO: Figure out how to handle this with Nix.
 | 
			
		||||
(defvar *posts* (uiop:directory-files *path-to-posts*)
 | 
			
		||||
  "List of the paths to the blog posts.")
 | 
			
		||||
  (cl-ppcre:regex-replace-all
 | 
			
		||||
   "{{ blog }}"
 | 
			
		||||
   (uiop:read-file-string *html-template*)
 | 
			
		||||
   (uiop:run-program (list *pandoc-bin* path "--to" "html") :output :string)))
 | 
			
		||||
 | 
			
		||||
(hunchentoot:define-easy-handler
 | 
			
		||||
    (get-latest :uri "/latest") ()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue