Made a huge amount of progress on the Cosora Theme in the Control Panel, it's almost ready for deployment.

Added the view counter, it currently collects data without exposing it to the admin.

Added an API for scheduling tasks which run once every second and once every fifteen minutes.
Added a generated map containing all the routes with the function names as keys.
Added the request counter to the generated router.
Added more ARIA Labels and moved various bits and pieces into the CSS files for flexibility.
Removed a bunch of redundant avatar checks in the templates.
Improved the mobile friendliness of Cosora.
Fixed various issues in the other themes.
Refactored the file listener.
Gosora now resyncs newly created theme files not just modified ones.
Gosora now resyncs renamed theme files not just modified ones.
This commit is contained in:
Azareal 2017-12-10 03:43:30 +00:00
parent 9eae8da180
commit abfe0a472a
48 changed files with 1242 additions and 713 deletions

63
common/counters.go Normal file
View File

@ -0,0 +1,63 @@
package common
import (
"database/sql"
"sync/atomic"
"../query_gen/lib"
)
var GlobalViewCounter *BufferedViewCounter
type BufferedViewCounter struct {
buckets [2]int64
currentBucket int64
insert *sql.Stmt
}
func NewGlobalViewCounter() (*BufferedViewCounter, error) {
acc := qgen.Builder.Accumulator()
counter := &BufferedViewCounter{
currentBucket: 0,
insert: acc.SimpleInsert("viewchunks", "count, createdAt", "?,UTC_TIMESTAMP()"),
}
//AddScheduledFifteenMinuteTask(counter.Tick)
AddScheduledSecondTask(counter.Tick)
return counter, acc.FirstError()
}
func (counter *BufferedViewCounter) Tick() (err error) {
var oldBucket = counter.currentBucket
var nextBucket int64
if counter.currentBucket == 1 {
nextBucket = 0
} else {
nextBucket = 1
}
atomic.AddInt64(&counter.buckets[oldBucket], counter.buckets[nextBucket])
atomic.StoreInt64(&counter.buckets[nextBucket], 0)
atomic.StoreInt64(&counter.currentBucket, nextBucket)
/*debugLog("counter.buckets[nextBucket]: ", counter.buckets[nextBucket])
debugLog("counter.buckets[oldBucket]: ", counter.buckets[oldBucket])
debugLog("counter.currentBucket:", counter.currentBucket)
debugLog("oldBucket:", oldBucket)
debugLog("nextBucket:", nextBucket)*/
var previousViewChunk = counter.buckets[oldBucket]
atomic.AddInt64(&counter.buckets[oldBucket], -previousViewChunk)
return counter.insertChunk(previousViewChunk)
}
func (counter *BufferedViewCounter) Bump() {
atomic.AddInt64(&counter.buckets[counter.currentBucket], 1)
}
func (counter *BufferedViewCounter) insertChunk(count int64) error {
if count == 0 {
return nil
}
debugLogf("Inserting a viewchunk with a count of %d", count)
_, err := counter.insert.Exec(count)
return err
}

View File

