Custom CSS support

Admins can now set custom CSS in the admin interface - next up is to add classes to all elements for easier theming.
This commit is contained in:
gmemstr 2017-09-03 09:53:17 -07:00
parent ad69559c1e
commit 973ad0e72e
6 changed files with 46 additions and 1 deletions

View file

@ -7,6 +7,7 @@
</head> </head>
<body> <body>
<div class="admin">
<h1>White Rabbit Publish</h1> <h1>White Rabbit Publish</h1>
<form enctype="multipart/form-data" action="/admin/publish" method="post"> <form enctype="multipart/form-data" action="/admin/publish" method="post">
@ -21,9 +22,16 @@
<input type="submit" value="Publish"> <input type="submit" value="Publish">
</form> </form>
<form action="/admin/css" method="post" enctype="multipart/form-data">
<label for="css">Custom CSS</label>
<textarea name="css" id="css" cols="30" rows="10"></textarea>
<input type="submit">
</form>
<footer> <footer>
<p>White Rabbit licensed under the GPLv3</p> <p>White Rabbit licensed under the GPLv3</p>
</footer> </footer>
</div>
</body> </body>
</html> </html>

View file

@ -4,11 +4,15 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>CMS Loading</title> <title>CMS Loading</title>
<link rel="stylesheet" href="/assets/styles.css"> <link rel="stylesheet" href="/assets/styles.css">
<!-- Custom CSS stylings from admin -->
<link rel="stylesheet" href="/assets/custom.css">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<h1 id="title" class="title">Loading</h1> <h1 id="title" class="title">Loading</h1>
<h3><a href="/admin">Admin</a></h3>
<div id="podcasts"> <div id="podcasts">

3
assets/static/custom.css Normal file
View file

@ -0,0 +1,3 @@
body {
background-color:red;
}

View file

@ -15,4 +15,10 @@ h1,h2,h3,h4,h5 {
.podcast { .podcast {
width:70%; width:70%;
} }
label {
display: block;
}
.admin {
text-align: center;
}

View file

@ -15,6 +15,29 @@ import (
"os" "os"
) )
func CustomCss(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
r.ParseMultipartForm(32 << 20)
css := strings.Join(r.Form["css"], "")
filename := "custom.css"
err := ioutil.WriteFile("./assets/static/" + filename, []byte(css), 0644)
if err != nil {
panic(err)
} else {
w.Write([]byte("success"))
}
} else {
css,err := ioutil.ReadFile("./assets/static/custom.css")
if err != nil {
panic (err)
} else {
w.Write(css)
}
}
}
func CreateEpisode(w http.ResponseWriter, r *http.Request) { func CreateEpisode(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" { if r.Method == "POST" {
r.ParseMultipartForm(32 << 20) r.ParseMultipartForm(32 << 20)

View file

@ -114,6 +114,7 @@ func main() {
r.HandleFunc("/json", JsonHandler) r.HandleFunc("/json", JsonHandler)
r.HandleFunc("/admin", BasicAuth(AdminHandler, viper.GetString("AdminUsername"), viper.GetString("AdminPassword"), "Login to White Rabbit admin interface")) r.HandleFunc("/admin", BasicAuth(AdminHandler, viper.GetString("AdminUsername"), viper.GetString("AdminPassword"), "Login to White Rabbit admin interface"))
r.HandleFunc("/admin/publish", CreateEpisode) r.HandleFunc("/admin/publish", CreateEpisode)
r.HandleFunc("/admin/css", CustomCss)
// We're live! // We're live!
log.Fatal(http.ListenAndServe(":8000", r)) log.Fatal(http.ListenAndServe(":8000", r))