diff --git a/common/audit_logs.go b/common/audit_logs.go
index d4fe5b6e..f10fbcb1 100644
--- a/common/audit_logs.go
+++ b/common/audit_logs.go
@@ -9,21 +9,32 @@ import (
var ModLogs LogStore
var AdminLogs LogStore
+type LogItem struct {
+ Action string
+ ElementID int
+ ElementType string
+ IPAddress string
+ ActorID int
+ DoneAt string
+}
+
type LogStore interface {
Create(action string, elementID int, elementType string, ipaddress string, actorID int) (err error)
GlobalCount() int
+ GetOffset(offset int, perPage int) (logs []LogItem, err error)
}
type SQLModLogStore struct {
- create *sql.Stmt
- count *sql.Stmt
+ create *sql.Stmt
+ count *sql.Stmt
+ getOffset *sql.Stmt
}
-func NewModLogStore() (*SQLModLogStore, error) {
- acc := qgen.Builder.Accumulator()
+func NewModLogStore(acc *qgen.Accumulator) (*SQLModLogStore, error) {
return &SQLModLogStore{
- create: acc.Insert("moderation_logs").Columns("action, elementID, elementType, ipaddress, actorID, doneAt").Fields("?,?,?,?,?,UTC_TIMESTAMP()").Prepare(),
- count: acc.Count("moderation_logs").Prepare(),
+ create: acc.Insert("moderation_logs").Columns("action, elementID, elementType, ipaddress, actorID, doneAt").Fields("?,?,?,?,?,UTC_TIMESTAMP()").Prepare(),
+ count: acc.Count("moderation_logs").Prepare(),
+ getOffset: acc.Select("moderation_logs").Columns("action, elementID, elementType, ipaddress, actorID, doneAt").Orderby("doneAt DESC").Limit("?,?").Prepare(),
}, acc.FirstError()
}
@@ -41,16 +52,38 @@ func (store *SQLModLogStore) GlobalCount() (logCount int) {
return logCount
}
-type SQLAdminLogStore struct {
- create *sql.Stmt
- count *sql.Stmt
+func buildLogList(rows *sql.Rows) (logs []LogItem, err error) {
+ for rows.Next() {
+ var log LogItem
+ err := rows.Scan(&log.Action, &log.ElementID, &log.ElementType, &log.IPAddress, &log.ActorID, &log.DoneAt)
+ if err != nil {
+ return logs, err
+ }
+ logs = append(logs, log)
+ }
+ return logs, rows.Err()
}
-func NewAdminLogStore() (*SQLAdminLogStore, error) {
- acc := qgen.Builder.Accumulator()
+func (store *SQLModLogStore) GetOffset(offset int, perPage int) (logs []LogItem, err error) {
+ rows, err := store.getOffset.Query(offset, perPage)
+ if err != nil {
+ return logs, err
+ }
+ defer rows.Close()
+ return buildLogList(rows)
+}
+
+type SQLAdminLogStore struct {
+ create *sql.Stmt
+ count *sql.Stmt
+ getOffset *sql.Stmt
+}
+
+func NewAdminLogStore(acc *qgen.Accumulator) (*SQLAdminLogStore, error) {
return &SQLAdminLogStore{
- create: acc.Insert("administration_logs").Columns("action, elementID, elementType, ipaddress, actorID, doneAt").Fields("?,?,?,?,?,UTC_TIMESTAMP()").Prepare(),
- count: acc.Count("administration_logs").Prepare(),
+ create: acc.Insert("administration_logs").Columns("action, elementID, elementType, ipaddress, actorID, doneAt").Fields("?,?,?,?,?,UTC_TIMESTAMP()").Prepare(),
+ count: acc.Count("administration_logs").Prepare(),
+ getOffset: acc.Select("administration_logs").Columns("action, elementID, elementType, ipaddress, actorID, doneAt").Orderby("doneAt DESC").Limit("?,?").Prepare(),
}, acc.FirstError()
}
@@ -67,3 +100,12 @@ func (store *SQLAdminLogStore) GlobalCount() (logCount int) {
}
return logCount
}
+
+func (store *SQLAdminLogStore) GetOffset(offset int, perPage int) (logs []LogItem, err error) {
+ rows, err := store.getOffset.Query(offset, perPage)
+ if err != nil {
+ return logs, err
+ }
+ defer rows.Close()
+ return buildLogList(rows)
+}
diff --git a/common/common.go b/common/common.go
index 81fd62d4..f19bd51a 100644
--- a/common/common.go
+++ b/common/common.go
@@ -8,16 +8,16 @@ import (
)
// nolint I don't want to write comments for each of these o.o
-const Hour int64 = 60 * 60
-const Day int64 = Hour * 24
-const Week int64 = Day * 7
-const Month int64 = Day * 30
-const Year int64 = Day * 365
-const Kilobyte int64 = 1024
-const Megabyte int64 = Kilobyte * 1024
-const Gigabyte int64 = Megabyte * 1024
-const Terabyte int64 = Gigabyte * 1024
-const Petabyte int64 = Terabyte * 1024
+const Hour int = 60 * 60
+const Day int = Hour * 24
+const Week int = Day * 7
+const Month int = Day * 30
+const Year int = Day * 365
+const Kilobyte int = 1024
+const Megabyte int = Kilobyte * 1024
+const Gigabyte int = Megabyte * 1024
+const Terabyte int = Gigabyte * 1024
+const Petabyte int = Terabyte * 1024
const SaltLength int = 32
const SessionLength int = 80
diff --git a/common/misc_logs.go b/common/misc_logs.go
new file mode 100644
index 00000000..290e9037
--- /dev/null
+++ b/common/misc_logs.go
@@ -0,0 +1,93 @@
+package common
+
+import "database/sql"
+import "../query_gen/lib"
+
+var RegLogs RegLogStore
+
+type RegLogItem struct {
+ ID int
+ Username string
+ Email string
+ FailureReason string
+ Success bool
+ IPAddress string
+ DoneAt string
+}
+
+type RegLogStmts struct {
+ update *sql.Stmt
+ create *sql.Stmt
+}
+
+var regLogStmts RegLogStmts
+
+func init() {
+ DbInits.Add(func(acc *qgen.Accumulator) error {
+ regLogStmts = RegLogStmts{
+ update: acc.Update("registration_logs").Set("username = ?, email = ?, failureReason = ?, success = ?").Where("rlid = ?").Prepare(),
+ create: acc.Insert("registration_logs").Columns("username, email, failureReason, success, ipaddress, doneAt").Fields("?,?,?,?,?,UTC_TIMESTAMP()").Prepare(),
+ }
+ return acc.FirstError()
+ })
+}
+
+// TODO: Reload this item in the store, probably doesn't matter right now, but it might when we start caching this stuff in memory
+// ! Retroactive updates of date are not permitted for integrity reasons
+func (log *RegLogItem) Commit() error {
+ _, err := regLogStmts.update.Exec(log.Username, log.Email, log.FailureReason, log.Success, log.ID)
+ return err
+}
+
+func (log *RegLogItem) Create() (id int, err error) {
+ res, err := regLogStmts.create.Exec(log.Username, log.Email, log.FailureReason, log.Success, log.IPAddress)
+ if err != nil {
+ return 0, err
+ }
+ id64, err := res.LastInsertId()
+ log.ID = int(id64)
+ return log.ID, err
+}
+
+type RegLogStore interface {
+ GlobalCount() (logCount int)
+ GetOffset(offset int, perPage int) (logs []RegLogItem, err error)
+}
+
+type SQLRegLogStore struct {
+ count *sql.Stmt
+ getOffset *sql.Stmt
+}
+
+func NewRegLogStore(acc *qgen.Accumulator) (*SQLRegLogStore, error) {
+ return &SQLRegLogStore{
+ count: acc.Count("registration_logs").Prepare(),
+ getOffset: acc.Select("registration_logs").Columns("rlid, username, email, failureReason, success, ipaddress, doneAt").Orderby("doneAt DESC").Limit("?,?").Prepare(),
+ }, acc.FirstError()
+}
+
+func (store *SQLRegLogStore) GlobalCount() (logCount int) {
+ err := store.count.QueryRow().Scan(&logCount)
+ if err != nil {
+ LogError(err)
+ }
+ return logCount
+}
+
+func (store *SQLRegLogStore) GetOffset(offset int, perPage int) (logs []RegLogItem, err error) {
+ rows, err := store.getOffset.Query(offset, perPage)
+ if err != nil {
+ return logs, err
+ }
+ defer rows.Close()
+
+ for rows.Next() {
+ var log RegLogItem
+ err := rows.Scan(&log.ID, &log.Username, &log.Email, &log.FailureReason, &log.Success, &log.IPAddress, &log.DoneAt)
+ if err != nil {
+ return logs, err
+ }
+ logs = append(logs, log)
+ }
+ return logs, rows.Err()
+}
diff --git a/common/pages.go b/common/pages.go
index c464dc61..a86cce6c 100644
--- a/common/pages.go
+++ b/common/pages.go
@@ -383,7 +383,7 @@ type PanelBackupPage struct {
Backups []BackupItem
}
-type LogItem struct {
+type PageLogItem struct {
Action template.HTML
IPAddress string
DoneAt string
@@ -395,7 +395,22 @@ type PanelLogsPage struct {
Header *Header
Stats PanelStats
Zone string
- Logs []LogItem
+ Logs []PageLogItem
+ Paginator
+}
+
+type PageRegLogItem struct {
+ RegLogItem
+ ParsedReason string
+}
+
+type PanelRegLogsPage struct {
+ Title string
+ CurrentUser User
+ Header *Header
+ Stats PanelStats
+ Zone string
+ Logs []PageRegLogItem
Paginator
}
diff --git a/common/routes_common.go b/common/routes_common.go
index ccd6a7bd..923cc9df 100644
--- a/common/routes_common.go
+++ b/common/routes_common.go
@@ -263,10 +263,6 @@ func preRoute(w http.ResponseWriter, r *http.Request) (User, bool) {
if halt {
return *user, false
}
- if user == &GuestUser {
- return *user, true
- }
-
var usercpy *User = BlankUser()
*usercpy = *user
@@ -276,6 +272,11 @@ func preRoute(w http.ResponseWriter, r *http.Request) (User, bool) {
PreError("Bad IP", w, r)
return *usercpy, false
}
+ if user == &GuestUser {
+ usercpy.LastIP = host
+ return *usercpy, true
+ }
+
if host != usercpy.LastIP {
err = usercpy.UpdateIP(host)
if err != nil {
diff --git a/common/site.go b/common/site.go
index 3b2ddb5d..22b237c5 100644
--- a/common/site.go
+++ b/common/site.go
@@ -52,7 +52,7 @@ type config struct {
SslPrivkey string
SslFullchain string
- MaxRequestSize int64
+ MaxRequestSize int
CacheTopicUser int
UserCacheCapacity int
TopicCacheCapacity int
diff --git a/common/utils.go b/common/utils.go
index 8071d2d6..50fd7ab6 100644
--- a/common/utils.go
+++ b/common/utils.go
@@ -151,8 +151,8 @@ func ConvertByteInUnit(bytes float64, unit string) (count float64) {
// TODO: Re-add T as int64
func ConvertUnit(num int) (int, string) {
switch {
- //case num >= 1000000000000:
- // return num / 1000000000000, "T"
+ case num >= 1000000000000:
+ return num / 1000000000000, "T"
case num >= 1000000000:
return num / 1000000000, "B"
case num >= 1000000:
@@ -169,10 +169,10 @@ func ConvertUnit(num int) (int, string) {
// TODO: Re-add trillion as int64
func ConvertFriendlyUnit(num int) (int, string) {
switch {
- //case num >= 1000000000000000:
- // return 0, " quadrillion"
- //case num >= 1000000000000:
- // return 0, " trillion"
+ case num >= 1000000000000000:
+ return 0, " quadrillion"
+ case num >= 1000000000000:
+ return 0, " trillion"
case num >= 1000000000:
return num / 1000000000, " billion"
case num >= 1000000:
diff --git a/gen_mssql.go b/gen_mssql.go
index a4439713..3d9996c1 100644
--- a/gen_mssql.go
+++ b/gen_mssql.go
@@ -12,11 +12,6 @@ type Stmts struct {
isPluginActive *sql.Stmt
getUsersOffset *sql.Stmt
isThemeDefault *sql.Stmt
- getModlogs *sql.Stmt
- getModlogsOffset *sql.Stmt
- getAdminlogsOffset *sql.Stmt
- getTopicFID *sql.Stmt
- getUserName *sql.Stmt
getEmailsByUser *sql.Stmt
getTopicBasic *sql.Stmt
forumEntryExists *sql.Stmt
@@ -27,7 +22,6 @@ type Stmts struct {
addPlugin *sql.Stmt
addTheme *sql.Stmt
createWordFilter *sql.Stmt
- editReply *sql.Stmt
updatePlugin *sql.Stmt
updatePluginInstall *sql.Stmt
updateTheme *sql.Stmt
@@ -81,46 +75,6 @@ func _gen_mssql() (err error) {
return err
}
- common.DebugLog("Preparing getModlogs statement.")
- stmts.getModlogs, err = db.Prepare("SELECT [action],[elementID],[elementType],[ipaddress],[actorID],[doneAt] FROM [moderation_logs]")
- if err != nil {
- log.Print("Error in getModlogs statement.")
- log.Print("Bad Query: ","SELECT [action],[elementID],[elementType],[ipaddress],[actorID],[doneAt] FROM [moderation_logs]")
- return err
- }
-
- common.DebugLog("Preparing getModlogsOffset statement.")
- stmts.getModlogsOffset, err = db.Prepare("SELECT [action],[elementID],[elementType],[ipaddress],[actorID],[doneAt] FROM [moderation_logs] ORDER BY doneAt DESC OFFSET ?1 ROWS FETCH NEXT ?2 ROWS ONLY")
- if err != nil {
- log.Print("Error in getModlogsOffset statement.")
- log.Print("Bad Query: ","SELECT [action],[elementID],[elementType],[ipaddress],[actorID],[doneAt] FROM [moderation_logs] ORDER BY doneAt DESC OFFSET ?1 ROWS FETCH NEXT ?2 ROWS ONLY")
- return err
- }
-
- common.DebugLog("Preparing getAdminlogsOffset statement.")
- stmts.getAdminlogsOffset, err = db.Prepare("SELECT [action],[elementID],[elementType],[ipaddress],[actorID],[doneAt] FROM [administration_logs] ORDER BY doneAt DESC OFFSET ?1 ROWS FETCH NEXT ?2 ROWS ONLY")
- if err != nil {
- log.Print("Error in getAdminlogsOffset statement.")
- log.Print("Bad Query: ","SELECT [action],[elementID],[elementType],[ipaddress],[actorID],[doneAt] FROM [administration_logs] ORDER BY doneAt DESC OFFSET ?1 ROWS FETCH NEXT ?2 ROWS ONLY")
- return err
- }
-
- common.DebugLog("Preparing getTopicFID statement.")
- stmts.getTopicFID, err = db.Prepare("SELECT [parentID] FROM [topics] WHERE [tid] = ?1")
- if err != nil {
- log.Print("Error in getTopicFID statement.")
- log.Print("Bad Query: ","SELECT [parentID] FROM [topics] WHERE [tid] = ?1")
- return err
- }
-
- common.DebugLog("Preparing getUserName statement.")
- stmts.getUserName, err = db.Prepare("SELECT [name] FROM [users] WHERE [uid] = ?1")
- if err != nil {
- log.Print("Error in getUserName statement.")
- log.Print("Bad Query: ","SELECT [name] FROM [users] WHERE [uid] = ?1")
- return err
- }
-
common.DebugLog("Preparing getEmailsByUser statement.")
stmts.getEmailsByUser, err = db.Prepare("SELECT [email],[validated],[token] FROM [emails] WHERE [uid] = ?1")
if err != nil {
@@ -201,14 +155,6 @@ func _gen_mssql() (err error) {
return err
}
- common.DebugLog("Preparing editReply statement.")
- stmts.editReply, err = db.Prepare("UPDATE [replies] SET [content] = ?,[parsed_content] = ? WHERE [rid] = ?")
- if err != nil {
- log.Print("Error in editReply statement.")
- log.Print("Bad Query: ","UPDATE [replies] SET [content] = ?,[parsed_content] = ? WHERE [rid] = ?")
- return err
- }
-
common.DebugLog("Preparing updatePlugin statement.")
stmts.updatePlugin, err = db.Prepare("UPDATE [plugins] SET [active] = ? WHERE [uname] = ?")
if err != nil {
diff --git a/gen_mysql.go b/gen_mysql.go
index f40d843a..6c298656 100644
--- a/gen_mysql.go
+++ b/gen_mysql.go
@@ -14,11 +14,6 @@ type Stmts struct {
isPluginActive *sql.Stmt
getUsersOffset *sql.Stmt
isThemeDefault *sql.Stmt
- getModlogs *sql.Stmt
- getModlogsOffset *sql.Stmt
- getAdminlogsOffset *sql.Stmt
- getTopicFID *sql.Stmt
- getUserName *sql.Stmt
getEmailsByUser *sql.Stmt
getTopicBasic *sql.Stmt
forumEntryExists *sql.Stmt
@@ -29,7 +24,6 @@ type Stmts struct {
addPlugin *sql.Stmt
addTheme *sql.Stmt
createWordFilter *sql.Stmt
- editReply *sql.Stmt
updatePlugin *sql.Stmt
updatePluginInstall *sql.Stmt
updateTheme *sql.Stmt
@@ -80,41 +74,6 @@ func _gen_mysql() (err error) {
return err
}
- common.DebugLog("Preparing getModlogs statement.")
- stmts.getModlogs, err = db.Prepare("SELECT `action`,`elementID`,`elementType`,`ipaddress`,`actorID`,`doneAt` FROM `moderation_logs`")
- if err != nil {
- log.Print("Error in getModlogs statement.")
- return err
- }
-
- common.DebugLog("Preparing getModlogsOffset statement.")
- stmts.getModlogsOffset, err = db.Prepare("SELECT `action`,`elementID`,`elementType`,`ipaddress`,`actorID`,`doneAt` FROM `moderation_logs` ORDER BY `doneAt` DESC LIMIT ?,?")
- if err != nil {
- log.Print("Error in getModlogsOffset statement.")
- return err
- }
-
- common.DebugLog("Preparing getAdminlogsOffset statement.")
- stmts.getAdminlogsOffset, err = db.Prepare("SELECT `action`,`elementID`,`elementType`,`ipaddress`,`actorID`,`doneAt` FROM `administration_logs` ORDER BY `doneAt` DESC LIMIT ?,?")
- if err != nil {
- log.Print("Error in getAdminlogsOffset statement.")
- return err
- }
-
- common.DebugLog("Preparing getTopicFID statement.")
- stmts.getTopicFID, err = db.Prepare("SELECT `parentID` FROM `topics` WHERE `tid` = ?")
- if err != nil {
- log.Print("Error in getTopicFID statement.")
- return err
- }
-
- common.DebugLog("Preparing getUserName statement.")
- stmts.getUserName, err = db.Prepare("SELECT `name` FROM `users` WHERE `uid` = ?")
- if err != nil {
- log.Print("Error in getUserName statement.")
- return err
- }
-
common.DebugLog("Preparing getEmailsByUser statement.")
stmts.getEmailsByUser, err = db.Prepare("SELECT `email`,`validated`,`token` FROM `emails` WHERE `uid` = ?")
if err != nil {
@@ -185,13 +144,6 @@ func _gen_mysql() (err error) {
return err
}
- common.DebugLog("Preparing editReply statement.")
- stmts.editReply, err = db.Prepare("UPDATE `replies` SET `content` = ?,`parsed_content` = ? WHERE `rid` = ?")
- if err != nil {
- log.Print("Error in editReply statement.")
- return err
- }
-
common.DebugLog("Preparing updatePlugin statement.")
stmts.updatePlugin, err = db.Prepare("UPDATE `plugins` SET `active` = ? WHERE `uname` = ?")
if err != nil {
diff --git a/gen_pgsql.go b/gen_pgsql.go
index 2d228b47..3f09bc61 100644
--- a/gen_pgsql.go
+++ b/gen_pgsql.go
@@ -9,7 +9,6 @@ import "./common"
// nolint
type Stmts struct {
- editReply *sql.Stmt
updatePlugin *sql.Stmt
updatePluginInstall *sql.Stmt
updateTheme *sql.Stmt
@@ -36,13 +35,6 @@ type Stmts struct {
func _gen_pgsql() (err error) {
common.DebugLog("Building the generated statements")
- common.DebugLog("Preparing editReply statement.")
- stmts.editReply, err = db.Prepare("UPDATE `replies` SET `content` = ?,`parsed_content` = ? WHERE `rid` = ?")
- if err != nil {
- log.Print("Error in editReply statement.")
- return err
- }
-
common.DebugLog("Preparing updatePlugin statement.")
stmts.updatePlugin, err = db.Prepare("UPDATE `plugins` SET `active` = ? WHERE `uname` = ?")
if err != nil {
diff --git a/gen_router.go b/gen_router.go
index bff1313d..b73e0216 100644
--- a/gen_router.go
+++ b/gen_router.go
@@ -85,6 +85,7 @@ var RouteMap = map[string]interface{}{
"routePanelGroupsEditPermsSubmit": routePanelGroupsEditPermsSubmit,
"routePanelGroupsCreateSubmit": routePanelGroupsCreateSubmit,
"routePanelBackups": routePanelBackups,
+ "routePanelLogsRegs": routePanelLogsRegs,
"routePanelLogsMod": routePanelLogsMod,
"routePanelDebug": routePanelDebug,
"routePanelDashboard": routePanelDashboard,
@@ -201,52 +202,53 @@ var routeMapEnum = map[string]int{
"routePanelGroupsEditPermsSubmit": 63,
"routePanelGroupsCreateSubmit": 64,
"routePanelBackups": 65,
- "routePanelLogsMod": 66,
- "routePanelDebug": 67,
- "routePanelDashboard": 68,
- "routes.AccountEditCritical": 69,
- "routes.AccountEditCriticalSubmit": 70,
- "routes.AccountEditAvatar": 71,
- "routes.AccountEditAvatarSubmit": 72,
- "routes.AccountEditUsername": 73,
- "routes.AccountEditUsernameSubmit": 74,
- "routeAccountEditEmail": 75,
- "routeAccountEditEmailTokenSubmit": 76,
- "routes.ViewProfile": 77,
- "routes.BanUserSubmit": 78,
- "routes.UnbanUser": 79,
- "routes.ActivateUser": 80,
- "routes.IPSearch": 81,
- "routes.CreateTopicSubmit": 82,
- "routes.EditTopicSubmit": 83,
- "routes.DeleteTopicSubmit": 84,
- "routes.StickTopicSubmit": 85,
- "routes.UnstickTopicSubmit": 86,
- "routes.LockTopicSubmit": 87,
- "routes.UnlockTopicSubmit": 88,
- "routes.MoveTopicSubmit": 89,
- "routes.LikeTopicSubmit": 90,
- "routes.ViewTopic": 91,
- "routes.CreateReplySubmit": 92,
- "routes.ReplyEditSubmit": 93,
- "routes.ReplyDeleteSubmit": 94,
- "routes.ReplyLikeSubmit": 95,
- "routes.ProfileReplyCreateSubmit": 96,
- "routes.ProfileReplyEditSubmit": 97,
- "routes.ProfileReplyDeleteSubmit": 98,
- "routes.PollVote": 99,
- "routes.PollResults": 100,
- "routes.AccountLogin": 101,
- "routes.AccountRegister": 102,
- "routes.AccountLogout": 103,
- "routes.AccountLoginSubmit": 104,
- "routes.AccountRegisterSubmit": 105,
- "routes.DynamicRoute": 106,
- "routes.UploadedFile": 107,
- "routes.StaticFile": 108,
- "routes.RobotsTxt": 109,
- "routes.SitemapXml": 110,
- "routes.BadRoute": 111,
+ "routePanelLogsRegs": 66,
+ "routePanelLogsMod": 67,
+ "routePanelDebug": 68,
+ "routePanelDashboard": 69,
+ "routes.AccountEditCritical": 70,
+ "routes.AccountEditCriticalSubmit": 71,
+ "routes.AccountEditAvatar": 72,
+ "routes.AccountEditAvatarSubmit": 73,
+ "routes.AccountEditUsername": 74,
+ "routes.AccountEditUsernameSubmit": 75,
+ "routeAccountEditEmail": 76,
+ "routeAccountEditEmailTokenSubmit": 77,
+ "routes.ViewProfile": 78,
+ "routes.BanUserSubmit": 79,
+ "routes.UnbanUser": 80,
+ "routes.ActivateUser": 81,
+ "routes.IPSearch": 82,
+ "routes.CreateTopicSubmit": 83,
+ "routes.EditTopicSubmit": 84,
+ "routes.DeleteTopicSubmit": 85,
+ "routes.StickTopicSubmit": 86,
+ "routes.UnstickTopicSubmit": 87,
+ "routes.LockTopicSubmit": 88,
+ "routes.UnlockTopicSubmit": 89,
+ "routes.MoveTopicSubmit": 90,
+ "routes.LikeTopicSubmit": 91,
+ "routes.ViewTopic": 92,
+ "routes.CreateReplySubmit": 93,
+ "routes.ReplyEditSubmit": 94,
+ "routes.ReplyDeleteSubmit": 95,
+ "routes.ReplyLikeSubmit": 96,
+ "routes.ProfileReplyCreateSubmit": 97,
+ "routes.ProfileReplyEditSubmit": 98,
+ "routes.ProfileReplyDeleteSubmit": 99,
+ "routes.PollVote": 100,
+ "routes.PollResults": 101,
+ "routes.AccountLogin": 102,
+ "routes.AccountRegister": 103,
+ "routes.AccountLogout": 104,
+ "routes.AccountLoginSubmit": 105,
+ "routes.AccountRegisterSubmit": 106,
+ "routes.DynamicRoute": 107,
+ "routes.UploadedFile": 108,
+ "routes.StaticFile": 109,
+ "routes.RobotsTxt": 110,
+ "routes.SitemapXml": 111,
+ "routes.BadRoute": 112,
}
var reverseRouteMapEnum = map[int]string{
0: "routeAPI",
@@ -315,52 +317,53 @@ var reverseRouteMapEnum = map[int]string{
63: "routePanelGroupsEditPermsSubmit",
64: "routePanelGroupsCreateSubmit",
65: "routePanelBackups",
- 66: "routePanelLogsMod",
- 67: "routePanelDebug",
- 68: "routePanelDashboard",
- 69: "routes.AccountEditCritical",
- 70: "routes.AccountEditCriticalSubmit",
- 71: "routes.AccountEditAvatar",
- 72: "routes.AccountEditAvatarSubmit",
- 73: "routes.AccountEditUsername",
- 74: "routes.AccountEditUsernameSubmit",
- 75: "routeAccountEditEmail",
- 76: "routeAccountEditEmailTokenSubmit",
- 77: "routes.ViewProfile",
- 78: "routes.BanUserSubmit",
- 79: "routes.UnbanUser",
- 80: "routes.ActivateUser",
- 81: "routes.IPSearch",
- 82: "routes.CreateTopicSubmit",
- 83: "routes.EditTopicSubmit",
- 84: "routes.DeleteTopicSubmit",
- 85: "routes.StickTopicSubmit",
- 86: "routes.UnstickTopicSubmit",
- 87: "routes.LockTopicSubmit",
- 88: "routes.UnlockTopicSubmit",
- 89: "routes.MoveTopicSubmit",
- 90: "routes.LikeTopicSubmit",
- 91: "routes.ViewTopic",
- 92: "routes.CreateReplySubmit",
- 93: "routes.ReplyEditSubmit",
- 94: "routes.ReplyDeleteSubmit",
- 95: "routes.ReplyLikeSubmit",
- 96: "routes.ProfileReplyCreateSubmit",
- 97: "routes.ProfileReplyEditSubmit",
- 98: "routes.ProfileReplyDeleteSubmit",
- 99: "routes.PollVote",
- 100: "routes.PollResults",
- 101: "routes.AccountLogin",
- 102: "routes.AccountRegister",
- 103: "routes.AccountLogout",
- 104: "routes.AccountLoginSubmit",
- 105: "routes.AccountRegisterSubmit",
- 106: "routes.DynamicRoute",
- 107: "routes.UploadedFile",
- 108: "routes.StaticFile",
- 109: "routes.RobotsTxt",
- 110: "routes.SitemapXml",
- 111: "routes.BadRoute",
+ 66: "routePanelLogsRegs",
+ 67: "routePanelLogsMod",
+ 68: "routePanelDebug",
+ 69: "routePanelDashboard",
+ 70: "routes.AccountEditCritical",
+ 71: "routes.AccountEditCriticalSubmit",
+ 72: "routes.AccountEditAvatar",
+ 73: "routes.AccountEditAvatarSubmit",
+ 74: "routes.AccountEditUsername",
+ 75: "routes.AccountEditUsernameSubmit",
+ 76: "routeAccountEditEmail",
+ 77: "routeAccountEditEmailTokenSubmit",
+ 78: "routes.ViewProfile",
+ 79: "routes.BanUserSubmit",
+ 80: "routes.UnbanUser",
+ 81: "routes.ActivateUser",
+ 82: "routes.IPSearch",
+ 83: "routes.CreateTopicSubmit",
+ 84: "routes.EditTopicSubmit",
+ 85: "routes.DeleteTopicSubmit",
+ 86: "routes.StickTopicSubmit",
+ 87: "routes.UnstickTopicSubmit",
+ 88: "routes.LockTopicSubmit",
+ 89: "routes.UnlockTopicSubmit",
+ 90: "routes.MoveTopicSubmit",
+ 91: "routes.LikeTopicSubmit",
+ 92: "routes.ViewTopic",
+ 93: "routes.CreateReplySubmit",
+ 94: "routes.ReplyEditSubmit",
+ 95: "routes.ReplyDeleteSubmit",
+ 96: "routes.ReplyLikeSubmit",
+ 97: "routes.ProfileReplyCreateSubmit",
+ 98: "routes.ProfileReplyEditSubmit",
+ 99: "routes.ProfileReplyDeleteSubmit",
+ 100: "routes.PollVote",
+ 101: "routes.PollResults",
+ 102: "routes.AccountLogin",
+ 103: "routes.AccountRegister",
+ 104: "routes.AccountLogout",
+ 105: "routes.AccountLoginSubmit",
+ 106: "routes.AccountRegisterSubmit",
+ 107: "routes.DynamicRoute",
+ 108: "routes.UploadedFile",
+ 109: "routes.StaticFile",
+ 110: "routes.RobotsTxt",
+ 111: "routes.SitemapXml",
+ 112: "routes.BadRoute",
}
var osMapEnum = map[string]int{
"unknown": 0,
@@ -656,7 +659,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
counters.GlobalViewCounter.Bump()
if prefix == "/static" {
- counters.RouteViewCounter.Bump(108)
+ counters.RouteViewCounter.Bump(109)
req.URL.Path += extraData
routes.StaticFile(w, req)
return
@@ -1293,8 +1296,11 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
counters.RouteViewCounter.Bump(65)
err = routePanelBackups(w,req,user,extraData)
- case "/panel/logs/mod/":
+ case "/panel/logs/regs/":
counters.RouteViewCounter.Bump(66)
+ err = routePanelLogsRegs(w,req,user)
+ case "/panel/logs/mod/":
+ counters.RouteViewCounter.Bump(67)
err = routePanelLogsMod(w,req,user)
case "/panel/debug/":
err = common.AdminOnly(w,req,user)
@@ -1303,10 +1309,10 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(67)
+ counters.RouteViewCounter.Bump(68)
err = routePanelDebug(w,req,user)
default:
- counters.RouteViewCounter.Bump(68)
+ counters.RouteViewCounter.Bump(69)
err = routePanelDashboard(w,req,user)
}
if err != nil {
@@ -1321,7 +1327,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(69)
+ counters.RouteViewCounter.Bump(70)
err = routes.AccountEditCritical(w,req,user)
case "/user/edit/critical/submit/":
err = common.NoSessionMismatch(w,req,user)
@@ -1336,7 +1342,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(70)
+ counters.RouteViewCounter.Bump(71)
err = routes.AccountEditCriticalSubmit(w,req,user)
case "/user/edit/avatar/":
err = common.MemberOnly(w,req,user)
@@ -1345,7 +1351,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(71)
+ counters.RouteViewCounter.Bump(72)
err = routes.AccountEditAvatar(w,req,user)
case "/user/edit/avatar/submit/":
err = common.MemberOnly(w,req,user)
@@ -1365,7 +1371,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(72)
+ counters.RouteViewCounter.Bump(73)
err = routes.AccountEditAvatarSubmit(w,req,user)
case "/user/edit/username/":
err = common.MemberOnly(w,req,user)
@@ -1374,7 +1380,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(73)
+ counters.RouteViewCounter.Bump(74)
err = routes.AccountEditUsername(w,req,user)
case "/user/edit/username/submit/":
err = common.NoSessionMismatch(w,req,user)
@@ -1389,7 +1395,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(74)
+ counters.RouteViewCounter.Bump(75)
err = routes.AccountEditUsernameSubmit(w,req,user)
case "/user/edit/email/":
err = common.MemberOnly(w,req,user)
@@ -1398,7 +1404,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(75)
+ counters.RouteViewCounter.Bump(76)
err = routeAccountEditEmail(w,req,user)
case "/user/edit/token/":
err = common.NoSessionMismatch(w,req,user)
@@ -1413,11 +1419,11 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(76)
+ counters.RouteViewCounter.Bump(77)
err = routeAccountEditEmailTokenSubmit(w,req,user,extraData)
default:
req.URL.Path += extraData
- counters.RouteViewCounter.Bump(77)
+ counters.RouteViewCounter.Bump(78)
err = routes.ViewProfile(w,req,user)
}
if err != nil {
@@ -1438,7 +1444,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(78)
+ counters.RouteViewCounter.Bump(79)
err = routes.BanUserSubmit(w,req,user,extraData)
case "/users/unban/":
err = common.NoSessionMismatch(w,req,user)
@@ -1453,7 +1459,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(79)
+ counters.RouteViewCounter.Bump(80)
err = routes.UnbanUser(w,req,user,extraData)
case "/users/activate/":
err = common.NoSessionMismatch(w,req,user)
@@ -1468,7 +1474,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(80)
+ counters.RouteViewCounter.Bump(81)
err = routes.ActivateUser(w,req,user,extraData)
case "/users/ips/":
err = common.MemberOnly(w,req,user)
@@ -1477,7 +1483,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(81)
+ counters.RouteViewCounter.Bump(82)
err = routes.IPSearch(w,req,user)
}
if err != nil {
@@ -1503,7 +1509,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(82)
+ counters.RouteViewCounter.Bump(83)
err = routes.CreateTopicSubmit(w,req,user)
case "/topic/edit/submit/":
err = common.NoSessionMismatch(w,req,user)
@@ -1518,7 +1524,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(83)
+ counters.RouteViewCounter.Bump(84)
err = routes.EditTopicSubmit(w,req,user,extraData)
case "/topic/delete/submit/":
err = common.NoSessionMismatch(w,req,user)
@@ -1534,7 +1540,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
}
req.URL.Path += extraData
- counters.RouteViewCounter.Bump(84)
+ counters.RouteViewCounter.Bump(85)
err = routes.DeleteTopicSubmit(w,req,user)
case "/topic/stick/submit/":
err = common.NoSessionMismatch(w,req,user)
@@ -1549,7 +1555,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(85)
+ counters.RouteViewCounter.Bump(86)
err = routes.StickTopicSubmit(w,req,user,extraData)
case "/topic/unstick/submit/":
err = common.NoSessionMismatch(w,req,user)
@@ -1564,7 +1570,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(86)
+ counters.RouteViewCounter.Bump(87)
err = routes.UnstickTopicSubmit(w,req,user,extraData)
case "/topic/lock/submit/":
err = common.NoSessionMismatch(w,req,user)
@@ -1580,7 +1586,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
}
req.URL.Path += extraData
- counters.RouteViewCounter.Bump(87)
+ counters.RouteViewCounter.Bump(88)
err = routes.LockTopicSubmit(w,req,user)
case "/topic/unlock/submit/":
err = common.NoSessionMismatch(w,req,user)
@@ -1595,7 +1601,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(88)
+ counters.RouteViewCounter.Bump(89)
err = routes.UnlockTopicSubmit(w,req,user,extraData)
case "/topic/move/submit/":
err = common.NoSessionMismatch(w,req,user)
@@ -1610,7 +1616,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(89)
+ counters.RouteViewCounter.Bump(90)
err = routes.MoveTopicSubmit(w,req,user,extraData)
case "/topic/like/submit/":
err = common.NoSessionMismatch(w,req,user)
@@ -1631,10 +1637,10 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(90)
+ counters.RouteViewCounter.Bump(91)
err = routes.LikeTopicSubmit(w,req,user,extraData)
default:
- counters.RouteViewCounter.Bump(91)
+ counters.RouteViewCounter.Bump(92)
err = routes.ViewTopic(w,req,user, extraData)
}
if err != nil {
@@ -1660,7 +1666,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(92)
+ counters.RouteViewCounter.Bump(93)
err = routes.CreateReplySubmit(w,req,user)
case "/reply/edit/submit/":
err = common.NoSessionMismatch(w,req,user)
@@ -1675,7 +1681,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(93)
+ counters.RouteViewCounter.Bump(94)
err = routes.ReplyEditSubmit(w,req,user,extraData)
case "/reply/delete/submit/":
err = common.NoSessionMismatch(w,req,user)
@@ -1690,7 +1696,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(94)
+ counters.RouteViewCounter.Bump(95)
err = routes.ReplyDeleteSubmit(w,req,user,extraData)
case "/reply/like/submit/":
err = common.NoSessionMismatch(w,req,user)
@@ -1711,7 +1717,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(95)
+ counters.RouteViewCounter.Bump(96)
err = routes.ReplyLikeSubmit(w,req,user,extraData)
}
if err != nil {
@@ -1732,7 +1738,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(96)
+ counters.RouteViewCounter.Bump(97)
err = routes.ProfileReplyCreateSubmit(w,req,user)
case "/profile/reply/edit/submit/":
err = common.NoSessionMismatch(w,req,user)
@@ -1747,7 +1753,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(97)
+ counters.RouteViewCounter.Bump(98)
err = routes.ProfileReplyEditSubmit(w,req,user,extraData)
case "/profile/reply/delete/submit/":
err = common.NoSessionMismatch(w,req,user)
@@ -1762,7 +1768,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(98)
+ counters.RouteViewCounter.Bump(99)
err = routes.ProfileReplyDeleteSubmit(w,req,user,extraData)
}
if err != nil {
@@ -1783,10 +1789,10 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(99)
+ counters.RouteViewCounter.Bump(100)
err = routes.PollVote(w,req,user,extraData)
case "/poll/results/":
- counters.RouteViewCounter.Bump(100)
+ counters.RouteViewCounter.Bump(101)
err = routes.PollResults(w,req,user,extraData)
}
if err != nil {
@@ -1795,10 +1801,10 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
case "/accounts":
switch(req.URL.Path) {
case "/accounts/login/":
- counters.RouteViewCounter.Bump(101)
+ counters.RouteViewCounter.Bump(102)
err = routes.AccountLogin(w,req,user)
case "/accounts/create/":
- counters.RouteViewCounter.Bump(102)
+ counters.RouteViewCounter.Bump(103)
err = routes.AccountRegister(w,req,user)
case "/accounts/logout/":
err = common.NoSessionMismatch(w,req,user)
@@ -1813,7 +1819,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(103)
+ counters.RouteViewCounter.Bump(104)
err = routes.AccountLogout(w,req,user)
case "/accounts/login/submit/":
err = common.ParseForm(w,req,user)
@@ -1822,7 +1828,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(104)
+ counters.RouteViewCounter.Bump(105)
err = routes.AccountLoginSubmit(w,req,user)
case "/accounts/create/submit/":
err = common.ParseForm(w,req,user)
@@ -1831,7 +1837,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
return
}
- counters.RouteViewCounter.Bump(105)
+ counters.RouteViewCounter.Bump(106)
err = routes.AccountRegisterSubmit(w,req,user)
}
if err != nil {
@@ -1848,7 +1854,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
common.NotFound(w,req,nil)
return
}
- counters.RouteViewCounter.Bump(107)
+ counters.RouteViewCounter.Bump(108)
req.URL.Path += extraData
// TODO: Find a way to propagate errors up from this?
router.UploadHandler(w,req) // TODO: Count these views
@@ -1857,14 +1863,14 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
// TODO: Add support for favicons and robots.txt files
switch(extraData) {
case "robots.txt":
- counters.RouteViewCounter.Bump(109)
+ counters.RouteViewCounter.Bump(110)
err = routes.RobotsTxt(w,req)
if err != nil {
router.handleError(err,w,req,user)
}
return
/*case "sitemap.xml":
- counters.RouteViewCounter.Bump(110)
+ counters.RouteViewCounter.Bump(111)
err = routes.SitemapXml(w,req)
if err != nil {
router.handleError(err,w,req,user)
@@ -1893,7 +1899,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
router.RUnlock()
if ok {
- counters.RouteViewCounter.Bump(106) // TODO: Be more specific about *which* dynamic route it is
+ counters.RouteViewCounter.Bump(107) // TODO: Be more specific about *which* dynamic route it is
req.URL.Path += extraData
err = handle(w,req,user)
if err != nil {
@@ -1908,7 +1914,7 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
} else {
router.DumpRequest(req,"Bad Route")
}
- counters.RouteViewCounter.Bump(111)
+ counters.RouteViewCounter.Bump(112)
common.NotFound(w,req,nil)
}
}
diff --git a/langs/english.json b/langs/english.json
index ff7dc157..241b6394 100644
--- a/langs/english.json
+++ b/langs/english.json
@@ -96,8 +96,9 @@
"panel_themes_menus":"Menu Manager",
"panel_themes_menus_edit":"Menu Editor",
"panel_backups":"Backups",
- "panel_mod_logs":"Moderation Logs",
- "panel_admin_logs":"Administration Logs",
+ "panel_registration_logs":"Registration Logs",
+ "panel_mod_logs":"Mod Action Logs",
+ "panel_admin_logs":"Admin Action Logs",
"panel_debug":"Debug"
},
@@ -547,8 +548,9 @@
"panel_menu_statistics_referrers":"Referrers",
"panel_menu_reports":"Reports",
"panel_menu_logs":"Logs",
- "panel_menu_logs_moderators":"Moderators",
- "panel_menu_logs_administrators":"Administrators",
+ "panel_menu_logs_registrations":"Registrations",
+ "panel_menu_logs_moderators":"Mod Actions",
+ "panel_menu_logs_administrators":"Admin Actions",
"panel_menu_system":"System",
"panel_menu_plugins":"Plugins",
"panel_menu_backups":"Backups",
@@ -680,10 +682,12 @@
"panel_statistics_operating_systems_no_operating_systems":"No operating systems could be found in the selected time range",
"panel_logs_menu_head":"Logs",
- "panel_logs_menu_moderation":"Moderation Logs",
- "panel_logs_menu_administration":"Administration Logs",
- "panel_logs_moderation_head":"Moderation Logs",
- "panel_logs_administration_head":"Administration Logs",
+ "panel_logs_registration_head":"Registrations",
+ "panel_logs_registration_attempt":"Attempt",
+ "panel_logs_registration_email":"email",
+ "panel_logs_registration_reason":"reason",
+ "panel_logs_moderation_head":"Mod Action Logs",
+ "panel_logs_administration_head":"Admin Action Logs",
"panel_plugins_head":"Plugins",
"panel_plugins_author_prefix":"Author: ",
diff --git a/main.go b/main.go
index aceeed77..863f4f8c 100644
--- a/main.go
+++ b/main.go
@@ -107,11 +107,15 @@ func afterDBInit() (err error) {
}
log.Print("Initialising the stores")
- common.ModLogs, err = common.NewModLogStore()
+ common.RegLogs, err = common.NewRegLogStore(acc)
if err != nil {
return err
}
- common.AdminLogs, err = common.NewAdminLogStore()
+ common.ModLogs, err = common.NewModLogStore(acc)
+ if err != nil {
+ return err
+ }
+ common.AdminLogs, err = common.NewAdminLogStore(acc)
if err != nil {
return err
}
diff --git a/member_routes.go b/member_routes.go
index dc9d6c6e..175c01d1 100644
--- a/member_routes.go
+++ b/member_routes.go
@@ -42,13 +42,13 @@ func routeReportSubmit(w http.ResponseWriter, r *http.Request, user common.User,
return common.InternalError(err, w, r)
}
- err = stmts.getUserName.QueryRow(userReply.ParentID).Scan(&title)
+ profileOwner, err := common.Users.Get(userReply.ParentID)
if err == ErrNoRows {
return common.LocalError("We weren't able to find the profile the reported post is supposed to be on", w, r, user)
} else if err != nil {
return common.InternalError(err, w, r)
}
- title = "Profile: " + title
+ title = "Profile: " + profileOwner.Name
content = userReply.Content + "\n\nOriginal Post: @" + strconv.Itoa(userReply.ParentID)
} else if itemType == "topic" {
err = stmts.getTopicBasic.QueryRow(itemID).Scan(&title, &content)
diff --git a/panel_routes.go b/panel_routes.go
index adc6704e..77575f94 100644
--- a/panel_routes.go
+++ b/panel_routes.go
@@ -2701,6 +2701,31 @@ func routePanelBackups(w http.ResponseWriter, r *http.Request, user common.User,
return panelRenderTemplate("panel_backups", w, r, user, &pi)
}
+func routePanelLogsRegs(w http.ResponseWriter, r *http.Request, user common.User) common.RouteError {
+ headerVars, stats, ferr := common.PanelUserCheck(w, r, &user)
+ if ferr != nil {
+ return ferr
+ }
+
+ logCount := common.RegLogs.GlobalCount()
+ page, _ := strconv.Atoi(r.FormValue("page"))
+ perPage := 10
+ offset, page, lastPage := common.PageOffset(logCount, page, perPage)
+
+ logs, err := common.RegLogs.GetOffset(offset, perPage)
+ if err != nil {
+ return common.InternalError(err, w, r)
+ }
+ var llist = make([]common.PageRegLogItem, len(logs))
+ for index, log := range logs {
+ llist[index] = common.PageRegLogItem{log, strings.Replace(strings.TrimSuffix(log.FailureReason,"|"), "|", " | ", -1)}
+ }
+
+ pageList := common.Paginate(logCount, perPage, 5)
+ pi := common.PanelRegLogsPage{common.GetTitlePhrase("panel_registration_logs"), user, headerVars, stats, "logs", llist, common.Paginator{pageList, page, lastPage}}
+ return panelRenderTemplate("panel_reglogs", w, r, user, &pi)
+}
+
// TODO: Log errors when something really screwy is going on?
func handleUnknownUser(user *common.User, err error) *common.User {
if err != nil {
@@ -2720,7 +2745,6 @@ func topicElementTypeAction(action string, elementType string, elementID int, ac
if action == "delete" {
return fmt.Sprintf("Topic #%d was deleted by %s", elementID, actor.Link, actor.Name)
}
-
switch action {
case "lock":
out = "%s was locked by %s"
@@ -2778,32 +2802,19 @@ func routePanelLogsMod(w http.ResponseWriter, r *http.Request, user common.User)
perPage := 10
offset, page, lastPage := common.PageOffset(logCount, page, perPage)
- rows, err := stmts.getModlogsOffset.Query(offset, perPage)
+ logs, err := common.ModLogs.GetOffset(offset, perPage)
if err != nil {
return common.InternalError(err, w, r)
}
- defer rows.Close()
-
- var logs []common.LogItem
- var action, elementType, ipaddress, doneAt string
- var elementID, actorID int
- for rows.Next() {
- err := rows.Scan(&action, &elementID, &elementType, &ipaddress, &actorID, &doneAt)
- if err != nil {
- return common.InternalError(err, w, r)
- }
-
- actor := handleUnknownUser(common.Users.Get(actorID))
- action = modlogsElementType(action, elementType, elementID, actor)
- logs = append(logs, common.LogItem{Action: template.HTML(action), IPAddress: ipaddress, DoneAt: doneAt})
- }
- err = rows.Err()
- if err != nil {
- return common.InternalError(err, w, r)
+ var llist = make([]common.PageLogItem, len(logs))
+ for index, log := range logs {
+ actor := handleUnknownUser(common.Users.Get(log.ActorID))
+ action := modlogsElementType(log.Action, log.ElementType, log.ElementID, actor)
+ llist[index] = common.PageLogItem{Action: template.HTML(action), IPAddress: log.IPAddress, DoneAt: log.DoneAt}
}
pageList := common.Paginate(logCount, perPage, 5)
- pi := common.PanelLogsPage{common.GetTitlePhrase("panel_mod_logs"), user, headerVars, stats, "logs", logs, common.Paginator{pageList, page, lastPage}}
+ pi := common.PanelLogsPage{common.GetTitlePhrase("panel_mod_logs"), user, headerVars, stats, "logs", llist, common.Paginator{pageList, page, lastPage}}
return panelRenderTemplate("panel_modlogs", w, r, user, &pi)
}
@@ -2818,32 +2829,19 @@ func routePanelLogsAdmin(w http.ResponseWriter, r *http.Request, user common.Use
perPage := 10
offset, page, lastPage := common.PageOffset(logCount, page, perPage)
- rows, err := stmts.getAdminlogsOffset.Query(offset, perPage)
+ logs, err := common.AdminLogs.GetOffset(offset, perPage)
if err != nil {
return common.InternalError(err, w, r)
}
- defer rows.Close()
-
- var logs []common.LogItem
- var action, elementType, ipaddress, doneAt string
- var elementID, actorID int
- for rows.Next() {
- err := rows.Scan(&action, &elementID, &elementType, &ipaddress, &actorID, &doneAt)
- if err != nil {
- return common.InternalError(err, w, r)
- }
-
- actor := handleUnknownUser(common.Users.Get(actorID))
- action = modlogsElementType(action, elementType, elementID, actor)
- logs = append(logs, common.LogItem{Action: template.HTML(action), IPAddress: ipaddress, DoneAt: doneAt})
- }
- err = rows.Err()
- if err != nil {
- return common.InternalError(err, w, r)
+ var llist = make([]common.PageLogItem, len(logs))
+ for index, log := range logs {
+ actor := handleUnknownUser(common.Users.Get(log.ActorID))
+ action := modlogsElementType(log.Action, log.ElementType, log.ElementID, actor)
+ llist[index] = common.PageLogItem{Action: template.HTML(action), IPAddress: log.IPAddress, DoneAt: log.DoneAt}
}
pageList := common.Paginate(logCount, perPage, 5)
- pi := common.PanelLogsPage{common.GetTitlePhrase("panel_admin_logs"), user, headerVars, stats, "logs", logs, common.Paginator{pageList, page, lastPage}}
+ pi := common.PanelLogsPage{common.GetTitlePhrase("panel_admin_logs"), user, headerVars, stats, "logs", llist, common.Paginator{pageList, page, lastPage}}
return panelRenderTemplate("panel_adminlogs", w, r, user, &pi)
}
diff --git a/patcher/main.go b/patcher/main.go
index a87ce9aa..00ba46b0 100644
--- a/patcher/main.go
+++ b/patcher/main.go
@@ -2,7 +2,6 @@ package main
import (
"bufio"
- "database/sql"
"encoding/json"
"fmt"
"io/ioutil"
@@ -17,6 +16,12 @@ import (
_ "github.com/go-sql-driver/mysql"
)
+var patches = make(map[int]func(*bufio.Scanner) error)
+
+func addPatch(index int, handle func(*bufio.Scanner) error) {
+ patches[index] = handle
+}
+
func main() {
scanner := bufio.NewScanner(os.Stdin)
@@ -92,55 +97,21 @@ func patcher(scanner *bufio.Scanner) error {
}
fmt.Println("Applying the patches")
- if dbVersion < 2 {
- if dbVersion < 1 {
- err := patch0(scanner)
- if err != nil {
- return err
- }
+ var pslice = make([]func(*bufio.Scanner) error, len(patches))
+ for i := 0; i < len(patches); i++ {
+ pslice[i] = patches[i]
+ }
+
+ // Run the queued up patches
+ for index, patch := range pslice {
+ if dbVersion > index {
+ continue
}
- return patch1(scanner)
- }
- return patch2(scanner)
-}
-
-func execStmt(stmt *sql.Stmt, err error) error {
- if err != nil {
- return err
- }
- _, err = stmt.Exec()
- return err
-}
-
-/*func eachUserQuick(handle func(int)) error {
- stmt, err := qgen.Builder.Select("users").Orderby("uid desc").Limit(1).Prepare()
- if err != nil {
- return err
- }
-
- var topID int
- err := stmt.QueryRow(topID)
- if err != nil {
- return err
- }
-
- for i := 1; i <= topID; i++ {
- err = handle(i)
+ err := patch(scanner)
if err != nil {
return err
}
}
-}*/
-func eachUser(handle func(int) error) error {
- acc := qgen.Builder.Accumulator()
- err := acc.Select("users").Each(func(rows *sql.Rows) error {
- var uid int
- err := rows.Scan(&uid)
- if err != nil {
- return err
- }
- return handle(uid)
- })
- return err
+ return nil
}
diff --git a/patcher/patches.go b/patcher/patches.go
index 42ce668c..e90419fc 100644
--- a/patcher/patches.go
+++ b/patcher/patches.go
@@ -7,6 +7,13 @@ import (
"../query_gen/lib"
)
+func init() {
+ addPatch(0, patch0)
+ addPatch(1, patch1)
+ addPatch(2, patch2)
+ addPatch(3, patch3)
+}
+
func patch0(scanner *bufio.Scanner) (err error) {
err = execStmt(qgen.Builder.DropTable("menus"))
if err != nil {
@@ -206,3 +213,25 @@ func patch2(scanner *bufio.Scanner) error {
return nil
}
+
+func patch3(scanner *bufio.Scanner) error {
+ err := execStmt(qgen.Builder.CreateTable("registration_logs", "", "",
+ []qgen.DBTableColumn{
+ qgen.DBTableColumn{"rlid", "int", 0, false, true, ""},
+ qgen.DBTableColumn{"username", "varchar", 100, false, false, ""},
+ qgen.DBTableColumn{"email", "varchar", 100, false, false, ""},
+ qgen.DBTableColumn{"failureReason", "varchar", 100, false, false, ""},
+ qgen.DBTableColumn{"success", "bool", 0, false, false, "0"}, // Did this attempt succeed?
+ qgen.DBTableColumn{"ipaddress", "varchar", 200, false, false, ""},
+ qgen.DBTableColumn{"doneAt", "createdAt", 0, false, false, ""},
+ },
+ []qgen.DBTableKey{
+ qgen.DBTableKey{"rlid", "primary"},
+ },
+ ))
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
diff --git a/patcher/utils.go b/patcher/utils.go
new file mode 100644
index 00000000..c34aca1b
--- /dev/null
+++ b/patcher/utils.go
@@ -0,0 +1,45 @@
+package main
+
+import "database/sql"
+import "../query_gen/lib"
+
+func execStmt(stmt *sql.Stmt, err error) error {
+ if err != nil {
+ return err
+ }
+ _, err = stmt.Exec()
+ return err
+}
+
+/*func eachUserQuick(handle func(int)) error {
+ stmt, err := qgen.Builder.Select("users").Orderby("uid desc").Limit(1).Prepare()
+ if err != nil {
+ return err
+ }
+
+ var topID int
+ err := stmt.QueryRow(topID)
+ if err != nil {
+ return err
+ }
+
+ for i := 1; i <= topID; i++ {
+ err = handle(i)
+ if err != nil {
+ return err
+ }
+ }
+}*/
+
+func eachUser(handle func(int) error) error {
+ acc := qgen.Builder.Accumulator()
+ err := acc.Select("users").Each(func(rows *sql.Rows) error {
+ var uid int
+ err := rows.Scan(&uid)
+ if err != nil {
+ return err
+ }
+ return handle(uid)
+ })
+ return err
+}
diff --git a/query_gen/main.go b/query_gen/main.go
index eed0036b..e8386b48 100644
--- a/query_gen/main.go
+++ b/query_gen/main.go
@@ -265,19 +265,9 @@ func writeSelects(adapter qgen.Adapter) error {
build.Select("isThemeDefault").Table("themes").Columns("default").Where("uname = ?").Parse()
- build.Select("getModlogs").Table("moderation_logs").Columns("action, elementID, elementType, ipaddress, actorID, doneAt").Parse()
-
- build.Select("getModlogsOffset").Table("moderation_logs").Columns("action, elementID, elementType, ipaddress, actorID, doneAt").Orderby("doneAt DESC").Limit("?,?").Parse()
-
- build.Select("getAdminlogsOffset").Table("administration_logs").Columns("action, elementID, elementType, ipaddress, actorID, doneAt").Orderby("doneAt DESC").Limit("?,?").Parse()
-
- build.Select("getTopicFID").Table("topics").Columns("parentID").Where("tid = ?").Parse()
-
- build.Select("getUserName").Table("users").Columns("name").Where("uid = ?").Parse()
-
build.Select("getEmailsByUser").Table("emails").Columns("email, validated, token").Where("uid = ?").Parse()
- build.Select("getTopicBasic").Table("topics").Columns("title, content").Where("tid = ?").Parse()
+ build.Select("getTopicBasic").Table("topics").Columns("title, content").Where("tid = ?").Parse() // TODO: Comment this out and see if anything breaks
build.Select("forumEntryExists").Table("forums").Columns("fid").Where("name = ''").Orderby("fid ASC").Limit("0,1").Parse()
@@ -315,8 +305,6 @@ func writeInserts(adapter qgen.Adapter) error {
func writeUpdates(adapter qgen.Adapter) error {
build := adapter.Builder()
- build.Update("editReply").Table("replies").Set("content = ?, parsed_content = ?").Where("rid = ?").Parse()
-
build.Update("updatePlugin").Table("plugins").Set("active = ?").Where("uname = ?").Parse()
build.Update("updatePluginInstall").Table("plugins").Set("installed = ?").Where("uname = ?").Parse()
diff --git a/query_gen/tables.go b/query_gen/tables.go
index dfcac590..01f9a0b8 100644
--- a/query_gen/tables.go
+++ b/query_gen/tables.go
@@ -411,18 +411,20 @@ func createTables(adapter qgen.Adapter) error {
},
)
- /*
- qgen.Install.CreateTable("registration_logs", "", "",
- []qgen.DBTableColumn{
- qgen.DBTableColumn{"username", "varchar", 100, false, false, ""},
- qgen.DBTableColumn{"email", "varchar", 100, false, false, ""},
- qgen.DBTableColumn{"failureReason", "varchar", 100, false, false, ""},
- qgen.DBTableColumn{"success", "int", 0, false, false, "0"}, // Did this attempt succeed?
- qgen.DBTableColumn{"doneAt", "createdAt", 0, false, false, ""},
- },
- []qgen.DBTableKey{},
- )
- */
+ qgen.Install.CreateTable("registration_logs", "", "",
+ []qgen.DBTableColumn{
+ qgen.DBTableColumn{"rlid", "int", 0, false, true, ""},
+ qgen.DBTableColumn{"username", "varchar", 100, false, false, ""},
+ qgen.DBTableColumn{"email", "varchar", 100, false, false, ""},
+ qgen.DBTableColumn{"failureReason", "varchar", 100, false, false, ""},
+ qgen.DBTableColumn{"success", "bool", 0, false, false, "0"}, // Did this attempt succeed?
+ qgen.DBTableColumn{"ipaddress", "varchar", 200, false, false, ""},
+ qgen.DBTableColumn{"doneAt", "createdAt", 0, false, false, ""},
+ },
+ []qgen.DBTableKey{
+ qgen.DBTableKey{"rlid", "primary"},
+ },
+ )
qgen.Install.CreateTable("moderation_logs", "", "",
[]qgen.DBTableColumn{
diff --git a/router_gen/routes.go b/router_gen/routes.go
index a7bf715b..8bc6ad63 100644
--- a/router_gen/routes.go
+++ b/router_gen/routes.go
@@ -194,6 +194,7 @@ func buildPanelRoutes() {
Action("routePanelGroupsCreateSubmit", "/panel/groups/create/"),
View("routePanelBackups", "/panel/backups/", "extraData").Before("SuperAdminOnly"), // TODO: Test
+ View("routePanelLogsRegs", "/panel/logs/regs/"),
View("routePanelLogsMod", "/panel/logs/mod/"),
View("routePanelDebug", "/panel/debug/").Before("AdminOnly"),
)
diff --git a/routes/account.go b/routes/account.go
index 2f6b45a3..9127014c 100644
--- a/routes/account.go
+++ b/routes/account.go
@@ -108,28 +108,47 @@ func AccountRegister(w http.ResponseWriter, r *http.Request, user common.User) c
func AccountRegisterSubmit(w http.ResponseWriter, r *http.Request, user common.User) common.RouteError {
headerLite, _ := common.SimpleUserCheck(w, r, &user)
- username := html.EscapeString(strings.Replace(r.PostFormValue("username"), "\n", "", -1))
- if username == "" {
- return common.LocalError("You didn't put in a username.", w, r, user)
+ // TODO: Should we push multiple validation errors to the user instead of just one?
+ var regSuccess = true
+ var regErrMsg = ""
+ var regErrReason = ""
+ var regError = func(userMsg string, reason string) {
+ regSuccess = false
+ if regErrMsg == "" {
+ regErrMsg = userMsg
+ }
+ regErrReason += reason + "|"
}
+
+ username := html.EscapeString(strings.Replace(r.PostFormValue("username"), "\n", "", -1))
email := html.EscapeString(strings.Replace(r.PostFormValue("email"), "\n", "", -1))
+ if username == "" {
+ regError("You didn't put in a username.", "no-username")
+ }
if email == "" {
- return common.LocalError("You didn't put in an email.", w, r, user)
+ regError("You didn't put in an email.", "no-email")
}
password := r.PostFormValue("password")
// ? Move this into Create()? What if we want to programatically set weak passwords for tests?
err := common.WeakPassword(password, username, email)
if err != nil {
- return common.LocalError(err.Error(), w, r, user)
+ regError(err.Error(), "weak-password")
+ } else {
+ // Do the two inputted passwords match..?
+ confirmPassword := r.PostFormValue("confirm_password")
+ if password != confirmPassword {
+ regError("The two passwords don't match.", "password-mismatch")
+ }
}
- confirmPassword := r.PostFormValue("confirm_password")
- common.DebugLog("Registration Attempt! Username: " + username) // TODO: Add more controls over what is logged when?
-
- // Do the two inputted passwords match..?
- if password != confirmPassword {
- return common.LocalError("The two passwords don't match.", w, r, user)
+ regLog := common.RegLogItem{Username: username, Email: email, FailureReason: regErrReason, Success: regSuccess, IPAddress: user.LastIP}
+ _, err = regLog.Create()
+ if err != nil {
+ return common.InternalError(err, w, r)
+ }
+ if !regSuccess {
+ return common.LocalError(regErrMsg, w, r, user)
}
var active bool
@@ -142,12 +161,30 @@ func AccountRegisterSubmit(w http.ResponseWriter, r *http.Request, user common.U
group = common.Config.ActivationGroup
}
+ // TODO: Do the registration attempt logging a little less messily (without having to amend the result after the insert)
uid, err := common.Users.Create(username, password, email, group, active)
- if err == common.ErrAccountExists {
- return common.LocalError("This username isn't available. Try another.", w, r, user)
- } else if err == common.ErrLongUsername {
- return common.LocalError("The username is too long, max: "+strconv.Itoa(common.Config.MaxUsernameLength), w, r, user)
- } else if err != nil {
+ if err != nil {
+ regLog.Success = false
+ if err == common.ErrAccountExists {
+ regLog.FailureReason += "username-exists"
+ err = regLog.Commit()
+ if err != nil {
+ return common.InternalError(err, w, r)
+ }
+ return common.LocalError("This username isn't available. Try another.", w, r, user)
+ } else if err == common.ErrLongUsername {
+ regLog.FailureReason += "username-too-long"
+ err = regLog.Commit()
+ if err != nil {
+ return common.InternalError(err, w, r)
+ }
+ return common.LocalError("The username is too long, max: "+strconv.Itoa(common.Config.MaxUsernameLength), w, r, user)
+ }
+ regLog.FailureReason += "internal-error"
+ err2 := regLog.Commit()
+ if err2 != nil {
+ return common.InternalError(err2, w, r)
+ }
return common.InternalError(err, w, r)
}
@@ -161,7 +198,6 @@ func AccountRegisterSubmit(w http.ResponseWriter, r *http.Request, user common.U
// TODO: Add an EmailStore and move this there
acc := qgen.Builder.Accumulator()
_, err = acc.Insert("emails").Columns("email, uid, validated, token").Fields("?,?,?,?").Exec(email, uid, 0, token)
- //_, err = stmts.addEmail.Exec(email, uid, 0, token)
if err != nil {
return common.InternalError(err, w, r)
}
diff --git a/schema/mssql/query_registration_logs.sql b/schema/mssql/query_registration_logs.sql
new file mode 100644
index 00000000..95726a86
--- /dev/null
+++ b/schema/mssql/query_registration_logs.sql
@@ -0,0 +1,10 @@
+CREATE TABLE [registration_logs] (
+ [rlid] int not null IDENTITY,
+ [username] nvarchar (100) not null,
+ [email] nvarchar (100) not null,
+ [failureReason] nvarchar (100) not null,
+ [success] bool DEFAULT 0 not null,
+ [ipaddress] nvarchar (200) not null,
+ [doneAt] datetime not null,
+ primary key([rlid])
+);
\ No newline at end of file
diff --git a/schema/mysql/query_registration_logs.sql b/schema/mysql/query_registration_logs.sql
new file mode 100644
index 00000000..4ff25633
--- /dev/null
+++ b/schema/mysql/query_registration_logs.sql
@@ -0,0 +1,10 @@
+CREATE TABLE `registration_logs` (
+ `rlid` int not null AUTO_INCREMENT,
+ `username` varchar(100) not null,
+ `email` varchar(100) not null,
+ `failureReason` varchar(100) not null,
+ `success` bool DEFAULT 0 not null,
+ `ipaddress` varchar(200) not null,
+ `doneAt` datetime not null,
+ primary key(`rlid`)
+);
\ No newline at end of file
diff --git a/schema/pgsql/query_registration_logs.sql b/schema/pgsql/query_registration_logs.sql
new file mode 100644
index 00000000..59970699
--- /dev/null
+++ b/schema/pgsql/query_registration_logs.sql
@@ -0,0 +1,10 @@
+CREATE TABLE `registration_logs` (
+ `rlid` serial not null,
+ `username` varchar (100) not null,
+ `email` varchar (100) not null,
+ `failureReason` varchar (100) not null,
+ `success` bool DEFAULT 0 not null,
+ `ipaddress` varchar (200) not null,
+ `doneAt` timestamp not null,
+ primary key(`rlid`)
+);
\ No newline at end of file
diff --git a/schema/schema.json b/schema/schema.json
index 1e592ab3..79cd1f5a 100644
--- a/schema/schema.json
+++ b/schema/schema.json
@@ -1,5 +1,5 @@
{
- "DBVersion":"3",
+ "DBVersion":"4",
"DynamicFileVersion":"0",
"MinGoVersion":"1.10",
"MinVersion":""
diff --git a/template_error.go b/template_error.go
deleted file mode 100644
index d7e96522..00000000
--- a/template_error.go
+++ /dev/null
@@ -1,121 +0,0 @@
-// +build !no_templategen
-
-// Code generated by Gosora. More below:
-/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
-package main
-import "io"
-import "./common"
-
-var error_tmpl_phrase_id int
-
-// nolint
-func init() {
- common.Template_error_handle = Template_error
- common.Ctemplates = append(common.Ctemplates,"error")
- common.TmplPtrMap["error"] = &common.Template_error_handle
- common.TmplPtrMap["o_error"] = Template_error
- error_tmpl_phrase_id = common.RegisterTmplPhraseNames([]string{
- "menu_hamburger_tooltip",
- "error_head",
- "footer_powered_by",
- "footer_made_with_love",
- "footer_theme_selector_aria",
- })
-}
-
-// nolint
-func Template_error(tmpl_error_vars common.Page, w io.Writer) error {
-var phrases = common.GetTmplPhrasesBytes(error_tmpl_phrase_id)
-w.Write(header_frags[0])
-w.Write([]byte(tmpl_error_vars.Title))
-w.Write(header_frags[1])
-w.Write([]byte(tmpl_error_vars.Header.Site.Name))
-w.Write(header_frags[2])
-w.Write([]byte(tmpl_error_vars.Header.Theme.Name))
-w.Write(header_frags[3])
-if len(tmpl_error_vars.Header.Stylesheets) != 0 {
-for _, item := range tmpl_error_vars.Header.Stylesheets {
-w.Write(header_frags[4])
-w.Write([]byte(item))
-w.Write(header_frags[5])
-}
-}
-w.Write(header_frags[6])
-if len(tmpl_error_vars.Header.Scripts) != 0 {
-for _, item := range tmpl_error_vars.Header.Scripts {
-w.Write(header_frags[7])
-w.Write([]byte(item))
-w.Write(header_frags[8])
-}
-}
-w.Write(header_frags[9])
-w.Write([]byte(tmpl_error_vars.CurrentUser.Session))
-w.Write(header_frags[10])
-w.Write([]byte(tmpl_error_vars.Header.Site.URL))
-w.Write(header_frags[11])
-if tmpl_error_vars.Header.MetaDesc != "" {
-w.Write(header_frags[12])
-w.Write([]byte(tmpl_error_vars.Header.MetaDesc))
-w.Write(header_frags[13])
-}
-w.Write(header_frags[14])
-if !tmpl_error_vars.CurrentUser.IsSuperMod {
-w.Write(header_frags[15])
-}
-w.Write(header_frags[16])
-w.Write([]byte(common.BuildWidget("leftOfNav",tmpl_error_vars.Header)))
-w.Write(header_frags[17])
-w.Write([]byte(tmpl_error_vars.Header.Site.ShortName))
-w.Write(header_frags[18])
-w.Write([]byte(common.BuildWidget("topMenu",tmpl_error_vars.Header)))
-w.Write(header_frags[19])
-w.Write(phrases[0])
-w.Write(header_frags[20])
-w.Write([]byte(common.BuildWidget("rightOfNav",tmpl_error_vars.Header)))
-w.Write(header_frags[21])
-if tmpl_error_vars.Header.Widgets.RightSidebar != "" {
-w.Write(header_frags[22])
-}
-w.Write(header_frags[23])
-if len(tmpl_error_vars.Header.NoticeList) != 0 {
-for _, item := range tmpl_error_vars.Header.NoticeList {
-w.Write(notice_frags[0])
-w.Write([]byte(item))
-w.Write(notice_frags[1])
-}
-}
-w.Write(header_frags[24])
-w.Write(error_frags[0])
-w.Write(phrases[1])
-w.Write(error_frags[1])
-w.Write([]byte(tmpl_error_vars.Something.(string)))
-w.Write(error_frags[2])
-w.Write(footer_frags[0])
-w.Write([]byte(common.BuildWidget("footer",tmpl_error_vars.Header)))
-w.Write(footer_frags[1])
-w.Write(phrases[2])
-w.Write(footer_frags[2])
-w.Write(phrases[3])
-w.Write(footer_frags[3])
-w.Write(phrases[4])
-w.Write(footer_frags[4])
-if len(tmpl_error_vars.Header.Themes) != 0 {
-for _, item := range tmpl_error_vars.Header.Themes {
-if !item.HideFromThemes {
-w.Write(footer_frags[5])
-w.Write([]byte(item.Name))
-w.Write(footer_frags[6])
-if tmpl_error_vars.Header.Theme.Name == item.Name {
-w.Write(footer_frags[7])
-}
-w.Write(footer_frags[8])
-w.Write([]byte(item.FriendlyName))
-w.Write(footer_frags[9])
-}
-}
-}
-w.Write(footer_frags[10])
-w.Write([]byte(common.BuildWidget("rightSidebar",tmpl_error_vars.Header)))
-w.Write(footer_frags[11])
-return nil
-}
diff --git a/template_forum.go b/template_forum.go
deleted file mode 100644
index 1cb1b047..00000000
--- a/template_forum.go
+++ /dev/null
@@ -1,370 +0,0 @@
-// +build !no_templategen
-
-// Code generated by Gosora. More below:
-/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
-package main
-import "strconv"
-import "io"
-import "./common"
-
-var forum_tmpl_phrase_id int
-
-// nolint
-func init() {
- common.Template_forum_handle = Template_forum
- common.Ctemplates = append(common.Ctemplates,"forum")
- common.TmplPtrMap["forum"] = &common.Template_forum_handle
- common.TmplPtrMap["o_forum"] = Template_forum
- forum_tmpl_phrase_id = common.RegisterTmplPhraseNames([]string{
- "menu_hamburger_tooltip",
- "paginator_prev_page_aria",
- "paginator_less_than",
- "paginator_next_page_aria",
- "paginator_greater_than",
- "topic_list_create_topic_tooltip",
- "topic_list_create_topic_aria",
- "topic_list_moderate_tooltip",
- "topic_list_moderate_aria",
- "forum_locked_tooltip",
- "forum_locked_aria",
- "topic_list_what_to_do",
- "topic_list_moderate_delete",
- "topic_list_moderate_lock",
- "topic_list_moderate_move",
- "topic_list_moderate_run",
- "quick_topic_aria",
- "quick_topic_avatar_alt",
- "quick_topic_avatar_tooltip",
- "quick_topic_whatsup",
- "quick_topic_content_placeholder",
- "quick_topic_create_topic_button",
- "quick_topic_add_poll_button",
- "quick_topic_add_file_button",
- "quick_topic_cancel_button",
- "forum_list_aria",
- "status_closed_tooltip",
- "status_pinned_tooltip",
- "forum_no_topics",
- "forum_start_one",
- "paginator_prev_page_aria",
- "paginator_prev_page",
- "paginator_next_page_aria",
- "paginator_next_page",
- "footer_powered_by",
- "footer_made_with_love",
- "footer_theme_selector_aria",
- })
-}
-
-// nolint
-func Template_forum(tmpl_forum_vars common.ForumPage, w io.Writer) error {
-var phrases = common.GetTmplPhrasesBytes(forum_tmpl_phrase_id)
-w.Write(header_frags[0])
-w.Write([]byte(tmpl_forum_vars.Title))
-w.Write(header_frags[1])
-w.Write([]byte(tmpl_forum_vars.Header.Site.Name))
-w.Write(header_frags[2])
-w.Write([]byte(tmpl_forum_vars.Header.Theme.Name))
-w.Write(header_frags[3])
-if len(tmpl_forum_vars.Header.Stylesheets) != 0 {
-for _, item := range tmpl_forum_vars.Header.Stylesheets {
-w.Write(header_frags[4])
-w.Write([]byte(item))
-w.Write(header_frags[5])
-}
-}
-w.Write(header_frags[6])
-if len(tmpl_forum_vars.Header.Scripts) != 0 {
-for _, item := range tmpl_forum_vars.Header.Scripts {
-w.Write(header_frags[7])
-w.Write([]byte(item))
-w.Write(header_frags[8])
-}
-}
-w.Write(header_frags[9])
-w.Write([]byte(tmpl_forum_vars.CurrentUser.Session))
-w.Write(header_frags[10])
-w.Write([]byte(tmpl_forum_vars.Header.Site.URL))
-w.Write(header_frags[11])
-if tmpl_forum_vars.Header.MetaDesc != "" {
-w.Write(header_frags[12])
-w.Write([]byte(tmpl_forum_vars.Header.MetaDesc))
-w.Write(header_frags[13])
-}
-w.Write(header_frags[14])
-if !tmpl_forum_vars.CurrentUser.IsSuperMod {
-w.Write(header_frags[15])
-}
-w.Write(header_frags[16])
-w.Write([]byte(common.BuildWidget("leftOfNav",tmpl_forum_vars.Header)))
-w.Write(header_frags[17])
-w.Write([]byte(tmpl_forum_vars.Header.Site.ShortName))
-w.Write(header_frags[18])
-w.Write([]byte(common.BuildWidget("topMenu",tmpl_forum_vars.Header)))
-w.Write(header_frags[19])
-w.Write(phrases[0])
-w.Write(header_frags[20])
-w.Write([]byte(common.BuildWidget("rightOfNav",tmpl_forum_vars.Header)))
-w.Write(header_frags[21])
-if tmpl_forum_vars.Header.Widgets.RightSidebar != "" {
-w.Write(header_frags[22])
-}
-w.Write(header_frags[23])
-if len(tmpl_forum_vars.Header.NoticeList) != 0 {
-for _, item := range tmpl_forum_vars.Header.NoticeList {
-w.Write(notice_frags[0])
-w.Write([]byte(item))
-w.Write(notice_frags[1])
-}
-}
-w.Write(header_frags[24])
-if tmpl_forum_vars.Page > 1 {
-w.Write(forum_frags[0])
-w.Write(phrases[1])
-w.Write(forum_frags[1])
-w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Forum.ID)))
-w.Write(forum_frags[2])
-w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Page - 1)))
-w.Write(forum_frags[3])
-w.Write(phrases[2])
-w.Write(forum_frags[4])
-}
-if tmpl_forum_vars.LastPage != tmpl_forum_vars.Page {
-w.Write(forum_frags[5])
-w.Write(phrases[3])
-w.Write(forum_frags[6])
-w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Forum.ID)))
-w.Write(forum_frags[7])
-w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Page + 1)))
-w.Write(forum_frags[8])
-w.Write(phrases[4])
-w.Write(forum_frags[9])
-}
-w.Write(forum_frags[10])
-if tmpl_forum_vars.CurrentUser.ID != 0 {
-w.Write(forum_frags[11])
-}
-w.Write(forum_frags[12])
-w.Write([]byte(tmpl_forum_vars.Title))
-w.Write(forum_frags[13])
-if tmpl_forum_vars.CurrentUser.ID != 0 {
-w.Write(forum_frags[14])
-if tmpl_forum_vars.CurrentUser.Perms.CreateTopic {
-w.Write(forum_frags[15])
-w.Write(phrases[5])
-w.Write(forum_frags[16])
-w.Write(phrases[6])
-w.Write(forum_frags[17])
-w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Forum.ID)))
-w.Write(forum_frags[18])
-w.Write(forum_frags[19])
-w.Write(phrases[7])
-w.Write(forum_frags[20])
-w.Write(phrases[8])
-w.Write(forum_frags[21])
-} else {
-w.Write(forum_frags[22])
-w.Write(phrases[9])
-w.Write(forum_frags[23])
-w.Write(phrases[10])
-w.Write(forum_frags[24])
-}
-w.Write(forum_frags[25])
-}
-w.Write(forum_frags[26])
-if tmpl_forum_vars.CurrentUser.ID != 0 {
-w.Write(forum_frags[27])
-w.Write(phrases[11])
-w.Write(forum_frags[28])
-w.Write(phrases[12])
-w.Write(forum_frags[29])
-w.Write(phrases[13])
-w.Write(forum_frags[30])
-w.Write(phrases[14])
-w.Write(forum_frags[31])
-w.Write(phrases[15])
-w.Write(forum_frags[32])
-if tmpl_forum_vars.CurrentUser.Perms.CreateTopic {
-w.Write(forum_frags[33])
-w.Write(phrases[16])
-w.Write(forum_frags[34])
-w.Write([]byte(tmpl_forum_vars.CurrentUser.Avatar))
-w.Write(forum_frags[35])
-w.Write(phrases[17])
-w.Write(forum_frags[36])
-w.Write(phrases[18])
-w.Write(forum_frags[37])
-w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Forum.ID)))
-w.Write(forum_frags[38])
-w.Write(phrases[19])
-w.Write(forum_frags[39])
-w.Write(phrases[20])
-w.Write(forum_frags[40])
-w.Write(phrases[21])
-w.Write(forum_frags[41])
-w.Write(phrases[22])
-w.Write(forum_frags[42])
-if tmpl_forum_vars.CurrentUser.Perms.UploadFiles {
-w.Write(forum_frags[43])
-w.Write(phrases[23])
-w.Write(forum_frags[44])
-}
-w.Write(forum_frags[45])
-w.Write(phrases[24])
-w.Write(forum_frags[46])
-}
-}
-w.Write(forum_frags[47])
-w.Write(phrases[25])
-w.Write(forum_frags[48])
-if len(tmpl_forum_vars.ItemList) != 0 {
-for _, item := range tmpl_forum_vars.ItemList {
-w.Write(forum_frags[49])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(forum_frags[50])
-if item.Sticky {
-w.Write(forum_frags[51])
-} else {
-if item.IsClosed {
-w.Write(forum_frags[52])
-}
-}
-w.Write(forum_frags[53])
-w.Write([]byte(item.Creator.Link))
-w.Write(forum_frags[54])
-w.Write([]byte(item.Creator.Avatar))
-w.Write(forum_frags[55])
-w.Write([]byte(item.Creator.Name))
-w.Write(forum_frags[56])
-w.Write([]byte(item.Creator.Name))
-w.Write(forum_frags[57])
-w.Write([]byte(item.Link))
-w.Write(forum_frags[58])
-w.Write([]byte(item.Title))
-w.Write(forum_frags[59])
-w.Write([]byte(item.Title))
-w.Write(forum_frags[60])
-w.Write([]byte(item.Creator.Link))
-w.Write(forum_frags[61])
-w.Write([]byte(item.Creator.Name))
-w.Write(forum_frags[62])
-w.Write([]byte(item.Creator.Name))
-w.Write(forum_frags[63])
-if item.IsClosed {
-w.Write(forum_frags[64])
-w.Write(phrases[26])
-w.Write(forum_frags[65])
-}
-if item.Sticky {
-w.Write(forum_frags[66])
-w.Write(phrases[27])
-w.Write(forum_frags[67])
-}
-w.Write(forum_frags[68])
-w.Write([]byte(strconv.Itoa(item.PostCount)))
-w.Write(forum_frags[69])
-w.Write([]byte(strconv.Itoa(item.LikeCount)))
-w.Write(forum_frags[70])
-if item.Sticky {
-w.Write(forum_frags[71])
-} else {
-if item.IsClosed {
-w.Write(forum_frags[72])
-}
-}
-w.Write(forum_frags[73])
-w.Write([]byte(item.LastUser.Link))
-w.Write(forum_frags[74])
-w.Write([]byte(item.LastUser.Avatar))
-w.Write(forum_frags[75])
-w.Write([]byte(item.LastUser.Name))
-w.Write(forum_frags[76])
-w.Write([]byte(item.LastUser.Name))
-w.Write(forum_frags[77])
-w.Write([]byte(item.LastUser.Link))
-w.Write(forum_frags[78])
-w.Write([]byte(item.LastUser.Name))
-w.Write(forum_frags[79])
-w.Write([]byte(item.LastUser.Name))
-w.Write(forum_frags[80])
-w.Write([]byte(item.RelativeLastReplyAt))
-w.Write(forum_frags[81])
-}
-} else {
-w.Write(forum_frags[82])
-w.Write(phrases[28])
-if tmpl_forum_vars.CurrentUser.Perms.CreateTopic {
-w.Write(forum_frags[83])
-w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Forum.ID)))
-w.Write(forum_frags[84])
-w.Write(phrases[29])
-w.Write(forum_frags[85])
-}
-w.Write(forum_frags[86])
-}
-w.Write(forum_frags[87])
-if tmpl_forum_vars.LastPage > 1 {
-w.Write(paginator_frags[0])
-if tmpl_forum_vars.Page > 1 {
-w.Write(paginator_frags[1])
-w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Page - 1)))
-w.Write(paginator_frags[2])
-w.Write(phrases[30])
-w.Write(paginator_frags[3])
-w.Write(phrases[31])
-w.Write(paginator_frags[4])
-w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Page - 1)))
-w.Write(paginator_frags[5])
-}
-if len(tmpl_forum_vars.PageList) != 0 {
-for _, item := range tmpl_forum_vars.PageList {
-w.Write(paginator_frags[6])
-w.Write([]byte(strconv.Itoa(item)))
-w.Write(paginator_frags[7])
-w.Write([]byte(strconv.Itoa(item)))
-w.Write(paginator_frags[8])
-}
-}
-if tmpl_forum_vars.LastPage != tmpl_forum_vars.Page {
-w.Write(paginator_frags[9])
-w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Page + 1)))
-w.Write(paginator_frags[10])
-w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Page + 1)))
-w.Write(paginator_frags[11])
-w.Write(phrases[32])
-w.Write(paginator_frags[12])
-w.Write(phrases[33])
-w.Write(paginator_frags[13])
-}
-w.Write(paginator_frags[14])
-}
-w.Write(forum_frags[88])
-w.Write(footer_frags[0])
-w.Write([]byte(common.BuildWidget("footer",tmpl_forum_vars.Header)))
-w.Write(footer_frags[1])
-w.Write(phrases[34])
-w.Write(footer_frags[2])
-w.Write(phrases[35])
-w.Write(footer_frags[3])
-w.Write(phrases[36])
-w.Write(footer_frags[4])
-if len(tmpl_forum_vars.Header.Themes) != 0 {
-for _, item := range tmpl_forum_vars.Header.Themes {
-if !item.HideFromThemes {
-w.Write(footer_frags[5])
-w.Write([]byte(item.Name))
-w.Write(footer_frags[6])
-if tmpl_forum_vars.Header.Theme.Name == item.Name {
-w.Write(footer_frags[7])
-}
-w.Write(footer_frags[8])
-w.Write([]byte(item.FriendlyName))
-w.Write(footer_frags[9])
-}
-}
-}
-w.Write(footer_frags[10])
-w.Write([]byte(common.BuildWidget("rightSidebar",tmpl_forum_vars.Header)))
-w.Write(footer_frags[11])
-return nil
-}
diff --git a/template_forums.go b/template_forums.go
deleted file mode 100644
index c1b4b2ce..00000000
--- a/template_forums.go
+++ /dev/null
@@ -1,174 +0,0 @@
-// +build !no_templategen
-
-// Code generated by Gosora. More below:
-/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
-package main
-import "./common"
-import "io"
-
-var forums_tmpl_phrase_id int
-
-// nolint
-func init() {
- common.Template_forums_handle = Template_forums
- common.Ctemplates = append(common.Ctemplates,"forums")
- common.TmplPtrMap["forums"] = &common.Template_forums_handle
- common.TmplPtrMap["o_forums"] = Template_forums
- forums_tmpl_phrase_id = common.RegisterTmplPhraseNames([]string{
- "menu_hamburger_tooltip",
- "forums_head",
- "forums_no_description",
- "forums_none",
- "forums_no_forums",
- "footer_powered_by",
- "footer_made_with_love",
- "footer_theme_selector_aria",
- })
-}
-
-// nolint
-func Template_forums(tmpl_forums_vars common.ForumsPage, w io.Writer) error {
-var phrases = common.GetTmplPhrasesBytes(forums_tmpl_phrase_id)
-w.Write(header_frags[0])
-w.Write([]byte(tmpl_forums_vars.Title))
-w.Write(header_frags[1])
-w.Write([]byte(tmpl_forums_vars.Header.Site.Name))
-w.Write(header_frags[2])
-w.Write([]byte(tmpl_forums_vars.Header.Theme.Name))
-w.Write(header_frags[3])
-if len(tmpl_forums_vars.Header.Stylesheets) != 0 {
-for _, item := range tmpl_forums_vars.Header.Stylesheets {
-w.Write(header_frags[4])
-w.Write([]byte(item))
-w.Write(header_frags[5])
-}
-}
-w.Write(header_frags[6])
-if len(tmpl_forums_vars.Header.Scripts) != 0 {
-for _, item := range tmpl_forums_vars.Header.Scripts {
-w.Write(header_frags[7])
-w.Write([]byte(item))
-w.Write(header_frags[8])
-}
-}
-w.Write(header_frags[9])
-w.Write([]byte(tmpl_forums_vars.CurrentUser.Session))
-w.Write(header_frags[10])
-w.Write([]byte(tmpl_forums_vars.Header.Site.URL))
-w.Write(header_frags[11])
-if tmpl_forums_vars.Header.MetaDesc != "" {
-w.Write(header_frags[12])
-w.Write([]byte(tmpl_forums_vars.Header.MetaDesc))
-w.Write(header_frags[13])
-}
-w.Write(header_frags[14])
-if !tmpl_forums_vars.CurrentUser.IsSuperMod {
-w.Write(header_frags[15])
-}
-w.Write(header_frags[16])
-w.Write([]byte(common.BuildWidget("leftOfNav",tmpl_forums_vars.Header)))
-w.Write(header_frags[17])
-w.Write([]byte(tmpl_forums_vars.Header.Site.ShortName))
-w.Write(header_frags[18])
-w.Write([]byte(common.BuildWidget("topMenu",tmpl_forums_vars.Header)))
-w.Write(header_frags[19])
-w.Write(phrases[0])
-w.Write(header_frags[20])
-w.Write([]byte(common.BuildWidget("rightOfNav",tmpl_forums_vars.Header)))
-w.Write(header_frags[21])
-if tmpl_forums_vars.Header.Widgets.RightSidebar != "" {
-w.Write(header_frags[22])
-}
-w.Write(header_frags[23])
-if len(tmpl_forums_vars.Header.NoticeList) != 0 {
-for _, item := range tmpl_forums_vars.Header.NoticeList {
-w.Write(notice_frags[0])
-w.Write([]byte(item))
-w.Write(notice_frags[1])
-}
-}
-w.Write(header_frags[24])
-w.Write(forums_frags[0])
-w.Write(phrases[1])
-w.Write(forums_frags[1])
-if len(tmpl_forums_vars.ItemList) != 0 {
-for _, item := range tmpl_forums_vars.ItemList {
-w.Write(forums_frags[2])
-if item.Desc != "" || item.LastTopic.Title != "" {
-w.Write(forums_frags[3])
-}
-w.Write(forums_frags[4])
-w.Write([]byte(item.Link))
-w.Write(forums_frags[5])
-w.Write([]byte(item.Name))
-w.Write(forums_frags[6])
-if item.Desc != "" {
-w.Write(forums_frags[7])
-w.Write([]byte(item.Desc))
-w.Write(forums_frags[8])
-} else {
-w.Write(forums_frags[9])
-w.Write(phrases[2])
-w.Write(forums_frags[10])
-}
-w.Write(forums_frags[11])
-if item.LastReplyer.Avatar != "" {
-w.Write(forums_frags[12])
-w.Write([]byte(item.LastReplyer.Avatar))
-w.Write(forums_frags[13])
-w.Write([]byte(item.LastReplyer.Name))
-w.Write(forums_frags[14])
-w.Write([]byte(item.LastReplyer.Name))
-w.Write(forums_frags[15])
-}
-w.Write(forums_frags[16])
-w.Write([]byte(item.LastTopic.Link))
-w.Write(forums_frags[17])
-if item.LastTopic.Title != "" {
-w.Write([]byte(item.LastTopic.Title))
-} else {
-w.Write(phrases[3])
-}
-w.Write(forums_frags[18])
-if item.LastTopicTime != "" {
-w.Write(forums_frags[19])
-w.Write([]byte(item.LastTopicTime))
-w.Write(forums_frags[20])
-}
-w.Write(forums_frags[21])
-}
-} else {
-w.Write(forums_frags[22])
-w.Write(phrases[4])
-w.Write(forums_frags[23])
-}
-w.Write(forums_frags[24])
-w.Write(footer_frags[0])
-w.Write([]byte(common.BuildWidget("footer",tmpl_forums_vars.Header)))
-w.Write(footer_frags[1])
-w.Write(phrases[5])
-w.Write(footer_frags[2])
-w.Write(phrases[6])
-w.Write(footer_frags[3])
-w.Write(phrases[7])
-w.Write(footer_frags[4])
-if len(tmpl_forums_vars.Header.Themes) != 0 {
-for _, item := range tmpl_forums_vars.Header.Themes {
-if !item.HideFromThemes {
-w.Write(footer_frags[5])
-w.Write([]byte(item.Name))
-w.Write(footer_frags[6])
-if tmpl_forums_vars.Header.Theme.Name == item.Name {
-w.Write(footer_frags[7])
-}
-w.Write(footer_frags[8])
-w.Write([]byte(item.FriendlyName))
-w.Write(footer_frags[9])
-}
-}
-}
-w.Write(footer_frags[10])
-w.Write([]byte(common.BuildWidget("rightSidebar",tmpl_forums_vars.Header)))
-w.Write(footer_frags[11])
-return nil
-}
diff --git a/template_guilds_guild_list.go b/template_guilds_guild_list.go
deleted file mode 100644
index 0bda17c4..00000000
--- a/template_guilds_guild_list.go
+++ /dev/null
@@ -1,133 +0,0 @@
-// +build !no_templategen
-
-// Code generated by Gosora. More below:
-/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
-package main
-import "io"
-import "./common"
-import "./extend/guilds/lib"
-import "strconv"
-
-var guilds_guild_list_tmpl_phrase_id int
-
-// nolint
-func init() {
- common.TmplPtrMap["o_guilds_guild_list"] = Template_guilds_guild_list
- guilds_guild_list_tmpl_phrase_id = common.RegisterTmplPhraseNames([]string{
- "menu_hamburger_tooltip",
- "footer_powered_by",
- "footer_made_with_love",
- "footer_theme_selector_aria",
- })
-}
-
-// nolint
-func Template_guilds_guild_list(tmpl_guilds_guild_list_vars guilds.ListPage, w io.Writer) error {
-var phrases = common.GetTmplPhrasesBytes(guilds_guild_list_tmpl_phrase_id)
-w.Write(header_frags[0])
-w.Write([]byte(tmpl_guilds_guild_list_vars.Title))
-w.Write(header_frags[1])
-w.Write([]byte(tmpl_guilds_guild_list_vars.Header.Site.Name))
-w.Write(header_frags[2])
-w.Write([]byte(tmpl_guilds_guild_list_vars.Header.Theme.Name))
-w.Write(header_frags[3])
-if len(tmpl_guilds_guild_list_vars.Header.Stylesheets) != 0 {
-for _, item := range tmpl_guilds_guild_list_vars.Header.Stylesheets {
-w.Write(header_frags[4])
-w.Write([]byte(item))
-w.Write(header_frags[5])
-}
-}
-w.Write(header_frags[6])
-if len(tmpl_guilds_guild_list_vars.Header.Scripts) != 0 {
-for _, item := range tmpl_guilds_guild_list_vars.Header.Scripts {
-w.Write(header_frags[7])
-w.Write([]byte(item))
-w.Write(header_frags[8])
-}
-}
-w.Write(header_frags[9])
-w.Write([]byte(tmpl_guilds_guild_list_vars.CurrentUser.Session))
-w.Write(header_frags[10])
-w.Write([]byte(tmpl_guilds_guild_list_vars.Header.Site.URL))
-w.Write(header_frags[11])
-if tmpl_guilds_guild_list_vars.Header.MetaDesc != "" {
-w.Write(header_frags[12])
-w.Write([]byte(tmpl_guilds_guild_list_vars.Header.MetaDesc))
-w.Write(header_frags[13])
-}
-w.Write(header_frags[14])
-if !tmpl_guilds_guild_list_vars.CurrentUser.IsSuperMod {
-w.Write(header_frags[15])
-}
-w.Write(header_frags[16])
-w.Write([]byte(common.BuildWidget("leftOfNav",tmpl_guilds_guild_list_vars.Header)))
-w.Write(header_frags[17])
-w.Write([]byte(tmpl_guilds_guild_list_vars.Header.Site.ShortName))
-w.Write(header_frags[18])
-w.Write([]byte(common.BuildWidget("topMenu",tmpl_guilds_guild_list_vars.Header)))
-w.Write(header_frags[19])
-w.Write(phrases[0])
-w.Write(header_frags[20])
-w.Write([]byte(common.BuildWidget("rightOfNav",tmpl_guilds_guild_list_vars.Header)))
-w.Write(header_frags[21])
-if tmpl_guilds_guild_list_vars.Header.Widgets.RightSidebar != "" {
-w.Write(header_frags[22])
-}
-w.Write(header_frags[23])
-if len(tmpl_guilds_guild_list_vars.Header.NoticeList) != 0 {
-for _, item := range tmpl_guilds_guild_list_vars.Header.NoticeList {
-w.Write(notice_frags[0])
-w.Write([]byte(item))
-w.Write(notice_frags[1])
-}
-}
-w.Write(header_frags[24])
-w.Write(guilds_guild_list_frags[0])
-if len(tmpl_guilds_guild_list_vars.GuildList) != 0 {
-for _, item := range tmpl_guilds_guild_list_vars.GuildList {
-w.Write(guilds_guild_list_frags[1])
-w.Write([]byte(item.Link))
-w.Write(guilds_guild_list_frags[2])
-w.Write([]byte(item.Name))
-w.Write(guilds_guild_list_frags[3])
-w.Write([]byte(item.Desc))
-w.Write(guilds_guild_list_frags[4])
-w.Write([]byte(strconv.Itoa(item.MemberCount)))
-w.Write(guilds_guild_list_frags[5])
-w.Write([]byte(item.LastUpdateTime))
-w.Write(guilds_guild_list_frags[6])
-}
-} else {
-w.Write(guilds_guild_list_frags[7])
-}
-w.Write(guilds_guild_list_frags[8])
-w.Write(footer_frags[0])
-w.Write([]byte(common.BuildWidget("footer",tmpl_guilds_guild_list_vars.Header)))
-w.Write(footer_frags[1])
-w.Write(phrases[1])
-w.Write(footer_frags[2])
-w.Write(phrases[2])
-w.Write(footer_frags[3])
-w.Write(phrases[3])
-w.Write(footer_frags[4])
-if len(tmpl_guilds_guild_list_vars.Header.Themes) != 0 {
-for _, item := range tmpl_guilds_guild_list_vars.Header.Themes {
-if !item.HideFromThemes {
-w.Write(footer_frags[5])
-w.Write([]byte(item.Name))
-w.Write(footer_frags[6])
-if tmpl_guilds_guild_list_vars.Header.Theme.Name == item.Name {
-w.Write(footer_frags[7])
-}
-w.Write(footer_frags[8])
-w.Write([]byte(item.FriendlyName))
-w.Write(footer_frags[9])
-}
-}
-}
-w.Write(footer_frags[10])
-w.Write([]byte(common.BuildWidget("rightSidebar",tmpl_guilds_guild_list_vars.Header)))
-w.Write(footer_frags[11])
-return nil
-}
diff --git a/template_ip_search.go b/template_ip_search.go
deleted file mode 100644
index 8225da60..00000000
--- a/template_ip_search.go
+++ /dev/null
@@ -1,154 +0,0 @@
-// +build !no_templategen
-
-// Code generated by Gosora. More below:
-/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
-package main
-import "io"
-import "./common"
-
-var ip_search_tmpl_phrase_id int
-
-// nolint
-func init() {
- common.Template_ip_search_handle = Template_ip_search
- common.Ctemplates = append(common.Ctemplates,"ip_search")
- common.TmplPtrMap["ip_search"] = &common.Template_ip_search_handle
- common.TmplPtrMap["o_ip_search"] = Template_ip_search
- ip_search_tmpl_phrase_id = common.RegisterTmplPhraseNames([]string{
- "menu_hamburger_tooltip",
- "ip_search_head",
- "ip_search_search_button",
- "ip_search_no_users",
- "footer_powered_by",
- "footer_made_with_love",
- "footer_theme_selector_aria",
- })
-}
-
-// nolint
-func Template_ip_search(tmpl_ip_search_vars common.IPSearchPage, w io.Writer) error {
-var phrases = common.GetTmplPhrasesBytes(ip_search_tmpl_phrase_id)
-w.Write(header_frags[0])
-w.Write([]byte(tmpl_ip_search_vars.Title))
-w.Write(header_frags[1])
-w.Write([]byte(tmpl_ip_search_vars.Header.Site.Name))
-w.Write(header_frags[2])
-w.Write([]byte(tmpl_ip_search_vars.Header.Theme.Name))
-w.Write(header_frags[3])
-if len(tmpl_ip_search_vars.Header.Stylesheets) != 0 {
-for _, item := range tmpl_ip_search_vars.Header.Stylesheets {
-w.Write(header_frags[4])
-w.Write([]byte(item))
-w.Write(header_frags[5])
-}
-}
-w.Write(header_frags[6])
-if len(tmpl_ip_search_vars.Header.Scripts) != 0 {
-for _, item := range tmpl_ip_search_vars.Header.Scripts {
-w.Write(header_frags[7])
-w.Write([]byte(item))
-w.Write(header_frags[8])
-}
-}
-w.Write(header_frags[9])
-w.Write([]byte(tmpl_ip_search_vars.CurrentUser.Session))
-w.Write(header_frags[10])
-w.Write([]byte(tmpl_ip_search_vars.Header.Site.URL))
-w.Write(header_frags[11])
-if tmpl_ip_search_vars.Header.MetaDesc != "" {
-w.Write(header_frags[12])
-w.Write([]byte(tmpl_ip_search_vars.Header.MetaDesc))
-w.Write(header_frags[13])
-}
-w.Write(header_frags[14])
-if !tmpl_ip_search_vars.CurrentUser.IsSuperMod {
-w.Write(header_frags[15])
-}
-w.Write(header_frags[16])
-w.Write([]byte(common.BuildWidget("leftOfNav",tmpl_ip_search_vars.Header)))
-w.Write(header_frags[17])
-w.Write([]byte(tmpl_ip_search_vars.Header.Site.ShortName))
-w.Write(header_frags[18])
-w.Write([]byte(common.BuildWidget("topMenu",tmpl_ip_search_vars.Header)))
-w.Write(header_frags[19])
-w.Write(phrases[0])
-w.Write(header_frags[20])
-w.Write([]byte(common.BuildWidget("rightOfNav",tmpl_ip_search_vars.Header)))
-w.Write(header_frags[21])
-if tmpl_ip_search_vars.Header.Widgets.RightSidebar != "" {
-w.Write(header_frags[22])
-}
-w.Write(header_frags[23])
-if len(tmpl_ip_search_vars.Header.NoticeList) != 0 {
-for _, item := range tmpl_ip_search_vars.Header.NoticeList {
-w.Write(notice_frags[0])
-w.Write([]byte(item))
-w.Write(notice_frags[1])
-}
-}
-w.Write(header_frags[24])
-w.Write(ip_search_frags[0])
-w.Write(phrases[1])
-w.Write(ip_search_frags[1])
-if tmpl_ip_search_vars.IP != "" {
-w.Write(ip_search_frags[2])
-w.Write([]byte(tmpl_ip_search_vars.IP))
-w.Write(ip_search_frags[3])
-}
-w.Write(ip_search_frags[4])
-w.Write(phrases[2])
-w.Write(ip_search_frags[5])
-if tmpl_ip_search_vars.IP != "" {
-w.Write(ip_search_frags[6])
-if len(tmpl_ip_search_vars.ItemList) != 0 {
-for _, item := range tmpl_ip_search_vars.ItemList {
-w.Write(ip_search_frags[7])
-w.Write([]byte(item.Avatar))
-w.Write(ip_search_frags[8])
-w.Write([]byte(item.Avatar))
-w.Write(ip_search_frags[9])
-w.Write([]byte(item.Name))
-w.Write(ip_search_frags[10])
-w.Write([]byte(item.Link))
-w.Write(ip_search_frags[11])
-w.Write([]byte(item.Name))
-w.Write(ip_search_frags[12])
-}
-} else {
-w.Write(ip_search_frags[13])
-w.Write(phrases[3])
-w.Write(ip_search_frags[14])
-}
-
-w.Write(ip_search_frags[15])
-}
-w.Write(ip_search_frags[16])
-w.Write(footer_frags[0])
-w.Write([]byte(common.BuildWidget("footer",tmpl_ip_search_vars.Header)))
-w.Write(footer_frags[1])
-w.Write(phrases[4])
-w.Write(footer_frags[2])
-w.Write(phrases[5])
-w.Write(footer_frags[3])
-w.Write(phrases[6])
-w.Write(footer_frags[4])
-if len(tmpl_ip_search_vars.Header.Themes) != 0 {
-for _, item := range tmpl_ip_search_vars.Header.Themes {
-if !item.HideFromThemes {
-w.Write(footer_frags[5])
-w.Write([]byte(item.Name))
-w.Write(footer_frags[6])
-if tmpl_ip_search_vars.Header.Theme.Name == item.Name {
-w.Write(footer_frags[7])
-}
-w.Write(footer_frags[8])
-w.Write([]byte(item.FriendlyName))
-w.Write(footer_frags[9])
-}
-}
-}
-w.Write(footer_frags[10])
-w.Write([]byte(common.BuildWidget("rightSidebar",tmpl_ip_search_vars.Header)))
-w.Write(footer_frags[11])
-return nil
-}
diff --git a/template_list.go b/template_list.go
deleted file mode 100644
index f442e444..00000000
--- a/template_list.go
+++ /dev/null
@@ -1,1720 +0,0 @@
-package main
-
-var login_frags = make([][]byte,8)
-var notice_frags = make([][]byte,3)
-var forums_frags = make([][]byte,26)
-var paginator_frags = make([][]byte,16)
-var forum_frags = make([][]byte,90)
-var guilds_guild_list_frags = make([][]byte,10)
-var header_frags = make([][]byte,26)
-var topic_alt_frags = make([][]byte,200)
-var topics_frags = make([][]byte,98)
-var topic_frags = make([][]byte,199)
-var profile_comments_row_frags = make([][]byte,51)
-var register_frags = make([][]byte,9)
-var ip_search_frags = make([][]byte,18)
-var footer_frags = make([][]byte,13)
-var profile_frags = make([][]byte,50)
-var error_frags = make([][]byte,4)
-
-// nolint
-func init() {
-header_frags[0] = []byte(`
-
-
- `)
-header_frags[1] = []byte(` | `)
-header_frags[2] = []byte(`
-
- `)
-header_frags[4] = []byte(`
-
- `)
-header_frags[6] = []byte(`
-
-
- `)
-header_frags[7] = []byte(`
-
- `)
-header_frags[9] = []byte(`
-
-
-
- `)
-header_frags[12] = []byte(``)
-header_frags[14] = []byte(`
-
-
- `)
-header_frags[15] = []byte(``)
-header_frags[16] = []byte(`
-
-
`)
-header_frags[17] = []byte(`
-
-
`)
-header_frags[21] = []byte(`
-
-
`)
-notice_frags[0] = []byte(`
`)
-notice_frags[1] = []byte(`
`)
-header_frags[24] = []byte(`
-
-`)
-topic_frags[0] = []byte(`
-
-
-`)
-topic_frags[3] = []byte(`
-
`)
-topic_frags[10] = []byte(`
-
`)
-topic_frags[17] = []byte(`
-
-
-
-
-
-
`)
-topic_frags[24] = []byte(`
- `)
-topic_frags[25] = []byte(`🔒︎`)
-topic_frags[28] = []byte(`
-
-
- `)
-topic_frags[32] = []byte(`
-
-
-`)
-topic_frags[33] = []byte(`
-
-
-
- `)
-topic_frags[40] = []byte(`
-
-
-
-
`)
-topic_frags[46] = []byte(`
-
- `)
-topic_frags[47] = []byte(`
-
-
-
-
-
-`)
-topic_frags[54] = []byte(`
-
-
-
-
`)
-topic_frags[62] = []byte(`
-
-
-
-
- `)
-topic_frags[68] = []byte(`
- `)
-topic_frags[69] = []byte(`
- `)
-topic_frags[82] = []byte(``)
-topic_frags[86] = []byte(``)
-topic_frags[91] = []byte(``)
-topic_frags[96] = []byte(``)
-topic_frags[101] = []byte(``)
-topic_frags[106] = []byte(``)
-topic_frags[111] = []byte(``)
-topic_frags[115] = []byte(`
-
-
- `)
-topic_frags[121] = []byte(`
-
- `)
-topic_frags[123] = []byte(``)
-topic_frags[124] = []byte(``)
-topic_frags[125] = []byte(``)
-topic_frags[127] = []byte(``)
-topic_frags[129] = []byte(`
-
-
-
-
-
-`)
-topic_frags[131] = []byte(`
-
- `)
-topic_frags[132] = []byte(`
- `)
-topic_frags[133] = []byte(`
-
-`)
-topic_frags[134] = []byte(`
-
- `)
-topic_frags[141] = []byte(`
- `)
-topic_frags[142] = []byte(`
-
-
-
- `)
-topic_frags[146] = []byte(`
- `)
-topic_frags[147] = []byte(``)
-topic_frags[152] = []byte(``)
-topic_frags[157] = []byte(``)
-topic_frags[162] = []byte(``)
-topic_frags[167] = []byte(``)
-topic_frags[171] = []byte(`
-
-
- `)
-topic_frags[176] = []byte(`
-
- `)
-topic_frags[178] = []byte(``)
-topic_frags[179] = []byte(``)
-topic_frags[180] = []byte(``)
-topic_frags[182] = []byte(``)
-topic_frags[184] = []byte(`
-
-
-
-`)
-topic_frags[185] = []byte(`
-
-`)
-topic_frags[186] = []byte(`
-
-`)
-topic_frags[197] = []byte(`
-
-
-
-`)
-footer_frags[0] = []byte(`
-
-
-
-
-
-
-
-`)
-topic_alt_frags[0] = []byte(`
-`)
-topic_alt_frags[7] = []byte(`
-`)
-topic_alt_frags[14] = []byte(`
-
-
-
-
-
-
- `)
-topic_alt_frags[32] = []byte(`
-
-
-
-
-
`)
-topic_alt_frags[39] = []byte(`
- `)
-topic_alt_frags[40] = []byte(`
`)
-topic_alt_frags[41] = []byte(`
`)
-topic_alt_frags[42] = []byte(`
`)
-topic_alt_frags[43] = []byte(`
`)
-topic_alt_frags[44] = []byte(`
-
-
-
- `)
-topic_alt_frags[46] = []byte(`
-
-
-
-
`)
-topic_alt_frags[52] = []byte(`
-
- `)
-topic_alt_frags[53] = []byte(`
-
-
-
-
-
- `)
-topic_alt_frags[60] = []byte(`
-
-
-
-
`)
-topic_alt_frags[66] = []byte(`
- `)
-topic_alt_frags[67] = []byte(`
`)
-topic_alt_frags[68] = []byte(`
`)
-topic_alt_frags[69] = []byte(`
`)
-topic_alt_frags[70] = []byte(`
`)
-topic_alt_frags[71] = []byte(`
-
-
-
`)
-topic_alt_frags[72] = []byte(`
-
-
-
-
-
- `)
-topic_alt_frags[123] = []byte(`
-
-
-
-
`)
-topic_alt_frags[130] = []byte(`
- `)
-topic_alt_frags[131] = []byte(`
`)
-topic_alt_frags[132] = []byte(`
`)
-topic_alt_frags[133] = []byte(`
`)
-topic_alt_frags[134] = []byte(`
`)
-topic_alt_frags[135] = []byte(`
-
-
- `)
-topic_alt_frags[138] = []byte(`
-
`)
-topic_alt_frags[139] = []byte(`
-
`)
-topic_alt_frags[140] = []byte(`
- `)
-topic_alt_frags[141] = []byte(`
-
`)
-topic_alt_frags[142] = []byte(`
-
- `)
-topic_alt_frags[176] = []byte(`
-
-
-
-`)
-topic_alt_frags[177] = []byte(`
-
-`)
-topic_alt_frags[178] = []byte(`
-
-
-
-
`)
-topic_alt_frags[182] = []byte(`
- `)
-topic_alt_frags[183] = []byte(`
`)
-topic_alt_frags[184] = []byte(`
`)
-topic_alt_frags[185] = []byte(`
`)
-topic_alt_frags[186] = []byte(`
`)
-topic_alt_frags[187] = []byte(`
-
-
-
-`)
-topic_alt_frags[198] = []byte(`
-
-
-
-`)
-profile_frags[0] = []byte(`
-
-
-
-
-
-
-
-
- `)
-profile_frags[28] = []byte(`
-
-
-
- `)
-profile_frags[39] = []byte(`
-
-
-
-
-`)
-profile_frags[42] = []byte(`
-
-`)
-profile_frags[47] = []byte(`
-
-
-
-
-`)
-profile_frags[48] = []byte(`
-
-
-`)
-forums_frags[0] = []byte(`
-
-
-
-
`)
-forums_frags[1] = []byte(`
-
-
- `)
-forums_frags[2] = []byte(`
-
- `)
-forums_frags[6] = []byte(`
- `)
-forums_frags[7] = []byte(`
-
`)
-forums_frags[8] = []byte(`
- `)
-forums_frags[9] = []byte(`
-
`)
-forums_frags[10] = []byte(`
- `)
-forums_frags[11] = []byte(`
-
-
-
- `)
-forums_frags[12] = []byte(``)
-forums_frags[16] = []byte(`
-
- `)
-forums_frags[18] = []byte(`
- `)
-forums_frags[19] = []byte(`
`)
-forums_frags[20] = []byte(``)
-forums_frags[21] = []byte(`
-
-
-
-
- `)
-forums_frags[22] = []byte(`
`)
-forums_frags[23] = []byte(`
`)
-forums_frags[24] = []byte(`
-
-
-
-`)
-topics_frags[0] = []byte(`
-
-
-
-
`)
-topics_frags[3] = []byte(`
- `)
-topics_frags[4] = []byte(`
-
- `)
-topics_frags[5] = []byte(`
-
-
- `)
-topics_frags[8] = []byte(`
-
- `)
-topics_frags[11] = []byte(`
`)
-topics_frags[14] = []byte(`
-
-
- `)
-topics_frags[15] = []byte(`
-
-
-`)
-topics_frags[16] = []byte(`
-
-
-`)
-topics_frags[22] = []byte(`
-
-
- `)
-topics_frags[51] = []byte(`
-
- `)
-topics_frags[53] = []byte(`
`)
-topics_frags[91] = []byte(`
`)
-topics_frags[95] = []byte(`
-
-
-`)
-paginator_frags[0] = []byte(`
- `)
-paginator_frags[1] = []byte(`
-
`)
-paginator_frags[6] = []byte(`
-
- `)
-paginator_frags[9] = []byte(`
-
-
`)
-paginator_frags[14] = []byte(`
-
`)
-topics_frags[96] = []byte(`
-
-
-`)
-forum_frags[0] = []byte(``)
-forum_frags[5] = []byte(``)
-forum_frags[10] = []byte(`
-
-
-
-
-
`)
-forum_frags[13] = []byte(`
-
- `)
-forum_frags[14] = []byte(`
-
- `)
-forum_frags[15] = []byte(`
-
-
- `)
-forum_frags[19] = []byte(`
-
- `)
-forum_frags[22] = []byte(`
`)
-forum_frags[25] = []byte(`
-
-
- `)
-forum_frags[26] = []byte(`
-
- `)
-forum_frags[27] = []byte(`
-
- `)
-forum_frags[33] = []byte(`
-
- `)
-forum_frags[47] = []byte(`
-
- `)
-forum_frags[49] = []byte(`
`)
-forum_frags[82] = []byte(`
`)
-forum_frags[87] = []byte(`
-
-
-`)
-forum_frags[88] = []byte(`
-
-
-`)
-login_frags[0] = []byte(`
-
-
-
`)
-login_frags[1] = []byte(`
-
-
-
-`)
-register_frags[0] = []byte(`
-
-
-
`)
-register_frags[1] = []byte(`
-
-
-
-`)
-error_frags[0] = []byte(`
-
-
-
`)
-error_frags[1] = []byte(`
-
-
-
`)
-error_frags[2] = []byte(`
-
-
-`)
-ip_search_frags[0] = []byte(`
-
-
-
-
`)
-ip_search_frags[1] = []byte(`
-
-
-
-
- `)
-ip_search_frags[6] = []byte(`
-
- `)
-ip_search_frags[7] = []byte(`
- `)
-ip_search_frags[13] = []byte(`
`)
-ip_search_frags[14] = []byte(`
`)
-ip_search_frags[15] = []byte(`
-
- `)
-ip_search_frags[16] = []byte(`
-
-`)
-guilds_guild_list_frags[0] = []byte(`
-
-
-
- `)
-guilds_guild_list_frags[1] = []byte(`
- `)
-guilds_guild_list_frags[7] = []byte(`
There aren't any visible guilds.
`)
-guilds_guild_list_frags[8] = []byte(`
-
-
-`)
-
-
-// nolint
-GetFrag = func(name string) [][]byte {
-switch(name) {
- case "login":
- return login_frags
- case "notice":
- return notice_frags
- case "forums":
- return forums_frags
- case "paginator":
- return paginator_frags
- case "forum":
- return forum_frags
- case "guilds_guild_list":
- return guilds_guild_list_frags
- case "header":
- return header_frags
- case "topic_alt":
- return topic_alt_frags
- case "topics":
- return topics_frags
- case "topic":
- return topic_frags
- case "profile_comments_row":
- return profile_comments_row_frags
- case "register":
- return register_frags
- case "ip_search":
- return ip_search_frags
- case "footer":
- return footer_frags
- case "profile":
- return profile_frags
- case "error":
- return error_frags
-}
-return nil
-}
-}
diff --git a/template_login.go b/template_login.go
deleted file mode 100644
index 14a42fab..00000000
--- a/template_login.go
+++ /dev/null
@@ -1,134 +0,0 @@
-// +build !no_templategen
-
-// Code generated by Gosora. More below:
-/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
-package main
-import "io"
-import "./common"
-
-var login_tmpl_phrase_id int
-
-// nolint
-func init() {
- common.Template_login_handle = Template_login
- common.Ctemplates = append(common.Ctemplates,"login")
- common.TmplPtrMap["login"] = &common.Template_login_handle
- common.TmplPtrMap["o_login"] = Template_login
- login_tmpl_phrase_id = common.RegisterTmplPhraseNames([]string{
- "menu_hamburger_tooltip",
- "login_head",
- "login_account_name",
- "login_account_name",
- "login_account_password",
- "login_submit_button",
- "login_no_account",
- "footer_powered_by",
- "footer_made_with_love",
- "footer_theme_selector_aria",
- })
-}
-
-// nolint
-func Template_login(tmpl_login_vars common.Page, w io.Writer) error {
-var phrases = common.GetTmplPhrasesBytes(login_tmpl_phrase_id)
-w.Write(header_frags[0])
-w.Write([]byte(tmpl_login_vars.Title))
-w.Write(header_frags[1])
-w.Write([]byte(tmpl_login_vars.Header.Site.Name))
-w.Write(header_frags[2])
-w.Write([]byte(tmpl_login_vars.Header.Theme.Name))
-w.Write(header_frags[3])
-if len(tmpl_login_vars.Header.Stylesheets) != 0 {
-for _, item := range tmpl_login_vars.Header.Stylesheets {
-w.Write(header_frags[4])
-w.Write([]byte(item))
-w.Write(header_frags[5])
-}
-}
-w.Write(header_frags[6])
-if len(tmpl_login_vars.Header.Scripts) != 0 {
-for _, item := range tmpl_login_vars.Header.Scripts {
-w.Write(header_frags[7])
-w.Write([]byte(item))
-w.Write(header_frags[8])
-}
-}
-w.Write(header_frags[9])
-w.Write([]byte(tmpl_login_vars.CurrentUser.Session))
-w.Write(header_frags[10])
-w.Write([]byte(tmpl_login_vars.Header.Site.URL))
-w.Write(header_frags[11])
-if tmpl_login_vars.Header.MetaDesc != "" {
-w.Write(header_frags[12])
-w.Write([]byte(tmpl_login_vars.Header.MetaDesc))
-w.Write(header_frags[13])
-}
-w.Write(header_frags[14])
-if !tmpl_login_vars.CurrentUser.IsSuperMod {
-w.Write(header_frags[15])
-}
-w.Write(header_frags[16])
-w.Write([]byte(common.BuildWidget("leftOfNav",tmpl_login_vars.Header)))
-w.Write(header_frags[17])
-w.Write([]byte(tmpl_login_vars.Header.Site.ShortName))
-w.Write(header_frags[18])
-w.Write([]byte(common.BuildWidget("topMenu",tmpl_login_vars.Header)))
-w.Write(header_frags[19])
-w.Write(phrases[0])
-w.Write(header_frags[20])
-w.Write([]byte(common.BuildWidget("rightOfNav",tmpl_login_vars.Header)))
-w.Write(header_frags[21])
-if tmpl_login_vars.Header.Widgets.RightSidebar != "" {
-w.Write(header_frags[22])
-}
-w.Write(header_frags[23])
-if len(tmpl_login_vars.Header.NoticeList) != 0 {
-for _, item := range tmpl_login_vars.Header.NoticeList {
-w.Write(notice_frags[0])
-w.Write([]byte(item))
-w.Write(notice_frags[1])
-}
-}
-w.Write(header_frags[24])
-w.Write(login_frags[0])
-w.Write(phrases[1])
-w.Write(login_frags[1])
-w.Write(phrases[2])
-w.Write(login_frags[2])
-w.Write(phrases[3])
-w.Write(login_frags[3])
-w.Write(phrases[4])
-w.Write(login_frags[4])
-w.Write(phrases[5])
-w.Write(login_frags[5])
-w.Write(phrases[6])
-w.Write(login_frags[6])
-w.Write(footer_frags[0])
-w.Write([]byte(common.BuildWidget("footer",tmpl_login_vars.Header)))
-w.Write(footer_frags[1])
-w.Write(phrases[7])
-w.Write(footer_frags[2])
-w.Write(phrases[8])
-w.Write(footer_frags[3])
-w.Write(phrases[9])
-w.Write(footer_frags[4])
-if len(tmpl_login_vars.Header.Themes) != 0 {
-for _, item := range tmpl_login_vars.Header.Themes {
-if !item.HideFromThemes {
-w.Write(footer_frags[5])
-w.Write([]byte(item.Name))
-w.Write(footer_frags[6])
-if tmpl_login_vars.Header.Theme.Name == item.Name {
-w.Write(footer_frags[7])
-}
-w.Write(footer_frags[8])
-w.Write([]byte(item.FriendlyName))
-w.Write(footer_frags[9])
-}
-}
-}
-w.Write(footer_frags[10])
-w.Write([]byte(common.BuildWidget("rightSidebar",tmpl_login_vars.Header)))
-w.Write(footer_frags[11])
-return nil
-}
diff --git a/template_profile.go b/template_profile.go
deleted file mode 100644
index 3cdeebc8..00000000
--- a/template_profile.go
+++ /dev/null
@@ -1,347 +0,0 @@
-// +build !no_templategen
-
-// Code generated by Gosora. More below:
-/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
-package main
-import "strconv"
-import "io"
-import "./common"
-
-var profile_tmpl_phrase_id int
-
-// nolint
-func init() {
- common.Template_profile_handle = Template_profile
- common.Ctemplates = append(common.Ctemplates,"profile")
- common.TmplPtrMap["profile"] = &common.Template_profile_handle
- common.TmplPtrMap["o_profile"] = Template_profile
- profile_tmpl_phrase_id = common.RegisterTmplPhraseNames([]string{
- "menu_hamburger_tooltip",
- "profile_login_for_options",
- "profile_add_friend",
- "profile_unban",
- "profile_ban",
- "profile_report_user_aria",
- "profile_report_user_tooltip",
- "profile_ban_user_head",
- "profile_ban_user_notice",
- "profile_ban_user_days",
- "profile_ban_user_weeks",
- "profile_ban_user_months",
- "profile_ban_user_reason",
- "profile_ban_user_button",
- "profile_comments_head",
- "profile_comments_edit_tooltip",
- "profile_comments_edit_aria",
- "profile_comments_delete_tooltip",
- "profile_comments_delete_aria",
- "profile_comments_report_tooltip",
- "profile_comments_report_aria",
- "profile_comments_edit_tooltip",
- "profile_comments_edit_aria",
- "profile_comments_delete_tooltip",
- "profile_comments_delete_aria",
- "profile_comments_report_tooltip",
- "profile_comments_report_aria",
- "profile_comments_form_content",
- "profile_comments_form_button",
- "footer_powered_by",
- "footer_made_with_love",
- "footer_theme_selector_aria",
- })
-}
-
-// nolint
-func Template_profile(tmpl_profile_vars common.ProfilePage, w io.Writer) error {
-var phrases = common.GetTmplPhrasesBytes(profile_tmpl_phrase_id)
-w.Write(header_frags[0])
-w.Write([]byte(tmpl_profile_vars.Title))
-w.Write(header_frags[1])
-w.Write([]byte(tmpl_profile_vars.Header.Site.Name))
-w.Write(header_frags[2])
-w.Write([]byte(tmpl_profile_vars.Header.Theme.Name))
-w.Write(header_frags[3])
-if len(tmpl_profile_vars.Header.Stylesheets) != 0 {
-for _, item := range tmpl_profile_vars.Header.Stylesheets {
-w.Write(header_frags[4])
-w.Write([]byte(item))
-w.Write(header_frags[5])
-}
-}
-w.Write(header_frags[6])
-if len(tmpl_profile_vars.Header.Scripts) != 0 {
-for _, item := range tmpl_profile_vars.Header.Scripts {
-w.Write(header_frags[7])
-w.Write([]byte(item))
-w.Write(header_frags[8])
-}
-}
-w.Write(header_frags[9])
-w.Write([]byte(tmpl_profile_vars.CurrentUser.Session))
-w.Write(header_frags[10])
-w.Write([]byte(tmpl_profile_vars.Header.Site.URL))
-w.Write(header_frags[11])
-if tmpl_profile_vars.Header.MetaDesc != "" {
-w.Write(header_frags[12])
-w.Write([]byte(tmpl_profile_vars.Header.MetaDesc))
-w.Write(header_frags[13])
-}
-w.Write(header_frags[14])
-if !tmpl_profile_vars.CurrentUser.IsSuperMod {
-w.Write(header_frags[15])
-}
-w.Write(header_frags[16])
-w.Write([]byte(common.BuildWidget("leftOfNav",tmpl_profile_vars.Header)))
-w.Write(header_frags[17])
-w.Write([]byte(tmpl_profile_vars.Header.Site.ShortName))
-w.Write(header_frags[18])
-w.Write([]byte(common.BuildWidget("topMenu",tmpl_profile_vars.Header)))
-w.Write(header_frags[19])
-w.Write(phrases[0])
-w.Write(header_frags[20])
-w.Write([]byte(common.BuildWidget("rightOfNav",tmpl_profile_vars.Header)))
-w.Write(header_frags[21])
-if tmpl_profile_vars.Header.Widgets.RightSidebar != "" {
-w.Write(header_frags[22])
-}
-w.Write(header_frags[23])
-if len(tmpl_profile_vars.Header.NoticeList) != 0 {
-for _, item := range tmpl_profile_vars.Header.NoticeList {
-w.Write(notice_frags[0])
-w.Write([]byte(item))
-w.Write(notice_frags[1])
-}
-}
-w.Write(header_frags[24])
-w.Write(profile_frags[0])
-w.Write([]byte(tmpl_profile_vars.ProfileOwner.Avatar))
-w.Write(profile_frags[1])
-w.Write([]byte(tmpl_profile_vars.ProfileOwner.Name))
-w.Write(profile_frags[2])
-w.Write([]byte(tmpl_profile_vars.ProfileOwner.Name))
-w.Write(profile_frags[3])
-w.Write([]byte(tmpl_profile_vars.ProfileOwner.Name))
-w.Write(profile_frags[4])
-w.Write([]byte(tmpl_profile_vars.ProfileOwner.Name))
-w.Write(profile_frags[5])
-if tmpl_profile_vars.ProfileOwner.Tag != "" {
-w.Write(profile_frags[6])
-w.Write([]byte(tmpl_profile_vars.ProfileOwner.Tag))
-w.Write(profile_frags[7])
-w.Write([]byte(tmpl_profile_vars.ProfileOwner.Tag))
-w.Write(profile_frags[8])
-}
-w.Write(profile_frags[9])
-if !tmpl_profile_vars.CurrentUser.Loggedin {
-w.Write(profile_frags[10])
-w.Write(phrases[1])
-w.Write(profile_frags[11])
-} else {
-w.Write(profile_frags[12])
-w.Write(phrases[2])
-w.Write(profile_frags[13])
-if tmpl_profile_vars.CurrentUser.IsSuperMod && !tmpl_profile_vars.ProfileOwner.IsSuperMod {
-w.Write(profile_frags[14])
-if tmpl_profile_vars.ProfileOwner.IsBanned {
-w.Write(profile_frags[15])
-w.Write([]byte(strconv.Itoa(tmpl_profile_vars.ProfileOwner.ID)))
-w.Write(profile_frags[16])
-w.Write([]byte(tmpl_profile_vars.CurrentUser.Session))
-w.Write(profile_frags[17])
-w.Write(phrases[3])
-w.Write(profile_frags[18])
-} else {
-w.Write(profile_frags[19])
-w.Write(phrases[4])
-w.Write(profile_frags[20])
-}
-w.Write(profile_frags[21])
-}
-w.Write(profile_frags[22])
-w.Write([]byte(strconv.Itoa(tmpl_profile_vars.ProfileOwner.ID)))
-w.Write(profile_frags[23])
-w.Write([]byte(tmpl_profile_vars.CurrentUser.Session))
-w.Write(profile_frags[24])
-w.Write(phrases[5])
-w.Write(profile_frags[25])
-w.Write(phrases[6])
-w.Write(profile_frags[26])
-}
-w.Write(profile_frags[27])
-if tmpl_profile_vars.CurrentUser.Perms.BanUsers {
-w.Write(profile_frags[28])
-w.Write(phrases[7])
-w.Write(profile_frags[29])
-w.Write([]byte(strconv.Itoa(tmpl_profile_vars.ProfileOwner.ID)))
-w.Write(profile_frags[30])
-w.Write([]byte(tmpl_profile_vars.CurrentUser.Session))
-w.Write(profile_frags[31])
-w.Write(profile_frags[32])
-w.Write(phrases[8])
-w.Write(profile_frags[33])
-w.Write(phrases[9])
-w.Write(profile_frags[34])
-w.Write(phrases[10])
-w.Write(profile_frags[35])
-w.Write(phrases[11])
-w.Write(profile_frags[36])
-w.Write(phrases[12])
-w.Write(profile_frags[37])
-w.Write(phrases[13])
-w.Write(profile_frags[38])
-}
-w.Write(profile_frags[39])
-w.Write(phrases[14])
-w.Write(profile_frags[40])
-if tmpl_profile_vars.Header.Theme.BgAvatars {
-if len(tmpl_profile_vars.ItemList) != 0 {
-for _, item := range tmpl_profile_vars.ItemList {
-w.Write(profile_comments_row_frags[0])
-w.Write([]byte(item.ClassName))
-w.Write(profile_comments_row_frags[1])
-w.Write([]byte(item.Avatar))
-w.Write(profile_comments_row_frags[2])
-if item.ContentLines <= 5 {
-w.Write(profile_comments_row_frags[3])
-}
-w.Write(profile_comments_row_frags[4])
-w.Write([]byte(item.ContentHtml))
-w.Write(profile_comments_row_frags[5])
-w.Write([]byte(item.UserLink))
-w.Write(profile_comments_row_frags[6])
-w.Write([]byte(item.CreatedByName))
-w.Write(profile_comments_row_frags[7])
-if tmpl_profile_vars.CurrentUser.IsMod {
-w.Write(profile_comments_row_frags[8])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(profile_comments_row_frags[9])
-w.Write([]byte(tmpl_profile_vars.CurrentUser.Session))
-w.Write(profile_comments_row_frags[10])
-w.Write(phrases[15])
-w.Write(profile_comments_row_frags[11])
-w.Write(phrases[16])
-w.Write(profile_comments_row_frags[12])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(profile_comments_row_frags[13])
-w.Write([]byte(tmpl_profile_vars.CurrentUser.Session))
-w.Write(profile_comments_row_frags[14])
-w.Write(phrases[17])
-w.Write(profile_comments_row_frags[15])
-w.Write(phrases[18])
-w.Write(profile_comments_row_frags[16])
-}
-w.Write(profile_comments_row_frags[17])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(profile_comments_row_frags[18])
-w.Write([]byte(tmpl_profile_vars.CurrentUser.Session))
-w.Write(profile_comments_row_frags[19])
-w.Write(phrases[19])
-w.Write(profile_comments_row_frags[20])
-w.Write(phrases[20])
-w.Write(profile_comments_row_frags[21])
-if item.Tag != "" {
-w.Write(profile_comments_row_frags[22])
-w.Write([]byte(item.Tag))
-w.Write(profile_comments_row_frags[23])
-}
-w.Write(profile_comments_row_frags[24])
-}
-}
-} else {
-if len(tmpl_profile_vars.ItemList) != 0 {
-for _, item := range tmpl_profile_vars.ItemList {
-w.Write(profile_comments_row_frags[25])
-w.Write([]byte(item.ClassName))
-w.Write(profile_comments_row_frags[26])
-w.Write([]byte(item.Avatar))
-w.Write(profile_comments_row_frags[27])
-w.Write([]byte(item.CreatedByName))
-w.Write(profile_comments_row_frags[28])
-w.Write([]byte(item.CreatedByName))
-w.Write(profile_comments_row_frags[29])
-w.Write([]byte(item.UserLink))
-w.Write(profile_comments_row_frags[30])
-w.Write([]byte(item.CreatedByName))
-w.Write(profile_comments_row_frags[31])
-if item.Tag != "" {
-w.Write(profile_comments_row_frags[32])
-w.Write([]byte(item.Tag))
-w.Write(profile_comments_row_frags[33])
-}
-w.Write(profile_comments_row_frags[34])
-if tmpl_profile_vars.CurrentUser.IsMod {
-w.Write(profile_comments_row_frags[35])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(profile_comments_row_frags[36])
-w.Write([]byte(tmpl_profile_vars.CurrentUser.Session))
-w.Write(profile_comments_row_frags[37])
-w.Write(phrases[21])
-w.Write(profile_comments_row_frags[38])
-w.Write(phrases[22])
-w.Write(profile_comments_row_frags[39])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(profile_comments_row_frags[40])
-w.Write([]byte(tmpl_profile_vars.CurrentUser.Session))
-w.Write(profile_comments_row_frags[41])
-w.Write(phrases[23])
-w.Write(profile_comments_row_frags[42])
-w.Write(phrases[24])
-w.Write(profile_comments_row_frags[43])
-}
-w.Write(profile_comments_row_frags[44])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(profile_comments_row_frags[45])
-w.Write([]byte(tmpl_profile_vars.CurrentUser.Session))
-w.Write(profile_comments_row_frags[46])
-w.Write(phrases[25])
-w.Write(profile_comments_row_frags[47])
-w.Write(phrases[26])
-w.Write(profile_comments_row_frags[48])
-w.Write([]byte(item.ContentHtml))
-w.Write(profile_comments_row_frags[49])
-}
-}
-}
-w.Write(profile_frags[41])
-if !tmpl_profile_vars.CurrentUser.IsBanned {
-w.Write(profile_frags[42])
-w.Write([]byte(tmpl_profile_vars.CurrentUser.Session))
-w.Write(profile_frags[43])
-w.Write([]byte(strconv.Itoa(tmpl_profile_vars.ProfileOwner.ID)))
-w.Write(profile_frags[44])
-w.Write(phrases[27])
-w.Write(profile_frags[45])
-w.Write(phrases[28])
-w.Write(profile_frags[46])
-}
-w.Write(profile_frags[47])
-w.Write(profile_frags[48])
-w.Write(footer_frags[0])
-w.Write([]byte(common.BuildWidget("footer",tmpl_profile_vars.Header)))
-w.Write(footer_frags[1])
-w.Write(phrases[29])
-w.Write(footer_frags[2])
-w.Write(phrases[30])
-w.Write(footer_frags[3])
-w.Write(phrases[31])
-w.Write(footer_frags[4])
-if len(tmpl_profile_vars.Header.Themes) != 0 {
-for _, item := range tmpl_profile_vars.Header.Themes {
-if !item.HideFromThemes {
-w.Write(footer_frags[5])
-w.Write([]byte(item.Name))
-w.Write(footer_frags[6])
-if tmpl_profile_vars.Header.Theme.Name == item.Name {
-w.Write(footer_frags[7])
-}
-w.Write(footer_frags[8])
-w.Write([]byte(item.FriendlyName))
-w.Write(footer_frags[9])
-}
-}
-}
-w.Write(footer_frags[10])
-w.Write([]byte(common.BuildWidget("rightSidebar",tmpl_profile_vars.Header)))
-w.Write(footer_frags[11])
-return nil
-}
diff --git a/template_register.go b/template_register.go
deleted file mode 100644
index 24129fdf..00000000
--- a/template_register.go
+++ /dev/null
@@ -1,137 +0,0 @@
-// +build !no_templategen
-
-// Code generated by Gosora. More below:
-/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
-package main
-import "io"
-import "./common"
-
-var register_tmpl_phrase_id int
-
-// nolint
-func init() {
- common.Template_register_handle = Template_register
- common.Ctemplates = append(common.Ctemplates,"register")
- common.TmplPtrMap["register"] = &common.Template_register_handle
- common.TmplPtrMap["o_register"] = Template_register
- register_tmpl_phrase_id = common.RegisterTmplPhraseNames([]string{
- "menu_hamburger_tooltip",
- "register_head",
- "register_account_name",
- "register_account_name",
- "register_account_email",
- "register_account_password",
- "register_account_confirm_password",
- "register_submit_button",
- "footer_powered_by",
- "footer_made_with_love",
- "footer_theme_selector_aria",
- })
-}
-
-// nolint
-func Template_register(tmpl_register_vars common.Page, w io.Writer) error {
-var phrases = common.GetTmplPhrasesBytes(register_tmpl_phrase_id)
-w.Write(header_frags[0])
-w.Write([]byte(tmpl_register_vars.Title))
-w.Write(header_frags[1])
-w.Write([]byte(tmpl_register_vars.Header.Site.Name))
-w.Write(header_frags[2])
-w.Write([]byte(tmpl_register_vars.Header.Theme.Name))
-w.Write(header_frags[3])
-if len(tmpl_register_vars.Header.Stylesheets) != 0 {
-for _, item := range tmpl_register_vars.Header.Stylesheets {
-w.Write(header_frags[4])
-w.Write([]byte(item))
-w.Write(header_frags[5])
-}
-}
-w.Write(header_frags[6])
-if len(tmpl_register_vars.Header.Scripts) != 0 {
-for _, item := range tmpl_register_vars.Header.Scripts {
-w.Write(header_frags[7])
-w.Write([]byte(item))
-w.Write(header_frags[8])
-}
-}
-w.Write(header_frags[9])
-w.Write([]byte(tmpl_register_vars.CurrentUser.Session))
-w.Write(header_frags[10])
-w.Write([]byte(tmpl_register_vars.Header.Site.URL))
-w.Write(header_frags[11])
-if tmpl_register_vars.Header.MetaDesc != "" {
-w.Write(header_frags[12])
-w.Write([]byte(tmpl_register_vars.Header.MetaDesc))
-w.Write(header_frags[13])
-}
-w.Write(header_frags[14])
-if !tmpl_register_vars.CurrentUser.IsSuperMod {
-w.Write(header_frags[15])
-}
-w.Write(header_frags[16])
-w.Write([]byte(common.BuildWidget("leftOfNav",tmpl_register_vars.Header)))
-w.Write(header_frags[17])
-w.Write([]byte(tmpl_register_vars.Header.Site.ShortName))
-w.Write(header_frags[18])
-w.Write([]byte(common.BuildWidget("topMenu",tmpl_register_vars.Header)))
-w.Write(header_frags[19])
-w.Write(phrases[0])
-w.Write(header_frags[20])
-w.Write([]byte(common.BuildWidget("rightOfNav",tmpl_register_vars.Header)))
-w.Write(header_frags[21])
-if tmpl_register_vars.Header.Widgets.RightSidebar != "" {
-w.Write(header_frags[22])
-}
-w.Write(header_frags[23])
-if len(tmpl_register_vars.Header.NoticeList) != 0 {
-for _, item := range tmpl_register_vars.Header.NoticeList {
-w.Write(notice_frags[0])
-w.Write([]byte(item))
-w.Write(notice_frags[1])
-}
-}
-w.Write(header_frags[24])
-w.Write(register_frags[0])
-w.Write(phrases[1])
-w.Write(register_frags[1])
-w.Write(phrases[2])
-w.Write(register_frags[2])
-w.Write(phrases[3])
-w.Write(register_frags[3])
-w.Write(phrases[4])
-w.Write(register_frags[4])
-w.Write(phrases[5])
-w.Write(register_frags[5])
-w.Write(phrases[6])
-w.Write(register_frags[6])
-w.Write(phrases[7])
-w.Write(register_frags[7])
-w.Write(footer_frags[0])
-w.Write([]byte(common.BuildWidget("footer",tmpl_register_vars.Header)))
-w.Write(footer_frags[1])
-w.Write(phrases[8])
-w.Write(footer_frags[2])
-w.Write(phrases[9])
-w.Write(footer_frags[3])
-w.Write(phrases[10])
-w.Write(footer_frags[4])
-if len(tmpl_register_vars.Header.Themes) != 0 {
-for _, item := range tmpl_register_vars.Header.Themes {
-if !item.HideFromThemes {
-w.Write(footer_frags[5])
-w.Write([]byte(item.Name))
-w.Write(footer_frags[6])
-if tmpl_register_vars.Header.Theme.Name == item.Name {
-w.Write(footer_frags[7])
-}
-w.Write(footer_frags[8])
-w.Write([]byte(item.FriendlyName))
-w.Write(footer_frags[9])
-}
-}
-}
-w.Write(footer_frags[10])
-w.Write([]byte(common.BuildWidget("rightSidebar",tmpl_register_vars.Header)))
-w.Write(footer_frags[11])
-return nil
-}
diff --git a/template_topic.go b/template_topic.go
deleted file mode 100644
index 8e526213..00000000
--- a/template_topic.go
+++ /dev/null
@@ -1,590 +0,0 @@
-// +build !no_templategen
-
-// Code generated by Gosora. More below:
-/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
-package main
-import "strconv"
-import "io"
-import "./common"
-
-var topic_tmpl_phrase_id int
-
-// nolint
-func init() {
- common.Template_topic_handle = Template_topic
- common.Ctemplates = append(common.Ctemplates,"topic")
- common.TmplPtrMap["topic"] = &common.Template_topic_handle
- common.TmplPtrMap["o_topic"] = Template_topic
- topic_tmpl_phrase_id = common.RegisterTmplPhraseNames([]string{
- "menu_hamburger_tooltip",
- "paginator_prev_page_aria",
- "paginator_less_than",
- "paginator_next_page_aria",
- "paginator_greater_than",
- "topic_opening_post_aria",
- "status_closed_tooltip",
- "topic_status_closed_aria",
- "topic_title_input_aria",
- "topic_update_button",
- "topic_poll_aria",
- "topic_poll_vote",
- "topic_poll_results",
- "topic_poll_cancel",
- "topic_opening_post_aria",
- "topic_post_controls_aria",
- "topic_unlike_tooltip",
- "topic_unlike_aria",
- "topic_like_tooltip",
- "topic_like_aria",
- "topic_edit_tooltip",
- "topic_edit_aria",
- "topic_delete_tooltip",
- "topic_delete_aria",
- "topic_unlock_tooltip",
- "topic_unlock_aria",
- "topic_lock_tooltip",
- "topic_lock_aria",
- "topic_unpin_tooltip",
- "topic_unpin_aria",
- "topic_pin_tooltip",
- "topic_pin_aria",
- "topic_ip_tooltip",
- "topic_flag_tooltip",
- "topic_flag_aria",
- "topic_like_count_aria",
- "topic_like_count_tooltip",
- "topic_level_aria",
- "topic_level_tooltip",
- "topic_current_page_aria",
- "topic_post_like_tooltip",
- "topic_post_like_aria",
- "topic_post_unlike_tooltip",
- "topic_post_unlike_aria",
- "topic_post_edit_tooltip",
- "topic_post_edit_aria",
- "topic_post_delete_tooltip",
- "topic_post_delete_aria",
- "topic_post_ip_tooltip",
- "topic_post_flag_tooltip",
- "topic_post_flag_aria",
- "topic_post_like_count_tooltip",
- "topic_post_level_aria",
- "topic_post_level_tooltip",
- "topic_reply_aria",
- "topic_reply_content",
- "topic_reply_add_poll_option",
- "topic_reply_button",
- "topic_reply_add_poll_button",
- "topic_reply_add_file_button",
- "footer_powered_by",
- "footer_made_with_love",
- "footer_theme_selector_aria",
- })
-}
-
-// nolint
-func Template_topic(tmpl_topic_vars common.TopicPage, w io.Writer) error {
-var phrases = common.GetTmplPhrasesBytes(topic_tmpl_phrase_id)
-w.Write(header_frags[0])
-w.Write([]byte(tmpl_topic_vars.Title))
-w.Write(header_frags[1])
-w.Write([]byte(tmpl_topic_vars.Header.Site.Name))
-w.Write(header_frags[2])
-w.Write([]byte(tmpl_topic_vars.Header.Theme.Name))
-w.Write(header_frags[3])
-if len(tmpl_topic_vars.Header.Stylesheets) != 0 {
-for _, item := range tmpl_topic_vars.Header.Stylesheets {
-w.Write(header_frags[4])
-w.Write([]byte(item))
-w.Write(header_frags[5])
-}
-}
-w.Write(header_frags[6])
-if len(tmpl_topic_vars.Header.Scripts) != 0 {
-for _, item := range tmpl_topic_vars.Header.Scripts {
-w.Write(header_frags[7])
-w.Write([]byte(item))
-w.Write(header_frags[8])
-}
-}
-w.Write(header_frags[9])
-w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
-w.Write(header_frags[10])
-w.Write([]byte(tmpl_topic_vars.Header.Site.URL))
-w.Write(header_frags[11])
-if tmpl_topic_vars.Header.MetaDesc != "" {
-w.Write(header_frags[12])
-w.Write([]byte(tmpl_topic_vars.Header.MetaDesc))
-w.Write(header_frags[13])
-}
-w.Write(header_frags[14])
-if !tmpl_topic_vars.CurrentUser.IsSuperMod {
-w.Write(header_frags[15])
-}
-w.Write(header_frags[16])
-w.Write([]byte(common.BuildWidget("leftOfNav",tmpl_topic_vars.Header)))
-w.Write(header_frags[17])
-w.Write([]byte(tmpl_topic_vars.Header.Site.ShortName))
-w.Write(header_frags[18])
-w.Write([]byte(common.BuildWidget("topMenu",tmpl_topic_vars.Header)))
-w.Write(header_frags[19])
-w.Write(phrases[0])
-w.Write(header_frags[20])
-w.Write([]byte(common.BuildWidget("rightOfNav",tmpl_topic_vars.Header)))
-w.Write(header_frags[21])
-if tmpl_topic_vars.Header.Widgets.RightSidebar != "" {
-w.Write(header_frags[22])
-}
-w.Write(header_frags[23])
-if len(tmpl_topic_vars.Header.NoticeList) != 0 {
-for _, item := range tmpl_topic_vars.Header.NoticeList {
-w.Write(notice_frags[0])
-w.Write([]byte(item))
-w.Write(notice_frags[1])
-}
-}
-w.Write(header_frags[24])
-w.Write(topic_frags[0])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
-w.Write(topic_frags[1])
-w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
-w.Write(topic_frags[2])
-if tmpl_topic_vars.Page > 1 {
-w.Write(topic_frags[3])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
-w.Write(topic_frags[4])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Page - 1)))
-w.Write(topic_frags[5])
-w.Write(phrases[1])
-w.Write(topic_frags[6])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
-w.Write(topic_frags[7])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Page - 1)))
-w.Write(topic_frags[8])
-w.Write(phrases[2])
-w.Write(topic_frags[9])
-}
-if tmpl_topic_vars.LastPage != tmpl_topic_vars.Page {
-w.Write(topic_frags[10])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
-w.Write(topic_frags[11])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Page + 1)))
-w.Write(topic_frags[12])
-w.Write(phrases[3])
-w.Write(topic_frags[13])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
-w.Write(topic_frags[14])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Page + 1)))
-w.Write(topic_frags[15])
-w.Write(phrases[4])
-w.Write(topic_frags[16])
-}
-w.Write(topic_frags[17])
-w.Write(topic_frags[18])
-w.Write(phrases[5])
-w.Write(topic_frags[19])
-if tmpl_topic_vars.Topic.Sticky {
-w.Write(topic_frags[20])
-} else {
-if tmpl_topic_vars.Topic.IsClosed {
-w.Write(topic_frags[21])
-}
-}
-w.Write(topic_frags[22])
-w.Write([]byte(tmpl_topic_vars.Topic.Title))
-w.Write(topic_frags[23])
-w.Write([]byte(tmpl_topic_vars.Topic.Title))
-w.Write(topic_frags[24])
-if tmpl_topic_vars.Topic.IsClosed {
-w.Write(topic_frags[25])
-w.Write(phrases[6])
-w.Write(topic_frags[26])
-w.Write(phrases[7])
-w.Write(topic_frags[27])
-}
-if tmpl_topic_vars.CurrentUser.Perms.EditTopic {
-w.Write(topic_frags[28])
-w.Write([]byte(tmpl_topic_vars.Topic.Title))
-w.Write(topic_frags[29])
-w.Write(phrases[8])
-w.Write(topic_frags[30])
-w.Write(phrases[9])
-w.Write(topic_frags[31])
-}
-w.Write(topic_frags[32])
-if tmpl_topic_vars.Poll.ID > 0 {
-w.Write(topic_frags[33])
-w.Write(phrases[10])
-w.Write(topic_frags[34])
-w.Write([]byte(tmpl_topic_vars.Topic.ClassName))
-w.Write(topic_frags[35])
-w.Write([]byte(tmpl_topic_vars.Topic.Avatar))
-w.Write(topic_frags[36])
-w.Write([]byte(tmpl_topic_vars.Header.Theme.Name))
-w.Write(topic_frags[37])
-if tmpl_topic_vars.Topic.ContentLines <= 5 {
-w.Write(topic_frags[38])
-}
-w.Write(topic_frags[39])
-if len(tmpl_topic_vars.Poll.QuickOptions) != 0 {
-for _, item := range tmpl_topic_vars.Poll.QuickOptions {
-w.Write(topic_frags[40])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Poll.ID)))
-w.Write(topic_frags[41])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topic_frags[42])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topic_frags[43])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topic_frags[44])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topic_frags[45])
-w.Write([]byte(item.Value))
-w.Write(topic_frags[46])
-}
-}
-w.Write(topic_frags[47])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Poll.ID)))
-w.Write(topic_frags[48])
-w.Write(phrases[11])
-w.Write(topic_frags[49])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Poll.ID)))
-w.Write(topic_frags[50])
-w.Write(phrases[12])
-w.Write(topic_frags[51])
-w.Write(phrases[13])
-w.Write(topic_frags[52])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Poll.ID)))
-w.Write(topic_frags[53])
-}
-w.Write(topic_frags[54])
-w.Write(topic_frags[55])
-w.Write(phrases[14])
-w.Write(topic_frags[56])
-w.Write([]byte(tmpl_topic_vars.Topic.ClassName))
-w.Write(topic_frags[57])
-w.Write([]byte(tmpl_topic_vars.Topic.Avatar))
-w.Write(topic_frags[58])
-w.Write([]byte(tmpl_topic_vars.Header.Theme.Name))
-w.Write(topic_frags[59])
-if tmpl_topic_vars.Topic.ContentLines <= 5 {
-w.Write(topic_frags[60])
-}
-w.Write(topic_frags[61])
-w.Write([]byte(tmpl_topic_vars.Topic.ContentHTML))
-w.Write(topic_frags[62])
-w.Write([]byte(tmpl_topic_vars.Topic.Content))
-w.Write(topic_frags[63])
-if tmpl_topic_vars.Topic.LikeCount > 0 {
-w.Write(topic_frags[64])
-}
-w.Write(topic_frags[65])
-w.Write(phrases[15])
-w.Write(topic_frags[66])
-w.Write([]byte(tmpl_topic_vars.Topic.UserLink))
-w.Write(topic_frags[67])
-w.Write([]byte(tmpl_topic_vars.Topic.CreatedByName))
-w.Write(topic_frags[68])
-if tmpl_topic_vars.CurrentUser.Perms.LikeItem {
-w.Write(topic_frags[69])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
-w.Write(topic_frags[70])
-w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
-w.Write(topic_frags[71])
-if tmpl_topic_vars.Topic.Liked {
-w.Write(topic_frags[72])
-w.Write(phrases[16])
-w.Write(topic_frags[73])
-w.Write(phrases[17])
-w.Write(topic_frags[74])
-} else {
-w.Write(topic_frags[75])
-w.Write(phrases[18])
-w.Write(topic_frags[76])
-w.Write(phrases[19])
-w.Write(topic_frags[77])
-}
-w.Write(topic_frags[78])
-if tmpl_topic_vars.Topic.Liked {
-w.Write(topic_frags[79])
-} else {
-w.Write(topic_frags[80])
-}
-w.Write(topic_frags[81])
-}
-if tmpl_topic_vars.CurrentUser.Perms.EditTopic {
-w.Write(topic_frags[82])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
-w.Write(topic_frags[83])
-w.Write(phrases[20])
-w.Write(topic_frags[84])
-w.Write(phrases[21])
-w.Write(topic_frags[85])
-}
-if tmpl_topic_vars.CurrentUser.Perms.DeleteTopic {
-w.Write(topic_frags[86])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
-w.Write(topic_frags[87])
-w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
-w.Write(topic_frags[88])
-w.Write(phrases[22])
-w.Write(topic_frags[89])
-w.Write(phrases[23])
-w.Write(topic_frags[90])
-}
-if tmpl_topic_vars.CurrentUser.Perms.CloseTopic {
-if tmpl_topic_vars.Topic.IsClosed {
-w.Write(topic_frags[91])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
-w.Write(topic_frags[92])
-w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
-w.Write(topic_frags[93])
-w.Write(phrases[24])
-w.Write(topic_frags[94])
-w.Write(phrases[25])
-w.Write(topic_frags[95])
-} else {
-w.Write(topic_frags[96])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
-w.Write(topic_frags[97])
-w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
-w.Write(topic_frags[98])
-w.Write(phrases[26])
-w.Write(topic_frags[99])
-w.Write(phrases[27])
-w.Write(topic_frags[100])
-}
-}
-if tmpl_topic_vars.CurrentUser.Perms.PinTopic {
-if tmpl_topic_vars.Topic.Sticky {
-w.Write(topic_frags[101])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
-w.Write(topic_frags[102])
-w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
-w.Write(topic_frags[103])
-w.Write(phrases[28])
-w.Write(topic_frags[104])
-w.Write(phrases[29])
-w.Write(topic_frags[105])
-} else {
-w.Write(topic_frags[106])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
-w.Write(topic_frags[107])
-w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
-w.Write(topic_frags[108])
-w.Write(phrases[30])
-w.Write(topic_frags[109])
-w.Write(phrases[31])
-w.Write(topic_frags[110])
-}
-}
-if tmpl_topic_vars.CurrentUser.Perms.ViewIPs {
-w.Write(topic_frags[111])
-w.Write([]byte(tmpl_topic_vars.Topic.IPAddress))
-w.Write(topic_frags[112])
-w.Write(phrases[32])
-w.Write(topic_frags[113])
-w.Write([]byte(tmpl_topic_vars.Topic.IPAddress))
-w.Write(topic_frags[114])
-}
-w.Write(topic_frags[115])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
-w.Write(topic_frags[116])
-w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
-w.Write(topic_frags[117])
-w.Write(phrases[33])
-w.Write(topic_frags[118])
-w.Write(phrases[34])
-w.Write(topic_frags[119])
-w.Write(phrases[35])
-w.Write(topic_frags[120])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.LikeCount)))
-w.Write(topic_frags[121])
-w.Write(phrases[36])
-w.Write(topic_frags[122])
-if tmpl_topic_vars.Topic.Tag != "" {
-w.Write(topic_frags[123])
-w.Write([]byte(tmpl_topic_vars.Topic.Tag))
-w.Write(topic_frags[124])
-} else {
-w.Write(topic_frags[125])
-w.Write(phrases[37])
-w.Write(topic_frags[126])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.Level)))
-w.Write(topic_frags[127])
-w.Write(phrases[38])
-w.Write(topic_frags[128])
-}
-w.Write(topic_frags[129])
-w.Write(phrases[39])
-w.Write(topic_frags[130])
-if len(tmpl_topic_vars.ItemList) != 0 {
-for _, item := range tmpl_topic_vars.ItemList {
-if item.ActionType != "" {
-w.Write(topic_frags[131])
-w.Write([]byte(item.ActionIcon))
-w.Write(topic_frags[132])
-w.Write([]byte(item.ActionType))
-w.Write(topic_frags[133])
-} else {
-w.Write(topic_frags[134])
-w.Write(topic_frags[135])
-w.Write([]byte(item.ClassName))
-w.Write(topic_frags[136])
-w.Write([]byte(item.Avatar))
-w.Write(topic_frags[137])
-w.Write([]byte(tmpl_topic_vars.Header.Theme.Name))
-w.Write(topic_frags[138])
-if item.ContentLines <= 5 {
-w.Write(topic_frags[139])
-}
-w.Write(topic_frags[140])
-w.Write(topic_frags[141])
-w.Write([]byte(item.ContentHtml))
-w.Write(topic_frags[142])
-if item.LikeCount > 0 {
-w.Write(topic_frags[143])
-}
-w.Write(topic_frags[144])
-w.Write([]byte(item.UserLink))
-w.Write(topic_frags[145])
-w.Write([]byte(item.CreatedByName))
-w.Write(topic_frags[146])
-if tmpl_topic_vars.CurrentUser.Perms.LikeItem {
-if item.Liked {
-w.Write(topic_frags[147])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topic_frags[148])
-w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
-w.Write(topic_frags[149])
-w.Write(phrases[40])
-w.Write(topic_frags[150])
-w.Write(phrases[41])
-w.Write(topic_frags[151])
-} else {
-w.Write(topic_frags[152])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topic_frags[153])
-w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
-w.Write(topic_frags[154])
-w.Write(phrases[42])
-w.Write(topic_frags[155])
-w.Write(phrases[43])
-w.Write(topic_frags[156])
-}
-}
-if tmpl_topic_vars.CurrentUser.Perms.EditReply {
-w.Write(topic_frags[157])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topic_frags[158])
-w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
-w.Write(topic_frags[159])
-w.Write(phrases[44])
-w.Write(topic_frags[160])
-w.Write(phrases[45])
-w.Write(topic_frags[161])
-}
-if tmpl_topic_vars.CurrentUser.Perms.DeleteReply {
-w.Write(topic_frags[162])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topic_frags[163])
-w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
-w.Write(topic_frags[164])
-w.Write(phrases[46])
-w.Write(topic_frags[165])
-w.Write(phrases[47])
-w.Write(topic_frags[166])
-}
-if tmpl_topic_vars.CurrentUser.Perms.ViewIPs {
-w.Write(topic_frags[167])
-w.Write([]byte(item.IPAddress))
-w.Write(topic_frags[168])
-w.Write(phrases[48])
-w.Write(topic_frags[169])
-w.Write([]byte(item.IPAddress))
-w.Write(topic_frags[170])
-}
-w.Write(topic_frags[171])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topic_frags[172])
-w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
-w.Write(topic_frags[173])
-w.Write(phrases[49])
-w.Write(topic_frags[174])
-w.Write(phrases[50])
-w.Write(topic_frags[175])
-w.Write([]byte(strconv.Itoa(item.LikeCount)))
-w.Write(topic_frags[176])
-w.Write(phrases[51])
-w.Write(topic_frags[177])
-if item.Tag != "" {
-w.Write(topic_frags[178])
-w.Write([]byte(item.Tag))
-w.Write(topic_frags[179])
-} else {
-w.Write(topic_frags[180])
-w.Write(phrases[52])
-w.Write(topic_frags[181])
-w.Write([]byte(strconv.Itoa(item.Level)))
-w.Write(topic_frags[182])
-w.Write(phrases[53])
-w.Write(topic_frags[183])
-}
-w.Write(topic_frags[184])
-}
-}
-}
-w.Write(topic_frags[185])
-if tmpl_topic_vars.CurrentUser.Perms.CreateReply {
-w.Write(topic_frags[186])
-w.Write(phrases[54])
-w.Write(topic_frags[187])
-w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
-w.Write(topic_frags[188])
-w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
-w.Write(topic_frags[189])
-w.Write(phrases[55])
-w.Write(topic_frags[190])
-w.Write(phrases[56])
-w.Write(topic_frags[191])
-w.Write(phrases[57])
-w.Write(topic_frags[192])
-w.Write(phrases[58])
-w.Write(topic_frags[193])
-if tmpl_topic_vars.CurrentUser.Perms.UploadFiles {
-w.Write(topic_frags[194])
-w.Write(phrases[59])
-w.Write(topic_frags[195])
-}
-w.Write(topic_frags[196])
-}
-w.Write(topic_frags[197])
-w.Write(footer_frags[0])
-w.Write([]byte(common.BuildWidget("footer",tmpl_topic_vars.Header)))
-w.Write(footer_frags[1])
-w.Write(phrases[60])
-w.Write(footer_frags[2])
-w.Write(phrases[61])
-w.Write(footer_frags[3])
-w.Write(phrases[62])
-w.Write(footer_frags[4])
-if len(tmpl_topic_vars.Header.Themes) != 0 {
-for _, item := range tmpl_topic_vars.Header.Themes {
-if !item.HideFromThemes {
-w.Write(footer_frags[5])
-w.Write([]byte(item.Name))
-w.Write(footer_frags[6])
-if tmpl_topic_vars.Header.Theme.Name == item.Name {
-w.Write(footer_frags[7])
-}
-w.Write(footer_frags[8])
-w.Write([]byte(item.FriendlyName))
-w.Write(footer_frags[9])
-}
-}
-}
-w.Write(footer_frags[10])
-w.Write([]byte(common.BuildWidget("rightSidebar",tmpl_topic_vars.Header)))
-w.Write(footer_frags[11])
-return nil
-}
diff --git a/template_topic_alt.go b/template_topic_alt.go
deleted file mode 100644
index 90eaf452..00000000
--- a/template_topic_alt.go
+++ /dev/null
@@ -1,583 +0,0 @@
-// +build !no_templategen
-
-// Code generated by Gosora. More below:
-/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
-package main
-import "./common"
-import "strconv"
-import "io"
-
-var topic_alt_tmpl_phrase_id int
-
-// nolint
-func init() {
- common.Template_topic_alt_handle = Template_topic_alt
- common.Ctemplates = append(common.Ctemplates,"topic_alt")
- common.TmplPtrMap["topic_alt"] = &common.Template_topic_alt_handle
- common.TmplPtrMap["o_topic_alt"] = Template_topic_alt
- topic_alt_tmpl_phrase_id = common.RegisterTmplPhraseNames([]string{
- "menu_hamburger_tooltip",
- "paginator_prev_page_aria",
- "paginator_less_than",
- "paginator_next_page_aria",
- "paginator_greater_than",
- "topic_opening_post_aria",
- "status_closed_tooltip",
- "topic_status_closed_aria",
- "topic_title_input_aria",
- "topic_update_button",
- "topic_userinfo_aria",
- "topic_level_prefix",
- "topic_poll_vote",
- "topic_poll_results",
- "topic_poll_cancel",
- "topic_opening_post_aria",
- "topic_userinfo_aria",
- "topic_level_prefix",
- "topic_like_aria",
- "topic_edit_aria",
- "topic_delete_aria",
- "topic_unlock_aria",
- "topic_lock_aria",
- "topic_unpin_aria",
- "topic_pin_aria",
- "topic_ip_full_tooltip",
- "topic_ip_full_aria",
- "topic_report_aria",
- "topic_like_count_aria",
- "topic_ip_full_tooltip",
- "topic_userinfo_aria",
- "topic_level_prefix",
- "topic_post_like_aria",
- "topic_post_edit_aria",
- "topic_post_delete_aria",
- "topic_ip_full_tooltip",
- "topic_ip_full_aria",
- "topic_report_aria",
- "topic_post_like_count_tooltip",
- "topic_your_information",
- "topic_level_prefix",
- "topic_reply_aria",
- "topic_reply_content_alt",
- "topic_reply_add_poll_option",
- "topic_reply_button",
- "topic_reply_add_poll_button",
- "topic_reply_add_file_button",
- "footer_powered_by",
- "footer_made_with_love",
- "footer_theme_selector_aria",
- })
-}
-
-// nolint
-func Template_topic_alt(tmpl_topic_alt_vars common.TopicPage, w io.Writer) error {
-var phrases = common.GetTmplPhrasesBytes(topic_alt_tmpl_phrase_id)
-w.Write(header_frags[0])
-w.Write([]byte(tmpl_topic_alt_vars.Title))
-w.Write(header_frags[1])
-w.Write([]byte(tmpl_topic_alt_vars.Header.Site.Name))
-w.Write(header_frags[2])
-w.Write([]byte(tmpl_topic_alt_vars.Header.Theme.Name))
-w.Write(header_frags[3])
-if len(tmpl_topic_alt_vars.Header.Stylesheets) != 0 {
-for _, item := range tmpl_topic_alt_vars.Header.Stylesheets {
-w.Write(header_frags[4])
-w.Write([]byte(item))
-w.Write(header_frags[5])
-}
-}
-w.Write(header_frags[6])
-if len(tmpl_topic_alt_vars.Header.Scripts) != 0 {
-for _, item := range tmpl_topic_alt_vars.Header.Scripts {
-w.Write(header_frags[7])
-w.Write([]byte(item))
-w.Write(header_frags[8])
-}
-}
-w.Write(header_frags[9])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
-w.Write(header_frags[10])
-w.Write([]byte(tmpl_topic_alt_vars.Header.Site.URL))
-w.Write(header_frags[11])
-if tmpl_topic_alt_vars.Header.MetaDesc != "" {
-w.Write(header_frags[12])
-w.Write([]byte(tmpl_topic_alt_vars.Header.MetaDesc))
-w.Write(header_frags[13])
-}
-w.Write(header_frags[14])
-if !tmpl_topic_alt_vars.CurrentUser.IsSuperMod {
-w.Write(header_frags[15])
-}
-w.Write(header_frags[16])
-w.Write([]byte(common.BuildWidget("leftOfNav",tmpl_topic_alt_vars.Header)))
-w.Write(header_frags[17])
-w.Write([]byte(tmpl_topic_alt_vars.Header.Site.ShortName))
-w.Write(header_frags[18])
-w.Write([]byte(common.BuildWidget("topMenu",tmpl_topic_alt_vars.Header)))
-w.Write(header_frags[19])
-w.Write(phrases[0])
-w.Write(header_frags[20])
-w.Write([]byte(common.BuildWidget("rightOfNav",tmpl_topic_alt_vars.Header)))
-w.Write(header_frags[21])
-if tmpl_topic_alt_vars.Header.Widgets.RightSidebar != "" {
-w.Write(header_frags[22])
-}
-w.Write(header_frags[23])
-if len(tmpl_topic_alt_vars.Header.NoticeList) != 0 {
-for _, item := range tmpl_topic_alt_vars.Header.NoticeList {
-w.Write(notice_frags[0])
-w.Write([]byte(item))
-w.Write(notice_frags[1])
-}
-}
-w.Write(header_frags[24])
-if tmpl_topic_alt_vars.Page > 1 {
-w.Write(topic_alt_frags[0])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
-w.Write(topic_alt_frags[1])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Page - 1)))
-w.Write(topic_alt_frags[2])
-w.Write(phrases[1])
-w.Write(topic_alt_frags[3])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
-w.Write(topic_alt_frags[4])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Page - 1)))
-w.Write(topic_alt_frags[5])
-w.Write(phrases[2])
-w.Write(topic_alt_frags[6])
-}
-if tmpl_topic_alt_vars.LastPage != tmpl_topic_alt_vars.Page {
-w.Write(topic_alt_frags[7])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
-w.Write(topic_alt_frags[8])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Page + 1)))
-w.Write(topic_alt_frags[9])
-w.Write(phrases[3])
-w.Write(topic_alt_frags[10])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
-w.Write(topic_alt_frags[11])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Page + 1)))
-w.Write(topic_alt_frags[12])
-w.Write(phrases[4])
-w.Write(topic_alt_frags[13])
-}
-w.Write(topic_alt_frags[14])
-w.Write(topic_alt_frags[15])
-w.Write(phrases[5])
-w.Write(topic_alt_frags[16])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
-w.Write(topic_alt_frags[17])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
-w.Write(topic_alt_frags[18])
-if tmpl_topic_alt_vars.Topic.Sticky {
-w.Write(topic_alt_frags[19])
-} else {
-if tmpl_topic_alt_vars.Topic.IsClosed {
-w.Write(topic_alt_frags[20])
-}
-}
-w.Write(topic_alt_frags[21])
-w.Write([]byte(tmpl_topic_alt_vars.Topic.Title))
-w.Write(topic_alt_frags[22])
-w.Write([]byte(tmpl_topic_alt_vars.Topic.Title))
-w.Write(topic_alt_frags[23])
-if tmpl_topic_alt_vars.Topic.IsClosed {
-w.Write(topic_alt_frags[24])
-w.Write(phrases[6])
-w.Write(topic_alt_frags[25])
-w.Write(phrases[7])
-w.Write(topic_alt_frags[26])
-}
-if tmpl_topic_alt_vars.CurrentUser.Perms.EditTopic {
-w.Write(topic_alt_frags[27])
-w.Write([]byte(tmpl_topic_alt_vars.Topic.Title))
-w.Write(topic_alt_frags[28])
-w.Write(phrases[8])
-w.Write(topic_alt_frags[29])
-w.Write(phrases[9])
-w.Write(topic_alt_frags[30])
-}
-w.Write(topic_alt_frags[31])
-if tmpl_topic_alt_vars.Poll.ID > 0 {
-w.Write(topic_alt_frags[32])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Poll.ID)))
-w.Write(topic_alt_frags[33])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Poll.ID)))
-w.Write(topic_alt_frags[34])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
-w.Write(topic_alt_frags[35])
-w.Write(phrases[10])
-w.Write(topic_alt_frags[36])
-w.Write([]byte(tmpl_topic_alt_vars.Topic.Avatar))
-w.Write(topic_alt_frags[37])
-w.Write([]byte(tmpl_topic_alt_vars.Topic.UserLink))
-w.Write(topic_alt_frags[38])
-w.Write([]byte(tmpl_topic_alt_vars.Topic.CreatedByName))
-w.Write(topic_alt_frags[39])
-if tmpl_topic_alt_vars.Topic.Tag != "" {
-w.Write(topic_alt_frags[40])
-w.Write([]byte(tmpl_topic_alt_vars.Topic.Tag))
-w.Write(topic_alt_frags[41])
-} else {
-w.Write(topic_alt_frags[42])
-w.Write(phrases[11])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.Level)))
-w.Write(topic_alt_frags[43])
-}
-w.Write(topic_alt_frags[44])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Poll.ID)))
-w.Write(topic_alt_frags[45])
-if len(tmpl_topic_alt_vars.Poll.QuickOptions) != 0 {
-for _, item := range tmpl_topic_alt_vars.Poll.QuickOptions {
-w.Write(topic_alt_frags[46])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Poll.ID)))
-w.Write(topic_alt_frags[47])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topic_alt_frags[48])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topic_alt_frags[49])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topic_alt_frags[50])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topic_alt_frags[51])
-w.Write([]byte(item.Value))
-w.Write(topic_alt_frags[52])
-}
-}
-w.Write(topic_alt_frags[53])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Poll.ID)))
-w.Write(topic_alt_frags[54])
-w.Write(phrases[12])
-w.Write(topic_alt_frags[55])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Poll.ID)))
-w.Write(topic_alt_frags[56])
-w.Write(phrases[13])
-w.Write(topic_alt_frags[57])
-w.Write(phrases[14])
-w.Write(topic_alt_frags[58])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Poll.ID)))
-w.Write(topic_alt_frags[59])
-}
-w.Write(topic_alt_frags[60])
-w.Write(topic_alt_frags[61])
-w.Write(phrases[15])
-w.Write(topic_alt_frags[62])
-w.Write(phrases[16])
-w.Write(topic_alt_frags[63])
-w.Write([]byte(tmpl_topic_alt_vars.Topic.Avatar))
-w.Write(topic_alt_frags[64])
-w.Write([]byte(tmpl_topic_alt_vars.Topic.UserLink))
-w.Write(topic_alt_frags[65])
-w.Write([]byte(tmpl_topic_alt_vars.Topic.CreatedByName))
-w.Write(topic_alt_frags[66])
-if tmpl_topic_alt_vars.Topic.Tag != "" {
-w.Write(topic_alt_frags[67])
-w.Write([]byte(tmpl_topic_alt_vars.Topic.Tag))
-w.Write(topic_alt_frags[68])
-} else {
-w.Write(topic_alt_frags[69])
-w.Write(phrases[17])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.Level)))
-w.Write(topic_alt_frags[70])
-}
-w.Write(topic_alt_frags[71])
-w.Write([]byte(tmpl_topic_alt_vars.Topic.ContentHTML))
-w.Write(topic_alt_frags[72])
-w.Write([]byte(tmpl_topic_alt_vars.Topic.Content))
-w.Write(topic_alt_frags[73])
-if tmpl_topic_alt_vars.Topic.LikeCount > 0 {
-w.Write(topic_alt_frags[74])
-}
-w.Write(topic_alt_frags[75])
-if tmpl_topic_alt_vars.CurrentUser.Loggedin {
-if tmpl_topic_alt_vars.CurrentUser.Perms.LikeItem {
-w.Write(topic_alt_frags[76])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
-w.Write(topic_alt_frags[77])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
-w.Write(topic_alt_frags[78])
-if tmpl_topic_alt_vars.Topic.Liked {
-w.Write(topic_alt_frags[79])
-} else {
-w.Write(topic_alt_frags[80])
-}
-w.Write(topic_alt_frags[81])
-w.Write(phrases[18])
-w.Write(topic_alt_frags[82])
-}
-if tmpl_topic_alt_vars.CurrentUser.Perms.EditTopic {
-w.Write(topic_alt_frags[83])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
-w.Write(topic_alt_frags[84])
-w.Write(phrases[19])
-w.Write(topic_alt_frags[85])
-}
-if tmpl_topic_alt_vars.CurrentUser.Perms.DeleteTopic {
-w.Write(topic_alt_frags[86])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
-w.Write(topic_alt_frags[87])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
-w.Write(topic_alt_frags[88])
-w.Write(phrases[20])
-w.Write(topic_alt_frags[89])
-}
-if tmpl_topic_alt_vars.CurrentUser.Perms.CloseTopic {
-if tmpl_topic_alt_vars.Topic.IsClosed {
-w.Write(topic_alt_frags[90])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
-w.Write(topic_alt_frags[91])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
-w.Write(topic_alt_frags[92])
-w.Write(phrases[21])
-w.Write(topic_alt_frags[93])
-} else {
-w.Write(topic_alt_frags[94])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
-w.Write(topic_alt_frags[95])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
-w.Write(topic_alt_frags[96])
-w.Write(phrases[22])
-w.Write(topic_alt_frags[97])
-}
-}
-if tmpl_topic_alt_vars.CurrentUser.Perms.PinTopic {
-if tmpl_topic_alt_vars.Topic.Sticky {
-w.Write(topic_alt_frags[98])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
-w.Write(topic_alt_frags[99])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
-w.Write(topic_alt_frags[100])
-w.Write(phrases[23])
-w.Write(topic_alt_frags[101])
-} else {
-w.Write(topic_alt_frags[102])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
-w.Write(topic_alt_frags[103])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
-w.Write(topic_alt_frags[104])
-w.Write(phrases[24])
-w.Write(topic_alt_frags[105])
-}
-}
-if tmpl_topic_alt_vars.CurrentUser.Perms.ViewIPs {
-w.Write(topic_alt_frags[106])
-w.Write([]byte(tmpl_topic_alt_vars.Topic.IPAddress))
-w.Write(topic_alt_frags[107])
-w.Write(phrases[25])
-w.Write(topic_alt_frags[108])
-w.Write(phrases[26])
-w.Write(topic_alt_frags[109])
-}
-w.Write(topic_alt_frags[110])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
-w.Write(topic_alt_frags[111])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
-w.Write(topic_alt_frags[112])
-w.Write(phrases[27])
-w.Write(topic_alt_frags[113])
-}
-w.Write(topic_alt_frags[114])
-w.Write(phrases[28])
-w.Write(topic_alt_frags[115])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.LikeCount)))
-w.Write(topic_alt_frags[116])
-w.Write([]byte(tmpl_topic_alt_vars.Topic.RelativeCreatedAt))
-w.Write(topic_alt_frags[117])
-if tmpl_topic_alt_vars.CurrentUser.Perms.ViewIPs {
-w.Write(topic_alt_frags[118])
-w.Write([]byte(tmpl_topic_alt_vars.Topic.IPAddress))
-w.Write(topic_alt_frags[119])
-w.Write(phrases[29])
-w.Write(topic_alt_frags[120])
-w.Write([]byte(tmpl_topic_alt_vars.Topic.IPAddress))
-w.Write(topic_alt_frags[121])
-}
-w.Write(topic_alt_frags[122])
-if len(tmpl_topic_alt_vars.ItemList) != 0 {
-for _, item := range tmpl_topic_alt_vars.ItemList {
-w.Write(topic_alt_frags[123])
-w.Write(topic_alt_frags[124])
-if item.ActionType != "" {
-w.Write(topic_alt_frags[125])
-}
-w.Write(topic_alt_frags[126])
-w.Write(phrases[30])
-w.Write(topic_alt_frags[127])
-w.Write([]byte(item.Avatar))
-w.Write(topic_alt_frags[128])
-w.Write([]byte(item.UserLink))
-w.Write(topic_alt_frags[129])
-w.Write([]byte(item.CreatedByName))
-w.Write(topic_alt_frags[130])
-if item.Tag != "" {
-w.Write(topic_alt_frags[131])
-w.Write([]byte(item.Tag))
-w.Write(topic_alt_frags[132])
-} else {
-w.Write(topic_alt_frags[133])
-w.Write(phrases[31])
-w.Write([]byte(strconv.Itoa(item.Level)))
-w.Write(topic_alt_frags[134])
-}
-w.Write(topic_alt_frags[135])
-if item.ActionType != "" {
-w.Write(topic_alt_frags[136])
-}
-w.Write(topic_alt_frags[137])
-if item.ActionType != "" {
-w.Write(topic_alt_frags[138])
-w.Write([]byte(item.ActionIcon))
-w.Write(topic_alt_frags[139])
-w.Write([]byte(item.ActionType))
-w.Write(topic_alt_frags[140])
-} else {
-w.Write(topic_alt_frags[141])
-w.Write([]byte(item.ContentHtml))
-w.Write(topic_alt_frags[142])
-if item.LikeCount > 0 {
-w.Write(topic_alt_frags[143])
-}
-w.Write(topic_alt_frags[144])
-if tmpl_topic_alt_vars.CurrentUser.Loggedin {
-if tmpl_topic_alt_vars.CurrentUser.Perms.LikeItem {
-w.Write(topic_alt_frags[145])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topic_alt_frags[146])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
-w.Write(topic_alt_frags[147])
-if item.Liked {
-w.Write(topic_alt_frags[148])
-} else {
-w.Write(topic_alt_frags[149])
-}
-w.Write(topic_alt_frags[150])
-w.Write(phrases[32])
-w.Write(topic_alt_frags[151])
-}
-if tmpl_topic_alt_vars.CurrentUser.Perms.EditReply {
-w.Write(topic_alt_frags[152])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topic_alt_frags[153])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
-w.Write(topic_alt_frags[154])
-w.Write(phrases[33])
-w.Write(topic_alt_frags[155])
-}
-if tmpl_topic_alt_vars.CurrentUser.Perms.DeleteReply {
-w.Write(topic_alt_frags[156])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topic_alt_frags[157])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
-w.Write(topic_alt_frags[158])
-w.Write(phrases[34])
-w.Write(topic_alt_frags[159])
-}
-if tmpl_topic_alt_vars.CurrentUser.Perms.ViewIPs {
-w.Write(topic_alt_frags[160])
-w.Write([]byte(item.IPAddress))
-w.Write(topic_alt_frags[161])
-w.Write(phrases[35])
-w.Write(topic_alt_frags[162])
-w.Write(phrases[36])
-w.Write(topic_alt_frags[163])
-}
-w.Write(topic_alt_frags[164])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topic_alt_frags[165])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
-w.Write(topic_alt_frags[166])
-w.Write(phrases[37])
-w.Write(topic_alt_frags[167])
-}
-w.Write(topic_alt_frags[168])
-w.Write(phrases[38])
-w.Write(topic_alt_frags[169])
-w.Write([]byte(strconv.Itoa(item.LikeCount)))
-w.Write(topic_alt_frags[170])
-w.Write([]byte(item.RelativeCreatedAt))
-w.Write(topic_alt_frags[171])
-if tmpl_topic_alt_vars.CurrentUser.Perms.ViewIPs {
-w.Write(topic_alt_frags[172])
-w.Write([]byte(item.IPAddress))
-w.Write(topic_alt_frags[173])
-w.Write([]byte(item.IPAddress))
-w.Write(topic_alt_frags[174])
-}
-w.Write(topic_alt_frags[175])
-}
-w.Write(topic_alt_frags[176])
-}
-}
-w.Write(topic_alt_frags[177])
-if tmpl_topic_alt_vars.CurrentUser.Perms.CreateReply {
-w.Write(topic_alt_frags[178])
-w.Write(phrases[39])
-w.Write(topic_alt_frags[179])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Avatar))
-w.Write(topic_alt_frags[180])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Link))
-w.Write(topic_alt_frags[181])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Name))
-w.Write(topic_alt_frags[182])
-if tmpl_topic_alt_vars.CurrentUser.Tag != "" {
-w.Write(topic_alt_frags[183])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Tag))
-w.Write(topic_alt_frags[184])
-} else {
-w.Write(topic_alt_frags[185])
-w.Write(phrases[40])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.CurrentUser.Level)))
-w.Write(topic_alt_frags[186])
-}
-w.Write(topic_alt_frags[187])
-w.Write(phrases[41])
-w.Write(topic_alt_frags[188])
-w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
-w.Write(topic_alt_frags[189])
-w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
-w.Write(topic_alt_frags[190])
-w.Write(phrases[42])
-w.Write(topic_alt_frags[191])
-w.Write(phrases[43])
-w.Write(topic_alt_frags[192])
-w.Write(phrases[44])
-w.Write(topic_alt_frags[193])
-w.Write(phrases[45])
-w.Write(topic_alt_frags[194])
-if tmpl_topic_alt_vars.CurrentUser.Perms.UploadFiles {
-w.Write(topic_alt_frags[195])
-w.Write(phrases[46])
-w.Write(topic_alt_frags[196])
-}
-w.Write(topic_alt_frags[197])
-}
-w.Write(topic_alt_frags[198])
-w.Write(footer_frags[0])
-w.Write([]byte(common.BuildWidget("footer",tmpl_topic_alt_vars.Header)))
-w.Write(footer_frags[1])
-w.Write(phrases[47])
-w.Write(footer_frags[2])
-w.Write(phrases[48])
-w.Write(footer_frags[3])
-w.Write(phrases[49])
-w.Write(footer_frags[4])
-if len(tmpl_topic_alt_vars.Header.Themes) != 0 {
-for _, item := range tmpl_topic_alt_vars.Header.Themes {
-if !item.HideFromThemes {
-w.Write(footer_frags[5])
-w.Write([]byte(item.Name))
-w.Write(footer_frags[6])
-if tmpl_topic_alt_vars.Header.Theme.Name == item.Name {
-w.Write(footer_frags[7])
-}
-w.Write(footer_frags[8])
-w.Write([]byte(item.FriendlyName))
-w.Write(footer_frags[9])
-}
-}
-}
-w.Write(footer_frags[10])
-w.Write([]byte(common.BuildWidget("rightSidebar",tmpl_topic_alt_vars.Header)))
-w.Write(footer_frags[11])
-return nil
-}
diff --git a/template_topics.go b/template_topics.go
deleted file mode 100644
index eaa656e5..00000000
--- a/template_topics.go
+++ /dev/null
@@ -1,388 +0,0 @@
-// +build !no_templategen
-
-// Code generated by Gosora. More below:
-/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
-package main
-import "io"
-import "./common"
-import "strconv"
-
-var topics_tmpl_phrase_id int
-
-// nolint
-func init() {
- common.Template_topics_handle = Template_topics
- common.Ctemplates = append(common.Ctemplates,"topics")
- common.TmplPtrMap["topics"] = &common.Template_topics_handle
- common.TmplPtrMap["o_topics"] = Template_topics
- topics_tmpl_phrase_id = common.RegisterTmplPhraseNames([]string{
- "menu_hamburger_tooltip",
- "topics_head",
- "topic_list_create_topic_tooltip",
- "topic_list_create_topic_aria",
- "topic_list_moderate_tooltip",
- "topic_list_moderate_aria",
- "topics_locked_tooltip",
- "topics_locked_aria",
- "topic_list_what_to_do",
- "topic_list_moderate_delete",
- "topic_list_moderate_lock",
- "topic_list_moderate_move",
- "topic_list_moderate_run",
- "topic_list_move_head",
- "topic_list_move_button",
- "quick_topic_aria",
- "quick_topic_avatar_alt",
- "quick_topic_avatar_tooltip",
- "quick_topic_whatsup",
- "quick_topic_content_placeholder",
- "quick_topic_add_poll_option",
- "quick_topic_create_topic_button",
- "quick_topic_add_poll_button",
- "quick_topic_add_file_button",
- "quick_topic_cancel_button",
- "topics_list_aria",
- "status_closed_tooltip",
- "status_pinned_tooltip",
- "topics_no_topics",
- "topics_start_one",
- "paginator_prev_page_aria",
- "paginator_prev_page",
- "paginator_next_page_aria",
- "paginator_next_page",
- "footer_powered_by",
- "footer_made_with_love",
- "footer_theme_selector_aria",
- })
-}
-
-// nolint
-func Template_topics(tmpl_topics_vars common.TopicListPage, w io.Writer) error {
-var phrases = common.GetTmplPhrasesBytes(topics_tmpl_phrase_id)
-w.Write(header_frags[0])
-w.Write([]byte(tmpl_topics_vars.Title))
-w.Write(header_frags[1])
-w.Write([]byte(tmpl_topics_vars.Header.Site.Name))
-w.Write(header_frags[2])
-w.Write([]byte(tmpl_topics_vars.Header.Theme.Name))
-w.Write(header_frags[3])
-if len(tmpl_topics_vars.Header.Stylesheets) != 0 {
-for _, item := range tmpl_topics_vars.Header.Stylesheets {
-w.Write(header_frags[4])
-w.Write([]byte(item))
-w.Write(header_frags[5])
-}
-}
-w.Write(header_frags[6])
-if len(tmpl_topics_vars.Header.Scripts) != 0 {
-for _, item := range tmpl_topics_vars.Header.Scripts {
-w.Write(header_frags[7])
-w.Write([]byte(item))
-w.Write(header_frags[8])
-}
-}
-w.Write(header_frags[9])
-w.Write([]byte(tmpl_topics_vars.CurrentUser.Session))
-w.Write(header_frags[10])
-w.Write([]byte(tmpl_topics_vars.Header.Site.URL))
-w.Write(header_frags[11])
-if tmpl_topics_vars.Header.MetaDesc != "" {
-w.Write(header_frags[12])
-w.Write([]byte(tmpl_topics_vars.Header.MetaDesc))
-w.Write(header_frags[13])
-}
-w.Write(header_frags[14])
-if !tmpl_topics_vars.CurrentUser.IsSuperMod {
-w.Write(header_frags[15])
-}
-w.Write(header_frags[16])
-w.Write([]byte(common.BuildWidget("leftOfNav",tmpl_topics_vars.Header)))
-w.Write(header_frags[17])
-w.Write([]byte(tmpl_topics_vars.Header.Site.ShortName))
-w.Write(header_frags[18])
-w.Write([]byte(common.BuildWidget("topMenu",tmpl_topics_vars.Header)))
-w.Write(header_frags[19])
-w.Write(phrases[0])
-w.Write(header_frags[20])
-w.Write([]byte(common.BuildWidget("rightOfNav",tmpl_topics_vars.Header)))
-w.Write(header_frags[21])
-if tmpl_topics_vars.Header.Widgets.RightSidebar != "" {
-w.Write(header_frags[22])
-}
-w.Write(header_frags[23])
-if len(tmpl_topics_vars.Header.NoticeList) != 0 {
-for _, item := range tmpl_topics_vars.Header.NoticeList {
-w.Write(notice_frags[0])
-w.Write([]byte(item))
-w.Write(notice_frags[1])
-}
-}
-w.Write(header_frags[24])
-w.Write(topics_frags[0])
-if tmpl_topics_vars.CurrentUser.ID != 0 {
-w.Write(topics_frags[1])
-}
-w.Write(topics_frags[2])
-w.Write(phrases[1])
-w.Write(topics_frags[3])
-if tmpl_topics_vars.CurrentUser.ID != 0 {
-w.Write(topics_frags[4])
-if len(tmpl_topics_vars.ForumList) != 0 {
-w.Write(topics_frags[5])
-w.Write(phrases[2])
-w.Write(topics_frags[6])
-w.Write(phrases[3])
-w.Write(topics_frags[7])
-w.Write(topics_frags[8])
-w.Write(phrases[4])
-w.Write(topics_frags[9])
-w.Write(phrases[5])
-w.Write(topics_frags[10])
-} else {
-w.Write(topics_frags[11])
-w.Write(phrases[6])
-w.Write(topics_frags[12])
-w.Write(phrases[7])
-w.Write(topics_frags[13])
-}
-w.Write(topics_frags[14])
-}
-w.Write(topics_frags[15])
-if tmpl_topics_vars.CurrentUser.ID != 0 {
-w.Write(topics_frags[16])
-w.Write(phrases[8])
-w.Write(topics_frags[17])
-w.Write(phrases[9])
-w.Write(topics_frags[18])
-w.Write(phrases[10])
-w.Write(topics_frags[19])
-w.Write(phrases[11])
-w.Write(topics_frags[20])
-w.Write(phrases[12])
-w.Write(topics_frags[21])
-if len(tmpl_topics_vars.ForumList) != 0 {
-w.Write(topics_frags[22])
-w.Write([]byte(tmpl_topics_vars.CurrentUser.Session))
-w.Write(topics_frags[23])
-w.Write(phrases[13])
-w.Write(topics_frags[24])
-if len(tmpl_topics_vars.ForumList) != 0 {
-for _, item := range tmpl_topics_vars.ForumList {
-w.Write(topics_frags[25])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topics_frags[26])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topics_frags[27])
-w.Write([]byte(item.Name))
-w.Write(topics_frags[28])
-}
-}
-w.Write(topics_frags[29])
-w.Write(phrases[14])
-w.Write(topics_frags[30])
-w.Write(phrases[15])
-w.Write(topics_frags[31])
-w.Write([]byte(tmpl_topics_vars.CurrentUser.Session))
-w.Write(topics_frags[32])
-w.Write([]byte(tmpl_topics_vars.CurrentUser.Avatar))
-w.Write(topics_frags[33])
-w.Write(phrases[16])
-w.Write(topics_frags[34])
-w.Write(phrases[17])
-w.Write(topics_frags[35])
-if len(tmpl_topics_vars.ForumList) != 0 {
-for _, item := range tmpl_topics_vars.ForumList {
-w.Write(topics_frags[36])
-if item.ID == tmpl_topics_vars.DefaultForum {
-w.Write(topics_frags[37])
-}
-w.Write(topics_frags[38])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topics_frags[39])
-w.Write([]byte(item.Name))
-w.Write(topics_frags[40])
-}
-}
-w.Write(topics_frags[41])
-w.Write(phrases[18])
-w.Write(topics_frags[42])
-w.Write(phrases[19])
-w.Write(topics_frags[43])
-w.Write(phrases[20])
-w.Write(topics_frags[44])
-w.Write(phrases[21])
-w.Write(topics_frags[45])
-w.Write(phrases[22])
-w.Write(topics_frags[46])
-if tmpl_topics_vars.CurrentUser.Perms.UploadFiles {
-w.Write(topics_frags[47])
-w.Write(phrases[23])
-w.Write(topics_frags[48])
-}
-w.Write(topics_frags[49])
-w.Write(phrases[24])
-w.Write(topics_frags[50])
-}
-}
-w.Write(topics_frags[51])
-w.Write(phrases[25])
-w.Write(topics_frags[52])
-if len(tmpl_topics_vars.TopicList) != 0 {
-for _, item := range tmpl_topics_vars.TopicList {
-w.Write(topics_frags[53])
-w.Write([]byte(strconv.Itoa(item.ID)))
-w.Write(topics_frags[54])
-if item.Sticky {
-w.Write(topics_frags[55])
-} else {
-if item.IsClosed {
-w.Write(topics_frags[56])
-}
-}
-w.Write(topics_frags[57])
-w.Write([]byte(item.Creator.Link))
-w.Write(topics_frags[58])
-w.Write([]byte(item.Creator.Avatar))
-w.Write(topics_frags[59])
-w.Write([]byte(item.Creator.Name))
-w.Write(topics_frags[60])
-w.Write([]byte(item.Creator.Name))
-w.Write(topics_frags[61])
-w.Write([]byte(item.Link))
-w.Write(topics_frags[62])
-w.Write([]byte(item.Title))
-w.Write(topics_frags[63])
-w.Write([]byte(item.Title))
-w.Write(topics_frags[64])
-if item.ForumName != "" {
-w.Write(topics_frags[65])
-w.Write([]byte(item.ForumLink))
-w.Write(topics_frags[66])
-w.Write([]byte(item.ForumName))
-w.Write(topics_frags[67])
-w.Write([]byte(item.ForumName))
-w.Write(topics_frags[68])
-}
-w.Write(topics_frags[69])
-w.Write([]byte(item.Creator.Link))
-w.Write(topics_frags[70])
-w.Write([]byte(item.Creator.Name))
-w.Write(topics_frags[71])
-w.Write([]byte(item.Creator.Name))
-w.Write(topics_frags[72])
-if item.IsClosed {
-w.Write(topics_frags[73])
-w.Write(phrases[26])
-w.Write(topics_frags[74])
-}
-if item.Sticky {
-w.Write(topics_frags[75])
-w.Write(phrases[27])
-w.Write(topics_frags[76])
-}
-w.Write(topics_frags[77])
-w.Write([]byte(strconv.Itoa(item.PostCount)))
-w.Write(topics_frags[78])
-w.Write([]byte(strconv.Itoa(item.LikeCount)))
-w.Write(topics_frags[79])
-if item.Sticky {
-w.Write(topics_frags[80])
-} else {
-if item.IsClosed {
-w.Write(topics_frags[81])
-}
-}
-w.Write(topics_frags[82])
-w.Write([]byte(item.LastUser.Link))
-w.Write(topics_frags[83])
-w.Write([]byte(item.LastUser.Avatar))
-w.Write(topics_frags[84])
-w.Write([]byte(item.LastUser.Name))
-w.Write(topics_frags[85])
-w.Write([]byte(item.LastUser.Name))
-w.Write(topics_frags[86])
-w.Write([]byte(item.LastUser.Link))
-w.Write(topics_frags[87])
-w.Write([]byte(item.LastUser.Name))
-w.Write(topics_frags[88])
-w.Write([]byte(item.LastUser.Name))
-w.Write(topics_frags[89])
-w.Write([]byte(item.RelativeLastReplyAt))
-w.Write(topics_frags[90])
-}
-} else {
-w.Write(topics_frags[91])
-w.Write(phrases[28])
-if tmpl_topics_vars.CurrentUser.Perms.CreateTopic {
-w.Write(topics_frags[92])
-w.Write(phrases[29])
-w.Write(topics_frags[93])
-}
-w.Write(topics_frags[94])
-}
-w.Write(topics_frags[95])
-if tmpl_topics_vars.LastPage > 1 {
-w.Write(paginator_frags[0])
-if tmpl_topics_vars.Page > 1 {
-w.Write(paginator_frags[1])
-w.Write([]byte(strconv.Itoa(tmpl_topics_vars.Page - 1)))
-w.Write(paginator_frags[2])
-w.Write(phrases[30])
-w.Write(paginator_frags[3])
-w.Write(phrases[31])
-w.Write(paginator_frags[4])
-w.Write([]byte(strconv.Itoa(tmpl_topics_vars.Page - 1)))
-w.Write(paginator_frags[5])
-}
-if len(tmpl_topics_vars.PageList) != 0 {
-for _, item := range tmpl_topics_vars.PageList {
-w.Write(paginator_frags[6])
-w.Write([]byte(strconv.Itoa(item)))
-w.Write(paginator_frags[7])
-w.Write([]byte(strconv.Itoa(item)))
-w.Write(paginator_frags[8])
-}
-}
-if tmpl_topics_vars.LastPage != tmpl_topics_vars.Page {
-w.Write(paginator_frags[9])
-w.Write([]byte(strconv.Itoa(tmpl_topics_vars.Page + 1)))
-w.Write(paginator_frags[10])
-w.Write([]byte(strconv.Itoa(tmpl_topics_vars.Page + 1)))
-w.Write(paginator_frags[11])
-w.Write(phrases[32])
-w.Write(paginator_frags[12])
-w.Write(phrases[33])
-w.Write(paginator_frags[13])
-}
-w.Write(paginator_frags[14])
-}
-w.Write(topics_frags[96])
-w.Write(footer_frags[0])
-w.Write([]byte(common.BuildWidget("footer",tmpl_topics_vars.Header)))
-w.Write(footer_frags[1])
-w.Write(phrases[34])
-w.Write(footer_frags[2])
-w.Write(phrases[35])
-w.Write(footer_frags[3])
-w.Write(phrases[36])
-w.Write(footer_frags[4])
-if len(tmpl_topics_vars.Header.Themes) != 0 {
-for _, item := range tmpl_topics_vars.Header.Themes {
-if !item.HideFromThemes {
-w.Write(footer_frags[5])
-w.Write([]byte(item.Name))
-w.Write(footer_frags[6])
-if tmpl_topics_vars.Header.Theme.Name == item.Name {
-w.Write(footer_frags[7])
-}
-w.Write(footer_frags[8])
-w.Write([]byte(item.FriendlyName))
-w.Write(footer_frags[9])
-}
-}
-}
-w.Write(footer_frags[10])
-w.Write([]byte(common.BuildWidget("rightSidebar",tmpl_topics_vars.Header)))
-w.Write(footer_frags[11])
-return nil
-}
diff --git a/templates/account_menu.html b/templates/account_menu.html
index c9a5526c..b440b88a 100644
--- a/templates/account_menu.html
+++ b/templates/account_menu.html
@@ -1,5 +1,5 @@