@ -19,6 +19,8 @@ type TaskStmts struct {
getSync *sql.Stmt getSync *sql.Stmt
} }
var ScheduledSecondTasks []func() error
var ScheduledFifteenMinuteTasks []func() error
var taskStmts TaskStmts var taskStmts TaskStmts
var lastSync time.Time var lastSync time.Time
@ -33,6 +35,17 @@ func init() {
}) })
} }
// AddScheduledSecondTask is not concurrency safe
func AddScheduledSecondTask(task func() error) {
ScheduledSecondTasks = append(ScheduledSecondTasks, task)
}
// AddScheduledFifteenMinuteTask is not concurrency safe
func AddScheduledFifteenMinuteTask(task func() error) {
ScheduledFifteenMinuteTasks = append(ScheduledFifteenMinuteTasks, task)
}
// TODO: Use AddScheduledSecondTask
func HandleExpiredScheduledGroups() error { func HandleExpiredScheduledGroups() error {
rows, err := taskStmts.getExpiredScheduledGroups.Query() rows, err := taskStmts.getExpiredScheduledGroups.Query()
if err != nil { if err != nil {
@ -58,6 +71,7 @@ func HandleExpiredScheduledGroups() error {
return rows.Err() return rows.Err()
} }
// TODO: Use AddScheduledSecondTask
func HandleServerSync() error { func HandleServerSync() error {
var lastUpdate time.Time var lastUpdate time.Time
err := taskStmts.getSync.QueryRow().Scan(&lastUpdate) err := taskStmts.getSync.QueryRow().Scan(&lastUpdate)

View File

@ -165,10 +165,9 @@ func (widget *Widget) Build(hvars interface{}) (string, error) {
return widget.Body, nil return widget.Body, nil
} }
var b bytes.Buffer
var headerVars = hvars.(*HeaderVars) var headerVars = hvars.(*HeaderVars)
err := RunThemeTemplate(headerVars.Theme.Name, widget.Body, hvars, headerVars.Writer) err := RunThemeTemplate(headerVars.Theme.Name, widget.Body, hvars, headerVars.Writer)
return string(b.Bytes()), err return "", err
} }
// TODO: Make a store for this? // TODO: Make a store for this?

View File

@ -13,6 +13,64 @@ import (
) )
var ErrNoRoute = errors.New("That route doesn't exist.") var ErrNoRoute = errors.New("That route doesn't exist.")
var RouteMap = map[string]interface{}{
"routeAPI": routeAPI,
"routeOverview": routeOverview,
"routeForums": routeForums,
"routeForum": routeForum,
"routeChangeTheme": routeChangeTheme,
"routeShowAttachment": routeShowAttachment,
"routeReportSubmit": routeReportSubmit,
"routeTopicCreate": routeTopicCreate,
"routeTopics": routeTopics,
"routePanelForums": routePanelForums,
"routePanelForumsCreateSubmit": routePanelForumsCreateSubmit,
"routePanelForumsDelete": routePanelForumsDelete,
"routePanelForumsDeleteSubmit": routePanelForumsDeleteSubmit,
"routePanelForumsEdit": routePanelForumsEdit,
"routePanelForumsEditSubmit": routePanelForumsEditSubmit,
"routePanelForumsEditPermsSubmit": routePanelForumsEditPermsSubmit,
"routePanelSettings": routePanelSettings,
"routePanelSettingEdit": routePanelSettingEdit,
"routePanelSettingEditSubmit": routePanelSettingEditSubmit,
"routePanelWordFilters": routePanelWordFilters,
"routePanelWordFiltersCreate": routePanelWordFiltersCreate,
"routePanelWordFiltersEdit": routePanelWordFiltersEdit,
"routePanelWordFiltersEditSubmit": routePanelWordFiltersEditSubmit,
"routePanelWordFiltersDeleteSubmit": routePanelWordFiltersDeleteSubmit,
"routePanelThemes": routePanelThemes,
"routePanelThemesSetDefault": routePanelThemesSetDefault,
"routePanelPlugins": routePanelPlugins,
"routePanelPluginsActivate": routePanelPluginsActivate,
"routePanelPluginsDeactivate": routePanelPluginsDeactivate,
"routePanelPluginsInstall": routePanelPluginsInstall,
"routePanelUsers": routePanelUsers,
"routePanelUsersEdit": routePanelUsersEdit,
"routePanelUsersEditSubmit": routePanelUsersEditSubmit,
"routePanelGroups": routePanelGroups,
"routePanelGroupsEdit": routePanelGroupsEdit,
"routePanelGroupsEditPerms": routePanelGroupsEditPerms,
"routePanelGroupsEditSubmit": routePanelGroupsEditSubmit,
"routePanelGroupsEditPermsSubmit": routePanelGroupsEditPermsSubmit,
"routePanelGroupsCreateSubmit": routePanelGroupsCreateSubmit,
"routePanelBackups": routePanelBackups,
"routePanelLogsMod": routePanelLogsMod,
"routePanelDebug": routePanelDebug,
"routePanel": routePanel,
"routeAccountEditCritical": routeAccountEditCritical,
"routeAccountEditCriticalSubmit": routeAccountEditCriticalSubmit,
"routeAccountEditAvatar": routeAccountEditAvatar,
"routeAccountEditAvatarSubmit": routeAccountEditAvatarSubmit,
"routeAccountEditUsername": routeAccountEditUsername,
"routeAccountEditUsernameSubmit": routeAccountEditUsernameSubmit,
"routeAccountEditEmail": routeAccountEditEmail,
"routeAccountEditEmailTokenSubmit": routeAccountEditEmailTokenSubmit,
"routeProfile": routeProfile,
"routeBanSubmit": routeBanSubmit,
"routeUnban": routeUnban,
"routeActivate": routeActivate,
"routeIps": routeIps,
}
type GenRouter struct { type GenRouter struct {
UploadHandler func(http.ResponseWriter, *http.Request) UploadHandler func(http.ResponseWriter, *http.Request)
@ -45,27 +103,22 @@ func (router *GenRouter) Handle(_ string, _ http.Handler) {
func (router *GenRouter) HandleFunc(pattern string, handle func(http.ResponseWriter, *http.Request, common.User) common.RouteError) { func (router *GenRouter) HandleFunc(pattern string, handle func(http.ResponseWriter, *http.Request, common.User) common.RouteError) {
router.Lock() router.Lock()
defer router.Unlock()
router.extra_routes[pattern] = handle router.extra_routes[pattern] = handle
router.Unlock()
} }
func (router *GenRouter) RemoveFunc(pattern string) error { func (router *GenRouter) RemoveFunc(pattern string) error {
router.Lock() router.Lock()
defer router.Unlock()
_, ok := router.extra_routes[pattern] _, ok := router.extra_routes[pattern]
if !ok { if !ok {
router.Unlock()
return ErrNoRoute return ErrNoRoute
} }
delete(router.extra_routes, pattern) delete(router.extra_routes, pattern)
router.Unlock()
return nil return nil
} }
func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) { func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
//if req.URL.Path == "/" {
// default_route(w,req)
// return
//}
if len(req.URL.Path) == 0 || req.URL.Path[0] != '/' { if len(req.URL.Path) == 0 || req.URL.Path[0] != '/' {
w.WriteHeader(405) w.WriteHeader(405)
w.Write([]byte("")) w.Write([]byte(""))
@ -96,6 +149,9 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
log.Print("before PreRoute") log.Print("before PreRoute")
} }
// Increment the global view counter
common.GlobalViewCounter.Bump()
// Deal with the session stuff, etc. // Deal with the session stuff, etc.
user, ok := common.PreRoute(w, req) user, ok := common.PreRoute(w, req)
if !ok { if !ok {

71
main.go
View File

@ -80,6 +80,10 @@ func afterDBInit() (err error) {
if err != nil { if err != nil {
return err return err
} }
common.GlobalViewCounter, err = common.NewGlobalViewCounter()
if err != nil {
return err
}
return nil return nil
} }
@ -163,43 +167,50 @@ func main() {
defer watcher.Close() defer watcher.Close()
go func() { go func() {
var modifiedFileEvent = func(path string) error {
var pathBits = strings.Split(path, "\\")
if len(pathBits) == 0 {
return nil
}
if pathBits[0] == "themes" {
var themeName string
if len(pathBits) >= 2 {
themeName = pathBits[1]
}
if len(pathBits) >= 3 && pathBits[2] == "public" {
// TODO: Handle new themes freshly plopped into the folder?
theme, ok := common.Themes[themeName]
if ok {
return theme.LoadStaticFiles()
}
}
}
return nil
}
var err error
for { for {
select { select {
case event := <-watcher.Events: case event := <-watcher.Events:
log.Println("event:", event) log.Println("event:", event)
// TODO: Handle file deletes (and renames more graciously by removing the old version of it)
if event.Op&fsnotify.Write == fsnotify.Write { if event.Op&fsnotify.Write == fsnotify.Write {
log.Println("modified file:", event.Name) log.Println("modified file:", event.Name)
var pathBits = strings.Split(event.Name, "\\") err = modifiedFileEvent(event.Name)
if len(pathBits) > 0 {
if pathBits[0] == "themes" {
var themeName string
if len(pathBits) >= 1 {
themeName = pathBits[1]
}
if len(pathBits) >= 2 && pathBits[2] == "public" {
// TODO: Handle new themes freshly plopped into the folder?
theme, ok := common.Themes[themeName]
if ok {
err = theme.LoadStaticFiles()
if err != nil {
common.LogError(err)
}
}
}
}
}
} else if event.Op&fsnotify.Create == fsnotify.Create { } else if event.Op&fsnotify.Create == fsnotify.Create {
log.Println("new file:", event.Name) log.Println("new file:", event.Name)
err = modifiedFileEvent(event.Name)
} }
case err := <-watcher.Errors: if err != nil {
log.Println("error:", err) common.LogError(err)
}
case err = <-watcher.Errors:
common.LogError(err)
} }
} }
}() }()
// TODO: Keep tabs on the theme stuff, and the langpacks // TODO: Keep tabs on the (non-resource) theme stuff, and the langpacks
err = watcher.Add("./public") err = watcher.Add("./public")
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
@ -226,6 +237,12 @@ func main() {
//log.Print("Running the second ticker") //log.Print("Running the second ticker")
// TODO: Add a plugin hook here // TODO: Add a plugin hook here
for _, task := range common.ScheduledSecondTasks {
if task() != nil {
common.LogError(err)
}
}
err := common.HandleExpiredScheduledGroups() err := common.HandleExpiredScheduledGroups()
if err != nil { if err != nil {
common.LogError(err) common.LogError(err)
@ -249,6 +266,12 @@ func main() {
case <-fifteenMinuteTicker.C: case <-fifteenMinuteTicker.C:
// TODO: Add a plugin hook here // TODO: Add a plugin hook here
for _, task := range common.ScheduledFifteenMinuteTasks {
if task() != nil {
common.LogError(err)
}
}
// TODO: Automatically lock topics, if they're really old, and the associated setting is enabled. // TODO: Automatically lock topics, if they're really old, and the associated setting is enabled.
// TODO: Publish scheduled posts. // TODO: Publish scheduled posts.

View File

@ -354,6 +354,14 @@ func createTables(adapter qgen.Adapter) error {
[]qgen.DBTableKey{}, []qgen.DBTableKey{},
) )
qgen.Install.CreateTable("viewchunks", "", "",
[]qgen.DBTableColumn{
qgen.DBTableColumn{"count", "int", 0, false, false, "0"},
qgen.DBTableColumn{"createdAt", "datetime", 0, false, false, ""},
},
[]qgen.DBTableKey{},
)
qgen.Install.CreateTable("sync", "", "", qgen.Install.CreateTable("sync", "", "",
[]qgen.DBTableColumn{ []qgen.DBTableColumn{
qgen.DBTableColumn{"last_update", "datetime", 0, false, false, ""}, qgen.DBTableColumn{"last_update", "datetime", 0, false, false, ""},

View File

@ -1,10 +1,12 @@
/* WIP Under Construction */ /* WIP Under Construction */
package main package main
import "log" import (
"log"
"os"
)
//import "strings" //import "strings"
import "os"
var routeList []*RouteImpl var routeList []*RouteImpl
var routeGroups []*RouteGroup var routeGroups []*RouteGroup
@ -15,32 +17,39 @@ func main() {
// Load all the routes... // Load all the routes...
routes() routes()
var out string var out, routeMap string
var fileData = "// Code generated by. DO NOT EDIT.\n/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */\n" var mapIt = func(name string) {
routeMap += "\t\"" + name + "\": " + name + ",\n"
for _, route := range routeList { //reverseRouteMap += "\t" + name + ": \"" + name + "\",\n"
var end int }
if route.Path[len(route.Path)-1] == '/' { var countToIndents = func(indent int) (indentor string) {
end = len(route.Path) - 1 for i := 0; i < indent; i++ {
} else { indentor += "\t"
end = len(route.Path) - 1
} }
out += "\n\t\tcase \"" + route.Path[0:end] + "\":" return indentor
if len(route.RunBefore) > 0 { }
for _, runnable := range route.RunBefore { var runBefore = func(runnables []Runnable, indent int) (out string) {
var indentor = countToIndents(indent)
if len(runnables) > 0 {
for _, runnable := range runnables {
if runnable.Literal { if runnable.Literal {
out += "\n\t\t\t\t\t" + runnable.Contents out += "\n\t" + indentor + runnable.Contents
} else { } else {
out += ` out += "\n" + indentor + "err = common." + runnable.Contents + "(w,req,user)\n" +
err = common.` + runnable.Contents + `(w,req,user) indentor + "if err != nil {\n" +
if err != nil { indentor + "\trouter.handleError(err,w,req,user)\n" +
router.handleError(err,w,req,user) indentor + "\treturn\n" +
return indentor + "}\n" + indentor
}
`
} }
} }
} }
return out
}
for _, route := range routeList {
var end = len(route.Path) - 1
out += "\n\t\tcase \"" + route.Path[0:end] + "\":"
out += runBefore(route.RunBefore, 4)
out += "\n\t\t\terr = " + route.Name + "(w,req,user" out += "\n\t\t\terr = " + route.Name + "(w,req,user"
for _, item := range route.Vars { for _, item := range route.Vars {
out += "," + item out += "," + item
@ -49,25 +58,13 @@ func main() {
if err != nil { if err != nil {
router.handleError(err,w,req,user) router.handleError(err,w,req,user)
}` }`
mapIt(route.Name)
} }
for _, group := range routeGroups { for _, group := range routeGroups {
var end = len(group.Path) - 1 var end = len(group.Path) - 1
out += ` out += "\n\t\tcase \"" + group.Path[0:end] + "\":"
case "` + group.Path[0:end] + `":` out += runBefore(group.RunBefore, 3)
for _, runnable := range group.RunBefore {
if runnable.Literal {
out += "\t\t\t" + runnable.Contents
} else {
out += `
err = common.` + runnable.Contents + `(w,req,user)
if err != nil {
router.handleError(err,w,req,user)
return
}
`
}
}
out += "\n\t\t\tswitch(req.URL.Path) {" out += "\n\t\t\tswitch(req.URL.Path) {"
var defaultRoute = blankRoute() var defaultRoute = blankRoute()
@ -115,30 +112,18 @@ func main() {
out += "," + item out += "," + item
} }
out += ")" out += ")"
mapIt(route.Name)
} }
if defaultRoute.Name != "" { if defaultRoute.Name != "" {
out += "\n\t\t\t\tdefault:" out += "\n\t\t\t\tdefault:"
if len(defaultRoute.RunBefore) > 0 { out += runBefore(defaultRoute.RunBefore, 4)
for _, runnable := range defaultRoute.RunBefore {
if runnable.Literal {
out += "\n\t\t\t\t\t" + runnable.Contents
} else {
out += `
err = common.` + runnable.Contents + `(w,req,user)
if err != nil {
router.handleError(err,w,req,user)
return
}
`
}
}
}
out += "\n\t\t\t\t\terr = " + defaultRoute.Name + "(w,req,user" out += "\n\t\t\t\t\terr = " + defaultRoute.Name + "(w,req,user"
for _, item := range defaultRoute.Vars { for _, item := range defaultRoute.Vars {
out += ", " + item out += ", " + item
} }
out += ")" out += ")"
mapIt(defaultRoute.Name)
} }
out += ` out += `
} }
@ -147,7 +132,9 @@ func main() {
}` }`
} }
fileData += `package main var fileData = `// Code generated by. DO NOT EDIT.
/* 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 ( import (
"log" "log"
@ -160,6 +147,8 @@ import (
) )
var ErrNoRoute = errors.New("That route doesn't exist.") var ErrNoRoute = errors.New("That route doesn't exist.")
var RouteMap = map[string]interface{}{
` + routeMap + `}
type GenRouter struct { type GenRouter struct {
UploadHandler func(http.ResponseWriter, *http.Request) UploadHandler func(http.ResponseWriter, *http.Request)
@ -192,27 +181,22 @@ func (router *GenRouter) Handle(_ string, _ http.Handler) {
func (router *GenRouter) HandleFunc(pattern string, handle func(http.ResponseWriter, *http.Request, common.User) common.RouteError) { func (router *GenRouter) HandleFunc(pattern string, handle func(http.ResponseWriter, *http.Request, common.User) common.RouteError) {
router.Lock() router.Lock()
defer router.Unlock()
router.extra_routes[pattern] = handle router.extra_routes[pattern] = handle
router.Unlock()
} }
func (router *GenRouter) RemoveFunc(pattern string) error { func (router *GenRouter) RemoveFunc(pattern string) error {
router.Lock() router.Lock()
defer router.Unlock()
_, ok := router.extra_routes[pattern] _, ok := router.extra_routes[pattern]
if !ok { if !ok {
router.Unlock()
return ErrNoRoute return ErrNoRoute
} }
delete(router.extra_routes, pattern) delete(router.extra_routes, pattern)
router.Unlock()
return nil return nil
} }
func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) { func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
//if req.URL.Path == "/" {
// default_route(w,req)
// return
//}
if len(req.URL.Path) == 0 || req.URL.Path[0] != '/' { if len(req.URL.Path) == 0 || req.URL.Path[0] != '/' {
w.WriteHeader(405) w.WriteHeader(405)
w.Write([]byte("")) w.Write([]byte(""))
@ -243,6 +227,9 @@ func (router *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
log.Print("before PreRoute") log.Print("before PreRoute")
} }
// Increment the global view counter
common.GlobalViewCounter.Bump()
// Deal with the session stuff, etc. // Deal with the session stuff, etc.
user, ok := common.PreRoute(w, req) user, ok := common.PreRoute(w, req)
if !ok { if !ok {

View File

@ -0,0 +1,4 @@
CREATE TABLE [viewchunks] (
[count] int DEFAULT 0 not null,
[createdAt] datetime not null
);

View File

@ -0,0 +1,4 @@
CREATE TABLE `viewchunks` (
`count` int DEFAULT 0 not null,
`createdAt` datetime not null
);

View File

@ -0,0 +1,4 @@
CREATE TABLE `viewchunks` (
`count` int DEFAULT 0 not null,
`createdAt` timestamp not null
);

View File

@ -3,9 +3,9 @@
// Code generated by Gosora. More below: // 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. */ /* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
package main package main
import "strconv"
import "net/http" import "net/http"
import "./common" import "./common"
import "strconv"
// nolint // nolint
func init() { func init() {
@ -115,94 +115,82 @@ if tmpl_forum_vars.CurrentUser.ID != 0 {
w.Write(forum_18) w.Write(forum_18)
if tmpl_forum_vars.CurrentUser.Perms.CreateTopic { if tmpl_forum_vars.CurrentUser.Perms.CreateTopic {
w.Write(forum_19) w.Write(forum_19)
if tmpl_forum_vars.CurrentUser.Avatar != "" {
w.Write(forum_20)
w.Write([]byte(tmpl_forum_vars.CurrentUser.Avatar)) w.Write([]byte(tmpl_forum_vars.CurrentUser.Avatar))
w.Write(forum_21) w.Write(forum_20)
}
w.Write(forum_22)
w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Forum.ID))) w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Forum.ID)))
w.Write(forum_23) w.Write(forum_21)
if tmpl_forum_vars.CurrentUser.Perms.UploadFiles { if tmpl_forum_vars.CurrentUser.Perms.UploadFiles {
w.Write(forum_22)
}
w.Write(forum_23)
}
}
w.Write(forum_24) w.Write(forum_24)
}
w.Write(forum_25)
}
}
w.Write(forum_26)
if len(tmpl_forum_vars.ItemList) != 0 { if len(tmpl_forum_vars.ItemList) != 0 {
for _, item := range tmpl_forum_vars.ItemList { for _, item := range tmpl_forum_vars.ItemList {
w.Write(forum_27) w.Write(forum_25)
w.Write([]byte(strconv.Itoa(item.ID))) w.Write([]byte(strconv.Itoa(item.ID)))
w.Write(forum_28) w.Write(forum_26)
if item.Sticky { if item.Sticky {
w.Write(forum_29) w.Write(forum_27)
} else { } else {
if item.IsClosed { if item.IsClosed {
w.Write(forum_28)
}
}
w.Write(forum_29)
w.Write([]byte(item.Creator.Link))
w.Write(forum_30) w.Write(forum_30)
}
}
w.Write(forum_31)
if item.Creator.Avatar != "" {
w.Write(forum_32)
w.Write([]byte(item.Creator.Link))
w.Write(forum_33)
w.Write([]byte(item.Creator.Avatar)) w.Write([]byte(item.Creator.Avatar))
w.Write(forum_34) w.Write(forum_31)
}
w.Write(forum_35)
w.Write([]byte(item.Link)) w.Write([]byte(item.Link))
w.Write(forum_36) w.Write(forum_32)
w.Write([]byte(item.Title)) w.Write([]byte(item.Title))
w.Write(forum_37) w.Write(forum_33)
w.Write([]byte(item.Creator.Link)) w.Write([]byte(item.Creator.Link))
w.Write(forum_38) w.Write(forum_34)
w.Write([]byte(item.Creator.Name)) w.Write([]byte(item.Creator.Name))
w.Write(forum_39) w.Write(forum_35)
if item.IsClosed { if item.IsClosed {
w.Write(forum_40) w.Write(forum_36)
} }
if item.Sticky { if item.Sticky {
w.Write(forum_37)
}
w.Write(forum_38)
w.Write([]byte(strconv.Itoa(item.PostCount)))
w.Write(forum_39)
w.Write([]byte(strconv.Itoa(item.LikeCount)))
w.Write(forum_40)
if item.Sticky {
w.Write(forum_41) w.Write(forum_41)
}
w.Write(forum_42)
w.Write([]byte(strconv.Itoa(item.PostCount)))
w.Write(forum_43)
w.Write([]byte(strconv.Itoa(item.LikeCount)))
w.Write(forum_44)
if item.Sticky {
w.Write(forum_45)
} else { } else {
if item.IsClosed { if item.IsClosed {
w.Write(forum_46) w.Write(forum_42)
} }
} }
w.Write(forum_47) w.Write(forum_43)
if item.LastUser.Avatar != "" {
w.Write(forum_48)
w.Write([]byte(item.LastUser.Link)) w.Write([]byte(item.LastUser.Link))
w.Write(forum_49) w.Write(forum_44)
w.Write([]byte(item.LastUser.Avatar)) w.Write([]byte(item.LastUser.Avatar))
w.Write(forum_50) w.Write(forum_45)
}
w.Write(forum_51)
w.Write([]byte(item.LastUser.Link)) w.Write([]byte(item.LastUser.Link))
w.Write(forum_52) w.Write(forum_46)
w.Write([]byte(item.LastUser.Name)) w.Write([]byte(item.LastUser.Name))
w.Write(forum_53) w.Write(forum_47)
w.Write([]byte(item.RelativeLastReplyAt)) w.Write([]byte(item.RelativeLastReplyAt))
w.Write(forum_54) w.Write(forum_48)
} }
} else { } else {
w.Write(forum_55) w.Write(forum_49)
if tmpl_forum_vars.CurrentUser.Perms.CreateTopic { if tmpl_forum_vars.CurrentUser.Perms.CreateTopic {
w.Write(forum_56) w.Write(forum_50)
w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Forum.ID))) w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Forum.ID)))
w.Write(forum_57) w.Write(forum_51)
} }
w.Write(forum_58) w.Write(forum_52)
} }
w.Write(forum_59) w.Write(forum_53)
w.Write(footer_0) w.Write(footer_0)
w.Write([]byte(common.BuildWidget("footer",tmpl_forum_vars.Header))) w.Write([]byte(common.BuildWidget("footer",tmpl_forum_vars.Header)))
w.Write(footer_1) w.Write(footer_1)

View File

@ -42,30 +42,31 @@ var menu_0 = []byte(`<nav class="nav">
<div class="move_right"> <div class="move_right">
<ul>`) <ul>`)
var menu_1 = []byte(` var menu_1 = []byte(`
<li class="menu_left menu_overview"><a href="/" rel="home">`) <li id="menu_overview" class="menu_left"><a href="/" rel="home">`)
var menu_2 = []byte(`</a></li> var menu_2 = []byte(`</a></li>
<li class="menu_left menu_forums"><a href="/forums/">Forums</a></li> <li id="menu_forums" class="menu_left"><a href="/forums/" aria-label="The Forum list" title="Forum List"></a></li>
<li class="menu_left menu_topics"><a href="/">Topics</a></li> <li class="menu_left menu_topics"><a href="/" aria-label="The topic list" title="Topic List"></a></li>
<li id="general_alerts" class="menu_right menu_alerts"> <li id="general_alerts" class="menu_right menu_alerts">
<div class="alert_bell"></div> <div class="alert_bell"></div>
<div class="alert_counter"></div> <div class="alert_counter" aria-label="The number of alerts"></div>
<div class="alert_aftercounter"></div> <div class="alert_aftercounter"></div>
<div class="alertList"></div> <div class="alertList" aria-label="The alert list"></div>
</li> </li>
`) `)
var menu_3 = []byte(` var menu_3 = []byte(`
<li class="menu_left menu_account"><a href="/user/edit/critical/">Account</a></li> <li class="menu_left menu_account"><a href="/user/edit/critical/" aria-label="The account manager" title="Account Manager"></a></li>
<li class="menu_left menu_profile"><a href="`) <li class="menu_left menu_profile"><a href="`)
var menu_4 = []byte(`">Profile</a></li> var menu_4 = []byte(`" aria-label="Your profile" title="Your profile"></a></li>
<li class="menu_left menu_panel menu_account supermod_only"><a href="/panel/">Panel</a></li> <li class="menu_left menu_panel menu_account supermod_only"><a href="/panel/" aria-label="The Control Panel" title="Control Panel"></a></li>
<li class="menu_left menu_logout"><a href="/accounts/logout/?session=`) <li class="menu_left menu_logout"><a href="/accounts/logout/?session=`)
var menu_5 = []byte(`">Logout</a></li> var menu_5 = []byte(`" aria-label="Log out of your account" title="Logout"></a></li>
`) `)
var menu_6 = []byte(` var menu_6 = []byte(`
<li class="menu_left menu_register"><a href="/accounts/create/">Register</a></li> <li class="menu_left menu_register"><a href="/accounts/create/" aria-label="Create a new account" title="Register"></a></li>
<li class="menu_left menu_login"><a href="/accounts/login/">Login</a></li> <li class="menu_left menu_login"><a href="/accounts/login/" aria-label="Login to your account" title="Login"></a></li>
`) `)
var menu_7 = []byte(` var menu_7 = []byte(`
<li class="menu_left menu_hamburger" title="Menu"><a></a></li>
</ul> </ul>
</div> </div>
</div> </div>
@ -122,125 +123,121 @@ var topic_20 = []byte(`
<article itemscope itemtype="http://schema.org/CreativeWork" class="rowblock post_container top_post" aria-label="The opening post for this topic"> <article itemscope itemtype="http://schema.org/CreativeWork" class="rowblock post_container top_post" aria-label="The opening post for this topic">
<div class="rowitem passive editable_parent post_item `) <div class="rowitem passive editable_parent post_item `)
var topic_21 = []byte(`" style="`) var topic_21 = []byte(`" style="background-image: url(`)
var topic_22 = []byte(`background-image: url(`) var topic_22 = []byte(`), url(/static/`)
var topic_23 = []byte(`), url(/static/`) var topic_23 = []byte(`/post-avatar-bg.jpg);background-position: 0px `)
var topic_24 = []byte(`/post-avatar-bg.jpg);background-position: 0px `) var topic_24 = []byte(`-1`)
var topic_25 = []byte(`-1`) var topic_25 = []byte(`0px;background-repeat:no-repeat, repeat-y;">
var topic_26 = []byte(`0px;background-repeat:no-repeat, repeat-y;`)
var topic_27 = []byte(`">
<p class="hide_on_edit topic_content user_content" itemprop="text" style="margin:0;padding:0;">`) <p class="hide_on_edit topic_content user_content" itemprop="text" style="margin:0;padding:0;">`)
var topic_28 = []byte(`</p> var topic_26 = []byte(`</p>
<textarea name="topic_content" class="show_on_edit topic_content_input">`) <textarea name="topic_content" class="show_on_edit topic_content_input">`)
var topic_29 = []byte(`</textarea> var topic_27 = []byte(`</textarea>
<span class="controls"> <span class="controls">
<a href="`) <a href="`)
var topic_30 = []byte(`" class="username real_username" rel="author">`) var topic_28 = []byte(`" class="username real_username" rel="author">`)
var topic_31 = []byte(`</a>&nbsp;&nbsp; var topic_29 = []byte(`</a>&nbsp;&nbsp;
`) `)
var topic_32 = []byte(`<a href="/topic/like/submit/`) var topic_30 = []byte(`<a href="/topic/like/submit/`)
var topic_33 = []byte(`" class="mod_button" title="Love it" style="color:#202020;"> var topic_31 = []byte(`" class="mod_button" title="Love it" style="color:#202020;">
<button class="username like_label"`) <button class="username like_label"`)
var topic_34 = []byte(` style="background-color:#D6FFD6;"`) var topic_32 = []byte(` style="background-color:#D6FFD6;"`)
var topic_35 = []byte(`></button></a>`) var topic_33 = []byte(`></button></a>`)
var topic_36 = []byte(`<a href='/topic/edit/`) var topic_34 = []byte(`<a href='/topic/edit/`)
var topic_37 = []byte(`' class="mod_button open_edit" style="font-weight:normal;" title="Edit Topic"><button class="username edit_label"></button></a>`) var topic_35 = []byte(`' class="mod_button open_edit" style="font-weight:normal;" title="Edit Topic"><button class="username edit_label"></button></a>`)
var topic_38 = []byte(`<a href='/topic/delete/submit/`) var topic_36 = []byte(`<a href='/topic/delete/submit/`)
var topic_39 = []byte(`' class="mod_button" style="font-weight:normal;" title="Delete Topic"><button class="username trash_label"></button></a>`) var topic_37 = []byte(`' class="mod_button" style="font-weight:normal;" title="Delete Topic"><button class="username trash_label"></button></a>`)
var topic_40 = []byte(`<a class="mod_button" href='/topic/unlock/submit/`) var topic_38 = []byte(`<a class="mod_button" href='/topic/unlock/submit/`)
var topic_41 = []byte(`' style="font-weight:normal;" title="Unlock Topic"><button class="username unlock_label"></button></a>`) var topic_39 = []byte(`' style="font-weight:normal;" title="Unlock Topic"><button class="username unlock_label"></button></a>`)
var topic_42 = []byte(`<a href='/topic/lock/submit/`) var topic_40 = []byte(`<a href='/topic/lock/submit/`)
var topic_43 = []byte(`' class="mod_button" style="font-weight:normal;" title="Lock Topic"><button class="username lock_label"></button></a>`) var topic_41 = []byte(`' class="mod_button" style="font-weight:normal;" title="Lock Topic"><button class="username lock_label"></button></a>`)
var topic_44 = []byte(`<a class="mod_button" href='/topic/unstick/submit/`) var topic_42 = []byte(`<a class="mod_button" href='/topic/unstick/submit/`)
var topic_45 = []byte(`' style="font-weight:normal;" title="Unpin Topic"><button class="username unpin_label"></button></a>`) var topic_43 = []byte(`' style="font-weight:normal;" title="Unpin Topic"><button class="username unpin_label"></button></a>`)
var topic_46 = []byte(`<a href='/topic/stick/submit/`) var topic_44 = []byte(`<a href='/topic/stick/submit/`)
var topic_47 = []byte(`' class="mod_button" style="font-weight:normal;" title="Pin Topic"><button class="username pin_label"></button></a>`) var topic_45 = []byte(`' class="mod_button" style="font-weight:normal;" title="Pin Topic"><button class="username pin_label"></button></a>`)
var topic_48 = []byte(`<a class="mod_button" href='/users/ips/?ip=`) var topic_46 = []byte(`<a class="mod_button" href='/users/ips/?ip=`)
var topic_49 = []byte(`' style="font-weight:normal;" title="View IP"><button class="username ip_label"></button></a>`) var topic_47 = []byte(`' style="font-weight:normal;" title="View IP"><button class="username ip_label"></button></a>`)
var topic_50 = []byte(` var topic_48 = []byte(`
<a href="/report/submit/`) <a href="/report/submit/`)
var topic_51 = []byte(`?session=`) var topic_49 = []byte(`?session=`)
var topic_52 = []byte(`&type=topic" class="mod_button report_item" style="font-weight:normal;" title="Flag Topic"><button class="username flag_label"></button></a> var topic_50 = []byte(`&type=topic" class="mod_button report_item" style="font-weight:normal;" title="Flag Topic"><button class="username flag_label"></button></a>
`) `)
var topic_53 = []byte(`<a class="username hide_on_micro like_count">`) var topic_51 = []byte(`<a class="username hide_on_micro like_count">`)
var topic_54 = []byte(`</a><a class="username hide_on_micro like_count_label" title="Like Count"></a>`) var topic_52 = []byte(`</a><a class="username hide_on_micro like_count_label" title="Like Count"></a>`)
var topic_55 = []byte(`<a class="username hide_on_micro user_tag">`) var topic_53 = []byte(`<a class="username hide_on_micro user_tag">`)
var topic_56 = []byte(`</a>`) var topic_54 = []byte(`</a>`)
var topic_57 = []byte(`<a class="username hide_on_micro level">`) var topic_55 = []byte(`<a class="username hide_on_micro level">`)
var topic_58 = []byte(`</a><a class="username hide_on_micro level_label" style="float:right;" title="Level"></a>`) var topic_56 = []byte(`</a><a class="username hide_on_micro level_label" style="float:right;" title="Level"></a>`)
var topic_59 = []byte(` var topic_57 = []byte(`
</span> </span>
</div> </div>
</article> </article>
<div class="rowblock post_container" aria-label="The current page for this topic" style="overflow: hidden;">`) <div class="rowblock post_container" aria-label="The current page for this topic" style="overflow: hidden;">`)
var topic_60 = []byte(` var topic_58 = []byte(`
<article itemscope itemtype="http://schema.org/CreativeWork" class="rowitem passive deletable_block editable_parent post_item action_item"> <article itemscope itemtype="http://schema.org/CreativeWork" class="rowitem passive deletable_block editable_parent post_item action_item">
<span class="action_icon" style="font-size: 18px;padding-right: 5px;">`) <span class="action_icon" style="font-size: 18px;padding-right: 5px;">`)
var topic_61 = []byte(`</span> var topic_59 = []byte(`</span>
<span itemprop="text">`) <span itemprop="text">`)
var topic_62 = []byte(`</span> var topic_60 = []byte(`</span>
</article> </article>
`) `)
var topic_63 = []byte(` var topic_61 = []byte(`
<article itemscope itemtype="http://schema.org/CreativeWork" class="rowitem passive deletable_block editable_parent post_item `) <article itemscope itemtype="http://schema.org/CreativeWork" class="rowitem passive deletable_block editable_parent post_item `)
var topic_64 = []byte(`" style="`) var topic_62 = []byte(`" style="background-image: url(`)
var topic_65 = []byte(`background-image: url(`) var topic_63 = []byte(`), url(/static/`)
var topic_66 = []byte(`), url(/static/`) var topic_64 = []byte(`/post-avatar-bg.jpg);background-position: 0px `)
var topic_67 = []byte(`/post-avatar-bg.jpg);background-position: 0px `) var topic_65 = []byte(`-1`)
var topic_68 = []byte(`-1`) var topic_66 = []byte(`0px;background-repeat:no-repeat, repeat-y;">
var topic_69 = []byte(`0px;background-repeat:no-repeat, repeat-y;`)
var topic_70 = []byte(`">
`) `)
var topic_71 = []byte(` var topic_67 = []byte(`
<p class="editable_block user_content" itemprop="text" style="margin:0;padding:0;">`) <p class="editable_block user_content" itemprop="text" style="margin:0;padding:0;">`)
var topic_72 = []byte(`</p> var topic_68 = []byte(`</p>
<span class="controls"> <span class="controls">
<a href="`) <a href="`)
var topic_73 = []byte(`" class="username real_username" rel="author">`) var topic_69 = []byte(`" class="username real_username" rel="author">`)
var topic_74 = []byte(`</a>&nbsp;&nbsp; var topic_70 = []byte(`</a>&nbsp;&nbsp;
`) `)
var topic_75 = []byte(`<a href="/reply/like/submit/`) var topic_71 = []byte(`<a href="/reply/like/submit/`)
var topic_76 = []byte(`" class="mod_button" title="Love it" style="color:#202020;"><button class="username like_label"`) var topic_72 = []byte(`" class="mod_button" title="Love it" style="color:#202020;"><button class="username like_label"`)
var topic_77 = []byte(` style="background-color:#D6FFD6;"`) var topic_73 = []byte(` style="background-color:#D6FFD6;"`)
var topic_78 = []byte(`></button></a>`) var topic_74 = []byte(`></button></a>`)
var topic_79 = []byte(`<a href="/reply/edit/submit/`) var topic_75 = []byte(`<a href="/reply/edit/submit/`)
var topic_80 = []byte(`" class="mod_button" title="Edit Reply"><button class="username edit_item edit_label"></button></a>`) var topic_76 = []byte(`" class="mod_button" title="Edit Reply"><button class="username edit_item edit_label"></button></a>`)
var topic_81 = []byte(`<a href="/reply/delete/submit/`) var topic_77 = []byte(`<a href="/reply/delete/submit/`)
var topic_82 = []byte(`" class="mod_button" title="Delete Reply"><button class="username delete_item trash_label"></button></a>`) var topic_78 = []byte(`" class="mod_button" title="Delete Reply"><button class="username delete_item trash_label"></button></a>`)
var topic_83 = []byte(`<a class="mod_button" href='/users/ips/?ip=`) var topic_79 = []byte(`<a class="mod_button" href='/users/ips/?ip=`)
var topic_84 = []byte(`' style="font-weight:normal;" title="View IP"><button class="username ip_label"></button></a>`) var topic_80 = []byte(`' style="font-weight:normal;" title="View IP"><button class="username ip_label"></button></a>`)
var topic_85 = []byte(` var topic_81 = []byte(`
<a href="/report/submit/`) <a href="/report/submit/`)
var topic_86 = []byte(`?session=`) var topic_82 = []byte(`?session=`)
var topic_87 = []byte(`&type=reply" class="mod_button report_item" title="Flag Reply"><button class="username report_item flag_label"></button></a> var topic_83 = []byte(`&type=reply" class="mod_button report_item" title="Flag Reply"><button class="username report_item flag_label"></button></a>
`) `)
var topic_88 = []byte(`<a class="username hide_on_micro like_count">`) var topic_84 = []byte(`<a class="username hide_on_micro like_count">`)
var topic_89 = []byte(`</a><a class="username hide_on_micro like_count_label" title="Like Count"></a>`) var topic_85 = []byte(`</a><a class="username hide_on_micro like_count_label" title="Like Count"></a>`)
var topic_90 = []byte(`<a class="username hide_on_micro user_tag">`) var topic_86 = []byte(`<a class="username hide_on_micro user_tag">`)
var topic_91 = []byte(`</a>`) var topic_87 = []byte(`</a>`)
var topic_92 = []byte(`<a class="username hide_on_micro level">`) var topic_88 = []byte(`<a class="username hide_on_micro level">`)
var topic_93 = []byte(`</a><a class="username hide_on_micro level_label" style="float:right;" title="Level"></a>`) var topic_89 = []byte(`</a><a class="username hide_on_micro level_label" style="float:right;" title="Level"></a>`)
var topic_94 = []byte(` var topic_90 = []byte(`
</span> </span>
</article> </article>
`) `)
var topic_95 = []byte(`</div> var topic_91 = []byte(`</div>
`) `)
var topic_96 = []byte(` var topic_92 = []byte(`
<div class="rowblock topic_reply_form quick_create_form"> <div class="rowblock topic_reply_form quick_create_form">
<form id="reply_form" enctype="multipart/form-data" action="/reply/create/" method="post"></form> <form id="reply_form" enctype="multipart/form-data" action="/reply/create/" method="post"></form>
<input form="reply_form" name="tid" value='`) <input form="reply_form" name="tid" value='`)
var topic_97 = []byte(`' type="hidden" /> var topic_93 = []byte(`' type="hidden" />
<div class="formrow real_first_child"> <div class="formrow real_first_child">
<div class="formitem"> <div class="formitem">
<textarea id="input_content" form="reply_form" name="reply-content" placeholder="Insert reply here" required></textarea> <textarea id="input_content" form="reply_form" name="reply-content" placeholder="Insert reply here" required></textarea>
@ -250,16 +247,16 @@ var topic_97 = []byte(`' type="hidden" />
<div class="formitem"> <div class="formitem">
<button form="reply_form" name="reply-button" class="formbutton">Create Reply</button> <button form="reply_form" name="reply-button" class="formbutton">Create Reply</button>
`) `)
var topic_98 = []byte(` var topic_94 = []byte(`
<input name="upload_files" form="reply_form" id="upload_files" multiple type="file" style="display: none;" /> <input name="upload_files" form="reply_form" id="upload_files" multiple type="file" style="display: none;" />
<label for="upload_files" class="formbutton add_file_button">Add File</label> <label for="upload_files" class="formbutton add_file_button">Add File</label>
<div id="upload_file_dock"></div>`) <div id="upload_file_dock"></div>`)
var topic_99 = []byte(` var topic_95 = []byte(`
</div> </div>
</div> </div>
</div> </div>
`) `)
var topic_100 = []byte(` var topic_96 = []byte(`
</main> </main>
@ -505,9 +502,6 @@ var profile_0 = []byte(`
<div id="profile_container" class="colstack"> <div id="profile_container" class="colstack">
<div id="profile_left_lane" class="colstack_left"> <div id="profile_left_lane" class="colstack_left">
<!--<header class="colstack_item colstack_head rowhead">
<div class="rowitem"><h1>Profile</h1></div>
</header>-->
<div id="profile_left_pane" class="rowmenu"> <div id="profile_left_pane" class="rowmenu">
<div class="topBlock"> <div class="topBlock">
<div class="rowitem avatarRow"> <div class="rowitem avatarRow">
@ -596,45 +590,45 @@ var profile_19 = []byte(`
<div id="profile_comments" class="colstack_item hash_hide">`) <div id="profile_comments" class="colstack_item hash_hide">`)
var profile_20 = []byte(` var profile_20 = []byte(`
<div class="rowitem passive deletable_block editable_parent simple `) <div class="rowitem passive deletable_block editable_parent simple `)
var profile_21 = []byte(`" style="`) var profile_21 = []byte(`" style="background-image: url(`)
var profile_22 = []byte(`background-image: url(`) var profile_22 = []byte(`), url(/static/post-avatar-bg.jpg);background-position: 0px `)
var profile_23 = []byte(`), url(/static/post-avatar-bg.jpg);background-position: 0px `) var profile_23 = []byte(`-1`)
var profile_24 = []byte(`-1`) var profile_24 = []byte(`0px;">
var profile_25 = []byte(`0px;`) <img class="bgsub" src="`)
var profile_26 = []byte(`"> var profile_25 = []byte(`" />
<span class="editable_block user_content simple">`) <span class="editable_block user_content simple">`)
var profile_27 = []byte(`</span> var profile_26 = []byte(`</span>
<span class="controls"> <span class="controls">
<a href="`) <a href="`)
var profile_28 = []byte(`" class="real_username username">`) var profile_27 = []byte(`" class="real_username username">`)
var profile_29 = []byte(`</a>&nbsp;&nbsp; var profile_28 = []byte(`</a>&nbsp;&nbsp;
`) `)
var profile_30 = []byte(`<a href="/profile/reply/edit/submit/`) var profile_29 = []byte(`<a href="/profile/reply/edit/submit/`)
var profile_31 = []byte(`" class="mod_button" title="Edit Item"><button class="username edit_item edit_label"></button></a> var profile_30 = []byte(`" class="mod_button" title="Edit Item"><button class="username edit_item edit_label"></button></a>
<a href="/profile/reply/delete/submit/`) <a href="/profile/reply/delete/submit/`)
var profile_32 = []byte(`" class="mod_button" title="Delete Item"><button class="username delete_item trash_label"></button></a>`) var profile_31 = []byte(`" class="mod_button" title="Delete Item"><button class="username delete_item trash_label"></button></a>`)
var profile_33 = []byte(` var profile_32 = []byte(`
<a class="mod_button" href="/report/submit/`) <a class="mod_button" href="/report/submit/`)
var profile_34 = []byte(`?session=`) var profile_33 = []byte(`?session=`)
var profile_35 = []byte(`&type=user-reply"><button class="username report_item flag_label"></button></a> var profile_34 = []byte(`&type=user-reply"><button class="username report_item flag_label"></button></a>
`) `)
var profile_36 = []byte(`<a class="username hide_on_mobile user_tag" style="float: right;">`) var profile_35 = []byte(`<a class="username hide_on_mobile user_tag" style="float: right;">`)
var profile_37 = []byte(`</a>`) var profile_36 = []byte(`</a>`)
var profile_38 = []byte(` var profile_37 = []byte(`
</span> </span>
</div> </div>
`) `)
var profile_39 = []byte(`</div> var profile_38 = []byte(`</div>
`) `)
var profile_40 = []byte(` var profile_39 = []byte(`
<form id="profile_comments_form" class="hash_hide" action="/profile/reply/create/" method="post"> <form id="profile_comments_form" class="hash_hide" action="/profile/reply/create/" method="post">
<input name="uid" value='`) <input name="uid" value='`)
var profile_41 = []byte(`' type="hidden" /> var profile_40 = []byte(`' type="hidden" />
<div class="colstack_item topic_reply_form" style="border-top: none;"> <div class="colstack_item topic_reply_form" style="border-top: none;">
<div class="formrow"> <div class="formrow">
<div class="formitem"><textarea name="reply-content" placeholder="Insert reply here"></textarea></div> <div class="formitem"><textarea name="reply-content" placeholder="Insert reply here"></textarea></div>
@ -645,13 +639,13 @@ var profile_41 = []byte(`' type="hidden" />
</div> </div>
</form> </form>
`) `)
var profile_42 = []byte(` var profile_41 = []byte(`
</div> </div>
</div> </div>
`) `)
var profile_43 = []byte(` var profile_42 = []byte(`
<script type="text/javascript"> <script type="text/javascript">
function handle_profile_hashbit() { function handle_profile_hashbit() {
var hash_class = "" var hash_class = ""
@ -736,7 +730,7 @@ var topics_3 = []byte(`
`) `)
var topics_4 = []byte(` var topics_4 = []byte(`
<div class="opt mod_opt" title="Moderate"> <div class="opt mod_opt" title="Moderate">
<a class="moderate_link" href="#"></a> <a class="moderate_link" href="#" aria-label="Moderate Posts"></a>
</div> </div>
`) `)
var topics_5 = []byte(`<div class="opt locked_opt" title="You don't have the permissions needed to create a topic" aria-label="You don't have the permissions needed to make a topic anywhere"><a></a></div>`) var topics_5 = []byte(`<div class="opt locked_opt" title="You don't have the permissions needed to create a topic" aria-label="You don't have the permissions needed to make a topic anywhere"><a></a></div>`)
@ -767,21 +761,19 @@ var topics_8 = []byte(`
var topics_9 = []byte(` var topics_9 = []byte(`
<div class="rowblock topic_create_form quick_create_form" style="display: none;" aria-label="Quick Topic Form"> <div class="rowblock topic_create_form quick_create_form" style="display: none;" aria-label="Quick Topic Form">
<form name="topic_create_form_form" id="topic_create_form_form" enctype="multipart/form-data" action="/topic/create/submit/" method="post"></form> <form name="topic_create_form_form" id="topic_create_form_form" enctype="multipart/form-data" action="/topic/create/submit/" method="post"></form>
`) <img class="little_row_avatar" src="`)
var topics_10 = []byte(`<img class="little_row_avatar" src="`) var topics_10 = []byte(`" height="64" />
var topics_11 = []byte(`" height="64" />`)
var topics_12 = []byte(`
<div class="main_form"> <div class="main_form">
<div class="topic_meta"> <div class="topic_meta">
<div class="formrow topic_board_row real_first_child"> <div class="formrow topic_board_row real_first_child">
<div class="formitem"><select form="topic_create_form_form" id="topic_board_input" name="topic-board"> <div class="formitem"><select form="topic_create_form_form" id="topic_board_input" name="topic-board">
`) `)
var topics_13 = []byte(`<option `) var topics_11 = []byte(`<option `)
var topics_14 = []byte(`selected`) var topics_12 = []byte(`selected`)
var topics_15 = []byte(` value="`) var topics_13 = []byte(` value="`)
var topics_16 = []byte(`">`) var topics_14 = []byte(`">`)
var topics_17 = []byte(`</option>`) var topics_15 = []byte(`</option>`)
var topics_18 = []byte(` var topics_16 = []byte(`
</select></div> </select></div>
</div> </div>
<div class="formrow topic_name_row"> <div class="formrow topic_name_row">
@ -799,77 +791,73 @@ var topics_18 = []byte(`
<div class="formitem"> <div class="formitem">
<button form="topic_create_form_form" class="formbutton">Create Topic</button> <button form="topic_create_form_form" class="formbutton">Create Topic</button>
`) `)
var topics_19 = []byte(` var topics_17 = []byte(`
<input name="upload_files" form="topic_create_form_form" id="upload_files" multiple type="file" style="display: none;" /> <input name="upload_files" form="topic_create_form_form" id="upload_files" multiple type="file" style="display: none;" />
<label for="upload_files" class="formbutton add_file_button">Add File</label> <label for="upload_files" class="formbutton add_file_button">Add File</label>
<div id="upload_file_dock"></div>`) <div id="upload_file_dock"></div>`)
var topics_20 = []byte(` var topics_18 = []byte(`
<button class="formbutton close_form">Cancel</button> <button class="formbutton close_form">Cancel</button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
`) `)
var topics_21 = []byte(` var topics_19 = []byte(`
<div id="topic_list" class="rowblock topic_list" aria-label="A list containing topics from every forum"> <div id="topic_list" class="rowblock topic_list" aria-label="A list containing topics from every forum">
`) `)
var topics_22 = []byte(`<div class="topic_row" data-tid="`) var topics_20 = []byte(`<div class="topic_row" data-tid="`)
var topics_23 = []byte(`"> var topics_21 = []byte(`">
<div class="rowitem topic_left passive datarow `) <div class="rowitem topic_left passive datarow `)
var topics_24 = []byte(`topic_sticky`) var topics_22 = []byte(`topic_sticky`)
var topics_25 = []byte(`topic_closed`) var topics_23 = []byte(`topic_closed`)
var topics_26 = []byte(`"> var topics_24 = []byte(`">
<span class="selector"></span> <span class="selector"></span>
`) <a href="`)
var topics_27 = []byte(`<a href="`) var topics_25 = []byte(`"><img src="`)
var topics_28 = []byte(`"><img src="`) var topics_26 = []byte(`" height="64" /></a>
var topics_29 = []byte(`" height="64" /></a>`)
var topics_30 = []byte(`
<span class="topic_inner_left"> <span class="topic_inner_left">
<a class="rowtopic" href="`) <a class="rowtopic" href="`)
var topics_31 = []byte(`"><span>`) var topics_27 = []byte(`"><span>`)
var topics_32 = []byte(`</span></a> `) var topics_28 = []byte(`</span></a> `)
var topics_33 = []byte(`<a class="rowsmall parent_forum" href="`) var topics_29 = []byte(`<a class="rowsmall parent_forum" href="`)
var topics_34 = []byte(`">`) var topics_30 = []byte(`">`)
var topics_35 = []byte(`</a>`) var topics_31 = []byte(`</a>`)
var topics_36 = []byte(` var topics_32 = []byte(`
<br /><a class="rowsmall starter" href="`) <br /><a class="rowsmall starter" href="`)
var topics_37 = []byte(`">`) var topics_33 = []byte(`">`)
var topics_38 = []byte(`</a> var topics_34 = []byte(`</a>
`) `)
var topics_39 = []byte(`<span class="rowsmall topic_status_e topic_status_closed" title="Status: Closed"> | &#x1F512;&#xFE0E</span>`) var topics_35 = []byte(`<span class="rowsmall topic_status_e topic_status_closed" title="Status: Closed"> | &#x1F512;&#xFE0E</span>`)
var topics_40 = []byte(`<span class="rowsmall topic_status_e topic_status_sticky" title="Status: Pinned"> | &#x1F4CD;&#xFE0E</span>`) var topics_36 = []byte(`<span class="rowsmall topic_status_e topic_status_sticky" title="Status: Pinned"> | &#x1F4CD;&#xFE0E</span>`)
var topics_41 = []byte(` var topics_37 = []byte(`
</span> </span>
<span class="topic_inner_right rowsmall" style="float: right;"> <span class="topic_inner_right rowsmall" style="float: right;">
<span class="replyCount">`) <span class="replyCount">`)
var topics_42 = []byte(`</span><br /> var topics_38 = []byte(`</span><br />
<span class="likeCount">`) <span class="likeCount">`)
var topics_43 = []byte(`</span> var topics_39 = []byte(`</span>
</span> </span>
</div> </div>
<div class="rowitem topic_right passive datarow `) <div class="rowitem topic_right passive datarow `)
var topics_44 = []byte(`topic_sticky`) var topics_40 = []byte(`topic_sticky`)
var topics_45 = []byte(`topic_closed`) var topics_41 = []byte(`topic_closed`)
var topics_46 = []byte(`"> var topics_42 = []byte(`">
`) <a href="`)
var topics_47 = []byte(`<a href="`) var topics_43 = []byte(`"><img src="`)
var topics_48 = []byte(`"><img src="`) var topics_44 = []byte(`" height="64" /></a>
var topics_49 = []byte(`" height="64" /></a>`)
var topics_50 = []byte(`
<span> <span>
<a href="`) <a href="`)
var topics_51 = []byte(`" class="lastName" style="font-size: 14px;">`) var topics_45 = []byte(`" class="lastName" style="font-size: 14px;">`)
var topics_52 = []byte(`</a><br> var topics_46 = []byte(`</a><br>
<span class="rowsmall lastReplyAt">`) <span class="rowsmall lastReplyAt">`)
var topics_53 = []byte(`</span> var topics_47 = []byte(`</span>
</span> </span>
</div> </div>
</div>`) </div>`)
var topics_54 = []byte(`<div class="rowitem passive">There aren't any topics yet.`) var topics_48 = []byte(`<div class="rowitem passive">There aren't any topics yet.`)
var topics_55 = []byte(` <a href="/topics/create/">Start one?</a>`) var topics_49 = []byte(` <a href="/topics/create/">Start one?</a>`)
var topics_56 = []byte(`</div>`) var topics_50 = []byte(`</div>`)
var topics_57 = []byte(` var topics_51 = []byte(`
</div> </div>
</main> </main>
@ -901,7 +889,7 @@ var forum_13 = []byte(`"></a></div>
`) `)
var forum_14 = []byte(` var forum_14 = []byte(`
<div class="opt mod_opt" title="Moderate"> <div class="opt mod_opt" title="Moderate">
<a class="moderate_link" href="#"></a> <a class="moderate_link" href="#" aria-label="Moderate Posts"></a>
</div> </div>
`) `)
var forum_15 = []byte(`<div class="opt locked_opt" title="You don't have the permissions needed to create a topic" aria-label="You don't have the permissions needed to make a topic in this forum"><a></a></div>`) var forum_15 = []byte(`<div class="opt locked_opt" title="You don't have the permissions needed to create a topic" aria-label="You don't have the permissions needed to make a topic in this forum"><a></a></div>`)
@ -930,12 +918,10 @@ var forum_18 = []byte(`
var forum_19 = []byte(` var forum_19 = []byte(`
<div id="forum_topic_create_form" class="rowblock topic_create_form quick_create_form" style="display: none;" aria-label="Quick Topic Form"> <div id="forum_topic_create_form" class="rowblock topic_create_form quick_create_form" style="display: none;" aria-label="Quick Topic Form">
<form id="topic_create_form_form" enctype="multipart/form-data" action="/topic/create/submit/" method="post"></form> <form id="topic_create_form_form" enctype="multipart/form-data" action="/topic/create/submit/" method="post"></form>
`) <img class="little_row_avatar" src="`)
var forum_20 = []byte(`<img class="little_row_avatar" src="`) var forum_20 = []byte(`" height="64" />
var forum_21 = []byte(`" height="64" />`)
var forum_22 = []byte(`
<input form="topic_create_form_form" id="topic_board_input" name="topic-board" value="`) <input form="topic_create_form_form" id="topic_board_input" name="topic-board" value="`)
var forum_23 = []byte(`" type="hidden"> var forum_21 = []byte(`" type="hidden">
<div class="main_form"> <div class="main_form">
<div class="topic_meta"> <div class="topic_meta">
<div class="formrow topic_name_row real_first_child"> <div class="formrow topic_name_row real_first_child">
@ -953,74 +939,70 @@ var forum_23 = []byte(`" type="hidden">
<div class="formitem"> <div class="formitem">
<button form="topic_create_form_form" name="topic-button" class="formbutton">Create Topic</button> <button form="topic_create_form_form" name="topic-button" class="formbutton">Create Topic</button>
`) `)
var forum_24 = []byte(` var forum_22 = []byte(`
<input name="upload_files" form="topic_create_form_form" id="upload_files" multiple type="file" style="display: none;" /> <input name="upload_files" form="topic_create_form_form" id="upload_files" multiple type="file" style="display: none;" />
<label for="upload_files" class="formbutton add_file_button">Add File</label> <label for="upload_files" class="formbutton add_file_button">Add File</label>
<div id="upload_file_dock"></div>`) <div id="upload_file_dock"></div>`)
var forum_25 = []byte(` var forum_23 = []byte(`
<button class="formbutton close_form">Cancel</button> <button class="formbutton close_form">Cancel</button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
`) `)
var forum_26 = []byte(` var forum_24 = []byte(`
<div id="forum_topic_list" class="rowblock topic_list"> <div id="forum_topic_list" class="rowblock topic_list">
`) `)
var forum_27 = []byte(`<div class="topic_row" data-tid="`) var forum_25 = []byte(`<div class="topic_row" data-tid="`)
var forum_28 = []byte(`"> var forum_26 = []byte(`">
<div class="rowitem topic_left passive datarow `) <div class="rowitem topic_left passive datarow `)
var forum_29 = []byte(`topic_sticky`) var forum_27 = []byte(`topic_sticky`)
var forum_30 = []byte(`topic_closed`) var forum_28 = []byte(`topic_closed`)
var forum_31 = []byte(`"> var forum_29 = []byte(`">
<span class="selector"></span> <span class="selector"></span>
`) <a href="`)
var forum_32 = []byte(`<a href="`) var forum_30 = []byte(`"><img src="`)
var forum_33 = []byte(`"><img src="`) var forum_31 = []byte(`" height="64" /></a>
var forum_34 = []byte(`" height="64" /></a>`)
var forum_35 = []byte(`
<span class="topic_inner_left"> <span class="topic_inner_left">
<a class="rowtopic" href="`) <a class="rowtopic" href="`)
var forum_36 = []byte(`"><span>`) var forum_32 = []byte(`"><span>`)
var forum_37 = []byte(`</span></a> var forum_33 = []byte(`</span></a>
<br /><a class="rowsmall starter" href="`) <br /><a class="rowsmall starter" href="`)
var forum_38 = []byte(`">`) var forum_34 = []byte(`">`)
var forum_39 = []byte(`</a> var forum_35 = []byte(`</a>
`) `)
var forum_40 = []byte(`<span class="rowsmall topic_status_e topic_status_closed" title="Status: Closed"> | &#x1F512;&#xFE0E</span>`) var forum_36 = []byte(`<span class="rowsmall topic_status_e topic_status_closed" title="Status: Closed"> | &#x1F512;&#xFE0E</span>`)
var forum_41 = []byte(`<span class="rowsmall topic_status_e topic_status_sticky" title="Status: Pinned"> | &#x1F4CD;&#xFE0E</span>`) var forum_37 = []byte(`<span class="rowsmall topic_status_e topic_status_sticky" title="Status: Pinned"> | &#x1F4CD;&#xFE0E</span>`)
var forum_42 = []byte(` var forum_38 = []byte(`
</span> </span>
<span class="topic_inner_right rowsmall" style="float: right;"> <span class="topic_inner_right rowsmall" style="float: right;">
<span class="replyCount">`) <span class="replyCount">`)
var forum_43 = []byte(`</span><br /> var forum_39 = []byte(`</span><br />
<span class="likeCount">`) <span class="likeCount">`)
var forum_44 = []byte(`</span> var forum_40 = []byte(`</span>
</span> </span>
</div> </div>
<div class="rowitem topic_right passive datarow `) <div class="rowitem topic_right passive datarow `)
var forum_45 = []byte(`topic_sticky`) var forum_41 = []byte(`topic_sticky`)
var forum_46 = []byte(`topic_closed`) var forum_42 = []byte(`topic_closed`)
var forum_47 = []byte(`"> var forum_43 = []byte(`">
`) <a href="`)
var forum_48 = []byte(`<a href="`) var forum_44 = []byte(`"><img src="`)
var forum_49 = []byte(`"><img src="`) var forum_45 = []byte(`" height="64" /></a>
var forum_50 = []byte(`" height="64" /></a>`)
var forum_51 = []byte(`
<span> <span>
<a href="`) <a href="`)
var forum_52 = []byte(`" class="lastName" style="font-size: 14px;">`) var forum_46 = []byte(`" class="lastName" style="font-size: 14px;">`)
var forum_53 = []byte(`</a><br> var forum_47 = []byte(`</a><br>
<span class="rowsmall lastReplyAt">`) <span class="rowsmall lastReplyAt">`)
var forum_54 = []byte(`</span> var forum_48 = []byte(`</span>
</span> </span>
</div> </div>
</div>`) </div>`)
var forum_55 = []byte(`<div class="rowitem passive">There aren't any topics in this forum yet.`) var forum_49 = []byte(`<div class="rowitem passive">There aren't any topics in this forum yet.`)
var forum_56 = []byte(` <a href="/topics/create/`) var forum_50 = []byte(` <a href="/topics/create/`)
var forum_57 = []byte(`">Start one?</a>`) var forum_51 = []byte(`">Start one?</a>`)
var forum_58 = []byte(`</div>`) var forum_52 = []byte(`</div>`)
var forum_59 = []byte(` var forum_53 = []byte(`
</div> </div>
</main> </main>
`) `)

View File

@ -117,50 +117,48 @@ for _, item := range tmpl_profile_vars.ItemList {
w.Write(profile_20) w.Write(profile_20)
w.Write([]byte(item.ClassName)) w.Write([]byte(item.ClassName))
w.Write(profile_21) w.Write(profile_21)
if item.Avatar != "" {
w.Write(profile_22)
w.Write([]byte(item.Avatar)) w.Write([]byte(item.Avatar))
w.Write(profile_23) w.Write(profile_22)
if item.ContentLines <= 5 { if item.ContentLines <= 5 {
w.Write(profile_23)
}
w.Write(profile_24) w.Write(profile_24)
} w.Write([]byte(item.Avatar))
w.Write(profile_25) w.Write(profile_25)
}
w.Write(profile_26)
w.Write([]byte(item.ContentHtml)) w.Write([]byte(item.ContentHtml))
w.Write(profile_27) w.Write(profile_26)
w.Write([]byte(item.UserLink)) w.Write([]byte(item.UserLink))
w.Write(profile_28) w.Write(profile_27)
w.Write([]byte(item.CreatedByName)) w.Write([]byte(item.CreatedByName))
w.Write(profile_29) w.Write(profile_28)
if tmpl_profile_vars.CurrentUser.IsMod { if tmpl_profile_vars.CurrentUser.IsMod {
w.Write(profile_29)
w.Write([]byte(strconv.Itoa(item.ID)))
w.Write(profile_30) w.Write(profile_30)
w.Write([]byte(strconv.Itoa(item.ID))) w.Write([]byte(strconv.Itoa(item.ID)))
w.Write(profile_31) w.Write(profile_31)
w.Write([]byte(strconv.Itoa(item.ID)))
w.Write(profile_32)
} }
w.Write(profile_33) w.Write(profile_32)
w.Write([]byte(strconv.Itoa(item.ID))) w.Write([]byte(strconv.Itoa(item.ID)))
w.Write(profile_34) w.Write(profile_33)
w.Write([]byte(tmpl_profile_vars.CurrentUser.Session)) w.Write([]byte(tmpl_profile_vars.CurrentUser.Session))
w.Write(profile_35) w.Write(profile_34)
if item.Tag != "" { if item.Tag != "" {
w.Write(profile_36) w.Write(profile_35)
w.Write([]byte(item.Tag)) w.Write([]byte(item.Tag))
w.Write(profile_36)
}
w.Write(profile_37) w.Write(profile_37)
} }
}
w.Write(profile_38) w.Write(profile_38)
}
}
w.Write(profile_39)
if !tmpl_profile_vars.CurrentUser.IsBanned { if !tmpl_profile_vars.CurrentUser.IsBanned {
w.Write(profile_40) w.Write(profile_39)
w.Write([]byte(strconv.Itoa(tmpl_profile_vars.ProfileOwner.ID))) w.Write([]byte(strconv.Itoa(tmpl_profile_vars.ProfileOwner.ID)))
w.Write(profile_41) w.Write(profile_40)
} }
w.Write(profile_41)
w.Write(profile_42) w.Write(profile_42)
w.Write(profile_43)
w.Write(footer_0) w.Write(footer_0)
w.Write([]byte(common.BuildWidget("footer",tmpl_profile_vars.Header))) w.Write([]byte(common.BuildWidget("footer",tmpl_profile_vars.Header)))
w.Write(footer_1) w.Write(footer_1)

View File

@ -121,181 +121,173 @@ w.Write(topic_19)
w.Write(topic_20) w.Write(topic_20)
w.Write([]byte(tmpl_topic_vars.Topic.ClassName)) w.Write([]byte(tmpl_topic_vars.Topic.ClassName))
w.Write(topic_21) w.Write(topic_21)
if tmpl_topic_vars.Topic.Avatar != "" {
w.Write(topic_22)
w.Write([]byte(tmpl_topic_vars.Topic.Avatar)) w.Write([]byte(tmpl_topic_vars.Topic.Avatar))
w.Write(topic_23) w.Write(topic_22)
w.Write([]byte(tmpl_topic_vars.Header.Theme.Name)) w.Write([]byte(tmpl_topic_vars.Header.Theme.Name))
w.Write(topic_24) w.Write(topic_23)
if tmpl_topic_vars.Topic.ContentLines <= 5 { if tmpl_topic_vars.Topic.ContentLines <= 5 {
w.Write(topic_24)
}
w.Write(topic_25) w.Write(topic_25)
}
w.Write(topic_26)
}
w.Write(topic_27)
w.Write([]byte(tmpl_topic_vars.Topic.ContentHTML)) w.Write([]byte(tmpl_topic_vars.Topic.ContentHTML))
w.Write(topic_28) w.Write(topic_26)
w.Write([]byte(tmpl_topic_vars.Topic.Content)) w.Write([]byte(tmpl_topic_vars.Topic.Content))
w.Write(topic_29) w.Write(topic_27)
w.Write([]byte(tmpl_topic_vars.Topic.UserLink)) w.Write([]byte(tmpl_topic_vars.Topic.UserLink))
w.Write(topic_30) w.Write(topic_28)
w.Write([]byte(tmpl_topic_vars.Topic.CreatedByName)) w.Write([]byte(tmpl_topic_vars.Topic.CreatedByName))
w.Write(topic_31) w.Write(topic_29)
if tmpl_topic_vars.CurrentUser.Perms.LikeItem { if tmpl_topic_vars.CurrentUser.Perms.LikeItem {
w.Write(topic_32) w.Write(topic_30)
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID))) w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
w.Write(topic_33) w.Write(topic_31)
if tmpl_topic_vars.Topic.Liked { if tmpl_topic_vars.Topic.Liked {
w.Write(topic_34) w.Write(topic_32)
} }
w.Write(topic_35) w.Write(topic_33)
} }
if tmpl_topic_vars.CurrentUser.Perms.EditTopic { if tmpl_topic_vars.CurrentUser.Perms.EditTopic {
w.Write(topic_34)
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
w.Write(topic_35)
}
if tmpl_topic_vars.CurrentUser.Perms.DeleteTopic {
w.Write(topic_36) w.Write(topic_36)
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID))) w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
w.Write(topic_37) w.Write(topic_37)
} }
if tmpl_topic_vars.CurrentUser.Perms.DeleteTopic { if tmpl_topic_vars.CurrentUser.Perms.CloseTopic {
if tmpl_topic_vars.Topic.IsClosed {
w.Write(topic_38) w.Write(topic_38)
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID))) w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
w.Write(topic_39) w.Write(topic_39)
} } else {
if tmpl_topic_vars.CurrentUser.Perms.CloseTopic {
if tmpl_topic_vars.Topic.IsClosed {
w.Write(topic_40) w.Write(topic_40)
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID))) w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
w.Write(topic_41) w.Write(topic_41)
} else {
w.Write(topic_42)
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
w.Write(topic_43)
} }
} }
if tmpl_topic_vars.CurrentUser.Perms.PinTopic { if tmpl_topic_vars.CurrentUser.Perms.PinTopic {
if tmpl_topic_vars.Topic.Sticky { if tmpl_topic_vars.Topic.Sticky {
w.Write(topic_42)
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
w.Write(topic_43)
} else {
w.Write(topic_44) w.Write(topic_44)
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID))) w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
w.Write(topic_45) w.Write(topic_45)
} else {
w.Write(topic_46)
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
w.Write(topic_47)
} }
} }
if tmpl_topic_vars.CurrentUser.Perms.ViewIPs { if tmpl_topic_vars.CurrentUser.Perms.ViewIPs {
w.Write(topic_48) w.Write(topic_46)
w.Write([]byte(tmpl_topic_vars.Topic.IPAddress)) w.Write([]byte(tmpl_topic_vars.Topic.IPAddress))
w.Write(topic_49) w.Write(topic_47)
} }
w.Write(topic_50) w.Write(topic_48)
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID))) w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
w.Write(topic_51) w.Write(topic_49)
w.Write([]byte(tmpl_topic_vars.CurrentUser.Session)) w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
w.Write(topic_52) w.Write(topic_50)
if tmpl_topic_vars.Topic.LikeCount > 0 { if tmpl_topic_vars.Topic.LikeCount > 0 {
w.Write(topic_53) w.Write(topic_51)
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.LikeCount))) w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.LikeCount)))
w.Write(topic_54) w.Write(topic_52)
} }
if tmpl_topic_vars.Topic.Tag != "" { if tmpl_topic_vars.Topic.Tag != "" {
w.Write(topic_55) w.Write(topic_53)
w.Write([]byte(tmpl_topic_vars.Topic.Tag)) w.Write([]byte(tmpl_topic_vars.Topic.Tag))
w.Write(topic_56) w.Write(topic_54)
} else { } else {
w.Write(topic_57) w.Write(topic_55)
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.Level))) w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.Level)))
w.Write(topic_58) w.Write(topic_56)
} }
w.Write(topic_59) w.Write(topic_57)
if len(tmpl_topic_vars.ItemList) != 0 { if len(tmpl_topic_vars.ItemList) != 0 {
for _, item := range tmpl_topic_vars.ItemList { for _, item := range tmpl_topic_vars.ItemList {
if item.ActionType != "" { if item.ActionType != "" {
w.Write(topic_60) w.Write(topic_58)
w.Write([]byte(item.ActionIcon)) w.Write([]byte(item.ActionIcon))
w.Write(topic_61) w.Write(topic_59)
w.Write([]byte(item.ActionType)) w.Write([]byte(item.ActionType))
w.Write(topic_62) w.Write(topic_60)
} else { } else {
w.Write(topic_63) w.Write(topic_61)
w.Write([]byte(item.ClassName)) w.Write([]byte(item.ClassName))
w.Write(topic_64) w.Write(topic_62)
if item.Avatar != "" {
w.Write(topic_65)
w.Write([]byte(item.Avatar)) w.Write([]byte(item.Avatar))
w.Write(topic_66) w.Write(topic_63)
w.Write([]byte(tmpl_topic_vars.Header.Theme.Name)) w.Write([]byte(tmpl_topic_vars.Header.Theme.Name))
w.Write(topic_67) w.Write(topic_64)
if item.ContentLines <= 5 { if item.ContentLines <= 5 {
w.Write(topic_68) w.Write(topic_65)
} }
w.Write(topic_69) w.Write(topic_66)
} w.Write(topic_67)
w.Write(topic_70)
w.Write(topic_71)
w.Write([]byte(item.ContentHtml)) w.Write([]byte(item.ContentHtml))
w.Write(topic_72) w.Write(topic_68)
w.Write([]byte(item.UserLink)) w.Write([]byte(item.UserLink))
w.Write(topic_73) w.Write(topic_69)
w.Write([]byte(item.CreatedByName)) w.Write([]byte(item.CreatedByName))
w.Write(topic_74) w.Write(topic_70)
if tmpl_topic_vars.CurrentUser.Perms.LikeItem { if tmpl_topic_vars.CurrentUser.Perms.LikeItem {
w.Write(topic_71)
w.Write([]byte(strconv.Itoa(item.ID)))
w.Write(topic_72)
if item.Liked {
w.Write(topic_73)
}
w.Write(topic_74)
}
if tmpl_topic_vars.CurrentUser.Perms.EditReply {
w.Write(topic_75) w.Write(topic_75)
w.Write([]byte(strconv.Itoa(item.ID))) w.Write([]byte(strconv.Itoa(item.ID)))
w.Write(topic_76) w.Write(topic_76)
if item.Liked {
w.Write(topic_77)
}
w.Write(topic_78)
}
if tmpl_topic_vars.CurrentUser.Perms.EditReply {
w.Write(topic_79)
w.Write([]byte(strconv.Itoa(item.ID)))
w.Write(topic_80)
} }
if tmpl_topic_vars.CurrentUser.Perms.DeleteReply { if tmpl_topic_vars.CurrentUser.Perms.DeleteReply {
w.Write(topic_77)
w.Write([]byte(strconv.Itoa(item.ID)))
w.Write(topic_78)
}
if tmpl_topic_vars.CurrentUser.Perms.ViewIPs {
w.Write(topic_79)
w.Write([]byte(item.IPAddress))
w.Write(topic_80)
}
w.Write(topic_81) w.Write(topic_81)
w.Write([]byte(strconv.Itoa(item.ID))) w.Write([]byte(strconv.Itoa(item.ID)))
w.Write(topic_82) w.Write(topic_82)
}
if tmpl_topic_vars.CurrentUser.Perms.ViewIPs {
w.Write(topic_83)
w.Write([]byte(item.IPAddress))
w.Write(topic_84)
}
w.Write(topic_85)
w.Write([]byte(strconv.Itoa(item.ID)))
w.Write(topic_86)
w.Write([]byte(tmpl_topic_vars.CurrentUser.Session)) w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
w.Write(topic_87) w.Write(topic_83)
if item.LikeCount > 0 { if item.LikeCount > 0 {
w.Write(topic_88) w.Write(topic_84)
w.Write([]byte(strconv.Itoa(item.LikeCount))) w.Write([]byte(strconv.Itoa(item.LikeCount)))
w.Write(topic_89) w.Write(topic_85)
} }
if item.Tag != "" { if item.Tag != "" {
w.Write(topic_90) w.Write(topic_86)
w.Write([]byte(item.Tag)) w.Write([]byte(item.Tag))
w.Write(topic_91) w.Write(topic_87)
} else { } else {
w.Write(topic_92) w.Write(topic_88)
w.Write([]byte(strconv.Itoa(item.Level))) w.Write([]byte(strconv.Itoa(item.Level)))
w.Write(topic_93) w.Write(topic_89)
} }
w.Write(topic_90)
}
}
}
w.Write(topic_91)
if tmpl_topic_vars.CurrentUser.Perms.CreateReply {
w.Write(topic_92)
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
w.Write(topic_93)
if tmpl_topic_vars.CurrentUser.Perms.UploadFiles {
w.Write(topic_94) w.Write(topic_94)
} }
}
}
w.Write(topic_95) w.Write(topic_95)
if tmpl_topic_vars.CurrentUser.Perms.CreateReply { }
w.Write(topic_96) w.Write(topic_96)
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
w.Write(topic_97)
if tmpl_topic_vars.CurrentUser.Perms.UploadFiles {
w.Write(topic_98)
}
w.Write(topic_99)
}
w.Write(topic_100)
w.Write(footer_0) w.Write(footer_0)
w.Write([]byte(common.BuildWidget("footer",tmpl_topic_vars.Header))) w.Write([]byte(common.BuildWidget("footer",tmpl_topic_vars.Header)))
w.Write(footer_1) w.Write(footer_1)

View File

@ -3,9 +3,9 @@
// Code generated by Gosora. More below: // 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. */ /* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
package main package main
import "strconv"
import "net/http" import "net/http"
import "./common" import "./common"
import "strconv"
// nolint // nolint
func init() { func init() {
@ -93,112 +93,100 @@ if tmpl_topics_vars.CurrentUser.ID != 0 {
w.Write(topics_8) w.Write(topics_8)
if len(tmpl_topics_vars.ForumList) != 0 { if len(tmpl_topics_vars.ForumList) != 0 {
w.Write(topics_9) w.Write(topics_9)
if tmpl_topics_vars.CurrentUser.Avatar != "" {
w.Write(topics_10)
w.Write([]byte(tmpl_topics_vars.CurrentUser.Avatar)) w.Write([]byte(tmpl_topics_vars.CurrentUser.Avatar))
w.Write(topics_11) w.Write(topics_10)
}
w.Write(topics_12)
if len(tmpl_topics_vars.ForumList) != 0 { if len(tmpl_topics_vars.ForumList) != 0 {
for _, item := range tmpl_topics_vars.ForumList { for _, item := range tmpl_topics_vars.ForumList {
w.Write(topics_13) w.Write(topics_11)
if item.ID == tmpl_topics_vars.DefaultForum { if item.ID == tmpl_topics_vars.DefaultForum {
w.Write(topics_14) w.Write(topics_12)
} }
w.Write(topics_15) w.Write(topics_13)
w.Write([]byte(strconv.Itoa(item.ID))) w.Write([]byte(strconv.Itoa(item.ID)))
w.Write(topics_16) w.Write(topics_14)
w.Write([]byte(item.Name)) w.Write([]byte(item.Name))
w.Write(topics_15)
}
}
w.Write(topics_16)
if tmpl_topics_vars.CurrentUser.Perms.UploadFiles {
w.Write(topics_17) w.Write(topics_17)
} }
}
w.Write(topics_18) w.Write(topics_18)
if tmpl_topics_vars.CurrentUser.Perms.UploadFiles { }
}
w.Write(topics_19) w.Write(topics_19)
}
w.Write(topics_20)
}
}
w.Write(topics_21)
if len(tmpl_topics_vars.TopicList) != 0 { if len(tmpl_topics_vars.TopicList) != 0 {
for _, item := range tmpl_topics_vars.TopicList { for _, item := range tmpl_topics_vars.TopicList {
w.Write(topics_22) w.Write(topics_20)
w.Write([]byte(strconv.Itoa(item.ID))) w.Write([]byte(strconv.Itoa(item.ID)))
w.Write(topics_23) w.Write(topics_21)
if item.Sticky { if item.Sticky {
w.Write(topics_24) w.Write(topics_22)
} else { } else {
if item.IsClosed { if item.IsClosed {
w.Write(topics_25) w.Write(topics_23)
} }
} }
w.Write(topics_26) w.Write(topics_24)
if item.Creator.Avatar != "" {
w.Write(topics_27)
w.Write([]byte(item.Creator.Link)) w.Write([]byte(item.Creator.Link))
w.Write(topics_28) w.Write(topics_25)
w.Write([]byte(item.Creator.Avatar)) w.Write([]byte(item.Creator.Avatar))
w.Write(topics_29) w.Write(topics_26)
}
w.Write(topics_30)
w.Write([]byte(item.Link)) w.Write([]byte(item.Link))
w.Write(topics_31) w.Write(topics_27)
w.Write([]byte(item.Title)) w.Write([]byte(item.Title))
w.Write(topics_32) w.Write(topics_28)
if item.ForumName != "" { if item.ForumName != "" {
w.Write(topics_33) w.Write(topics_29)
w.Write([]byte(item.ForumLink)) w.Write([]byte(item.ForumLink))
w.Write(topics_34) w.Write(topics_30)
w.Write([]byte(item.ForumName)) w.Write([]byte(item.ForumName))
w.Write(topics_31)
}
w.Write(topics_32)
w.Write([]byte(item.Creator.Link))
w.Write(topics_33)
w.Write([]byte(item.Creator.Name))
w.Write(topics_34)
if item.IsClosed {
w.Write(topics_35) w.Write(topics_35)
} }
if item.Sticky {
w.Write(topics_36) w.Write(topics_36)
w.Write([]byte(item.Creator.Link))
w.Write(topics_37)
w.Write([]byte(item.Creator.Name))
w.Write(topics_38)
if item.IsClosed {
w.Write(topics_39)
} }
w.Write(topics_37)
w.Write([]byte(strconv.Itoa(item.PostCount)))
w.Write(topics_38)
w.Write([]byte(strconv.Itoa(item.LikeCount)))
w.Write(topics_39)
if item.Sticky { if item.Sticky {
w.Write(topics_40) w.Write(topics_40)
}
w.Write(topics_41)
w.Write([]byte(strconv.Itoa(item.PostCount)))
w.Write(topics_42)
w.Write([]byte(strconv.Itoa(item.LikeCount)))
w.Write(topics_43)
if item.Sticky {
w.Write(topics_44)
} else { } else {
if item.IsClosed { if item.IsClosed {
w.Write(topics_45) w.Write(topics_41)
} }
} }
w.Write(topics_46) w.Write(topics_42)
if item.LastUser.Avatar != "" {
w.Write(topics_47)
w.Write([]byte(item.LastUser.Link)) w.Write([]byte(item.LastUser.Link))
w.Write(topics_48) w.Write(topics_43)
w.Write([]byte(item.LastUser.Avatar)) w.Write([]byte(item.LastUser.Avatar))
w.Write(topics_44)
w.Write([]byte(item.LastUser.Link))
w.Write(topics_45)
w.Write([]byte(item.LastUser.Name))
w.Write(topics_46)
w.Write([]byte(item.RelativeLastReplyAt))
w.Write(topics_47)
}
} else {
w.Write(topics_48)
if tmpl_topics_vars.CurrentUser.Perms.CreateTopic {
w.Write(topics_49) w.Write(topics_49)
} }
w.Write(topics_50) w.Write(topics_50)
w.Write([]byte(item.LastUser.Link)) }
w.Write(topics_51) w.Write(topics_51)
w.Write([]byte(item.LastUser.Name))
w.Write(topics_52)
w.Write([]byte(item.RelativeLastReplyAt))
w.Write(topics_53)
}
} else {
w.Write(topics_54)
if tmpl_topics_vars.CurrentUser.Perms.CreateTopic {
w.Write(topics_55)
}
w.Write(topics_56)
}
w.Write(topics_57)
w.Write(footer_0) w.Write(footer_0)
w.Write([]byte(common.BuildWidget("footer",tmpl_topics_vars.Header))) w.Write([]byte(common.BuildWidget("footer",tmpl_topics_vars.Header)))
w.Write(footer_1) w.Write(footer_1)

View File

@ -5,11 +5,9 @@
<div class="colstack_item colstack_head rowhead"> <div class="colstack_item colstack_head rowhead">
<div class="rowitem"><h1>Edit Avatar</h1></div> <div class="rowitem"><h1>Edit Avatar</h1></div>
</div> </div>
{{if .CurrentUser.Avatar}}
<div class="colstack_item"> <div class="colstack_item">
<div class="rowitem"><img src="{{.CurrentUser.Avatar}}" height="128px" max-width="128px" /></div> <div class="rowitem"><img src="{{.CurrentUser.Avatar}}" height="128px" max-width="128px" /></div>
</div> </div>
{{end}}
<div class="colstack_item the_form"> <div class="colstack_item the_form">
<form action="/user/edit/avatar/submit/" method="post" enctype="multipart/form-data"> <form action="/user/edit/avatar/submit/" method="post" enctype="multipart/form-data">
<div class="formrow real_first_child"> <div class="formrow real_first_child">

View File

@ -15,7 +15,7 @@
<div class="opt create_topic_opt" title="Create Topic" aria-label="Create a topic"><a class="create_topic_link" href="/topics/create/{{.Forum.ID}}"></a></div> <div class="opt create_topic_opt" title="Create Topic" aria-label="Create a topic"><a class="create_topic_link" href="/topics/create/{{.Forum.ID}}"></a></div>
{{/** TODO: Add a permissions check for this **/}} {{/** TODO: Add a permissions check for this **/}}
<div class="opt mod_opt" title="Moderate"> <div class="opt mod_opt" title="Moderate">
<a class="moderate_link" href="#"></a> <a class="moderate_link" href="#" aria-label="Moderate Posts"></a>
</div> </div>
{{else}}<div class="opt locked_opt" title="You don't have the permissions needed to create a topic" aria-label="You don't have the permissions needed to make a topic in this forum"><a></a></div>{{end}} {{else}}<div class="opt locked_opt" title="You don't have the permissions needed to create a topic" aria-label="You don't have the permissions needed to make a topic in this forum"><a></a></div>{{end}}
<div style="clear: both;"></div> <div style="clear: both;"></div>
@ -39,7 +39,7 @@
{{if .CurrentUser.Perms.CreateTopic}} {{if .CurrentUser.Perms.CreateTopic}}
<div id="forum_topic_create_form" class="rowblock topic_create_form quick_create_form" style="display: none;" aria-label="Quick Topic Form"> <div id="forum_topic_create_form" class="rowblock topic_create_form quick_create_form" style="display: none;" aria-label="Quick Topic Form">
<form id="topic_create_form_form" enctype="multipart/form-data" action="/topic/create/submit/" method="post"></form> <form id="topic_create_form_form" enctype="multipart/form-data" action="/topic/create/submit/" method="post"></form>
{{if .CurrentUser.Avatar}}<img class="little_row_avatar" src="{{.CurrentUser.Avatar}}" height="64" />{{end}} <img class="little_row_avatar" src="{{.CurrentUser.Avatar}}" height="64" />
<input form="topic_create_form_form" id="topic_board_input" name="topic-board" value="{{.Forum.ID}}" type="hidden"> <input form="topic_create_form_form" id="topic_board_input" name="topic-board" value="{{.Forum.ID}}" type="hidden">
<div class="main_form"> <div class="main_form">
<div class="topic_meta"> <div class="topic_meta">
@ -72,7 +72,7 @@
{{range .ItemList}}<div class="topic_row" data-tid="{{.ID}}"> {{range .ItemList}}<div class="topic_row" data-tid="{{.ID}}">
<div class="rowitem topic_left passive datarow {{if .Sticky}}topic_sticky{{else if .IsClosed}}topic_closed{{end}}"> <div class="rowitem topic_left passive datarow {{if .Sticky}}topic_sticky{{else if .IsClosed}}topic_closed{{end}}">
<span class="selector"></span> <span class="selector"></span>
{{if .Creator.Avatar}}<a href="{{.Creator.Link}}"><img src="{{.Creator.Avatar}}" height="64" /></a>{{end}} <a href="{{.Creator.Link}}"><img src="{{.Creator.Avatar}}" height="64" /></a>
<span class="topic_inner_left"> <span class="topic_inner_left">
<a class="rowtopic" href="{{.Link}}"><span>{{.Title}}</span></a> <a class="rowtopic" href="{{.Link}}"><span>{{.Title}}</span></a>
<br /><a class="rowsmall starter" href="{{.Creator.Link}}">{{.Creator.Name}}</a> <br /><a class="rowsmall starter" href="{{.Creator.Link}}">{{.Creator.Name}}</a>
@ -86,7 +86,7 @@
</span> </span>
</div> </div>
<div class="rowitem topic_right passive datarow {{if .Sticky}}topic_sticky{{else if .IsClosed}}topic_closed{{end}}"> <div class="rowitem topic_right passive datarow {{if .Sticky}}topic_sticky{{else if .IsClosed}}topic_closed{{end}}">
{{if .LastUser.Avatar}}<a href="{{.LastUser.Link}}"><img src="{{.LastUser.Avatar}}" height="64" /></a>{{end}} <a href="{{.LastUser.Link}}"><img src="{{.LastUser.Avatar}}" height="64" /></a>
<span> <span>
<a href="{{.LastUser.Link}}" class="lastName" style="font-size: 14px;">{{.LastUser.Name}}</a><br> <a href="{{.LastUser.Link}}" class="lastName" style="font-size: 14px;">{{.LastUser.Name}}</a><br>
<span class="rowsmall lastReplyAt">{{.RelativeLastReplyAt}}</span> <span class="rowsmall lastReplyAt">{{.RelativeLastReplyAt}}</span>

View File

@ -19,7 +19,7 @@
<div style="clear: both;"></div> <div style="clear: both;"></div>
</div> </div>
<main id="socialgroups_member_list" class="rowblock member_list" style="position: relative;z-index: 50;"> <main id="socialgroups_member_list" class="rowblock member_list" style="position: relative;z-index: 50;">
{{range .ItemList}}<div class="rowitem passive datarow" style="{{if .User.Avatar}}background-image: url({{.User.Avatar}});background-position: left;background-repeat: no-repeat;background-size: 64px;padding-left: 78px;{{end}}{{if .Offline}}background-color: #eaeaea;{{else if gt .Rank 0}}background-color: #e6f3ff;{{end}}"> {{range .ItemList}}<div class="rowitem passive datarow" style="background-image: url({{.User.Avatar}});background-position: left;background-repeat: no-repeat;background-size: 64px;padding-left: 78px;{{if .Offline}}background-color: #eaeaea;{{else if gt .Rank 0}}background-color: #e6f3ff;{{end}}">
<span style="float: right;"> <span style="float: right;">
<span class="rank" style="font-size: 15px;">{{.RankString}}</span><br /> <span class="rank" style="font-size: 15px;">{{.RankString}}</span><br />
<span class="joinedAt rowsmall">{{.JoinedAt}}</span> <span class="joinedAt rowsmall">{{.JoinedAt}}</span>

View File

@ -19,7 +19,7 @@
<div style="clear: both;"></div> <div style="clear: both;"></div>
</div> </div>
<main id="forum_topic_list" class="rowblock topic_list" style="position: relative;z-index: 50;"> <main id="forum_topic_list" class="rowblock topic_list" style="position: relative;z-index: 50;">
{{range .ItemList}}<div class="rowitem topic_left passive datarow" style="{{if .Creator.Avatar}}background-image: url({{.Creator.Avatar}});background-position: left;background-repeat: no-repeat;background-size: 64px;padding-left: 72px;{{end}}{{if .Sticky}}background-color: #FFFFCC;{{else if .IsClosed}}background-color: #eaeaea;{{end}}"> {{range .ItemList}}<div class="rowitem topic_left passive datarow" style="background-image: url({{.Creator.Avatar}});background-position: left;background-repeat: no-repeat;background-size: 64px;padding-left: 72px;{{if .Sticky}}background-color: #FFFFCC;{{else if .IsClosed}}background-color: #eaeaea;{{end}}">
<span class="topic_inner_right rowsmall" style="float: right;"> <span class="topic_inner_right rowsmall" style="float: right;">
<span class="replyCount">{{.PostCount}} replies</span><br /> <span class="replyCount">{{.PostCount}} replies</span><br />
<span class="lastReplyAt">{{.LastReplyAt}}</span> <span class="lastReplyAt">{{.LastReplyAt}}</span>
@ -30,7 +30,7 @@
{{if .IsClosed}}<span class="rowsmall topic_status_e topic_status_closed" title="Status: Closed"> | &#x1F512;&#xFE0E{{end}}</span> {{if .IsClosed}}<span class="rowsmall topic_status_e topic_status_closed" title="Status: Closed"> | &#x1F512;&#xFE0E{{end}}</span>
</span> </span>
</div> </div>
<div class="rowitem topic_right passive datarow" style="{{if .LastUser.Avatar}}background-image: url({{.LastUser.Avatar}});background-position: left;background-repeat: no-repeat;background-size: 64px;padding-left: 72px;{{end}}"> <div class="rowitem topic_right passive datarow" style="background-image: url({{.LastUser.Avatar}});background-position: left;background-repeat: no-repeat;background-size: 64px;padding-left: 72px;">
<span> <span>
<a href="{{.LastUser.Link}}" class="lastName" style="font-size: 14px;">{{.LastUser.Name}}</a><br> <a href="{{.LastUser.Link}}" class="lastName" style="font-size: 14px;">{{.LastUser.Name}}</a><br>
<span class="rowsmall lastReplyAt">Last: {{.LastReplyAt}}</span> <span class="rowsmall lastReplyAt">Last: {{.LastReplyAt}}</span>

View File

@ -14,7 +14,7 @@
</div> </div>
{{if .IP}} {{if .IP}}
<div class="rowblock bgavatars"> <div class="rowblock bgavatars">
{{range .ItemList}}<div class="rowitem"{{if .Avatar}} style="background-image: url('{{.Avatar}}');"{{end}}> {{range .ItemList}}<div class="rowitem" style="background-image: url('{{.Avatar}}');">
<a href="{{.Link}}">{{.Name}}</a> <a href="{{.Link}}">{{.Name}}</a>
</div> </div>
{{else}}<div class="rowitem">No users found.</div>{{end}} {{else}}<div class="rowitem">No users found.</div>{{end}}

View File

@ -2,24 +2,25 @@
<div class="move_left"> <div class="move_left">
<div class="move_right"> <div class="move_right">
<ul>{{/** Add a menu manager **/}} <ul>{{/** Add a menu manager **/}}
<li class="menu_left menu_overview"><a href="/" rel="home">{{.Header.Site.ShortName}}</a></li> <li id="menu_overview" class="menu_left"><a href="/" rel="home">{{.Header.Site.ShortName}}</a></li>
<li class="menu_left menu_forums"><a href="/forums/">Forums</a></li> <li id="menu_forums" class="menu_left"><a href="/forums/" aria-label="The Forum list" title="Forum List"></a></li>
<li class="menu_left menu_topics"><a href="/">Topics</a></li> <li class="menu_left menu_topics"><a href="/" aria-label="The topic list" title="Topic List"></a></li>
<li id="general_alerts" class="menu_right menu_alerts"> <li id="general_alerts" class="menu_right menu_alerts">
<div class="alert_bell"></div> <div class="alert_bell"></div>
<div class="alert_counter"></div> <div class="alert_counter" aria-label="The number of alerts"></div>
<div class="alert_aftercounter"></div> <div class="alert_aftercounter"></div>
<div class="alertList"></div> <div class="alertList" aria-label="The alert list"></div>
</li> </li>
{{if .CurrentUser.Loggedin}} {{if .CurrentUser.Loggedin}}
<li class="menu_left menu_account"><a href="/user/edit/critical/">Account</a></li> <li class="menu_left menu_account"><a href="/user/edit/critical/" aria-label="The account manager" title="Account Manager"></a></li>
<li class="menu_left menu_profile"><a href="{{.CurrentUser.Link}}">Profile</a></li> <li class="menu_left menu_profile"><a href="{{.CurrentUser.Link}}" aria-label="Your profile" title="Your profile"></a></li>
<li class="menu_left menu_panel menu_account supermod_only"><a href="/panel/">Panel</a></li> <li class="menu_left menu_panel menu_account supermod_only"><a href="/panel/" aria-label="The Control Panel" title="Control Panel"></a></li>
<li class="menu_left menu_logout"><a href="/accounts/logout/?session={{.CurrentUser.Session}}">Logout</a></li> <li class="menu_left menu_logout"><a href="/accounts/logout/?session={{.CurrentUser.Session}}" aria-label="Log out of your account" title="Logout"></a></li>
{{else}} {{else}}
<li class="menu_left menu_register"><a href="/accounts/create/">Register</a></li> <li class="menu_left menu_register"><a href="/accounts/create/" aria-label="Create a new account" title="Register"></a></li>
<li class="menu_left menu_login"><a href="/accounts/login/">Login</a></li> <li class="menu_left menu_login"><a href="/accounts/login/" aria-label="Login to your account" title="Login"></a></li>
{{end}} {{end}}
<li class="menu_left menu_hamburger" title="Menu"><a></a></li>
</ul> </ul>
</div> </div>
</div> </div>

View File

@ -16,15 +16,28 @@
</div> </div>
<div id="panel_adminlogs" class="colstack_item rowlist"> <div id="panel_adminlogs" class="colstack_item rowlist">
{{range .Logs}} {{range .Logs}}
<div class="rowitem" style="font-weight: normal;text-transform: none;"> <div class="rowitem panel_compactrow" style="font-weight: normal;text-transform: none;">
<a style="font-size: 17px;">{{.Action}}</a><br /> <span style="float: left;">
<small style="margin-left: 2px;">IP: {{.IPAddress}}</small> <span>{{.Action}}</span><br />
<span style="float: right;"> <small style="margin-left: 2px;font-size: 12px;">{{.IPAddress}}</small>
<span style="font-size: 16px;position:relative;top: -2px;">{{.DoneAt}}</span>
</span> </span>
<span class="to_right">
<span style="font-size: 14px;">{{.DoneAt}}</span>
</span>
<div style="clear: both;"></div>
</div> </div>
{{end}} {{end}}
</div> </div>
{{if gt .LastPage 1}}
<div class="pageset">
{{if gt .Page 1}}<div class="pageitem"><a href="?page={{subtract .Page 1}}">Prev</a></div>{{end}}
{{range .PageList}}
<div class="pageitem"><a href="?page={{.}}">{{.}}</a></div>
{{end}}
{{if ne .LastPage .Page}}<div class="pageitem"><a href="?page={{add .Page 1}}">Next</a></div>{{end}}
</div>
{{end}}
</main> </main>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -6,13 +6,13 @@
<div class="rowitem"><a>Debug</a></div> <div class="rowitem"><a>Debug</a></div>
</div> </div>
<div id="panel_debug" class="colstack_grid"> <div id="panel_debug" class="colstack_grid">
<div class="grid_item grid_stat">Uptime</div> <div class="grid_item grid_stat"><span>Uptime</span></div>
<div class="grid_item grid_stat">Open DB Conns</div> <div class="grid_item grid_stat"><span>Open DB Conns</span></div>
<div class="grid_item grid_stat">Adapter</div> <div class="grid_item grid_stat"><span>Adapter</span></div>
<div class="grid_item grid_stat">{{.Uptime}}</div> <div class="grid_item grid_stat"><span>{{.Uptime}}</span></div>
<div class="grid_item grid_stat">{{.OpenConns}}</div> <div class="grid_item grid_stat"><span>{{.OpenConns}}</span></div>
<div class="grid_item grid_stat">{{.DBAdapter}}</div> <div class="grid_item grid_stat"><span>{{.DBAdapter}}</span></div>
</div> </div>
</main> </main>
</div> </div>

View File

@ -49,7 +49,7 @@ var form_vars = {'perm_preset': ['can_moderate','can_post','read_only','no_acces
<div class="colstack_item colstack_head"> <div class="colstack_item colstack_head">
<div class="rowitem"><a>Forum Permissions</a></div> <div class="rowitem"><a>Forum Permissions</a></div>
</div> </div>
<div id="forum_quick_perms" class="colstack_item rowlist"> <div id="forum_quick_perms" class="colstack_item rowlist formlist">
{{range .Groups}} {{range .Groups}}
<div class="formrow"> <div class="formrow">
<div class="formitem editable_parent"> <div class="formitem editable_parent">

View File

@ -14,23 +14,21 @@
<div id="panel_forums" class="colstack_item rowlist"> <div id="panel_forums" class="colstack_item rowlist">
{{range .ItemList}} {{range .ItemList}}
<div class="rowitem editable_parent"> <div class="rowitem editable_parent">
<span class="panel_floater"> <span id="panel_forums_left_box">
<span data-field="forum_active" data-type="list" class="panel_tag editable_block forum_active {{if .Active}}forum_active_Show" data-value="1{{else}}forum_active_Hide" data-value="0{{end}}" title="Hidden"></span>
<span data-field="forum_preset" data-type="list" data-value="{{.Preset}}" class="panel_tag editable_block forum_preset forum_preset_{{.Preset}}" title="{{.PresetLang}}"></span>
<span class="panel_buttons">
<a class="panel_tag edit_fields hide_on_edit panel_right_button">Edit</a>
<a class="panel_right_button" href="/panel/forums/edit/submit/{{.ID}}"><button class='panel_tag submit_edit show_on_edit' type='submit'>Update</button></a>
{{if gt .ID 1}}<a href="/panel/forums/delete/{{.ID}}?session={{$.CurrentUser.Session}}" class="panel_tag panel_right_button hide_on_edit">Delete</a>{{end}}
<a href="/panel/forums/edit/{{.ID}}" class="panel_tag panel_right_button show_on_edit">Full Edit</a>
</span>
</span>
<span style="float: left;">
{{/** TODO: Make sure the forum_active_name class is set and unset when the activity status of this forum is changed **/}} {{/** TODO: Make sure the forum_active_name class is set and unset when the activity status of this forum is changed **/}}
<a data-field="forum_name" data-type="text" class="editable_block forum_name{{if not .Active}} forum_active_name{{end}}">{{.Name}}</a> <a data-field="forum_name" data-type="text" class="editable_block forum_name{{if not .Active}} forum_active_name{{end}}">{{.Name}}</a>
<br /><span data-field="forum_desc" data-type="text" class="editable_block forum_desc rowsmall">{{.Desc}}</span>
</span>
<span class="panel_floater">
<span data-field="forum_active" data-type="list" class="panel_tag editable_block forum_active {{if .Active}}forum_active_Show" data-value="1{{else}}forum_active_Hide" data-value="0{{end}}" title="Hidden"></span>
<span data-field="forum_preset" data-type="list" data-value="{{.Preset}}" class="panel_tag editable_block forum_preset forum_preset_{{.Preset}}" title="{{.PresetLang}}"></span>
</span>
<span class="panel_buttons">
<a class="panel_tag edit_fields hide_on_edit panel_right_button edit_button" aria-label="Edit Forum"></a>
<a class="panel_right_button" href="/panel/forums/edit/submit/{{.ID}}"><button class='panel_tag submit_edit show_on_edit' type='submit'>Update</button></a>
{{if gt .ID 1}}<a href="/panel/forums/delete/{{.ID}}?session={{$.CurrentUser.Session}}" class="panel_tag panel_right_button hide_on_edit delete_button" aria-label="Delete Forum"></a>{{end}}
<a href="/panel/forums/edit/{{.ID}}" class="panel_tag panel_right_button show_on_edit">Full Edit</a>
</span> </span>
<br /><span data-field="forum_desc" data-type="text" class="editable_block forum_desc rowsmall">{{.Desc}}</span>
<div style="clear: both;"></div>
</div> </div>
{{end}} {{end}}
</div> </div>

View File

@ -16,7 +16,7 @@
<div class="rowitem"><h1>{{.Name}} Group</h1></div> <div class="rowitem"><h1>{{.Name}} Group</h1></div>
</div> </div>
<form action="/panel/groups/edit/perms/submit/{{.ID}}?session={{.CurrentUser.Session}}" method="post"> <form action="/panel/groups/edit/perms/submit/{{.ID}}?session={{.CurrentUser.Session}}" method="post">
<div id="panel_group" class="colstack_item rowlist"> <div id="panel_group" class="colstack_item rowlist formlist">
{{if .CurrentUser.Perms.EditGroupLocalPerms}} {{if .CurrentUser.Perms.EditGroupLocalPerms}}
{{range .LocalPerms}} {{range .LocalPerms}}
<div class="formrow"> <div class="formrow">
@ -39,7 +39,7 @@
<div class="colstack_item colstack_head"> <div class="colstack_item colstack_head">
<div class="rowitem"><h1>Extended Permissions</h1></div> <div class="rowitem"><h1>Extended Permissions</h1></div>
</div> </div>
<div class="colstack_item rowlist"> <div class="colstack_item rowlist formlist">
{{if .CurrentUser.Perms.EditGroupGlobalPerms}} {{if .CurrentUser.Perms.EditGroupGlobalPerms}}
{{range .GlobalPerms}} {{range .GlobalPerms}}
<div class="formrow"> <div class="formrow">

View File

@ -14,7 +14,7 @@
{{if .RankClass}}<a class="panel_tag panel_rank_tag panel_rank_tag_{{.RankClass}}" title="{{.Rank}}"></a> {{if .RankClass}}<a class="panel_tag panel_rank_tag panel_rank_tag_{{.RankClass}}" title="{{.Rank}}"></a>
{{else}}<span class="panel_tag">{{.Rank}}</span>{{end}} {{else}}<span class="panel_tag">{{.Rank}}</span>{{end}}
{{if .CanEdit}}<a href="/panel/groups/edit/{{.ID}}" class="panel_tag panel_right_button">Edit</a>{{end}} {{if .CanEdit}}<a href="/panel/groups/edit/{{.ID}}" class="panel_tag panel_right_button edit_button" aria-label="Edit Group"></a>{{end}}
</span> </span>
</div> </div>
{{end}} {{end}}

View File

@ -22,7 +22,7 @@
<span>{{.Action}}</span><br /> <span>{{.Action}}</span><br />
<small style="margin-left: 2px;font-size: 12px;">{{.IPAddress}}</small> <small style="margin-left: 2px;font-size: 12px;">{{.IPAddress}}</small>
</span> </span>
<span style="float: right;"> <span class="to_right">
<span style="font-size: 14px;">{{.DoneAt}}</span> <span style="font-size: 14px;">{{.DoneAt}}</span>
</span> </span>
<div style="clear: both;"></div> <div style="clear: both;"></div>

View File

@ -6,7 +6,7 @@
<div class="colstack_item colstack_head"> <div class="colstack_item colstack_head">
<div class="rowitem"><h1>Plugins</h1></div> <div class="rowitem"><h1>Plugins</h1></div>
</div> </div>
<div id="panel_plugins" class="colstack_item"> <div id="panel_plugins" class="colstack_item complex_rowlist">
{{range .ItemList}} {{range .ItemList}}
<div class="rowitem editable_parent"> <div class="rowitem editable_parent">
<a {{if .URL}}href="{{.URL}}" {{end}}class="editable_block" class="panel_upshift">{{.Name}}</a><br /> <a {{if .URL}}href="{{.URL}}" {{end}}class="editable_block" class="panel_upshift">{{.Name}}</a><br />

View File

@ -10,7 +10,7 @@
{{range $key, $value := .Something}} {{range $key, $value := .Something}}
<div class="rowitem panel_compactrow editable_parent"> <div class="rowitem panel_compactrow editable_parent">
<a href="/panel/settings/edit/{{$key}}" class="editable_block panel_upshift">{{$key}}</a> <a href="/panel/settings/edit/{{$key}}" class="editable_block panel_upshift">{{$key}}</a>
<a class="panel_compacttext" style="float: right;">{{$value}}</a> <a class="panel_compacttext to_right">{{$value}}</a>
</div> </div>
{{end}} {{end}}
</div> </div>

View File

@ -11,7 +11,7 @@
{{template "panel-inner-menu.html" . }} {{template "panel-inner-menu.html" . }}
</nav> </nav>
<!-- Stop inlining this x.x --> {{/** Stop inlining this x.x **/}}
<style type="text/css"> <style type="text/css">
.rowitem::after { .rowitem::after {
content: ""; content: "";
@ -24,7 +24,7 @@
<div class="colstack_item colstack_head"> <div class="colstack_item colstack_head">
<div class="rowitem"><h1>Primary Themes</h1></div> <div class="rowitem"><h1>Primary Themes</h1></div>
</div> </div>
<div id="panel_primary_themes" class="colstack_item panel_themes"> <div id="panel_primary_themes" class="colstack_item panel_themes complex_rowlist">
{{range .PrimaryThemes}} {{range .PrimaryThemes}}
<div class="theme_row rowitem editable_parent" style="{{if .FullImage}}background-image: url('/static/{{.FullImage}}');background-position: center;background-size: 50%;background-repeat: no-repeat;{{end}}"> <div class="theme_row rowitem editable_parent" style="{{if .FullImage}}background-image: url('/static/{{.FullImage}}');background-position: center;background-size: 50%;background-repeat: no-repeat;{{end}}">
<span style="float: left;"> <span style="float: left;">
@ -39,6 +39,7 @@
</div> </div>
{{end}} {{end}}
</div> </div>
{{if .VariantThemes}}
<div class="colstack_item colstack_head"> <div class="colstack_item colstack_head">
<div class="rowitem"><h1>Variant Themes</h1></div> <div class="rowitem"><h1>Variant Themes</h1></div>
</div> </div>
@ -57,6 +58,7 @@
</div> </div>
{{end}} {{end}}
</div> </div>
{{end}}
</main> </main>
</div> </div>

View File

@ -8,8 +8,9 @@
</div> </div>
<div id="panel_users" class="colstack_item rowlist bgavatars"> <div id="panel_users" class="colstack_item rowlist bgavatars">
{{range .ItemList}} {{range .ItemList}}
<div class="rowitem editable_parent" style="{{if .Avatar}}background-image: url('{{.Avatar}}');{{end}}"> <div class="rowitem editable_parent" style="background-image: url('{{.Avatar}}');">
<a {{if $.CurrentUser.Perms.EditUser}}href="/panel/users/edit/{{.ID}}?session={{$.CurrentUser.Session}} "{{end}}class="editable_block">{{.Name}}</a> <img class="bgsub" src="{{.Avatar}}" />
<a class="rowTitle" {{if $.CurrentUser.Perms.EditUser}}href="/panel/users/edit/{{.ID}}?session={{$.CurrentUser.Session}}" {{end}}class="editable_block">{{.Name}}</a>
<a href="/user/{{.ID}}" class="tag-mini">Profile</a> <a href="/user/{{.ID}}" class="tag-mini">Profile</a>
{{if (.Tag) and (.IsSuperMod)}}<span style="float: right;"><span class="panel_tag" style="margin-left 4px;">{{.Tag}}</span></span>{{end}} {{if (.Tag) and (.IsSuperMod)}}<span style="float: right;"><span class="panel_tag" style="margin-left 4px;">{{.Tag}}</span></span>{{end}}

View File

@ -10,12 +10,12 @@
{{range .Something}} {{range .Something}}
<div class="rowitem panel_compactrow editable_parent"> <div class="rowitem panel_compactrow editable_parent">
<a data-field="find" data-type="text" href="/panel/settings/word-filters/edit/{{.ID}}" class="editable_block panel_upshift edit_fields">{{.Find}}</a> <a data-field="find" data-type="text" href="/panel/settings/word-filters/edit/{{.ID}}" class="editable_block panel_upshift edit_fields">{{.Find}}</a>
<span style="padding-left: 2px;padding-right: 2px;"> || </span> <span class="itemSeparator"></span>
<a data-field="replacement" data-type="text" class="editable_block panel_compacttext">{{.Replacement}}</a> <a data-field="replacement" data-type="text" class="editable_block panel_compacttext">{{.Replacement}}</a>
<span class="panel_buttons"> <span class="panel_buttons">
<a class="panel_tag edit_fields hide_on_edit panel_right_button">Edit</a> <a class="panel_tag edit_fields hide_on_edit panel_right_button edit_button" aria-label="Edit Word Filter"></a>
<a class="panel_right_button" href="/panel/settings/word-filters/edit/submit/{{.ID}}"><button class='panel_tag submit_edit show_on_edit' type='submit'>Update</button></a> <a class="panel_right_button" href="/panel/settings/word-filters/edit/submit/{{.ID}}"><button class='panel_tag submit_edit show_on_edit' type='submit'>Update</button></a>
<a href="/panel/settings/word-filters/delete/submit/{{.ID}}?session={{$.CurrentUser.Session}}" class="panel_tag panel_right_button hide_on_edit">Delete</a> <a href="/panel/settings/word-filters/delete/submit/{{.ID}}?session={{$.CurrentUser.Session}}" class="panel_tag panel_right_button hide_on_edit delete_button" aria-label="Delete Word Filter"></a>
</span> </span>
</div> </div>
{{else}} {{else}}

View File

@ -3,9 +3,6 @@
<div id="profile_container" class="colstack"> <div id="profile_container" class="colstack">
<div id="profile_left_lane" class="colstack_left"> <div id="profile_left_lane" class="colstack_left">
<!--<header class="colstack_item colstack_head rowhead">
<div class="rowitem"><h1>Profile</h1></div>
</header>-->
<div id="profile_left_pane" class="rowmenu"> <div id="profile_left_pane" class="rowmenu">
<div class="topBlock"> <div class="topBlock">
<div class="rowitem avatarRow"> <div class="rowitem avatarRow">
@ -73,7 +70,8 @@
<div class="rowitem"><h1>Comments</h1></div> <div class="rowitem"><h1>Comments</h1></div>
</div> </div>
<div id="profile_comments" class="colstack_item hash_hide">{{range .ItemList}} <div id="profile_comments" class="colstack_item hash_hide">{{range .ItemList}}
<div class="rowitem passive deletable_block editable_parent simple {{.ClassName}}" style="{{if .Avatar}}background-image: url({{.Avatar}}), url(/static/post-avatar-bg.jpg);background-position: 0px {{if le .ContentLines 5}}-1{{end}}0px;{{end}}"> <div class="rowitem passive deletable_block editable_parent simple {{.ClassName}}" style="background-image: url({{.Avatar}}), url(/static/post-avatar-bg.jpg);background-position: 0px {{if le .ContentLines 5}}-1{{end}}0px;">
<img class="bgsub" src="{{.Avatar}}" />
<span class="editable_block user_content simple">{{.ContentHtml}}</span> <span class="editable_block user_content simple">{{.ContentHtml}}</span>
<span class="controls"> <span class="controls">
<a href="{{.UserLink}}" class="real_username username">{{.CreatedByName}}</a>&nbsp;&nbsp; <a href="{{.UserLink}}" class="real_username username">{{.CreatedByName}}</a>&nbsp;&nbsp;

View File

@ -23,7 +23,7 @@
</div> </div>
<article itemscope itemtype="http://schema.org/CreativeWork" class="rowblock post_container top_post" aria-label="The opening post for this topic"> <article itemscope itemtype="http://schema.org/CreativeWork" class="rowblock post_container top_post" aria-label="The opening post for this topic">
<div class="rowitem passive editable_parent post_item {{.Topic.ClassName}}" style="{{if .Topic.Avatar}}background-image: url({{.Topic.Avatar}}), url(/static/{{.Header.Theme.Name}}/post-avatar-bg.jpg);background-position: 0px {{if le .Topic.ContentLines 5}}-1{{end}}0px;background-repeat:no-repeat, repeat-y;{{end}}"> <div class="rowitem passive editable_parent post_item {{.Topic.ClassName}}" style="background-image: url({{.Topic.Avatar}}), url(/static/{{.Header.Theme.Name}}/post-avatar-bg.jpg);background-position: 0px {{if le .Topic.ContentLines 5}}-1{{end}}0px;background-repeat:no-repeat, repeat-y;">
<p class="hide_on_edit topic_content user_content" itemprop="text" style="margin:0;padding:0;">{{.Topic.ContentHTML}}</p> <p class="hide_on_edit topic_content user_content" itemprop="text" style="margin:0;padding:0;">{{.Topic.ContentHTML}}</p>
<textarea name="topic_content" class="show_on_edit topic_content_input">{{.Topic.Content}}</textarea> <textarea name="topic_content" class="show_on_edit topic_content_input">{{.Topic.Content}}</textarea>
@ -57,7 +57,7 @@
<span itemprop="text">{{.ActionType}}</span> <span itemprop="text">{{.ActionType}}</span>
</article> </article>
{{else}} {{else}}
<article itemscope itemtype="http://schema.org/CreativeWork" class="rowitem passive deletable_block editable_parent post_item {{.ClassName}}" style="{{if .Avatar}}background-image: url({{.Avatar}}), url(/static/{{$.Header.Theme.Name}}/post-avatar-bg.jpg);background-position: 0px {{if le .ContentLines 5}}-1{{end}}0px;background-repeat:no-repeat, repeat-y;{{end}}"> <article itemscope itemtype="http://schema.org/CreativeWork" class="rowitem passive deletable_block editable_parent post_item {{.ClassName}}" style="background-image: url({{.Avatar}}), url(/static/{{$.Header.Theme.Name}}/post-avatar-bg.jpg);background-position: 0px {{if le .ContentLines 5}}-1{{end}}0px;background-repeat:no-repeat, repeat-y;">
{{/** TODO: We might end up with <br>s in the inline editor, fix this **/}} {{/** TODO: We might end up with <br>s in the inline editor, fix this **/}}
<p class="editable_block user_content" itemprop="text" style="margin:0;padding:0;">{{.ContentHtml}}</p> <p class="editable_block user_content" itemprop="text" style="margin:0;padding:0;">{{.ContentHtml}}</p>

View File

@ -9,7 +9,7 @@
<div class="opt create_topic_opt" title="Create Topic" aria-label="Create a topic"><a class="create_topic_link" href="/topics/create/"></a></div> <div class="opt create_topic_opt" title="Create Topic" aria-label="Create a topic"><a class="create_topic_link" href="/topics/create/"></a></div>
{{/** TODO: Add a permissions check for this **/}} {{/** TODO: Add a permissions check for this **/}}
<div class="opt mod_opt" title="Moderate"> <div class="opt mod_opt" title="Moderate">
<a class="moderate_link" href="#"></a> <a class="moderate_link" href="#" aria-label="Moderate Posts"></a>
</div> </div>
{{else}}<div class="opt locked_opt" title="You don't have the permissions needed to create a topic" aria-label="You don't have the permissions needed to make a topic anywhere"><a></a></div>{{end}} {{else}}<div class="opt locked_opt" title="You don't have the permissions needed to create a topic" aria-label="You don't have the permissions needed to make a topic anywhere"><a></a></div>{{end}}
<div style="clear: both;"></div> <div style="clear: both;"></div>
@ -35,7 +35,7 @@
{{if .ForumList}} {{if .ForumList}}
<div class="rowblock topic_create_form quick_create_form" style="display: none;" aria-label="Quick Topic Form"> <div class="rowblock topic_create_form quick_create_form" style="display: none;" aria-label="Quick Topic Form">
<form name="topic_create_form_form" id="topic_create_form_form" enctype="multipart/form-data" action="/topic/create/submit/" method="post"></form> <form name="topic_create_form_form" id="topic_create_form_form" enctype="multipart/form-data" action="/topic/create/submit/" method="post"></form>
{{if .CurrentUser.Avatar}}<img class="little_row_avatar" src="{{.CurrentUser.Avatar}}" height="64" />{{end}} <img class="little_row_avatar" src="{{.CurrentUser.Avatar}}" height="64" />
<div class="main_form"> <div class="main_form">
<div class="topic_meta"> <div class="topic_meta">
<div class="formrow topic_board_row real_first_child"> <div class="formrow topic_board_row real_first_child">
@ -72,7 +72,7 @@
{{range .TopicList}}<div class="topic_row" data-tid="{{.ID}}"> {{range .TopicList}}<div class="topic_row" data-tid="{{.ID}}">
<div class="rowitem topic_left passive datarow {{if .Sticky}}topic_sticky{{else if .IsClosed}}topic_closed{{end}}"> <div class="rowitem topic_left passive datarow {{if .Sticky}}topic_sticky{{else if .IsClosed}}topic_closed{{end}}">
<span class="selector"></span> <span class="selector"></span>
{{if .Creator.Avatar}}<a href="{{.Creator.Link}}"><img src="{{.Creator.Avatar}}" height="64" /></a>{{end}} <a href="{{.Creator.Link}}"><img src="{{.Creator.Avatar}}" height="64" /></a>
<span class="topic_inner_left"> <span class="topic_inner_left">
<a class="rowtopic" href="{{.Link}}"><span>{{.Title}}</span></a> {{if .ForumName}}<a class="rowsmall parent_forum" href="{{.ForumLink}}">{{.ForumName}}</a>{{end}} <a class="rowtopic" href="{{.Link}}"><span>{{.Title}}</span></a> {{if .ForumName}}<a class="rowsmall parent_forum" href="{{.ForumLink}}">{{.ForumName}}</a>{{end}}
<br /><a class="rowsmall starter" href="{{.Creator.Link}}">{{.Creator.Name}}</a> <br /><a class="rowsmall starter" href="{{.Creator.Link}}">{{.Creator.Name}}</a>
@ -86,7 +86,7 @@
</span> </span>
</div> </div>
<div class="rowitem topic_right passive datarow {{if .Sticky}}topic_sticky{{else if .IsClosed}}topic_closed{{end}}"> <div class="rowitem topic_right passive datarow {{if .Sticky}}topic_sticky{{else if .IsClosed}}topic_closed{{end}}">
{{if .LastUser.Avatar}}<a href="{{.LastUser.Link}}"><img src="{{.LastUser.Avatar}}" height="64" /></a>{{end}} <a href="{{.LastUser.Link}}"><img src="{{.LastUser.Avatar}}" height="64" /></a>
<span> <span>
<a href="{{.LastUser.Link}}" class="lastName" style="font-size: 14px;">{{.LastUser.Name}}</a><br> <a href="{{.LastUser.Link}}" class="lastName" style="font-size: 14px;">{{.LastUser.Name}}</a><br>
<span class="rowsmall lastReplyAt">{{.RelativeLastReplyAt}}</span> <span class="rowsmall lastReplyAt">{{.RelativeLastReplyAt}}</span>

View File

@ -65,6 +65,7 @@ body, #back {
display: none; display: none;
} }
.nav { .nav {
padding-top: 16px;
border-bottom: 2px solid var(--header-border-color); border-bottom: 2px solid var(--header-border-color);
} }
@ -82,30 +83,36 @@ li {
border-right: 1px solid var(--header-border-color); border-right: 1px solid var(--header-border-color);
} }
.menu_overview { #menu_overview {
font-size: 22px; font-size: 22px;
margin-right: 12px; margin-right: 12px;
letter-spacing: 1px; letter-spacing: 1px;
} }
.menu_left.menu_overview:after { #menu_overview:after {
margin-right: 5px !important; margin-right: 5px !important;
height: 20px !important; height: 20px !important;
} }
.menu_forums a:before, .menu_topics a:before, .alert_bell:before, .menu_account a:before, .menu_profile a:before, .menu_panel a:before, .menu_logout a:before { #menu_forums a:before, .menu_topics a:before, .alert_bell:before, .menu_account a:before, .menu_profile a:before, .menu_panel a:before, .menu_logout a:before {
font: normal normal normal 14px/1 FontAwesome; font: normal normal normal 14px/1 FontAwesome;
} }
.menu_forums a:before { #menu_forums a:before {
content: "\f03a"; content: "\f03a";
margin-right: 6px; margin-right: 6px;
} }
#menu_forums a:after {
content: "Forums";
}
.menu_topics a:before { .menu_topics a:before {
margin-right: 4px; margin-right: 4px;
content: "\f27b"; content: "\f27b";
position: relative; position: relative;
top: -2px; top: -2px;
} }
.menu_topics a:after {
content: "Topics";
}
.menu_alerts { .menu_alerts {
color: var(--primary-link-color); color: var(--primary-link-color);
display: flex; display: flex;
@ -136,6 +143,9 @@ li {
content: "\f2c3"; content: "\f2c3";
margin-right: 6px; margin-right: 6px;
} }
.menu_account a:after {
content: "Account";
}
.menu_profile a:before { .menu_profile a:before {
content: "\f2c0"; content: "\f2c0";
margin-right: 5px; margin-right: 5px;
@ -143,14 +153,29 @@ li {
top: -1px; top: -1px;
font-size: 14px; font-size: 14px;
} }
.menu_profile a:after {
content: "Profile";
}
.menu_panel a:before { .menu_panel a:before {
margin-right: 6px; margin-right: 6px;
content: "\f108"; content: "\f108";
} }
.menu_panel a:after {
content: "Panel";
}
.menu_logout a:before { .menu_logout a:before {
content: "\f08b"; content: "\f08b";
margin-right: 3px; margin-right: 3px;
} }
.menu_logout a:after {
content: "Logout";
}
.menu_login a:after {
content: "Login";
}
.menu_register a:after {
content: "Register";
}
ul { ul {
display: flex; display: flex;
@ -158,6 +183,7 @@ ul {
padding: 0px; padding: 0px;
margin-left: 14px; margin-left: 14px;
margin-bottom: 12px; margin-bottom: 12px;
margin-top: 0px;
} }
.alertList { .alertList {
display: none; display: none;
@ -169,7 +195,7 @@ ul {
border-bottom: 2px solid var(--header-border-color); border-bottom: 2px solid var(--header-border-color);
margin-left: 12px; margin-left: 12px;
} }
.rowblock:not(.topic_list), .colstack_head, .topic_row .rowitem { .rowblock:not(.topic_list):not(.forum_list), .colstack_head, .topic_row .rowitem, .forum_list .rowitem {
background-color: var(--element-background-color); background-color: var(--element-background-color);
} }
.rowblock { .rowblock {
@ -495,15 +521,41 @@ select, input, textarea, button {
background-color: var(--element-background-color); background-color: var(--element-background-color);
padding: 12px; padding: 12px;
} }
/* TODO: Refactor bgavatars to make the avatars rounded */ .rowlist.bgavatars {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-columns: repeat(auto-fill, 150px);
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
grid-gap: 6px 12px;
}
.rowlist .rowitem {
display: flex;
}
.rowlist.bgavatars .rowitem { .rowlist.bgavatars .rowitem {
background-repeat: no-repeat; background-image: none !important;
background-size: 40px; flex-direction: column;
padding-left: 46px; }
.rowlist.bgavatars .bgsub {
height: 80px;
width: 80px;
border-radius: 48px;
margin-top: 4px;
margin-bottom: 8px;
}
.rowlist.bgavatars .bgsub, .rowlist.bgavatars .rowitem > a, .rowlist.bgavatars .rowitem > span {
margin-left: auto;
margin-right: auto;
}
.rowlist .rowTitle {
font-size: 20px;
margin-bottom: 3px;
}
.rowlist .panel_compactrow {
padding: 16px;
} }
.topic_list .rowtopic { .topic_list .rowtopic {
font-size: 17px; font-size: 16px;
margin-right: 1px; margin-right: 1px;
white-space: nowrap; white-space: nowrap;
display: inline-block; display: inline-block;
@ -856,6 +908,33 @@ select, input, textarea, button {
border-right: none !important; border-right: none !important;
} }
.to_right {
float: right;
margin-left: auto;
}
/* TODO: Highlight the one we're currently on? */
.pageset {
display: flex;
margin-left: 16px;
}
.pageitem {
padding: 8px;
padding-left: 10px;
padding-right: 10px;
background: var(--element-background-color);
border: 1px solid var(--element-border-color);
border-bottom: 2px solid var(--element-border-color);
border-left: none;
border-right: none;
}
.pageitem:first-child {
border-left: 1px solid var(--element-border-color);
}
.pageitem:last-child {
border-right: 1px solid var(--element-border-color);
}
/* TODO: Make widget_about's CSS less footer centric */ /* TODO: Make widget_about's CSS less footer centric */
.footer { .footer {
margin-top: 14px; margin-top: 14px;
@ -941,6 +1020,7 @@ select, input, textarea, button {
margin-right: auto; margin-right: auto;
text-align: center; text-align: center;
} }
/* TODO: Move these to panel.css */
#dash-version:before, #dash-cpu:before, #dash-ram:before { #dash-version:before, #dash-cpu:before, #dash-ram:before {
display: inline-block; display: inline-block;
background: hsl(0,0%,98%); background: hsl(0,0%,98%);
@ -967,6 +1047,44 @@ select, input, textarea, button {
} }
} }
@media(max-width: 520px) { @media(max-width: 520px) {
#menu_overview {
font-size: 18px;
background-color: hsl(0,0%,97%);
margin-top: -16px;
margin-bottom: -11px;
margin-left: -14px;
margin-right: 16px;
padding-top: 16px;
padding-left: 14px;
padding-right: 4px;
}
#menu_overview::after {
height: 16px !important;
}
.menu_left a:after {
content: "" !important;
}
.menu_left:not(:last-child):after, .menu_alerts:after {
margin-left: 4px;
border-right: none;
}
.menu_alerts {
margin-right: 16px;
}
.alert_bell {
position: relative;
bottom: -1px;
}
.alert_bell:before {
font-size: 17px;
}
.alert_aftercounter {
display: none;
}
.rowhead h1, .opthead h1, .colstack_head h1 {
font-size: 18px;
}
.topic_list { .topic_list {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
@ -990,7 +1108,7 @@ select, input, textarea, button {
.topic_right.rowitem { .topic_right.rowitem {
border-top: none; border-top: none;
border-left: 1px solid var(--element-border-color); border-left: 1px solid var(--element-border-color);
background-color: hsl(0,0%,90%); background-color: hsl(0,0%,95%);
} }
.topic_right br, .topic_right img { .topic_right br, .topic_right img {
display: none; display: none;
@ -1003,3 +1121,13 @@ select, input, textarea, button {
margin-bottom: 6px; margin-bottom: 6px;
} }
} }
@media(max-width: 450px) {
.topic_list .topic_row {
display: block;
width: 100%;
float: none;
}
.topic_list .topic_row:nth-child(odd) {
margin-right: 0px;
}
}

View File

@ -1,3 +1,86 @@
.about { .complex_rowlist {
background-color: inherit !important;
border: none !important;
}
.complex_rowlist .rowitem {
display: flex;
}
.panel_buttons, .panel_floater {
margin-left: auto;
display: flex;
}
.panel_buttons:before,
.panel_floater:before,
.edit_button:after,
.delete_button:after {
color: hsl(0,0%,65%);
}
.panel_buttons:before,
.panel_floater:before {
content: "";
border-left: 1px solid var(--element-border-color);
height: 15px;
margin-top: 2px;
margin-bottom: 0px;
margin-right: 0px;
}
.edit_button:after, .delete_button:after {
font: normal normal normal 14px/1 FontAwesome;
padding-left: 12px;
height: 20px;
}
.edit_button:after {
content: "\f040";
}
.delete_button:after {
content: "\f014";
}
#panel_users .panel_floater:before,
#panel_forums .panel_floater:before,
#forum_quick_perms .panel_floater:before,
.panel_themes .panel_floater:before,
#panel_backups .panel_floater:before {
border-left: none;
}
#panel_forums_name_box {
order: 0;
}
#panel_users .panel_tag:not(.panel_right_button) {
display: none; display: none;
} }
#panel_word_filters .itemSeparator:before {
content: "|";
padding-left: 5px;
padding-right: 5px;
color: var(--primary-link-color);
}
/* TODO: Should we be using .formrows in #forum_quick_perms? Can we normalize it? Would this break the other themes? */
.formlist:not(#forum_quick_perms),
.panel_themes .rowitem,
#panel_plugins .rowitem,
#forum_quick_perms .formitem {
padding: 12px;
margin-bottom: 8px;
background-color: var(--element-background-color);
border: 1px solid var(--element-border-color);
border-bottom: 2px solid var(--element-border-color);
}
.formlist .formrow {
padding: 0px !important;
margin: 0px;
}
.formlist .formitem {
padding: 8px;
}
#forum_quick_perms .panel_floater,
.panel_theme_mobile, .panel_theme_tag {
display: none;
}
#panel_plugins .rowitem {
display: block;
}

View File

@ -58,17 +58,42 @@ li {
float: right; float: right;
} }
.menu_overview { #menu_overview {
margin-right: 13px; margin-right: 13px;
margin-left: 10px; margin-left: 10px;
font-size: 16px; font-size: 16px;
} }
.menu_left:not(.menu_overview) { .menu_left:not(#menu_overview) {
font-size: 15px; font-size: 15px;
padding-top: 13px; padding-top: 13px;
} }
#menu_forums a:after {
content: "Forums";
}
.menu_topics a:after {
content: "Topics";
}
.menu_account a:after {
content: "Account";
}
.menu_profile a:after {
content: "Profile";
}
.menu_panel a:after {
content: "Panel";
}
.menu_logout a:after {
content: "Logout";
}
.menu_login a:after {
content: "Login";
}
.menu_register a:after {
content: "Register";
}
.alert_bell { .alert_bell {
float: right; float: right;
} }
@ -194,8 +219,9 @@ a {
padding: 10px; padding: 10px;
} }
/* Algin to right in a flex head */ /* Align to right in a flex head */
.to_right { .to_right {
float: right;
margin-left: auto; margin-left: auto;
} }
@ -472,6 +498,9 @@ input, select, textarea {
margin-top: 5px; margin-top: 5px;
} }
.little_row_avatar {
display: none;
}
.topic_create_form .topic_board_row .formitem, .topic_create_form .topic_name_row .formitem { .topic_create_form .topic_board_row .formitem, .topic_create_form .topic_name_row .formitem {
padding-bottom: 5px; padding-bottom: 5px;
} }
@ -773,7 +802,7 @@ input, select, textarea {
height: 26px; height: 26px;
} }
.menu_overview { #menu_overview {
margin-right: 9px; margin-right: 9px;
margin-left: 0px; margin-left: 0px;
font-size: 15px; font-size: 15px;
@ -783,7 +812,7 @@ input, select, textarea {
.menu_left { .menu_left {
margin-right: 7px; margin-right: 7px;
} }
.menu_left:not(.menu_overview) { .menu_left:not(#menu_overview) {
font-size: 13px; font-size: 13px;
padding-top: 10px; padding-top: 10px;
} }
@ -847,10 +876,10 @@ input, select, textarea {
ul { ul {
height: 40px; height: 40px;
} }
.menu_overview { #menu_overview {
font-size: 16px; font-size: 16px;
} }
.menu_left:not(.menu_overview) { .menu_left:not(#menu_overview) {
font-size: 14px; font-size: 14px;
padding-top: 13px; padding-top: 13px;
} }
@ -881,14 +910,11 @@ input, select, textarea {
} }
@media(max-width: 500px) { @media(max-width: 500px) {
.topic_list .topic_inner_right {
display: block;
}
.topic_list .rowitem { .topic_list .rowitem {
float: none; float: none;
} }
.topic_list .topic_left { .topic_list .topic_left {
width: calc(100% - 84px); width: 100%;
} }
.topic_list .topic_right { .topic_list .topic_right {
display: none; display: none;

View File

@ -1,13 +1,31 @@
.bgsub {
display: none;
}
.rowlist .tag-mini { .rowlist .tag-mini {
font-size: 10px; font-size: 10px;
margin-left: 2px; margin-left: 2px;
} }
.panel_floater {
margin-left: auto;
}
.panel_right_button { .panel_right_button {
float: right; float: right;
margin-left: 5px; margin-left: 5px;
} }
.edit_button:before {
content: "Edit";
}
.delete_button:after {
content: "Delete";
}
#panel_forums .rowitem {
display: flex;
}
#panel_users .ban_button { #panel_users .ban_button {
font-size: 10px; font-size: 10px;
float: none; float: none;
@ -29,3 +47,9 @@
.builtin_forum_divider { .builtin_forum_divider {
margin-bottom: 5px; margin-bottom: 5px;
} }
#panel_word_filters .itemSeparator:before {
content: " || ";
padding-left: 2px;
padding-right: 2px;
}

View File

@ -19,9 +19,7 @@ body {
} }
/* Patch for Edge, until they fix emojis in arial x.x */ /* Patch for Edge, until they fix emojis in arial x.x */
@supports (-ms-ime-align:auto) { @supports (-ms-ime-align:auto) { .user_content { font-family: Segoe UI Emoji, arial; } }
.user_content { font-family: Segoe UI Emoji, arial; }
}
ul { ul {
padding-left: 0px; padding-left: 0px;
@ -47,7 +45,6 @@ li:hover {
} }
li a { li a {
text-decoration: none; text-decoration: none;
/*color: #515151;*/
color: black; color: black;
font-size: 17px; font-size: 17px;
} }
@ -64,6 +61,31 @@ li a {
padding-right: 10px; padding-right: 10px;
} }
#menu_forums a:after {
content: "Forums";
}
.menu_topics a:after {
content: "Topics";
}
.menu_account a:after {
content: "Account";
}
.menu_profile a:after {
content: "Profile";
}
.menu_panel a:after {
content: "Panel";
}
.menu_logout a:after {
content: "Logout";
}
.menu_login a:after {
content: "Login";
}
.menu_register a:after {
content: "Register";
}
.alert_bell:before { .alert_bell:before {
content: '🔔︎'; content: '🔔︎';
} }
@ -71,7 +93,6 @@ li a {
cursor: default; cursor: default;
} }
.menu_alerts { .menu_alerts {
/*padding-left: 7px;*/
font-size: 20px; font-size: 20px;
padding-top: 2px; padding-top: 2px;
color: rgb(80,80,80); color: rgb(80,80,80);
@ -457,6 +478,13 @@ li a {
padding: 10px; padding: 10px;
} }
.to_right {
margin-left: auto;
float: right;
}
.little_row_avatar {
display: none;
}
.topic_create_form .topic_button_row .formitem { .topic_create_form .topic_button_row .formitem {
display: flex; display: flex;
} }
@ -573,10 +601,6 @@ button.username {
top: -0.25px; top: -0.25px;
} }
/* We'll be rewriting the profiles soon too! */
/*.username.real_username { color: #404040; font-size: 16px; padding-right: 4px; }
.username.real_username:hover { color: black; }*/
.postQuote { .postQuote {
border: rgb(200,200,210); border: rgb(200,200,210);
background: rgb(245,245,255); background: rgb(245,245,255);
@ -882,6 +906,10 @@ button.username {
#poweredBy span { #poweredBy span {
font-size: 12px; font-size: 12px;
} }
#poweredByName {
color: black;
text-decoration: none;
}
.pageset { .pageset {
display: flex; display: flex;

View File

@ -91,6 +91,18 @@
.grid_istat { margin-bottom: 0px; } .grid_istat { margin-bottom: 0px; }
} }
@media(max-width: 550px) {
#poweredByDash, #poweredByMaker {
display: none;
}
}
@media (max-width: 500px) {
.topic_list .topic_row {
grid-template-columns: calc(100% - 194px) 194px;
}
}
@media (max-width: 470px) { @media (max-width: 470px) {
.container { .container {
border: none; border: none;
@ -182,6 +194,15 @@
.container { width: 100% !important; } .container { width: 100% !important; }
} }
@media(max-width: 390px) {
.topic_list .topic_row {
display: block;
}
.topic_row .topic_right {
display: none;
}
}
@media (max-width: 330px) { @media (max-width: 330px) {
li { padding-left: 6px; } li { padding-left: 6px; }
.menu_left { padding-right: 6px; } .menu_left { padding-right: 6px; }

View File

@ -1,6 +1,19 @@
/* Control Panel */ /* Control Panel */
.panel_upshift:visited { color: black; } .bgsub {
display: none;
}
.edit_button:before {
content: "Edit";
}
.delete_button:after {
content: "Delete";
}
.panel_upshift:visited {
color: black;
}
.panel_tag { .panel_tag {
padding-left: 0px; padding-left: 0px;
@ -10,7 +23,6 @@
color: #202020; color: #202020;
font-size: 14px; font-size: 14px;
} }
.tag-mini { .tag-mini {
margin-left: 0px; margin-left: 0px;
padding-left: 0px; padding-left: 0px;
@ -22,7 +34,8 @@
font-size: 13px; font-size: 13px;
} }
.panel_floater { .panel_floater, .panel_buttons {
margin-left: auto;
float: right; float: right;
} }
#panel_groups > .rowitem > .panel_floater { #panel_groups > .rowitem > .panel_floater {
@ -31,11 +44,11 @@
#panel_groups > .rowitem > .panel_floater > .panel_right_button { #panel_groups > .rowitem > .panel_floater > .panel_right_button {
float: right; float: right;
} }
#panel_forums > .rowitem > .panel_floater { #panel_forums .rowitem {
float: none; display: flex;
} }
#panel_forums > .rowitem > .panel_floater > .panel_buttons { #panel_forums > .rowitem > .panel_floater {
float: right; margin-left: 0px;
} }
#panel_forums > .rowitem > span > .forum_name { #panel_forums > .rowitem > span > .forum_name {
margin-right: 4px; margin-right: 4px;
@ -82,6 +95,12 @@
.theme_row > .panel_floater > .panel_right_button { margin-left: 5px; } .theme_row > .panel_floater > .panel_right_button { margin-left: 5px; }
#panel_word_filters .itemSeparator:before {
content: " || ";
padding-left: 2px;
padding-right: 2px;
}
@media(max-width: 1300px) { @media(max-width: 1300px) {
.theme_row { background-image: none !important; } .theme_row { background-image: none !important; }
} }

