feat: initial commit
This commit is contained in:
commit
a161b86c9a
705 changed files with 288162 additions and 0 deletions
198
vendor/sourcery.dny.nu/pana/link.go
vendored
Normal file
198
vendor/sourcery.dny.nu/pana/link.go
vendored
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
package pana
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"iter"
|
||||
|
||||
ld "sourcery.dny.nu/longdistance"
|
||||
as "sourcery.dny.nu/pana/vocab/w3/activitystreams"
|
||||
)
|
||||
|
||||
// Link is the ActivityStreams Link type.
|
||||
//
|
||||
// Though Link can have an ID, this never happens in practice because the target
|
||||
// of a link is stored in [as.Href] instead.
|
||||
type Link ld.Node
|
||||
|
||||
// NewLink initialises a new Link.
|
||||
func NewLink() *Link {
|
||||
return &Link{
|
||||
Properties: make(ld.Properties),
|
||||
Type: []string{as.TypeLink},
|
||||
}
|
||||
}
|
||||
|
||||
// Build finalises the Link.
|
||||
func (l *Link) Build() Link {
|
||||
return *l
|
||||
}
|
||||
|
||||
// See [Object.GetType].
|
||||
//
|
||||
// This will most commonly be one of:
|
||||
// - [as.TypeLink]
|
||||
// - [as.TypeDocument]
|
||||
// - [as.TypeImage]
|
||||
// - [as.TypeAudio]
|
||||
// - [as.TypeVideo]
|
||||
// - [as.TypeMention]
|
||||
// - [as.TypeHashtag]
|
||||
//
|
||||
// You'll probably want to use [LinkTag] for Mention and Hashtag.
|
||||
func (l *Link) GetType() string {
|
||||
if l.Type == nil {
|
||||
return ""
|
||||
}
|
||||
return l.Type[0]
|
||||
}
|
||||
|
||||
// See [Object.SetType].
|
||||
func (l *Link) SetType(t string) *Link {
|
||||
l.Type = []string{t}
|
||||
return l
|
||||
}
|
||||
|
||||
// GetHref returns the value from [as.Href].
|
||||
func (l *Link) GetHref() string {
|
||||
if nodes := (*ld.Node)(l).GetNodes(as.Href); len(nodes) == 1 {
|
||||
return nodes[0].ID
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// SetHref sets a URL in [as.Href].
|
||||
func (l *Link) SetHref(url string) *Link {
|
||||
(*ld.Node)(l).SetNodes(as.Href, ld.Node{ID: url})
|
||||
return l
|
||||
}
|
||||
|
||||
// GetName returns the value from [as.Name].
|
||||
func (l *Link) GetName() iter.Seq[*Localised] {
|
||||
return func(yield func(*Localised) bool) {
|
||||
for _, n := range (*ld.Node)(l).GetNodes(as.Name) {
|
||||
if !yield((*Localised)(&n)) {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// SetName sets a value in [as.Name].
|
||||
func (l *Link) AddName(ls ...Localised) *Link {
|
||||
(*ld.Node)(l).AddNodes(as.Name, toLDNodes(ls...)...)
|
||||
return l
|
||||
}
|
||||
|
||||
// GetHreflang returns the value from [as.Hreflang].
|
||||
func (l *Link) GetHreflang() json.RawMessage {
|
||||
if nodes := (*ld.Node)(l).GetNodes(as.Hreflang); len(nodes) == 1 {
|
||||
return nodes[0].Value
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetHreflang sets a value in [as.Hreflang].
|
||||
func (l *Link) SetHreflang(hreflang json.RawMessage) *Link {
|
||||
(*ld.Node)(l).SetNodes(as.Hreflang, ld.Node{Value: hreflang})
|
||||
return l
|
||||
}
|
||||
|
||||
// GetMediaType returns the value from [as.MediaType].
|
||||
func (l *Link) GetMediaType() json.RawMessage {
|
||||
if nodes := (*ld.Node)(l).GetNodes(as.MediaType); len(nodes) == 1 {
|
||||
return nodes[0].Value
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetMediaType sets a value in [as.MediaType].
|
||||
func (l *Link) SetMediaType(mediaType json.RawMessage) *Link {
|
||||
(*ld.Node)(l).SetNodes(as.MediaType, ld.Node{Value: mediaType})
|
||||
return l
|
||||
}
|
||||
|
||||
// GetRel returns the value from [as.Rel].
|
||||
func (l *Link) GetRel() json.RawMessage {
|
||||
if nodes := (*ld.Node)(l).GetNodes(as.Rel); len(nodes) == 1 {
|
||||
return nodes[0].Value
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetRel sets a value in [as.Rel].
|
||||
func (l *Link) SetRel(rel json.RawMessage) *Link {
|
||||
(*ld.Node)(l).SetNodes(as.Rel, ld.Node{Value: rel})
|
||||
return l
|
||||
}
|
||||
|
||||
// GetHeight returns the value from [as.Height].
|
||||
func (l *Link) GetHeight() json.RawMessage {
|
||||
if nodes := (*ld.Node)(l).GetNodes(as.Height); len(nodes) == 1 {
|
||||
return nodes[0].Value
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetHeight sets a value in [as.Height].
|
||||
func (l *Link) SetHeight(height json.RawMessage) *Link {
|
||||
(*ld.Node)(l).SetNodes(as.Height, ld.Node{Value: height})
|
||||
return l
|
||||
}
|
||||
|
||||
// GetWidth returns the value from [as.Width].
|
||||
func (l *Link) GetWidth() json.RawMessage {
|
||||
if nodes := (*ld.Node)(l).GetNodes(as.Width); len(nodes) == 1 {
|
||||
return nodes[0].Value
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetWidth sets a value in [as.Width].
|
||||
func (l *Link) SetWidth(width json.RawMessage) *Link {
|
||||
(*ld.Node)(l).SetNodes(as.Width, ld.Node{Value: width})
|
||||
return l
|
||||
}
|
||||
|
||||
// LinkTag is a more constrained version of [Link] that is used in [as.Tag].
|
||||
//
|
||||
// It's usually used to represent hashtags and mentions.
|
||||
type LinkTag Link
|
||||
|
||||
func NewLinkTag() *LinkTag {
|
||||
return &LinkTag{
|
||||
Properties: make(ld.Properties, 2),
|
||||
}
|
||||
}
|
||||
|
||||
// See [Link.GetType].
|
||||
func (l *LinkTag) GetType() string {
|
||||
return (*Link)(l).GetType()
|
||||
}
|
||||
|
||||
// See [Link.SetType].
|
||||
func (l *LinkTag) SetType(t string) *LinkTag {
|
||||
(*Link)(l).SetType(t)
|
||||
return l
|
||||
}
|
||||
|
||||
// See [Link.GetHref]
|
||||
func (l *LinkTag) GetHref() string {
|
||||
return (*Link)(l).GetHref()
|
||||
}
|
||||
|
||||
// See [Link.SetHref].
|
||||
func (l *LinkTag) SetHref(url string) *LinkTag {
|
||||
(*Link)(l).SetHref(url)
|
||||
return l
|
||||
}
|
||||
|
||||
// See [Link.GetName].
|
||||
func (l *LinkTag) GetName() iter.Seq[*Localised] {
|
||||
return (*Link)(l).GetName()
|
||||
}
|
||||
|
||||
// See [Link.AddName].
|
||||
func (l *LinkTag) AddName(ls ...Localised) *LinkTag {
|
||||
(*Link)(l).AddName(ls...)
|
||||
return l
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue