summaryrefslogtreecommitdiff
path: root/db.go
diff options
context:
space:
mode:
authorJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-26 20:17:51 -0400
committerJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-26 20:17:51 -0400
commit888d48300fd2d098a676503a69ac96db94e61a04 (patch)
tree12aa1be24bcc501fa18f9ebeb4961cdb89f76dc6 /db.go
parentee64cdc2712a8e7f77c6af02385afd43a2a1e61b (diff)
feat: OS Index Pages
Diffstat (limited to 'db.go')
-rw-r--r--db.go69
1 files changed, 67 insertions, 2 deletions
diff --git a/db.go b/db.go
index 49e7656a..6248cd79 100644
--- a/db.go
+++ b/db.go
@@ -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)
+ }
+}
+