1
0
Fork 0
mirror of https://github.com/Eggbertx/gochan.git synced 2025-08-19 20:56:23 -07:00

Separate template functions

This commit is contained in:
Eggbertx 2024-03-26 17:49:22 -07:00
parent 09dfa2c3da
commit 4917fdf3da
3 changed files with 147 additions and 115 deletions

View file

@ -15,9 +15,11 @@ import (
"github.com/gochan-org/gochan/pkg/gcplugin"
"github.com/gochan-org/gochan/pkg/gcsql"
_ "github.com/gochan-org/gochan/pkg/gcsql/initsql"
"github.com/gochan-org/gochan/pkg/gctemplates"
"github.com/gochan-org/gochan/pkg/posting"
"github.com/gochan-org/gochan/pkg/posting/geoip"
_ "github.com/gochan-org/gochan/pkg/posting/uploads/inituploads"
"github.com/gochan-org/gochan/pkg/server/serverutil"
)

View file

@ -11,105 +11,127 @@ import (
"github.com/gochan-org/gochan/pkg/gcutil"
)
func banMaskTmplFunc(ban gcsql.IPBan) string {
if ban.ID < 1 {
if ban.RangeStart == ban.RangeEnd {
return ban.RangeStart
}
return ""
}
ipn, err := gcutil.GetIPRangeSubnet(ban.RangeStart, ban.RangeEnd)
if err != nil {
return "?"
}
return ipn.String()
}
func getBoardDirFromIDTmplFunc(id int) string {
dir, _ := gcsql.GetBoardDir(id)
return dir
}
func intPtrToBoardDirTmplFunc(id *int, ifNil string, ifErr string) string {
if id == nil {
return ifNil
}
dir, err := gcsql.GetBoardDir(*id)
if err != nil {
return ifErr
}
return dir
}
func getStaffNameFromIDTmplFunc(id int) string {
username, err := gcsql.GetStaffUsernameFromID(id)
if err != nil {
return "?"
}
return username
}
func getAppealBanIPTmplFunc(appealID int) string {
ban, err := gcsql.GetIPBanByID(appealID)
if err != nil || ban == nil {
return "?"
}
if ban.RangeStart == ban.RangeEnd {
return ban.RangeStart
}
ipn, err := gcutil.GetIPRangeSubnet(ban.RangeStart, ban.RangeEnd)
if err != nil {
return "?"
}
return ipn.String()
}
func getTopPostIDTmplFunc(post *gcsql.Post) int {
id, _ := post.TopPostID()
return id
}
func numRepliesTmplFunc(boardid, opID int) int {
num, err := gcsql.GetThreadReplyCountFromOP(opID)
if err != nil {
return 0
}
return num
}
func getBoardDirTmplFunc(id int) string {
dir, err := gcsql.GetBoardDir(id)
if err != nil {
return ""
}
return dir
}
func boardPagePathTmplFunc(board *gcsql.Board, page int) string {
return config.WebPath(board.Dir, strconv.Itoa(page)+".html")
}
func getBoardDefaultStyleTmplFunc(dir string) string {
boardCfg := config.GetBoardConfig(dir)
if !boardCfg.IsGlobal() {
// /<board>/board.json exists, overriding the default them and theme set in SQL
return boardCfg.DefaultStyle
}
var defaultStyle string
err := gcsql.QueryRowSQL(`SELECT default_style FROM DBPREFIXboards WHERE dir = ?`,
[]any{dir}, []any{&defaultStyle})
if err != nil || defaultStyle == "" {
gcutil.LogError(err).Caller().
Str("board", dir).
Msg("Unable to get default style attribute of board")
return boardCfg.DefaultStyle
}
return defaultStyle
}
func sectionBoardsTmplFunc(sectionID int) []gcsql.Board {
var boards []gcsql.Board
for _, board := range gcsql.AllBoards {
if board.SectionID == sectionID && !board.IsHidden(false) {
boards = append(boards, board)
}
}
return boards
}
func init() {
events.RegisterEvent([]string{"reset-boards-sections"}, func(trigger string, i ...interface{}) error {
return gcsql.ResetBoardSectionArrays()
})
gctemplates.AddTemplateFuncs(template.FuncMap{
"banMask": func(ban gcsql.IPBan) string {
if ban.ID < 1 {
if ban.RangeStart == ban.RangeEnd {
return ban.RangeStart
}
return ""
}
ipn, err := gcutil.GetIPRangeSubnet(ban.RangeStart, ban.RangeEnd)
if err != nil {
return "?"
}
return ipn.String()
},
"getBoardDirFromID": func(id int) string {
dir, _ := gcsql.GetBoardDir(id)
return dir
},
"intPtrToBoardDir": func(id *int, ifNil string, ifErr string) string {
if id == nil {
return ifNil
}
dir, err := gcsql.GetBoardDir(*id)
if err != nil {
return ifErr
}
return dir
},
"getStaffNameFromID": func(id int) string {
username, err := gcsql.GetStaffUsernameFromID(id)
if err != nil {
return "?"
}
return username
},
"getAppealBanIP": func(appealID int) string {
ban, err := gcsql.GetIPBanByID(appealID)
if err != nil || ban == nil {
return "?"
}
if ban.RangeStart == ban.RangeEnd {
return ban.RangeStart
}
ipn, err := gcutil.GetIPRangeSubnet(ban.RangeStart, ban.RangeEnd)
if err != nil {
return "?"
}
return ipn.String()
},
"getTopPostID": func(post *gcsql.Post) int {
id, _ := post.TopPostID()
return id
},
"numReplies": func(boardid, opID int) int {
num, err := gcsql.GetThreadReplyCountFromOP(opID)
if err != nil {
return 0
}
return num
},
"getBoardDir": func(id int) string {
dir, err := gcsql.GetBoardDir(id)
if err != nil {
return ""
}
return dir
},
"boardPagePath": func(board *gcsql.Board, page int) string {
return config.WebPath(board.Dir, strconv.Itoa(page)+".html")
},
"getBoardDefaultStyle": func(dir string) string {
boardCfg := config.GetBoardConfig(dir)
if !boardCfg.IsGlobal() {
// /<board>/board.json exists, overriding the default them and theme set in SQL
return boardCfg.DefaultStyle
}
var defaultStyle string
err := gcsql.QueryRowSQL(`SELECT default_style FROM DBPREFIXboards WHERE dir = ?`,
[]any{dir}, []any{&defaultStyle})
if err != nil || defaultStyle == "" {
gcutil.LogError(err).Caller().
Str("board", dir).
Msg("Unable to get default style attribute of board")
return boardCfg.DefaultStyle
}
return defaultStyle
},
"sectionBoards": func(sectionID int) []gcsql.Board {
var boards []gcsql.Board
for _, board := range gcsql.AllBoards {
if board.SectionID == sectionID && !board.IsHidden(false) {
boards = append(boards, board)
}
}
return boards
},
"banMask": banMaskTmplFunc,
"getBoardDirFromID": getBoardDirFromIDTmplFunc,
"intPtrToBoardDir": intPtrToBoardDirTmplFunc,
"getStaffNameFromID": getStaffNameFromIDTmplFunc,
"getAppealBanIP": getAppealBanIPTmplFunc,
"getTopPostID": getTopPostIDTmplFunc,
"numReplies": numRepliesTmplFunc,
"getBoardDir": getBoardDirTmplFunc,
"boardPagePath": boardPagePathTmplFunc,
"getBoardDefaultStyle": getBoardDefaultStyleTmplFunc,
"sectionBoards": sectionBoardsTmplFunc,
})
}

