diff --git a/main.go b/main.go index 8f9b931..20799be 100644 --- a/main.go +++ b/main.go @@ -55,6 +55,10 @@ func main() { c.Redirect(302, fmt.Sprintf("/questions/%s/placeholder", c.Param("id"))) }) r.GET("/questions/:id/:title", routes.ViewQuestion) + r.GET("/questions/:id/:title/:answerId", func(c *gin.Context) { + // redirect user to the answer with the title + c.Redirect(302, fmt.Sprintf("/questions/%s/%s#%s", c.Param("id"), c.Param("title"), c.Param("answerId"))) + }) r.GET("/proxy", routes.GetImage) diff --git a/src/routes/question.go b/src/routes/question.go index fbaf49f..d9ad33b 100644 --- a/src/routes/question.go +++ b/src/routes/question.go @@ -196,6 +196,7 @@ func ViewQuestion(c *gin.Context) { answers := []types.FilteredAnswer{} doc.Find("div.answer").Each(func(i int, s *goquery.Selection) { + newFilteredAnswer := types.FilteredAnswer{} postLayout := s.Find("div.post-layout") @@ -235,6 +236,9 @@ func ViewQuestion(c *gin.Context) { answerTimestamp = html.EscapeString(s.Find("span.relativetime").Text()) }) + answerId, _ := s.Attr("data-answerid") + newFilteredAnswer.ID = answerId + newFilteredAnswer.AuthorName = answerAuthorName newFilteredAnswer.AuthorURL = answerAuthorURL newFilteredAnswer.Timestamp = answerTimestamp diff --git a/src/types/answer.go b/src/types/answer.go index 40ec193..236960e 100644 --- a/src/types/answer.go +++ b/src/types/answer.go @@ -3,6 +3,8 @@ package types import "html/template" type FilteredAnswer struct { + ID string + Upvotes string IsAccepted bool diff --git a/templates/question.html b/templates/question.html index 9a08a8f..20e8043 100644 --- a/templates/question.html +++ b/templates/question.html @@ -68,7 +68,7 @@ {{ range $answer := .answers }} -
+