2022-10-31 09:52:35 +00:00
|
|
|
package webrings
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
|
2023-01-23 19:30:47 +00:00
|
|
|
"github.com/PuerkitoBio/goquery"
|
|
|
|
"go.goblog.app/app/pkgs/bufferpool"
|
2022-10-31 09:52:35 +00:00
|
|
|
"go.goblog.app/app/pkgs/htmlbuilder"
|
|
|
|
"go.goblog.app/app/pkgs/plugintypes"
|
|
|
|
)
|
|
|
|
|
2023-02-13 19:22:42 +00:00
|
|
|
func GetPlugin() (plugintypes.SetConfig, plugintypes.UI2) {
|
2023-01-23 19:30:47 +00:00
|
|
|
p := &plugin{}
|
|
|
|
return p, p
|
2022-10-31 09:52:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
type plugin struct {
|
|
|
|
config map[string]any
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p *plugin) SetConfig(config map[string]any) {
|
|
|
|
p.config = config
|
|
|
|
}
|
|
|
|
|
2023-02-13 19:22:42 +00:00
|
|
|
func (p *plugin) RenderWithDocument(rc plugintypes.RenderContext, doc *goquery.Document) {
|
2023-01-23 19:30:47 +00:00
|
|
|
blog := rc.GetBlog()
|
|
|
|
if blog == "" {
|
|
|
|
fmt.Println("webrings plugin: blog is empty!")
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if blogWebringsAny, ok := p.config[blog]; ok {
|
|
|
|
if blogWebrings, ok := blogWebringsAny.([]any); ok {
|
|
|
|
buf := bufferpool.Get()
|
|
|
|
defer bufferpool.Put(buf)
|
|
|
|
hb := htmlbuilder.NewHtmlBuilder(buf)
|
|
|
|
for _, webringAny := range blogWebrings {
|
|
|
|
if webring, ok := webringAny.(map[string]any); ok {
|
|
|
|
title, titleOk := unwrapToString(webring["title"])
|
|
|
|
link, linkOk := unwrapToString(webring["link"])
|
|
|
|
prev, prevOk := unwrapToString(webring["prev"])
|
|
|
|
next, nextOk := unwrapToString(webring["next"])
|
|
|
|
if titleOk && (linkOk || prevOk || nextOk) {
|
|
|
|
buf.Reset()
|
|
|
|
hb.WriteElementOpen("p")
|
|
|
|
if prevOk {
|
|
|
|
hb.WriteElementOpen("a", "href", prev)
|
|
|
|
hb.WriteEscaped("←")
|
|
|
|
hb.WriteElementClose("a")
|
|
|
|
hb.WriteEscaped(" ")
|
|
|
|
}
|
|
|
|
if linkOk {
|
|
|
|
hb.WriteElementOpen("a", "href", link)
|
|
|
|
}
|
|
|
|
hb.WriteEscaped(title)
|
|
|
|
if linkOk {
|
|
|
|
hb.WriteElementClose("a")
|
2022-10-31 09:52:35 +00:00
|
|
|
}
|
2023-01-23 19:30:47 +00:00
|
|
|
if nextOk {
|
|
|
|
hb.WriteEscaped(" ")
|
|
|
|
hb.WriteElementOpen("a", "href", next)
|
|
|
|
hb.WriteEscaped("→")
|
|
|
|
hb.WriteElementClose("a")
|
|
|
|
}
|
|
|
|
hb.WriteElementClose("p")
|
|
|
|
doc.Find("footer").AppendHtml(buf.String())
|
2022-10-31 09:52:35 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func unwrapToString(o any) (string, bool) {
|
|
|
|
if o == nil {
|
|
|
|
return "", false
|
|
|
|
}
|
|
|
|
s, ok := o.(string)
|
|
|
|
return s, ok && s != ""
|
|
|
|
}
|