hmn/src/templates/types.go

388 lines
6.7 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
ReportIssueEmail string
CurrentUrl string
CurrentProjectUrl 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
FishbowlUrl string
ForumsUrl string
LibraryUrl string
ConferencesUrl string
Project *ProjectHeader
}
type ProjectHeader struct {
HasForums bool
HasBlog bool
HasEpisodeGuide bool
CanEdit bool
ForumsUrl string
BlogUrl string
EpisodeGuideUrl string
EditUrl string
}
type Footer struct {
HomepageUrl string
AboutUrl string
ManifestoUrl string
CodeOfConductUrl string
CommunicationGuidelinesUrl string
ProjectIndexUrl string
ForumsUrl string
ContactUrl string
SearchActionUrl 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 {
ID int
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
UUID string
DateApproved time.Time
}
type ProjectSettings struct {
Name string
Slug string
Hidden bool
Featured bool
Personal bool
Lifecycle string
Tag string
JamParticipation []ProjectJamParticipation
Blurb string
Description string
LinksText string
Owners []User
LightLogo string
DarkLogo string
}
type ProjectJamParticipation struct {
JamName string
JamSlug string
Participating bool
}
type SnippetEdit struct {
AvailableProjectsJSON string
SubmitUrl string
AssetMaxSize int
}
type User struct {
ID int
Username string
Email string
IsStaff bool
Status int
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 TimelineItem struct {
ID string
Date time.Time
Title string
TypeTitle string
FilterTitle string
Breadcrumbs []Breadcrumb
Url string
DiscordMessageUrl string
OwnerAvatarUrl string
OwnerName string
OwnerUrl string
Projects []Project
Description template.HTML
RawDescription string
PreviewMedia TimelineItemMedia
EmbedMedia []TimelineItemMedia
SmallInfo bool
AllowTitleWrap bool
TruncateDescription bool
CanShowcase bool // whether this snippet can be shown in a showcase gallery
Editable bool
}
type TimelineItemMediaType int
const (
TimelineItemMediaTypeUnknown TimelineItemMediaType = iota
TimelineItemMediaTypeImage
TimelineItemMediaTypeVideo
TimelineItemMediaTypeAudio
TimelineItemMediaTypeEmbed
)
type TimelineItemMedia struct {
Type TimelineItemMediaType
AssetUrl string
EmbedHTML template.HTML
ThumbnailUrl string
MimeType string
Width, Height int
Filename string
FileSize int
ExtraOpenGraphItems []OpenGraphItem
}
type ProjectCardData struct {
Project *Project
Classes string
}
type ImageSelectorData struct {
Name string
Src string
Required bool
}
type Breadcrumb struct {
Name, Url string
}
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
}
type Tag struct {
Text string
Url string
}