View File

@ -10,9 +10,7 @@ body {
} }
/* Patch for Edge, until they fix emojis in arial x.x */ /* Patch for Edge, until they fix emojis in arial x.x */
@supports (-ms-ime-align:auto) { @supports (-ms-ime-align:auto) { .user_content { font-family: Segoe UI Emoji, arial; } }
.user_content { font-family: Segoe UI Emoji, arial; }
}
ul { ul {
padding-left: 0px; padding-left: 0px;
@ -32,7 +30,6 @@ li {
li:hover { background: rgb(250,250,250); } li:hover { background: rgb(250,250,250); }
li a { li a {
text-decoration: none; text-decoration: none;
/*color: #515151;*/
color: black; color: black;
font-size: 17px; font-size: 17px;
} }
@ -49,6 +46,31 @@ li a {
padding-right: 10px; padding-right: 10px;
} }
#menu_forums a:after {
content: "Forums";
}
.menu_topics a:after {
content: "Topics";
}
.menu_account a:after {
content: "Account";
}
.menu_profile a:after {
content: "Profile";
}
.menu_panel a:after {
content: "Panel";
}
.menu_logout a:after {
content: "Logout";
}
.menu_login a:after {
content: "Login";
}
.menu_register a:after {
content: "Register";
}
.alert_bell:before { .alert_bell:before {
content: '🔔︎'; content: '🔔︎';
} }
@ -56,7 +78,6 @@ li a {
cursor: default; cursor: default;
} }
.menu_alerts { .menu_alerts {
/*padding-left: 7px;*/
font-size: 20px; font-size: 20px;
padding-top: 2px; padding-top: 2px;
color: rgb(80,80,80); color: rgb(80,80,80);
@ -649,7 +670,7 @@ button.username {
} }
@media (max-width: 470px) { @media (max-width: 470px) {
.menu_overview, .menu_profile, .hide_on_micro { display: none; } #menu_overview, .menu_profile, .hide_on_micro { display: none; }
.selectedAlert .alertList { .selectedAlert .alertList {
width: 135px; width: 135px;
margin-bottom: 5px; margin-bottom: 5px;

View File

@ -1,5 +1,12 @@
/* Control Panel */ /* Control Panel */
.edit_button:before {
content: "Edit";
}
.delete_button:after {
content: "Delete";
}
.tag-mini { .tag-mini {
margin-left: 0px; margin-left: 0px;
padding-left: 0px; padding-left: 0px;
@ -36,6 +43,12 @@
font-size: 14px; font-size: 14px;
} }
#panel_word_filters .itemSeparator:before {
content: " || ";
padding-left: 2px;
padding-right: 2px;
}
.panel_rank_tag, .forum_preset, .forum_active { .panel_rank_tag, .forum_preset, .forum_active {
float: none; float: none;
color: #202020; color: #202020;

View File

@ -32,7 +32,6 @@ li {
li:hover { background: rgb(252,252,252); } li:hover { background: rgb(252,252,252); }
li a { li a {
text-decoration: none; text-decoration: none;
/*color: #515151;*/
color: black; color: black;
font-size: 17px; font-size: 17px;
} }
@ -46,14 +45,39 @@ li a {
border-left: 1px solid hsl(0, 0%, 80%); border-left: 1px solid hsl(0, 0%, 80%);
padding-right: 10px; padding-right: 10px;
} }
.menu_overview { #menu_overview {
background: none; background: none;
padding-right: 13px; padding-right: 13px;
} }
.menu_overview a { #menu_overview a {
padding-left: 3px; padding-left: 3px;
} }
#menu_forums a:after {
content: "Forums";
}
.menu_topics a:after {
content: "Topics";
}
.menu_account a:after {
content: "Account";
}
.menu_profile a:after {
content: "Profile";
}
.menu_panel a:after {
content: "Panel";
}
.menu_logout a:after {
content: "Logout";
}
.menu_login a:after {
content: "Login";
}
.menu_register a:after {
content: "Register";
}
.alert_bell:before { .alert_bell:before {
content: '🔔︎'; content: '🔔︎';
} }
@ -196,7 +220,6 @@ li a {
.colstack_grid { .colstack_grid {
display: grid; display: grid;
grid-template-columns: repeat(3, 1fr); grid-template-columns: repeat(3, 1fr);
/*grid-gap: 15px;*/
grid-gap: 12px; grid-gap: 12px;
margin-left: 5px; margin-left: 5px;
margin-top: 2px; margin-top: 2px;
@ -209,10 +232,7 @@ li a {
overflow: hidden; overflow: hidden;
} }
.grid_stat, .grid_istat { .grid_stat, .grid_istat {
/*padding-top: 15px;*/
text-align: center; text-align: center;
/*padding-bottom: 15px;
font-size: 20px;*/
padding-top: 12px; padding-top: 12px;
padding-bottom: 12px; padding-bottom: 12px;
font-size: 16px; font-size: 16px;
@ -252,10 +272,6 @@ li a {
.rowitem { .rowitem {
width: 100%; width: 100%;
/*padding-left: 8px;
padding-right: 8px;
padding-top: 17px;
padding-bottom: 12px;*/
padding-left: 10px; padding-left: 10px;
padding-top: 14px; padding-top: 14px;
padding-bottom: 12px; padding-bottom: 12px;
@ -309,6 +325,11 @@ li a {
content: '🔒︎'; content: '🔒︎';
} }
.to_right {
margin-left: auto;
float: right;
}
.rowlist { .rowlist {
font-size: 15px; font-size: 15px;
} }
@ -339,7 +360,6 @@ li a {
float: left; float: left;
padding: 10px; padding: 10px;
min-width: 20%; min-width: 20%;
/*font-size: 17px;*/
font-weight: normal; font-weight: normal;
} }
.formitem:not(:last-child) { .formitem:not(:last-child) {
@ -361,12 +381,11 @@ li a {
float: none; float: none;
} }
.formitem:not(:only-child) input, .formitem:not(:only-child) select { .formitem:not(:only-child) input, .formitem:not(:only-child) select {
padding: 3px;/*5px;*/ padding: 3px;
} }
.formitem:not(:only-child).formlabel { .formitem:not(:only-child).formlabel {
padding-top: 15px;/*18px;*/ padding-top: 15px;
padding-bottom: 12px;/*16px;*/ padding-bottom: 12px;
/*padding-left: 15px;*/
} }
.formbutton, button { .formbutton, button {
@ -450,6 +469,9 @@ li a {
padding: 10px; padding: 10px;
} }
.little_row_avatar {
display: none;
}
.topic_create_form .topic_button_row .formitem { .topic_create_form .topic_button_row .formitem {
display: flex; display: flex;
} }
@ -631,7 +653,6 @@ button.username {
display: inline-block; display: inline-block;
width: 100%; width: 100%;
} }
.action_item { .action_item {
padding: 14px; padding: 14px;
text-align: center; text-align: center;
@ -647,7 +668,6 @@ button.username {
width: 100%; width: 100%;
margin-bottom: 8px; margin-bottom: 8px;
} }
.level { .level {
float: right; float: right;
color: #505050; color: #505050;
@ -656,7 +676,6 @@ button.username {
padding-right: 5px; padding-right: 5px;
font-size: 17px; font-size: 17px;
} }
.mention { .mention {
font-weight: bold; font-weight: bold;
} }
@ -738,6 +757,10 @@ button.username {
#poweredBy span { #poweredBy span {
font-size: 12px; font-size: 12px;
} }
#poweredByName {
color: black;
text-decoration: none;
}
#profile_comments .rowitem { #profile_comments .rowitem {
background-repeat: no-repeat, repeat-y; background-repeat: no-repeat, repeat-y;

View File

@ -67,6 +67,18 @@
.grid_istat { margin-bottom: 0px; } .grid_istat { margin-bottom: 0px; }
} }
@media(max-width: 550px) {
#poweredByDash, #poweredByMaker {
display: none;
}
}
@media (max-width: 500px) {
.topic_list .topic_row {
grid-template-columns: calc(100% - 194px) 194px;
}
}
@media (max-width: 470px) { @media (max-width: 470px) {
.menu_overview, .menu_profile { display: none; } .menu_overview, .menu_profile { display: none; }
.selectedAlert .alertList { .selectedAlert .alertList {
@ -145,6 +157,15 @@
.container { width: 100% !important; } .container { width: 100% !important; }
} }
@media(max-width: 390px) {
.topic_list .topic_row {
display: block;
}
.topic_row .topic_right {
display: none;
}
}
@media (max-width: 330px) { @media (max-width: 330px) {
li { padding-left: 6px; } li { padding-left: 6px; }
.menu_left { padding-right: 6px; } .menu_left { padding-right: 6px; }

View File

@ -1,5 +1,16 @@
/* Control Panel */ /* Control Panel */
.bgsub {
display: none;
}
.edit_button:before {
content: "Edit";
}
.delete_button:after {
content: "Delete";
}
.tag-mini { .tag-mini {
text-transform: none; text-transform: none;
margin-left: 0px; margin-left: 0px;
@ -15,7 +26,7 @@
font-size: 10px; font-size: 10px;
} }
.panel_compactrow .panel_tag { .panel_compactrow .panel_tag, .panel_compacttext {
font-size: 14px; font-size: 14px;
} }
.panel_compactrow { .panel_compactrow {
@ -24,9 +35,6 @@
padding-bottom: 10px; padding-bottom: 10px;
padding-right: 10px; padding-right: 10px;
} }
.panel_compacttext {
font-size: 14px;
}
.panel_upshift { .panel_upshift {
font-size: 18px; font-size: 18px;
@ -40,47 +48,33 @@
.panel_upshift:visited { .panel_upshift:visited {
color: black; color: black;
} }
/*.panel_tag_upshift {
margin-left: 2px;
position: relative;
top:-3px;
color: #505050;
}*/
.panel_floater { .panel_floater, .panel_buttons {
margin-left: auto;
float: right; float: right;
} }
.panel_rank_tag_admin:before { #panel_forums .rowitem {
content: "👑"; display: flex;
} }
.panel_rank_tag_mod:before { #panel_forums .panel_floater {
content: "👮"; margin-left: auto;
margin-top: -2px;
} }
.panel_rank_tag_banned:before { #panel_forums .panel_buttons {
content: "⛓️"; margin-left: 3px;
}
.panel_rank_tag_guest:before {
content: "👽";
}
.panel_rank_tag_member:before {
content: "👪";
} }
.forum_preset_announce:before { .panel_rank_tag_admin:before { content: "👑"; }
content: "📣"; .panel_rank_tag_mod:before { content: "👮"; }
} .panel_rank_tag_banned:before { content: "⛓️"; }
.forum_preset_members:before { .panel_rank_tag_guest:before { content: "👽"; }
content: "👪"; .panel_rank_tag_member:before { content: "👪"; }
}
.forum_preset_staff:before { .forum_preset_announce:before { content: "📣"; }
content: "👮"; .forum_preset_members:before { content: "👪"; }
} .forum_preset_staff:before { content: "👮"; }
.forum_preset_admins:before { .forum_preset_admins:before { content: "👑"; }
content: "👑"; .forum_preset_archive:before { content: "☠️"; }
}
.forum_preset_archive:before {
content: "☠️";
}
.forum_preset_all, .forum_preset_custom, .forum_preset_ { .forum_preset_all, .forum_preset_custom, .forum_preset_ {
display: none !important; display: none !important;
} }
@ -101,13 +95,14 @@
content: "No Access"; content: "No Access";
color: maroon; color: maroon;
} }
.perm_preset_read_only:before, .perm_preset_can_post:before {
color: green;
}
.perm_preset_read_only:before { .perm_preset_read_only:before {
content: "Read Only"; content: "Read Only";
color: green;
} }
.perm_preset_can_post:before { .perm_preset_can_post:before {
content: "Can Post"; content: "Can Post";
color: green;
} }
.perm_preset_can_moderate:before { .perm_preset_can_moderate:before {
content: "Can Moderate"; content: "Can Moderate";
@ -129,3 +124,9 @@
.footer { .footer {
display: none; display: none;
} }
#panel_word_filters .itemSeparator:before {
content: " || ";
padding-left: 2px;
padding-right: 2px;
}