View file

@ -11,27 +11,35 @@ import (
"github.com/gochan-org/gochan/pkg/posting/uploads"
)
func getCatalogThumbnailTmplFunc(img string) string {
_, catalogThumb := uploads.GetThumbnailFilenames(img)
return catalogThumb
}
func getThreadThumbnailTmplFunc(img string) string {
thumb, _ := uploads.GetThumbnailFilenames(img)
return thumb
}
func getUploadTypeTmplFunc(name string) string {
return uploads.GetThumbnailExtension(path.Ext(name))
}
func getThumbnailWebPathTmplFunc(postID int) string {
filename, board, err := gcsql.GetUploadFilenameAndBoard(postID)
if err != nil {
gcutil.LogError(err).Caller().Int("postID", postID).Send()
return ""
}
filename, _ = uploads.GetThumbnailFilenames(filename)
return config.WebPath(board, "thumb", filename)
}
func init() {
gctemplates.AddTemplateFuncs(template.FuncMap{
"getCatalogThumbnail": func(img string) string {
_, catalogThumb := uploads.GetThumbnailFilenames(img)
return catalogThumb
},
"getThreadThumbnail": func(img string) string {
thumb, _ := uploads.GetThumbnailFilenames(img)
return thumb
},
"getUploadType": func(name string) string {
return uploads.GetThumbnailExtension(path.Ext(name))
},
"getThumbnailWebPath": func(postID int) string {
filename, board, err := gcsql.GetUploadFilenameAndBoard(postID)
if err != nil {
gcutil.LogError(err).Caller().Int("postID", postID).Send()
return ""
}
filename, _ = uploads.GetThumbnailFilenames(filename)
return config.WebPath(board, "thumb", filename)
},
"getCatalogThumbnail": getCatalogThumbnailTmplFunc,
"getThreadThumbnail": getThreadThumbnailTmplFunc,
"getUploadType": getUploadTypeTmplFunc,
"getThumbnailWebPath": getThumbnailWebPathTmplFunc,
})
}