routing update, about, readme
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Arnas Udovicius 2022-08-19 11:17:27 +03:00
parent fcb49aa38c
commit b5d112fc74
6 changed files with 205 additions and 17 deletions

View file

@ -2,4 +2,37 @@
[![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
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
View file

@ -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
View 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

View file

@ -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
View 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ė

View file

@ -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ē