mirror of
https://github.com/Eggbertx/gochan.git
synced 2025-08-24 08:46:24 -07:00
253 lines
7.7 KiB
Go
253 lines
7.7 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"os"
|
|
"path"
|
|
"strings"
|
|
"text/template"
|
|
"time"
|
|
)
|
|
|
|
|
|
|
|
type FooterData struct {
|
|
Version float32
|
|
GeneratedTime float32
|
|
}
|
|
|
|
|
|
|
|
var funcMap = template.FuncMap{
|
|
"add": func(a,b int) int {
|
|
return a + b
|
|
},
|
|
"subtract": func(a,b int) int {
|
|
return a - b
|
|
},
|
|
"len": func(arr []interface{}) int {
|
|
return len(arr)
|
|
},
|
|
"getSlice": func(arr []interface{}, start, end int) []interface{} {
|
|
slice := arr[start:end]
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
slice = make([]interface{}, 1)
|
|
}
|
|
}()
|
|
return slice
|
|
},
|
|
"gt": func(a int, b int) bool {
|
|
return a > b
|
|
},
|
|
"lt": func(a int, b int) bool {
|
|
return a < b
|
|
},
|
|
"stringEq": func(a, b string) bool {
|
|
return a == b
|
|
},
|
|
"stringNeq": func(a, b string) bool {
|
|
return a != b
|
|
},
|
|
"intEq": func(a, b int) bool {
|
|
return a == b
|
|
},
|
|
"isStyleDefault_img": func(style string) bool {
|
|
return style == config.DefaultStyle_img
|
|
},
|
|
"isStyleNotDefault_img": func(style string) bool {
|
|
return style != config.DefaultStyle_img
|
|
},
|
|
"getInterface":func(in []interface{}, index int) interface{} {
|
|
var nope interface{}
|
|
if len(in) == 0 {
|
|
return nope
|
|
} else if len(in) < index + 1 {
|
|
return nope
|
|
}
|
|
return in[index]
|
|
},
|
|
"formatTimestamp": func(timestamp time.Time) string {
|
|
return humanReadableTime(timestamp)
|
|
},
|
|
"getThreadID": func(post_i interface{}) (thread int) {
|
|
post := post_i.(PostTable)
|
|
if post.ParentID == 0 {
|
|
thread = post.ID
|
|
} else {
|
|
thread = post.ParentID
|
|
}
|
|
return
|
|
},
|
|
"getThumbnailFilename": func(name string) string {
|
|
filetype := name[len(name)-4:]
|
|
if filetype == ".gif" || filetype == ".GIF" {
|
|
return name[0:len(name)-3]+"jpg"
|
|
}
|
|
return name
|
|
},
|
|
"formatFilesize": func(size_int int) string {
|
|
size := float32(size_int)
|
|
if(size < 1000) {
|
|
return fmt.Sprintf("%fB", size)
|
|
} else if(size <= 100000) {
|
|
//size = size * 0.2
|
|
return fmt.Sprintf("%0.1f KB", size/1024)
|
|
} else if(size <= 100000000) {
|
|
//size = size * 0.2
|
|
return fmt.Sprintf("%0.2f MB", size/1024/1024)
|
|
}
|
|
return fmt.Sprintf("%0.2f GB", size/1024/1024/1024)
|
|
},
|
|
"imageToThumbnailPath": func(img string) string {
|
|
filetype := img[strings.LastIndex(img, ".")+1:]
|
|
if filetype == "gif" || filetype == "GIF" {
|
|
filetype = "jpg"
|
|
}
|
|
index := strings.LastIndex(img, ".")
|
|
return img[0:index]+"t."+filetype
|
|
|
|
},
|
|
}
|
|
|
|
var (
|
|
footer_data = FooterData{version, float32(0)}
|
|
|
|
banpage_tmpl_str string
|
|
banpage_tmpl *template.Template
|
|
|
|
global_footer_tmpl_str string
|
|
global_footer_tmpl *template.Template
|
|
|
|
global_header_tmpl_str string
|
|
global_header_tmpl *template.Template
|
|
|
|
img_boardpage_tmpl_str string
|
|
img_boardpage_tmpl *template.Template
|
|
|
|
img_thread_tmpl_str string
|
|
img_thread_tmpl *template.Template
|
|
|
|
manage_header_tmpl_str string
|
|
manage_header_tmpl *template.Template
|
|
|
|
front_page_tmpl_str string
|
|
front_page_tmpl *template.Template
|
|
|
|
template_buffer bytes.Buffer
|
|
starting_time int
|
|
)
|
|
|
|
func initTemplates() {
|
|
banpage_tmpl_bytes,tmpl_err := ioutil.ReadFile(config.TemplateDir+"/banpage.html")
|
|
if tmpl_err != nil {
|
|
fmt.Println("Failed loading template \""+config.TemplateDir+"/banpage.html\": " + tmpl_err.Error())
|
|
os.Exit(2)
|
|
}
|
|
banpage_tmpl_str = "{{$config := getInterface .Data 0}}{{$ban := getInterface .Data 1}}" + string(banpage_tmpl_bytes)
|
|
banpage_tmpl,tmpl_err = template.New("banpage_tmpl").Funcs(funcMap).Parse(string(banpage_tmpl_str))
|
|
if tmpl_err != nil {
|
|
fmt.Println("Failed loading template \""+config.TemplateDir+"/banpage.html\": " + tmpl_err.Error())
|
|
os.Exit(2)
|
|
}
|
|
|
|
global_footer_tmpl_bytes,tmpl_err := ioutil.ReadFile(config.TemplateDir+"/global_footer.html")
|
|
if tmpl_err != nil {
|
|
fmt.Println("Failed loading template \""+config.TemplateDir+"/global_footer.html\": " + tmpl_err.Error())
|
|
os.Exit(2)
|
|
}
|
|
global_footer_tmpl_str = string(global_footer_tmpl_bytes)
|
|
global_footer_tmpl,tmpl_err = template.New("global_footer_tmpl").Funcs(funcMap).Parse(string(global_footer_tmpl_str))
|
|
if tmpl_err != nil {
|
|
fmt.Println("Failed loading template \""+config.TemplateDir+"/global_footer.html\": " + tmpl_err.Error())
|
|
os.Exit(2)
|
|
}
|
|
|
|
global_header_tmpl_bytes,tmpl_err := ioutil.ReadFile(config.TemplateDir+"/global_header.html")
|
|
if tmpl_err != nil {
|
|
fmt.Println("Failed loading template \""+config.TemplateDir+"/global_header.html\": " + tmpl_err.Error())
|
|
os.Exit(2)
|
|
}
|
|
global_header_tmpl_str = string(global_header_tmpl_bytes)
|
|
global_header_tmpl,tmpl_err = template.New("global_header_tmpl").Funcs(funcMap).Parse(string(global_header_tmpl_str))
|
|
if tmpl_err != nil {
|
|
fmt.Println("Failed loading template \""+config.TemplateDir+"/global_header.html\": " + tmpl_err.Error())
|
|
os.Exit(2)
|
|
}
|
|
|
|
img_boardpage_tmpl_bytes,_ := ioutil.ReadFile(path.Join(config.TemplateDir,"img_boardpage.html"))
|
|
if tmpl_err != nil {
|
|
fmt.Println("Failed loading template \""+config.TemplateDir+"/img_boardpage.html\": " + tmpl_err.Error())
|
|
os.Exit(2)
|
|
}
|
|
img_boardpage_tmpl_str = "{{$config := getInterface .Data 0}}{{$board_arr := getInterface .Data 1}}{{$section_arr := getInterface .Data 2}}{{$thread_arr := getInterface .Data 3}}{{$board_info := getInterface .Data 4}}{{$board := getInterface $board_info.Data 0}}" + string(img_boardpage_tmpl_bytes)
|
|
img_boardpage_tmpl,tmpl_err = template.New("img_boardpage_tmpl").Funcs(funcMap).Parse(img_boardpage_tmpl_str)
|
|
if tmpl_err != nil {
|
|
fmt.Println("Failed loading template \""+config.TemplateDir+"/img_boardpage.html: \"" + tmpl_err.Error())
|
|
os.Exit(2)
|
|
}
|
|
|
|
img_thread_tmpl_bytes,_ := ioutil.ReadFile(path.Join(config.TemplateDir,"img_thread.html"))
|
|
if tmpl_err != nil {
|
|
fmt.Println("Failed loading template \""+config.TemplateDir+"/img_thread.html\": " + tmpl_err.Error())
|
|
os.Exit(2)
|
|
}
|
|
img_thread_tmpl_str = "{{$config := getInterface .Data 0}}{{$post_arr := getInterface .Data 1}}{{$board_arr := getInterface .Data 2}}{{$section_arr := getInterface .Data 3}}{{$op := getInterface $post_arr 0}}{{$boardid := subtract $op.BoardID 1}}{{$board := getInterface $board_arr.Data $boardid}}" + string(img_thread_tmpl_bytes)
|
|
img_thread_tmpl,tmpl_err = template.New("img_thread_tmpl").Funcs(funcMap).Parse(img_thread_tmpl_str)
|
|
if tmpl_err != nil {
|
|
fmt.Println("Failed loading template \""+config.TemplateDir+"/img_thread.html: \"" + tmpl_err.Error())
|
|
os.Exit(2)
|
|
}
|
|
|
|
manage_header_tmpl_bytes,err := ioutil.ReadFile(config.TemplateDir+"/manage_header.html")
|
|
if err != nil {
|
|
fmt.Println(err.Error())
|
|
}
|
|
manage_header_tmpl_str = string(manage_header_tmpl_bytes)
|
|
manage_header_tmpl,tmpl_err = template.New("manage_header_tmpl").Funcs(funcMap).Parse(manage_header_tmpl_str)
|
|
if tmpl_err != nil {
|
|
fmt.Println("Failed loading template \""+config.TemplateDir+"/manage_header.html\": "+tmpl_err.Error())
|
|
os.Exit(2)
|
|
}
|
|
|
|
front_page_tmpl_bytes,err := ioutil.ReadFile(config.TemplateDir+"/front.html")
|
|
if err != nil {
|
|
fmt.Println(err.Error())
|
|
os.Exit(2)
|
|
}
|
|
front_page_tmpl_str = "{{$config := getInterface .Data 0}}{{$page_arr := getInterface .Data 1}}{{$board_arr := getInterface .Data 2}}{{$section_arr := getInterface .Data 3}}" + string(front_page_tmpl_bytes)
|
|
front_page_tmpl,tmpl_err = template.New("front_page_tmpl").Funcs(funcMap).Parse(front_page_tmpl_str)
|
|
if tmpl_err != nil {
|
|
fmt.Println("Failed loading template \""+config.TemplateDir+"/front.html\": "+tmpl_err.Error())
|
|
os.Exit(2)
|
|
}
|
|
}
|
|
|
|
func getTemplateAsString(templ template.Template) (string,error) {
|
|
var buf bytes.Buffer
|
|
err := templ.Execute(&buf,config)
|
|
if err == nil {
|
|
return buf.String(),nil
|
|
}
|
|
return "",err
|
|
}
|
|
|
|
func getStyleLinks(w http.ResponseWriter, stylesheet string) {
|
|
styles_map := make(map[int]string)
|
|
for i := 0; i < len(config.Styles_img); i++ {
|
|
styles_map[i] = config.Styles_img[i]
|
|
}
|
|
|
|
err := manage_header_tmpl.Execute(w,config)
|
|
if err != nil {
|
|
fmt.Println(err.Error())
|
|
os.Exit(2)
|
|
}
|
|
}
|
|
|
|
func buildFrontPage() error {
|
|
return nil
|
|
}
|