diff options
| author | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-26 20:17:51 -0400 |
|---|---|---|
| committer | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-26 20:17:51 -0400 |
| commit | 888d48300fd2d098a676503a69ac96db94e61a04 (patch) | |
| tree | 12aa1be24bcc501fa18f9ebeb4961cdb89f76dc6 /db.go | |
| parent | ee64cdc2712a8e7f77c6af02385afd43a2a1e61b (diff) | |
feat: OS Index Pages
Diffstat (limited to 'db.go')
| -rw-r--r-- | db.go | 69 |
1 files changed, 67 insertions, 2 deletions
@@ -3,9 +3,11 @@ package main import ( "database/sql" "fmt" + "html/template" "log" _ "modernc.org/sqlite" "net/http" + "strings" "os" ) @@ -20,8 +22,12 @@ type Entry struct { path string } -func (d *Database) GetOS(w http.ResponseWriter, r *http.Request) { - rows, err := d.DB.Query("SELECT DISTINCT os FROM manpages;") +func (d *Database) GetOS() (*sql.Rows, error) { + return d.DB.Query("SELECT DISTINCT os FROM manpages;") +} + +func (d *Database) GetOptionOS(w http.ResponseWriter, r *http.Request) { + rows, err := d.GetOS() if err != nil { log.Println(err) ErrorPage(w, 500) @@ -90,3 +96,62 @@ func (d *Database) Search(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "<center><h1>No results found for %s %s(%s)</h1></center>", osName, name, section) } } + +func (d *Database) Index(w http.ResponseWriter, r *http.Request) { + url := r.URL.String() + + osName, _ := strings.CutPrefix(url, "/") + + rows, err := d.DB.Query("SELECT * FROM manpages WHERE os == ? ORDER BY section, name", osName) + if err != nil { + log.Println(err) + ErrorPage(w, 500) + return + } + + links := []string{ "<h1 style=\"text-transform: uppercase;\">" + osName + "</h1><ui>" } + for rows.Next() { + var entry Entry + + if err := rows.Scan(&entry.os, &entry.name, &entry.section, &entry.path); err != nil { + log.Println(err) + ErrorPage(w, 500) + return + } + + eUrl, _ := strings.CutPrefix(entry.path, "static") + link := fmt.Sprintf("<li><a href=\"%s\">%s(%d)</a></li>", eUrl, entry.name, entry.section) + links = append(links, link) + } + + links = append(links, "</ui>") + + if len(links) > 2 { + t := template.Must(template.ParseFiles("templates/template.html")) + + t.Execute(w, template.HTML(strings.Join(links, ""))) + } +} + +func (d *Database) IndexLinks(w http.ResponseWriter, r *http.Request) { + rows, err := d.GetOS() + if err != nil { + log.Println(err) + ErrorPage(w, 500) + return + } + + fmt.Fprintf(w, "<li class=\"topLink\"><a href=\"/\">home</a></li>") + for rows.Next() { + var osName string + + if err := rows.Scan(&osName); err != nil { + log.Println(err) + ErrorPage(w, 500) + return + } + + fmt.Fprintf(w, "<li class=\"topLink\"><a href=\"/%s\">%s</a></li>", osName, osName) + } +} + |
