feat: show answer comments under collapsible

This commit is contained in:
httpjamesm 2022-12-28 22:48:02 -05:00
parent 5bd9ce484f
commit 84ba0886cd
3 changed files with 73 additions and 7 deletions

View File

@ -47,3 +47,7 @@ html {
border-radius: 50%;
padding: .25rem;
}
details {
cursor: pointer;
}

View File

@ -8,7 +8,7 @@ body {
background-color: var(--main-bg);
color: var(--text-color);
font-family: sans-serif;
display: flex;
justify-content: center;
@ -31,7 +31,7 @@ body {
code {
background-color: var(--code-bg);
padding: .15rem;
padding: 0.15rem;
border-radius: 5px;
color: white;
}
@ -45,7 +45,6 @@ pre {
line-height: 1.35;
}
.timestamp {
color: var(--muted-text-color);
font-size: 0.8rem;
@ -85,10 +84,10 @@ img {
.answer-author {
width: fit-content;
background-color: var(--meta-bg);
padding: .5rem;
padding: 0.5rem;
border-radius: 5px;
text-align: right;
font-size: .8rem;
font-size: 0.8rem;
}
.logo-link {
@ -100,9 +99,29 @@ img {
height: 2rem;
}
.comments-parent {
display: flex;
flex-direction: column;
gap: 1rem;
margin-top: 1rem;
}
.comment-parent {
cursor: text;
}
.comment-body {
font-size: 0.95rem;
}
.comment-author {
color: var(--muted-text-color);
font-size: 0.8rem;
}
@media only screen and (max-width: 800px) {
body {
padding-left: 1rem;
padding-right: 1rem;
}
}
}

View File

@ -152,7 +152,7 @@ func ViewQuestion(c *gin.Context) {
})
// append <div class="answer-author">Answered %s by %s</div> to the bottom of the answer
answerBodyHTML += fmt.Sprintf(`<div class="answer-author-parent"><div class="answer-author">Answered at %s by <a href="https://stackoverflow.com/%s" target="_blank" rel="noopener noreferrer">%s</a></div></div>`, answerTimestamp, answerAuthorURL, answerAuthorName)
answerBodyHTML += fmt.Sprintf(`<div class="answer-author-parent"><div class="answer-author">Answered %s by <a href="https://stackoverflow.com/%s" target="_blank" rel="noopener noreferrer">%s</a></div></div>`, answerTimestamp, answerAuthorURL, answerAuthorName)
// parse any code blocks and highlight them
answerCodeBlocks := codeBlockRegex.FindAllString(answerBodyHTML, -1)
@ -166,6 +166,49 @@ func ViewQuestion(c *gin.Context) {
answerBodyHTML = strings.Replace(answerBodyHTML, codeBlock, highlightedCodeBlock, 1)
}
comments := []string{}
commentsComponent := postLayout.Find("div.js-post-comments-component")
commentsList := commentsComponent.Find("div.comments")
commentsList2 := commentsList.Find("ul.comments-list")
allComments := commentsList2.Find("li.comment")
allComments.Each(func(i int, s *goquery.Selection) {
commentText := s.Find("div.comment-text")
commentBody := commentText.Find("div.comment-body")
commentCopy, err := commentBody.Find("span.comment-copy").Html()
if err != nil {
return
}
commentAuthorURL := ""
commentAuthor := commentBody.Find("span.comment-user")
if commentAuthor.Length() == 0 {
commentAuthor = commentBody.Find("a.comment-user")
if commentAuthor.Length() == 0 {
return
}
commentAuthorURL = commentAuthor.AttrOr("href", "")
}
commentTimestamp := commentBody.Find("span.relativetime-clean").Text()
comment := fmt.Sprintf(`<div class="comment-parent"><div class="comment"><div class="comment-body">%s</div><div class="comment-author">Commented %s by <a href="https://stackoverflow.com%s" target="_blank" rel="noopener noreferrer">%s</a>.</div></div></div>`, commentCopy, commentTimestamp, commentAuthorURL, commentAuthor.Text())
comments = append(comments, comment)
})
if len(comments) > 0 {
answerBodyHTML += fmt.Sprintf(`<details class="comments"><summary>Show <b>%d comments</b></summary><div class="comments-parent">%s</div></details>`, len(comments), strings.Join(comments, ""))
}
answers = append(answers, template.HTML(answerBodyHTML))
})