back interdiff of round #12 and #11

appview/notify: notify users mentioned on PR comments #739

merged
opened by boltless.me targeting master from feat/mentions
files
appview
notify
pages
markup
pulls
ERROR
appview/notify/db/db.go

Failed to calculate interdiff for this file.

ERROR
appview/notify/merged_notifier.go

Failed to calculate interdiff for this file.

ERROR
appview/notify/notifier.go

Failed to calculate interdiff for this file.

ERROR
appview/notify/posthog/notifier.go

Failed to calculate interdiff for this file.

ERROR
appview/pulls/pulls.go

Failed to calculate interdiff for this file.

NEW
appview/pages/markup/extension/atlink.go
···
// An AtNode struct represents an AtNode
type AtNode struct {
-
handle string
+
Handle string
ast.BaseInline
}
···
block.Advance(m[1])
node := &AtNode{}
node.AppendChild(node, ast.NewTextSegment(atSegment))
-
node.handle = string(atSegment.Value(block.Source())[1:])
+
node.Handle = string(atSegment.Value(block.Source())[1:])
return node
}
···
func (r *atHtmlRenderer) renderAt(w util.BufWriter, source []byte, n ast.Node, entering bool) (ast.WalkStatus, error) {
if entering {
w.WriteString(`<a href="/@`)
-
w.WriteString(n.(*AtNode).handle)
+
w.WriteString(n.(*AtNode).Handle)
w.WriteString(`" class="mention">`)
} else {
w.WriteString("</a>")
NEW
appview/pages/markup/markdown.go
···
return path.Join(rctx.CurrentDir, dst)
}
+
// FindUserMentions returns Set of user handles from given markup soruce.
+
// It doesn't guarntee unique DIDs
+
func FindUserMentions(source string) []string {
+
var (
+
mentions []string
+
mentionsSet = make(map[string]struct{})
+
md = NewMarkdown()
+
sourceBytes = []byte(source)
+
root = md.Parser().Parse(text.NewReader(sourceBytes))
+
)
+
ast.Walk(root, func(n ast.Node, entering bool) (ast.WalkStatus, error) {
+
if entering && n.Kind() == textension.KindAt {
+
handle := n.(*textension.AtNode).Handle
+
mentionsSet[handle] = struct{}{}
+
return ast.WalkSkipChildren, nil
+
}
+
return ast.WalkContinue, nil
+
})
+
for handle := range mentionsSet {
+
mentions = append(mentions, handle)
+
}
+
return mentions
+
}
+
func isAbsoluteUrl(link string) bool {
parsed, err := url.Parse(link)
if err != nil {