commit 2c088ebdbb839b2633792a5d364168ff1641c226
parent 80f3de4bba87deb3abb8e994af85cd994aa6baf8
Author: weetat <wtenison@protonmail.com>
Date: Thu, 27 Feb 2025 14:45:20 +0000
Split page handler into home, subject and edit
The subject handler takes a file name from the ?s= query parameter and
renders the matching .fmd from the data directory.
Diffstat:
5 files changed, 104 insertions(+), 12 deletions(-)
diff --git a/src/network/routes.go b/src/network/routes.go
@@ -3,10 +3,12 @@ package network
import (
"log"
"net/http"
+ "net/url"
"path/filepath"
"text/template"
mfs "miki/src/filesystem"
+ "miki/src/fmd"
)
var mux *http.ServeMux
@@ -21,8 +23,9 @@ func makeServerRoutes() {
http.ServeFile(w, r, filepath.Join(mfs.Dirs["web"], "/global/favicon.ico"))
})
- mux.HandleFunc("/home", handlePageDefault)
- mux.HandleFunc("/edit", handlePageDefault)
+ mux.HandleFunc("/home", handlePageHome)
+ mux.HandleFunc("/subject", handlePageSubject)
+ mux.HandleFunc("/edit", handlePageEdit)
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/" {
@@ -34,7 +37,95 @@ func makeServerRoutes() {
})
}
-func handlePageDefault(w http.ResponseWriter, r *http.Request) {
+func handlePageHome(w http.ResponseWriter, r *http.Request) {
+
+ // Collect HTML template files from directory.
+ _rPkg, _err := mfs.MakeDirectoryPkg(filepath.Join(mfs.Dirs["web"], r.URL.String()), mfs.SEARCH_DEPTH_ZERO, "*.html")
+ if _err != nil {
+ log.Printf("_ERROR\tnetwork:handlePage(\"/subject\"):%s", _err)
+ http.NotFound(w, r)
+ return
+ }
+
+ // Add 'global' file dependencies.
+ _rPkg.DependencyFiles = append(_rPkg.DependencyFiles, mfs.WebGlobalPkg.DependencyFiles...)
+
+ // Create template from package.
+ _tmpl, _err := template.ParseFiles(_rPkg.DependencyFiles...)
+ if _err != nil {
+ log.Printf("_ERROR\tnetwork:handlePage(\"/home\"):%s", _err)
+ http.Error(w, "_ERROR:network:handlePage(\"/home\"):template.ParseFiles", http.StatusInternalServerError)
+ return
+ }
+
+ var _templateDataContainer struct {
+ FileText string
+ }
+ _templateDataContainer.FileText = fmd.WritFMDToHTMLString(filepath.Join(mfs.Dirs["data"], "/fmd/home.fmd"))
+
+ // Render template.
+ if _err = _tmpl.ExecuteTemplate(w, "index.html", _templateDataContainer); _err != nil {
+ log.Printf("_ERROR\tnetwork:handlePageDefault(\"/\"):%s", _err)
+ http.Error(w, "_ERROR:network:handlePageDefault(\"/\"):template.ExecuteTemplate", http.StatusInternalServerError)
+ return
+ }
+
+ log.Printf("DONE\thandlePageDefault:%s", r.URL)
+}
+
+func handlePageSubject(w http.ResponseWriter, r *http.Request) {
+
+ // Collect HTML template files from directory.
+ _rPkg, _err := mfs.MakeDirectoryPkg(filepath.Join(mfs.Dirs["web"], r.URL.Path), mfs.SEARCH_DEPTH_ZERO, "*.html")
+ if _err != nil {
+ log.Printf("_ERROR\tnetwork:handlePage(\"/subject\"):%s", _err)
+ http.NotFound(w, r)
+ return
+ }
+
+ // Add 'global' file dependencies.
+ _rPkg.DependencyFiles = append(_rPkg.DependencyFiles, mfs.WebGlobalPkg.DependencyFiles...)
+
+ // Create template from package.
+ _tmpl, _err := template.ParseFiles(_rPkg.DependencyFiles...)
+ if _err != nil {
+ log.Printf("_ERROR\tnetwork:handlePage(\"/subject\"):%s", _err)
+ http.Error(w, "_ERROR:network:handlePage(\"/subject\"):template.ParseFiles", http.StatusInternalServerError)
+ return
+ }
+
+ _urlContent, _err := url.Parse(r.URL.String())
+ if _err != nil {
+ log.Printf("_ERROR\tnetwork:handlePage(\"/subject\"):%s", _err)
+ http.Error(w, "_ERROR:network:handlePage(\"/subject\"):url.Parse", http.StatusInternalServerError)
+ }
+
+ _urlQuerySubject, _err := url.ParseQuery(_urlContent.RawQuery)
+ if _err != nil {
+ log.Printf("_ERROR\tnetwork:handlePage(\"/subject\"):%s", _err)
+ http.Error(w, "_ERROR:network:handlePage(\"/subject\"):url.ParseQuery", http.StatusInternalServerError)
+ }
+
+ _fileName := _urlQuerySubject.Get("s")
+
+ var _templateDataContainer struct {
+ FileName string
+ FileText string
+ }
+ _templateDataContainer.FileName = _fileName
+ _templateDataContainer.FileText = fmd.WritFMDToHTMLString(filepath.Join(mfs.Dirs["data"], "/fmd/"+_fileName+".fmd"))
+
+ // Render template.
+ if _err = _tmpl.ExecuteTemplate(w, "index.html", _templateDataContainer); _err != nil {
+ log.Printf("_ERROR\tnetwork:handlePageDefault(\"/\"):%s", _err)
+ http.Error(w, "_ERROR:network:handlePageDefault(\"/\"):template.ExecuteTemplate", http.StatusInternalServerError)
+ return
+ }
+
+ log.Printf("DONE\thandlePageDefault:%s", r.URL)
+}
+
+func handlePageEdit(w http.ResponseWriter, r *http.Request) {
// Collect HTML template files from directory.
_rPkg, _err := mfs.MakeDirectoryPkg(filepath.Join(mfs.Dirs["web"], r.URL.String()), mfs.SEARCH_DEPTH_ZERO, "*.html")
@@ -51,14 +142,14 @@ func handlePageDefault(w http.ResponseWriter, r *http.Request) {
_tmpl, _err := template.ParseFiles(_rPkg.DependencyFiles...)
if _err != nil {
log.Printf("_ERROR\tnetwork:handlePageDefault(\"/\"):%s", _err)
- http.Error(w, "_ERROR:network:handlePageDefault(\"/\"):template.ParseFiles", 500)
+ http.Error(w, "_ERROR:network:handlePageDefault(\"/\"):template.ParseFiles", http.StatusInternalServerError)
return
}
// Render template.
if _err = _tmpl.ExecuteTemplate(w, "index.html", nil); _err != nil {
log.Printf("_ERROR\tnetwork:handlePageDefault(\"/\"):%s", _err)
- http.Error(w, "_ERROR:network:handlePageDefault(\"/\"):template.ExecuteTemplate", 500)
+ http.Error(w, "_ERROR:network:handlePageDefault(\"/\"):template.ExecuteTemplate", http.StatusInternalServerError)
return
}
diff --git a/web/global/header.tmpl.html b/web/global/header.tmpl.html
@@ -6,7 +6,6 @@
<div class="_button">MENU</div>
<div class="_content">
<a href="https://test.wtenison.com/home">HOME</a>
- <a href="https://test.wtenison.com/edit">EDIT</a>
</div>
</div>
@@ -15,7 +14,7 @@
<div id="right" class="collapsible_">
<div class="_button">SEARCH</div>
<div class="_content">
- <p>TEST SEARCH</p>
+ <p>COMING SOON</p>
</div>
</div>
diff --git a/web/global/styles.css b/web/global/styles.css
@@ -443,6 +443,8 @@
}
}
- #_body {}
+ #_body {
+ padding: var(--miki_padding);
+ }
}
}
\ No newline at end of file
diff --git a/web/home/index.html b/web/home/index.html
@@ -24,7 +24,7 @@
<section id="_body">
- {{.fileTextHTML}}
+ {{.FileText}}
</section>
diff --git a/web/subject/index.html b/web/subject/index.html
@@ -2,7 +2,7 @@
<html>
<head>
- <title>Miki/Home</title>
+ <title>Miki/Subject/{{.FileName}}</title>
<meta name="viewport" charset="utf-8" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="/web/global/styles.css" />
<script src="/web/global/script.js" defer></script>
@@ -10,7 +10,7 @@
<body>
- {{template "header" "Home"}}
+ {{template "header" .FileName}}
<section class="_content">
@@ -24,7 +24,7 @@
<section id="_body">
- {{.fileTextHTML}}
+ {{.FileText}}
</section>