")
wr(s.Writer, msg.String())
}
// навигация по страницам
type dlist struct {
Pages int
More bool
}
// FIXME: на некоротрых артах первая страница может вызывать полное отсутствие панели навигации.
func (s skunkyart) NavBase(c dlist) string {
// TODO: сделать понятнее
// навигация по страницам
var list strings.Builder
list.WriteString(" ")
p := s.Page
// функция для генерации ссылок
prevrev := func(msg string, page int, onpage bool) {
if !onpage {
list.WriteString(``)
list.WriteString(msg)
list.WriteString(" ")
} else {
list.WriteString(strconv.Itoa(page))
list.WriteString(" ")
}
}
// вперёд-назад
if p > 1 {
prevrev("<= Prev |", p-1, false)
} else {
p = 1
}
if c.Pages > 0 {
// назад
for x := p - 6; x < p && x > 0; x++ {
prevrev(strconv.Itoa(x), x, false)
}
// вперёд
for x := p; x <= p+6; x++ {
if x == p {
prevrev("", x, true)
x++
}
if x > p {
prevrev(strconv.Itoa(x), x, false)
}
}
}
// вперёд-назад
if c.More {
prevrev("| Next =>", p+1, false)
}
return list.String()
}
func (s skunkyart) DeviationList(devs []devianter.Deviation, content ...dlist) string {
var list strings.Builder
list.WriteString(`
`)
for _, data := range devs {
url := devianter.UrlFromMedia(data.Media)
list.WriteString(`
")
list.WriteString(s.NavBase(content[0]))
return list.String()
}
// посты
func (s skunkyart) Deviation(author, postname string) {
// поиск ID
re := regexp.MustCompile("[0-9]+").FindAllString(postname, -1)
if len(re) >= 1 {
var post struct {
Post devianter.Post
StringTime string
Tags string
Comments string
}
id := re[len(re)-1]
post.Post = devianter.DeviationFunc(id, author)
// время публикации
post.StringTime = post.Post.Deviation.PublishedTime.UTC().String()
// хештэги
for _, x := range post.Post.Deviation.Extended.Tags {
var tag strings.Builder
tag.WriteString(` #`)
tag.WriteString(x.Name)
tag.WriteString("")
post.Tags += tag.String()
}
// FIXME: первый комментарий не отображается.
// генерация комментов
var cmmts strings.Builder
replied := make(map[int]string)
c := devianter.CommentsFunc(id, post.Post.Comments.Cursor, s.Page, 1)
cmmts.WriteString("Comments: ")
cmmts.WriteString(strconv.Itoa(c.Total))
cmmts.WriteString("")
for _, x := range c.Thread {
replied[x.ID] = x.User.Username
cmmts.WriteString(`