Added pagination for forums.
You can now use the left and right keyboard keys to go to the next and previous page. Making the shell files a little friendlier. Needs testing. The main executable will always be named gosora.exe or the Linux equivalent ./Gosora Reports is now a physical forum and not a "virtual" one. Added create_forum() and delete_forum() for creating and deleting forums. Synced the installer's config.go with the main one. Forums are now stored in slices rather than maps for improved performance and concurrency. You can now set a forum as hidden when initially creating it. BBCode tag names may only be seven characters long now. This is part of a new anti-overflow measure that's much faster and simpler than the previous one. Updated the last block of code in routes.go which uses the antiquated "success = 0" error detection method. Fixed a visual bug in the Control Panel CSS. Seperated the system forums from the normal ones in the Forum Manager. You can now see if a forum is marked as Hidden in the Forum Manager. Fixed the position of the lock status indicator. IP Addresses now have a simple title attribute explaining that this long incomprehensible string is in fact an IP Address. Textareas look a little better now. Next / Previous buttons are now visible on mobile. .bat files always say what they're doing now.
This commit is contained in:
parent
16bc3a82e2
commit
5e3b61d910
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
A super fast forum software written in Go.
|
A super fast forum software written in Go.
|
||||||
|
|
||||||
The initial code-base was forked from one of my side projects, but has now gone far beyond that.
|
The initial code-base was forked from one of my side projects, but has now gone far beyond that. We're still fairly early in development, so the code-base might change at an incredible rate. We plan to start stabilising it somewhat once we enter alpha.
|
||||||
|
|
||||||
Azareal's Discord Chat: https://discord.gg/eyYvtTf
|
Azareal's Discord Chat: https://discord.gg/eyYvtTf
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ We're looking for ways to clean-up the plugin system so that all of them (except
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
|
||||||
Go 1.7
|
* Go 1.7
|
||||||
|
|
||||||
* MariaDB
|
* MariaDB
|
||||||
|
|
||||||
|
@ -120,6 +120,6 @@ There are several plugins which are bundled with the software by default. These
|
||||||
|
|
||||||
* Hello World / Skeleton - Example plugins for helping you learn how to develop plugins.
|
* Hello World / Skeleton - Example plugins for helping you learn how to develop plugins.
|
||||||
|
|
||||||
* BBCode - A plugin in early development for converting BBCode Tags into HTML. Don't use this in production yet.
|
* BBCode - A plugin in early development for converting BBCode Tags into HTML.
|
||||||
|
|
||||||
* Markdown - An extremely simple plugin for converting Markdown into HTML.
|
* Markdown - An extremely simple plugin for converting Markdown into HTML.
|
||||||
|
|
2
TODO.md
2
TODO.md
|
@ -37,4 +37,4 @@ Add support for multi-factor authentication.
|
||||||
|
|
||||||
Add support for secondary emails for users.
|
Add support for secondary emails for users.
|
||||||
|
|
||||||
Improve the shell scripts and possibly add support for Make?
|
Improve the shell scripts and possibly add support for Make? A make.go might be a good solution?
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
go build
|
echo "Building Gosora"
|
||||||
|
go build -o Gosora
|
||||||
|
echo "Building the installer"
|
||||||
go build ./install
|
go build ./install
|
|
@ -7,7 +7,7 @@ if %errorlevel% neq 0 (
|
||||||
)
|
)
|
||||||
|
|
||||||
echo Building the executable
|
echo Building the executable
|
||||||
go build
|
go build -o gosora.exe
|
||||||
if %errorlevel% neq 0 (
|
if %errorlevel% neq 0 (
|
||||||
pause
|
pause
|
||||||
exit /b %errorlevel%
|
exit /b %errorlevel%
|
||||||
|
|
|
@ -30,6 +30,7 @@ var enable_ssl = false
|
||||||
var ssl_privkey = ""
|
var ssl_privkey = ""
|
||||||
var ssl_fullchain = ""
|
var ssl_fullchain = ""
|
||||||
|
|
||||||
// Developer flag
|
// Developer flags
|
||||||
var debug = false
|
var debug = false
|
||||||
var profiling = false
|
var profiling = false
|
||||||
|
|
||||||
|
|
2
data.sql
2
data.sql
|
@ -47,6 +47,7 @@ CREATE TABLE `forums`(
|
||||||
`fid` int not null AUTO_INCREMENT,
|
`fid` int not null AUTO_INCREMENT,
|
||||||
`name` varchar(100) not null,
|
`name` varchar(100) not null,
|
||||||
`active` tinyint DEFAULT 1 not null,
|
`active` tinyint DEFAULT 1 not null,
|
||||||
|
`topicCount` int DEFAULT 0 not null,
|
||||||
`lastTopic` varchar(100) DEFAULT '' not null,
|
`lastTopic` varchar(100) DEFAULT '' not null,
|
||||||
`lastTopicID` int DEFAULT 0 not null,
|
`lastTopicID` int DEFAULT 0 not null,
|
||||||
`lastReplyer` varchar(100) DEFAULT '' not null,
|
`lastReplyer` varchar(100) DEFAULT '' not null,
|
||||||
|
@ -169,6 +170,7 @@ INSERT INTO users_groups(`name`,`permissions`) VALUES ('Member','{"BanUsers":fal
|
||||||
INSERT INTO users_groups(`name`,`permissions`,`is_banned`) VALUES ('Banned','{"BanUsers":false,"ActivateUsers":false,"EditUser":false,"EditUserEmail":false,"EditUserPassword":false,"EditUserGroup":false,"EditUserGroupSuperMod":false,"EditUserGroupAdmin":false,"ManageForums":false,"EditSettings":false,"ManageThemes":false,"ManagePlugins":false,"ViewIPs":false,"ViewTopic":true,"CreateTopic":false,"EditTopic":false,"DeleteTopic":false,"CreateReply":false,"EditReply":false,"DeleteReply":false,"PinTopic":false,"CloseTopic":false}',1);
|
INSERT INTO users_groups(`name`,`permissions`,`is_banned`) VALUES ('Banned','{"BanUsers":false,"ActivateUsers":false,"EditUser":false,"EditUserEmail":false,"EditUserPassword":false,"EditUserGroup":false,"EditUserGroupSuperMod":false,"EditUserGroupAdmin":false,"ManageForums":false,"EditSettings":false,"ManageThemes":false,"ManagePlugins":false,"ViewIPs":false,"ViewTopic":true,"CreateTopic":false,"EditTopic":false,"DeleteTopic":false,"CreateReply":false,"EditReply":false,"DeleteReply":false,"PinTopic":false,"CloseTopic":false}',1);
|
||||||
INSERT INTO users_groups(`name`,`permissions`) VALUES ('Awaiting Activation','{"BanUsers":false,"ActivateUsers":false,"EditUser":false,"EditUserEmail":false,"EditUserPassword":false,"EditUserGroup":false,"EditUserGroupSuperMod":false,"EditUserGroupAdmin":false,"ManageForums":false,"EditSettings":false,"ManageThemes":false,"ManagePlugins":false,"ViewIPs":false,"ViewTopic":true,"CreateTopic":false,"EditTopic":false,"DeleteTopic":false,"CreateReply":false,"EditReply":false,"DeleteReply":false,"PinTopic":false,"CloseTopic":false}');
|
INSERT INTO users_groups(`name`,`permissions`) VALUES ('Awaiting Activation','{"BanUsers":false,"ActivateUsers":false,"EditUser":false,"EditUserEmail":false,"EditUserPassword":false,"EditUserGroup":false,"EditUserGroupSuperMod":false,"EditUserGroupAdmin":false,"ManageForums":false,"EditSettings":false,"ManageThemes":false,"ManagePlugins":false,"ViewIPs":false,"ViewTopic":true,"CreateTopic":false,"EditTopic":false,"DeleteTopic":false,"CreateReply":false,"EditReply":false,"DeleteReply":false,"PinTopic":false,"CloseTopic":false}');
|
||||||
|
|
||||||
|
INSERT INTO forums(`name`,`active`) VALUES ('Reports',0);
|
||||||
INSERT INTO forums(`name`,`lastTopicTime`) VALUES ('General',NOW());
|
INSERT INTO forums(`name`,`lastTopicTime`) VALUES ('General',NOW());
|
||||||
INSERT INTO topics(`title`,`content`,`createdAt`,`lastReplyAt`,`createdBy`,`parentID`)
|
INSERT INTO topics(`title`,`content`,`createdAt`,`lastReplyAt`,`createdBy`,`parentID`)
|
||||||
VALUES ('Test Topic','A topic automatically generated by the software.',NOW(),NOW(),1,1);
|
VALUES ('Test Topic','A topic automatically generated by the software.',NOW(),NOW(),1,1);
|
||||||
|
|
42
forum.go
42
forum.go
|
@ -1,10 +1,13 @@
|
||||||
package main
|
package main
|
||||||
|
import "database/sql"
|
||||||
|
import _ "github.com/go-sql-driver/mysql"
|
||||||
|
|
||||||
type Forum struct
|
type Forum struct
|
||||||
{
|
{
|
||||||
ID int
|
ID int
|
||||||
Name string
|
Name string
|
||||||
Active bool
|
Active bool
|
||||||
|
TopicCount int
|
||||||
LastTopic string
|
LastTopic string
|
||||||
LastTopicID int
|
LastTopicID int
|
||||||
LastReplyer string
|
LastReplyer string
|
||||||
|
@ -18,3 +21,42 @@ type ForumSimple struct
|
||||||
Name string
|
Name string
|
||||||
Active bool
|
Active bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func create_forum(forum_name string, active bool) (int, error) {
|
||||||
|
var fid int
|
||||||
|
err := forum_entry_exists_stmt.QueryRow().Scan(&fid)
|
||||||
|
if err != nil && err != sql.ErrNoRows {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
if err != sql.ErrNoRows {
|
||||||
|
_, err = update_forum_stmt.Exec(forum_name, active, fid)
|
||||||
|
if err != nil {
|
||||||
|
return fid, err
|
||||||
|
}
|
||||||
|
forums[fid].Name = forum_name
|
||||||
|
forums[fid].Active = active
|
||||||
|
return fid, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := create_forum_stmt.Exec(forum_name, active)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
fid64, err := res.LastInsertId()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
forums = append(forums, Forum{int(fid64),forum_name,active,0,"",0,"",0,""})
|
||||||
|
return fid, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func delete_forum(fid int) error {
|
||||||
|
_, err := delete_forum_stmt.Exec(fid)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
forums[fid].Name = ""
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
|
@ -1,5 +1,10 @@
|
||||||
|
echo "Installing the MySQL Driver"
|
||||||
go get -u github.com/go-sql-driver/mysql
|
go get -u github.com/go-sql-driver/mysql
|
||||||
|
echo "Installing bcrypt"
|
||||||
go get -u golang.org/x/crypto/bcrypt
|
go get -u golang.org/x/crypto/bcrypt
|
||||||
go build
|
|
||||||
|
echo "Preparing the installer"
|
||||||
|
go generate
|
||||||
|
go build -o Gosora
|
||||||
go build ./install
|
go build ./install
|
||||||
./Install
|
./Install
|
|
@ -12,6 +12,11 @@ if %errorlevel% neq 0 (
|
||||||
)
|
)
|
||||||
|
|
||||||
echo Preparing the installer
|
echo Preparing the installer
|
||||||
|
go generate
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
pause
|
||||||
|
exit /b %errorlevel%
|
||||||
|
)
|
||||||
go build
|
go build
|
||||||
if %errorlevel% neq 0 (
|
if %errorlevel% neq 0 (
|
||||||
pause
|
pause
|
||||||
|
|
|
@ -160,7 +160,7 @@ var site_email = "" // Should be a setting
|
||||||
var smtp_server = ""
|
var smtp_server = ""
|
||||||
//var noavatar = "https://api.adorable.io/avatars/{width}/{id}@{site_url}.png"
|
//var noavatar = "https://api.adorable.io/avatars/{width}/{id}@{site_url}.png"
|
||||||
var noavatar = "https://api.adorable.io/avatars/285/{id}@" + site_url + ".png"
|
var noavatar = "https://api.adorable.io/avatars/285/{id}@" + site_url + ".png"
|
||||||
var items_per_page = 40 // Should be a setting
|
var items_per_page = 25
|
||||||
|
|
||||||
var site_url = "` + site_url + `"
|
var site_url = "` + site_url + `"
|
||||||
var server_port = "` + server_port + `"
|
var server_port = "` + server_port + `"
|
||||||
|
@ -170,6 +170,7 @@ var ssl_fullchain = ""
|
||||||
|
|
||||||
// Developer flag
|
// Developer flag
|
||||||
var debug = false
|
var debug = false
|
||||||
|
var profiling = false
|
||||||
`)
|
`)
|
||||||
|
|
||||||
fmt.Println("Opening the configuration file")
|
fmt.Println("Opening the configuration file")
|
||||||
|
|
7
main.go
7
main.go
|
@ -30,7 +30,9 @@ var staff_css_tmpl = template.CSS(staff_css)
|
||||||
var settings map[string]interface{} = make(map[string]interface{})
|
var settings map[string]interface{} = make(map[string]interface{})
|
||||||
var external_sites map[string]string = make(map[string]string)
|
var external_sites map[string]string = make(map[string]string)
|
||||||
var groups map[int]Group = make(map[int]Group)
|
var groups map[int]Group = make(map[int]Group)
|
||||||
var forums map[int]Forum = make(map[int]Forum)
|
var forums []Forum // The IDs for a forum tend to be low and sequential for the most part, so we can get more performance out of using a slice instead of a map AND it has better concurrency
|
||||||
|
var groupCapCount int
|
||||||
|
var forumCapCount int
|
||||||
var static_files map[string]SFile = make(map[string]SFile)
|
var static_files map[string]SFile = make(map[string]SFile)
|
||||||
|
|
||||||
var template_topic_handle func(TopicPage,io.Writer) = nil
|
var template_topic_handle func(TopicPage,io.Writer) = nil
|
||||||
|
@ -75,7 +77,8 @@ func compile_templates() {
|
||||||
topics_page := TopicsPage{"Topic List",user,noticeList,topicList,""}
|
topics_page := TopicsPage{"Topic List",user,noticeList,topicList,""}
|
||||||
topics_tmpl := c.compile_template("topics.html","templates/","TopicsPage", topics_page, varList)
|
topics_tmpl := c.compile_template("topics.html","templates/","TopicsPage", topics_page, varList)
|
||||||
|
|
||||||
forum_page := ForumPage{"General Forum",user,noticeList,topicList,"There aren't any topics in this forum yet."}
|
forum_item := Forum{1,"General Forum",true,0,"",0,"",0,""}
|
||||||
|
forum_page := ForumPage{"General Forum",user,noticeList,topicList,forum_item,1,1,nil}
|
||||||
forum_tmpl := c.compile_template("forum.html","templates/","ForumPage", forum_page, varList)
|
forum_tmpl := c.compile_template("forum.html","templates/","ForumPage", forum_page, varList)
|
||||||
|
|
||||||
log.Print("Writing the templates")
|
log.Print("Writing the templates")
|
||||||
|
|
|
@ -72,7 +72,8 @@ func route_delete_topic(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
var content string
|
var content string
|
||||||
var createdBy int
|
var createdBy int
|
||||||
err = db.QueryRow("select tid, content, createdBy from topics where tid = ?", tid).Scan(&tid, &content, &createdBy)
|
var fid int
|
||||||
|
err = db.QueryRow("select tid, content, createdBy, parentID from topics where tid = ?", tid).Scan(&tid, &content, &createdBy, &fid)
|
||||||
if err == sql.ErrNoRows {
|
if err == sql.ErrNoRows {
|
||||||
LocalError("The topic you tried to delete doesn't exist.",w,r,user)
|
LocalError("The topic you tried to delete doesn't exist.",w,r,user)
|
||||||
return
|
return
|
||||||
|
@ -95,6 +96,18 @@ func route_delete_topic(w http.ResponseWriter, r *http.Request) {
|
||||||
InternalError(err,w,r,user)
|
InternalError(err,w,r,user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fid > forumCapCount) || (fid < 0) || forums[fid].Name=="" {
|
||||||
|
LocalError("The topic's parent forum doesn't exist.",w,r,user)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, err = remove_topics_from_forum_stmt.Exec(1, fid)
|
||||||
|
if err != nil {
|
||||||
|
InternalError(err,w,r,user)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
forums[fid].TopicCount -= 1
|
||||||
}
|
}
|
||||||
|
|
||||||
func route_stick_topic(w http.ResponseWriter, r *http.Request) {
|
func route_stick_topic(w http.ResponseWriter, r *http.Request) {
|
||||||
|
@ -571,12 +584,12 @@ func route_panel_forums(w http.ResponseWriter, r *http.Request){
|
||||||
|
|
||||||
var forumList []interface{}
|
var forumList []interface{}
|
||||||
for _, forum := range forums {
|
for _, forum := range forums {
|
||||||
if forum.ID > -1 {
|
if forum.Name != "" {
|
||||||
forumList = append(forumList, forum)
|
forumList = append(forumList, forum)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pi := Page{"Forum Manager",user,noticeList,forumList,0}
|
pi := Page{"Forum Manager",user,noticeList,forumList,nil}
|
||||||
templates.ExecuteTemplate(w,"panel-forums.html", pi)
|
templates.ExecuteTemplate(w,"panel-forums.html", pi)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -600,20 +613,20 @@ func route_panel_forums_create_submit(w http.ResponseWriter, r *http.Request){
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var active bool
|
||||||
fname := r.PostFormValue("forum-name")
|
fname := r.PostFormValue("forum-name")
|
||||||
res, err := create_forum_stmt.Exec(fname)
|
factive := r.PostFormValue("forum-name")
|
||||||
|
if factive == "on" || factive == "1" {
|
||||||
|
active = true
|
||||||
|
} else {
|
||||||
|
active = false
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = create_forum(fname, active)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
InternalError(err,w,r,user)
|
InternalError(err,w,r,user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
lastId, err := res.LastInsertId()
|
|
||||||
if err != nil {
|
|
||||||
InternalError(err,w,r,user)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
forums[int(lastId)] = Forum{int(lastId),fname,true,"",0,"",0,""}
|
|
||||||
http.Redirect(w,r,"/panel/forums/",http.StatusSeeOther)
|
http.Redirect(w,r,"/panel/forums/",http.StatusSeeOther)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -637,8 +650,7 @@ func route_panel_forums_delete(w http.ResponseWriter, r *http.Request){
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, ok = forums[fid];
|
if (fid > forumCapCount) || (fid < 0) || forums[fid].Name=="" {
|
||||||
if !ok {
|
|
||||||
LocalError("The forum you're trying to delete doesn't exist.",w,r,user)
|
LocalError("The forum you're trying to delete doesn't exist.",w,r,user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -671,20 +683,17 @@ func route_panel_forums_delete_submit(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, ok = forums[fid];
|
if (fid > forumCapCount) || (fid < 0) || forums[fid].Name=="" {
|
||||||
if !ok {
|
|
||||||
LocalError("The forum you're trying to delete doesn't exist.",w,r,user)
|
LocalError("The forum you're trying to delete doesn't exist.",w,r,user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = delete_forum_stmt.Exec(fid)
|
err = delete_forum(fid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
InternalError(err,w,r,user)
|
InternalError(err,w,r,user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove this forum from the forum cache
|
|
||||||
delete(forums,fid);
|
|
||||||
http.Redirect(w,r,"/panel/forums/",http.StatusSeeOther)
|
http.Redirect(w,r,"/panel/forums/",http.StatusSeeOther)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -715,8 +724,7 @@ func route_panel_forums_edit_submit(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
forum_name := r.PostFormValue("edit_item")
|
forum_name := r.PostFormValue("edit_item")
|
||||||
forum, ok := forums[fid];
|
if (fid > forumCapCount) || (fid < 0) || forums[fid].Name=="" {
|
||||||
if !ok {
|
|
||||||
LocalError("The forum you're trying to edit doesn't exist.",w,r,user)
|
LocalError("The forum you're trying to edit doesn't exist.",w,r,user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -726,8 +734,7 @@ func route_panel_forums_edit_submit(w http.ResponseWriter, r *http.Request) {
|
||||||
InternalError(err,w,r,user)
|
InternalError(err,w,r,user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
forum.Name = forum_name
|
forums[fid].Name = forum_name
|
||||||
forums[fid] = forum
|
|
||||||
|
|
||||||
http.Redirect(w,r,"/panel/forums/",http.StatusSeeOther)
|
http.Redirect(w,r,"/panel/forums/",http.StatusSeeOther)
|
||||||
}
|
}
|
||||||
|
|
75
mysql.go
75
mysql.go
|
@ -15,11 +15,14 @@ var get_topic_user_stmt *sql.Stmt
|
||||||
var get_topic_replies_stmt *sql.Stmt
|
var get_topic_replies_stmt *sql.Stmt
|
||||||
var get_topic_replies_offset_stmt *sql.Stmt
|
var get_topic_replies_offset_stmt *sql.Stmt
|
||||||
var get_forum_topics_stmt *sql.Stmt
|
var get_forum_topics_stmt *sql.Stmt
|
||||||
|
var get_forum_topics_offset_stmt *sql.Stmt
|
||||||
var create_topic_stmt *sql.Stmt
|
var create_topic_stmt *sql.Stmt
|
||||||
var create_report_stmt *sql.Stmt
|
var create_report_stmt *sql.Stmt
|
||||||
var create_reply_stmt *sql.Stmt
|
var create_reply_stmt *sql.Stmt
|
||||||
var add_replies_to_topic_stmt *sql.Stmt
|
var add_replies_to_topic_stmt *sql.Stmt
|
||||||
var remove_replies_from_topic_stmt *sql.Stmt
|
var remove_replies_from_topic_stmt *sql.Stmt
|
||||||
|
var add_topics_to_forum_stmt *sql.Stmt
|
||||||
|
var remove_topics_from_forum_stmt *sql.Stmt
|
||||||
var update_forum_cache_stmt *sql.Stmt
|
var update_forum_cache_stmt *sql.Stmt
|
||||||
var edit_topic_stmt *sql.Stmt
|
var edit_topic_stmt *sql.Stmt
|
||||||
var edit_reply_stmt *sql.Stmt
|
var edit_reply_stmt *sql.Stmt
|
||||||
|
@ -55,6 +58,7 @@ var delete_profile_reply_stmt *sql.Stmt
|
||||||
var create_forum_stmt *sql.Stmt
|
var create_forum_stmt *sql.Stmt
|
||||||
var delete_forum_stmt *sql.Stmt
|
var delete_forum_stmt *sql.Stmt
|
||||||
var update_forum_stmt *sql.Stmt
|
var update_forum_stmt *sql.Stmt
|
||||||
|
var forum_entry_exists_stmt *sql.Stmt
|
||||||
var update_setting_stmt *sql.Stmt
|
var update_setting_stmt *sql.Stmt
|
||||||
var add_plugin_stmt *sql.Stmt
|
var add_plugin_stmt *sql.Stmt
|
||||||
var update_plugin_stmt *sql.Stmt
|
var update_plugin_stmt *sql.Stmt
|
||||||
|
@ -102,13 +106,19 @@ func init_database(err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Print("Preparing get_topic_replies_offset statement.")
|
log.Print("Preparing get_topic_replies_offset statement.")
|
||||||
get_topic_replies_offset_stmt, err = db.Prepare("select replies.rid, replies.content, replies.createdBy, replies.createdAt, replies.lastEdit, replies.lastEditBy, users.avatar, users.name, users.group, users.url_prefix, users.url_name, users.level, replies.ipaddress from replies left join users ON replies.createdBy = users.uid where tid = ? limit ? , " + strconv.Itoa(items_per_page))
|
get_topic_replies_offset_stmt, err = db.Prepare("select replies.rid, replies.content, replies.createdBy, replies.createdAt, replies.lastEdit, replies.lastEditBy, users.avatar, users.name, users.group, users.url_prefix, users.url_name, users.level, replies.ipaddress from replies left join users on replies.createdBy = users.uid where tid = ? limit ?, " + strconv.Itoa(items_per_page))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Print("Preparing get_forum_topics statement.")
|
log.Print("Preparing get_forum_topics statement.")
|
||||||
get_forum_topics_stmt, err = db.Prepare("select topics.tid, topics.title, topics.content, topics.createdBy, topics.is_closed, topics.sticky, topics.createdAt, topics.parentID, users.name, users.avatar from topics left join users ON topics.createdBy = users.uid WHERE topics.parentID = ? order by topics.sticky DESC, topics.lastReplyAt DESC, topics.createdBy DESC")
|
get_forum_topics_stmt, err = db.Prepare("select topics.tid, topics.title, topics.content, topics.createdBy, topics.is_closed, topics.sticky, topics.createdAt, topics.parentID, users.name, users.avatar from topics left join users ON topics.createdBy = users.uid where topics.parentID = ? order by topics.sticky DESC, topics.lastReplyAt DESC, topics.createdBy desc")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Print("Preparing get_forum_topics_offset statement.")
|
||||||
|
get_forum_topics_offset_stmt, err = db.Prepare("select topics.tid, topics.title, topics.content, topics.createdBy, topics.is_closed, topics.sticky, topics.createdAt, topics.parentID, users.name, users.avatar from topics left join users ON topics.createdBy = users.uid WHERE topics.parentID = ? order by topics.sticky DESC, topics.lastReplyAt DESC, topics.createdBy DESC limit ?, " + strconv.Itoa(items_per_page))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -120,7 +130,7 @@ func init_database(err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Print("Preparing create_report statement.")
|
log.Print("Preparing create_report statement.")
|
||||||
create_report_stmt, err = db.Prepare("INSERT INTO topics(title,content,parsed_content,createdAt,createdBy,data,parentID) VALUES(?,?,?,NOW(),?,?,-1)")
|
create_report_stmt, err = db.Prepare("INSERT INTO topics(title,content,parsed_content,createdAt,createdBy,data,parentID) VALUES(?,?,?,NOW(),?,?,1)")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -143,6 +153,18 @@ func init_database(err error) {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Print("Preparing add_topics_to_forum statement.")
|
||||||
|
add_topics_to_forum_stmt, err = db.Prepare("UPDATE forums SET topicCount = topicCount + ? WHERE fid = ?")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Print("Preparing remove_topics_from_forum statement.")
|
||||||
|
remove_topics_from_forum_stmt, err = db.Prepare("UPDATE forums SET topicCount = topicCount - ? WHERE fid = ?")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
log.Print("Preparing update_forum_cache statement.")
|
log.Print("Preparing update_forum_cache statement.")
|
||||||
update_forum_cache_stmt, err = db.Prepare("UPDATE forums SET lastTopic = ?, lastTopicID = ?, lastReplyer = ?, lastReplyerID = ?, lastTopicTime = NOW() WHERE fid = ?")
|
update_forum_cache_stmt, err = db.Prepare("UPDATE forums SET lastTopic = ?, lastTopicID = ?, lastReplyer = ?, lastReplyerID = ?, lastTopicTime = NOW() WHERE fid = ?")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -249,7 +271,7 @@ func init_database(err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Print("Preparing change_group statement.")
|
log.Print("Preparing change_group statement.")
|
||||||
change_group_stmt, err = db.Prepare("UPDATE `users` SET `group` = ? WHERE `uid` = ?")
|
change_group_stmt, err = db.Prepare("update `users` set `group` = ? where `uid` = ?")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -333,19 +355,26 @@ func init_database(err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Print("Preparing create_forum statement.")
|
log.Print("Preparing create_forum statement.")
|
||||||
create_forum_stmt, err = db.Prepare("INSERT INTO forums(name) VALUES(?)")
|
create_forum_stmt, err = db.Prepare("INSERT INTO forums(name,active) VALUES(?,?)")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Print("Preparing delete_forum statement.")
|
log.Print("Preparing delete_forum statement.")
|
||||||
delete_forum_stmt, err = db.Prepare("DELETE FROM forums WHERE fid = ?")
|
//delete_forum_stmt, err = db.Prepare("DELETE FROM forums WHERE fid = ?")
|
||||||
|
delete_forum_stmt, err = db.Prepare("update forums set name= '', active = 0 where fid = ?")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Print("Preparing update_forum statement.")
|
log.Print("Preparing update_forum statement.")
|
||||||
update_forum_stmt, err = db.Prepare("UPDATE forums SET name = ? WHERE fid = ?")
|
update_forum_stmt, err = db.Prepare("update forums set name = ?, active = ? where fid = ?")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Print("Preparing forum_entry_exists statement.")
|
||||||
|
forum_entry_exists_stmt, err = db.Prepare("SELECT `fid` FROM `forums` WHERE `name` = '' order by fid asc limit 1")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -418,19 +447,30 @@ func init_database(err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Print("Loading the forums.")
|
log.Print("Loading the forums.")
|
||||||
rows, err = db.Query("SELECT fid, name, active, lastTopic, lastTopicID, lastReplyer, lastReplyerID, lastTopicTime FROM forums")
|
log.Print("Adding the uncategorised forum")
|
||||||
|
forums = append(forums, Forum{0,"Uncategorised",uncategorised_forum_visible,0,"",0,"",0,""})
|
||||||
|
|
||||||
|
//rows, err = db.Query("SELECT fid, name, active, lastTopic, lastTopicID, lastReplyer, lastReplyerID, lastTopicTime FROM forums")
|
||||||
|
rows, err = db.Query("SELECT fid, name, active, topicCount, lastTopic, lastTopicID, lastReplyer, lastReplyerID, lastTopicTime FROM forums ORDER BY fid ASC")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
|
|
||||||
for rows.Next() {
|
i := 1
|
||||||
forum := Forum{0,"",true,"",0,"",0,""}
|
for ;rows.Next();i++ {
|
||||||
err := rows.Scan(&forum.ID, &forum.Name, &forum.Active, &forum.LastTopic, &forum.LastTopicID, &forum.LastReplyer, &forum.LastReplyerID, &forum.LastTopicTime)
|
forum := Forum{0,"",true,0,"",0,"",0,""}
|
||||||
|
err := rows.Scan(&forum.ID, &forum.Name, &forum.Active, &forum.TopicCount, &forum.LastTopic, &forum.LastTopicID, &forum.LastReplyer, &forum.LastReplyerID, &forum.LastTopicTime)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ugh, you really shouldn't physically delete these items, it makes a big mess of things
|
||||||
|
if forum.ID != i {
|
||||||
|
fmt.Println("Stop physically deleting forums. You are messing up the IDs. Use the Forum Manager or delete_forums() instead x.x")
|
||||||
|
fill_forum_id_gap(i, forum.ID)
|
||||||
|
}
|
||||||
|
|
||||||
if forum.LastTopicID != 0 {
|
if forum.LastTopicID != 0 {
|
||||||
forum.LastTopicTime, err = relative_time(forum.LastTopicTime)
|
forum.LastTopicTime, err = relative_time(forum.LastTopicTime)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -440,17 +480,18 @@ func init_database(err error) {
|
||||||
forum.LastTopic = "None"
|
forum.LastTopic = "None"
|
||||||
forum.LastTopicTime = ""
|
forum.LastTopicTime = ""
|
||||||
}
|
}
|
||||||
forums[forum.ID] = forum
|
|
||||||
|
log.Print("Adding the " + forum.Name + " forum")
|
||||||
|
forums = append(forums,forum)
|
||||||
}
|
}
|
||||||
err = rows.Err()
|
err = rows.Err()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
forumCapCount = i
|
||||||
|
|
||||||
log.Print("Adding the uncategorised forum")
|
//log.Print("Adding the reports forum")
|
||||||
forums[0] = Forum{0,"Uncategorised",uncategorised_forum_visible,"",0,"",0,""}
|
//forums[-1] = Forum{-1,"Reports",false,0,"",0,"",0,""}
|
||||||
log.Print("Adding the reports forum")
|
|
||||||
forums[-1] = Forum{-1,"Reports",false,"",0,"",0,""}
|
|
||||||
|
|
||||||
log.Print("Loading the settings.")
|
log.Print("Loading the settings.")
|
||||||
rows, err = db.Query("SELECT name, content, type, constraints FROM settings")
|
rows, err = db.Query("SELECT name, content, type, constraints FROM settings")
|
||||||
|
@ -541,6 +582,4 @@ func init_database(err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
3
pages.go
3
pages.go
|
@ -38,6 +38,9 @@ type ForumPage struct
|
||||||
CurrentUser User
|
CurrentUser User
|
||||||
NoticeList []string
|
NoticeList []string
|
||||||
ItemList []TopicUser
|
ItemList []TopicUser
|
||||||
|
Forum Forum
|
||||||
|
Page int
|
||||||
|
LastPage int
|
||||||
ExtData interface{}
|
ExtData interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package main
|
package main
|
||||||
//import "log"
|
//import "log"
|
||||||
import "fmt"
|
//import "fmt"
|
||||||
import "bytes"
|
import "bytes"
|
||||||
//import "strings"
|
//import "strings"
|
||||||
import "strconv"
|
import "strconv"
|
||||||
|
@ -15,6 +15,8 @@ var bbcode_missing_tag []byte
|
||||||
var bbcode_url_open []byte
|
var bbcode_url_open []byte
|
||||||
var bbcode_url_open2 []byte
|
var bbcode_url_open2 []byte
|
||||||
var bbcode_url_close []byte
|
var bbcode_url_close []byte
|
||||||
|
var bbcode_space_gap []byte
|
||||||
|
|
||||||
var bbcode_bold *regexp.Regexp
|
var bbcode_bold *regexp.Regexp
|
||||||
var bbcode_italic *regexp.Regexp
|
var bbcode_italic *regexp.Regexp
|
||||||
var bbcode_underline *regexp.Regexp
|
var bbcode_underline *regexp.Regexp
|
||||||
|
@ -36,6 +38,7 @@ func init_bbcode() {
|
||||||
bbcode_url_open = []byte("<a href='")
|
bbcode_url_open = []byte("<a href='")
|
||||||
bbcode_url_open2 = []byte("'>")
|
bbcode_url_open2 = []byte("'>")
|
||||||
bbcode_url_close = []byte("</a>")
|
bbcode_url_close = []byte("</a>")
|
||||||
|
bbcode_space_gap = []byte(" ")
|
||||||
|
|
||||||
bbcode_bold = regexp.MustCompile(`(?s)\[b\](.*)\[/b\]`)
|
bbcode_bold = regexp.MustCompile(`(?s)\[b\](.*)\[/b\]`)
|
||||||
bbcode_italic = regexp.MustCompile(`(?s)\[i\](.*)\[/i\]`)
|
bbcode_italic = regexp.MustCompile(`(?s)\[i\](.*)\[/i\]`)
|
||||||
|
@ -188,8 +191,8 @@ func bbcode_full_parse(data interface{}) interface{} {
|
||||||
has_s := false
|
has_s := false
|
||||||
has_c := false
|
has_c := false
|
||||||
complex_bbc := false
|
complex_bbc := false
|
||||||
msglen := len(msgbytes)
|
msgbytes = append(msgbytes,bbcode_space_gap...)
|
||||||
for i := 0; (i + 3) < msglen; i++ {
|
for i := 0; i < len(msgbytes); i++ {
|
||||||
if msgbytes[i] == '[' {
|
if msgbytes[i] == '[' {
|
||||||
if msgbytes[i + 2] != ']' {
|
if msgbytes[i + 2] != ']' {
|
||||||
if msgbytes[i + 1] == '/' {
|
if msgbytes[i + 1] == '/' {
|
||||||
|
@ -215,7 +218,7 @@ func bbcode_full_parse(data interface{}) interface{} {
|
||||||
i += 3
|
i += 3
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if msglen >= (i+6) && msgbytes[i+2] == 'c' && msgbytes[i+3] == 'o' && msgbytes[i+4] == 'd' && msgbytes[i+5] == 'e' && msgbytes[i+6] == ']' {
|
if msgbytes[i+2] == 'c' && msgbytes[i+3] == 'o' && msgbytes[i+4] == 'd' && msgbytes[i+5] == 'e' && msgbytes[i+6] == ']' {
|
||||||
has_c = false
|
has_c = false
|
||||||
i += 7
|
i += 7
|
||||||
}
|
}
|
||||||
|
@ -228,7 +231,7 @@ func bbcode_full_parse(data interface{}) interface{} {
|
||||||
complex_bbc = true
|
complex_bbc = true
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if msglen >= (i+5) && msgbytes[i+1] == 'c' && msgbytes[i+2] == 'o' && msgbytes[i+3] == 'd' && msgbytes[i+4] == 'e' && msgbytes[i+5] == ']' {
|
if msgbytes[i+1] == 'c' && msgbytes[i+2] == 'o' && msgbytes[i+3] == 'd' && msgbytes[i+4] == 'e' && msgbytes[i+5] == ']' {
|
||||||
has_c = true
|
has_c = true
|
||||||
i += 6
|
i += 6
|
||||||
}
|
}
|
||||||
|
@ -271,14 +274,14 @@ func bbcode_full_parse(data interface{}) interface{} {
|
||||||
i := 0
|
i := 0
|
||||||
var start int
|
var start int
|
||||||
var lastTag int
|
var lastTag int
|
||||||
outbytes := make([]byte, msglen)
|
outbytes := make([]byte, len(msgbytes))
|
||||||
fmt.Println(string(msgbytes))
|
//fmt.Println(string(msgbytes))
|
||||||
for ; (i+3) < msglen; i++ {
|
for ; i < len(msgbytes); i++ {
|
||||||
MainLoop:
|
MainLoop:
|
||||||
if msgbytes[i] == '[' {
|
if msgbytes[i] == '[' {
|
||||||
OuterComplex:
|
OuterComplex:
|
||||||
if msgbytes[i + 1] == 'u' {
|
if msgbytes[i + 1] == 'u' {
|
||||||
if (msglen-1) >= (i+6) && msgbytes[i+2] == 'r' && msgbytes[i+3] == 'l' && msgbytes[i+4] == ']' {
|
if msgbytes[i+2] == 'r' && msgbytes[i+3] == 'l' && msgbytes[i+4] == ']' {
|
||||||
outbytes = append(outbytes, msgbytes[lastTag:i]...)
|
outbytes = append(outbytes, msgbytes[lastTag:i]...)
|
||||||
start = i + 5
|
start = i + 5
|
||||||
i = start
|
i = start
|
||||||
|
@ -300,7 +303,7 @@ func bbcode_full_parse(data interface{}) interface{} {
|
||||||
}
|
}
|
||||||
|
|
||||||
for ;; i++ {
|
for ;; i++ {
|
||||||
if msglen < (i + 6) {
|
if len(msgbytes) < (i + 10) {
|
||||||
//fmt.Println(msglen)
|
//fmt.Println(msglen)
|
||||||
//fmt.Println(i+6)
|
//fmt.Println(i+6)
|
||||||
outbytes = append(outbytes, bbcode_missing_tag...)
|
outbytes = append(outbytes, bbcode_missing_tag...)
|
||||||
|
@ -329,7 +332,7 @@ func bbcode_full_parse(data interface{}) interface{} {
|
||||||
lastTag = i
|
lastTag = i
|
||||||
}
|
}
|
||||||
} else if msgbytes[i + 1] == 'r' {
|
} else if msgbytes[i + 1] == 'r' {
|
||||||
if msglen >= (i+6) && bytes.Equal(msgbytes[i+2:i+6],[]byte("and]")) {
|
if bytes.Equal(msgbytes[i+2:i+6],[]byte("and]")) {
|
||||||
outbytes = append(outbytes, msgbytes[lastTag:i]...)
|
outbytes = append(outbytes, msgbytes[lastTag:i]...)
|
||||||
start = i + 6
|
start = i + 6
|
||||||
i = start
|
i = start
|
||||||
|
@ -340,7 +343,7 @@ func bbcode_full_parse(data interface{}) interface{} {
|
||||||
goto OuterComplex
|
goto OuterComplex
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
} else if (len(msgbytes) - 1) < (i + 7) {
|
} else if (len(msgbytes) - 1) < (i + 10) {
|
||||||
outbytes = append(outbytes, bbcode_missing_tag...)
|
outbytes = append(outbytes, bbcode_missing_tag...)
|
||||||
goto OuterComplex
|
goto OuterComplex
|
||||||
}
|
}
|
||||||
|
@ -364,7 +367,7 @@ func bbcode_full_parse(data interface{}) interface{} {
|
||||||
//fmt.Println(outbytes)
|
//fmt.Println(outbytes)
|
||||||
//fmt.Println(string(outbytes))
|
//fmt.Println(string(outbytes))
|
||||||
if lastTag != i {
|
if lastTag != i {
|
||||||
outbytes = append(outbytes, msgbytes[lastTag:]...)
|
outbytes = append(outbytes, msgbytes[lastTag:len(msgbytes) - 10]...)
|
||||||
}
|
}
|
||||||
if len(outbytes) != 0 {
|
if len(outbytes) != 0 {
|
||||||
return string(outbytes)
|
return string(outbytes)
|
||||||
|
|
|
@ -121,4 +121,13 @@ $(document).ready(function(){
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$(this).keyup(function(event){
|
||||||
|
if(event.which == 37) {
|
||||||
|
$("#prevFloat a")[0].click();
|
||||||
|
}
|
||||||
|
if(event.which == 39) {
|
||||||
|
$("#nextFloat a")[0].click();
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
89
routes.go
89
routes.go
|
@ -2,7 +2,7 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
import "fmt"
|
//import "fmt"
|
||||||
import "strconv"
|
import "strconv"
|
||||||
import "bytes"
|
import "bytes"
|
||||||
import "regexp"
|
import "regexp"
|
||||||
|
@ -150,15 +150,14 @@ func route_forum(w http.ResponseWriter, r *http.Request){
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var topicList []TopicUser
|
page, _ := strconv.Atoi(r.FormValue("page"))
|
||||||
fid, err := strconv.Atoi(r.URL.Path[len("/forum/"):])
|
fid, err := strconv.Atoi(r.URL.Path[len("/forum/"):])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
LocalError("The provided ForumID is not a valid number.",w,r,user)
|
LocalError("The provided ForumID is not a valid number.",w,r,user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, ok = forums[fid]
|
if (fid > forumCapCount) || (fid < 0) || forums[fid].Name=="" {
|
||||||
if !ok {
|
|
||||||
NotFound(w,r,user)
|
NotFound(w,r,user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -167,12 +166,24 @@ func route_forum(w http.ResponseWriter, r *http.Request){
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
rows, err := get_forum_topics_stmt.Query(fid)
|
// Calculate the offset
|
||||||
|
var offset int
|
||||||
|
last_page := int(forums[fid].TopicCount / items_per_page) + 1
|
||||||
|
if page > 1 {
|
||||||
|
offset = (items_per_page * page) - items_per_page
|
||||||
|
} else if page == -1 {
|
||||||
|
page = last_page
|
||||||
|
offset = (items_per_page * page) - items_per_page
|
||||||
|
} else {
|
||||||
|
page = 1
|
||||||
|
}
|
||||||
|
rows, err := get_forum_topics_offset_stmt.Query(fid, offset)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
InternalError(err,w,r,user)
|
InternalError(err,w,r,user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var topicList []TopicUser
|
||||||
topicItem := TopicUser{ID: 0}
|
topicItem := TopicUser{ID: 0}
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
err := rows.Scan(&topicItem.ID, &topicItem.Title, &topicItem.Content, &topicItem.CreatedBy, &topicItem.Is_Closed, &topicItem.Sticky, &topicItem.CreatedAt, &topicItem.ParentID, &topicItem.CreatedByName, &topicItem.Avatar)
|
err := rows.Scan(&topicItem.ID, &topicItem.Title, &topicItem.Content, &topicItem.CreatedBy, &topicItem.Is_Closed, &topicItem.Sticky, &topicItem.CreatedAt, &topicItem.ParentID, &topicItem.CreatedByName, &topicItem.Avatar)
|
||||||
|
@ -201,7 +212,7 @@ func route_forum(w http.ResponseWriter, r *http.Request){
|
||||||
}
|
}
|
||||||
rows.Close()
|
rows.Close()
|
||||||
|
|
||||||
pi := ForumPage{forums[fid].Name,user,noticeList,topicList,nil}
|
pi := ForumPage{forums[fid].Name,user,noticeList,topicList,forums[fid],page,last_page,nil}
|
||||||
if template_forum_handle != nil {
|
if template_forum_handle != nil {
|
||||||
template_forum_handle(pi,w)
|
template_forum_handle(pi,w)
|
||||||
} else {
|
} else {
|
||||||
|
@ -541,6 +552,8 @@ func route_create_topic(w http.ResponseWriter, r *http.Request) {
|
||||||
LocalError("Bad Form", w, r, user)
|
LocalError("Bad Form", w, r, user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fid := 2
|
||||||
topic_name := html.EscapeString(r.PostFormValue("topic-name"))
|
topic_name := html.EscapeString(r.PostFormValue("topic-name"))
|
||||||
content := html.EscapeString(preparse_message(r.PostFormValue("topic-content")))
|
content := html.EscapeString(preparse_message(r.PostFormValue("topic-content")))
|
||||||
ipaddress, _, err := net.SplitHostPort(r.RemoteAddr)
|
ipaddress, _, err := net.SplitHostPort(r.RemoteAddr)
|
||||||
|
@ -549,6 +562,11 @@ func route_create_topic(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fid > forumCapCount) || (fid < 0) || forums[fid].Name=="" {
|
||||||
|
LocalError("The topic's parent forum doesn't exist.",w,r,user)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
res, err := create_topic_stmt.Exec(topic_name,content,parse_message(content),ipaddress,user.ID)
|
res, err := create_topic_stmt.Exec(topic_name,content,parse_message(content),ipaddress,user.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
InternalError(err,w,r,user)
|
InternalError(err,w,r,user)
|
||||||
|
@ -560,7 +578,15 @@ func route_create_topic(w http.ResponseWriter, r *http.Request) {
|
||||||
InternalError(err,w,r,user)
|
InternalError(err,w,r,user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
_, err = update_forum_cache_stmt.Exec(topic_name, lastId, user.Name, user.ID, 1)
|
|
||||||
|
_, err = add_topics_to_forum_stmt.Exec(1, fid)
|
||||||
|
if err != nil {
|
||||||
|
InternalError(err,w,r,user)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
forums[fid].TopicCount -= 1
|
||||||
|
|
||||||
|
_, err = update_forum_cache_stmt.Exec(topic_name, lastId, user.Name, user.ID, fid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
InternalError(err,w,r,user)
|
InternalError(err,w,r,user)
|
||||||
return
|
return
|
||||||
|
@ -710,8 +736,8 @@ func route_report_submit(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
item_type := r.FormValue("type")
|
item_type := r.FormValue("type")
|
||||||
success := 1
|
|
||||||
|
|
||||||
|
fid := 1
|
||||||
var tid int
|
var tid int
|
||||||
var title string
|
var title string
|
||||||
var content string
|
var content string
|
||||||
|
@ -719,16 +745,16 @@ func route_report_submit(w http.ResponseWriter, r *http.Request) {
|
||||||
if item_type == "reply" {
|
if item_type == "reply" {
|
||||||
err = db.QueryRow("select tid, content from replies where rid = ?", item_id).Scan(&tid, &content)
|
err = db.QueryRow("select tid, content from replies where rid = ?", item_id).Scan(&tid, &content)
|
||||||
if err == sql.ErrNoRows {
|
if err == sql.ErrNoRows {
|
||||||
LocalError("We were unable to find the reported post", w, r, user)
|
LocalError("We were unable to find the reported post",w,r,user)
|
||||||
return
|
return
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
InternalError(err,w,r,user)
|
InternalError(err,w,r,user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = db.QueryRow("select title, data from topics where tid = ?", tid).Scan(&title,&data)
|
err = db.QueryRow("select title, data from topics where tid = ?",tid).Scan(&title,&data)
|
||||||
if err == sql.ErrNoRows {
|
if err == sql.ErrNoRows {
|
||||||
LocalError("We were unable to find the topic which the reported post is supposed to be in", w, r, user)
|
LocalError("We were unable to find the topic which the reported post is supposed to be in",w,r,user)
|
||||||
return
|
return
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
InternalError(err,w,r,user)
|
InternalError(err,w,r,user)
|
||||||
|
@ -738,7 +764,7 @@ func route_report_submit(w http.ResponseWriter, r *http.Request) {
|
||||||
} else if item_type == "user-reply" {
|
} else if item_type == "user-reply" {
|
||||||
err = db.QueryRow("select uid, content from users_replies where rid = ?", item_id).Scan(&tid, &content)
|
err = db.QueryRow("select uid, content from users_replies where rid = ?", item_id).Scan(&tid, &content)
|
||||||
if err == sql.ErrNoRows {
|
if err == sql.ErrNoRows {
|
||||||
LocalError("We were unable to find the reported post", w, r, user)
|
LocalError("We were unable to find the reported post",w,r,user)
|
||||||
return
|
return
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
InternalError(err,w,r,user)
|
InternalError(err,w,r,user)
|
||||||
|
@ -747,7 +773,7 @@ func route_report_submit(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
err = db.QueryRow("select name from users where uid = ?", tid).Scan(&title)
|
err = db.QueryRow("select name from users where uid = ?", tid).Scan(&title)
|
||||||
if err == sql.ErrNoRows {
|
if err == sql.ErrNoRows {
|
||||||
LocalError("We were unable to find the profile which the reported post is supposed to be on", w, r, user)
|
LocalError("We were unable to find the profile which the reported post is supposed to be on",w,r,user)
|
||||||
return
|
return
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
InternalError(err,w,r,user)
|
InternalError(err,w,r,user)
|
||||||
|
@ -769,14 +795,13 @@ func route_report_submit(w http.ResponseWriter, r *http.Request) {
|
||||||
run_vhook_noreturn("report_preassign", &item_id, &item_type)
|
run_vhook_noreturn("report_preassign", &item_id, &item_type)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't try to guess the type
|
// Don't try to guess the type
|
||||||
LocalError("Unknown type", w, r, user)
|
LocalError("Unknown type",w,r,user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var count int
|
var count int
|
||||||
rows, err := db.Query("select count(*) as count from topics where data = ? and data != '' and parentID = -1", item_type + "_" + strconv.Itoa(item_id))
|
rows, err := db.Query("select count(*) as count from topics where data = ? and data != '' and parentID = 1", item_type + "_" + strconv.Itoa(item_id))
|
||||||
if err != nil && err != sql.ErrNoRows {
|
if err != nil && err != sql.ErrNoRows {
|
||||||
InternalError(err,w,r,user)
|
InternalError(err,w,r,user)
|
||||||
return
|
return
|
||||||
|
@ -797,34 +822,28 @@ func route_report_submit(w http.ResponseWriter, r *http.Request) {
|
||||||
title = "Report: " + title
|
title = "Report: " + title
|
||||||
res, err := create_report_stmt.Exec(title,content,content,user.ID,item_type + "_" + strconv.Itoa(item_id))
|
res, err := create_report_stmt.Exec(title,content,content,user.ID,item_type + "_" + strconv.Itoa(item_id))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print(err)
|
InternalError(err,w,r,user)
|
||||||
success = 0
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
lastId, err := res.LastInsertId()
|
lastId, err := res.LastInsertId()
|
||||||
if err != nil {
|
|
||||||
log.Print(err)
|
|
||||||
success = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = update_forum_cache_stmt.Exec(title, lastId, user.Name, user.ID, 1)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
InternalError(err,w,r,user)
|
InternalError(err,w,r,user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if success != 1 {
|
_, err = add_topics_to_forum_stmt.Exec(1, fid)
|
||||||
errmsg := "Unable to create the report"
|
if err != nil {
|
||||||
pi := Page{"Error",user,nList,tList,errmsg}
|
InternalError(err,w,r,user)
|
||||||
|
return
|
||||||
var b bytes.Buffer
|
|
||||||
templates.ExecuteTemplate(&b,"error.html", pi)
|
|
||||||
errpage := b.String()
|
|
||||||
w.WriteHeader(500)
|
|
||||||
fmt.Fprintln(w,errpage)
|
|
||||||
} else {
|
|
||||||
http.Redirect(w, r, "/topic/" + strconv.FormatInt(lastId, 10), http.StatusSeeOther)
|
|
||||||
}
|
}
|
||||||
|
_, err = update_forum_cache_stmt.Exec(title, lastId, user.Name, user.ID, fid)
|
||||||
|
if err != nil {
|
||||||
|
InternalError(err,w,r,user)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
http.Redirect(w, r, "/topic/" + strconv.FormatInt(lastId, 10), http.StatusSeeOther)
|
||||||
}
|
}
|
||||||
|
|
||||||
func route_account_own_edit_critical(w http.ResponseWriter, r *http.Request) {
|
func route_account_own_edit_critical(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
go build
|
echo "Generating the dynamic code"
|
||||||
go build ./install
|
go generate
|
||||||
|
echo "Building Gosora"
|
||||||
|
go build -o Gosora
|
||||||
|
echo "Running Gosora"
|
||||||
./Gosora
|
./Gosora
|
2
run.bat
2
run.bat
|
@ -7,7 +7,7 @@ if %errorlevel% neq 0 (
|
||||||
)
|
)
|
||||||
|
|
||||||
echo Building the executable
|
echo Building the executable
|
||||||
go build
|
go build -o gosora.exe
|
||||||
if %errorlevel% neq 0 (
|
if %errorlevel% neq 0 (
|
||||||
pause
|
pause
|
||||||
exit /b %errorlevel%
|
exit /b %errorlevel%
|
||||||
|
|
|
@ -40,37 +40,55 @@ w.Write([]byte(item))
|
||||||
w.Write(header_5)
|
w.Write(header_5)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if tmpl_forum_vars.Page > 1 {
|
||||||
w.Write(forum_0)
|
w.Write(forum_0)
|
||||||
w.Write([]byte(tmpl_forum_vars.Title))
|
w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Forum.ID)))
|
||||||
w.Write(forum_1)
|
w.Write(forum_1)
|
||||||
|
w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Page - 1)))
|
||||||
|
w.Write(forum_2)
|
||||||
|
}
|
||||||
|
if tmpl_forum_vars.LastPage != tmpl_forum_vars.Page {
|
||||||
|
w.Write(forum_3)
|
||||||
|
w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Forum.ID)))
|
||||||
|
w.Write(forum_4)
|
||||||
|
w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Page + 1)))
|
||||||
|
w.Write(forum_5)
|
||||||
|
w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Forum.ID)))
|
||||||
|
w.Write(forum_6)
|
||||||
|
w.Write([]byte(strconv.Itoa(tmpl_forum_vars.Page + 1)))
|
||||||
|
w.Write(forum_7)
|
||||||
|
}
|
||||||
|
w.Write(forum_8)
|
||||||
|
w.Write([]byte(tmpl_forum_vars.Title))
|
||||||
|
w.Write(forum_9)
|
||||||
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_2)
|
|
||||||
if item.Avatar != "" {
|
|
||||||
w.Write(forum_3)
|
|
||||||
w.Write([]byte(item.Avatar))
|
|
||||||
w.Write(forum_4)
|
|
||||||
}
|
|
||||||
if item.Sticky {
|
|
||||||
w.Write(forum_5)
|
|
||||||
} else {
|
|
||||||
if item.Is_Closed {
|
|
||||||
w.Write(forum_6)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
w.Write(forum_7)
|
|
||||||
w.Write([]byte(strconv.Itoa(item.ID)))
|
|
||||||
w.Write(forum_8)
|
|
||||||
w.Write([]byte(item.Title))
|
|
||||||
w.Write(forum_9)
|
|
||||||
if item.Is_Closed {
|
|
||||||
w.Write(forum_10)
|
w.Write(forum_10)
|
||||||
}
|
if item.Avatar != "" {
|
||||||
w.Write(forum_11)
|
w.Write(forum_11)
|
||||||
}
|
w.Write([]byte(item.Avatar))
|
||||||
} else {
|
|
||||||
w.Write(forum_12)
|
w.Write(forum_12)
|
||||||
}
|
}
|
||||||
|
if item.Sticky {
|
||||||
w.Write(forum_13)
|
w.Write(forum_13)
|
||||||
|
} else {
|
||||||
|
if item.Is_Closed {
|
||||||
|
w.Write(forum_14)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
w.Write(forum_15)
|
||||||
|
w.Write([]byte(strconv.Itoa(item.ID)))
|
||||||
|
w.Write(forum_16)
|
||||||
|
w.Write([]byte(item.Title))
|
||||||
|
w.Write(forum_17)
|
||||||
|
if item.Is_Closed {
|
||||||
|
w.Write(forum_18)
|
||||||
|
}
|
||||||
|
w.Write(forum_19)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
w.Write(forum_20)
|
||||||
|
}
|
||||||
|
w.Write(forum_21)
|
||||||
w.Write(footer_0)
|
w.Write(footer_0)
|
||||||
}
|
}
|
||||||
|
|
269
template_list.go
269
template_list.go
|
@ -50,106 +50,109 @@ var header_3 []byte = []byte(`
|
||||||
<div id="back"><div id="main">`)
|
<div id="back"><div id="main">`)
|
||||||
var header_4 []byte = []byte(`<div class="alert">`)
|
var header_4 []byte = []byte(`<div class="alert">`)
|
||||||
var header_5 []byte = []byte(`</div>`)
|
var header_5 []byte = []byte(`</div>`)
|
||||||
var topic_0 []byte = []byte(`<div class="prev_button"><a href="/topic/`)
|
var topic_0 []byte = []byte(`<div id="prevFloat" class="prev_button"><a class="prev_link" href="/topic/`)
|
||||||
var topic_1 []byte = []byte(`?page=`)
|
var topic_1 []byte = []byte(`?page=`)
|
||||||
var topic_2 []byte = []byte(`"><</a></div>`)
|
var topic_2 []byte = []byte(`"><</a></div>`)
|
||||||
var topic_3 []byte = []byte(`<div class="next_button"><a href="/topic/`)
|
var topic_3 []byte = []byte(`<link rel="prerender" href="/topic/`)
|
||||||
var topic_4 []byte = []byte(`?page=`)
|
var topic_4 []byte = []byte(`?page=`)
|
||||||
var topic_5 []byte = []byte(`">></a></div>`)
|
var topic_5 []byte = []byte(`" />
|
||||||
var topic_6 []byte = []byte(`
|
<div id="nextFloat" class="next_button"><a class="next_link" href="/topic/`)
|
||||||
|
var topic_6 []byte = []byte(`?page=`)
|
||||||
|
var topic_7 []byte = []byte(`">></a></div>`)
|
||||||
|
var topic_8 []byte = []byte(`
|
||||||
<div class="rowblock">
|
<div class="rowblock">
|
||||||
<form action='/topic/edit/submit/`)
|
<form action='/topic/edit/submit/`)
|
||||||
var topic_7 []byte = []byte(`' method="post">
|
var topic_9 []byte = []byte(`' method="post">
|
||||||
<div class="rowitem"`)
|
<div class="rowitem"`)
|
||||||
var topic_8 []byte = []byte(` style="background-color: #FFFFEA;"`)
|
var topic_10 []byte = []byte(` style="background-color: #FFFFEA;"`)
|
||||||
var topic_9 []byte = []byte(` style="background-color: #eaeaea;"`)
|
var topic_11 []byte = []byte(` style="background-color: #eaeaea;"`)
|
||||||
var topic_10 []byte = []byte(`>
|
var topic_12 []byte = []byte(`>
|
||||||
<a class='topic_name hide_on_edit'>`)
|
<a class='topic_name hide_on_edit'>`)
|
||||||
var topic_11 []byte = []byte(`</a>
|
var topic_13 []byte = []byte(`</a>
|
||||||
`)
|
`)
|
||||||
var topic_12 []byte = []byte(`<span class='username hide_on_micro topic_status_e topic_status_closed hide_on_edit' title='Status: Closed' style="font-weight:normal;float: right;">🔒︎</span>`)
|
var topic_14 []byte = []byte(`<span class='username hide_on_micro topic_status_e topic_status_closed hide_on_edit' title='Status: Closed' style="font-weight:normal;float: right;position:relative;top:-5px;">🔒︎</span>`)
|
||||||
var topic_13 []byte = []byte(`
|
var topic_15 []byte = []byte(`
|
||||||
<a href='/topic/edit/`)
|
<a href='/topic/edit/`)
|
||||||
var topic_14 []byte = []byte(`' class="username hide_on_edit open_edit" style="font-weight: normal;margin-left: 6px;">Edit</a>
|
var topic_16 []byte = []byte(`' class="username hide_on_edit open_edit" style="font-weight: normal;margin-left: 6px;">Edit</a>
|
||||||
<a href='/topic/delete/submit/`)
|
<a href='/topic/delete/submit/`)
|
||||||
var topic_15 []byte = []byte(`' class="username" style="font-weight: normal;">Delete</a>
|
var topic_17 []byte = []byte(`' class="username" style="font-weight: normal;">Delete</a>
|
||||||
`)
|
`)
|
||||||
var topic_16 []byte = []byte(`<a href='/topic/unstick/submit/`)
|
var topic_18 []byte = []byte(`<a href='/topic/unstick/submit/`)
|
||||||
var topic_17 []byte = []byte(`' class="username" style="font-weight: normal;">Unpin</a>`)
|
var topic_19 []byte = []byte(`' class="username" style="font-weight: normal;">Unpin</a>`)
|
||||||
var topic_18 []byte = []byte(`<a href='/topic/stick/submit/`)
|
var topic_20 []byte = []byte(`<a href='/topic/stick/submit/`)
|
||||||
var topic_19 []byte = []byte(`' class="username" style="font-weight: normal;">Pin</a>`)
|
var topic_21 []byte = []byte(`' class="username" style="font-weight: normal;">Pin</a>`)
|
||||||
var topic_20 []byte = []byte(`
|
var topic_22 []byte = []byte(`
|
||||||
|
|
||||||
<input class='show_on_edit topic_name_input' name="topic_name" value='`)
|
<input class='show_on_edit topic_name_input' name="topic_name" value='`)
|
||||||
var topic_21 []byte = []byte(`' type="text" />
|
var topic_23 []byte = []byte(`' type="text" />
|
||||||
<select name="topic_status" class='show_on_edit topic_status_input' style='float: right;'>
|
<select name="topic_status" class='show_on_edit topic_status_input' style='float: right;'>
|
||||||
<option>open</option>
|
<option>open</option>
|
||||||
<option>closed</option>
|
<option>closed</option>
|
||||||
</select>
|
</select>
|
||||||
<button name="topic-button" class="formbutton show_on_edit submit_edit">Update</button>
|
<button name="topic-button" class="formbutton show_on_edit submit_edit">Update</button>
|
||||||
`)
|
`)
|
||||||
var topic_22 []byte = []byte(`
|
var topic_24 []byte = []byte(`
|
||||||
<a href="/report/submit/`)
|
<a href="/report/submit/`)
|
||||||
var topic_23 []byte = []byte(`?session=`)
|
var topic_25 []byte = []byte(`?session=`)
|
||||||
var topic_24 []byte = []byte(`&type=topic" class="username report_item" style="font-weight: normal;">Report</a>
|
var topic_26 []byte = []byte(`&type=topic" class="username report_item" style="font-weight: normal;">Report</a>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="rowblock post_container">
|
<div class="rowblock post_container">
|
||||||
<div class="rowitem passive editable_parent post_item" style="border-bottom: none;`)
|
<div class="rowitem passive editable_parent post_item" style="border-bottom: none;`)
|
||||||
var topic_25 []byte = []byte(`background-image: url(`)
|
var topic_27 []byte = []byte(`background-image: url(`)
|
||||||
var topic_26 []byte = []byte(`), url(/static/white-dot.jpg);background-position: 0px `)
|
var topic_28 []byte = []byte(`), url(/static/white-dot.jpg);background-position: 0px `)
|
||||||
var topic_27 []byte = []byte(`-1`)
|
var topic_29 []byte = []byte(`-1`)
|
||||||
var topic_28 []byte = []byte(`0px;background-repeat: no-repeat, repeat-y;background-size: 128px;padding-left: 136px;`)
|
var topic_30 []byte = []byte(`0px;background-repeat: no-repeat, repeat-y;background-size: 128px;padding-left: 136px;`)
|
||||||
var topic_29 []byte = []byte(`">
|
var topic_31 []byte = []byte(`">
|
||||||
<p class="hide_on_edit topic_content user_content" style="margin: 0;padding: 0;">`)
|
<p class="hide_on_edit topic_content user_content" style="margin: 0;padding: 0;">`)
|
||||||
var topic_30 []byte = []byte(`</p>
|
var topic_32 []byte = []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_31 []byte = []byte(`</textarea><br /><br />
|
var topic_33 []byte = []byte(`</textarea><br /><br />
|
||||||
<a href="/user/`)
|
<a href="/user/`)
|
||||||
var topic_32 []byte = []byte(`" class="username real_username">`)
|
var topic_34 []byte = []byte(`" class="username real_username">`)
|
||||||
var topic_33 []byte = []byte(`</a>
|
var topic_35 []byte = []byte(`</a>
|
||||||
<a class="username hide_on_micro" `)
|
<a class="username hide_on_micro" `)
|
||||||
var topic_34 []byte = []byte(`style="float: right;">`)
|
var topic_36 []byte = []byte(`style="float: right;">`)
|
||||||
var topic_35 []byte = []byte(`style="color: #505050;float: right;">Level `)
|
var topic_37 []byte = []byte(`style="color: #505050;float: right;">Level `)
|
||||||
var topic_36 []byte = []byte(`</a>
|
var topic_38 []byte = []byte(`</a>
|
||||||
</div>
|
</div>
|
||||||
</div><br />
|
</div><br />
|
||||||
<div class="rowblock post_container" style="overflow: hidden;">`)
|
<div class="rowblock post_container" style="overflow: hidden;">`)
|
||||||
var topic_37 []byte = []byte(`
|
var topic_39 []byte = []byte(`
|
||||||
<div class="rowitem rowhead passive deletable_block editable_parent post_item" style="`)
|
<div class="rowitem rowhead passive deletable_block editable_parent post_item" style="`)
|
||||||
var topic_38 []byte = []byte(`background-image: url(`)
|
var topic_40 []byte = []byte(`background-image: url(`)
|
||||||
var topic_39 []byte = []byte(`), url(/static/white-dot.jpg);background-position: 0px `)
|
var topic_41 []byte = []byte(`), url(/static/white-dot.jpg);background-position: 0px `)
|
||||||
var topic_40 []byte = []byte(`-1`)
|
var topic_42 []byte = []byte(`-1`)
|
||||||
var topic_41 []byte = []byte(`0px;background-repeat: no-repeat, repeat-y;background-size: 128px;padding-left: 136px;`)
|
var topic_43 []byte = []byte(`0px;background-repeat: no-repeat, repeat-y;background-size: 128px;padding-left: 136px;`)
|
||||||
var topic_42 []byte = []byte(`">
|
var topic_44 []byte = []byte(`">
|
||||||
<p class="editable_block user_content" style="margin: 0;padding: 0;">`)
|
<p class="editable_block user_content" style="margin: 0;padding: 0;">`)
|
||||||
var topic_43 []byte = []byte(`</p><br /><br />
|
var topic_45 []byte = []byte(`</p><br /><br />
|
||||||
<a href="/user/`)
|
<a href="/user/`)
|
||||||
var topic_44 []byte = []byte(`" class="username real_username">`)
|
var topic_46 []byte = []byte(`" class="username real_username">`)
|
||||||
var topic_45 []byte = []byte(`</a>
|
var topic_47 []byte = []byte(`</a>
|
||||||
`)
|
`)
|
||||||
var topic_46 []byte = []byte(`<a href="/reply/edit/submit/`)
|
var topic_48 []byte = []byte(`<a href="/reply/edit/submit/`)
|
||||||
var topic_47 []byte = []byte(`" class="mod_button"><button class="username edit_item">Edit</button></a> `)
|
var topic_49 []byte = []byte(`" class="mod_button"><button class="username edit_item">Edit</button></a> `)
|
||||||
var topic_48 []byte = []byte(`<a href="/reply/delete/submit/`)
|
var topic_50 []byte = []byte(`<a href="/reply/delete/submit/`)
|
||||||
var topic_49 []byte = []byte(`" class="mod_button"><button class="username delete_item">Delete</button></a> `)
|
var topic_51 []byte = []byte(`" class="mod_button"><button class="username delete_item">Delete</button></a> `)
|
||||||
var topic_50 []byte = []byte(`
|
var topic_52 []byte = []byte(`
|
||||||
<a href="/report/submit/`)
|
<a href="/report/submit/`)
|
||||||
var topic_51 []byte = []byte(`?session=`)
|
var topic_53 []byte = []byte(`?session=`)
|
||||||
var topic_52 []byte = []byte(`&type=reply" class="mod_button"><button class="username report_item">Report</button></a>
|
var topic_54 []byte = []byte(`&type=reply" class="mod_button"><button class="username report_item">Report</button></a>
|
||||||
<a class="username hide_on_micro" `)
|
<a class="username hide_on_micro" `)
|
||||||
var topic_53 []byte = []byte(`style="float: right;">`)
|
var topic_55 []byte = []byte(`style="float: right;">`)
|
||||||
var topic_54 []byte = []byte(`style="color: #505050;float: right;">Level `)
|
var topic_56 []byte = []byte(`style="color: #505050;float: right;">Level `)
|
||||||
var topic_55 []byte = []byte(`</a>
|
var topic_57 []byte = []byte(`</a>
|
||||||
</div>
|
</div>
|
||||||
`)
|
`)
|
||||||
var topic_56 []byte = []byte(`</div>
|
var topic_58 []byte = []byte(`</div>
|
||||||
`)
|
`)
|
||||||
var topic_57 []byte = []byte(`
|
var topic_59 []byte = []byte(`
|
||||||
<div class="rowblock">
|
<div class="rowblock">
|
||||||
<form action="/reply/create/" method="post">
|
<form action="/reply/create/" method="post">
|
||||||
<input name="tid" value='`)
|
<input name="tid" value='`)
|
||||||
var topic_58 []byte = []byte(`' type="hidden" />
|
var topic_60 []byte = []byte(`' type="hidden" />
|
||||||
<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>
|
||||||
</div>
|
</div>
|
||||||
|
@ -163,48 +166,51 @@ var footer_0 []byte = []byte(` <!--<link rel="stylesheet" href="https://use.fo
|
||||||
</div><div style="clear: both;"></div></div></div>
|
</div><div style="clear: both;"></div></div></div>
|
||||||
</body>
|
</body>
|
||||||
</html>`)
|
</html>`)
|
||||||
var topic_alt_0 []byte = []byte(`<div class="prev_button"><a href="/topic/`)
|
var topic_alt_0 []byte = []byte(`<div id="prevFloat" class="prev_button"><a class="prev_link" href="/topic/`)
|
||||||
var topic_alt_1 []byte = []byte(`?page=`)
|
var topic_alt_1 []byte = []byte(`?page=`)
|
||||||
var topic_alt_2 []byte = []byte(`"><</a></div>`)
|
var topic_alt_2 []byte = []byte(`"><</a></div>`)
|
||||||
var topic_alt_3 []byte = []byte(`<div class="next_button"><a href="/topic/`)
|
var topic_alt_3 []byte = []byte(`<link rel="prerender" href="/topic/`)
|
||||||
var topic_alt_4 []byte = []byte(`?page=`)
|
var topic_alt_4 []byte = []byte(`?page=`)
|
||||||
var topic_alt_5 []byte = []byte(`">></a></div>`)
|
var topic_alt_5 []byte = []byte(`" />
|
||||||
var topic_alt_6 []byte = []byte(`
|
<div id="nextFloat" class="next_button"><a class="next_link" href="/topic/`)
|
||||||
|
var topic_alt_6 []byte = []byte(`?page=`)
|
||||||
|
var topic_alt_7 []byte = []byte(`">></a></div>`)
|
||||||
|
var topic_alt_8 []byte = []byte(`
|
||||||
<div class="rowblock">
|
<div class="rowblock">
|
||||||
<form action='/topic/edit/submit/`)
|
<form action='/topic/edit/submit/`)
|
||||||
var topic_alt_7 []byte = []byte(`' method="post">
|
var topic_alt_9 []byte = []byte(`' method="post">
|
||||||
<div class="rowitem rowhead`)
|
<div class="rowitem rowhead`)
|
||||||
var topic_alt_8 []byte = []byte(` topic_sticky_head`)
|
var topic_alt_10 []byte = []byte(` topic_sticky_head`)
|
||||||
var topic_alt_9 []byte = []byte(` topic_closed_head`)
|
var topic_alt_11 []byte = []byte(` topic_closed_head`)
|
||||||
var topic_alt_10 []byte = []byte(`">
|
var topic_alt_12 []byte = []byte(`">
|
||||||
<a class='topic_name hide_on_edit'>`)
|
<a class='topic_name hide_on_edit'>`)
|
||||||
var topic_alt_11 []byte = []byte(`</a>
|
var topic_alt_13 []byte = []byte(`</a>
|
||||||
`)
|
`)
|
||||||
var topic_alt_12 []byte = []byte(`<span class='username hide_on_micro topic_status_e topic_status_closed hide_on_edit' title='Status: Closed' style="font-weight:normal;float: right;">🔒︎</span>`)
|
var topic_alt_14 []byte = []byte(`<span class='username hide_on_micro topic_status_e topic_status_closed hide_on_edit' title='Status: Closed' style="font-weight:normal;float: right;position:relative;top:-5px;">🔒︎</span>`)
|
||||||
var topic_alt_13 []byte = []byte(`
|
var topic_alt_15 []byte = []byte(`
|
||||||
<a href='/topic/edit/`)
|
<a href='/topic/edit/`)
|
||||||
var topic_alt_14 []byte = []byte(`' class="username hide_on_edit open_edit topic_button" style="font-weight: normal;margin-left: 6px;">Edit</a>
|
var topic_alt_16 []byte = []byte(`' class="username hide_on_edit open_edit topic_button" style="font-weight: normal;margin-left: 6px;">Edit</a>
|
||||||
<a href='/topic/delete/submit/`)
|
<a href='/topic/delete/submit/`)
|
||||||
var topic_alt_15 []byte = []byte(`' class="username topic_button" style="font-weight: normal;">Delete</a>
|
var topic_alt_17 []byte = []byte(`' class="username topic_button" style="font-weight: normal;">Delete</a>
|
||||||
`)
|
`)
|
||||||
var topic_alt_16 []byte = []byte(`<a href='/topic/unstick/submit/`)
|
var topic_alt_18 []byte = []byte(`<a href='/topic/unstick/submit/`)
|
||||||
var topic_alt_17 []byte = []byte(`' class="username topic_button" style="font-weight: normal;">Unpin</a>`)
|
var topic_alt_19 []byte = []byte(`' class="username topic_button" style="font-weight: normal;">Unpin</a>`)
|
||||||
var topic_alt_18 []byte = []byte(`<a href='/topic/stick/submit/`)
|
var topic_alt_20 []byte = []byte(`<a href='/topic/stick/submit/`)
|
||||||
var topic_alt_19 []byte = []byte(`' class="username topic_button" style="font-weight: normal;">Pin</a>`)
|
var topic_alt_21 []byte = []byte(`' class="username topic_button" style="font-weight: normal;">Pin</a>`)
|
||||||
var topic_alt_20 []byte = []byte(`
|
var topic_alt_22 []byte = []byte(`
|
||||||
|
|
||||||
<input class='show_on_edit topic_name_input' name="topic_name" value='`)
|
<input class='show_on_edit topic_name_input' name="topic_name" value='`)
|
||||||
var topic_alt_21 []byte = []byte(`' type="text" />
|
var topic_alt_23 []byte = []byte(`' type="text" />
|
||||||
<select name="topic_status" class='show_on_edit topic_status_input' style='float: right;'>
|
<select name="topic_status" class='show_on_edit topic_status_input' style='float: right;'>
|
||||||
<option>open</option>
|
<option>open</option>
|
||||||
<option>closed</option>
|
<option>closed</option>
|
||||||
</select>
|
</select>
|
||||||
<button name="topic-button" class="formbutton show_on_edit submit_edit">Update</button>
|
<button name="topic-button" class="formbutton show_on_edit submit_edit">Update</button>
|
||||||
`)
|
`)
|
||||||
var topic_alt_22 []byte = []byte(`
|
var topic_alt_24 []byte = []byte(`
|
||||||
<a href="/report/submit/`)
|
<a href="/report/submit/`)
|
||||||
var topic_alt_23 []byte = []byte(`?session=`)
|
var topic_alt_25 []byte = []byte(`?session=`)
|
||||||
var topic_alt_24 []byte = []byte(`&type=topic" class="username report_item topic_button" style="font-weight: normal;">Report</a>
|
var topic_alt_26 []byte = []byte(`&type=topic" class="username report_item topic_button" style="font-weight: normal;">Report</a>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
@ -213,75 +219,75 @@ var topic_alt_24 []byte = []byte(`&type=topic" class="username report_item topic
|
||||||
<div class="rowitem passive deletable_block editable_parent post_item" style="background-color: #eaeaea;padding-top: 4px;padding-left: 5px;clear: both;border-bottom: none;padding-right: 4px;padding-bottom: 2px;">
|
<div class="rowitem passive deletable_block editable_parent post_item" style="background-color: #eaeaea;padding-top: 4px;padding-left: 5px;clear: both;border-bottom: none;padding-right: 4px;padding-bottom: 2px;">
|
||||||
<div class="userinfo">
|
<div class="userinfo">
|
||||||
<div class="avatar_item" style="background-image: url(`)
|
<div class="avatar_item" style="background-image: url(`)
|
||||||
var topic_alt_25 []byte = []byte(`), url(/static/white-dot.jpg);background-position: 0px -10px;"> </div>
|
var topic_alt_27 []byte = []byte(`), url(/static/white-dot.jpg);background-position: 0px -10px;"> </div>
|
||||||
<a href="/user/`)
|
<a href="/user/`)
|
||||||
var topic_alt_26 []byte = []byte(`" class="the_name">`)
|
var topic_alt_28 []byte = []byte(`" class="the_name">`)
|
||||||
var topic_alt_27 []byte = []byte(`</a>
|
var topic_alt_29 []byte = []byte(`</a>
|
||||||
`)
|
`)
|
||||||
var topic_alt_28 []byte = []byte(`<div class="tag_block"><div class="tag_pre"></div><div class="post_tag">`)
|
var topic_alt_30 []byte = []byte(`<div class="tag_block"><div class="tag_pre"></div><div class="post_tag">`)
|
||||||
var topic_alt_29 []byte = []byte(`</div><div class="tag_post"></div></div>`)
|
|
||||||
var topic_alt_30 []byte = []byte(`<div class="tag_block"><div class="tag_pre"></div><div class="post_tag post_level">Level `)
|
|
||||||
var topic_alt_31 []byte = []byte(`</div><div class="tag_post"></div></div>`)
|
var topic_alt_31 []byte = []byte(`</div><div class="tag_post"></div></div>`)
|
||||||
var topic_alt_32 []byte = []byte(`
|
var topic_alt_32 []byte = []byte(`<div class="tag_block"><div class="tag_pre"></div><div class="post_tag post_level">Level `)
|
||||||
|
var topic_alt_33 []byte = []byte(`</div><div class="tag_post"></div></div>`)
|
||||||
|
var topic_alt_34 []byte = []byte(`
|
||||||
</div>
|
</div>
|
||||||
<div class="content_container">
|
<div class="content_container">
|
||||||
<div class="hide_on_edit topic_content user_content">`)
|
<div class="hide_on_edit topic_content user_content">`)
|
||||||
var topic_alt_33 []byte = []byte(`</div>
|
var topic_alt_35 []byte = []byte(`</div>
|
||||||
<textarea name="topic_content" class="show_on_edit topic_content_input">`)
|
<textarea name="topic_content" class="show_on_edit topic_content_input">`)
|
||||||
var topic_alt_34 []byte = []byte(`</textarea>
|
var topic_alt_36 []byte = []byte(`</textarea>
|
||||||
<div class="button_container">
|
<div class="button_container">
|
||||||
`)
|
`)
|
||||||
var topic_alt_35 []byte = []byte(`<a href="#" class="action_button action_button_right ip_item">`)
|
var topic_alt_37 []byte = []byte(`<a href="#" title="IP Address" class="action_button action_button_right ip_item">`)
|
||||||
var topic_alt_36 []byte = []byte(`</a>`)
|
var topic_alt_38 []byte = []byte(`</a>`)
|
||||||
var topic_alt_37 []byte = []byte(`
|
var topic_alt_39 []byte = []byte(`
|
||||||
</div>
|
</div>
|
||||||
</div><div style="clear:both;"></div>
|
</div><div style="clear:both;"></div>
|
||||||
</div>
|
</div>
|
||||||
`)
|
`)
|
||||||
var topic_alt_38 []byte = []byte(`
|
var topic_alt_40 []byte = []byte(`
|
||||||
<div class="rowitem passive deletable_block editable_parent post_item">
|
<div class="rowitem passive deletable_block editable_parent post_item">
|
||||||
<div class="userinfo">
|
<div class="userinfo">
|
||||||
<div class="avatar_item" style="background-image: url(`)
|
<div class="avatar_item" style="background-image: url(`)
|
||||||
var topic_alt_39 []byte = []byte(`), url(/static/white-dot.jpg);background-position: 0px -10px;"> </div>
|
var topic_alt_41 []byte = []byte(`), url(/static/white-dot.jpg);background-position: 0px -10px;"> </div>
|
||||||
<a href="/user/`)
|
<a href="/user/`)
|
||||||
var topic_alt_40 []byte = []byte(`" class="the_name">`)
|
var topic_alt_42 []byte = []byte(`" class="the_name">`)
|
||||||
var topic_alt_41 []byte = []byte(`</a>
|
var topic_alt_43 []byte = []byte(`</a>
|
||||||
`)
|
`)
|
||||||
var topic_alt_42 []byte = []byte(`<div class="tag_block"><div class="tag_pre"></div><div class="post_tag">`)
|
var topic_alt_44 []byte = []byte(`<div class="tag_block"><div class="tag_pre"></div><div class="post_tag">`)
|
||||||
var topic_alt_43 []byte = []byte(`</div><div class="tag_post"></div></div>`)
|
|
||||||
var topic_alt_44 []byte = []byte(`<div class="tag_block"><div class="tag_pre"></div><div class="post_tag post_level">Level `)
|
|
||||||
var topic_alt_45 []byte = []byte(`</div><div class="tag_post"></div></div>`)
|
var topic_alt_45 []byte = []byte(`</div><div class="tag_post"></div></div>`)
|
||||||
var topic_alt_46 []byte = []byte(`
|
var topic_alt_46 []byte = []byte(`<div class="tag_block"><div class="tag_pre"></div><div class="post_tag post_level">Level `)
|
||||||
|
var topic_alt_47 []byte = []byte(`</div><div class="tag_post"></div></div>`)
|
||||||
|
var topic_alt_48 []byte = []byte(`
|
||||||
</div>
|
</div>
|
||||||
<div class="content_container">
|
<div class="content_container">
|
||||||
<div class="editable_block user_content">`)
|
<div class="editable_block user_content">`)
|
||||||
var topic_alt_47 []byte = []byte(`</div>
|
var topic_alt_49 []byte = []byte(`</div>
|
||||||
<div class="button_container">
|
<div class="button_container">
|
||||||
`)
|
`)
|
||||||
var topic_alt_48 []byte = []byte(`<a href="/reply/edit/submit/`)
|
var topic_alt_50 []byte = []byte(`<a href="/reply/edit/submit/`)
|
||||||
var topic_alt_49 []byte = []byte(`" class="action_button edit_item">Edit</a>`)
|
var topic_alt_51 []byte = []byte(`" class="action_button edit_item">Edit</a>`)
|
||||||
var topic_alt_50 []byte = []byte(`<a href="/reply/delete/submit/`)
|
var topic_alt_52 []byte = []byte(`<a href="/reply/delete/submit/`)
|
||||||
var topic_alt_51 []byte = []byte(`" class="action_button delete_item">Delete</a>`)
|
var topic_alt_53 []byte = []byte(`" class="action_button delete_item">Delete</a>`)
|
||||||
var topic_alt_52 []byte = []byte(`
|
var topic_alt_54 []byte = []byte(`
|
||||||
<a href="/report/submit/`)
|
<a href="/report/submit/`)
|
||||||
var topic_alt_53 []byte = []byte(`?session=`)
|
var topic_alt_55 []byte = []byte(`?session=`)
|
||||||
var topic_alt_54 []byte = []byte(`&type=reply" class="action_button report_item">Report</a>
|
var topic_alt_56 []byte = []byte(`&type=reply" class="action_button report_item">Report</a>
|
||||||
`)
|
`)
|
||||||
var topic_alt_55 []byte = []byte(`<a href="#" class="action_button action_button_right ip_item">`)
|
var topic_alt_57 []byte = []byte(`<a href="#" title="IP Address" class="action_button action_button_right ip_item">`)
|
||||||
var topic_alt_56 []byte = []byte(`</a>`)
|
var topic_alt_58 []byte = []byte(`</a>`)
|
||||||
var topic_alt_57 []byte = []byte(`
|
var topic_alt_59 []byte = []byte(`
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="clear:both;"></div>
|
<div style="clear:both;"></div>
|
||||||
</div>
|
</div>
|
||||||
`)
|
`)
|
||||||
var topic_alt_58 []byte = []byte(`</div>
|
var topic_alt_60 []byte = []byte(`</div>
|
||||||
`)
|
`)
|
||||||
var topic_alt_59 []byte = []byte(`
|
var topic_alt_61 []byte = []byte(`
|
||||||
<div class="rowblock" style="border-top: none;">
|
<div class="rowblock" style="border-top: none;">
|
||||||
<form action="/reply/create/" method="post">
|
<form action="/reply/create/" method="post">
|
||||||
<input name="tid" value='`)
|
<input name="tid" value='`)
|
||||||
var topic_alt_60 []byte = []byte(`' type="hidden" />
|
var topic_alt_62 []byte = []byte(`' type="hidden" />
|
||||||
<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>
|
||||||
</div>
|
</div>
|
||||||
|
@ -399,7 +405,7 @@ var topics_6 []byte = []byte(`">
|
||||||
<a href="/topic/`)
|
<a href="/topic/`)
|
||||||
var topics_7 []byte = []byte(`">`)
|
var topics_7 []byte = []byte(`">`)
|
||||||
var topics_8 []byte = []byte(`</a> `)
|
var topics_8 []byte = []byte(`</a> `)
|
||||||
var topics_9 []byte = []byte(`<span class="username topic_status_e topic_status_closed" style="float: right;" title="Status: Closed">🔒︎</span>`)
|
var topics_9 []byte = []byte(`<span class="username topic_status_e topic_status_closed" style="float: right;position:relative;top:-5px;" title="Status: Closed">🔒︎</span>`)
|
||||||
var topics_10 []byte = []byte(`
|
var topics_10 []byte = []byte(`
|
||||||
</div>
|
</div>
|
||||||
`)
|
`)
|
||||||
|
@ -407,27 +413,36 @@ var topics_11 []byte = []byte(`<div class="rowitem passive">There aren't any top
|
||||||
var topics_12 []byte = []byte(`
|
var topics_12 []byte = []byte(`
|
||||||
</div>
|
</div>
|
||||||
`)
|
`)
|
||||||
var forum_0 []byte = []byte(`
|
var forum_0 []byte = []byte(`<div id="prevFloat" class="prev_button"><a class="prev_link" href="/forum/`)
|
||||||
|
var forum_1 []byte = []byte(`?page=`)
|
||||||
|
var forum_2 []byte = []byte(`"><</a></div>`)
|
||||||
|
var forum_3 []byte = []byte(`<link rel="prerender" href="/forum/`)
|
||||||
|
var forum_4 []byte = []byte(`?page=`)
|
||||||
|
var forum_5 []byte = []byte(`" />
|
||||||
|
<div id="nextFloat" class="next_button"><a class="next_link" href="/forum/`)
|
||||||
|
var forum_6 []byte = []byte(`?page=`)
|
||||||
|
var forum_7 []byte = []byte(`">></a></div>`)
|
||||||
|
var forum_8 []byte = []byte(`
|
||||||
<div class="rowblock">
|
<div class="rowblock">
|
||||||
<div class="rowitem rowhead"><a>`)
|
<div class="rowitem rowhead"><a>`)
|
||||||
var forum_1 []byte = []byte(`</a></div>
|
var forum_9 []byte = []byte(`</a></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="rowblock">
|
<div class="rowblock">
|
||||||
`)
|
`)
|
||||||
var forum_2 []byte = []byte(`<div class="rowitem passive" style="`)
|
var forum_10 []byte = []byte(`<div class="rowitem passive" style="`)
|
||||||
var forum_3 []byte = []byte(`background-image: url(`)
|
var forum_11 []byte = []byte(`background-image: url(`)
|
||||||
var forum_4 []byte = []byte(`);background-position: left;background-repeat: no-repeat;background-size: 64px;padding-left: 72px;`)
|
var forum_12 []byte = []byte(`);background-position: left;background-repeat: no-repeat;background-size: 64px;padding-left: 72px;`)
|
||||||
var forum_5 []byte = []byte(`background-color: #FFFFCC;`)
|
var forum_13 []byte = []byte(`background-color: #FFFFCC;`)
|
||||||
var forum_6 []byte = []byte(`background-color: #eaeaea;`)
|
var forum_14 []byte = []byte(`background-color: #eaeaea;`)
|
||||||
var forum_7 []byte = []byte(`">
|
var forum_15 []byte = []byte(`">
|
||||||
<a href="/topic/`)
|
<a href="/topic/`)
|
||||||
var forum_8 []byte = []byte(`">`)
|
var forum_16 []byte = []byte(`">`)
|
||||||
var forum_9 []byte = []byte(`</a> `)
|
var forum_17 []byte = []byte(`</a> `)
|
||||||
var forum_10 []byte = []byte(`<span class="username topic_status_e topic_status_closed" title="Status: Closed" style="float: right;">🔒︎</span>`)
|
var forum_18 []byte = []byte(`<span class="username topic_status_e topic_status_closed" title="Status: Closed" style="float: right;position:relative;top:-5px;">🔒︎</span>`)
|
||||||
var forum_11 []byte = []byte(`
|
var forum_19 []byte = []byte(`
|
||||||
</div>
|
</div>
|
||||||
`)
|
`)
|
||||||
var forum_12 []byte = []byte(`<div class="rowitem passive">There aren't any topics in this forum yet.</div>`)
|
var forum_20 []byte = []byte(`<div class="rowitem passive">There aren't any topics in this forum yet.</div>`)
|
||||||
var forum_13 []byte = []byte(`
|
var forum_21 []byte = []byte(`
|
||||||
</div>
|
</div>
|
||||||
`)
|
`)
|
||||||
|
|
|
@ -54,124 +54,128 @@ w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||||
w.Write(topic_4)
|
w.Write(topic_4)
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Page + 1)))
|
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Page + 1)))
|
||||||
w.Write(topic_5)
|
w.Write(topic_5)
|
||||||
}
|
|
||||||
w.Write(topic_6)
|
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||||
|
w.Write(topic_6)
|
||||||
|
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Page + 1)))
|
||||||
w.Write(topic_7)
|
w.Write(topic_7)
|
||||||
if tmpl_topic_vars.Topic.Sticky {
|
}
|
||||||
w.Write(topic_8)
|
w.Write(topic_8)
|
||||||
|
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||||
|
w.Write(topic_9)
|
||||||
|
if tmpl_topic_vars.Topic.Sticky {
|
||||||
|
w.Write(topic_10)
|
||||||
} else {
|
} else {
|
||||||
if tmpl_topic_vars.Topic.Is_Closed {
|
if tmpl_topic_vars.Topic.Is_Closed {
|
||||||
w.Write(topic_9)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
w.Write(topic_10)
|
|
||||||
w.Write([]byte(tmpl_topic_vars.Topic.Title))
|
|
||||||
w.Write(topic_11)
|
w.Write(topic_11)
|
||||||
if tmpl_topic_vars.Topic.Is_Closed {
|
}
|
||||||
|
}
|
||||||
w.Write(topic_12)
|
w.Write(topic_12)
|
||||||
|
w.Write([]byte(tmpl_topic_vars.Topic.Title))
|
||||||
|
w.Write(topic_13)
|
||||||
|
if tmpl_topic_vars.Topic.Is_Closed {
|
||||||
|
w.Write(topic_14)
|
||||||
}
|
}
|
||||||
if tmpl_topic_vars.CurrentUser.Is_Mod {
|
if tmpl_topic_vars.CurrentUser.Is_Mod {
|
||||||
w.Write(topic_13)
|
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
|
||||||
w.Write(topic_14)
|
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
|
||||||
w.Write(topic_15)
|
w.Write(topic_15)
|
||||||
if tmpl_topic_vars.Topic.Sticky {
|
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||||
w.Write(topic_16)
|
w.Write(topic_16)
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||||
w.Write(topic_17)
|
w.Write(topic_17)
|
||||||
} else {
|
if tmpl_topic_vars.Topic.Sticky {
|
||||||
w.Write(topic_18)
|
w.Write(topic_18)
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||||
w.Write(topic_19)
|
w.Write(topic_19)
|
||||||
}
|
} else {
|
||||||
w.Write(topic_20)
|
w.Write(topic_20)
|
||||||
w.Write([]byte(tmpl_topic_vars.Topic.Title))
|
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||||
w.Write(topic_21)
|
w.Write(topic_21)
|
||||||
}
|
}
|
||||||
w.Write(topic_22)
|
w.Write(topic_22)
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
w.Write([]byte(tmpl_topic_vars.Topic.Title))
|
||||||
w.Write(topic_23)
|
w.Write(topic_23)
|
||||||
w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
|
|
||||||
w.Write(topic_24)
|
|
||||||
if tmpl_topic_vars.Topic.Avatar != "" {
|
|
||||||
w.Write(topic_25)
|
|
||||||
w.Write([]byte(tmpl_topic_vars.Topic.Avatar))
|
|
||||||
w.Write(topic_26)
|
|
||||||
if tmpl_topic_vars.Topic.ContentLines <= 5 {
|
|
||||||
w.Write(topic_27)
|
|
||||||
}
|
}
|
||||||
|
w.Write(topic_24)
|
||||||
|
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||||
|
w.Write(topic_25)
|
||||||
|
w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
|
||||||
|
w.Write(topic_26)
|
||||||
|
if tmpl_topic_vars.Topic.Avatar != "" {
|
||||||
|
w.Write(topic_27)
|
||||||
|
w.Write([]byte(tmpl_topic_vars.Topic.Avatar))
|
||||||
w.Write(topic_28)
|
w.Write(topic_28)
|
||||||
|
if tmpl_topic_vars.Topic.ContentLines <= 5 {
|
||||||
|
w.Write(topic_29)
|
||||||
|
}
|
||||||
|
w.Write(topic_30)
|
||||||
w.Write([]byte(string(tmpl_topic_vars.Topic.Css)))
|
w.Write([]byte(string(tmpl_topic_vars.Topic.Css)))
|
||||||
}
|
}
|
||||||
w.Write(topic_29)
|
|
||||||
w.Write([]byte(string(tmpl_topic_vars.Topic.Content.(template.HTML))))
|
|
||||||
w.Write(topic_30)
|
|
||||||
w.Write([]byte(string(tmpl_topic_vars.Topic.Content.(template.HTML))))
|
|
||||||
w.Write(topic_31)
|
w.Write(topic_31)
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.CreatedBy)))
|
w.Write([]byte(string(tmpl_topic_vars.Topic.Content.(template.HTML))))
|
||||||
w.Write(topic_32)
|
w.Write(topic_32)
|
||||||
w.Write([]byte(tmpl_topic_vars.Topic.CreatedByName))
|
w.Write([]byte(string(tmpl_topic_vars.Topic.Content.(template.HTML))))
|
||||||
w.Write(topic_33)
|
w.Write(topic_33)
|
||||||
if tmpl_topic_vars.Topic.Tag != "" {
|
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.CreatedBy)))
|
||||||
w.Write(topic_34)
|
w.Write(topic_34)
|
||||||
|
w.Write([]byte(tmpl_topic_vars.Topic.CreatedByName))
|
||||||
|
w.Write(topic_35)
|
||||||
|
if tmpl_topic_vars.Topic.Tag != "" {
|
||||||
|
w.Write(topic_36)
|
||||||
w.Write([]byte(tmpl_topic_vars.Topic.Tag))
|
w.Write([]byte(tmpl_topic_vars.Topic.Tag))
|
||||||
} else {
|
} else {
|
||||||
w.Write(topic_35)
|
w.Write(topic_37)
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.Level)))
|
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.Level)))
|
||||||
}
|
}
|
||||||
w.Write(topic_36)
|
w.Write(topic_38)
|
||||||
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 {
|
||||||
w.Write(topic_37)
|
|
||||||
if item.Avatar != "" {
|
|
||||||
w.Write(topic_38)
|
|
||||||
w.Write([]byte(item.Avatar))
|
|
||||||
w.Write(topic_39)
|
w.Write(topic_39)
|
||||||
if item.ContentLines <= 5 {
|
if item.Avatar != "" {
|
||||||
w.Write(topic_40)
|
w.Write(topic_40)
|
||||||
}
|
w.Write([]byte(item.Avatar))
|
||||||
w.Write(topic_41)
|
w.Write(topic_41)
|
||||||
|
if item.ContentLines <= 5 {
|
||||||
|
w.Write(topic_42)
|
||||||
|
}
|
||||||
|
w.Write(topic_43)
|
||||||
w.Write([]byte(string(item.Css)))
|
w.Write([]byte(string(item.Css)))
|
||||||
}
|
}
|
||||||
w.Write(topic_42)
|
|
||||||
w.Write([]byte(string(item.ContentHtml)))
|
|
||||||
w.Write(topic_43)
|
|
||||||
w.Write([]byte(strconv.Itoa(item.CreatedBy)))
|
|
||||||
w.Write(topic_44)
|
w.Write(topic_44)
|
||||||
w.Write([]byte(item.CreatedByName))
|
w.Write([]byte(string(item.ContentHtml)))
|
||||||
w.Write(topic_45)
|
w.Write(topic_45)
|
||||||
if tmpl_topic_vars.CurrentUser.Perms.EditReply {
|
w.Write([]byte(strconv.Itoa(item.CreatedBy)))
|
||||||
w.Write(topic_46)
|
w.Write(topic_46)
|
||||||
w.Write([]byte(strconv.Itoa(item.ID)))
|
w.Write([]byte(item.CreatedByName))
|
||||||
w.Write(topic_47)
|
w.Write(topic_47)
|
||||||
}
|
if tmpl_topic_vars.CurrentUser.Perms.EditReply {
|
||||||
if tmpl_topic_vars.CurrentUser.Perms.DeleteReply {
|
|
||||||
w.Write(topic_48)
|
w.Write(topic_48)
|
||||||
w.Write([]byte(strconv.Itoa(item.ID)))
|
w.Write([]byte(strconv.Itoa(item.ID)))
|
||||||
w.Write(topic_49)
|
w.Write(topic_49)
|
||||||
}
|
}
|
||||||
|
if tmpl_topic_vars.CurrentUser.Perms.DeleteReply {
|
||||||
w.Write(topic_50)
|
w.Write(topic_50)
|
||||||
w.Write([]byte(strconv.Itoa(item.ID)))
|
w.Write([]byte(strconv.Itoa(item.ID)))
|
||||||
w.Write(topic_51)
|
w.Write(topic_51)
|
||||||
w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
|
}
|
||||||
w.Write(topic_52)
|
w.Write(topic_52)
|
||||||
if item.Tag != "" {
|
w.Write([]byte(strconv.Itoa(item.ID)))
|
||||||
w.Write(topic_53)
|
w.Write(topic_53)
|
||||||
|
w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
|
||||||
|
w.Write(topic_54)
|
||||||
|
if item.Tag != "" {
|
||||||
|
w.Write(topic_55)
|
||||||
w.Write([]byte(item.Tag))
|
w.Write([]byte(item.Tag))
|
||||||
} else {
|
} else {
|
||||||
w.Write(topic_54)
|
w.Write(topic_56)
|
||||||
w.Write([]byte(strconv.Itoa(item.Level)))
|
w.Write([]byte(strconv.Itoa(item.Level)))
|
||||||
}
|
}
|
||||||
w.Write(topic_55)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
w.Write(topic_56)
|
|
||||||
if tmpl_topic_vars.CurrentUser.Perms.CreateReply {
|
|
||||||
w.Write(topic_57)
|
w.Write(topic_57)
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
}
|
||||||
|
}
|
||||||
w.Write(topic_58)
|
w.Write(topic_58)
|
||||||
|
if tmpl_topic_vars.CurrentUser.Perms.CreateReply {
|
||||||
|
w.Write(topic_59)
|
||||||
|
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||||
|
w.Write(topic_60)
|
||||||
}
|
}
|
||||||
w.Write(footer_0)
|
w.Write(footer_0)
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,122 +54,126 @@ w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
|
||||||
w.Write(topic_alt_4)
|
w.Write(topic_alt_4)
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Page + 1)))
|
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Page + 1)))
|
||||||
w.Write(topic_alt_5)
|
w.Write(topic_alt_5)
|
||||||
}
|
|
||||||
w.Write(topic_alt_6)
|
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
|
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
|
||||||
|
w.Write(topic_alt_6)
|
||||||
|
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Page + 1)))
|
||||||
w.Write(topic_alt_7)
|
w.Write(topic_alt_7)
|
||||||
if tmpl_topic_alt_vars.Topic.Sticky {
|
}
|
||||||
w.Write(topic_alt_8)
|
w.Write(topic_alt_8)
|
||||||
|
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
|
||||||
|
w.Write(topic_alt_9)
|
||||||
|
if tmpl_topic_alt_vars.Topic.Sticky {
|
||||||
|
w.Write(topic_alt_10)
|
||||||
} else {
|
} else {
|
||||||
if tmpl_topic_alt_vars.Topic.Is_Closed {
|
if tmpl_topic_alt_vars.Topic.Is_Closed {
|
||||||
w.Write(topic_alt_9)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
w.Write(topic_alt_10)
|
|
||||||
w.Write([]byte(tmpl_topic_alt_vars.Topic.Title))
|
|
||||||
w.Write(topic_alt_11)
|
w.Write(topic_alt_11)
|
||||||
if tmpl_topic_alt_vars.Topic.Is_Closed {
|
}
|
||||||
|
}
|
||||||
w.Write(topic_alt_12)
|
w.Write(topic_alt_12)
|
||||||
|
w.Write([]byte(tmpl_topic_alt_vars.Topic.Title))
|
||||||
|
w.Write(topic_alt_13)
|
||||||
|
if tmpl_topic_alt_vars.Topic.Is_Closed {
|
||||||
|
w.Write(topic_alt_14)
|
||||||
}
|
}
|
||||||
if tmpl_topic_alt_vars.CurrentUser.Is_Mod {
|
if tmpl_topic_alt_vars.CurrentUser.Is_Mod {
|
||||||
w.Write(topic_alt_13)
|
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
|
|
||||||
w.Write(topic_alt_14)
|
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
|
|
||||||
w.Write(topic_alt_15)
|
w.Write(topic_alt_15)
|
||||||
if tmpl_topic_alt_vars.Topic.Sticky {
|
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
|
||||||
w.Write(topic_alt_16)
|
w.Write(topic_alt_16)
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
|
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
|
||||||
w.Write(topic_alt_17)
|
w.Write(topic_alt_17)
|
||||||
} else {
|
if tmpl_topic_alt_vars.Topic.Sticky {
|
||||||
w.Write(topic_alt_18)
|
w.Write(topic_alt_18)
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
|
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
|
||||||
w.Write(topic_alt_19)
|
w.Write(topic_alt_19)
|
||||||
}
|
} else {
|
||||||
w.Write(topic_alt_20)
|
w.Write(topic_alt_20)
|
||||||
w.Write([]byte(tmpl_topic_alt_vars.Topic.Title))
|
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
|
||||||
w.Write(topic_alt_21)
|
w.Write(topic_alt_21)
|
||||||
}
|
}
|
||||||
w.Write(topic_alt_22)
|
w.Write(topic_alt_22)
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
|
w.Write([]byte(tmpl_topic_alt_vars.Topic.Title))
|
||||||
w.Write(topic_alt_23)
|
w.Write(topic_alt_23)
|
||||||
w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
|
}
|
||||||
w.Write(topic_alt_24)
|
w.Write(topic_alt_24)
|
||||||
w.Write([]byte(tmpl_topic_alt_vars.Topic.Avatar))
|
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
|
||||||
w.Write(topic_alt_25)
|
w.Write(topic_alt_25)
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.CreatedBy)))
|
w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
|
||||||
w.Write(topic_alt_26)
|
w.Write(topic_alt_26)
|
||||||
w.Write([]byte(tmpl_topic_alt_vars.Topic.CreatedByName))
|
w.Write([]byte(tmpl_topic_alt_vars.Topic.Avatar))
|
||||||
w.Write(topic_alt_27)
|
w.Write(topic_alt_27)
|
||||||
if tmpl_topic_alt_vars.Topic.Tag != "" {
|
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.CreatedBy)))
|
||||||
w.Write(topic_alt_28)
|
w.Write(topic_alt_28)
|
||||||
w.Write([]byte(tmpl_topic_alt_vars.Topic.Tag))
|
w.Write([]byte(tmpl_topic_alt_vars.Topic.CreatedByName))
|
||||||
w.Write(topic_alt_29)
|
w.Write(topic_alt_29)
|
||||||
} else {
|
if tmpl_topic_alt_vars.Topic.Tag != "" {
|
||||||
w.Write(topic_alt_30)
|
w.Write(topic_alt_30)
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.Level)))
|
w.Write([]byte(tmpl_topic_alt_vars.Topic.Tag))
|
||||||
w.Write(topic_alt_31)
|
w.Write(topic_alt_31)
|
||||||
}
|
} else {
|
||||||
w.Write(topic_alt_32)
|
w.Write(topic_alt_32)
|
||||||
w.Write([]byte(string(tmpl_topic_alt_vars.Topic.Content.(template.HTML))))
|
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.Level)))
|
||||||
w.Write(topic_alt_33)
|
w.Write(topic_alt_33)
|
||||||
w.Write([]byte(string(tmpl_topic_alt_vars.Topic.Content.(template.HTML))))
|
|
||||||
w.Write(topic_alt_34)
|
|
||||||
if tmpl_topic_alt_vars.CurrentUser.Perms.ViewIPs {
|
|
||||||
w.Write(topic_alt_35)
|
|
||||||
w.Write([]byte(tmpl_topic_alt_vars.Topic.IpAddress))
|
|
||||||
w.Write(topic_alt_36)
|
|
||||||
}
|
}
|
||||||
|
w.Write(topic_alt_34)
|
||||||
|
w.Write([]byte(string(tmpl_topic_alt_vars.Topic.Content.(template.HTML))))
|
||||||
|
w.Write(topic_alt_35)
|
||||||
|
w.Write([]byte(string(tmpl_topic_alt_vars.Topic.Content.(template.HTML))))
|
||||||
|
w.Write(topic_alt_36)
|
||||||
|
if tmpl_topic_alt_vars.CurrentUser.Perms.ViewIPs {
|
||||||
w.Write(topic_alt_37)
|
w.Write(topic_alt_37)
|
||||||
|
w.Write([]byte(tmpl_topic_alt_vars.Topic.IpAddress))
|
||||||
|
w.Write(topic_alt_38)
|
||||||
|
}
|
||||||
|
w.Write(topic_alt_39)
|
||||||
if len(tmpl_topic_alt_vars.ItemList) != 0 {
|
if len(tmpl_topic_alt_vars.ItemList) != 0 {
|
||||||
for _, item := range tmpl_topic_alt_vars.ItemList {
|
for _, item := range tmpl_topic_alt_vars.ItemList {
|
||||||
w.Write(topic_alt_38)
|
|
||||||
w.Write([]byte(item.Avatar))
|
|
||||||
w.Write(topic_alt_39)
|
|
||||||
w.Write([]byte(strconv.Itoa(item.CreatedBy)))
|
|
||||||
w.Write(topic_alt_40)
|
w.Write(topic_alt_40)
|
||||||
w.Write([]byte(item.CreatedByName))
|
w.Write([]byte(item.Avatar))
|
||||||
w.Write(topic_alt_41)
|
w.Write(topic_alt_41)
|
||||||
if item.Tag != "" {
|
w.Write([]byte(strconv.Itoa(item.CreatedBy)))
|
||||||
w.Write(topic_alt_42)
|
w.Write(topic_alt_42)
|
||||||
w.Write([]byte(item.Tag))
|
w.Write([]byte(item.CreatedByName))
|
||||||
w.Write(topic_alt_43)
|
w.Write(topic_alt_43)
|
||||||
} else {
|
if item.Tag != "" {
|
||||||
w.Write(topic_alt_44)
|
w.Write(topic_alt_44)
|
||||||
w.Write([]byte(strconv.Itoa(item.Level)))
|
w.Write([]byte(item.Tag))
|
||||||
w.Write(topic_alt_45)
|
w.Write(topic_alt_45)
|
||||||
}
|
} else {
|
||||||
w.Write(topic_alt_46)
|
w.Write(topic_alt_46)
|
||||||
w.Write([]byte(string(item.ContentHtml)))
|
w.Write([]byte(strconv.Itoa(item.Level)))
|
||||||
w.Write(topic_alt_47)
|
w.Write(topic_alt_47)
|
||||||
if tmpl_topic_alt_vars.CurrentUser.Perms.EditReply {
|
|
||||||
w.Write(topic_alt_48)
|
|
||||||
w.Write([]byte(strconv.Itoa(item.ID)))
|
|
||||||
w.Write(topic_alt_49)
|
|
||||||
}
|
}
|
||||||
if tmpl_topic_alt_vars.CurrentUser.Perms.DeleteReply {
|
w.Write(topic_alt_48)
|
||||||
|
w.Write([]byte(string(item.ContentHtml)))
|
||||||
|
w.Write(topic_alt_49)
|
||||||
|
if tmpl_topic_alt_vars.CurrentUser.Perms.EditReply {
|
||||||
w.Write(topic_alt_50)
|
w.Write(topic_alt_50)
|
||||||
w.Write([]byte(strconv.Itoa(item.ID)))
|
w.Write([]byte(strconv.Itoa(item.ID)))
|
||||||
w.Write(topic_alt_51)
|
w.Write(topic_alt_51)
|
||||||
}
|
}
|
||||||
|
if tmpl_topic_alt_vars.CurrentUser.Perms.DeleteReply {
|
||||||
w.Write(topic_alt_52)
|
w.Write(topic_alt_52)
|
||||||
w.Write([]byte(strconv.Itoa(item.ID)))
|
w.Write([]byte(strconv.Itoa(item.ID)))
|
||||||
w.Write(topic_alt_53)
|
w.Write(topic_alt_53)
|
||||||
w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
|
}
|
||||||
w.Write(topic_alt_54)
|
w.Write(topic_alt_54)
|
||||||
if tmpl_topic_alt_vars.CurrentUser.Perms.ViewIPs {
|
w.Write([]byte(strconv.Itoa(item.ID)))
|
||||||
w.Write(topic_alt_55)
|
w.Write(topic_alt_55)
|
||||||
w.Write([]byte(item.IpAddress))
|
w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session))
|
||||||
w.Write(topic_alt_56)
|
w.Write(topic_alt_56)
|
||||||
}
|
if tmpl_topic_alt_vars.CurrentUser.Perms.ViewIPs {
|
||||||
w.Write(topic_alt_57)
|
w.Write(topic_alt_57)
|
||||||
}
|
w.Write([]byte(item.IpAddress))
|
||||||
}
|
|
||||||
w.Write(topic_alt_58)
|
w.Write(topic_alt_58)
|
||||||
if tmpl_topic_alt_vars.CurrentUser.Perms.CreateReply {
|
}
|
||||||
w.Write(topic_alt_59)
|
w.Write(topic_alt_59)
|
||||||
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
|
}
|
||||||
|
}
|
||||||
w.Write(topic_alt_60)
|
w.Write(topic_alt_60)
|
||||||
|
if tmpl_topic_alt_vars.CurrentUser.Perms.CreateReply {
|
||||||
|
w.Write(topic_alt_61)
|
||||||
|
w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID)))
|
||||||
|
w.Write(topic_alt_62)
|
||||||
}
|
}
|
||||||
w.Write(footer_0)
|
w.Write(footer_0)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
{{template "header.html" . }}
|
{{template "header.html" . }}
|
||||||
|
{{if gt .Page 1}}<div id="prevFloat" class="prev_button"><a class="prev_link" href="/forum/{{.Forum.ID}}?page={{subtract .Page 1}}"><</a></div>{{end}}
|
||||||
|
{{if ne .LastPage .Page}}<link rel="prerender" href="/forum/{{.Forum.ID}}?page={{add .Page 1}}" />
|
||||||
|
<div id="nextFloat" class="next_button"><a class="next_link" href="/forum/{{.Forum.ID}}?page={{add .Page 1}}">></a></div>{{end}}
|
||||||
<div class="rowblock">
|
<div class="rowblock">
|
||||||
<div class="rowitem rowhead"><a>{{.Title}}</a></div>
|
<div class="rowitem rowhead"><a>{{.Title}}</a></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="rowblock">
|
<div class="rowblock">
|
||||||
{{range .ItemList}}<div class="rowitem passive" style="{{ if .Avatar }}background-image: url({{ .Avatar }});background-position: left;background-repeat: no-repeat;background-size: 64px;padding-left: 72px;{{end}}{{ if .Sticky }}background-color: #FFFFCC;{{else if .Is_Closed}}background-color: #eaeaea;{{end}}">
|
{{range .ItemList}}<div class="rowitem passive" style="{{if .Avatar}}background-image: url({{.Avatar}});background-position: left;background-repeat: no-repeat;background-size: 64px;padding-left: 72px;{{end}}{{if .Sticky}}background-color: #FFFFCC;{{else if .Is_Closed}}background-color: #eaeaea;{{end}}">
|
||||||
<a href="/topic/{{.ID}}">{{.Title}}</a> {{if .Is_Closed}}<span class="username topic_status_e topic_status_closed" title="Status: Closed" style="float: right;">🔒︎</span>{{end}}
|
<a href="/topic/{{.ID}}">{{.Title}}</a> {{if .Is_Closed}}<span class="username topic_status_e topic_status_closed" title="Status: Closed" style="float: right;position:relative;top:-5px;">🔒︎</span>{{end}}
|
||||||
</div>
|
</div>
|
||||||
{{else}}<div class="rowitem passive">There aren't any topics in this forum yet.</div>{{end}}
|
{{else}}<div class="rowitem passive">There aren't any topics in this forum yet.</div>{{end}}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -5,12 +5,15 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="colblock_right">
|
<div class="colblock_right">
|
||||||
{{range .ItemList}}
|
{{range .ItemList}}
|
||||||
<div class="rowitem editable_parent" style="font-weight: normal;">
|
<div class="rowitem editable_parent" style="font-weight: normal;{{if eq .ID 1}}border-bottom-style:solid;{{end}}">
|
||||||
<a class="editable_block" style="font-size: 20px;position:relative;top: -2px;text-transform: none;">{{.Name}}</a>
|
<a class="editable_block" style="font-size: 20px;position:relative;top: -2px;text-transform: none;{{if not .Active}}color:#707070;{{end}}">{{.Name}}</a>
|
||||||
{{if ne .ID 0}}<span style="float: right;">
|
<span style="float: right;">
|
||||||
|
{{if not .Active}}<span class="username" style="color: black;">Hidden</span>{{end}}
|
||||||
|
{{if gt .ID 1}}
|
||||||
<a href="/panel/forums/edit/submit/{{.ID}}" class="username edit_field">Edit</a>
|
<a href="/panel/forums/edit/submit/{{.ID}}" class="username edit_field">Edit</a>
|
||||||
<a href="/panel/forums/delete/{{.ID}}?session={{$.CurrentUser.Session}}" class="username">Delete</a>
|
<a href="/panel/forums/delete/{{.ID}}?session={{$.CurrentUser.Session}}" class="username">Delete</a>
|
||||||
</span>{{end}}
|
{{end}}
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
</div><br />
|
</div><br />
|
||||||
|
@ -23,6 +26,13 @@
|
||||||
<div class="formitem"><a>Forum Name</a></div>
|
<div class="formitem"><a>Forum Name</a></div>
|
||||||
<div class="formitem"><input name="forum-name" type="text" /></div>
|
<div class="formitem"><input name="forum-name" type="text" /></div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="formrow">
|
||||||
|
<div class="formitem"><a>Hidden?</a></div>
|
||||||
|
<div class="formitem"><select name="forum-active">
|
||||||
|
<option value="1">Yes</option>
|
||||||
|
<option value="0">No</option>
|
||||||
|
</select></div>
|
||||||
|
</div>
|
||||||
<div class="formrow">
|
<div class="formrow">
|
||||||
<div class="formitem"><button name="panel-button" class="formbutton">Add Forum</button></div>
|
<div class="formitem"><button name="panel-button" class="formbutton">Add Forum</button></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
<div class="colblock_left">
|
<div class="colblock_left">
|
||||||
<div class="rowitem rowhead"><a href="/panel/">Control Panel</a></div>
|
<div class="rowitem rowhead" style="border-bottom-width:2px;border-bottom-style:solid;"><a href="/panel/">Control Panel</a></div>
|
||||||
<div class="rowitem passive"><a href="/panel/users/">Users</a></div>
|
<div class="rowitem passive"><a href="/panel/users/">Users</a></div>
|
||||||
<div class="rowitem passive"><a href="/panel/groups/">Groups</a></div>
|
<div class="rowitem passive"><a href="/panel/groups/">Groups</a></div>
|
||||||
{{if .CurrentUser.Perms.ManageForums}}<div class="rowitem passive"><a href="/panel/forums/">Forums</a></div>{{end}}
|
{{if .CurrentUser.Perms.ManageForums}}<div class="rowitem passive"><a href="/panel/forums/">Forums</a></div>{{end}}
|
||||||
{{if .CurrentUser.Perms.EditSettings}}<div class="rowitem passive"><a href="/panel/settings/">Settings</a></div>{{end}}
|
{{if .CurrentUser.Perms.EditSettings}}<div class="rowitem passive"><a href="/panel/settings/">Settings</a></div>{{end}}
|
||||||
{{if .CurrentUser.Perms.ManageThemes}}<div class="rowitem passive"><a href="/panel/themes/">Themes</a></div>{{end}}
|
{{if .CurrentUser.Perms.ManageThemes}}<div class="rowitem passive"><a href="/panel/themes/">Themes</a></div>{{end}}
|
||||||
{{if .CurrentUser.Perms.ManagePlugins}}<div class="rowitem passive"><a href="/panel/plugins/">Plugins</a></div>{{end}}
|
{{if .CurrentUser.Perms.ManagePlugins}}<div class="rowitem passive"><a href="/panel/plugins/">Plugins</a></div>{{end}}
|
||||||
<div class="rowitem passive"><a href="/forum/-1">Reported Content</a></div>
|
<div class="rowitem passive"><a href="/forum/1">Reported Content</a></div>
|
||||||
</div>
|
</div>
|
|
@ -16,7 +16,7 @@
|
||||||
<div class="rowitem rowhead"><a>Comments</a></div>
|
<div class="rowitem rowhead"><a>Comments</a></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="colblock_right" style="overflow: hidden;border-top: none;">{{range .ItemList}}
|
<div class="colblock_right" style="overflow: hidden;border-top: none;">{{range .ItemList}}
|
||||||
<div class="rowitem passive deletable_block editable_parent simple" style="{{ if .Avatar }}background-image: url({{.Avatar}}), url(/static/white-dot.jpg);background-position: 0px {{if le .ContentLines 5}}-1{{end}}0px;background-repeat: no-repeat, repeat-y;background-size: 128px;padding-left: 136px;{{.Css}}{{end}}">
|
<div class="rowitem passive deletable_block editable_parent simple" style="{{if .Avatar}}background-image: url({{.Avatar}}), url(/static/white-dot.jpg);background-position: 0px {{if le .ContentLines 5}}-1{{end}}0px;background-repeat: no-repeat, repeat-y;background-size: 128px;padding-left: 136px;{{.Css}}{{end}}">
|
||||||
<span class="editable_block user_content simple">{{.ContentHtml}}</span>
|
<span class="editable_block user_content simple">{{.ContentHtml}}</span>
|
||||||
<br /><br />
|
<br /><br />
|
||||||
<a href="/user/{{.CreatedBy}}" class="username">{{.CreatedByName}}</a>
|
<a href="/user/{{.CreatedBy}}" class="username">{{.CreatedByName}}</a>
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
{{template "header.html" . }}
|
{{template "header.html" . }}
|
||||||
{{if gt .Page 1}}<div class="prev_button"><a href="/topic/{{.Topic.ID}}?page={{subtract .Page 1}}"><</a></div>{{end}}
|
{{if gt .Page 1}}<div id="prevFloat" class="prev_button"><a class="prev_link" href="/topic/{{.Topic.ID}}?page={{subtract .Page 1}}"><</a></div>{{end}}
|
||||||
{{if ne .LastPage .Page}}<div class="next_button"><a href="/topic/{{.Topic.ID}}?page={{add .Page 1}}">></a></div>{{end}}
|
{{if ne .LastPage .Page}}<link rel="prerender" href="/topic/{{.Topic.ID}}?page={{add .Page 1}}" />
|
||||||
|
<div id="nextFloat" class="next_button"><a class="next_link" href="/topic/{{.Topic.ID}}?page={{add .Page 1}}">></a></div>{{end}}
|
||||||
<div class="rowblock">
|
<div class="rowblock">
|
||||||
<form action='/topic/edit/submit/{{.Topic.ID}}' method="post">
|
<form action='/topic/edit/submit/{{.Topic.ID}}' method="post">
|
||||||
<div class="rowitem"{{if .Topic.Sticky}} style="background-color: #FFFFEA;"{{else if .Topic.Is_Closed}} style="background-color: #eaeaea;"{{end}}>
|
<div class="rowitem"{{if .Topic.Sticky}} style="background-color: #FFFFEA;"{{else if .Topic.Is_Closed}} style="background-color: #eaeaea;"{{end}}>
|
||||||
<a class='topic_name hide_on_edit'>{{.Topic.Title}}</a>
|
<a class='topic_name hide_on_edit'>{{.Topic.Title}}</a>
|
||||||
{{if .Topic.Is_Closed}}<span class='username hide_on_micro topic_status_e topic_status_closed hide_on_edit' title='Status: Closed' style="font-weight:normal;float: right;">🔒︎</span>{{end}}
|
{{if .Topic.Is_Closed}}<span class='username hide_on_micro topic_status_e topic_status_closed hide_on_edit' title='Status: Closed' style="font-weight:normal;float: right;position:relative;top:-5px;">🔒︎</span>{{end}}
|
||||||
{{if .CurrentUser.Is_Mod}}
|
{{if .CurrentUser.Is_Mod}}
|
||||||
<a href='/topic/edit/{{.Topic.ID}}' class="username hide_on_edit open_edit" style="font-weight: normal;margin-left: 6px;">Edit</a>
|
<a href='/topic/edit/{{.Topic.ID}}' class="username hide_on_edit open_edit" style="font-weight: normal;margin-left: 6px;">Edit</a>
|
||||||
<a href='/topic/delete/submit/{{.Topic.ID}}' class="username" style="font-weight: normal;">Delete</a>
|
<a href='/topic/delete/submit/{{.Topic.ID}}' class="username" style="font-weight: normal;">Delete</a>
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
{{template "header.html" . }}
|
{{template "header.html" . }}
|
||||||
{{if gt .Page 1}}<div class="prev_button"><a href="/topic/{{.Topic.ID}}?page={{subtract .Page 1}}"><</a></div>{{end}}
|
{{if gt .Page 1}}<div id="prevFloat" class="prev_button"><a class="prev_link" href="/topic/{{.Topic.ID}}?page={{subtract .Page 1}}"><</a></div>{{end}}
|
||||||
{{if ne .LastPage .Page}}<div class="next_button"><a href="/topic/{{.Topic.ID}}?page={{add .Page 1}}">></a></div>{{end}}
|
{{if ne .LastPage .Page}}<link rel="prerender" href="/topic/{{.Topic.ID}}?page={{add .Page 1}}" />
|
||||||
|
<div id="nextFloat" class="next_button"><a class="next_link" href="/topic/{{.Topic.ID}}?page={{add .Page 1}}">></a></div>{{end}}
|
||||||
<div class="rowblock">
|
<div class="rowblock">
|
||||||
<form action='/topic/edit/submit/{{.Topic.ID}}' method="post">
|
<form action='/topic/edit/submit/{{.Topic.ID}}' method="post">
|
||||||
<div class="rowitem rowhead{{if .Topic.Sticky}} topic_sticky_head{{else if .Topic.Is_Closed}} topic_closed_head{{end}}">
|
<div class="rowitem rowhead{{if .Topic.Sticky}} topic_sticky_head{{else if .Topic.Is_Closed}} topic_closed_head{{end}}">
|
||||||
<a class='topic_name hide_on_edit'>{{.Topic.Title}}</a>
|
<a class='topic_name hide_on_edit'>{{.Topic.Title}}</a>
|
||||||
{{if .Topic.Is_Closed}}<span class='username hide_on_micro topic_status_e topic_status_closed hide_on_edit' title='Status: Closed' style="font-weight:normal;float: right;">🔒︎</span>{{end}}
|
{{if .Topic.Is_Closed}}<span class='username hide_on_micro topic_status_e topic_status_closed hide_on_edit' title='Status: Closed' style="font-weight:normal;float: right;position:relative;top:-5px;">🔒︎</span>{{end}}
|
||||||
{{if .CurrentUser.Is_Mod}}
|
{{if .CurrentUser.Is_Mod}}
|
||||||
<a href='/topic/edit/{{.Topic.ID}}' class="username hide_on_edit open_edit topic_button" style="font-weight: normal;margin-left: 6px;">Edit</a>
|
<a href='/topic/edit/{{.Topic.ID}}' class="username hide_on_edit open_edit topic_button" style="font-weight: normal;margin-left: 6px;">Edit</a>
|
||||||
<a href='/topic/delete/submit/{{.Topic.ID}}' class="username topic_button" style="font-weight: normal;">Delete</a>
|
<a href='/topic/delete/submit/{{.Topic.ID}}' class="username topic_button" style="font-weight: normal;">Delete</a>
|
||||||
|
@ -35,7 +36,7 @@
|
||||||
<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>
|
||||||
<div class="button_container">
|
<div class="button_container">
|
||||||
{{/* Element Queries might help with having to use JS. Unfortunately, the W3C is taking a while with it */}}
|
{{/* Element Queries might help with having to use JS. Unfortunately, the W3C is taking a while with it */}}
|
||||||
{{if $.CurrentUser.Perms.ViewIPs}}<a href="#" class="action_button action_button_right ip_item">{{.Topic.IpAddress}}</a>{{end}}
|
{{if $.CurrentUser.Perms.ViewIPs}}<a href="#" title="IP Address" class="action_button action_button_right ip_item">{{.Topic.IpAddress}}</a>{{end}}
|
||||||
</div>
|
</div>
|
||||||
</div><div style="clear:both;"></div>
|
</div><div style="clear:both;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -52,7 +53,7 @@
|
||||||
{{if $.CurrentUser.Perms.EditReply}}<a href="/reply/edit/submit/{{.ID}}" class="action_button edit_item">Edit</a>{{end}}
|
{{if $.CurrentUser.Perms.EditReply}}<a href="/reply/edit/submit/{{.ID}}" class="action_button edit_item">Edit</a>{{end}}
|
||||||
{{if $.CurrentUser.Perms.DeleteReply}}<a href="/reply/delete/submit/{{.ID}}" class="action_button delete_item">Delete</a>{{end}}
|
{{if $.CurrentUser.Perms.DeleteReply}}<a href="/reply/delete/submit/{{.ID}}" class="action_button delete_item">Delete</a>{{end}}
|
||||||
<a href="/report/submit/{{.ID}}?session={{$.CurrentUser.Session}}&type=reply" class="action_button report_item">Report</a>
|
<a href="/report/submit/{{.ID}}?session={{$.CurrentUser.Session}}&type=reply" class="action_button report_item">Report</a>
|
||||||
{{if $.CurrentUser.Perms.ViewIPs}}<a href="#" class="action_button action_button_right ip_item">{{.IpAddress}}</a>{{end}}
|
{{if $.CurrentUser.Perms.ViewIPs}}<a href="#" title="IP Address" class="action_button action_button_right ip_item">{{.IpAddress}}</a>{{end}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="clear:both;"></div>
|
<div style="clear:both;"></div>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="rowblock">
|
<div class="rowblock">
|
||||||
{{range .ItemList}}<div class="rowitem passive" style="{{if .Avatar}}background-image: url({{.Avatar}});background-position: left;background-repeat: no-repeat;background-size: 64px;padding-left: 72px;{{end}}{{if .Sticky}}background-color: #FFFFCC;{{else if .Is_Closed}}background-color: #eaeaea;{{end}}">
|
{{range .ItemList}}<div class="rowitem passive" style="{{if .Avatar}}background-image: url({{.Avatar}});background-position: left;background-repeat: no-repeat;background-size: 64px;padding-left: 72px;{{end}}{{if .Sticky}}background-color: #FFFFCC;{{else if .Is_Closed}}background-color: #eaeaea;{{end}}">
|
||||||
<a href="/topic/{{.ID}}">{{.Title}}</a> {{if .Is_Closed}}<span class="username topic_status_e topic_status_closed" style="float: right;" title="Status: Closed">🔒︎</span>{{end}}
|
<a href="/topic/{{.ID}}">{{.Title}}</a> {{if .Is_Closed}}<span class="username topic_status_e topic_status_closed" style="float: right;position:relative;top:-5px;" title="Status: Closed">🔒︎</span>{{end}}
|
||||||
</div>
|
</div>
|
||||||
{{else}}<div class="rowitem passive">There aren't any topics yet.</div>{{end}}
|
{{else}}<div class="rowitem passive">There aren't any topics yet.</div>{{end}}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -285,14 +285,12 @@ hr { color: silver; border: 1px solid silver; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mostly for textareas */
|
/* Mostly for textareas */
|
||||||
.formitem:only-child
|
.formitem:only-child { width: 100%; }
|
||||||
{
|
|
||||||
width: 97%;
|
|
||||||
}
|
|
||||||
.formitem textarea
|
.formitem textarea
|
||||||
{
|
{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
|
outline-color: #8e8e8e;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tbody
|
.tbody
|
||||||
|
@ -590,6 +588,7 @@ blockquote p
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
padding-left: 5px;
|
padding-left: 5px;
|
||||||
padding-right: 5px;
|
padding-right: 5px;
|
||||||
|
z-index: 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
.prev_button a, .next_button a {
|
.prev_button a, .next_button a {
|
||||||
|
@ -889,8 +888,6 @@ blockquote p
|
||||||
from { transform: translate(0,-50px) scale(0.75); }
|
from { transform: translate(0,-50px) scale(0.75); }
|
||||||
to {}
|
to {}
|
||||||
}
|
}
|
||||||
/*.top img { min-height: 50px !important; }
|
|
||||||
.top h1 { display: none; }*/
|
|
||||||
.right_most { margin-right: 15%; }
|
.right_most { margin-right: 15%; }
|
||||||
|
|
||||||
#back
|
#back
|
||||||
|
|
|
@ -283,14 +283,12 @@ hr { color: silver; border: 1px solid silver; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mostly for textareas */
|
/* Mostly for textareas */
|
||||||
.formitem:only-child
|
.formitem:only-child { width: 100%; }
|
||||||
{
|
|
||||||
width: 97%;
|
|
||||||
}
|
|
||||||
.formitem textarea
|
.formitem textarea
|
||||||
{
|
{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
|
outline-color: #8e8e8e;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tbody
|
.tbody
|
||||||
|
@ -634,6 +632,7 @@ blockquote p
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
padding-left: 5px;
|
padding-left: 5px;
|
||||||
padding-right: 5px;
|
padding-right: 5px;
|
||||||
|
z-index: 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
.prev_button a, .next_button a {
|
.prev_button a, .next_button a {
|
||||||
|
|
|
@ -7,14 +7,12 @@
|
||||||
body
|
body
|
||||||
{
|
{
|
||||||
font-family: arial;
|
font-family: arial;
|
||||||
|
padding-bottom: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Patch for Edge */
|
/* Patch for Edge */
|
||||||
@supports (-ms-ime-align:auto) {
|
@supports (-ms-ime-align:auto) {
|
||||||
.user_content
|
.user_content { font-family: Segoe UI Emoji, arial; }
|
||||||
{
|
|
||||||
font-family: Segoe UI Emoji, arial;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*.move_left{float: left;position: relative;left: 50%;}
|
/*.move_left{float: left;position: relative;left: 50%;}
|
||||||
|
@ -205,14 +203,12 @@ li a
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
/* Mostly for textareas */
|
/* Mostly for textareas */
|
||||||
.formitem:only-child
|
.formitem:only-child { width: 100%; }
|
||||||
{
|
|
||||||
width: 97%;
|
|
||||||
}
|
|
||||||
.formitem textarea
|
.formitem textarea
|
||||||
{
|
{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
|
outline-color: #8e8e8e;
|
||||||
}
|
}
|
||||||
.formitem:has-child()
|
.formitem:has-child()
|
||||||
{
|
{
|
||||||
|
@ -429,6 +425,7 @@ button.username
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
padding-left: 5px;
|
padding-left: 5px;
|
||||||
padding-right: 5px;
|
padding-right: 5px;
|
||||||
|
z-index: 100;
|
||||||
}
|
}
|
||||||
.prev_button a, .next_button a {
|
.prev_button a, .next_button a {
|
||||||
line-height: 28px;
|
line-height: 28px;
|
||||||
|
@ -478,6 +475,7 @@ button.username
|
||||||
.menu_right { padding-right: 5px; }
|
.menu_right { padding-right: 5px; }
|
||||||
.menu_create_topic { display: none;}
|
.menu_create_topic { display: none;}
|
||||||
.hide_on_mobile { display: none; }
|
.hide_on_mobile { display: none; }
|
||||||
|
.prev_button, .next_button { top: auto;bottom: 5px; }
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 470px) {
|
@media (max-width: 470px) {
|
||||||
|
|
|
@ -7,14 +7,12 @@
|
||||||
body
|
body
|
||||||
{
|
{
|
||||||
font-family: arial;
|
font-family: arial;
|
||||||
|
padding-bottom: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Patch for Edge */
|
/* Patch for Edge */
|
||||||
@supports (-ms-ime-align:auto) {
|
@supports (-ms-ime-align:auto) {
|
||||||
.user_content
|
.user_content { font-family: Segoe UI Emoji, arial; }
|
||||||
{
|
|
||||||
font-family: Segoe UI Emoji, arial;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*.move_left{float: left;position: relative;left: 50%;}
|
/*.move_left{float: left;position: relative;left: 50%;}
|
||||||
|
@ -71,10 +69,7 @@ li a
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
padding-top: 0px;
|
padding-top: 0px;
|
||||||
}
|
}
|
||||||
.rowblock:empty
|
.rowblock:empty { display: none; }
|
||||||
{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.colblock_left
|
.colblock_left
|
||||||
{
|
{
|
||||||
|
@ -94,14 +89,8 @@ li a
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
}
|
}
|
||||||
.colblock_left:empty
|
.colblock_left:empty { display: none; }
|
||||||
{
|
.colblock_right:empty { display: none; }
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.colblock_right:empty
|
|
||||||
{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.rowitem
|
.rowitem
|
||||||
{
|
{
|
||||||
|
@ -127,10 +116,7 @@ li a
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: black;
|
color: black;
|
||||||
}
|
}
|
||||||
.rowitem a:hover
|
.rowitem a:hover { color: silver; }
|
||||||
{
|
|
||||||
color: silver;
|
|
||||||
}
|
|
||||||
|
|
||||||
.col_left
|
.col_left
|
||||||
{
|
{
|
||||||
|
@ -161,10 +147,7 @@ li a
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: black;
|
color: black;
|
||||||
}
|
}
|
||||||
.colitem a:hover
|
.colitem a:hover { color: silver; }
|
||||||
{
|
|
||||||
color: silver;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formrow
|
.formrow
|
||||||
{
|
{
|
||||||
|
@ -214,14 +197,12 @@ li a
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mostly for textareas */
|
/* Mostly for textareas */
|
||||||
.formitem:only-child
|
.formitem:only-child { width: 100%; }
|
||||||
{
|
|
||||||
width: 97%;
|
|
||||||
}
|
|
||||||
.formitem textarea
|
.formitem textarea
|
||||||
{
|
{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
|
outline-color: #8e8e8e;
|
||||||
}
|
}
|
||||||
.formitem:has-child()
|
.formitem:has-child()
|
||||||
{
|
{
|
||||||
|
@ -287,11 +268,7 @@ button.username
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.show_on_edit
|
.show_on_edit { display: none; }
|
||||||
{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.alert
|
.alert
|
||||||
{
|
{
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -326,6 +303,7 @@ button.username
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
padding-left: 5px;
|
padding-left: 5px;
|
||||||
padding-right: 5px;
|
padding-right: 5px;
|
||||||
|
z-index: 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
.prev_button a, .next_button a {
|
.prev_button a, .next_button a {
|
||||||
|
@ -378,6 +356,7 @@ button.username
|
||||||
.menu_right { padding-right: 5px; }
|
.menu_right { padding-right: 5px; }
|
||||||
.menu_create_topic { display: none;}
|
.menu_create_topic { display: none;}
|
||||||
.hide_on_mobile { display: none; }
|
.hide_on_mobile { display: none; }
|
||||||
|
.prev_button, .next_button { top: auto;bottom: 5px; }
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 470px) {
|
@media (max-width: 470px) {
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
|
echo "Updating the MySQL Driver"
|
||||||
go get -u github.com/go-sql-driver/mysql
|
go get -u github.com/go-sql-driver/mysql
|
||||||
|
echo "Updating bcrypt"
|
||||||
go get -u golang.org/x/crypto/bcrypt
|
go get -u golang.org/x/crypto/bcrypt
|
|
@ -1,13 +1,17 @@
|
||||||
@echo off
|
@echo off
|
||||||
|
echo Updating the MySQL Driver
|
||||||
go get -u github.com/go-sql-driver/mysql
|
go get -u github.com/go-sql-driver/mysql
|
||||||
if %errorlevel% neq 0 (
|
if %errorlevel% neq 0 (
|
||||||
pause
|
pause
|
||||||
exit /b %errorlevel%
|
exit /b %errorlevel%
|
||||||
)
|
)
|
||||||
|
|
||||||
|
echo Updating bcrypt
|
||||||
go get -u golang.org/x/crypto/bcrypt
|
go get -u golang.org/x/crypto/bcrypt
|
||||||
if %errorlevel% neq 0 (
|
if %errorlevel% neq 0 (
|
||||||
pause
|
pause
|
||||||
exit /b %errorlevel%
|
exit /b %errorlevel%
|
||||||
)
|
)
|
||||||
|
|
||||||
echo The dependencies were successfully updated
|
echo The dependencies were successfully updated
|
||||||
pause
|
pause
|
Loading…
Reference in New Issue