From 68a8ddd5c6dfaf2ce375dc83e1d8cf4be575ac85 Mon Sep 17 00:00:00 2001 From: darius Date: Sat, 18 May 2024 15:22:35 +0200 Subject: [PATCH] project list added --- go.mod | 1 + go.sum | 2 ++ go.work.sum | 32 ++++++++++++++++++++++++++ web/assets/json/projects.json | 22 ++++++++++++++++++ web/components/navbar.go | 24 +++++++++----------- web/components/projectList.go | 36 +++++++++++++++++------------- web/handlers/projectPageHandler.go | 6 ++--- web/services/projectsJson.go | 28 +++++++++++++++++++++++ web/types/projects.go | 2 +- 9 files changed, 119 insertions(+), 34 deletions(-) create mode 100644 web/assets/json/projects.json create mode 100644 web/services/projectsJson.go diff --git a/go.mod b/go.mod index 28023e3..cf1c9db 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.22.2 require ( entgo.io/ent v0.13.1 + github.com/delaneyj/gomponents-iconify v0.0.20231025 github.com/joho/godotenv v1.5.1 github.com/lib/pq v1.10.9 github.com/maragudk/gomponents v0.20.2 diff --git a/go.sum b/go.sum index 3c69625..472ccd1 100644 --- a/go.sum +++ b/go.sum @@ -10,6 +10,8 @@ github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/delaneyj/gomponents-iconify v0.0.20231025 h1:GJU/KtZGoQ7CwIumei/fNITpMk0f0p7yYz4q/AVllss= +github.com/delaneyj/gomponents-iconify v0.0.20231025/go.mod h1:ZjIP4npWKmVuJbvSjBTpzSl1QMimELl77gP/leg1bnI= github.com/go-openapi/inflect v0.19.0 h1:9jCH9scKIbHeV9m12SmPilScz6krDxKRasNNSNPXu/4= github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12fJykb83CRBH4= github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68= diff --git a/go.work.sum b/go.work.sum index 693615c..952ec8d 100644 --- a/go.work.sum +++ b/go.work.sum @@ -2,8 +2,16 @@ github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3 h1:ZSTrOEhi github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= +github.com/delaneyj/toolbelt v0.0.0-20230611200251-2df076bd1579 h1:lj+zHpYT5Xv69ZsEB6eTm1nZ/5S0NmwPip5zG8kO234= +github.com/delaneyj/toolbelt v0.0.0-20230611200251-2df076bd1579/go.mod h1:XPp3P/k7PF1+gU3tFzemCcoIlJl45pRP2uIQ96pxBDQ= +github.com/divan/num2words v0.0.0-20170904212200-57dba452f942 h1:fJ8/Lid8fF4i7Bwl7vWKvG2KeZzr3yU4qG6h/DPdXLU= +github.com/divan/num2words v0.0.0-20170904212200-57dba452f942/go.mod h1:K88GQWK1aAiPMo9q2LZwyKBfEGnge7kmVVTUcZ61HSc= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/go-chi/chi/v5 v5.0.12 h1:9euLV5sTrTNTRUU9POmDUvfxyj6LAABLUcEWO+JJb4s= github.com/go-chi/chi/v5 v5.0.12/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= @@ -11,12 +19,16 @@ github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWS github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/hashicorp/hcl/v2 v2.13.0/go.mod h1:e4z5nxYlWNPdDSNYX+ph14EvWYMFm3eP0zIUqPc2jr0= +github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -27,12 +39,18 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/smartystreets/goconvey v1.8.0 h1:Oi49ha/2MURE0WexF052Z0m+BNSGirfjg5RL+JXWq3w= +github.com/smartystreets/goconvey v1.8.0/go.mod h1:EdX8jtrTIj26jmjCOVNMVSIYAtgexqXKHOXW2Dx9JLg= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= @@ -57,4 +75,18 @@ golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +k8s.io/apimachinery v0.27.2 h1:vBjGaKKieaIreI+oQwELalVG4d8f3YAMNpWLzDXkxeg= +k8s.io/apimachinery v0.27.2/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= +modernc.org/libc v1.22.3 h1:D/g6O5ftAfavceqlLOFwaZuA5KYafKwmr30A6iSqoyY= +modernc.org/libc v1.22.3/go.mod h1:MQrloYP209xa2zHome2a8HLiLm6k0UT8CoHpV74tOFw= +modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/sqlite v1.21.1 h1:GyDFqNnESLOhwwDRaHGdp2jKLDzpyT/rNLglX3ZkMSU= +modernc.org/sqlite v1.21.1/go.mod h1:XwQ0wZPIh1iKb5mkvCJ3szzbhk+tykC8ZWqTRTgYRwI= +zombiezen.com/go/sqlite v0.13.0 h1:iEeyVqcm3fk5PCA8OQBhBxPnqrP4yYuVJBF+XZpSnOE= +zombiezen.com/go/sqlite v0.13.0/go.mod h1:Ht/5Rg3Ae2hoyh1I7gbWtWAl89CNocfqeb/aAMTkJr4= diff --git a/web/assets/json/projects.json b/web/assets/json/projects.json new file mode 100644 index 0000000..4c4c113 --- /dev/null +++ b/web/assets/json/projects.json @@ -0,0 +1,22 @@ +{ + "projects": [ + { + "Name": "Portfolio", + "Url": "https://github.com/DariusKlein/portfolio", + "Description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam gravida, ante scelerisque ultrices condimentum, mi lacus ornare justo, ac elementum tellus leo sed erat. Sed euismod turpis eu viverra lacinia. Maecenas laoreet diam sed urna porttitor posuere ac eu mauris. Vestibulum blandit magna enim, sed ultricies sapien rutrum convallis. Nullam id posuere enim. Maecenas sed aliquam lorem. Praesent vitae ligula et nisl venenatis finibus. Vivamus auctor aliquet libero, at ornare lorem. Maecenas odio augue, tincidunt ut quam in, vestibulum malesuada nulla. Integer fringilla orci et ipsum commodo, id commodo metus bibendum. Proin volutpat lectus turpis, ut finibus eros blandit eu. Quisque sed libero ac ligula dapibus dignissim. Quisque vitae arcu a orci suscipit hendrerit. Duis ac tellus vel mi blandit consequat eget non ligula. Aliquam quis luctus nisl, eu mattis nulla. Sed sem turpis, malesuada id ex non, placerat aliquet tellus.", + "image_url": "https://bulma.io/assets/images/placeholders/96x96.png" + }, + { + "Name": "Discord bot", + "Url": "https://github.com/DariusKlein/kleincordBot", + "Description": "Maecenas dictum eu neque sit amet ullamcorper. Maecenas venenatis porttitor sapien, et dapibus justo. Maecenas facilisis suscipit erat. Nulla placerat nibh tortor, ac eleifend enim mollis et. In fermentum lacus malesuada convallis sollicitudin. Nunc accumsan fermentum venenatis. Cras vel elit eu nibh euismod scelerisque. Sed efficitur turpis mi, vel viverra arcu accumsan id. Nunc venenatis ex et arcu posuere mollis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam tortor nisl, vestibulum vel feugiat a, egestas ut massa. Donec sagittis purus eu ornare bibendum. Morbi interdum arcu et aliquam pulvinar. Phasellus et augue feugiat, gravida felis ut, consectetur velit.", + "image_url": "https://bulma.io/assets/images/placeholders/96x96.png" + }, + { + "Name": "Wazuh notifier", + "Url": "https://github.com/RudiKlein/wazuh-notifier", + "Description": "Proin sollicitudin hendrerit dolor ut venenatis. Etiam quis elit turpis. Maecenas imperdiet sapien a lorem finibus feugiat. Aenean quis faucibus quam. Donec eu libero ut lectus tempus tempus. Maecenas et imperdiet quam. Donec ligula lacus, hendrerit facilisis ornare nec, varius ac dolor. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nam efficitur, nunc eget mollis tristique, eros mi varius mauris, quis cursus nisi justo ac nisl. Nullam eget laoreet dui. Phasellus placerat, nibh a euismod maximus, turpis odio bibendum mi, sed imperdiet justo lacus volutpat augue. Mauris rutrum orci at libero interdum gravida. In eget commodo elit. Mauris nec felis augue. Aenean nec orci turpis.", + "image_url": "https://bulma.io/assets/images/placeholders/96x96.png" + } + ] +} \ No newline at end of file diff --git a/web/components/navbar.go b/web/components/navbar.go index 46976e7..885cd4b 100644 --- a/web/components/navbar.go +++ b/web/components/navbar.go @@ -12,24 +12,24 @@ func Navbar() g.Node { e.AriaLabel("main navigation"), b.NavbarBrand( b.NavbarAHref( - "https://bulma.io", + "/", e.ImgSrc( - "https://bulma.io/assets/images/bulma-logo.png", - e.Width("112"), e.Height("28"), + "/assets/images/favicon.ico", ), ), ), b.NavbarStart( - b.NavbarAHref("#", "Home"), - b.NavbarAHref("#", "Documentation"), + b.NavbarAHref("/", "Home"), + b.NavbarAHref("/about", "Wie ben ik"), + b.NavbarAHref("/projects", "projecten"), b.NavbarDropdown( - "More", + "placeholder", b.Hoverable, - b.NavbarAHref("#", "About"), - b.NavbarAHref("#", "Jobs"), - b.NavbarAHref("#", "Contact"), + b.NavbarAHref("#1", "item 1"), + b.NavbarAHref("#2", "item 2"), + b.NavbarAHref("#3", "item 3"), b.NavbarDivider(), - b.NavbarAHref("#", "Report an issue"), + b.NavbarAHref("#4", "divided item"), ), ), b.NavbarEnd( @@ -37,10 +37,6 @@ func Navbar() g.Node { b.Buttons( b.ButtonA( b.Primary, - e.Strong("Sign up"), - ), - b.ButtonA( - b.Light, "Log in", ), ), diff --git a/web/components/projectList.go b/web/components/projectList.go index 9e06fe3..74c5b3c 100644 --- a/web/components/projectList.go +++ b/web/components/projectList.go @@ -1,30 +1,36 @@ package components import ( + "github.com/delaneyj/gomponents-iconify/iconify/mdi" g "github.com/maragudk/gomponents" - c "github.com/maragudk/gomponents/components" . "github.com/maragudk/gomponents/html" + b "github.com/willoma/bulma-gomponents" + e "github.com/willoma/gomplements" "portfolio/web/types" ) func ProjectList(projects []types.Project) g.Node { - return Nav(Class("bg-gray-700 mb-4"), - container( - Div(Class("flex items-center space-x-4 h-16"), - // We can Map custom slices to Nodes - g.Group(g.Map(projects, func(p types.Project) g.Node { - return Project(p) - })), - ), - ), + return Div(Class("py-2 px-2"), g.Group(g.Map(projects, func(p types.Project) g.Node { + return Project(p) + })), ) } func Project(project types.Project) g.Node { - return A(g.Text(project.Name), - // Apply CSS classes conditionally - c.Classes{ - "px-3 py-2 rounded-md text-sm font-medium focus:outline-none focus:text-white focus:bg-gray-700": true, - }, + return b.Card( + b.Media( + b.MediaLeft( + b.ImageImg( + project.ImageUrl, + e.Alt("project image"), + b.ImgSq64, + ), + ), + b.Title(4, project.Name), + b.Subtitle(6, A(Class("flex"), Href(project.Url), mdi.Github(), g.Text("checkout repo"))), + ), + b.Content( + project.Description, + ), ) } diff --git a/web/handlers/projectPageHandler.go b/web/handlers/projectPageHandler.go index 62db6b5..819636d 100644 --- a/web/handlers/projectPageHandler.go +++ b/web/handlers/projectPageHandler.go @@ -4,7 +4,7 @@ import ( g "github.com/maragudk/gomponents" "net/http" "portfolio/web/components" - "portfolio/web/types" + "portfolio/web/services" ) func ProjectPageHandler(w http.ResponseWriter, r *http.Request) { @@ -20,8 +20,6 @@ func createProjectBody(w http.ResponseWriter, r *http.Request) []g.Node { return []g.Node{ components.Navbar(), - components.ProjectList([]types.Project{ - {Name: "test", Url: "test", Description: "test", ImageUrl: "test"}, - }), + components.ProjectList(services.ReadProjectsJson()), } } diff --git a/web/services/projectsJson.go b/web/services/projectsJson.go new file mode 100644 index 0000000..94ea3c7 --- /dev/null +++ b/web/services/projectsJson.go @@ -0,0 +1,28 @@ +package services + +import ( + "encoding/json" + "fmt" + "io" + "os" + "portfolio/web/types" +) + +func ReadProjectsJson() []types.Project { + // Open our jsonFile + jsonFile, err := os.Open("web/assets/json/projects.json") + // if we os.Open returns an error then handle it + if err != nil { + fmt.Println(err) + } + + defer jsonFile.Close() + + byteValue, _ := io.ReadAll(jsonFile) + + var projects types.Projects + + json.Unmarshal(byteValue, &projects) + + return projects.Projects +} diff --git a/web/types/projects.go b/web/types/projects.go index 508e5e6..55092f7 100644 --- a/web/types/projects.go +++ b/web/types/projects.go @@ -1,7 +1,7 @@ package types type Projects struct { - projects []Project + Projects []Project `json:"projects"` } type Project struct {