add a simple layout html wrapper for the markdown pages with css support
This commit is contained in:
parent
db5ff4650a
commit
944cf9fb8b
24
assets/_layout.html
Normal file
24
assets/_layout.html
Normal file
@ -0,0 +1,24 @@
|
||||
<!-- _layout.html -->
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>TCP Wiki</title>
|
||||
<link rel="stylesheet" href="/assets/main.css">
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>TCP Wiki</h1>
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<!-- placeholder -->
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div id="content">
|
||||
{{.Content}}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
42
assets/main.css
Normal file
42
assets/main.css
Normal file
@ -0,0 +1,42 @@
|
||||
/* assets/main.css */
|
||||
|
||||
/* placeholder for better sytle */
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
margin: 20px;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #777;
|
||||
}
|
||||
|
||||
header {
|
||||
padding: 1em;
|
||||
background-color: #f1f1f1;
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
display: inline-block;
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
nav ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
nav ul li {
|
||||
display: inline;
|
||||
margin-right: 1em;
|
||||
}
|
30
render.go
30
render.go
@ -1,13 +1,20 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/russross/blackfriday/v2"
|
||||
)
|
||||
|
||||
type Page struct {
|
||||
Content template.HTML
|
||||
}
|
||||
|
||||
func renderPage(w http.ResponseWriter, localPath, filePath string) error {
|
||||
content, err := readFileFromRepo(localPath, filePath)
|
||||
if err != nil {
|
||||
@ -28,8 +35,29 @@ func renderPage(w http.ResponseWriter, localPath, filePath string) error {
|
||||
|
||||
func renderMarkdown(w http.ResponseWriter, content []byte) {
|
||||
md := blackfriday.Run(content)
|
||||
|
||||
layout, err := ioutil.ReadFile(filepath.Join(localPath, "assets/_layout.html"))
|
||||
if err != nil {
|
||||
http.Error(w, "Layout not found", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
page := &Page{Content: template.HTML(md)}
|
||||
t, err := template.New("layout").Parse(string(layout))
|
||||
if err != nil {
|
||||
http.Error(w, "Error parsing layout", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
var buf bytes.Buffer
|
||||
err = t.Execute(&buf, page)
|
||||
if err != nil {
|
||||
http.Error(w, "Error rendering layout", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||
w.Write(md)
|
||||
w.Write(buf.Bytes())
|
||||
}
|
||||
|
||||
func renderStatic(w http.ResponseWriter, content []byte, ext string) {
|
||||
|
Loading…
Reference in New Issue
Block a user