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:
parent
09dfa2c3da
commit
4917fdf3da
3 changed files with 147 additions and 115 deletions
|
@ -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"
|
||||
)
|
||||
|
||||
|
|
|
@ -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,
|
||||
})
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue