156 lines
3.6 KiB
Go
156 lines
3.6 KiB
Go
|
|
package pana
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"iter"
|
||
|
|
|
||
|
|
ld "sourcery.dny.nu/longdistance"
|
||
|
|
"sourcery.dny.nu/pana/vocab/mastodon"
|
||
|
|
as "sourcery.dny.nu/pana/vocab/w3/activitystreams"
|
||
|
|
)
|
||
|
|
|
||
|
|
// Document is the ActivityStreams Document type.
|
||
|
|
//
|
||
|
|
// It shares all properties with [Link].
|
||
|
|
type Document Object
|
||
|
|
|
||
|
|
// NewDocument initialises a new Document.
|
||
|
|
func NewDocument() *Document {
|
||
|
|
return &Document{
|
||
|
|
Properties: make(ld.Properties),
|
||
|
|
Type: []string{as.TypeDocument},
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Build finalises the Document.
|
||
|
|
func (d *Document) Build() Document {
|
||
|
|
return *d
|
||
|
|
}
|
||
|
|
|
||
|
|
// See [Object.GetType].
|
||
|
|
func (d *Document) GetType() string {
|
||
|
|
return (*Object)(d).GetType()
|
||
|
|
}
|
||
|
|
|
||
|
|
// See [Object.SetType].
|
||
|
|
func (d *Document) SetType(typ string) *Document {
|
||
|
|
(*Object)(d).SetType(typ)
|
||
|
|
return d
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetBlurhash returns the value in [mastodon.Blurhash].
|
||
|
|
func (d *Document) GetBlurhash() json.RawMessage {
|
||
|
|
if nodes := (*ld.Node)(d).GetNodes(mastodon.Blurhash); len(nodes) == 1 {
|
||
|
|
return nodes[0].Value
|
||
|
|
}
|
||
|
|
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// SetBlurhash sets the value in [mastodon.Blurhash].
|
||
|
|
func (d *Document) SetBlurhash(v json.RawMessage) *Document {
|
||
|
|
(*ld.Node)(d).SetNodes(mastodon.Blurhash, ld.Node{Value: v})
|
||
|
|
return d
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetDuration returns the value in [as.Duration].
|
||
|
|
func (d *Document) GetDuration() json.RawMessage {
|
||
|
|
if nodes := (*ld.Node)(d).GetNodes(as.Duration); len(nodes) == 1 {
|
||
|
|
return nodes[0].Value
|
||
|
|
}
|
||
|
|
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// SetDuration sets the value in [as.Duration].
|
||
|
|
func (d *Document) SetDuration(v json.RawMessage) *Document {
|
||
|
|
(*ld.Node)(d).SetNodes(as.Duration, ld.Node{Value: v})
|
||
|
|
return d
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetFocalPoint returns the value in [mastodon.FocalPoint].
|
||
|
|
func (d *Document) GetFocalPoint() []json.RawMessage {
|
||
|
|
if nodes := (*ld.Node)(d).GetNodes(mastodon.FocalPoint); len(nodes) == 1 && len(nodes[0].List) == 2 {
|
||
|
|
x := nodes[0].List[0].Value
|
||
|
|
y := nodes[0].List[1].Value
|
||
|
|
return []json.RawMessage{x, y}
|
||
|
|
}
|
||
|
|
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// SetFocalPoint sets the value in [mastodon.FocalPoint].
|
||
|
|
func (d *Document) SetFocalPoint(x, y json.RawMessage) *Document {
|
||
|
|
(*ld.Node)(d).SetNodes(mastodon.FocalPoint, ld.Node{
|
||
|
|
List: []ld.Node{{Value: x}, {Value: y}},
|
||
|
|
})
|
||
|
|
return d
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetHeight returns the value in [as.Height].
|
||
|
|
func (d *Document) GetHeight() json.RawMessage {
|
||
|
|
if nodes := (*ld.Node)(d).GetNodes(as.Height); len(nodes) == 1 {
|
||
|
|
return nodes[0].Value
|
||
|
|
}
|
||
|
|
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// SetHeight sets the value in [as.Height].
|
||
|
|
func (d *Document) SetHeight(v json.RawMessage) *Document {
|
||
|
|
(*ld.Node)(d).SetNodes(as.Height, ld.Node{Value: v})
|
||
|
|
return d
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetMediaType returns the value in [as.MediaType].
|
||
|
|
func (d *Document) GetMediaType() json.RawMessage {
|
||
|
|
if nodes := (*ld.Node)(d).GetNodes(as.MediaType); len(nodes) == 1 {
|
||
|
|
return nodes[0].Value
|
||
|
|
}
|
||
|
|
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// SetMediaType sets the value in [as.MediaType].
|
||
|
|
func (d *Document) SetMediaType(v json.RawMessage) *Document {
|
||
|
|
(*ld.Node)(d).SetNodes(as.MediaType, ld.Node{Value: v})
|
||
|
|
return d
|
||
|
|
}
|
||
|
|
|
||
|
|
// See [Object.GetName].
|
||
|
|
func (d *Document) GetName() iter.Seq[*Localised] {
|
||
|
|
return (*Object)(d).GetName()
|
||
|
|
}
|
||
|
|
|
||
|
|
// See [Object.AddName].
|
||
|
|
func (d *Document) AddName(ls ...Localised) *Document {
|
||
|
|
(*Object)(d).AddName(ls...)
|
||
|
|
return d
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetWidth returns the value in [as.Width].
|
||
|
|
func (d *Document) GetWidth() json.RawMessage {
|
||
|
|
if nodes := (*ld.Node)(d).GetNodes(as.Width); len(nodes) == 1 {
|
||
|
|
return nodes[0].Value
|
||
|
|
}
|
||
|
|
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// SetWidth sets the value in [as.Width].
|
||
|
|
func (d *Document) SetWidth(v json.RawMessage) *Document {
|
||
|
|
(*ld.Node)(d).SetNodes(as.Width, ld.Node{Value: v})
|
||
|
|
return d
|
||
|
|
}
|
||
|
|
|
||
|
|
// See [Object.GetURL].
|
||
|
|
func (d *Document) GetURL() string {
|
||
|
|
return (*Object)(d).GetURL()
|
||
|
|
}
|
||
|
|
|
||
|
|
// See [Object.SetURL].
|
||
|
|
func (d *Document) SetURL(url string) *Document {
|
||
|
|
(*Object)(d).SetURL(url)
|
||
|
|
return d
|
||
|
|
}
|