finished work markdown parser
This commit is contained in:
parent
077ad60587
commit
ce5f5b6f6c
|
@ -17,7 +17,7 @@ func main() {
|
|||
|
||||
var projects []component.CarouselEntry
|
||||
h := handler.Homehandler{Index: index, Entrys: &projects}
|
||||
app.GET("/", h.HandleUserShow)
|
||||
app.GET("/", h.HandleShowHome)
|
||||
app.POST("/carousel/next", handler.HtmxCarouselHandler{Index: &index,Direction: 1,Entrys: &projects}.HandlerCarouselUpdate)
|
||||
app.POST("/carousel/previous", handler.HtmxCarouselHandler{Index: &index, Direction: -1, Entrys: &projects}.HandlerCarouselUpdate)
|
||||
app.Static("/static", "assets")
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
package handler
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/labstack/echo/v4"
|
||||
"github.com/lorenzhohermuth/portfolio/internal/mdparser"
|
||||
"github.com/lorenzhohermuth/portfolio/view/component"
|
||||
|
@ -14,15 +12,8 @@ type Homehandler struct {
|
|||
Entrys *[]component.CarouselEntry
|
||||
}
|
||||
|
||||
func(h Homehandler) HandleUserShow(ctx echo.Context) error {
|
||||
events := []component.Event{
|
||||
{time.Now(), time.Now(), "Title 1"},
|
||||
{time.Now(), time.Now(), "Title 2"},
|
||||
{time.Now(), time.Now(), "Title 3"},
|
||||
{time.Now(), time.Now(), "Title 4"},
|
||||
{time.Now(), time.Now(), "Title 5"},
|
||||
}
|
||||
|
||||
func(h Homehandler) HandleShowHome(ctx echo.Context) error {
|
||||
events := mdparser.GetWork()
|
||||
*h.Entrys = mdparser.GetProjects()
|
||||
|
||||
return render(ctx, page.ShowHome(*h.Entrys, h.Index, events))
|
||||
|
|
|
@ -1,76 +0,0 @@
|
|||
package mdparser
|
||||
|
||||
import (
|
||||
"context"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"github.com/lorenzhohermuth/portfolio/pkg/github"
|
||||
"github.com/lorenzhohermuth/portfolio/view/component"
|
||||
)
|
||||
|
||||
const pathProjects string = "projects.md"
|
||||
const pathWork string = "work.md"
|
||||
|
||||
func GetProjects() []component.CarouselEntry {
|
||||
projectsFile, ghErr := github.FetchGHFile(context.Background(), "/interactive/projects.md")
|
||||
if ghErr != nil {
|
||||
panic(ghErr)
|
||||
}
|
||||
components := make([]component.CarouselEntry, 0)
|
||||
|
||||
lines := strings.Split(projectsFile, "\n")
|
||||
tmpTitle := ""
|
||||
tmpText := ""
|
||||
tmpImg := ""
|
||||
for _, l := range lines {
|
||||
isFilled, elm := parseMd(l, &tmpTitle, &tmpText, &tmpImg)
|
||||
if isFilled {
|
||||
components = append(components, elm)
|
||||
}
|
||||
}
|
||||
|
||||
return components
|
||||
}
|
||||
|
||||
func getChar(text string, pos int) string {
|
||||
text = strings.TrimSpace(text)
|
||||
if text == "" {
|
||||
return ""
|
||||
}
|
||||
return string([]rune(text)[pos])
|
||||
}
|
||||
|
||||
func parseMd(line string, title *string, text *string, img *string) (bool, component.CarouselEntry){
|
||||
char := getChar(line, 0)
|
||||
|
||||
if char == "" {
|
||||
elm := component.CarouselEntry{
|
||||
ImgPath: *img,
|
||||
Title: *title,
|
||||
Text: *text,
|
||||
}
|
||||
*img = ""
|
||||
*title = ""
|
||||
*text = ""
|
||||
return true, elm
|
||||
|
||||
} else if char == "#" {
|
||||
*title = strings.TrimSpace(line[1:])
|
||||
|
||||
} else if char == "!" {
|
||||
rgx := regexp.MustCompile(`\((.*?)\)`)
|
||||
mdImage := rgx.FindStringSubmatch(line)[1]
|
||||
mdImage = strings.TrimSpace(mdImage)
|
||||
|
||||
if mdImage[:4] != "http" {
|
||||
mdImage = strings.Replace(mdImage, "assets", "static", 1)
|
||||
}
|
||||
|
||||
*img = mdImage
|
||||
|
||||
} else {
|
||||
*text += line
|
||||
}
|
||||
return false, component.CarouselEntry{}
|
||||
}
|
|
@ -1,10 +1,7 @@
|
|||
package component
|
||||
|
||||
import "time"
|
||||
|
||||
type Event struct {
|
||||
DateStart time.Time
|
||||
DateEnd time.Time
|
||||
TimePeriode string
|
||||
Title string
|
||||
}
|
||||
|
||||
|
@ -15,7 +12,7 @@ templ Timeline(evts []Event) {
|
|||
<div class="h-1 w-3 m-0 mr-4 rounded-full bg-white"/>
|
||||
<div>
|
||||
<p class="m-0 mb-1">{v.Title}</p>
|
||||
<p class="m-0 text-sm">{v.DateEnd.Format("02 January 2006")} - {v.DateEnd.Format("02 January 2006")}</p>
|
||||
<p class="m-0 text-sm">{v.TimePeriode}</p>
|
||||
</div>
|
||||
</div>
|
||||
if i + 1 < len(evts) {
|
||||
|
|
|
@ -10,12 +10,9 @@ import "context"
|
|||
import "io"
|
||||
import "bytes"
|
||||
|
||||
import "time"
|
||||
|
||||
type Event struct {
|
||||
DateStart time.Time
|
||||
DateEnd time.Time
|
||||
Title string
|
||||
TimePeriode string
|
||||
Title string
|
||||
}
|
||||
|
||||
func Timeline(evts []Event) templ.Component {
|
||||
|
@ -43,7 +40,7 @@ func Timeline(evts []Event) templ.Component {
|
|||
var templ_7745c5c3_Var2 string
|
||||
templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(v.Title)
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/component/Timeline.templ`, Line: 17, Col: 33}
|
||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/component/Timeline.templ`, Line: 14, Col: 33}
|
||||
}
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
|
||||
if templ_7745c5c3_Err != nil {
|
||||
|
@ -54,27 +51,14 @@ func Timeline(evts []Event) templ.Component {
|
|||
return templ_7745c5c3_Err
|
||||
}
|
||||
var templ_7745c5c3_Var3 string
|
||||
templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(v.DateEnd.Format("02 January 2006"))
|
||||
templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(v.TimePeriode)
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/component/Timeline.templ`, Line: 18, Col: 64}
|
||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/component/Timeline.templ`, Line: 15, Col: 42}
|
||||
}
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" - ")
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
var templ_7745c5c3_Var4 string
|
||||
templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(v.DateEnd.Format("02 January 2006"))
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/component/Timeline.templ`, Line: 18, Col: 104}
|
||||
}
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</p></div></div>")
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
|
|
Loading…
Reference in New Issue