mirror of
https://github.com/documize/community.git
synced 2025-07-22 22:59:43 +02:00
still moving codebase to new API (WIP)
This commit is contained in:
parent
72b14def6d
commit
d90b3249c3
44 changed files with 5276 additions and 336 deletions
|
@ -16,11 +16,12 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"golang.org/x/net/html"
|
||||
|
||||
"github.com/documize/community/core/api/endpoint/models"
|
||||
"github.com/documize/community/core/api/entity"
|
||||
"github.com/documize/community/core/log"
|
||||
"github.com/documize/community/core/streamutil"
|
||||
"github.com/documize/community/domain/link"
|
||||
"github.com/jmoiron/sqlx"
|
||||
)
|
||||
|
||||
|
@ -249,7 +250,7 @@ func (p *Persister) UpdatePage(page entity.Page, refID, userID string, skipRevis
|
|||
}
|
||||
|
||||
// find any content links in the HTML
|
||||
links := link.GetContentLinks(page.Body)
|
||||
links := GetContentLinks(page.Body)
|
||||
|
||||
// get a copy of previously saved links
|
||||
previousLinks, _ := p.GetPageLinks(page.DocumentID, page.RefID)
|
||||
|
@ -497,3 +498,58 @@ func (p *Persister) GetNextPageSequence(documentID string) (maxSeq float64, err
|
|||
|
||||
return
|
||||
}
|
||||
|
||||
// GetContentLinks returns Documize generated <a> links.
|
||||
// such links have an identifying attribute e.g. <a data-documize='true'...
|
||||
func GetContentLinks(body string) (links []entity.Link) {
|
||||
z := html.NewTokenizer(strings.NewReader(body))
|
||||
|
||||
for {
|
||||
tt := z.Next()
|
||||
|
||||
switch {
|
||||
case tt == html.ErrorToken:
|
||||
// End of the document, we're done
|
||||
return
|
||||
case tt == html.StartTagToken:
|
||||
t := z.Token()
|
||||
|
||||
// Check if the token is an <a> tag
|
||||
isAnchor := t.Data == "a"
|
||||
if !isAnchor {
|
||||
continue
|
||||
}
|
||||
|
||||
// Extract the content link
|
||||
ok, link := getLink(t)
|
||||
if ok {
|
||||
links = append(links, link)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Helper function to pull the href attribute from a Token
|
||||
func getLink(t html.Token) (ok bool, link entity.Link) {
|
||||
ok = false
|
||||
|
||||
// Iterate over all of the Token's attributes until we find an "href"
|
||||
for _, a := range t.Attr {
|
||||
switch a.Key {
|
||||
case "data-documize":
|
||||
ok = true
|
||||
case "data-link-id":
|
||||
link.RefID = strings.TrimSpace(a.Val)
|
||||
case "data-link-space-id":
|
||||
link.FolderID = strings.TrimSpace(a.Val)
|
||||
case "data-link-target-document-id":
|
||||
link.TargetDocumentID = strings.TrimSpace(a.Val)
|
||||
case "data-link-target-id":
|
||||
link.TargetID = strings.TrimSpace(a.Val)
|
||||
case "data-link-type":
|
||||
link.LinkType = strings.TrimSpace(a.Val)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue