routing update, about, readme
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
fcb49aa38c
commit
b5d112fc74
6 changed files with 205 additions and 17 deletions
33
README.md
33
README.md
|
@ -3,3 +3,36 @@
|
|||
[![Build Status](https://drone.arns.lt/api/badges/zordsdavini/arns-lt-gemini/status.svg)](https://drone.arns.lt/zordsdavini/arns-lt-gemini)
|
||||
|
||||
My capsule in Gemini space. Built with zord-tree support
|
||||
|
||||
|
||||
## URL plan
|
||||
|
||||
* / - redirect to /sgs
|
||||
* /sgs or /en - index template by language. Links to other language, about, search, root categories, all tags, last 10 post, link to all posts
|
||||
* /[sgs|en]/a - about page
|
||||
* /[sgs|en]/s - search
|
||||
* /[sgs|en]/f/<category/path> - display files, subcategories, subtags. If exists index.gmi - display its text
|
||||
* /[sgs|en]/f/<category/path>/<id>/<name.gmi> - display category path as:
|
||||
```
|
||||
=> /sgs/f/c1 c1
|
||||
=> /sgs/f/c1/c2 └─ c2
|
||||
=> /sgs/f/c1/c2/c3 , └─ c3
|
||||
---
|
||||
> c1
|
||||
> └─ c2
|
||||
> , └─ c3
|
||||
```
|
||||
display tags, date, copyright
|
||||
|
||||
|
||||
## TODO
|
||||
|
||||
* routing, not found
|
||||
* migrate to gRPC
|
||||
* add category view
|
||||
* add tag view
|
||||
* add file view
|
||||
* add image or other file not `gmi` download
|
||||
* feed
|
||||
* about
|
||||
* citata from some file
|
||||
|
|
60
main.go
60
main.go
|
@ -7,6 +7,7 @@ import (
|
|||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"regexp"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
|
@ -40,9 +41,12 @@ func main() {
|
|||
|
||||
mux := &gemini.Mux{}
|
||||
mux.HandleFunc("/favicon.txt", processFavicon)
|
||||
// security
|
||||
// feed
|
||||
mux.HandleFunc("/", process)
|
||||
|
||||
server := &gemini.Server{
|
||||
Addr: ":" + port,
|
||||
Handler: mux,
|
||||
ReadTimeout: 30 * time.Second,
|
||||
WriteTimeout: 1 * time.Minute,
|
||||
|
@ -56,20 +60,46 @@ func main() {
|
|||
}
|
||||
|
||||
func processFavicon(ctx context.Context, w gemini.ResponseWriter, r *gemini.Request) {
|
||||
fmt.Fprintf(w, "\u263d")
|
||||
w.SetMediaType("text/plain")
|
||||
w.Write([]byte("\U0001F31B"))
|
||||
}
|
||||
|
||||
func process(ctx context.Context, w gemini.ResponseWriter, r *gemini.Request) {
|
||||
fmt.Println(ctx, r, r.URL, r.Host)
|
||||
log.Println("-> " + r.URL.Path)
|
||||
|
||||
renderIndex("en", w)
|
||||
lang := regexp.MustCompile(`^/(sgs|en)`).FindString(r.URL.Path)
|
||||
if lang != "" {
|
||||
lang = lang[1:]
|
||||
}
|
||||
|
||||
switch {
|
||||
case "/" == r.URL.Path:
|
||||
w.WriteHeader(gemini.StatusPermanentRedirect, "/sgs")
|
||||
case regexp.MustCompile(`^/(sgs|en)$`).MatchString(r.URL.Path):
|
||||
renderIndex(lang, w)
|
||||
case regexp.MustCompile(`^/(sgs|en)/a$`).MatchString(r.URL.Path):
|
||||
renderAbout(lang, w)
|
||||
default:
|
||||
w.WriteHeader(gemini.StatusNotFound, "Out of space")
|
||||
}
|
||||
}
|
||||
|
||||
func renderAbout(lang string, w gemini.ResponseWriter) {
|
||||
w.SetMediaType("text/gemini")
|
||||
content, err := os.ReadFile(fmt.Sprintf("templates/%s/about.gmi", lang))
|
||||
if err != nil {
|
||||
w.WriteHeader(gemini.StatusTemporaryFailure, "Internal server error")
|
||||
return
|
||||
}
|
||||
|
||||
_, err = w.Write(content)
|
||||
if err != nil {
|
||||
w.WriteHeader(gemini.StatusTemporaryFailure, "Internal server error")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func renderIndex(lang string, w gemini.ResponseWriter) {
|
||||
langPath := lang + "/"
|
||||
if lang == "sgs" {
|
||||
langPath = ""
|
||||
}
|
||||
w.SetMediaType("text/gemini")
|
||||
content, err := os.ReadFile(fmt.Sprintf("templates/%s/index.gmi", lang))
|
||||
if err != nil {
|
||||
|
@ -90,22 +120,28 @@ func renderIndex(lang string, w gemini.ResponseWriter) {
|
|||
|
||||
categories := ""
|
||||
for c, count := range tree.Categories {
|
||||
fmt.Println(c, count)
|
||||
categories = categories + fmt.Sprintf("=> /%s%s/%s %s (%d)\n", langPath, "tree/path", c, c, count)
|
||||
categories = categories + fmt.Sprintf("=> /%s/f/%s %s (%d)\n", lang, c, c, count)
|
||||
}
|
||||
page = strings.Replace(page, "{{categories}}", categories, 1)
|
||||
|
||||
tags := ""
|
||||
for t, count := range tree.Tags {
|
||||
tags = tags + fmt.Sprintf("=> /t/%s %s (%d)\n", t, t, count)
|
||||
tags = tags + fmt.Sprintf("=> /%s/t/%s %s (%d)\n", lang, t, t, count)
|
||||
}
|
||||
page = strings.Replace(page, "{{tags}}", tags, 1)
|
||||
|
||||
lastFiles := ""
|
||||
for _, f := range GetLastFiles(tree.Files) {
|
||||
lastFiles = lastFiles + fmt.Sprintf("=> /%s/%s %s (%s)\n", strings.Join(f.Category, "/"), f.Id, f.Description, f.Created)
|
||||
lastFiles = lastFiles + fmt.Sprintf(
|
||||
"=> /%s/f/%s/%s/%s %s (%s)\n",
|
||||
lang, strings.Join(f.Category, "/"), f.Id, strings.Replace(f.Name, ".md", ".gmi", 1), f.Description, f.Created,
|
||||
)
|
||||
}
|
||||
page = strings.Replace(page, "{{last_posts}}", lastFiles, 1)
|
||||
|
||||
fmt.Fprintf(w, page)
|
||||
_, err = w.Write([]byte(page))
|
||||
if err != nil {
|
||||
w.WriteHeader(gemini.StatusTemporaryFailure, "Internal server error")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
|
59
templates/en/about.gmi
Normal file
59
templates/en/about.gmi
Normal file
|
@ -0,0 +1,59 @@
|
|||
# Arna alkierios :: About
|
||||
|
||||
I am Arns Udovič, also you can find me by Zordsdavini.
|
||||
|
||||
Kraujė žemaitėška, bet laikaus Vėlniou. Pagrindėnės mėslės sokas aple žemaitiu kalbuos keravuojėma, anuos skleidėma ė pritaikīmus kompioterems. Daug darbū dėrbo, ka žėmaitē galietom rašītė bėndrinie rašībuo.
|
||||
|
||||
Karto eso puogramoutuos ė baisē miegsto Linux'us.
|
||||
|
||||
Tāp pat eso gomtuos mīlietuos ė mėslėjo, ka Žemė ī gīva.
|
||||
|
||||
### Contact me
|
||||
|
||||
=> mailto:zordsdavini@arns.lt E-mail
|
||||
=> https://mastodon.social/@zordsdavini @zordsdavini@mastodon.social
|
||||
|
||||
## About capsule
|
||||
|
||||
Alkierios korts, ka būtom vėita, kor galietiuo talpintė sava mėslės, pastebiejėmus a kažkon, kon nanuorietiuo pamėrštė.
|
||||
|
||||
Būdams pruogramoutuojo nuoriejau pramuoktė naujū dalīku, ta tudie pasirinkau, ka mona alkierios turietom turietė ė gemini versėjė, karto līgegretē sokūriau ėr īprasta http versėjė.
|
||||
|
||||
### Aple teknuoluogėjė
|
||||
|
||||
Tekstus rašau i paprastiausius failiokus ėr anus talpėno sava „cloud'ė“ vagol somėslīta stroktūra. Tumet sokas tū failu makliavuonės servėsos, katras parašīts ont Go pruogramavėma kalbuos ėr ont mona parašītas bėbliuotekas `zord-tree`.
|
||||
|
||||
Jau ėš makliavuonės servėsa pajemo i gemini servėsa, katras parašīts ėrgė so Go, arba i http servėsa (backend's ont Go REST, frontend's ont Vue.js). Ruodā nauduojo gRPC pruotuokuola.
|
||||
|
||||
=> https://g.arns.lt/zordsdavini/zord-tree zord-tree bėbliuoteka sokortė miedi ėš failu
|
||||
=> https://g.arns.lt/zordsdavini/arns-lt-tree-push-service servėsos ont zord-tree somakliavuotė failus ėr anus padoutė tuoliau
|
||||
=> https://g.arns.lt/zordsdavini/arns-lt-gemini gemini servėsos
|
||||
=> https://arns.lt Arna alkierios HTTP versėjuo
|
||||
|
||||
## Other projects
|
||||
|
||||
### Samogitian
|
||||
|
||||
Eso Žemaitiu koltūras draugėjės narīs. Ka „legalėzoutiuo“ sava darba žemaitiu kalbā, ikūriau Žemaitiu kalbuos instėtota. Instėtota vardo dėrėno vairius standartus IT ertie. Siekmingiausė bėngtė pruojektā:
|
||||
=> https://bat-smg.wikipedia.org/wiki/P%C4%97rms_poslapis Vikipedėjė žemaitėška
|
||||
=> https://iso639-3.sil.org/code/sgs ISO 639 kuods žemaitiu kalbā „sgs“
|
||||
|
||||
Kėtas nūruodas darbū so žemaitēs:
|
||||
=> https://žemaitėjė.lt Žemaitiu kalbuos instėtota alkierios
|
||||
=> https://ruoda.lt laikraštis „Ruoda“
|
||||
=> https://zkz.lt žemaitiu kalbuos žuodīns
|
||||
|
||||
### IT
|
||||
|
||||
=> https://kplaner.arns.lt Planoutuos parašīts ont python'a karto so sava patė
|
||||
=> https://odysee.com/@qtile-tv:0
|
||||
|
||||
### future plans
|
||||
|
||||
=> https://karmagiai.lt „Kariai ir magai“ internetėnė versėjė (arba gižielis skaitliavėmams)
|
||||
=> https://vytines.lt vītėniu joustu vījėms ruoboto
|
||||
=> https://sieps.lt helper app for inventorization
|
||||
=> https://preferansas.lt internetėnė preferansa lietovėška versėjė
|
||||
|
||||
=> /en ← back
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
# Arns' capsule
|
||||
# Arna alkierios
|
||||
|
||||
Welcome to my capsule in Gemini space.
|
||||
|
||||
|
@ -24,3 +24,4 @@ Main themes are spreaded by categories. Each file may have tags what can filter
|
|||
|
||||
{{last_posts}}
|
||||
|
||||
=> /f all texts
|
||||
|
|
59
templates/sgs/about.gmi
Normal file
59
templates/sgs/about.gmi
Normal file
|
@ -0,0 +1,59 @@
|
|||
# Arna alkierios :: Aple
|
||||
|
||||
Eso Udovič Arns, dā vadėnamo Zordsdavini arba Ousėnio.
|
||||
|
||||
Kraujė žemaitėška, bet laikaus Vėlniou. Pagrindėnės mėslės sokas aple žemaitiu kalbuos keravuojėma, anuos skleidėma ė pritaikīmus kompioterems. Daug darbū dėrbo, ka žėmaitē galietom rašītė bėndrinie rašībuo.
|
||||
|
||||
Karto eso puogramoutuos ė baisē miegsto Linux'us.
|
||||
|
||||
Tāp pat eso gomtuos mīlietuos ė mėslėjo, ka Žemė ī gīva.
|
||||
|
||||
### parašīk mon
|
||||
|
||||
=> mailto:zordsdavini@arns.lt pašta skrabėkė
|
||||
=> https://mastodon.social/@zordsdavini @zordsdavini@mastodon.social
|
||||
|
||||
## Aple alkierio
|
||||
|
||||
Alkierios korts, ka būtom vėita, kor galietiuo talpintė sava mėslės, pastebiejėmus a kažkon, kon nanuorietiuo pamėrštė.
|
||||
|
||||
Būdams pruogramoutuojo nuoriejau pramuoktė naujū dalīku, ta tudie pasirinkau, ka mona alkierios turietom turietė ė gemini versėjė, karto līgegretē sokūriau ėr īprasta http versėjė.
|
||||
|
||||
### Aple teknuoluogėjė
|
||||
|
||||
Tekstus rašau i paprastiausius failiokus ėr anus talpėno sava „cloud'ė“ vagol somėslīta stroktūra. Tumet sokas tū failu makliavuonės servėsos, katras parašīts ont Go pruogramavėma kalbuos ėr ont mona parašītas bėbliuotekas `zord-tree`.
|
||||
|
||||
Jau ėš makliavuonės servėsa pajemo i gemini servėsa, katras parašīts ėrgė so Go, arba i http servėsa (backend's ont Go REST, frontend's ont Vue.js). Ruodā nauduojo gRPC pruotuokuola.
|
||||
|
||||
=> https://g.arns.lt/zordsdavini/zord-tree zord-tree bėbliuoteka sokortė miedi ėš failu
|
||||
=> https://g.arns.lt/zordsdavini/arns-lt-tree-push-service servėsos ont zord-tree somakliavuotė failus ėr anus padoutė tuoliau
|
||||
=> https://g.arns.lt/zordsdavini/arns-lt-gemini gemini servėsos
|
||||
=> https://arns.lt Arna alkierios HTTP versėjuo
|
||||
|
||||
## Kėtė pruojektā
|
||||
|
||||
### Žemaitėškė
|
||||
|
||||
Eso Žemaitiu koltūras draugėjės narīs. Ka „legalėzoutiuo“ sava darba žemaitiu kalbā, ikūriau Žemaitiu kalbuos instėtota. Instėtota vardo dėrėno vairius standartus IT ertie. Siekmingiausė bėngtė pruojektā:
|
||||
=> https://bat-smg.wikipedia.org/wiki/P%C4%97rms_poslapis Vikipedėjė žemaitėška
|
||||
=> https://iso639-3.sil.org/code/sgs ISO 639 kuods žemaitiu kalbā „sgs“
|
||||
|
||||
Kėtas nūruodas darbū so žemaitēs:
|
||||
=> https://žemaitėjė.lt Žemaitiu kalbuos instėtota alkierios
|
||||
=> https://ruoda.lt laikraštis „Ruoda“
|
||||
=> https://zkz.lt žemaitiu kalbuos žuodīns
|
||||
|
||||
### IT
|
||||
|
||||
=> https://kplaner.arns.lt Planoutuos parašīts ont python'a karto so sava patė
|
||||
=> https://odysee.com/@qtile-tv:0
|
||||
|
||||
### planūs
|
||||
|
||||
=> https://karmagiai.lt „Kariai ir magai“ internetėnė versėjė (arba gižielis skaitliavėmams)
|
||||
=> https://vytines.lt vītėniu joustu vījėms ruoboto
|
||||
=> https://sieps.lt gižielis inventuorėzacėjē
|
||||
=> https://preferansas.lt internetėnė preferansa lietovėška versėjė
|
||||
|
||||
=> /sgs ← grīžtė
|
||||
|
|
@ -9,8 +9,8 @@ Sveikė atvīkėn i mona kapsolė Gemini ertie.
|
|||
|
||||
Pagrindėnės temas paskėrstītas par kateguorėjės. Kuožnos fails gal turietė žīmas, katruos gal atsėjuotė miedi.
|
||||
|
||||
=> /s ėiškuok
|
||||
=> /a aple
|
||||
=> /sgs/s ėiškuok
|
||||
=> /sgs/a aple
|
||||
|
||||
### Kateguorėjės
|
||||
|
||||
|
@ -24,4 +24,4 @@ Pagrindėnės temas paskėrstītas par kateguorėjės. Kuožnos fails gal turie
|
|||
|
||||
{{last_posts}}
|
||||
|
||||
=> /x vėsė straipsnē
|
||||
=> /sgs/f vėsė straipsnē
|
||||
|
|
Loading…
Reference in a new issue