This commit is contained in:
maddalax 2024-10-26 09:32:26 -05:00
parent 613685aebb
commit 7b10b20b9e
6 changed files with 31 additions and 7 deletions

View file

@ -2,9 +2,15 @@ module hackernews
go 1.23.0
require github.com/maddalax/htmgo/framework v1.0.2-0.20241026030703-8e048cbddc36
require (
github.com/go-chi/chi/v5 v5.1.0
github.com/maddalax/htmgo/framework v1.0.2-0.20241026030703-8e048cbddc36
github.com/microcosm-cc/bluemonday v1.0.27
)
require (
github.com/go-chi/chi/v5 v5.1.0 // indirect
github.com/aymerick/douceur v0.2.0 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/gorilla/css v1.0.1 // indirect
golang.org/x/net v0.29.0 // indirect
)

View file

@ -1,11 +1,17 @@
github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
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/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw=
github.com/go-chi/chi/v5 v5.1.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0=
github.com/maddalax/htmgo/framework v1.0.2-0.20241026030703-8e048cbddc36 h1:cwXqeTQrGAxMhGhpMJ3/sUGRvdDm3HWPNO5ayYzoRcU=
github.com/maddalax/htmgo/framework v1.0.2-0.20241026030703-8e048cbddc36/go.mod h1:NGGzWVXWksrQJ9kV9SGa/A1F1Bjsgc08cN7ZVb98RqY=
github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk=
github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=

View file

@ -0,0 +1,9 @@
package sanitize
import "github.com/microcosm-cc/bluemonday"
var p = bluemonday.UGCPolicy()
func Sanitize(text string) string {
return p.Sanitize(text)
}

View file

@ -5,6 +5,7 @@ import (
"github.com/maddalax/htmgo/framework/h"
"hackernews/internal/batch"
"hackernews/internal/news"
"hackernews/internal/sanitize"
"hackernews/internal/timeformat"
"strings"
"time"
@ -75,7 +76,7 @@ func Comment(item news.Comment, nesting int) *h.Element {
h.Class("flex gap-1 items-center"),
h.Div(
h.Class("font-bold text-rose-500"),
h.Text(item.By),
h.UnsafeRaw(sanitize.Sanitize(item.By)),
),
h.Div(
h.Class("text-sm text-gray-600"),
@ -85,7 +86,7 @@ func Comment(item news.Comment, nesting int) *h.Element {
),
h.Div(
h.Class("text-sm text-gray-600"),
h.Text(strings.TrimSpace(item.Text)),
h.UnsafeRaw(sanitize.Sanitize(strings.TrimSpace(item.Text))),
),
),
h.If(

View file

@ -6,6 +6,7 @@ import (
"hackernews/components"
"hackernews/internal/news"
"hackernews/internal/parse"
"hackernews/internal/sanitize"
"hackernews/internal/timeformat"
"time"
)
@ -142,7 +143,7 @@ var CachedStoryList = h.CachedPerKeyT4(time.Minute*5, func(category string, page
h.Class("block p-2 bg-white rounded-md shadow cursor-pointer"),
h.Div(
h.Class("font-bold"),
h.Text(item.Title),
h.UnsafeRaw(sanitize.Sanitize(item.Title)),
),
h.Div(
h.Class("text-sm text-gray-600"),

View file

@ -4,6 +4,7 @@ import (
"fmt"
"github.com/maddalax/htmgo/framework/h"
"hackernews/internal/news"
"hackernews/internal/sanitize"
"hackernews/internal/timeformat"
"time"
)
@ -57,7 +58,7 @@ func StoryBody(story *news.Story) *h.Element {
h.Class("prose prose-2xl border-b border-gray-200 pb-3 max-w-none w-full"),
h.H5(
h.Class("flex gap-2 items-left font-bold"),
h.Text(story.Title),
h.UnsafeRaw(sanitize.Sanitize(story.Title)),
),
h.A(
h.Href(story.Url),
@ -66,7 +67,7 @@ func StoryBody(story *news.Story) *h.Element {
),
h.Div(
h.Class("text-sm text-gray-600"),
h.Text(story.Text),
h.UnsafeRaw(sanitize.Sanitize(story.Text)),
),
h.Div(
h.Class("text-sm text-gray-600 mt-2"),