hmn/src/templates/types.go

320 lines
5.3 KiB
Go

package templates
import (
"html/template"
"time"
)
type BaseData struct {
Title string
CanonicalLink string
OpenGraphItems []OpenGraphItem
BackgroundImage BackgroundImage
Theme string
BodyClasses []string
Breadcrumbs []Breadcrumb
Notices []Notice
ReportIssueMailto string
CurrentUrl string
LoginPageUrl string
ProjectCSSUrl string
Project Project
User *User
Session *Session
IsProjectPage bool
Header Header
Footer Footer
}
func (bd *BaseData) AddImmediateNotice(class, content string) {
bd.Notices = append(bd.Notices, Notice{
Class: class,
Content: template.HTML(content),
})
}
type Header struct {
AdminUrl string
UserProfileUrl string
UserSettingsUrl string
LoginActionUrl string
LogoutActionUrl string
ForgotPasswordUrl string
RegisterUrl string
HMNHomepageUrl string
ProjectIndexUrl string
PodcastUrl string
ForumsUrl string
LibraryUrl string
}
type Footer struct {
HomepageUrl string
AboutUrl string
ManifestoUrl string
CodeOfConductUrl string
CommunicationGuidelinesUrl string
ProjectIndexUrl string
ForumsUrl string
ContactUrl string
}
type Thread struct {
Title string
Locked bool
Sticky bool
}
type Post struct {
ID int
Url string
DeleteUrl string
EditUrl string
ReplyUrl string
Preview string
ReadOnly bool
Author User
Content template.HTML
PostDate time.Time
AuthorNumPosts int
AuthorNumProjects int
Editor *User
EditDate time.Time
EditReason string
IP string
ReplyPost *Post
}
type Project struct {
Name string
Subdomain string
Color1 string
Color2 string
Url string
Blurb string
ParsedDescription template.HTML
Owners []User
Logo string
LifecycleBadgeClass string
LifecycleString string
IsHMN bool
HasBlog bool
HasForum bool
HasLibrary bool
UUID string
DateApproved time.Time
}
type User struct {
ID int
Username string
Email string
IsStaff bool
Name string
Blurb string
Bio string
Signature string
DateJoined time.Time
AvatarUrl string
ProfileUrl string
DarkTheme bool
ShowEmail bool
Timezone string
CanEditLibrary bool
DiscordSaveShowcase bool
DiscordDeleteSnippetOnMessageDelete bool
}
type Link struct {
Name string
Url string
LinkText string
Icon string
}
type Podcast struct {
Title string
Description string
Language string
ImageUrl string
Url string
RSSUrl string
AppleUrl string
GoogleUrl string
SpotifyUrl string
}
type PodcastEpisode struct {
GUID string
Title string
Description string
DescriptionHtml template.HTML
EpisodeNumber int
Url string
ImageUrl string
FileUrl string
FileSize int64
PublicationDate time.Time
Duration int
}
// NOTE(asaf): See /src/rawdata/scss/_notices.scss for a list of classes.
type Notice struct {
Content template.HTML
Class string
}
type Session struct {
CSRFToken string
}
type OpenGraphItem struct {
Property string
Name string
Value string
}
type BackgroundImage struct {
Url string
Size string // A valid CSS background-size value
}
type PostType int
const (
PostTypeUnknown PostType = iota
PostTypeBlogPost
PostTypeBlogComment
PostTypeForumThread
PostTypeForumReply
)
// Data from post_list_item.html
type PostListItem struct {
Title string
Url string
UUID string
Breadcrumbs []Breadcrumb
PostType PostType
PostTypePrefix string
User User
Date time.Time
Unread bool
Classes string
Preview string
LastEditDate time.Time
}
// Data from thread_list_item.html
type ThreadListItem struct {
Title string
Url string
FirstUser User
FirstDate time.Time
LastUser User
LastDate time.Time
Unread bool
Classes string
Content string
}
type TimelineType int
const (
TimelineTypeUnknown TimelineType = iota
TimelineTypeForumThread
TimelineTypeForumReply
TimelineTypeBlogPost
TimelineTypeBlogComment
TimelineTypeSnippetImage
TimelineTypeSnippetVideo
TimelineTypeSnippetAudio
TimelineTypeSnippetYoutube
)
type TimelineItem struct {
Type TimelineType
TypeTitle string
Class string
Date time.Time
Url string
UUID string
OwnerAvatarUrl string
OwnerName string
OwnerUrl string
Description template.HTML
DiscordMessageUrl string
Width int
Height int
AssetUrl string
MimeType string
YoutubeID string
Title string
Breadcrumbs []Breadcrumb
}
type ProjectCardData struct {
Project *Project
Classes string
}
type Breadcrumb struct {
Name, Url string
Current bool
}
type Pagination struct {
Current int
Total int
FirstUrl string
LastUrl string
PreviousUrl string
NextUrl string
}
type EmailBaseData struct {
To template.HTML
From template.HTML
Subject template.HTML
Separator template.HTML
}
type DiscordUser struct {
Username string
Discriminator string
Avatar string
}