Happy 100th commit! For the 100th commit, I've revamped a good portion of the user interface, and we don't plan on stopping! There's more to come!

Each theme has more of a distinct feel in the control panel now. I moved a large portion of the inline CSS into global.css, tweaked some core code which didn't line up, and added CSS text insertions to make things more flexible.

Revamped the alerts interface. We have more changes coming up!
Added screenshots for Tempra Cursive and Tempra Conflux Mobile to the README.
Added a .htaccess file, just in case someone plops Gosora in Apache's /www/ folder to stop the contents of config.go from becoming publically visible. Never put Gosora in your /www/ folder, Gosora is a standalone program which does NOT use Apache or any other webserver.
Fixed a bug in the inline forum editor.
Added a hand-written Markdown parser which is much faster than the previous Regex based one. This is still a work in progress.
Added support for strikethrough and underline elements to the Markdown parser.
Fixed the missing semicolons in global.js
Revamped the form CSS.
Author bits on the theme manager now link to the author's website.
Improved the profiles a little.
The code in the stylesheets now have a more consistent style.
Fixed a bug in the Cosmo theme relating to the fact that Gosora doesn't have sidebars yet.

There are many more changes which aren't listed here.
If weirdness regarding lines or spacing occurs, I'm experimenting with a new text editor. I hope to have this fixed by the next commit.
This commit is contained in:
Azareal 2017-05-29 15:52:37 +01:00
parent 6c0b37ce30
commit 9b1489b90f
62 changed files with 2475 additions and 1720 deletions

3
.htaccess Normal file
View File

@ -0,0 +1,3 @@
# Gosora doesn't use Apache, this file is just here to stop Apache from blindly serving our config files, etc. when this program isn't intended to be served in such a manner at all
deny from all

View File

@ -104,10 +104,14 @@ We're looking for ways to clean-up the plugin system so that all of them (except
![Tempra Simple Mobile](https://github.com/Azareal/Gosora/blob/master/images/tempra-simple-mobile-375px.png) ![Tempra Simple Mobile](https://github.com/Azareal/Gosora/blob/master/images/tempra-simple-mobile-375px.png)
![Tempra Cursive Theme](https://github.com/Azareal/Gosora/blob/master/images/tempra-cursive.png)
![Tempra Conflux Theme](https://github.com/Azareal/Gosora/blob/master/images/tempra-conflux.png) ![Tempra Conflux Theme](https://github.com/Azareal/Gosora/blob/master/images/tempra-conflux.png)
![Tempra Conflux Mobile](https://github.com/Azareal/Gosora/blob/master/images/tempra-conflux-mobile-320px.png) ![Tempra Conflux Mobile](https://github.com/Azareal/Gosora/blob/master/images/tempra-conflux-mobile-320px.png)
![Tempra Conflux Mobile](https://github.com/Azareal/Gosora/blob/master/images/tempra-conflux-control-panel.png)
![Cosmo Conflux Theme](https://github.com/Azareal/Gosora/blob/master/images/cosmo-conflux.png) ![Cosmo Conflux Theme](https://github.com/Azareal/Gosora/blob/master/images/cosmo-conflux.png)
![Cosmo Theme](https://github.com/Azareal/Gosora/blob/master/images/cosmo.png) ![Cosmo Theme](https://github.com/Azareal/Gosora/blob/master/images/cosmo.png)

View File

@ -13,9 +13,7 @@ type ForumAdmin struct
Active bool Active bool
Preset string Preset string
TopicCount int TopicCount int
PresetLang string PresetLang string
PresetEmoji string
} }
type Forum struct type Forum struct

View File

@ -1,5 +1,6 @@
// Code generated by. DO NOT EDIT. // Code generated by. DO NOT EDIT.
/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */ /* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
// The router generator might be discontinued in favour of syncmaps in Go 1.9, it will be temporarily used for a couple of months as a lockless alternative to maps
package main package main
//import "fmt" //import "fmt"

View File

@ -12,7 +12,7 @@ type GroupAdmin struct
ID int ID int
Name string Name string
Rank string Rank string
RankEmoji string RankClass string
CanEdit bool CanEdit bool
CanDelete bool CanDelete bool
} }

View File

Before

Width:  |  Height:  |  Size: 196 KiB

After

Width:  |  Height:  |  Size: 196 KiB

BIN
images/create-topic.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 31 KiB

BIN
images/group_editor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

BIN
images/group_list.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 385 KiB

After

Width:  |  Height:  |  Size: 240 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 KiB

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,5 @@
package main package main
import "log" import "log"
import "fmt" import "fmt"
import "sync" import "sync"
@ -78,7 +79,7 @@ type Perms struct
ManagePlugins bool ManagePlugins bool
ViewAdminLogs bool ViewAdminLogs bool
ViewIPs bool ViewIPs bool
// Forum permissions // Forum permissions
ViewTopic bool ViewTopic bool
LikeItem bool LikeItem bool
@ -93,7 +94,7 @@ type Perms struct
PinTopic bool PinTopic bool
CloseTopic bool CloseTopic bool
//CloseOwnTopic bool //CloseOwnTopic bool
ExtData interface{} ExtData interface{}
} }
@ -113,7 +114,7 @@ type ForumPerms struct
PinTopic bool PinTopic bool
CloseTopic bool CloseTopic bool
//CloseOwnTopic bool //CloseOwnTopic bool
Overrides bool Overrides bool
ExtData map[string]bool ExtData map[string]bool
} }
@ -122,16 +123,16 @@ func init() {
BlankPerms = Perms{ BlankPerms = Perms{
ExtData: make(map[string]bool), ExtData: make(map[string]bool),
} }
BlankForumPerms = ForumPerms{ BlankForumPerms = ForumPerms{
ExtData: make(map[string]bool), ExtData: make(map[string]bool),
} }
GuestPerms = Perms{ GuestPerms = Perms{
ViewTopic: true, ViewTopic: true,
ExtData: make(map[string]bool), ExtData: make(map[string]bool),
} }
AllPerms = Perms{ AllPerms = Perms{
BanUsers: true, BanUsers: true,
ActivateUsers: true, ActivateUsers: true,
@ -152,7 +153,7 @@ func init() {
ManagePlugins: true, ManagePlugins: true,
ViewAdminLogs: true, ViewAdminLogs: true,
ViewIPs: true, ViewIPs: true,
ViewTopic: true, ViewTopic: true,
LikeItem: true, LikeItem: true,
CreateTopic: true, CreateTopic: true,
@ -163,10 +164,10 @@ func init() {
DeleteReply: true, DeleteReply: true,
PinTopic: true, PinTopic: true,
CloseTopic: true, CloseTopic: true,
ExtData: make(map[string]bool), ExtData: make(map[string]bool),
} }
AllForumPerms = ForumPerms{ AllForumPerms = ForumPerms{
ViewTopic: true, ViewTopic: true,
LikeItem: true, LikeItem: true,
@ -178,11 +179,11 @@ func init() {
DeleteReply: true, DeleteReply: true,
PinTopic: true, PinTopic: true,
CloseTopic: true, CloseTopic: true,
Overrides: true, Overrides: true,
ExtData: make(map[string]bool), ExtData: make(map[string]bool),
} }
ReadWriteForumPerms = ForumPerms{ ReadWriteForumPerms = ForumPerms{
ViewTopic: true, ViewTopic: true,
LikeItem: true, LikeItem: true,
@ -191,7 +192,7 @@ func init() {
Overrides: true, Overrides: true,
ExtData: make(map[string]bool), ExtData: make(map[string]bool),
} }
ReadReplyForumPerms = ForumPerms{ ReadReplyForumPerms = ForumPerms{
ViewTopic: true, ViewTopic: true,
LikeItem: true, LikeItem: true,
@ -199,15 +200,15 @@ func init() {
Overrides: true, Overrides: true,
ExtData: make(map[string]bool), ExtData: make(map[string]bool),
} }
ReadForumPerms = ForumPerms{ ReadForumPerms = ForumPerms{
ViewTopic: true, ViewTopic: true,
Overrides: true, Overrides: true,
ExtData: make(map[string]bool), ExtData: make(map[string]bool),
} }
guest_user.Perms = GuestPerms guest_user.Perms = GuestPerms
if debug { if debug {
fmt.Printf("Guest Perms: ") fmt.Printf("Guest Perms: ")
fmt.Printf("%+v\n", GuestPerms) fmt.Printf("%+v\n", GuestPerms)
@ -262,12 +263,12 @@ var permupdate_mutex sync.Mutex
func permmap_to_query(permmap map[string]ForumPerms, fid int) error { func permmap_to_query(permmap map[string]ForumPerms, fid int) error {
permupdate_mutex.Lock() permupdate_mutex.Lock()
defer permupdate_mutex.Unlock() defer permupdate_mutex.Unlock()
_, err := delete_forum_perms_by_forum_stmt.Exec(fid) _, err := delete_forum_perms_by_forum_stmt.Exec(fid)
if err != nil { if err != nil {
return err return err
} }
perms, err := json.Marshal(permmap["admins"]) perms, err := json.Marshal(permmap["admins"])
if err != nil { if err != nil {
return err return err
@ -276,7 +277,7 @@ func permmap_to_query(permmap map[string]ForumPerms, fid int) error {
if err != nil { if err != nil {
return err return err
} }
perms, err = json.Marshal(permmap["staff"]) perms, err = json.Marshal(permmap["staff"])
if err != nil { if err != nil {
return err return err
@ -285,7 +286,7 @@ func permmap_to_query(permmap map[string]ForumPerms, fid int) error {
if err != nil { if err != nil {
return err return err
} }
perms, err = json.Marshal(permmap["members"]) perms, err = json.Marshal(permmap["members"])
if err != nil { if err != nil {
return err return err
@ -294,7 +295,7 @@ func permmap_to_query(permmap map[string]ForumPerms, fid int) error {
if err != nil { if err != nil {
return err return err
} }
perms, err = json.Marshal(permmap["guests"]) perms, err = json.Marshal(permmap["guests"])
if err != nil { if err != nil {
return err return err
@ -303,7 +304,7 @@ func permmap_to_query(permmap map[string]ForumPerms, fid int) error {
if err != nil { if err != nil {
return err return err
} }
return rebuild_forum_permissions(fid) return rebuild_forum_permissions(fid)
} }
@ -314,7 +315,7 @@ func rebuild_forum_permissions(fid int) error {
return err return err
} }
defer rows.Close() defer rows.Close()
log.Print("Updating the forum permissions") log.Print("Updating the forum permissions")
for rows.Next() { for rows.Next() {
var gid int var gid int
@ -342,7 +343,7 @@ func rebuild_forum_permissions(fid int) error {
var blank_int_list []int var blank_int_list []int
groups[gid].Forums = blank_list groups[gid].Forums = blank_list
groups[gid].CanSee = blank_int_list groups[gid].CanSee = blank_int_list
for ffid, _ := range forums { for ffid, _ := range forums {
forum_perm, ok := forum_perms[gid][ffid] forum_perm, ok := forum_perms[gid][ffid]
if ok { if ok {
@ -353,7 +354,7 @@ func rebuild_forum_permissions(fid int) error {
forum_perm = BlankForumPerms forum_perm = BlankForumPerms
groups[gid].Forums = append(groups[gid].Forums,forum_perm) groups[gid].Forums = append(groups[gid].Forums,forum_perm)
} }
if forum_perm.Overrides { if forum_perm.Overrides {
if forum_perm.ViewTopic { if forum_perm.ViewTopic {
groups[gid].CanSee = append(groups[gid].CanSee, ffid) groups[gid].CanSee = append(groups[gid].CanSee, ffid)
@ -375,7 +376,7 @@ func build_forum_permissions() error {
func strip_invalid_preset(preset string) string { func strip_invalid_preset(preset string) string {
switch(preset) { switch(preset) {
case "all","announce","members","staff","admins","archive": case "all","announce","members","staff","admins","archive","custom":
break break
default: return "" default: return ""
} }
@ -384,17 +385,18 @@ func strip_invalid_preset(preset string) string {
func preset_to_lang(preset string) string { func preset_to_lang(preset string) string {
switch(preset) { switch(preset) {
case "all": return ""//return "Everyone" case "all": return "Public"
case "announce": return "Announcements" case "announce": return "Announcements"
case "members": return "Member Only" case "members": return "Member Only"
case "staff": return "Staff Only" case "staff": return "Staff Only"
case "admins": return "Admin Only" case "admins": return "Admin Only"
case "archive": return "Archive" case "archive": return "Archive"
case "custom": return "Custom"
} }
return "" return ""
} }
func preset_to_emoji(preset string) string { /*func preset_to_emoji(preset string) string {
switch(preset) { switch(preset) {
case "all": return ""//return "Everyone" case "all": return ""//return "Everyone"
case "announce": return "📣" case "announce": return "📣"
@ -404,7 +406,7 @@ func preset_to_emoji(preset string) string {
case "archive": return "☠️" case "archive": return "☠️"
} }
return "" return ""
} }*/
func rebuild_group_permissions(gid int) error { func rebuild_group_permissions(gid int) error {
var permstr []byte var permstr []byte
@ -413,13 +415,13 @@ func rebuild_group_permissions(gid int) error {
if err != nil { if err != nil {
return err return err
} }
tmp_perms := Perms{ExtData: make(map[string]bool)} tmp_perms := Perms{ExtData: make(map[string]bool)}
err = json.Unmarshal(permstr, &tmp_perms) err = json.Unmarshal(permstr, &tmp_perms)
if err != nil { if err != nil {
return err return err
} }
groups[gid].Perms = tmp_perms groups[gid].Perms = tmp_perms
return nil return nil
} }

View File

@ -172,6 +172,7 @@ func bbcode_parse_without_code(data interface{}) interface{} {
msg = bbcode_url_label.ReplaceAllString(msg,"<a href=\"$1$2//$3\" rel=\"nofollow\">$4</i>") msg = bbcode_url_label.ReplaceAllString(msg,"<a href=\"$1$2//$3\" rel=\"nofollow\">$4</i>")
msg = bbcode_quotes.ReplaceAllString(msg,"<span class=\"postQuote\">$1</span>") msg = bbcode_quotes.ReplaceAllString(msg,"<span class=\"postQuote\">$1</span>")
} }
return string(msgbytes) return string(msgbytes)
} }
@ -181,6 +182,7 @@ func bbcode_full_parse(data interface{}) interface{} {
//fmt.Println("BBCode PrePre String:") //fmt.Println("BBCode PrePre String:")
//fmt.Println("`"+msg+"`") //fmt.Println("`"+msg+"`")
//fmt.Println("----") //fmt.Println("----")
msgbytes := []byte(msg) msgbytes := []byte(msg)
has_u := false has_u := false
has_b := false has_b := false
@ -189,6 +191,7 @@ func bbcode_full_parse(data interface{}) interface{} {
has_c := false has_c := false
complex_bbc := false complex_bbc := false
msgbytes = append(msgbytes,space_gap...) msgbytes = append(msgbytes,space_gap...)
//fmt.Println("BBCode Simple Pre:") //fmt.Println("BBCode Simple Pre:")
//fmt.Println("`"+string(msgbytes)+"`") //fmt.Println("`"+string(msgbytes)+"`")
//fmt.Println("----") //fmt.Println("----")
@ -272,8 +275,7 @@ func bbcode_full_parse(data interface{}) interface{} {
if complex_bbc { if complex_bbc {
i := 0 i := 0
var start int var start, lastTag int
var lastTag int
var outbytes []byte var outbytes []byte
//fmt.Println("BBCode Pre:") //fmt.Println("BBCode Pre:")
//fmt.Println("`"+string(msgbytes)+"`") //fmt.Println("`"+string(msgbytes)+"`")
@ -366,5 +368,6 @@ func bbcode_full_parse(data interface{}) interface{} {
} else { } else {
msg = string(msgbytes[0:len(msgbytes) - 10]) msg = string(msgbytes[0:len(msgbytes) - 10])
} }
return msg return msg
} }

View File

@ -1,29 +1,373 @@
package main package main
//import "fmt"
import "regexp" import "regexp"
//import "strings"
var markdown_max_depth int = 25 // How deep the parser will go when parsing Markdown strings
var markdown_unclosed_element []byte
var markdown_bold_tag_open []byte
var markdown_bold_tag_close []byte
var markdown_italic_tag_open []byte
var markdown_italic_tag_close []byte
var markdown_underline_tag_open []byte
var markdown_underline_tag_close []byte
var markdown_strike_tag_open []byte
var markdown_strike_tag_close []byte
var markdown_bold_italic *regexp.Regexp var markdown_bold_italic *regexp.Regexp
var markdown_bold *regexp.Regexp var markdown_bold *regexp.Regexp
var markdown_italic *regexp.Regexp var markdown_italic *regexp.Regexp
var markdown_strike *regexp.Regexp
var markdown_underline *regexp.Regexp
func init() { func init() {
plugins["markdown"] = NewPlugin("markdown","Markdown","Azareal","http://github.com/Azareal","","","",init_markdown,nil,deactivate_markdown) plugins["markdown"] = NewPlugin("markdown","Markdown","Azareal","http://github.com/Azareal","","","",init_markdown,nil,deactivate_markdown)
} }
func init_markdown() { func init_markdown() {
//plugins["markdown"].AddHook("parse_assign", markdown_regex_parse)
plugins["markdown"].AddHook("parse_assign", markdown_parse) plugins["markdown"].AddHook("parse_assign", markdown_parse)
markdown_unclosed_element = []byte("<span style='color: red;'>[Unclosed Element]</span>")
markdown_bold_tag_open = []byte("<b>")
markdown_bold_tag_close = []byte("</b>")
markdown_italic_tag_open = []byte("<i>")
markdown_italic_tag_close = []byte("</i>")
markdown_underline_tag_open = []byte("<u>")
markdown_underline_tag_close = []byte("</u>")
markdown_strike_tag_open = []byte("<s>")
markdown_strike_tag_close = []byte("</s>")
markdown_bold_italic = regexp.MustCompile(`\*\*\*(.*)\*\*\*`) markdown_bold_italic = regexp.MustCompile(`\*\*\*(.*)\*\*\*`)
markdown_bold = regexp.MustCompile(`\*\*(.*)\*\*`) markdown_bold = regexp.MustCompile(`\*\*(.*)\*\*`)
markdown_italic = regexp.MustCompile(`\*(.*)\*`) markdown_italic = regexp.MustCompile(`\*(.*)\*`)
//markdown_strike = regexp.MustCompile(`\~\~(.*)\~\~`)
markdown_strike = regexp.MustCompile(`\~(.*)\~`)
//markdown_underline = regexp.MustCompile(`\_\_(.*)\_\_`)
markdown_underline = regexp.MustCompile(`\_(.*)\_`)
} }
func deactivate_markdown() { func deactivate_markdown() {
//plugins["markdown"].RemoveHook("parse_assign", markdown_regex_parse)
plugins["markdown"].RemoveHook("parse_assign", markdown_parse) plugins["markdown"].RemoveHook("parse_assign", markdown_parse)
} }
func markdown_parse(data interface{}) interface{} { func markdown_regex_parse(data interface{}) interface{} {
msg := data.(string) msg := data.(string)
msg = markdown_bold_italic.ReplaceAllString(msg,"<i><b>$1</b></i>") msg = markdown_bold_italic.ReplaceAllString(msg,"<i><b>$1</b></i>")
msg = markdown_bold.ReplaceAllString(msg,"<b>$1</b>") msg = markdown_bold.ReplaceAllString(msg,"<b>$1</b>")
msg = markdown_italic.ReplaceAllString(msg,"<i>$1</i>") msg = markdown_italic.ReplaceAllString(msg,"<i>$1</i>")
msg = markdown_strike.ReplaceAllString(msg,"<s>$1</s>")
msg = markdown_underline.ReplaceAllString(msg,"<u>$1</u>")
return msg return msg
} }
// An adapter for the parser, so that the parser can call itself recursively.
// This is less for the simple Markdown elements like bold and italics and more for the really complicated ones I plan on adding at some point.
func markdown_parse(data interface{}) interface{} {
return _markdown_parse(data.(string) + " ",0)
}
// Under Construction!
func _markdown_parse(msg string, n int) string {
if n > markdown_max_depth {
return "<span style='color: red;'>[Markdown Error: Overflowed the max depth of 20]</span>"
}
var outbytes []byte
var lastElement int
//fmt.Println("enter message loop")
//fmt.Printf("Message: %v\n",strings.Replace(msg,"\r","\\r",-1))
for index := 0; index < len(msg); index++ {
/*//fmt.Println("--OUTER MARKDOWN LOOP START--")
//fmt.Println("index",index)
//fmt.Println("msg[index]",msg[index])
//fmt.Println("string(msg[index])",string(msg[index]))
//fmt.Println("--OUTER MARKDOWN LOOP END--")
//fmt.Println(" ")*/
switch(msg[index]) {
case '_':
var startIndex int = index
if (index + 1) >= len(msg) {
break
}
index++
index = markdown_skip_until_char(msg, index, '_')
if (index - (startIndex + 1)) < 2 || index >= len(msg) {
break
}
sIndex := startIndex + 1
lIndex := index
index++
outbytes = append(outbytes, msg[lastElement:startIndex]...)
outbytes = append(outbytes, markdown_underline_tag_open...)
outbytes = append(outbytes, msg[sIndex:lIndex]...)
outbytes = append(outbytes, markdown_underline_tag_close...)
lastElement = index
index--
case '~':
var startIndex int = index
if (index + 1) >= len(msg) {
break
}
index++
index = markdown_skip_until_char(msg, index, '~')
if (index - (startIndex + 1)) < 2 || index >= len(msg) {
break
}
sIndex := startIndex + 1
lIndex := index
index++
outbytes = append(outbytes, msg[lastElement:startIndex]...)
outbytes = append(outbytes, markdown_strike_tag_open...)
outbytes = append(outbytes, msg[sIndex:lIndex]...)
outbytes = append(outbytes, markdown_strike_tag_close...)
lastElement = index
index--
case '*':
//fmt.Println("------")
//fmt.Println("[]byte(msg):",[]byte(msg))
//fmt.Println("len(msg)",len(msg))
//fmt.Println("start index",index)
//fmt.Println("start msg[index]",msg[index])
//fmt.Println("start string(msg[index])",string(msg[index]))
//fmt.Println("start []byte(msg[:index])",[]byte(msg[:index]))
var startIndex int = index
var italic bool = true
var bold bool
if (index + 2) < len(msg) {
//fmt.Println("start index + 1",index + 1)
//fmt.Println("start msg[index]",msg[index + 1])
//fmt.Println("start string(msg[index])",string(msg[index + 1]))
if msg[index + 1] == '*' {
//fmt.Println("two asterisks")
bold = true
index++
if msg[index + 1] != '*' {
italic = false
} else {
//fmt.Println("three asterisks")
index++
}
}
}
//fmt.Println("lastElement",lastElement)
//fmt.Println("startIndex:",startIndex)
//fmt.Println("msg[startIndex]",msg[startIndex])
//fmt.Println("string(msg[startIndex])",string(msg[startIndex]))
//fmt.Println("preabrupt index",index)
//fmt.Println("preabrupt msg[index]",msg[index])
//fmt.Println("preabrupt string(msg[index])",string(msg[index]))
//fmt.Println("preabrupt []byte(msg[:index])",[]byte(msg[:index]))
//fmt.Println("preabrupt msg[:index]",msg[:index])
// Does the string terminate abruptly?
if (index + 1) >= len(msg) {
break
}
index++
//fmt.Println("preskip index",index)
//fmt.Println("preskip msg[index]",msg[index])
//fmt.Println("preskip string(msg[index])",string(msg[index]))
index = markdown_skip_until_asterisk(msg,index)
if index >= len(msg) {
break
}
//fmt.Println("index",index)
//fmt.Println("[]byte(msg[:index])",[]byte(msg[:index]))
//fmt.Println("msg[index]",msg[index])
sIndex := startIndex
lIndex := index
if bold && italic {
//fmt.Println("bold & italic final code")
if (index + 3) >= len(msg) {
//fmt.Println("unclosed markdown element @ exit element")
outbytes = append(outbytes, msg[lastElement:startIndex]...)
outbytes = append(outbytes, markdown_unclosed_element...)
lastElement = startIndex
break
}
index += 3
sIndex += 3
} else if bold {
//fmt.Println("bold final code")
if (index + 2) >= len(msg) {
//fmt.Println("true unclosed markdown element @ exit element")
outbytes = append(outbytes, msg[lastElement:startIndex]...)
outbytes = append(outbytes, markdown_unclosed_element...)
lastElement = startIndex
break
}
index += 2
sIndex += 2
} else {
//fmt.Println("italic final code")
if (index + 1) >= len(msg) {
//fmt.Println("true unclosed markdown element @ exit element")
outbytes = append(outbytes, msg[lastElement:startIndex]...)
outbytes = append(outbytes, markdown_unclosed_element...)
lastElement = startIndex
break
}
index++
sIndex++
}
//fmt.Println("sIndex",sIndex)
//fmt.Println("lIndex",lIndex)
if lIndex <= sIndex {
//fmt.Println("unclosed markdown element @ lIndex <= sIndex")
outbytes = append(outbytes, msg[lastElement:startIndex]...)
outbytes = append(outbytes, markdown_unclosed_element...)
lastElement = startIndex
break
}
if sIndex < 0 || lIndex < 0 {
//fmt.Println("unclosed markdown element @ sIndex < 0 || lIndex < 0")
outbytes = append(outbytes, msg[lastElement:startIndex]...)
outbytes = append(outbytes, markdown_unclosed_element...)
lastElement = startIndex
break
}
//fmt.Println("final sIndex",sIndex)
//fmt.Println("final lIndex",lIndex)
//fmt.Println("final index",index)
//fmt.Println("final msg[index]",msg[index])
//fmt.Println("final string(msg[index])",string(msg[index]))
//fmt.Println("final msg[sIndex]",msg[sIndex])
//fmt.Println("final string(msg[sIndex])",string(msg[sIndex]))
//fmt.Println("final msg[lIndex]",msg[lIndex])
//fmt.Println("final string(msg[lIndex])",string(msg[lIndex]))
//fmt.Println("[]byte(msg[:sIndex])",[]byte(msg[:sIndex]))
//fmt.Println("[]byte(msg[:lIndex])",[]byte(msg[:lIndex]))
outbytes = append(outbytes, msg[lastElement:startIndex]...)
if bold {
outbytes = append(outbytes, markdown_bold_tag_open...)
}
if italic {
outbytes = append(outbytes, markdown_italic_tag_open...)
}
outbytes = append(outbytes, msg[sIndex:lIndex]...)
if bold {
outbytes = append(outbytes, markdown_bold_tag_close...)
}
if italic {
outbytes = append(outbytes, markdown_italic_tag_close...)
}
lastElement = index
index--
//case '`':
//case '_':
//case '~':
//case 10: // newline
}
}
//fmt.Println("exit message loop")
//fmt.Println(" ")
if len(outbytes) == 0 {
return msg
} else if lastElement < (len(msg) - 1) {
return string(outbytes) + msg[lastElement:]
}
return string(outbytes)
}
func markdown_find_char(data string ,index int ,char byte) bool {
for ; index < len(data); index++ {
item := data[index]
if item > 32 {
return (item == char)
}
}
return false
}
func markdown_skip_until_char(data string, index int, char byte) int {
for ; index < len(data); index++ {
if data[index] == char {
break
}
}
return index
}
func markdown_skip_until_asterisk(data string, index int) int {
SwitchLoop:
for ; index < len(data); index++ {
switch(data[index]) {
case 10:
if ((index+1) < len(data)) && markdown_find_char(data,index,'*') {
index = markdown_skip_list(data,index)
}
case '*': break SwitchLoop
}
}
return index
}
// plugin_markdown doesn't support lists yet, but I want it to be easy to have nested lists when we do have them
func markdown_skip_list(data string, index int) int {
var lastNewline int
var datalen int = len(data)
for ; index < datalen; index++ {
SkipListInnerLoop:
if data[index] == 10 {
lastNewline = index
for ; index < datalen; index++ {
if data[index] > 32 {
break
} else if data[index] == 10 {
goto SkipListInnerLoop
}
}
if index >= datalen {
if data[index] != '*' && data[index] != '-' {
if (lastNewline + 1) < datalen {
return lastNewline + 1
}
return lastNewline
}
}
}
}
return index
}

View File

@ -21,12 +21,12 @@ function load_alerts(menu_alerts)
menu_alerts.find(".alertList").html("<div class='alertItem'>"+data.errmsg+"</div>"); menu_alerts.find(".alertList").html("<div class='alertItem'>"+data.errmsg+"</div>");
return; return;
} }
var alist = ""; var alist = "";
for(var i in data.msgs) { for(var i in data.msgs) {
var msg = data.msgs[i]; var msg = data.msgs[i];
var mmsg = msg.msg; var mmsg = msg.msg;
if("sub" in msg) { if("sub" in msg) {
for(var i = 0; i < msg.sub.length; i++) { for(var i = 0; i < msg.sub.length; i++) {
mmsg = mmsg.replace("\{"+i+"\}", msg.sub[i]); mmsg = mmsg.replace("\{"+i+"\}", msg.sub[i]);
@ -34,11 +34,11 @@ function load_alerts(menu_alerts)
console.log(msg.sub[i]); console.log(msg.sub[i]);
} }
} }
if(mmsg.length > 46) mmsg = mmsg.substring(0,43) + "..."; if(mmsg.length > 46) mmsg = mmsg.substring(0,43) + "...";
else if(mmsg.length > 35) size_dial = " smaller"; //9px else if(mmsg.length > 35) size_dial = " smaller"; //9px
else size_dial = ""; // 10px else size_dial = ""; // 10px
if("avatar" in msg) { if("avatar" in msg) {
alist += "<div class='alertItem withAvatar' style='background-image:url(\""+msg.avatar+"\");'><a class='text"+size_dial+"' href=\""+msg.path+"\">"+mmsg+"</a></div>"; alist += "<div class='alertItem withAvatar' style='background-image:url(\""+msg.avatar+"\");'><a class='text"+size_dial+"' href=\""+msg.path+"\">"+mmsg+"</a></div>";
console.log(msg.avatar); console.log(msg.avatar);
@ -48,10 +48,8 @@ function load_alerts(menu_alerts)
console.log(msg); console.log(msg);
//console.log(mmsg); //console.log(mmsg);
} }
if(alist == "") { if(alist == "") alist = "<div class='alertItem'>You don't have any alerts</div>";
alist = "<div class='alertItem'>You don't have any alerts</div>"
}
menu_alerts.find(".alertList").html(alist); menu_alerts.find(".alertList").html(alist);
if(data.msgs.length != 0) { if(data.msgs.length != 0) {
menu_alerts.find(".alert_counter").text(data.msgs.length); menu_alerts.find(".alert_counter").text(data.msgs.length);
@ -65,7 +63,7 @@ function load_alerts(menu_alerts)
console.log(data.errmsg); console.log(data.errmsg);
errtxt = data.errmsg; errtxt = data.errmsg;
} }
else errtxt = "Unable to get the alerts" else errtxt = "Unable to get the alerts";
} catch(e) { errtxt = "Unable to get the alerts"; } } catch(e) { errtxt = "Unable to get the alerts"; }
menu_alerts.find(".alertList").html("<div class='alertItem'>"+errtxt+"</div>"); menu_alerts.find(".alertList").html("<div class='alertItem'>"+errtxt+"</div>");
} }
@ -74,81 +72,77 @@ function load_alerts(menu_alerts)
$(document).ready(function(){ $(document).ready(function(){
function SplitN(data,ch,n) { function SplitN(data,ch,n) {
var out = [] var out = [];
if(data.length == 0) { if(data.length == 0) return out;
return out
} var lastIndex = 0;
var j = 0;
var lastIndex = 0 var lastN = 1;
var j = 0
var lastN = 1
for(var i = 0; i < data.length; i++) { for(var i = 0; i < data.length; i++) {
if(data[i] == ch) { if(data[i] == ch) {
out[j++] = data.substring(lastIndex,i) out[j++] = data.substring(lastIndex,i);
lastIndex = i lastIndex = i;
if(lastN == n) { if(lastN == n) break;
break lastN++;
}
lastN++
} }
} }
if(data.length > lastIndex) { if(data.length > lastIndex) {
out[out.length - 1] += data.substring(lastIndex) out[out.length - 1] += data.substring(lastIndex);
} }
return out return out;
} }
if(window["WebSocket"]) { if(window["WebSocket"]) {
conn = new WebSocket("ws://" + document.location.host + "/ws/") conn = new WebSocket("ws://" + document.location.host + "/ws/");
conn.onopen = function() { conn.onopen = function() {
conn.send("page " + document.location.pathname + '\r') conn.send("page " + document.location.pathname + '\r');
} }
conn.onclose = function() { conn.onclose = function() {
conn = false conn = false;
} }
conn.onmessage = function(event) { conn.onmessage = function(event) {
//console.log("WS_Message:") //console.log("WS_Message:");
//console.log(event.data) //console.log(event.data);
var messages = event.data.split('\r') var messages = event.data.split('\r');
for(var i = 0; i < messages.length; i++) { for(var i = 0; i < messages.length; i++) {
//console.log("Message:") //console.log("Message:");
//console.log(messages[i]) //console.log(messages[i]);
if(messages[i].startsWith("set ")) { if(messages[i].startsWith("set ")) {
//msgblocks = messages[i].split(' ',3) //msgblocks = messages[i].split(' ',3);
msgblocks = SplitN(messages[i]," ",3) msgblocks = SplitN(messages[i]," ",3);
if(msgblocks.length < 3) { if(msgblocks.length < 3) {
continue continue;
} }
document.querySelector(msgblocks[1]).innerHTML = msgblocks[2] document.querySelector(msgblocks[1]).innerHTML = msgblocks[2];
} else if(messages[i].startsWith("set-class ")) { } else if(messages[i].startsWith("set-class ")) {
msgblocks = SplitN(messages[i]," ",3) msgblocks = SplitN(messages[i]," ",3);
if(msgblocks.length < 3) { if(msgblocks.length < 3) {
continue continue;
} }
document.querySelector(msgblocks[1]).className = msgblocks[2] document.querySelector(msgblocks[1]).className = msgblocks[2];
} }
} }
} }
} else { } else {
conn = false conn = false
} }
$(".open_edit").click(function(event){ $(".open_edit").click(function(event){
//console.log("Clicked on edit"); //console.log("Clicked on edit");
event.preventDefault(); event.preventDefault();
$(".hide_on_edit").hide(); $(".hide_on_edit").hide();
$(".show_on_edit").show(); $(".show_on_edit").show();
}); });
$(".topic_item .submit_edit").click(function(event){ $(".topic_item .submit_edit").click(function(event){
event.preventDefault(); event.preventDefault();
$(".topic_name").html($(".topic_name_input").val()); $(".topic_name").html($(".topic_name_input").val());
$(".topic_content").html($(".topic_content_input").val()); $(".topic_content").html($(".topic_content_input").val());
$(".topic_status_e:not(.open_edit)").html($(".topic_status_input").val()); $(".topic_status_e:not(.open_edit)").html($(".topic_status_input").val());
$(".hide_on_edit").show(); $(".hide_on_edit").show();
$(".show_on_edit").hide(); $(".show_on_edit").hide();
var topic_name_input = $('.topic_name_input').val(); var topic_name_input = $('.topic_name_input').val();
var topic_status_input = $('.topic_status_input').val(); var topic_status_input = $('.topic_status_input').val();
var topic_content_input = $('.topic_content_input').val(); var topic_content_input = $('.topic_content_input').val();
@ -158,31 +152,31 @@ $(document).ready(function(){
//console.log("Form Action: " + form_action); //console.log("Form Action: " + form_action);
$.ajax({ $.ajax({
url: form_action, url: form_action,
type: "POST",
dataType: "json",
data: { data: {
topic_name: topic_name_input, topic_name: topic_name_input,
topic_status: topic_status_input, topic_status: topic_status_input,
topic_content: topic_content_input, topic_content: topic_content_input,
topic_js: 1 topic_js: 1
}, }
type: "POST",
dataType: "json"
}); });
}); });
$(".delete_item").click(function(event) $(".delete_item").click(function(event)
{ {
post_link(event); post_link(event);
var block = $(this).closest('.deletable_block'); var block = $(this).closest('.deletable_block');
block.remove(); block.remove();
}); });
$(".edit_item").click(function(event) $(".edit_item").click(function(event)
{ {
event.preventDefault(); event.preventDefault();
var block_parent = $(this).closest('.editable_parent'); var block_parent = $(this).closest('.editable_parent');
var block = block_parent.find('.editable_block').eq(0); var block = block_parent.find('.editable_block').eq(0);
block.html("<textarea style='width: 99%;' name='edit_item'>" + block.html() + "</textarea><br /><a href='" + $(this).closest('a').attr("href") + "'><button class='submit_edit' type='submit'>Update</button></a>"); block.html("<textarea style='width: 99%;' name='edit_item'>" + block.html() + "</textarea><br /><a href='" + $(this).closest('a').attr("href") + "'><button class='submit_edit' type='submit'>Update</button></a>");
$(".submit_edit").click(function(event) $(".submit_edit").click(function(event)
{ {
event.preventDefault(); event.preventDefault();
@ -190,21 +184,21 @@ $(document).ready(function(){
var block = block_parent.find('.editable_block').eq(0); var block = block_parent.find('.editable_block').eq(0);
var newContent = block.find('textarea').eq(0).val(); var newContent = block.find('textarea').eq(0).val();
block.html(newContent); block.html(newContent);
var form_action = $(this).closest('a').attr("href"); var form_action = $(this).closest('a').attr("href");
//console.log("Form Action: " + form_action); //console.log("Form Action: " + form_action);
$.ajax({ url: form_action, type: "POST", dataType: "json", data: { is_js: "1", edit_item: newContent } $.ajax({ url: form_action, type: "POST", dataType: "json", data: { is_js: "1", edit_item: newContent }
}); });
}); });
}); });
$(".edit_field").click(function(event) $(".edit_field").click(function(event)
{ {
event.preventDefault(); event.preventDefault();
var block_parent = $(this).closest('.editable_parent'); var block_parent = $(this).closest('.editable_parent');
var block = block_parent.find('.editable_block').eq(0); var block = block_parent.find('.editable_block').eq(0);
block.html("<input name='edit_field' value='" + block.text() + "' type='text'/><a href='" + $(this).closest('a').attr("href") + "'><button class='submit_edit' type='submit'>Update</button></a>"); block.html("<input name='edit_field' value='" + block.text() + "' type='text'/><a href='" + $(this).closest('a').attr("href") + "'><button class='submit_edit' type='submit'>Update</button></a>");
$(".submit_edit").click(function(event) $(".submit_edit").click(function(event)
{ {
event.preventDefault(); event.preventDefault();
@ -212,7 +206,7 @@ $(document).ready(function(){
var block = block_parent.find('.editable_block').eq(0); var block = block_parent.find('.editable_block').eq(0);
var newContent = block.find('input').eq(0).val(); var newContent = block.find('input').eq(0).val();
block.html(newContent); block.html(newContent);
var form_action = $(this).closest('a').attr("href"); var form_action = $(this).closest('a').attr("href");
//console.log("Form Action: " + form_action); //console.log("Form Action: " + form_action);
$.ajax({ $.ajax({
@ -223,25 +217,38 @@ $(document).ready(function(){
}); });
}); });
}); });
$(".edit_fields").click(function(event) $(".edit_fields").click(function(event)
{ {
event.preventDefault(); event.preventDefault();
//console.log("clicked .edit_fields");
var block_parent = $(this).closest('.editable_parent'); var block_parent = $(this).closest('.editable_parent');
//console.log(block_parent);
block_parent.find('.hide_on_edit').hide(); block_parent.find('.hide_on_edit').hide();
block_parent.find('.editable_block').show(); block_parent.find('.editable_block').show();
block_parent.find('.editable_block').each(function(){ block_parent.find('.editable_block').each(function(){
var field_name = this.getAttribute("data-field"); var field_name = this.getAttribute("data-field");
var field_type = this.getAttribute("data-type"); var field_type = this.getAttribute("data-type");
if(field_type=="list") { if(field_type=="list")
{
var field_value = this.getAttribute("data-value"); var field_value = this.getAttribute("data-value");
if(field_name in form_vars) var it = form_vars[field_name]; if(field_name in form_vars) var it = form_vars[field_name];
else var it = ['No','Yes']; else var it = ['No','Yes'];
var itLen = it.length; var itLen = it.length;
var out = ""; var out = "";
//console.log("Field Name '" + field_name + "'")
//console.log("Field Type",field_type)
//console.log("Field Value '" + field_value + "'")
for (var i = 0; i < itLen; i++){ for (var i = 0; i < itLen; i++){
if(field_value==i) sel = "selected "; //console.log("Field Possibility '" + it[i] + "'");
else sel = ""; if(field_value == i || field_value == it[i]) {
sel = "selected ";
//console.log("Class List: ",this.classList)
this.classList.remove(field_name + '_' + it[i]);
//console.log("Removing " + field_name + '_' + it[i]);
//console.log(this.classList)
this.innerHTML = "";
} else sel = "";
out += "<option "+sel+"value='"+i+"'>"+it[i]+"</option>"; out += "<option "+sel+"value='"+i+"'>"+it[i]+"</option>";
} }
this.innerHTML = "<select data-field='"+field_name+"' name='"+field_name+"'>" + out + "</select>"; this.innerHTML = "<select data-field='"+field_name+"' name='"+field_name+"'>" + out + "</select>";
@ -249,22 +256,35 @@ $(document).ready(function(){
else this.innerHTML = "<input name='"+field_name+"' value='" + this.textContent + "' type='text'/>"; else this.innerHTML = "<input name='"+field_name+"' value='" + this.textContent + "' type='text'/>";
}); });
block_parent.find('.show_on_edit').eq(0).show(); block_parent.find('.show_on_edit').eq(0).show();
// Remove any handlers already attached to the submitter
$(".submit_edit").unbind("click");
$(".submit_edit").click(function(event) $(".submit_edit").click(function(event)
{ {
event.preventDefault(); event.preventDefault();
//console.log("running .submit_edit event");
var out_data = {is_js: "1"} var out_data = {is_js: "1"}
var block_parent = $(this).closest('.editable_parent'); var block_parent = $(this).closest('.editable_parent');
var block = block_parent.find('.editable_block').each(function(){ var block = block_parent.find('.editable_block').each(function(){
var field_name = this.getAttribute("data-field"); var field_name = this.getAttribute("data-field");
var field_type = this.getAttribute("data-type"); var field_type = this.getAttribute("data-type");
if(field_type == "list") var newContent = $(this).find('select :selected').text(); if(field_type == "list") {
else var newContent = $(this).find('input').eq(0).val(); var newContent = $(this).find('select :selected').text();
this.classList.add(field_name + '_' + newContent);
this.innerHTML = newContent; this.innerHTML = "";
out_data[field_name] = newContent } else {
var newContent = $(this).find('input').eq(0).val();
this.innerHTML = newContent;
}
//console.log(".submit_edit");
//console.log("field_name",field_name);
//console.log("field_type",field_type);
//console.log("newContent",newContent);
this.setAttribute("data-value",newContent);
out_data[field_name] = newContent;
}); });
var form_action = $(this).closest('a').attr("href"); var form_action = $(this).closest('a').attr("href");
//console.log("Form Action: " + form_action); //console.log("Form Action: " + form_action);
//console.log(out_data); //console.log(out_data);
@ -273,7 +293,7 @@ $(document).ready(function(){
block_parent.find('.show_on_edit').hide(); block_parent.find('.show_on_edit').hide();
}); });
}); });
$(".ip_item").each(function(){ $(".ip_item").each(function(){
var ip = this.textContent; var ip = this.textContent;
//console.log("IP: " + ip); //console.log("IP: " + ip);
@ -285,24 +305,24 @@ $(document).ready(function(){
}; };
} }
}); });
$(this).click(function() { $(this).click(function() {
$(".selectedAlert").removeClass("selectedAlert"); $(".selectedAlert").removeClass("selectedAlert");
}); });
$(".menu_alerts").ready(function(){ $(".menu_alerts").ready(function(){
load_alerts($(this)); load_alerts($(this));
}); });
$(".menu_alerts").click(function(event) { $(".menu_alerts").click(function(event) {
event.stopPropagation(); event.stopPropagation();
if($(this).hasClass("selectedAlert")) return; if($(this).hasClass("selectedAlert")) return;
this.className += " selectedAlert"; this.className += " selectedAlert";
load_alerts($(this)); load_alerts($(this));
}); });
this.onkeyup = function(event){ this.onkeyup = function(event){
if(event.which == 37) this.querySelectorAll("#prevFloat a")[0].click(); if(event.which == 37) this.querySelectorAll("#prevFloat a")[0].click();
if(event.which == 39) this.querySelectorAll("#nextFloat a")[0].click(); if(event.which == 39) this.querySelectorAll("#nextFloat a")[0].click();
}; };
}); });

View File

@ -1,4 +1,5 @@
/* WIP Under Construction */ /* WIP Under Construction */
// The router generator might be discontinued in favour of syncmaps in Go 1.9, it will be temporarily used for a couple of months as a lockless alternative to maps
package main package main
import "log" import "log"
@ -16,7 +17,7 @@ func main() {
routes() routes()
var out string var out string
var fdata string = "// Code generated by. DO NOT EDIT.\n/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */\n" var fdata string = "// Code generated by. DO NOT EDIT.\n/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */\n// The router generator might be discontinued in favour of syncmaps in Go 1.9, it will be temporarily used for a couple of months as a lockless alternative to maps\n"
for _, route := range route_list { for _, route := range route_list {
var end int var end int

392
routes.go

File diff suppressed because it is too large Load Diff

View File

@ -60,10 +60,13 @@ var topic_2 []byte = []byte(`">&lt;</a></div>`)
var topic_3 []byte = []byte(`<link rel="prerender" 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(`" /> var topic_5 []byte = []byte(`" />
<div id="nextFloat" class="next_button"><a class="next_link" href="/topic/`) <div id="nextFloat" class="next_button">
<a class="next_link" href="/topic/`)
var topic_6 []byte = []byte(`?page=`) var topic_6 []byte = []byte(`?page=`)
var topic_7 []byte = []byte(`">&gt;</a></div>`) var topic_7 []byte = []byte(`">&gt;</a>
</div>`)
var topic_8 []byte = []byte(` var topic_8 []byte = []byte(`
<div class="rowblock topic_block"> <div class="rowblock topic_block">
<form action='/topic/edit/submit/`) <form action='/topic/edit/submit/`)
var topic_9 []byte = []byte(`' method="post"> var topic_9 []byte = []byte(`' method="post">
@ -101,34 +104,43 @@ var topic_24 []byte = []byte(`">
var topic_25 []byte = []byte(`</p> var topic_25 []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_26 []byte = []byte(`</textarea> var topic_26 []byte = []byte(`</textarea>
<span class="controls">
<a href="/user/`) <a href="/user/`)
var topic_27 []byte = []byte(`" class="username real_username">`) var topic_27 []byte = []byte(`" class="username real_username">`)
var topic_28 []byte = []byte(`</a>&nbsp; var topic_28 []byte = []byte(`</a>&nbsp;&nbsp;
`) `)
var topic_29 []byte = []byte(`<a href="/topic/like/submit/`) var topic_29 []byte = []byte(`<a href="/topic/like/submit/`)
var topic_30 []byte = []byte(`" class="mod_button" title="Love it" style="color:#202020;"><button class="username" style="`) var topic_30 []byte = []byte(`" class="mod_button" title="Love it" style="color:#202020;">
<button class="username like_label" style="`)
var topic_31 []byte = []byte(`background-color:/*#eaffea*/#D6FFD6;`) var topic_31 []byte = []byte(`background-color:/*#eaffea*/#D6FFD6;`)
var topic_32 []byte = []byte(`">😀</button></a>&nbsp;`) var topic_32 []byte = []byte(`"></button></a>`)
var topic_33 []byte = []byte(`<a href='/topic/edit/`) var topic_33 []byte = []byte(`<a href='/topic/edit/`)
var topic_34 []byte = []byte(`' class="mod_button open_edit" style="font-weight:normal;" title="Edit Topic"><button class="username">🖊️</button></a>&nbsp;`) var topic_34 []byte = []byte(`' class="mod_button open_edit" style="font-weight:normal;" title="Edit Topic"><button class="username edit_label"></button></a>`)
var topic_35 []byte = []byte(`<a href='/topic/delete/submit/`) var topic_35 []byte = []byte(`<a href='/topic/delete/submit/`)
var topic_36 []byte = []byte(`' class="mod_button" style="font-weight:normal;" title="Delete Topic"><button class="username">🗑️</button></a>&nbsp;`) var topic_36 []byte = []byte(`' class="mod_button" style="font-weight:normal;" title="Delete Topic"><button class="username trash_label"></button></a>`)
var topic_37 []byte = []byte(`<a class="mod_button" href='/topic/unstick/submit/`) var topic_37 []byte = []byte(`<a class="mod_button" href='/topic/unstick/submit/`)
var topic_38 []byte = []byte(`' style="font-weight:normal;" title="Unpin Topic"><button class="username" style="background-color:/*#eaffea*/#D6FFD6;">📌</button></a>`) var topic_38 []byte = []byte(`' style="font-weight:normal;" title="Unpin Topic"><button class="username unpin_label"></button></a>`)
var topic_39 []byte = []byte(`<a href='/topic/stick/submit/`) var topic_39 []byte = []byte(`<a href='/topic/stick/submit/`)
var topic_40 []byte = []byte(`' class="mod_button" style="font-weight:normal;" title="Pin Topic"><button class="username">📌</button></a>&nbsp;`) var topic_40 []byte = []byte(`' class="mod_button" style="font-weight:normal;" title="Pin Topic"><button class="username pin_label"></button></a>`)
var topic_41 []byte = []byte(` var topic_41 []byte = []byte(`
<a href="/report/submit/`)
<a class="mod_button" href="/report/submit/`)
var topic_42 []byte = []byte(`?session=`) var topic_42 []byte = []byte(`?session=`)
var topic_43 []byte = []byte(`&type=topic" class="mod_button report_item" style="font-weight:normal;" title="Flag Topic"><button class="username">🚩</button></a>&nbsp; var topic_43 []byte = []byte(`&type=topic" class="mod_button report_item" style="font-weight:normal;" title="Flag Topic"><button class="username flag_label"></button></a>
`) `)
var topic_44 []byte = []byte(`<a class="username hide_on_micro" style="float: right;color:#505050;border-left:none;padding-left:5px;padding-right:5px;font-size:17px;">`) var topic_44 []byte = []byte(`<a class="username hide_on_micro like_count">`)
var topic_45 []byte = []byte(`</a><a class="username hide_on_micro" style="color:#505050;float:right;opacity:0.85;margin-left:5px;" title="Like Count">😀</a>`) var topic_45 []byte = []byte(`</a><a class="username hide_on_micro like_count_label" title="Like Count"></a>`)
var topic_46 []byte = []byte(`<a class="username hide_on_micro" style="float:right;color:#505050;font-size:16px;">`) var topic_46 []byte = []byte(`<a class="username hide_on_micro" style="float:right;color:#505050;font-size:16px;">`)
var topic_47 []byte = []byte(`</a>`) var topic_47 []byte = []byte(`</a>`)
var topic_48 []byte = []byte(`<a class="username hide_on_micro level">`) var topic_48 []byte = []byte(`<a class="username hide_on_micro level">`)
var topic_49 []byte = []byte(`</a><a class="username hide_on_micro" style="color:#505050;float:right;opacity:0.85;" title="Level">👑</a>`) var topic_49 []byte = []byte(`</a><a class="username hide_on_micro level_label" style="color:#505050;float:right;opacity:0.85;" title="Level"></a>`)
var topic_50 []byte = []byte(` var topic_50 []byte = []byte(`
</span>
</div> </div>
</div> </div>
<div class="rowblock post_container" style="overflow: hidden;">`) <div class="rowblock post_container" style="overflow: hidden;">`)
@ -149,30 +161,38 @@ var topic_58 []byte = []byte(`0px;background-repeat:no-repeat, repeat-y;backgrou
var topic_59 []byte = []byte(`"> var topic_59 []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_60 []byte = []byte(`</p> var topic_60 []byte = []byte(`</p>
<span class="controls">
<a href="/user/`) <a href="/user/`)
var topic_61 []byte = []byte(`" class="username real_username">`) var topic_61 []byte = []byte(`" class="username real_username">`)
var topic_62 []byte = []byte(`</a>&nbsp; var topic_62 []byte = []byte(`</a>&nbsp;&nbsp;
`) `)
var topic_63 []byte = []byte(`<a href="/reply/like/submit/`) var topic_63 []byte = []byte(`<a href="/reply/like/submit/`)
var topic_64 []byte = []byte(`" class="mod_button" title="Love it" style="color:#202020;"><button class="username" style="`) var topic_64 []byte = []byte(`" class="mod_button" title="Love it" style="color:#202020;"><button class="username like_label" style="`)
var topic_65 []byte = []byte(`background-color:/*#eaffea*/#D6FFD6;`) var topic_65 []byte = []byte(`background-color:/*#eaffea*/#D6FFD6;`)
var topic_66 []byte = []byte(`">😀</button></a>&nbsp;`) var topic_66 []byte = []byte(`"></button></a>`)
var topic_67 []byte = []byte(`<a href="/reply/edit/submit/`) var topic_67 []byte = []byte(`<a href="/reply/edit/submit/`)
var topic_68 []byte = []byte(`" class="mod_button" title="Edit Reply"><button class="username edit_item">🖊️</button></a>&nbsp;`) var topic_68 []byte = []byte(`" class="mod_button" title="Edit Reply"><button class="username edit_item edit_label"></button></a>`)
var topic_69 []byte = []byte(`<a href="/reply/delete/submit/`) var topic_69 []byte = []byte(`<a href="/reply/delete/submit/`)
var topic_70 []byte = []byte(`" class="mod_button" title="Delete Reply"><button class="username delete_item">🗑️</button></a>&nbsp;`) var topic_70 []byte = []byte(`" class="mod_button" title="Delete Reply"><button class="username delete_item trash_label"></button></a>`)
var topic_71 []byte = []byte(` var topic_71 []byte = []byte(`
<a href="/report/submit/`)
<a class="mod_button" href="/report/submit/`)
var topic_72 []byte = []byte(`?session=`) var topic_72 []byte = []byte(`?session=`)
var topic_73 []byte = []byte(`&type=reply" class="mod_button" title="Flag Reply"><button class="username report_item">🚩</button></a>&nbsp; var topic_73 []byte = []byte(`&type=reply" class="mod_button report_item" title="Flag Reply"><button class="username report_item flag_label"></button></a>
`) `)
var topic_74 []byte = []byte(`<a class="username hide_on_micro" style="float: right;color:#505050;border-left:none;padding-left:5px;padding-right:5px;font-size:17px;">`) var topic_74 []byte = []byte(`<a class="username hide_on_micro like_count">`)
var topic_75 []byte = []byte(`</a><a class="username hide_on_micro" style="color:#505050;float:right;opacity:0.85;margin-left:5px;" title="Like Count">😀</a>`) var topic_75 []byte = []byte(`</a><a class="username hide_on_micro like_count_label" title="Like Count"></a>`)
var topic_76 []byte = []byte(`<a class="username hide_on_micro" style="float: right;color:#505050;font-size:16px;">`) var topic_76 []byte = []byte(`<a class="username hide_on_micro" style="float: right;color:#505050;font-size:16px;">`)
var topic_77 []byte = []byte(`</a>`) var topic_77 []byte = []byte(`</a>`)
var topic_78 []byte = []byte(`<a class="username hide_on_micro level">`) var topic_78 []byte = []byte(`<a class="username hide_on_micro level">`)
var topic_79 []byte = []byte(`</a><a class="username hide_on_micro" style="color:#505050;float:right;opacity:0.85;" title="Level">👑`) var topic_79 []byte = []byte(`</a><a class="username hide_on_micro level_label" style="color:#505050;float:right;opacity:0.85;" title="Level">`)
var topic_80 []byte = []byte(`</a> var topic_80 []byte = []byte(`</a>
</span>
</div> </div>
`) `)
var topic_81 []byte = []byte(`</div> var topic_81 []byte = []byte(`</div>
@ -192,10 +212,10 @@ var topic_83 []byte = []byte(`' type="hidden" />
</form> </form>
</div> </div>
`) `)
var footer_0 []byte = []byte(` <!--<link rel="stylesheet" href="https://use.fontawesome.com/8670aa03ca.css">--> var footer_0 []byte = []byte(` </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 id="prevFloat" class="prev_button"><a class="prev_link" 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(`">&lt;</a></div>`) var topic_alt_2 []byte = []byte(`">&lt;</a></div>`)
@ -353,10 +373,13 @@ var topic_alt_83 []byte = []byte(`' type="hidden" />
</div> </div>
`) `)
var profile_0 []byte = []byte(` var profile_0 []byte = []byte(`
<div class="colblock_left" style="max-width: 220px;">
<div class="rowitem" style="padding: 0;"><img src="`) <div id="profile_left_pane" class="colblock_left" style="max-width: 220px;">
var profile_1 []byte = []byte(`" style="max-width: 100%;margin: 0;display: block;" /></div> <div class="rowitem" style="padding: 0;">
<div class="rowitem" style="text-transform: capitalize;"> <img src="`)
var profile_1 []byte = []byte(`" style="max-width: 100%;margin: 0;display: block;" />
</div>
<div class="rowitem">
<span style="font-size: 18px;">`) <span style="font-size: 18px;">`)
var profile_2 []byte = []byte(`</span>`) var profile_2 []byte = []byte(`</span>`)
var profile_3 []byte = []byte(`<span class="username" style="float: right;font-weight: normal;">`) var profile_3 []byte = []byte(`<span class="username" style="float: right;font-weight: normal;">`)
@ -364,7 +387,9 @@ var profile_4 []byte = []byte(`</span>`)
var profile_5 []byte = []byte(` var profile_5 []byte = []byte(`
</div> </div>
<div class="rowitem passive"> <div class="rowitem passive">
<a class="username">Add Friend</a> <a class="profile_menu_item">Add Friend</a>
</div>
<div class="rowitem passive"
`) `)
var profile_6 []byte = []byte(`<a href="/users/unban/`) var profile_6 []byte = []byte(`<a href="/users/unban/`)
var profile_7 []byte = []byte(`?session=`) var profile_7 []byte = []byte(`?session=`)
@ -375,13 +400,14 @@ var profile_11 []byte = []byte(`" class="username">Ban</a>`)
var profile_12 []byte = []byte(` var profile_12 []byte = []byte(`
<a href="/report/submit/`) <a href="/report/submit/`)
var profile_13 []byte = []byte(`?session=`) var profile_13 []byte = []byte(`?session=`)
var profile_14 []byte = []byte(`&type=user" class="username report_item">Report</a> var profile_14 []byte = []byte(`&type=user" class="profile_menu_item report_item">Report</a>
</div> </div>
</div> </div>
<div class="colblock_right">
<div class="colblock_right" style="width: calc(95% - 210px);">
<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;">`) <div id="profile_comments" class="colblock_right" style="overflow: hidden;border-top: none;width:calc(95% - 210px);">`)
var profile_15 []byte = []byte(` var profile_15 []byte = []byte(`
<div class="rowitem passive deletable_block editable_parent simple" style="`) <div class="rowitem passive deletable_block editable_parent simple" style="`)
var profile_16 []byte = []byte(`background-image: url(`) var profile_16 []byte = []byte(`background-image: url(`)
@ -390,20 +416,23 @@ var profile_18 []byte = []byte(`-1`)
var profile_19 []byte = []byte(`0px;background-repeat: no-repeat, repeat-y;background-size: 128px;padding-left: 136px;`) var profile_19 []byte = []byte(`0px;background-repeat: no-repeat, repeat-y;background-size: 128px;padding-left: 136px;`)
var profile_20 []byte = []byte(`"> var profile_20 []byte = []byte(`">
<span class="editable_block user_content simple">`) <span class="editable_block user_content simple">`)
var profile_21 []byte = []byte(`</span> var profile_21 []byte = []byte(`</span><br /><br />
<br /><br />
<a href="/user/`) <a href="/user/`)
var profile_22 []byte = []byte(`" class="username">`) var profile_22 []byte = []byte(`" class="real_username username">`)
var profile_23 []byte = []byte(`</a>&nbsp; var profile_23 []byte = []byte(`</a>&nbsp;&nbsp;
`) `)
var profile_24 []byte = []byte(`<a href="/profile/reply/edit/submit/`) var profile_24 []byte = []byte(`<a href="/profile/reply/edit/submit/`)
var profile_25 []byte = []byte(`" class="mod_button" title="Edit Item"><button class="username edit_item">Edit</button></a>&nbsp; var profile_25 []byte = []byte(`" class="mod_button" title="Edit Item"><button class="username edit_item edit_label"></button></a>
<a href="/profile/reply/delete/submit/`) <a href="/profile/reply/delete/submit/`)
var profile_26 []byte = []byte(`" class="mod_button" title="Delete Item"><button class="username delete_item">Delete</button></a>&nbsp;`) var profile_26 []byte = []byte(`" class="mod_button" title="Delete Item"><button class="username delete_item trash_label"></button></a>`)
var profile_27 []byte = []byte(` var profile_27 []byte = []byte(`
<a href="/report/submit/`)
<a class="mod_button" href="/report/submit/`)
var profile_28 []byte = []byte(`?session=`) var profile_28 []byte = []byte(`?session=`)
var profile_29 []byte = []byte(`&type=user-reply"><button class="username report_item">Report</button></a> var profile_29 []byte = []byte(`&type=user-reply"><button class="username report_item flag_label"></button></a>
`) `)
var profile_30 []byte = []byte(`<a class="username hide_on_mobile" style="float: right;">`) var profile_30 []byte = []byte(`<a class="username hide_on_mobile" style="float: right;">`)
var profile_31 []byte = []byte(`</a>`) var profile_31 []byte = []byte(`</a>`)
@ -411,7 +440,8 @@ var profile_32 []byte = []byte(`
</div> </div>
`) `)
var profile_33 []byte = []byte(`</div> var profile_33 []byte = []byte(`</div>
<div class="colblock_right" style="border-top: none;">
<div class="colblock_right" style="border-top: none;width: calc(95% - 210px);">
`) `)
var profile_34 []byte = []byte(` var profile_34 []byte = []byte(`
<form action="/profile/reply/create/" method="post"> <form action="/profile/reply/create/" method="post">
@ -427,6 +457,7 @@ var profile_35 []byte = []byte(`' type="hidden" />
`) `)
var profile_36 []byte = []byte(` var profile_36 []byte = []byte(`
</div> </div>
`) `)
var forums_0 []byte = []byte(` var forums_0 []byte = []byte(`
<div class="rowblock opthead"> <div class="rowblock opthead">
@ -436,10 +467,10 @@ var forums_0 []byte = []byte(`
`) `)
var forums_1 []byte = []byte(`<div class="rowitem"> var forums_1 []byte = []byte(`<div class="rowitem">
<a href="/forum/`) <a href="/forum/`)
var forums_2 []byte = []byte(`" style="font-size: 20px;position:relative;top: -2px;font-weight: normal;text-transform: none;">`) var forums_2 []byte = []byte(`" class="panel_upshift">`)
var forums_3 []byte = []byte(`</a> var forums_3 []byte = []byte(`</a>
<a href="/topic/`) <a href="/topic/`)
var forums_4 []byte = []byte(`" style="font-weight: normal;text-transform: none;float: right;">`) var forums_4 []byte = []byte(`" style="float: right;">`)
var forums_5 []byte = []byte(` <small style="font-size: 12px;">`) var forums_5 []byte = []byte(` <small style="font-size: 12px;">`)
var forums_6 []byte = []byte(`</small></a> var forums_6 []byte = []byte(`</small></a>
</div> </div>
@ -488,13 +519,14 @@ var forum_5 []byte = []byte(`" />
var forum_6 []byte = []byte(`?page=`) var forum_6 []byte = []byte(`?page=`)
var forum_7 []byte = []byte(`">&gt;</a></div>`) var forum_7 []byte = []byte(`">&gt;</a></div>`)
var forum_8 []byte = []byte(` var forum_8 []byte = []byte(`
<div class="rowblock"> <div class="rowblock">
<div class="rowitem rowhead"><a>`) <div class="rowitem rowhead"><a>`)
var forum_9 []byte = []byte(`</a> var forum_9 []byte = []byte(`</a>
`) `)
var forum_10 []byte = []byte(`<span class='username' title='No Permissions' style="font-weight:normal;float: right;position:relative;top:-5px;">&#x1F512;&#xFE0E</span>`) var forum_10 []byte = []byte(`<span class='username head_tag_upshift' title='No Permissions'>&#x1F512;&#xFE0E</span>`)
var forum_11 []byte = []byte(`<a href="/topics/create/`) var forum_11 []byte = []byte(`<a href="/topics/create/`)
var forum_12 []byte = []byte(`" class='username' style="float: right;position:relative;top:-5px;">New Topic</a>`) var forum_12 []byte = []byte(`" class='username head_tag_upshift'>New Topic</a>`)
var forum_13 []byte = []byte(`</div> var forum_13 []byte = []byte(`</div>
</div> </div>
<div class="rowblock"> <div class="rowblock">

View File

@ -12,7 +12,7 @@
<div class="colstack_item"> <div class="colstack_item">
<form action="/user/edit/avatar/submit/" method="post" enctype="multipart/form-data"> <form action="/user/edit/avatar/submit/" method="post" enctype="multipart/form-data">
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Upload Avatar</a></div> <div class="formitem formlabel"><a>Upload Avatar</a></div>
<div class="formitem"><input name="account-avatar" type="file" /></div> <div class="formitem"><input name="account-avatar" type="file" /></div>
</div> </div>
<div class="formrow"> <div class="formrow">
@ -21,4 +21,4 @@
</form> </form>
</div> </div>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -7,11 +7,11 @@
<div class="colstack_item"> <div class="colstack_item">
<form action="/user/edit/username/submit/" method="post"> <form action="/user/edit/username/submit/" method="post">
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Current Username</a></div> <div class="formitem formlabel"><a>Current Username</a></div>
<div class="formitem">{{.CurrentUser.Name}}</div> <div class="formitem formlabel">{{.CurrentUser.Name}}</div>
</div> </div>
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>New Username</a></div> <div class="formitem formlabel"><a>New Username</a></div>
<div class="formitem"><input name="account-new-username" type="text" /></div> <div class="formitem"><input name="account-new-username" type="text" /></div>
</div> </div>
<div class="formrow"> <div class="formrow">
@ -20,4 +20,4 @@
</form> </form>
</div> </div>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -7,15 +7,15 @@
<div class="colstack_item"> <div class="colstack_item">
<form action="/user/edit/critical/submit/" method="post"> <form action="/user/edit/critical/submit/" method="post">
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Current Password</a></div> <div class="formitem formlabel"><a>Current Password</a></div>
<div class="formitem"><input name="account-current-password" type="password" placeholder="*****" /></div> <div class="formitem"><input name="account-current-password" type="password" placeholder="*****" /></div>
</div> </div>
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>New Password</a></div> <div class="formitem formlabel"><a>New Password</a></div>
<div class="formitem"><input name="account-new-password" type="password" placeholder="*****" /></div> <div class="formitem"><input name="account-new-password" type="password" placeholder="*****" /></div>
</div> </div>
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Confirm Password</a></div> <div class="formitem formlabel"><a>Confirm Password</a></div>
<div class="formitem"><input name="account-confirm-password" type="password" placeholder="*****" /></div> <div class="formitem"><input name="account-confirm-password" type="password" placeholder="*****" /></div>
</div> </div>
<div class="formrow"> <div class="formrow">
@ -24,4 +24,4 @@
</form> </form>
</div> </div>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -5,13 +5,13 @@
<div class="rowblock"> <div class="rowblock">
<form action="/topic/create/submit/" method="post"> <form action="/topic/create/submit/" method="post">
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Board</a></div> <div class="formitem formlabel"><a>Board</a></div>
<div class="formitem"><select name="topic-board"> <div class="formitem"><select name="topic-board">
{{range .ItemList}}<option {{if eq .ID $.FID}}selected{{end}} value="{{.ID}}">{{.Name}}</option>{{end}} {{range .ItemList}}<option {{if eq .ID $.FID}}selected{{end}} value="{{.ID}}">{{.Name}}</option>{{end}}
</select></div> </select></div>
</div> </div>
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Topic Name</a></div> <div class="formitem formlabel"><a>Topic Name</a></div>
<div class="formitem"><input name="topic-name" type="text" placeholder="Topic Name" /></div> <div class="formitem"><input name="topic-name" type="text" placeholder="Topic Name" /></div>
</div> </div>
<div class="formrow"> <div class="formrow">
@ -22,4 +22,4 @@
</div> </div>
</form> </form>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -1,4 +1,3 @@
<!--<link rel="stylesheet" href="https://use.fontawesome.com/8670aa03ca.css">-->
</div><div style="clear: both;"></div></div></div> </div><div style="clear: both;"></div></div></div>
</body> </body>
</html> </html>

View File

@ -1,10 +1,12 @@
{{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}}">&lt;</a></div>{{end}} {{if gt .Page 1}}<div id="prevFloat" class="prev_button"><a class="prev_link" href="/forum/{{.Forum.ID}}?page={{subtract .Page 1}}">&lt;</a></div>{{end}}
{{if ne .LastPage .Page}}<link rel="prerender" href="/forum/{{.Forum.ID}}?page={{add .Page 1}}" /> {{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}}">&gt;</a></div>{{end}} <div id="nextFloat" class="next_button"><a class="next_link" href="/forum/{{.Forum.ID}}?page={{add .Page 1}}">&gt;</a></div>{{end}}
<div class="rowblock"> <div class="rowblock">
<div class="rowitem rowhead"><a>{{.Title}}</a> <div class="rowitem rowhead"><a>{{.Title}}</a>
{{if ne .CurrentUser.ID 0}}{{if not .CurrentUser.Perms.CreateTopic}}<span class='username' title='No Permissions' style="font-weight:normal;float: right;position:relative;top:-5px;">&#x1F512;&#xFE0E</span>{{else}}<a href="/topics/create/{{.Forum.ID}}" class='username' style="float: right;position:relative;top:-5px;">New Topic</a>{{end}}{{end}}</div> {{if ne .CurrentUser.ID 0}}{{if not .CurrentUser.Perms.CreateTopic}}<span class='username head_tag_upshift' title='No Permissions'>&#x1F512;&#xFE0E</span>{{else}}<a href="/topics/create/{{.Forum.ID}}" class='username head_tag_upshift'>New Topic</a>{{end}}{{end}}</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}}">

View File

@ -4,8 +4,8 @@
</div> </div>
<div class="rowblock"> <div class="rowblock">
{{range .ItemList}}<div class="rowitem"> {{range .ItemList}}<div class="rowitem">
<a href="/forum/{{.ID}}" style="font-size: 20px;position:relative;top: -2px;font-weight: normal;text-transform: none;">{{.Name}}</a> <a href="/forum/{{.ID}}" class="panel_upshift">{{.Name}}</a>
<a href="/topic/{{.LastTopicID}}" style="font-weight: normal;text-transform: none;float: right;">{{.LastTopic}} <small style="font-size: 12px;">{{.LastTopicTime}}</small></a> <a href="/topic/{{.LastTopicID}}" style="float: right;">{{.LastTopic}} <small style="font-size: 12px;">{{.LastTopicTime}}</small></a>
</div> </div>
{{else}}<div class="rowitem passive">You don't have access to any forums.</div>{{end}} {{else}}<div class="rowitem passive">You don't have access to any forums.</div>{{end}}
</div> </div>

View File

@ -5,11 +5,11 @@
<div class="rowblock"> <div class="rowblock">
<form action="/accounts/login/submit/" method="post"> <form action="/accounts/login/submit/" method="post">
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Account Name</a></div> <div class="formitem formlabel"><a>Account Name</a></div>
<div class="formitem"><input name="username" type="text" placeholder="Account Name" /></div> <div class="formitem"><input name="username" type="text" placeholder="Account Name" /></div>
</div> </div>
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Password</a></div> <div class="formitem formlabel"><a>Password</a></div>
<div class="formitem"><input name="password" type="password" autocomplete="current-password" placeholder="*****" /></div> <div class="formitem"><input name="password" type="password" autocomplete="current-password" placeholder="*****" /></div>
</div> </div>
<div class="formrow"> <div class="formrow">
@ -18,4 +18,4 @@
</div> </div>
</form> </form>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -14,7 +14,7 @@
<div class="colstack_item colstack_head"> <div class="colstack_item colstack_head">
<div class="rowitem rowhead"><a>Administration Logs</a></div> <div class="rowitem rowhead"><a>Administration Logs</a></div>
</div> </div>
<div class="colstack_item"> <div id="panel_adminlogs" class="colstack_item">
{{range .Logs}} {{range .Logs}}
<div class="rowitem" style="font-weight: normal;text-transform: none;"> <div class="rowitem" style="font-weight: normal;text-transform: none;">
<a style="font-size: 17px;">{{.Action}}</a><br /> <a style="font-size: 17px;">{{.Action}}</a><br />
@ -26,4 +26,4 @@
{{end}} {{end}}
</div> </div>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -1,11 +1,11 @@
{{template "header.html" . }} {{template "header.html" . }}
{{template "panel-menu.html" . }} {{template "panel-menu.html" . }}
<div class="colstack_right"> <div class="colstack_right">
<div class="colstack_grid"> <div id="panel_dashboard" class="colstack_grid">
{{range .GridItems}} {{range .GridItems}}
<div id="{{.ID}}" class="grid_item {{.Class}}" title="{{.Note}}" style="{{if .TextColour}}color: {{.TextColour}};{{end}} <div id="{{.ID}}" class="grid_item {{.Class}}" title="{{.Note}}" style="{{if .TextColour}}color: {{.TextColour}};{{end}}
{{if .Background}}background-color: {{.Background}};{{end}}">{{.Body}}</div> {{if .Background}}background-color: {{.Background}};{{end}}">{{.Body}}</div>
{{end}} {{end}}
</div> </div>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -1,48 +1,50 @@
{{template "header.html" . }} {{template "header.html" . }}
{{template "panel-menu.html" . }} {{template "panel-menu.html" . }}
<script>var form_vars = { <script>var form_vars = {
'forum-active': ['Hide','Show'], 'forum_active': ['Hide','Show'],
'forum-preset': ['all','announce','members','staff','admins','archive','custom']}; 'forum_preset': ['all','announce','members','staff','admins','archive','custom']};
</script> </script>
<div class="colstack_right"> <div class="colstack_right">
<div class="colstack_item colstack_head"> <div class="colstack_item colstack_head">
<div class="rowitem rowhead"><a>Forums</a></div> <div class="rowitem rowhead"><a>Forums</a></div>
</div> </div>
<div class="colstack_item"> <div id="panel_forums" class="colstack_item">
{{range .ItemList}} {{range .ItemList}}
<div class="rowitem editable_parent" style="font-weight: normal;{{if eq .ID 1}}border-bottom-style:solid;{{end}}"> <div class="rowitem editable_parent" style="{{if eq .ID 1}}border-bottom-style:solid;{{end}}">
<a data-field="forum-name" data-type="text" class="editable_block" style="font-size: 20px;position:relative;top: -2px;text-transform: none;{{if not .Active}}color:#707070;{{end}}">{{.Name}}</a> <a data-field="forum_name" data-type="text" class="editable_block panel_upshift" style="{{if not .Active}}color:#707070;{{end}}">{{.Name}}</a>
<span style="float: right;"> <span class="panel_floater">
<span data-field="forum-active" data-type="list" class="username editable_block hide_on_zero" title="Hidden" style="color: black;{{if .Active}}display:none;" data-value="1"{{else}}" data-value="0"{{end}}>🕵️</span> <span data-field="forum_active" data-type="list" class="panel_tag editable_block forum_active {{if .Active}}forum_active_Show" data-value="1{{else}}forum_active_Hide" data-value="0{{end}}" title="Hidden"></span>
{{if .PresetEmoji}}<span data-field="forum-preset" data-type="list" data-value="{{.Preset}}" class="username editable_block" title="{{.PresetLang}}">{{.PresetEmoji}}</span> <span data-field="forum_preset" data-type="list" data-value="{{.Preset}}" class="panel_tag editable_block forum_preset forum_preset_{{.Preset}}" title="{{.PresetLang}}"></span>
{{else if .PresetLang}}<span data-field="forum-preset" data-type="list" data-value="{{.Preset}}" class="username editable_block">{{.PresetLang}}</span>{{else}}<span data-field="forum-preset" data-type="list" data-value="{{.Preset}}" class="username editable_block" style="display:none;">{{.PresetLang}}</span>{{end}} <span class="panel_buttons">
{{if gt .ID 0}}<a class="panel_tag edit_fields hide_on_edit panel_right_button">Edit</a>
{{if gt .ID 0}}<a class="username edit_fields hide_on_edit">Edit</a> <a class="panel_right_button" href="/panel/forums/edit/submit/{{.ID}}"><button class='panel_tag submit_edit show_on_edit' type='submit'>Update</button></a>{{end}}
<a href="/panel/forums/edit/submit/{{.ID}}"><button class='username submit_edit show_on_edit' type='submit'>Update</button></a>{{end}} {{if gt .ID 1}}<a href="/panel/forums/delete/{{.ID}}?session={{$.CurrentUser.Session}}" class="panel_tag panel_right_button">Delete</a>{{end}}
{{if gt .ID 1}}<a href="/panel/forums/delete/{{.ID}}?session={{$.CurrentUser.Session}}" class="username">Delete</a>{{end}} </span>
</span> </span>
</div> </div>
{{end}} {{end}}
</div> </div>
<div class="colstack_item colstack_head"> <div class="colstack_item colstack_head">
<div class="rowitem rowhead"><a>Add Forum</a></div> <div class="rowitem rowhead"><a>Add Forum</a></div>
</div> </div>
<div class="colstack_item"> <div class="colstack_item">
<form action="/panel/forums/create/?session={{.CurrentUser.Session}}" method="post"> <form action="/panel/forums/create/?session={{.CurrentUser.Session}}" method="post">
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Forum Name</a></div> <div class="formitem formlabel"><a>Forum Name</a></div>
<div class="formitem"><input name="forum-name" type="text" /></div> <div class="formitem"><input name="forum-name" type="text" placeholder="Super Secret Forum" /></div>
</div> </div>
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Hidden?</a></div> <div class="formitem formlabel"><a>Hidden?</a></div>
<div class="formitem"><select name="forum-active"> <div class="formitem"><select name="forum-active">
<option value="1">Yes</option> <option value="1">Yes</option>
<option value="0">No</option> <option value="0">No</option>
</select></div> </select></div>
</div> </div>
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Preset</a></div> <div class="formitem formlabel"><a>Preset</a></div>
<div class="formitem"><select name="forum-preset"> <div class="formitem"><select name="forum-preset">
<option selected value="all">Everyone</option> <option selected value="all">Everyone</option>
<option value="announce">Announcements</option> <option value="announce">Announcements</option>
@ -59,4 +61,5 @@
</form> </form>
</div> </div>
</div> </div>
{{template "footer.html" . }}
{{template "footer.html" . }}

View File

@ -15,7 +15,7 @@
<div class="rowitem rowhead"><a>{{.Name}} Group</a></div> <div class="rowitem rowhead"><a>{{.Name}} Group</a></div>
</div> </div>
<form action="/panel/groups/edit/perms/submit/{{.ID}}?session={{.CurrentUser.Session}}" method="post"> <form action="/panel/groups/edit/perms/submit/{{.ID}}?session={{.CurrentUser.Session}}" method="post">
<div class="colstack_item"> <div id="panel_group" class="colstack_item">
{{if .CurrentUser.Perms.EditGroupLocalPerms}} {{if .CurrentUser.Perms.EditGroupLocalPerms}}
{{range .LocalPerms}} {{range .LocalPerms}}
<div class="formrow"> <div class="formrow">
@ -60,4 +60,4 @@
</div> </div>
</form> </form>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -14,15 +14,15 @@
<div class="colstack_item colstack_head"> <div class="colstack_item colstack_head">
<div class="rowitem rowhead"><a>{{.Name}} Group</a></div> <div class="rowitem rowhead"><a>{{.Name}} Group</a></div>
</div> </div>
<div class="colstack_item"> <div id="panel_group" class="colstack_item">
<form action="/panel/groups/edit/submit/{{.ID}}?session={{.CurrentUser.Session}}" method="post"> <form action="/panel/groups/edit/submit/{{.ID}}?session={{.CurrentUser.Session}}" method="post">
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Name</a></div> <div class="formitem formlabel"><a>Name</a></div>
<div class="formitem"><input name="group-name" type="text" value="{{.Name}}" placeholder="General Forum" /></div> <div class="formitem"><input name="group-name" type="text" value="{{.Name}}" placeholder="General Forum" /></div>
</div> </div>
{{if .CurrentUser.Perms.EditGroup}} {{if .CurrentUser.Perms.EditGroup}}
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Type</a></div> <div class="formitem formlabel"><a>Type</a></div>
<div class="formitem"> <div class="formitem">
<select name="group-type"{{if .DisableRank}} disabled{{end}}> <select name="group-type"{{if .DisableRank}} disabled{{end}}>
<option{{if eq .Rank "Guest"}} selected{{end}} disabled>Guest</option> <option{{if eq .Rank "Guest"}} selected{{end}} disabled>Guest</option>
@ -34,7 +34,7 @@
</div> </div>
</div>{{end}} </div>{{end}}
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Tag</a></div> <div class="formitem formlabel"><a>Tag</a></div>
<div class="formitem"><input name="group-tag" type="text" value="{{.Tag}}" placeholder="VIP" /></div> <div class="formitem"><input name="group-tag" type="text" value="{{.Tag}}" placeholder="VIP" /></div>
</div> </div>
<div class="formrow"> <div class="formrow">
@ -43,4 +43,4 @@
</form> </form>
</div> </div>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -1,18 +1,19 @@
{{template "header.html" . }} {{template "header.html" . }}
{{template "panel-menu.html" . }} {{template "panel-menu.html" . }}
<div class="colstack_right"> <div class="colstack_right">
<div class="colstack_item colstack_head"> <div class="colstack_item colstack_head">
<div class="rowitem rowhead"><a>Groups</a></div> <div class="rowitem rowhead"><a>Groups</a></div>
</div> </div>
<div class="colstack_item"> <div id="panel_groups" class="colstack_item">
{{range .ItemList}} {{range .ItemList}}
<div class="rowitem editable_parent" style="font-weight: normal;text-transform: none;"> <div class="rowitem editable_parent">
<a href="/panel/groups/edit/{{.ID}}" style="font-size: 20px;position:relative;top: -2px;text-transform: none;">{{.Name}}</a> <a href="/panel/groups/edit/{{.ID}}" class="panel_upshift">{{.Name}}</a>
<span style="float: right;"> <span class="panel_floater">
{{if .RankEmoji}}<a class="username" title="{{.Rank}}">{{.RankEmoji}}</a> {{if .RankClass}}<a class="panel_tag panel_rank_tag panel_rank_tag_{{.RankClass}}" title="{{.Rank}}"></a>
{{else}}<span class="username">{{.Rank}}</span>{{end}} {{else}}<span class="panel_tag">{{.Rank}}</span>{{end}}
{{if .CanEdit}}<a href="/panel/groups/edit/{{.ID}}" class="username">Edit</a>{{end}} {{if .CanEdit}}<a href="/panel/groups/edit/{{.ID}}" class="panel_tag panel_right_button">Edit</a>{{end}}
</span> </span>
</div> </div>
{{end}} {{end}}
@ -23,11 +24,11 @@
<div class="colstack_item"> <div class="colstack_item">
<form action="/panel/groups/create/?session={{.CurrentUser.Session}}" method="post"> <form action="/panel/groups/create/?session={{.CurrentUser.Session}}" method="post">
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Name</a></div> <div class="formitem formlabel"><a>Name</a></div>
<div class="formitem"><input name="group-name" type="text" /></div> <div class="formitem"><input name="group-name" type="text" /></div>
</div> </div>
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Type</a></div> <div class="formitem formlabel"><a>Type</a></div>
<div class="formitem"> <div class="formitem">
<select name="group-type"{{if not .CurrentUser.Perms.EditGroupGlobalPerms}} disabled{{end}}> <select name="group-type"{{if not .CurrentUser.Perms.EditGroupGlobalPerms}} disabled{{end}}>
<option selected>Member</option> <option selected>Member</option>
@ -38,7 +39,7 @@
</div> </div>
</div> </div>
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Tag</a></div> <div class="formitem formlabel"><a>Tag</a></div>
<div class="formitem"><input name="group-tag" type="text" /></div> <div class="formitem"><input name="group-tag" type="text" /></div>
</div> </div>
<div class="formrow"> <div class="formrow">
@ -47,4 +48,4 @@
</form> </form>
</div> </div>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -14,7 +14,7 @@
<div class="colstack_item colstack_head"> <div class="colstack_item colstack_head">
<div class="rowitem rowhead"><a>Moderation Logs</a></div> <div class="rowitem rowhead"><a>Moderation Logs</a></div>
</div> </div>
<div class="colstack_item"> <div id="panel_modlogs" class="colstack_item">
{{range .Logs}} {{range .Logs}}
<div class="rowitem" style="font-weight: normal;text-transform: none;"> <div class="rowitem" style="font-weight: normal;text-transform: none;">
<a style="font-size: 17px;">{{.Action}}</a><br /> <a style="font-size: 17px;">{{.Action}}</a><br />
@ -26,4 +26,4 @@
{{end}} {{end}}
</div> </div>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -4,18 +4,18 @@
<div class="colstack_item colstack_head"> <div class="colstack_item colstack_head">
<div class="rowitem rowhead"><a>Plugins</a></div> <div class="rowitem rowhead"><a>Plugins</a></div>
</div> </div>
<div class="colstack_item"> <div id="panel_plugins" class="colstack_item">
{{range .ItemList}} {{range .ItemList}}
<div class="rowitem editable_parent" style="font-weight: normal;text-transform: none;"> <div class="rowitem editable_parent">
<a {{if .URL}}href="{{.URL}}" {{end}}class="editable_block" style="font-size: 20px;position:relative;top: -2px;">{{.Name}}</a><br /> <a {{if .URL}}href="{{.URL}}" {{end}}class="editable_block" class="panel_upshift">{{.Name}}</a><br />
<small style="margin-left: 2px;">Author: {{.Author}}</small> <small style="margin-left: 2px;">Author: {{.Author}}</small>
<span style="float: right;"> <span style="float: right;">
{{if .Settings}}<a href="/panel/settings/" class="username">Settings</a>{{end}} {{if .Settings}}<a href="/panel/settings/" class="panel_tag">Settings</a>{{end}}
{{if .Active}}<a href="/panel/plugins/deactivate/{{.UName}}?session={{$.CurrentUser.Session}}" class="username">Deactivate</a> {{if .Active}}<a href="/panel/plugins/deactivate/{{.UName}}?session={{$.CurrentUser.Session}}" class="panel_tag">Deactivate</a>
{{else}}<a href="/panel/plugins/activate/{{.UName}}?session={{$.CurrentUser.Session}}" class="username">Activate</a>{{end}} {{else}}<a href="/panel/plugins/activate/{{.UName}}?session={{$.CurrentUser.Session}}" class="panel_tag">Activate</a>{{end}}
</span> </span>
</div> </div>
{{end}} {{end}}
</div> </div>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -4,15 +4,15 @@
<div class="colstack_item colstack_head"> <div class="colstack_item colstack_head">
<div class="rowitem rowhead"><a>Edit Setting</a></div> <div class="rowitem rowhead"><a>Edit Setting</a></div>
</div> </div>
<div class="colstack_item"> <div id="panel_setting" class="colstack_item">
<form action="/panel/settings/edit/submit/{{.Something.Name}}?session={{.CurrentUser.Session}}" method="post"> <form action="/panel/settings/edit/submit/{{.Something.Name}}?session={{.CurrentUser.Session}}" method="post">
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Setting Name</a></div> <div class="formitem formlabel"><a>Setting Name</a></div>
<div class="formitem">{{.Something.Name}}</div> <div class="formitem formlabel">{{.Something.Name}}</div>
</div> </div>
{{if eq .Something.Type "list"}} {{if eq .Something.Type "list"}}
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Setting Value</a></div> <div class="formitem formlabel"><a>Setting Value</a></div>
<div class="formitem"> <div class="formitem">
<select name="setting-value"> <select name="setting-value">
{{range .ItemList}}<option{{if .Selected}} selected{{end}} value="{{.Value}}">{{.Label}}</option>{{end}} {{range .ItemList}}<option{{if .Selected}} selected{{end}} value="{{.Value}}">{{.Label}}</option>{{end}}
@ -21,11 +21,11 @@
</div> </div>
{{else if eq .Something.Type "bool"}} {{else if eq .Something.Type "bool"}}
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Setting Value</a></div> <div class="formitem formlabel"><a>Setting Value</a></div>
<div class="formitem"><input name="setting-value" type="checkbox"{{if eq .Something.Content "1"}} checked{{end}} /></div> <div class="formitem"><input name="setting-value" type="checkbox"{{if eq .Something.Content "1"}} checked{{end}} /></div>
</div> </div>
{{else}}<div class="formrow"> {{else}}<div class="formrow">
<div class="formitem"><a>Setting Value</a></div> <div class="formitem formlabel"><a>Setting Value</a></div>
<div class="formitem"><input name="setting-value" type="text" value="{{.Something.Content}}" /></div> <div class="formitem"><input name="setting-value" type="text" value="{{.Something.Content}}" /></div>
</div>{{end}} </div>{{end}}
<div class="formrow"> <div class="formrow">
@ -34,4 +34,4 @@
</form> </form>
</div> </div>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -4,13 +4,13 @@
<div class="colstack_item colstack_head"> <div class="colstack_item colstack_head">
<div class="rowitem rowhead"><a>Settings</a></div> <div class="rowitem rowhead"><a>Settings</a></div>
</div> </div>
<div class="colstack_item"> <div id="panel_settings" class="colstack_item">
{{range $key, $value := .Something}} {{range $key, $value := .Something}}
<div class="rowitem editable_parent" style="font-weight: normal;text-transform: none;"> <div class="rowitem editable_parent">
<a href="/panel/settings/edit/{{$key}}" class="editable_block" style="font-size: 20px;position:relative;top: -2px;">{{$key}}</a> <a href="/panel/settings/edit/{{$key}}" class="editable_block panel_upshift">{{$key}}</a>
<a style="float: right;">{{$value}}</a> <a style="float: right;">{{$value}}</a>
</div> </div>
{{end}} {{end}}
</div> </div>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -1,21 +1,28 @@
{{template "header.html" . }} {{template "header.html" . }}
{{template "panel-menu.html" . }} {{template "panel-menu.html" . }}
<style type="text/css">.rowitem::after {content:"";display:block;clear:both;}</style> <style type="text/css">
.rowitem::after {
content: "";
display: block;
clear: both;
}
</style>
<div class="colstack_right"> <div class="colstack_right">
<div class="colstack_item colstack_head"> <div class="colstack_item colstack_head">
<div class="rowitem rowhead"><a>Primary Themes</a></div> <div class="rowitem rowhead"><a>Primary Themes</a></div>
</div> </div>
<div class="colstack_item"> <div id="panel_primary_themes" class="colstack_item panel_themes">
{{range .PrimaryThemes}} {{range .PrimaryThemes}}
<div class="rowitem editable_parent" style="font-weight: normal;text-transform: none;{{if .FullImage}}background-image: url('/static/{{.FullImage}}');background-position: center;background-size: 50%;background-repeat: no-repeat;{{end}}"> <div class="theme_row rowitem editable_parent" style="{{if .FullImage}}background-image: url('/static/{{.FullImage}}');background-position: center;background-size: 50%;background-repeat: no-repeat;{{end}}">
<span style="float: left;"> <span style="float: left;">
<a href="/panel/themes/{{.Name}}" class="editable_block" style="font-size: 20px;">{{.FriendlyName}}</a><br /> <a href="/panel/themes/{{.Name}}" class="editable_block" style="font-size: 17px;">{{.FriendlyName}}</a><br />
<small style="margin-left: 2px;">Author: {{.Creator}}</small> <small class="panel_theme_author" style="margin-left: 2px;">Author: <a href="//{{.URL}}">{{.Creator}}</a></small>
</span> </span>
<span style="float: right;"> <span class="panel_floater">
{{if .MobileFriendly}}<span class="username" title="Mobile Friendly">📱</span>{{end}} {{if .MobileFriendly}}<span class="panel_tag panel_theme_mobile" title="Mobile Friendly">📱</span>{{end}}
{{if .Tag}}<span class="username">{{.Tag}}</span>{{end}} {{if .Tag}}<span class="panel_tag panel_theme_tag">{{.Tag}}</span>{{end}}
{{if .Active}}<span class="username">Default</span>{{else}}<a href="/panel/themes/default/{{.Name}}?session={{$.CurrentUser.Session}}" class="username">Make Default</a>{{end}} {{if .Active}}<span class="panel_tag panel_right_button">Default</span>{{else}}<a href="/panel/themes/default/{{.Name}}?session={{$.CurrentUser.Session}}" class="panel_tag panel_right_button">Make Default</a>{{end}}
</span> </span>
</div> </div>
{{end}} {{end}}
@ -23,20 +30,20 @@
<div class="colstack_item colstack_head"> <div class="colstack_item colstack_head">
<div class="rowitem rowhead"><a>Variant Themes</a></div> <div class="rowitem rowhead"><a>Variant Themes</a></div>
</div> </div>
<div class="colstack_item"> <div id="panel_variant_themes" class="colstack_item panel_themes">
{{range .VariantThemes}} {{range .VariantThemes}}
<div class="rowitem editable_parent" style="font-weight: normal;text-transform: none;{{if .FullImage}}background-image: url('/static/{{.FullImage}}');background-position: center;background-size: 50%;background-repeat: no-repeat;{{end}}"> <div class="theme_row rowitem editable_parent" style="{{if .FullImage}}background-image: url('/static/{{.FullImage}}');background-position: center;background-size: 50%;background-repeat: no-repeat;{{end}}">
<span style="float: left;"> <span style="float: left;">
<a href="/panel/themes/{{.Name}}" class="editable_block" style="font-size: 20px;">{{.FriendlyName}}</a><br /> <a href="/panel/themes/{{.Name}}" class="editable_block" style="font-size: 17px;">{{.FriendlyName}}</a><br />
<small style="margin-left: 2px;">Author: {{.Creator}}</small> <small class="panel_theme_author" style="margin-left: 2px;">Author: <a href="//{{.URL}}">{{.Creator}}</a></small>
</span> </span>
<span style="float: right;"> <span class="panel_floater">
{{if .MobileFriendly}}<span class="username" title="Mobile Friendly">📱</span>{{end}} {{if .MobileFriendly}}<span class="panel_tag panel_theme_mobile" title="Mobile Friendly">📱</span>{{end}}
{{if .Tag}}<span class="username">{{.Tag}}</span>{{end}} {{if .Tag}}<span class="panel_tag panel_theme_tag">{{.Tag}}</span>{{end}}
{{if .Active}}<span class="username">Default</span>{{else}}<a href="/panel/themes/default/{{.Name}}?session={{$.CurrentUser.Session}}" class="username">Make Default</a>{{end}} {{if .Active}}<span class="panel_tag panel_right_button">Default</span>{{else}}<a href="/panel/themes/default/{{.Name}}?session={{$.CurrentUser.Session}}" class="panel_tag panel_right_button">Make Default</a>{{end}}
</span> </span>
</div> </div>
{{end}} {{end}}
</div> </div>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -4,23 +4,23 @@
<div class="colstack_item colstack_head"> <div class="colstack_item colstack_head">
<div class="rowitem rowhead"><a>User Editor</a></div> <div class="rowitem rowhead"><a>User Editor</a></div>
</div> </div>
<div class="colstack_item"> <div id="panel_user" class="colstack_item">
<form action="/panel/users/edit/submit/{{.Something.ID}}?session={{.CurrentUser.Session}}" method="post"> <form action="/panel/users/edit/submit/{{.Something.ID}}?session={{.CurrentUser.Session}}" method="post">
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Name</a></div> <div class="formitem formlabel"><a>Name</a></div>
<div class="formitem"><input name="user-name" type="text" value="{{.Something.Name}}" placeholder="Jane Doe" /></div> <div class="formitem"><input name="user-name" type="text" value="{{.Something.Name}}" placeholder="Jane Doe" /></div>
</div> </div>
{{if .CurrentUser.Perms.EditUserPassword}}<div class="formrow"> {{if .CurrentUser.Perms.EditUserPassword}}<div class="formrow">
<div class="formitem"><a>Password</a></div> <div class="formitem formlabel"><a>Password</a></div>
<div class="formitem"><input name="user-password" type="password" placeholder="*****" /></div> <div class="formitem"><input name="user-password" type="password" placeholder="*****" /></div>
</div>{{end}} </div>{{end}}
{{if .CurrentUser.Perms.EditUserEmail}}<div class="formrow"> {{if .CurrentUser.Perms.EditUserEmail}}<div class="formrow">
<div class="formitem"><a>Email</a></div> <div class="formitem formlabel"><a>Email</a></div>
<div class="formitem"><input name="user-email" type="email" value="{{.Something.Email}}" placeholder="example@localhost" /></div> <div class="formitem"><input name="user-email" type="email" value="{{.Something.Email}}" placeholder="example@localhost" /></div>
</div>{{end}} </div>{{end}}
{{if .CurrentUser.Perms.EditUserGroup}} {{if .CurrentUser.Perms.EditUserGroup}}
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Group</a></div> <div class="formitem formlabel"><a>Group</a></div>
<div class="formitem"> <div class="formitem">
<select name="user-group"> <select name="user-group">
{{range .ItemList}}<option {{if eq .ID $.Something.Group}}selected {{end}}value="{{.ID}}">{{.Name}}</option>{{end}} {{range .ItemList}}<option {{if eq .ID $.Something.Group}}selected {{end}}value="{{.ID}}">{{.Name}}</option>{{end}}
@ -33,4 +33,4 @@
</form> </form>
</div> </div>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -1,21 +1,23 @@
{{template "header.html" . }} {{template "header.html" . }}
{{template "panel-menu.html" . }} {{template "panel-menu.html" . }}
<div class="colstack_right"> <div class="colstack_right">
<div class="colstack_item colstack_head"> <div class="colstack_item colstack_head">
<div class="rowitem rowhead"><a>Users</a></div> <div class="rowitem rowhead"><a>Users</a></div>
</div> </div>
<div class="colstack_item"> <div id="panel_users" class="colstack_item">
{{range .ItemList}} {{range .ItemList}}
<div class="rowitem editable_parent" style="font-weight: normal;text-transform: none;"> <div class="rowitem editable_parent" style="font-weight: normal;text-transform: none;">
<a {{if $.CurrentUser.Perms.EditUser}}href="/panel/users/edit/{{.ID}}?session={{$.CurrentUser.Session}} "{{end}}class="editable_block" style="font-size: 20px;position:relative;top: -2px;">{{.Name}}</a> <a {{if $.CurrentUser.Perms.EditUser}}href="/panel/users/edit/{{.ID}}?session={{$.CurrentUser.Session}} "{{end}}class="editable_block">{{.Name}}</a>
<a href="/user/{{.ID}}" class="tag-mini" style="margin-left: 3px;position: relative;top:-5px;color: #505050;">Profile</a> <a href="/user/{{.ID}}" class="tag-mini">Profile</a>
{{if .Tag}}<span class="username" style="margin-left 4px;{{if (.Is_Super_Mod) and (.Active)}}float: right;{{end}}">{{.Tag}}</span>{{end}} {{if .Tag}}<span class="panel_tag" style="margin-left 4px;{{if (.Is_Super_Mod) and (.Active)}}float: right;{{end}}">{{.Tag}}</span>{{end}}
<span style="float: right;">
{{if .Is_Banned}}<a href="/users/unban/{{.ID}}?session={{$.CurrentUser.Session}}" class="username">Unban</a>{{else if not .Is_Super_Mod}}<a href="/users/ban/{{.ID}}?session={{$.CurrentUser.Session}}" class="username">Ban</a>{{end}} <span class="panel_floater">
{{if not .Active}}<a href="/users/activate/{{.ID}}?session={{$.CurrentUser.Session}}" class="username">Activate</a>{{end}} {{if .Is_Banned}}<a href="/users/unban/{{.ID}}?session={{$.CurrentUser.Session}}" class="panel_tag panel_right_button">Unban</a>{{else if not .Is_Super_Mod}}<a href="/users/ban/{{.ID}}?session={{$.CurrentUser.Session}}" class="panel_tag panel_right_button">Ban</a>{{end}}
{{if not .Active}}<a href="/users/activate/{{.ID}}?session={{$.CurrentUser.Session}}" class="panel_tag panel_right_button">Activate</a>{{end}}
</span> </span>
</div> </div>
{{end}} {{end}}
</div> </div>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -1,32 +1,42 @@
{{template "header.html" . }} {{template "header.html" . }}
<div class="colblock_left" style="max-width: 220px;">
<div class="rowitem" style="padding: 0;"><img src="{{.ProfileOwner.Avatar}}" style="max-width: 100%;margin: 0;display: block;" /></div> <div id="profile_left_pane" class="colblock_left" style="max-width: 220px;">
<div class="rowitem" style="text-transform: capitalize;"> <div class="rowitem" style="padding: 0;">
<img src="{{.ProfileOwner.Avatar}}" style="max-width: 100%;margin: 0;display: block;" />
</div>
<div class="rowitem">
<span style="font-size: 18px;">{{.ProfileOwner.Name}}</span>{{if .ProfileOwner.Tag}}<span class="username" style="float: right;font-weight: normal;">{{.ProfileOwner.Tag}}</span>{{end}} <span style="font-size: 18px;">{{.ProfileOwner.Name}}</span>{{if .ProfileOwner.Tag}}<span class="username" style="float: right;font-weight: normal;">{{.ProfileOwner.Tag}}</span>{{end}}
</div> </div>
<div class="rowitem passive"> <div class="rowitem passive">
<a class="username">Add Friend</a> <a class="profile_menu_item">Add Friend</a>
</div>
<div class="rowitem passive"
{{if (.CurrentUser.Is_Super_Mod) and not (.ProfileOwner.Is_Super_Mod) }} {{if (.CurrentUser.Is_Super_Mod) and not (.ProfileOwner.Is_Super_Mod) }}
{{if .ProfileOwner.Is_Banned }}<a href="/users/unban/{{.ProfileOwner.ID}}?session={{.CurrentUser.Session}}" class="username">Unban</a>{{else}}<a href="/users/ban/{{.ProfileOwner.ID}}?session={{.CurrentUser.Session}}" class="username">Ban</a>{{end}} {{if .ProfileOwner.Is_Banned }}<a href="/users/unban/{{.ProfileOwner.ID}}?session={{.CurrentUser.Session}}" class="username">Unban</a>{{else}}<a href="/users/ban/{{.ProfileOwner.ID}}?session={{.CurrentUser.Session}}" class="username">Ban</a>{{end}}
{{end}} {{end}}
<a href="/report/submit/{{.ProfileOwner.ID}}?session={{.CurrentUser.Session}}&type=user" class="username report_item">Report</a> <a href="/report/submit/{{.ProfileOwner.ID}}?session={{.CurrentUser.Session}}&type=user" class="profile_menu_item report_item">Report</a>
</div> </div>
</div> </div>
<div class="colblock_right">
<div class="colblock_right" style="width: calc(95% - 210px);">
<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 id="profile_comments" class="colblock_right" style="overflow: hidden;border-top: none;width:calc(95% - 210px);">{{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="real_username username">{{.CreatedByName}}</a>&nbsp;&nbsp;
<a href="/user/{{.CreatedBy}}" class="username">{{.CreatedByName}}</a>&nbsp;
{{if $.CurrentUser.Is_Mod}}<a href="/profile/reply/edit/submit/{{.ID}}" class="mod_button" title="Edit Item"><button class="username edit_item">Edit</button></a>&nbsp; {{if $.CurrentUser.Is_Mod}}<a href="/profile/reply/edit/submit/{{.ID}}" class="mod_button" title="Edit Item"><button class="username edit_item edit_label"></button></a>
<a href="/profile/reply/delete/submit/{{.ID}}" class="mod_button" title="Delete Item"><button class="username delete_item">Delete</button></a>&nbsp;{{end}}
<a href="/report/submit/{{.ID}}?session={{$.CurrentUser.Session}}&type=user-reply"><button class="username report_item">Report</button></a> <a href="/profile/reply/delete/submit/{{.ID}}" class="mod_button" title="Delete Item"><button class="username delete_item trash_label"></button></a>{{end}}
<a class="mod_button" href="/report/submit/{{.ID}}?session={{$.CurrentUser.Session}}&type=user-reply"><button class="username report_item flag_label"></button></a>
{{if .Tag}}<a class="username hide_on_mobile" style="float: right;">{{.Tag}}</a>{{end}} {{if .Tag}}<a class="username hide_on_mobile" style="float: right;">{{.Tag}}</a>{{end}}
</div> </div>
{{end}}</div> {{end}}</div>
<div class="colblock_right" style="border-top: none;">
<div class="colblock_right" style="border-top: none;width: calc(95% - 210px);">
{{if not .CurrentUser.Is_Banned}} {{if not .CurrentUser.Is_Banned}}
<form action="/profile/reply/create/" method="post"> <form action="/profile/reply/create/" method="post">
<input name="uid" value='{{.ProfileOwner.ID}}' type="hidden" /> <input name="uid" value='{{.ProfileOwner.ID}}' type="hidden" />
@ -39,4 +49,5 @@
</form> </form>
{{end}} {{end}}
</div> </div>
{{template "footer.html" . }}
{{template "footer.html" . }}

View File

@ -5,19 +5,19 @@
<div class="rowblock"> <div class="rowblock">
<form action="/accounts/create/submit/" method="post"> <form action="/accounts/create/submit/" method="post">
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Account Name</a></div> <div class="formitem formlabel"><a>Account Name</a></div>
<div class="formitem"><input name="username" type="text" placeholder="Account Name" /></div> <div class="formitem"><input name="username" type="text" placeholder="Account Name" /></div>
</div> </div>
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Email</a></div> <div class="formitem formlabel"><a>Email</a></div>
<div class="formitem"><input name="email" type="email" placeholder="joe.doe@example.com" /></div> <div class="formitem"><input name="email" type="email" placeholder="joe.doe@example.com" /></div>
</div> </div>
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Password</a></div> <div class="formitem formlabel"><a>Password</a></div>
<div class="formitem"><input name="password" type="password" autocomplete="new-password" placeholder="*****" /></div> <div class="formitem"><input name="password" type="password" autocomplete="new-password" placeholder="*****" /></div>
</div> </div>
<div class="formrow"> <div class="formrow">
<div class="formitem"><a>Confirm Password</a></div> <div class="formitem formlabel"><a>Confirm Password</a></div>
<div class="formitem"><input name="confirm_password" type="password" placeholder="*****" /></div> <div class="formitem"><input name="confirm_password" type="password" placeholder="*****" /></div>
</div> </div>
<div class="formrow"> <div class="formrow">
@ -25,4 +25,4 @@
</div> </div>
</form> </form>
</div> </div>
{{template "footer.html" . }} {{template "footer.html" . }}

View File

@ -1,7 +1,12 @@
{{template "header.html" . }} {{template "header.html" . }}
{{if gt .Page 1}}<div id="prevFloat" class="prev_button"><a class="prev_link" href="/topic/{{.Topic.ID}}?page={{subtract .Page 1}}">&lt;</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}}">&lt;</a></div>{{end}}
{{if ne .LastPage .Page}}<link rel="prerender" href="/topic/{{.Topic.ID}}?page={{add .Page 1}}" /> {{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}}">&gt;</a></div>{{end}} <div id="nextFloat" class="next_button">
<a class="next_link" href="/topic/{{.Topic.ID}}?page={{add .Page 1}}">&gt;</a>
</div>{{end}}
<div class="rowblock topic_block"> <div class="rowblock topic_block">
<form action='/topic/edit/submit/{{.Topic.ID}}' method="post"> <form action='/topic/edit/submit/{{.Topic.ID}}' method="post">
<div class="rowitem rowhead topic_item"{{if .Topic.Sticky}} style="background-color:#FFFFEA;"{{else if .Topic.Is_Closed}} style="background-color:#eaeaea;"{{end}}> <div class="rowitem rowhead topic_item"{{if .Topic.Sticky}} style="background-color:#FFFFEA;"{{else if .Topic.Is_Closed}} style="background-color:#eaeaea;"{{end}}>
@ -22,14 +27,27 @@
<div class="rowitem passive editable_parent post_item" style="border-bottom: none;{{if .Topic.Avatar}}background-image:url({{.Topic.Avatar}}), url(/static/white-dot.jpg);background-position: 0px {{if le .Topic.ContentLines 5}}-1{{end}}0px;background-repeat:no-repeat, repeat-y;background-size:128px;padding-left:136px;{{.Topic.Css}}{{end}}"> <div class="rowitem passive editable_parent post_item" style="border-bottom: none;{{if .Topic.Avatar}}background-image:url({{.Topic.Avatar}}), url(/static/white-dot.jpg);background-position: 0px {{if le .Topic.ContentLines 5}}-1{{end}}0px;background-repeat:no-repeat, repeat-y;background-size:128px;padding-left:136px;{{.Topic.Css}}{{end}}">
<p class="hide_on_edit topic_content user_content" style="margin:0;padding:0;">{{.Topic.Content}}</p> <p class="hide_on_edit topic_content user_content" style="margin:0;padding:0;">{{.Topic.Content}}</p>
<textarea name="topic_content" class="show_on_edit topic_content_input">{{.Topic.Content}}</textarea> <textarea name="topic_content" class="show_on_edit topic_content_input">{{.Topic.Content}}</textarea>
<a href="/user/{{.Topic.CreatedBy}}" class="username real_username">{{.Topic.CreatedByName}}</a>&nbsp;
{{if .CurrentUser.Perms.LikeItem}}<a href="/topic/like/submit/{{.Topic.ID}}" class="mod_button" title="Love it" style="color:#202020;"><button class="username" style="{{if .Topic.Liked}}background-color:/*#eaffea*/#D6FFD6;{{end}}">😀</button></a>&nbsp;{{end}} <span class="controls">
{{if .CurrentUser.Perms.EditTopic}}<a href='/topic/edit/{{.Topic.ID}}' class="mod_button open_edit" style="font-weight:normal;" title="Edit Topic"><button class="username">🖊️</button></a>&nbsp;{{end}}
{{if .CurrentUser.Perms.DeleteTopic}}<a href='/topic/delete/submit/{{.Topic.ID}}' class="mod_button" style="font-weight:normal;" title="Delete Topic"><button class="username">🗑️</button></a>&nbsp;{{end}} <a href="/user/{{.Topic.CreatedBy}}" class="username real_username">{{.Topic.CreatedByName}}</a>&nbsp;&nbsp;
{{if .CurrentUser.Perms.PinTopic}}{{if .Topic.Sticky}}<a class="mod_button" href='/topic/unstick/submit/{{.Topic.ID}}' style="font-weight:normal;" title="Unpin Topic"><button class="username" style="background-color:/*#eaffea*/#D6FFD6;">📌</button></a>{{else}}<a href='/topic/stick/submit/{{.Topic.ID}}' class="mod_button" style="font-weight:normal;" title="Pin Topic"><button class="username">📌</button></a>&nbsp;{{end}}{{end}}
<a href="/report/submit/{{.Topic.ID}}?session={{.CurrentUser.Session}}&type=topic" class="mod_button report_item" style="font-weight:normal;" title="Flag Topic"><button class="username">🚩</button></a>&nbsp; {{if .CurrentUser.Perms.LikeItem}}<a href="/topic/like/submit/{{.Topic.ID}}" class="mod_button" title="Love it" style="color:#202020;">
{{if .Topic.LikeCount}}<a class="username hide_on_micro" style="float: right;color:#505050;border-left:none;padding-left:5px;padding-right:5px;font-size:17px;">{{.Topic.LikeCount}}</a><a class="username hide_on_micro" style="color:#505050;float:right;opacity:0.85;margin-left:5px;" title="Like Count">😀</a>{{end}} <button class="username like_label" style="{{if .Topic.Liked}}background-color:/*#eaffea*/#D6FFD6;{{end}}"></button></a>{{end}}
{{if .Topic.Tag}}<a class="username hide_on_micro" style="float:right;color:#505050;font-size:16px;">{{.Topic.Tag}}</a>{{else}}<a class="username hide_on_micro level">{{.Topic.Level}}</a><a class="username hide_on_micro" style="color:#505050;float:right;opacity:0.85;" title="Level">👑</a>{{end}}
{{if .CurrentUser.Perms.EditTopic}}<a href='/topic/edit/{{.Topic.ID}}' class="mod_button open_edit" style="font-weight:normal;" title="Edit Topic"><button class="username edit_label"></button></a>{{end}}
{{if .CurrentUser.Perms.DeleteTopic}}<a href='/topic/delete/submit/{{.Topic.ID}}' class="mod_button" style="font-weight:normal;" title="Delete Topic"><button class="username trash_label"></button></a>{{end}}
{{if .CurrentUser.Perms.PinTopic}}{{if .Topic.Sticky}}<a class="mod_button" href='/topic/unstick/submit/{{.Topic.ID}}' style="font-weight:normal;" title="Unpin Topic"><button class="username unpin_label"></button></a>{{else}}<a href='/topic/stick/submit/{{.Topic.ID}}' class="mod_button" style="font-weight:normal;" title="Pin Topic"><button class="username pin_label"></button></a>{{end}}{{end}}
<a class="mod_button" href="/report/submit/{{.Topic.ID}}?session={{.CurrentUser.Session}}&type=topic" class="mod_button report_item" style="font-weight:normal;" title="Flag Topic"><button class="username flag_label"></button></a>
{{if .Topic.LikeCount}}<a class="username hide_on_micro like_count">{{.Topic.LikeCount}}</a><a class="username hide_on_micro like_count_label" title="Like Count"></a>{{end}}
{{if .Topic.Tag}}<a class="username hide_on_micro" style="float:right;color:#505050;font-size:16px;">{{.Topic.Tag}}</a>{{else}}<a class="username hide_on_micro level">{{.Topic.Level}}</a><a class="username hide_on_micro level_label" style="color:#505050;float:right;opacity:0.85;" title="Level"></a>{{end}}
</span>
</div> </div>
</div> </div>
<div class="rowblock post_container" style="overflow: hidden;">{{range .ItemList}}{{if .ActionType}} <div class="rowblock post_container" style="overflow: hidden;">{{range .ItemList}}{{if .ActionType}}
@ -40,13 +58,24 @@
{{else}} {{else}}
<div class="rowitem passive deletable_block editable_parent post_item" 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 post_item" 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}}">
<p class="editable_block user_content" style="margin:0;padding:0;">{{.ContentHtml}}</p> <p class="editable_block user_content" style="margin:0;padding:0;">{{.ContentHtml}}</p>
<a href="/user/{{.CreatedBy}}" class="username real_username">{{.CreatedByName}}</a>&nbsp;
{{if $.CurrentUser.Perms.LikeItem}}<a href="/reply/like/submit/{{.ID}}" class="mod_button" title="Love it" style="color:#202020;"><button class="username" style="{{if .Liked}}background-color:/*#eaffea*/#D6FFD6;{{end}}">😀</button></a>&nbsp;{{end}} <span class="controls">
{{if $.CurrentUser.Perms.EditReply}}<a href="/reply/edit/submit/{{.ID}}" class="mod_button" title="Edit Reply"><button class="username edit_item">🖊️</button></a>&nbsp;{{end}}
{{if $.CurrentUser.Perms.DeleteReply}}<a href="/reply/delete/submit/{{.ID}}" class="mod_button" title="Delete Reply"><button class="username delete_item">🗑️</button></a>&nbsp;{{end}} <a href="/user/{{.CreatedBy}}" class="username real_username">{{.CreatedByName}}</a>&nbsp;&nbsp;
<a href="/report/submit/{{.ID}}?session={{$.CurrentUser.Session}}&type=reply" class="mod_button" title="Flag Reply"><button class="username report_item">🚩</button></a>&nbsp;
{{if .LikeCount}}<a class="username hide_on_micro" style="float: right;color:#505050;border-left:none;padding-left:5px;padding-right:5px;font-size:17px;">{{.LikeCount}}</a><a class="username hide_on_micro" style="color:#505050;float:right;opacity:0.85;margin-left:5px;" title="Like Count">😀</a>{{end}} {{if $.CurrentUser.Perms.LikeItem}}<a href="/reply/like/submit/{{.ID}}" class="mod_button" title="Love it" style="color:#202020;"><button class="username like_label" style="{{if .Liked}}background-color:/*#eaffea*/#D6FFD6;{{end}}"></button></a>{{end}}
{{if .Tag}}<a class="username hide_on_micro" style="float: right;color:#505050;font-size:16px;">{{.Tag}}</a>{{else}}<a class="username hide_on_micro level">{{.Level}}</a><a class="username hide_on_micro" style="color:#505050;float:right;opacity:0.85;" title="Level">👑{{end}}</a>
{{if $.CurrentUser.Perms.EditReply}}<a href="/reply/edit/submit/{{.ID}}" class="mod_button" title="Edit Reply"><button class="username edit_item edit_label"></button></a>{{end}}
{{if $.CurrentUser.Perms.DeleteReply}}<a href="/reply/delete/submit/{{.ID}}" class="mod_button" title="Delete Reply"><button class="username delete_item trash_label"></button></a>{{end}}
<a class="mod_button" href="/report/submit/{{.ID}}?session={{$.CurrentUser.Session}}&type=reply" class="mod_button report_item" title="Flag Reply"><button class="username report_item flag_label"></button></a>
{{if .LikeCount}}<a class="username hide_on_micro like_count">{{.LikeCount}}</a><a class="username hide_on_micro like_count_label" title="Like Count"></a>{{end}}
{{if .Tag}}<a class="username hide_on_micro" style="float: right;color:#505050;font-size:16px;">{{.Tag}}</a>{{else}}<a class="username hide_on_micro level">{{.Level}}</a><a class="username hide_on_micro level_label" style="color:#505050;float:right;opacity:0.85;" title="Level">{{end}}</a>
</span>
</div> </div>
{{end}}{{end}}</div> {{end}}{{end}}</div>

View File

@ -1,16 +1,18 @@
/* Copyright Azareal 2016 - 2017 */ /* Copyright Azareal 2016 - 2018 */
package main package main
//import "fmt" import (
import "log" //"fmt"
import "io" "log"
import "os" "io"
import "strings" "os"
import "mime" "strings"
import "io/ioutil" "mime"
import "path/filepath" "io/ioutil"
import "encoding/json" "path/filepath"
import "net/http" "encoding/json"
"net/http"
)
var defaultTheme string var defaultTheme string
var themes map[string]Theme = make(map[string]Theme) var themes map[string]Theme = make(map[string]Theme)
@ -29,9 +31,10 @@ type Theme struct
HideFromThemes bool HideFromThemes bool
ForkOf string ForkOf string
Tag string Tag string
URL string
Settings map[string]ThemeSetting Settings map[string]ThemeSetting
Templates []TemplateMapping Templates []TemplateMapping
// This variable should only be set and unset by the system, not the theme meta file // This variable should only be set and unset by the system, not the theme meta file
Active bool Active bool
} }
@ -54,28 +57,28 @@ func init_themes() {
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
for _, themeFile := range themeFiles { for _, themeFile := range themeFiles {
if !themeFile.IsDir() { if !themeFile.IsDir() {
continue continue
} }
themeName := themeFile.Name() themeName := themeFile.Name()
log.Print("Adding theme '" + themeName + "'") log.Print("Adding theme '" + themeName + "'")
themeFile, err := ioutil.ReadFile("./themes/" + themeName + "/theme.json") themeFile, err := ioutil.ReadFile("./themes/" + themeName + "/theme.json")
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
var theme Theme var theme Theme
err = json.Unmarshal(themeFile, &theme) err = json.Unmarshal(themeFile, &theme)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
theme.Active = false // Set this to false, just in case someone explicitly overrode this value in the JSON file theme.Active = false // Set this to false, just in case someone explicitly overrode this value in the JSON file
if theme.FullImage != "" { if theme.FullImage != "" {
if debug { if debug {
log.Print("Adding theme image") log.Print("Adding theme image")
@ -85,7 +88,7 @@ func init_themes() {
log.Fatal(err) log.Fatal(err)
} }
} }
themes[theme.Name] = theme themes[theme.Name] = theme
} }
} }
@ -99,22 +102,22 @@ func add_theme_static_files(themeName string) {
return nil return nil
} }
path = strings.Replace(path,"\\","/",-1) path = strings.Replace(path,"\\","/",-1)
if debug { if debug {
log.Print("Attempting to add static file '" + path + "' for default theme '" + themeName + "'") log.Print("Attempting to add static file '" + path + "' for default theme '" + themeName + "'")
} }
data, err := ioutil.ReadFile(path) data, err := ioutil.ReadFile(path)
if err != nil { if err != nil {
return err return err
} }
path = strings.TrimPrefix(path,"themes/" + themeName + "/public") path = strings.TrimPrefix(path,"themes/" + themeName + "/public")
if debug { if debug {
log.Print("Added the '" + path + "' static file for default theme " + themeName + ".") log.Print("Added the '" + path + "' static file for default theme " + themeName + ".")
} }
gzip_data := compress_bytes_gzip(data) gzip_data := compress_bytes_gzip(data)
static_files["/static" + path] = SFile{data,gzip_data,0,int64(len(data)),int64(len(gzip_data)),mime.TypeByExtension(filepath.Ext("/themes/" + themeName + "/public" + path)),f,f.ModTime().UTC().Format(http.TimeFormat)} static_files["/static" + path] = SFile{data,gzip_data,0,int64(len(data)),int64(len(gzip_data)),mime.TypeByExtension(filepath.Ext("/themes/" + themeName + "/public" + path)),f,f.ModTime().UTC().Format(http.TimeFormat)}
return nil return nil
}) })
@ -132,9 +135,9 @@ func map_theme_templates(theme Theme) {
if themeTmpl.Source == "" { if themeTmpl.Source == "" {
log.Fatal("Invalid source template name") log.Fatal("Invalid source template name")
} }
// `go generate` is one possibility for letting plugins inject custom page structs, but it would simply add another step of compilation. It might be simpler than the current build process from the perspective of the administrator? // `go generate` is one possibility for letting plugins inject custom page structs, but it would simply add another step of compilation. It might be simpler than the current build process from the perspective of the administrator?
dest_tmpl_ptr, ok := tmpl_ptr_map[themeTmpl.Name] dest_tmpl_ptr, ok := tmpl_ptr_map[themeTmpl.Name]
if !ok { if !ok {
log.Fatal("The destination template doesn't exist!") log.Fatal("The destination template doesn't exist!")
@ -143,7 +146,7 @@ func map_theme_templates(theme Theme) {
if !ok { if !ok {
log.Fatal("The source template doesn't exist!") log.Fatal("The source template doesn't exist!")
} }
switch d_tmpl_ptr := dest_tmpl_ptr.(type) { switch d_tmpl_ptr := dest_tmpl_ptr.(type) {
case *func(TopicPage,io.Writer): case *func(TopicPage,io.Writer):
switch s_tmpl_ptr := source_tmpl_ptr.(type) { switch s_tmpl_ptr := source_tmpl_ptr.(type) {
@ -208,24 +211,24 @@ func map_theme_templates(theme Theme) {
func reset_template_overrides() { func reset_template_overrides() {
log.Print("Resetting the template overrides") log.Print("Resetting the template overrides")
for name, _ := range overriden_templates { for name, _ := range overriden_templates {
log.Print("Resetting '" + name + "' template override") log.Print("Resetting '" + name + "' template override")
origin_pointer, ok := tmpl_ptr_map["o_" + name] origin_pointer, ok := tmpl_ptr_map["o_" + name]
if !ok { if !ok {
//log.Fatal("The origin template doesn't exist!") //log.Fatal("The origin template doesn't exist!")
log.Print("The origin template doesn't exist!") log.Print("The origin template doesn't exist!")
return return
} }
dest_tmpl_ptr, ok := tmpl_ptr_map[name] dest_tmpl_ptr, ok := tmpl_ptr_map[name]
if !ok { if !ok {
//log.Fatal("The destination template doesn't exist!") //log.Fatal("The destination template doesn't exist!")
log.Print("The destination template doesn't exist!") log.Print("The destination template doesn't exist!")
return return
} }
// Not really a pointer, more of a function handle, an artifact from one of the earlier versions of themes.go // Not really a pointer, more of a function handle, an artifact from one of the earlier versions of themes.go
switch o_ptr := origin_pointer.(type) { switch o_ptr := origin_pointer.(type) {
case func(TopicPage,io.Writer): case func(TopicPage,io.Writer):

View File

@ -6,10 +6,11 @@
"Disabled": true, "Disabled": true,
"HideFromThemes": true, "HideFromThemes": true,
"Tag": "🏗️", "Tag": "🏗️",
"URL": "github.com/Azareal/Gosora",
"Templates": [ "Templates": [
{ {
"Name": "topic", "Name": "topic",
"Source": "topic_alt" "Source": "topic_alt"
} }
] ]
} }

View File

@ -7,22 +7,19 @@
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
} }
h1 h1 {
{
text-shadow: 0 1px 0 black; text-shadow: 0 1px 0 black;
color: darkgray; color: darkgray;
height: 60px; height: 60px;
} }
a a {
{
text-decoration: none; text-decoration: none;
color: black; color: black;
} }
a img { border: 0; /* IE fix..*/ } a img { border: 0; /* IE fix..*/ }
body body {
{
background: url('/static/atombb-small.png') no-repeat left, url('/static/stars-mk1.png'); background: url('/static/atombb-small.png') no-repeat left, url('/static/stars-mk1.png');
color: black; color: black;
background-color: #141414; background-color: #141414;
@ -31,15 +28,13 @@ body
font-family: Arial; font-family: Arial;
} }
ul ul {
{
background: darkgray; background: darkgray;
padding-top: 0px; padding-top: 0px;
padding-bottom: 0px; padding-bottom: 0px;
list-style-type: none; list-style-type: none;
} }
li li {
{
display: block; display: block;
float: left; float: left;
text-align: center; text-align: center;
@ -48,7 +43,7 @@ li
margin-right: 2px; margin-right: 2px;
padding-left: 1px; padding-left: 1px;
padding-right: 1px; padding-right: 1px;
border: 1px solid #7a7a7a; border: 1px solid #7a7a7a;
border-top: none; border-top: none;
border-bottom: none; border-bottom: none;
@ -58,27 +53,23 @@ li
} }
li:first-child { border-left: 1px solid #7a7a7a; } li:first-child { border-left: 1px solid #7a7a7a; }
li a li a {
{
color: white; color: white;
text-decoration: none; text-decoration: none;
} }
li:hover a, li a:hover, li a:link, li a:visited li:hover a, li a:hover, li a:link, li a:visited {
{
color: white; color: white;
text-decoration: none; text-decoration: none;
} }
li:hover li:hover {
{
background: rgba(10,10,10,0.5); background: rgba(10,10,10,0.5);
font-weight: normal; font-weight: normal;
color: white; color: white;
} }
.menu_right .menu_right {
{
float: right; float: right;
color: white; color: white;
font-size: 25px; font-size: 25px;
@ -144,7 +135,6 @@ li:hover
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.alertItem.withAvatar { .alertItem.withAvatar {
/*background-image: url('/uploads/avatar_1.jpg');*/
background-size: 36px; background-size: 36px;
background-repeat: no-repeat; background-repeat: no-repeat;
text-align: center; text-align: center;
@ -166,8 +156,7 @@ li:hover
font-size: 9px; font-size: 9px;
} }
#footer #footer {
{
clear: left; clear: left;
margin: 0px auto; margin: 0px auto;
width: 300px; width: 300px;
@ -176,14 +165,12 @@ li:hover
hr { color: silver; border: 1px solid silver; } hr { color: silver; border: 1px solid silver; }
.rowhead .rowhead {
{
border-top: none; border-top: none;
font-weight: bold; font-weight: bold;
color: white; color: white;
} }
.rowhead:hover .rowhead:hover {
{
color: rgba(200,200,200,1); color: rgba(200,200,200,1);
transition: color 1s; transition: color 1s;
-moz-transition: color 1s; -moz-transition: color 1s;
@ -240,44 +227,37 @@ hr { color: silver; border: 1px solid silver; }
.rowhead .topic_status_e { display: none !important; } .rowhead .topic_status_e { display: none !important; }
.topic_button { float: right; position: relative; top: -22px; margin-right: 2px; border-style: solid !important; } .topic_button { float: right; position: relative; top: -22px; margin-right: 2px; border-style: solid !important; }
.colblock_left .colblock_left {
{
padding: 0px; padding: 0px;
padding-top: 0px; padding-top: 0px;
width: 30%; width: 30%;
float: left; float: left;
margin-right: 8px; margin-right: 8px;
} }
.colblock_right .colblock_right {
{
padding: 0px; padding: 0px;
padding-top: 0px; padding-top: 0px;
width: 65%; width: 65%;
overflow: hidden; overflow: hidden;
word-wrap: break-word; word-wrap: break-word;
} }
.colblock_left:empty { display: none; } .colblock_left:empty, .colblock_right:empty { display: none; }
.colblock_right:empty { display: none; } .colblock_left:first-of-type, .colblock_right:first-of-type { margin-top: 8px; }
.colblock_left:first-of-type { margin-top: 8px; }
.colblock_right:first-of-type { margin-top: 8px; }
/* The new method of doing columns layouts, colblock is now deprecated :( */ /* The new method of doing columns layouts, colblock is now deprecated :( */
.colstack_left .colstack_left {
{
float: left; float: left;
width: 30%; width: 30%;
margin-right: 8px; margin-right: 8px;
margin-top: 12px; margin-top: 12px;
} }
.colstack_right .colstack_right {
{
float: left; float: left;
width: 65%; width: 65%;
width: calc(70% - 15px); width: calc(70% - 15px);
margin-top: 12px; margin-top: 12px;
} }
.colstack_item .colstack_item {
{
padding: 0px; padding: 0px;
padding-top: 0px; padding-top: 0px;
margin-bottom: 16px; margin-bottom: 16px;
@ -311,92 +291,61 @@ hr { color: silver; border: 1px solid silver; }
padding-bottom: 12px; padding-bottom: 12px;
font-size: 16px; font-size: 16px;
} }
.grid_istat { .grid_istat { margin-bottom: 5px; }
/*margin-bottom: 10px;*/
margin-bottom: 5px;
}
.stat_green { background-color: lightgreen; border-color: green; } .stat_green { background-color: lightgreen; border-color: green; }
.stat_orange { background-color: #ffe4b3; border-color: orange; } .stat_orange { background-color: #ffe4b3; border-color: orange; }
.stat_red { background-color: #ffb2b2; border-color: red; } .stat_red { background-color: #ffb2b2; border-color: red; }
.stat_disabled { background-color: lightgray; border-color: gray; } .stat_disabled { background-color: lightgray; border-color: gray; }
.colitem .formrow { width: 100%; }
{ /* Clearfix */
padding-left: 8px; .formrow:before, .formrow:after {
padding-right: 8px;
padding-top: 17px;
padding-bottom: 12px;
font-weight: bold;
text-transform: uppercase;
}
.colitem.passive
{
font-weight: normal;
text-transform: none;
}
.colitem a
{
text-decoration: none;
color: black;
}
.colitem a:hover { color: silver; }
.col_left
{
width: 30%;
float: left;
}
.col_right
{
width: 69%;
overflow: hidden;
}
.formrow
{
/*height: 40px;*/
width: 100%;
}
/*Clearfix*/
.formrow:before,
.formrow:after {
content: " "; content: " ";
display: table; display: table;
} }
.formrow:after { clear: both; } .formrow:after { clear: both; }
.formrow:not(:last-child) { border-bottom: 1px dotted #ccc; } .formrow:not(:last-child) { border-bottom: 1px dotted #ccc; }
.formitem .formitem {
{
float: left; float: left;
padding-left: 8px; padding: 10px;
padding-right: 8px; min-width: 20%;
padding-top: 13px; /*font-size: 17px;*/
padding-bottom: 8px; font-weight: normal;
font-weight: bold;
} }
.formitem:first-child { font-weight: bold; }
.formitem:not(:last-child) { border-right: 1px dotted #ccc; } .formitem:not(:last-child) { border-right: 1px dotted #ccc; }
.formitem.invisible_border { border: none; } .formitem.invisible_border { border: none; }
/* Mostly for textareas */ /* Mostly for textareas */
.formitem:only-child { width: 100%; } .formitem:only-child { width: 100%; }
.formitem textarea .formitem textarea {
{
width: 100%; width: 100%;
height: 100px; height: 100px;
outline-color: #8e8e8e; outline-color: #8e8e8e;
} }
.formitem:not(:only-child) input, .formitem:not(:only-child) select { padding: 3px;/*5px;*/ }
.formitem:not(:only-child).formlabel {
padding-top: 15px;/*18px;*/
padding-bottom: 12px;/*16px;*/
/*padding-left: 15px;*/
}
.formbutton {
padding: 7px;
display: block;
margin-left: auto;
margin-right: auto;
font-size: 14px;
border-color: #ccc;
}
.tbody .tbody {
{
border-top: 1px solid silver; border-top: 1px solid silver;
margin: 8px; margin: 8px;
padding: 8px; padding: 8px;
} }
.error .error {
{
padding: 5px; padding: 5px;
margin: 5px; margin: 5px;
width: 90%; width: 90%;
@ -406,8 +355,7 @@ hr { color: silver; border: 1px solid silver; }
border-radius: 5px; border-radius: 5px;
} }
.success .success {
{
padding: 5px; padding: 5px;
padding-left: 24px; padding-left: 24px;
margin: 5px; margin: 5px;
@ -421,8 +369,7 @@ hr { color: silver; border: 1px solid silver; }
border-radius: 5px; border-radius: 5px;
} }
.notice .notice {
{
padding: 5px; padding: 5px;
padding-left: 24px; padding-left: 24px;
margin: 5px; margin: 5px;
@ -436,8 +383,7 @@ hr { color: silver; border: 1px solid silver; }
box-sizing: border-box; box-sizing: border-box;
} }
/*button /*button {
{
background: #ce2424; background: #ce2424;
background: linear-gradient(#f97779, #ce2424); background: linear-gradient(#f97779, #ce2424);
border: 1px solid #be2424; border: 1px solid #be2424;
@ -451,8 +397,7 @@ hr { color: silver; border: 1px solid silver; }
} }
button .big { padding: 6px; }*/ button .big { padding: 6px; }*/
.formbutton .formbutton {
{
background: white; background: white;
border: 1px solid #8e8e8e; border: 1px solid #8e8e8e;
color: #505050; color: #505050;
@ -462,8 +407,7 @@ button .big { padding: 6px; }*/
border-radius: 0px; border-radius: 0px;
} }
.username .username {
{
text-transform: none; text-transform: none;
text-shadow: none; text-shadow: none;
margin-left: 0px; margin-left: 0px;
@ -488,22 +432,17 @@ button .big { padding: 6px; }*/
background: rgb(250,250,250); background: rgb(250,250,250);
} }
.mention { .mention { font-weight: bold; }
font-weight: bold;
}
.threadHidden { background: orange; } .threadHidden { background: orange; }
.threadDeleted { background: rgba(255,0,0,0.5); } .threadDeleted { background: rgba(255,0,0,0.5); }
.pagination .pagination {
{
margin-top: 8px; margin-top: 8px;
margin-left: 5px; margin-left: 5px;
} }
.pagination a { color: #717171; } .pagination a { color: #717171; }
.page .page {
{
display: inline-block; display: inline-block;
margin-right: 5px; margin-right: 5px;
text-decoration: none; text-decoration: none;
@ -516,8 +455,7 @@ button .big { padding: 6px; }*/
border-radius: 5px; border-radius: 5px;
} }
blockquote blockquote {
{
border: solid 1px darkgray; border: solid 1px darkgray;
background-color: #f8fafd; background-color: #f8fafd;
color: #758fa3; color: #758fa3;
@ -527,8 +465,7 @@ blockquote
margin: 5px; margin: 5px;
} }
blockquote .head blockquote .head {
{
display: block; display: block;
font-weight: bold; font-weight: bold;
font-size: 13px; font-size: 13px;
@ -539,23 +476,20 @@ blockquote .head
border-bottom: solid 1px #dde5ed; border-bottom: solid 1px #dde5ed;
} }
blockquote p blockquote p {
{
line-height: 20px; line-height: 20px;
margin-bottom: 10px; margin-bottom: 10px;
padding-left: 15px; padding-left: 15px;
} }
.rep-upvote { font-size: 13.5px !important; } .rep-upvote { font-size: 13.5px !important; }
.rep-upvote span .rep-upvote span {
{
position: relative; position: relative;
top: -4px; top: -4px;
letter-spacing: 0.02em; letter-spacing: 0.02em;
} }
.action .action {
{
background-color: #A0CFEC; background-color: #A0CFEC;
font-style: italic; font-style: italic;
padding: 15px; padding: 15px;
@ -564,8 +498,7 @@ blockquote p
} }
.post-content { word-wrap: break-word; } .post-content { word-wrap: break-word; }
.sidebar .sidebar {
{
position: -moz-sticky; position: -moz-sticky;
position: -ms-sticky; position: -ms-sticky;
position: -o-sticky; position: -o-sticky;
@ -576,8 +509,7 @@ blockquote p
.gadget { padding-bottom: 20px; } .gadget { padding-bottom: 20px; }
/* Topic */ /* Topic */
.post_avatar .post_avatar {
{
border-radius: 5px; border-radius: 5px;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
@ -612,22 +544,6 @@ blockquote p
height: 20px; height: 20px;
} }
.tag-mini
{
text-transform: none;
margin-left: 0px;
padding-left: 3px;
padding-right: 3px;
padding-top: 1.5px;
padding-bottom: 0px;
color: #505050; /* 80,80,80 */
background-color: #FFFFFF;
border-style: dotted;
border-color: #505050; /* 232,232,232. All three RGB colours being the same seems to create a shade of gray */
border-width: 1px;
font-size: 10px;
}
.action_button { .action_button {
display: block; display: block;
float: left; float: left;
@ -643,6 +559,24 @@ blockquote p
float: right; float: right;
border-left: solid 1px #eaeaea; border-left: solid 1px #eaeaea;
} }
.like_label:before {
content: "😀";
}
.edit_label:before {
content: "🖊️";
}
.trash_label:before {
content: "🗑️";
}
.flag_label:before {
content: "🚩";
}
.mod_button {
margin-right: 4px;
}
.post_item:not(.simple) { .post_item:not(.simple) {
background-color: #eaeaea; background-color: #eaeaea;
} }
@ -718,8 +652,8 @@ blockquote p
border-style: dotted; border-style: dotted;
border-color: #505050; border-color: #505050;
padding: 0px; padding: 0px;
padding-left: 5px; padding-left: 5px;
padding-right: 5px; padding-right: 5px;
z-index: 100; z-index: 100;
} }
@ -733,13 +667,101 @@ blockquote p
} }
.prev_button { left: 14px; } .prev_button { left: 14px; }
.next_button { right: 14px; } .next_button { right: 14px; }
.head_tag_upshift { display: none; }
/* Control Panel */
.tag-mini {
margin-left: 0px;
padding-left: 0px;
padding-right: 0px;
padding-top: 2px;
padding-bottom: 2px;
color: black;
font-size: 12px;
}
.panel_tag {
padding-left: 0px;
padding-right: 0px;
border: none;
background: none;
color: #202020;
font-size: 14px;
}
.panel_floater {
float: right;
}
#panel_groups > .rowitem > .panel_floater {
float: none;
}
#panel_groups > .rowitem > .panel_floater > .panel_right_button {
float: right;
}
#panel_forums > .rowitem > .panel_floater {
float: none;
}
#panel_forums > .rowitem > .panel_floater > .panel_buttons {
float: right;
}
.panel_rank_tag, .forum_preset, .forum_active {
float: none;
color: #202020 !important;
font-size: 11px;
}
.panel_rank_tag_admin:before {
content: "Admins";
}
.panel_rank_tag_mod:before {
content: "Mods";
}
.panel_rank_tag_banned:before {
content: "Banned";
}
.panel_rank_tag_guest:before {
content: "Guests";
}
.panel_rank_tag_member:before {
content: "Members";
}
.forum_preset_announce:after {
content: "Announcements";
}
.forum_preset_members:after {
content: "Member Only";
}
.forum_preset_staff:after {
content: "Staff Only";
}
.forum_preset_admins:after {
content: "Admin Only";
}
.forum_preset_archive:after {
content: "Archive";
}
.forum_preset_all:after {
content: "Public";
}
.forum_preset_custom, .forum_preset_ {
display: none !important;
}
.forum_active_Hide:before {
content: "Hidden";
}
.forum_active_Hide + .forum_preset:before {
content: " | ";
}
.forum_active_Show {
display: none !important;
}
/* Responsive Layout */ /* Responsive Layout */
/* Anything that isn't a small mobile */ /* Anything that isn't a small mobile */
@media(min-width: 501px) @media(min-width: 501px) {
{ .options {
.options
{
float: right; float: right;
position: relative; position: relative;
top: -50px; top: -50px;
@ -750,17 +772,16 @@ blockquote p
height: 30px; height: 30px;
width: 30px; width: 30px;
overflow: none; overflow: none;
transition-property: background; transition-property: background;
transition-duration: 0.5s; transition-duration: 0.5s;
transition-timing-function: linear; transition-timing-function: linear;
} }
.options:last-child { border-left: 1px solid rgba(100,100,110,0.75); } .options:last-child { border-left: 1px solid rgba(100,100,110,0.75); }
.right_most { margin-right: 10%; border-right: 1px solid rgba(100,100,110,0.75); } .right_most { margin-right: 10%; border-right: 1px solid rgba(100,100,110,0.75); }
/*.options > .counter /*.options > .counter {
{
background: red; background: red;
border-radius: 5px; border-radius: 5px;
color: #FFFFFF; color: #FFFFFF;
@ -770,17 +791,15 @@ blockquote p
line-height: 16px; line-height: 16px;
font-size: 10px; font-size: 10px;
width: 16px; width: 16px;
position: absolute; position: absolute;
right: 0px; right: 0px;
}*/ }*/
} }
@media (max-width: 800px) @media (max-width: 800px) {
{
body { background: #505050; margin-bottom: 10px;} body { background: #505050; margin-bottom: 10px;}
#main #main {
{
width: 100%; width: 100%;
min-width: 300px; min-width: 300px;
margin-top: 0px; margin-top: 0px;
@ -788,125 +807,112 @@ blockquote p
padding: 10px; padding: 10px;
box-sizing: border-box; box-sizing: border-box;
} }
ul ul {
{
margin-top: 0px; margin-top: 0px;
margin-bottom: 0px; margin-bottom: 0px;
margin-left: 0px; margin-left: 0px;
margin-right: 0px; margin-right: 0px;
line-height: 30px; line-height: 30px;
min-height: 30px; min-height: 30px;
padding-left: 8px; padding-left: 8px;
padding-right: 8px; padding-right: 8px;
background-image: linear-gradient(bottom, #2e2e2e, #4c4c4c); background-image: linear-gradient(bottom, #2e2e2e, #4c4c4c);
background-image: -moz-linear-gradient(bottom, #2e2e2e, #4c4c4c); background-image: -moz-linear-gradient(bottom, #2e2e2e, #4c4c4c);
background-image: -o-linear-gradient(bottom, #2e2e2e, #4c4c4c); background-image: -o-linear-gradient(bottom, #2e2e2e, #4c4c4c);
background-image: -ms-linear-gradient(bottom, #2e2e2e, #4c4c4c); background-image: -ms-linear-gradient(bottom, #2e2e2e, #4c4c4c);
background-image: -webkit-linear-gradient(bottom, #2e2e2e, #4c4c4c); background-image: -webkit-linear-gradient(bottom, #2e2e2e, #4c4c4c);
} }
li li {
{
font-size: 14px; font-size: 14px;
padding-left: 12px; padding-left: 12px;
padding-right: 12px; padding-right: 12px;
height: 30px; height: 30px;
} }
li:hover li:hover {
{
background-image: linear-gradient(bottom, #4c4c4c, #2e2e2e); background-image: linear-gradient(bottom, #4c4c4c, #2e2e2e);
background-image: -moz-linear-gradient(bottom, #4c4c4c, #2e2e2e); background-image: -moz-linear-gradient(bottom, #4c4c4c, #2e2e2e);
background-image: -o-linear-gradient(bottom, #4c4c4c, #2e2e2e); background-image: -o-linear-gradient(bottom, #4c4c4c, #2e2e2e);
background-image: -ms-linear-gradient(bottom, #4c4c4c, #2e2e2e); background-image: -ms-linear-gradient(bottom, #4c4c4c, #2e2e2e);
background-image: -webkit-linear-gradient(bottom, #4c4c4c, #2e2e2e); background-image: -webkit-linear-gradient(bottom, #4c4c4c, #2e2e2e);
} }
.rowblock { border-left: none;border-right: none;border-bottom: none; } .rowblock { border-left: none; border-right: none; border-bottom: none; }
.rowitem { border-left: none;border-right: none; } .rowitem { border-left: none; border-right: none; }
.rowhead { border-left: none;border-right: none; } .rowhead { border-left: none; border-right: none; }
.tbody { border-left: none;border-right: none; } .tbody { border-left: none; border-right: none; }
} }
@media(max-width: 620px) @media(max-width: 620px) {
{ .menu_create_topic, .menu_overview, .hide_on_mobile { display: none; }
.menu_create_topic { display: none;}
.menu_overview { display: none; }
.hide_on_mobile { display: none; }
} }
/* This one is specifically for small mobiles.. */ /* This one is specifically for small mobiles.. */
@media(max-width: 500px) @media(max-width: 500px) {
{
#main { margin-top: 20px; } #main { margin-top: 20px; }
.rowblock { box-sizing: border-box; } .rowblock { box-sizing: border-box; }
.rowblock:first-of-type { margin-top: 2px; } .rowblock:first-of-type { margin-top: 2px; }
body { overflow-x: hidden; } body { overflow-x: hidden; }
.topic_name { text-align: left; margin-left: 8px; width: 50%; text-overflow: ellipsis; overflow: hidden; } .topic_name { text-align: left; margin-left: 8px; width: 50%; text-overflow: ellipsis; overflow: hidden; }
.menu_profile { display: none; } .menu_profile { display: none; }
.options { display: none !important; } .options { display: none !important; }
ul ul {
{
line-height: 30px; line-height: 30px;
min-height: 30px; min-height: 30px;
padding-left: 4px; padding-left: 4px;
padding-right: 4px; padding-right: 4px;
margin-top: 0px; margin-top: 0px;
margin-bottom: 0px; margin-bottom: 0px;
margin-left: 0px; margin-left: 0px;
margin-right: 0px; margin-right: 0px;
clear: left; clear: left;
width: 100%; width: 100%;
} }
li li {
{
font-size: 15px; font-size: 15px;
padding-left: 6px; padding-left: 6px;
padding-right: 6px; padding-right: 6px;
height: 28px; height: 28px;
} }
#back #back {
{
position: relative; position: relative;
top: -25px; top: -25px;
} }
#main #main {
{
padding-left: 4px; padding-left: 4px;
padding-right: 6px; padding-right: 6px;
} }
.notice .notice {
{
width: 100%; width: 100%;
margin-left: 0px; margin-left: 0px;
margin-right: 0px; margin-right: 0px;
margin-bottom: 8px; margin-bottom: 8px;
margin-top: 0px; margin-top: 0px;
padding: 5px; padding: 5px;
background: #96CDCD; background: #96CDCD;
background-image: none; background-image: none;
box-sizing: border-box; box-sizing: border-box;
} }
.post-content { word-wrap: normal; } .post-content { word-wrap: normal; }
.post-meta { white-space: normal; } .post-meta { white-space: normal; }
.post_avatar .post_avatar {
{
max-height: 80px; max-height: 80px;
max-width: 80px; max-width: 80px;
} }
.tag_block { word-wrap: break-word; } .tag_block { word-wrap: break-word; }
.notice:first-child { display: inline-block; } .notice:first-child { display: inline-block; }
.getTopics { display: none; } .getTopics { display: none; }
.userinfo { width: 70px; } .userinfo { width: 70px; }
.userinfo .avatar_item { .userinfo .avatar_item {
background-size: 64px; background-size: 64px;
@ -919,54 +925,48 @@ blockquote p
} }
.user_content { min-height: 80px !important; } .user_content { min-height: 80px !important; }
.user_content.nobuttons { min-height: 103px !important; } .user_content.nobuttons { min-height: 103px !important; }
.colstack_grid { grid-template-columns: none; grid-gap: 8px; } .colstack_grid { grid-template-columns: none; grid-gap: 8px; }
.grid_istat { margin-bottom: 0px; } .grid_istat { margin-bottom: 0px; }
} }
@media (min-width: 800px) @media (min-width: 800px) {
{ @-webkit-keyframes slidein {
@-webkit-keyframes slidein
{
from { transform: translate(0,-50px) scale(0.75); } from { transform: translate(0,-50px) scale(0.75); }
to {} to {}
} }
@-moz-keyframes slidein @-moz-keyframes slidein {
{
from { transform: translate(0,-50px) scale(0.75); } from { transform: translate(0,-50px) scale(0.75); }
to {} to {}
} }
@keyframes slidein @keyframes slidein {
{
from { transform: translate(0,-50px) scale(0.75); } from { transform: translate(0,-50px) scale(0.75); }
to {} to {}
} }
.right_most { margin-right: 15%; } .right_most { margin-right: 15%; }
#back #back {
{
width: 800px; width: 800px;
margin-top: 15px; margin-top: 15px;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
margin-bottom: 15px; margin-bottom: 15px;
background: none; background: none;
border-top: none; border-top: none;
padding: 0px; padding: 0px;
padding-top: 0px; padding-top: 0px;
padding-bottom: 10px; padding-bottom: 10px;
background-color: rgba(30,30,30,0.75); background-color: rgba(30,30,30,0.75);
border: 1px solid rgba(100,100,110,0.75); border: 1px solid rgba(100,100,110,0.75);
box-shadow: -1px -1px 1px rgba(0, 0, 0, 1), 1px 1px 1px rgba(0,0,0,0.5); box-shadow: -1px -1px 1px rgba(0, 0, 0, 1), 1px 1px 1px rgba(0,0,0,0.5);
transition-property: height; transition-property: height;
transition-duration: 0.5s; transition-duration: 0.5s;
transition-timing-function: linear; transition-timing-function: linear;
} }
#main #main {
{
float: left; float: left;
clear: left; clear: left;
width: 765px; width: 765px;
@ -976,9 +976,8 @@ blockquote p
margin-right: 12px; margin-right: 12px;
margin-bottom: 15px; margin-bottom: 15px;
} }
.nav .nav {
{
position: sticky; position: sticky;
top: 0px; top: 0px;
width: 800px; width: 800px;
@ -987,14 +986,13 @@ blockquote p
perspective: 1000px; perspective: 1000px;
z-index: 20; z-index: 20;
} }
ul ul {
{
line-height: 40px; line-height: 40px;
min-height: 40px; min-height: 40px;
padding-left: 20px; padding-left: 20px;
padding-right: 20px; padding-right: 20px;
margin-top: 0px; margin-top: 0px;
margin-bottom: 0px; margin-bottom: 0px;
background: none; background: none;
@ -1002,42 +1000,37 @@ blockquote p
border: 1px solid rgba(90,90,90,0.75); border: 1px solid rgba(90,90,90,0.75);
transition: transform 0.7s; transition: transform 0.7s;
} }
ul:hover ul:hover {
{
transform: rotateX(-15deg); transform: rotateX(-15deg);
} }
li li {
{
font-size: 15px; font-size: 15px;
padding-left: 15px; padding-left: 15px;
padding-right: 15px; padding-right: 15px;
height: 38px; height: 38px;
} }
} }
@media (max-width: 1023px) { .left_sidebar { display: none; } .right_sidebar { display: none; } } @media (max-width: 1023px) { .right_sidebar { display: none; } }
@media (min-width: 1024px) @media (min-width: 1024px) {
{ #back {
#back
{
width: 1000px; width: 1000px;
margin-top: 15px; margin-top: 15px;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
margin-bottom: 15px; margin-bottom: 15px;
background: none; background: none;
border-top: none; border-top: none;
padding: 0px; padding: 0px;
padding-top: 0px; padding-top: 0px;
padding-bottom: 10px; padding-bottom: 10px;
background-color: rgba(30,30,30,0.75); background-color: rgba(30,30,30,0.75);
border: 1px solid rgba(100,100,110,0.75); border: 1px solid rgba(100,100,110,0.75);
box-shadow: -1px -1px 1px rgba(0, 0, 0, 1), 1px 1px 1px rgba(0,0,0,0.5); box-shadow: -1px -1px 1px rgba(0, 0, 0, 1), 1px 1px 1px rgba(0,0,0,0.5);
} }
#main #main {
{
float: left; float: left;
clear: left; clear: left;
width: 700px; width: 700px;
@ -1047,8 +1040,8 @@ blockquote p
margin-right: 12px; margin-right: 12px;
margin-bottom: 15px; margin-bottom: 15px;
} }
#main:not(.shrink_main) { width: calc(100% - 30px); }
.left_sidebar { display: none; } /* This theme only supports right sidebars, at the moment.. */
.right_sidebar { .right_sidebar {
float: left; float: left;
width: 250px; width: 250px;
@ -1061,30 +1054,27 @@ blockquote p
.nav { width: 1000px; } .nav { width: 1000px; }
} }
@media (min-width: 1603px) @media (min-width: 1603px) {
{ #back {
#back
{
width: 1548px; width: 1548px;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
} }
#main { width: 1250px; } #main { width: 1250px; }
#main:not(.shrink_main) { width: calc(100% - 30px); }
} }
@media (min-width: 2400px) @media (min-width: 2400px) {
{ #back {
#back
{
width: 2000px; width: 2000px;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
} }
#main { width: 1690px; } #main { width: 1690px; }
.index_category #main:not(.shrink_main) { width: calc(100% - 30px); }
{ .index_category {
float: left; float: left;
width: 835px; width: 835px;
} }
@ -1093,12 +1083,12 @@ blockquote p
.index_category:only-child { width: 100%; } .index_category:only-child { width: 100%; }
} }
@media (min-width: 3000px) @media (min-width: 3000px) {
{
#back { width: 2900px; } #back { width: 2900px; }
#main { width: 2490px; } #main { width: 2490px; }
#main:not(.shrink_main) { width: calc(100% - 30px); }
.index_category { width: 1230px; } .index_category { width: 1230px; }
.index_category:only-child { width: 100%; } .index_category:only-child { width: 100%; }
.right_sidebar { width: 350px; } .right_sidebar { width: 350px; }
} }

View File

@ -6,10 +6,12 @@
"FullImage": "cosmo-conflux.png", "FullImage": "cosmo-conflux.png",
"ForkOf": "cosmo", "ForkOf": "cosmo",
"MobileFriendly": true, "MobileFriendly": true,
"Tag": "🏗️",
"URL": "github.com/Azareal/Gosora",
"Templates": [ "Templates": [
{ {
"Name": "topic", "Name": "topic",
"Source": "topic_alt" "Source": "topic_alt"
} }
] ]
} }

File diff suppressed because it is too large Load Diff

View File

@ -5,10 +5,12 @@
"Creator": "Azareal", "Creator": "Azareal",
"FullImage": "cosmo.png", "FullImage": "cosmo.png",
"MobileFriendly": true, "MobileFriendly": true,
"Tag": "🏗️",
"URL": "github.com/Azareal/Gosora",
"Templates": [ "Templates": [
{ {
"Name": "topic", "Name": "topic",
"Source": "topic_alt" "Source": "topic_alt"
} }
] ]
} }

View File

@ -4,5 +4,6 @@
"Version": "0.0.1", "Version": "0.0.1",
"Creator": "Azareal", "Creator": "Azareal",
"Disabled": true, "Disabled": true,
"HideFromThemes": true "HideFromThemes": true,
} "URL": "github.com/Azareal/Gosora"
}

View File

@ -4,8 +4,7 @@
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
} }
body body {
{
font-family: arial; font-family: arial;
padding-bottom: 8px; padding-bottom: 8px;
background-image: url('/static/test_bg2.svg'); background-image: url('/static/test_bg2.svg');
@ -17,10 +16,7 @@ body
.user_content { font-family: Segoe UI Emoji, arial; } .user_content { font-family: Segoe UI Emoji, arial; }
} }
/*.move_left{float: left;position: relative;left: 50%;} ul {
.move_right{float: left;position: relative;left: -50%;}*/
ul
{
padding-left: 0px; padding-left: 0px;
padding-right: 0px; padding-right: 0px;
height: 36px; height: 36px;
@ -29,29 +25,25 @@ ul
background-color: white; background-color: white;
margin-bottom: 12px; margin-bottom: 12px;
} }
li li {
{
height: 35px; height: 35px;
padding-left: 10px; padding-left: 10px;
padding-top: 8px; padding-top: 8px;
padding-bottom: 8px; padding-bottom: 8px;
} }
li:hover { background: rgb(250,250,250); } li:hover { background: rgb(250,250,250); }
li a li a {
{
text-decoration: none; text-decoration: none;
/*color: #515151;*/ /*color: #515151;*/
color: black; color: black;
font-size: 17px; font-size: 17px;
} }
.menu_left .menu_left {
{
float: left; float: left;
border-right: 1px solid #ccc; border-right: 1px solid #ccc;
padding-right: 10px; padding-right: 10px;
} }
.menu_right .menu_right {
{
float: right; float: right;
border-left: 1px solid #ccc; border-left: 1px solid #ccc;
padding-right: 10px; padding-right: 10px;
@ -90,13 +82,8 @@ li a
color: black; color: black;
font-weight: bold; font-weight: bold;
} }
.selectedAlert .alert_counter { .selectedAlert .alert_counter { display: none; }
display: none; .menu_alerts .alertList { display: none; }
}
.menu_alerts .alertList {
display: none;
text-transform: none;
}
.selectedAlert .alertList { .selectedAlert .alertList {
position: absolute; position: absolute;
top: 51px; top: 51px;
@ -104,26 +91,27 @@ li a
background: white; background: white;
font-size: 10px; font-size: 10px;
line-height: 16px; line-height: 16px;
width: 156px; width: 300px;
right: calc(5% + 7px); right: calc(5% + 7px);
border-top: 1px solid #ccc; border-top: 1px solid #ccc;
border-left: 1px solid #ccc; border-left: 1px solid #ccc;
border-right: 1px solid #ccc; border-right: 1px solid #ccc;
border-bottom: 1px solid #ccc; border-bottom: 1px solid #ccc;
margin-bottom: 10px;
} }
.alertItem { .alertItem {
padding: 8px; padding: 8px;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
padding-top: 15px;
padding-bottom: 16px;
} }
.alertItem.withAvatar { .alertItem.withAvatar {
/*background-image: url('/uploads/avatar_1.jpg');*/ background-size: 60px;
background-size: 36px;
background-repeat: no-repeat; background-repeat: no-repeat;
text-align: center;
padding-right: 12px; padding-right: 12px;
padding-left: 42px; padding-left: 68px;
height: 46px; height: 50px;
} }
.alertItem.withAvatar:not(:last-child) { .alertItem.withAvatar:not(:last-child) {
border-bottom: 1px solid rgb(230,230,230); border-bottom: 1px solid rgb(230,230,230);
@ -131,26 +119,25 @@ li a
.alertItem .text { .alertItem .text {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
height: 30px; height: 40px;
width: 100%; width: 100%;
color: black; color: black;
font-size: 10px; font-size: 13px;
font-weight: bold; white-space: nowrap;
font-weight: normal;
} }
.alertItem .text.smaller { .alertItem:not(.withAvatar) {
font-size: 9px; margin-left: 5px;
} }
.container .container {
{
width: 90%; width: 90%;
padding: 0px; padding: 0px;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
} }
.rowblock .rowblock {
{
border: 1px solid #ccc; border: 1px solid #ccc;
width: 100%; width: 100%;
padding: 0px; padding: 0px;
@ -158,8 +145,7 @@ li a
} }
.rowblock:empty { display: none; } .rowblock:empty { display: none; }
.colblock_left .colblock_left {
{
border: 1px solid #ccc; border: 1px solid #ccc;
padding: 0px; padding: 0px;
padding-top: 0px; padding-top: 0px;
@ -167,8 +153,7 @@ li a
float: left; float: left;
margin-right: 8px; margin-right: 8px;
} }
.colblock_right .colblock_right {
{
border: 1px solid #ccc; border: 1px solid #ccc;
padding: 0px; padding: 0px;
padding-top: 0px; padding-top: 0px;
@ -176,24 +161,20 @@ li a
overflow: hidden; overflow: hidden;
word-wrap: break-word; word-wrap: break-word;
} }
.colblock_left:empty { display: none; } .colblock_left:empty, .colblock_right:empty { display: none; }
.colblock_right:empty { display: none; }
/* The new method of doing columns layouts, colblock is now deprecated :( */ /* The new method of doing columns layouts, colblock is now deprecated :( */
.colstack_left .colstack_left {
{
float: left; float: left;
width: 30%; width: 30%;
margin-right: 8px; margin-right: 8px;
} }
.colstack_right .colstack_right {
{
float: left; float: left;
width: 65%; width: 65%;
width: calc(70% - 15px); width: calc(70% - 15px);
} }
.colstack_item .colstack_item {
{
border: 1px solid #ccc; border: 1px solid #ccc;
padding: 0px; padding: 0px;
padding-top: 0px; padding-top: 0px;
@ -211,6 +192,7 @@ li a
grid-template-columns: repeat(3, 1fr); grid-template-columns: repeat(3, 1fr);
grid-gap: 12px; grid-gap: 12px;
margin-left: 5px; margin-left: 5px;
margin-top: 2px;
} }
.grid_item { .grid_item {
border: 1px solid #ccc; border: 1px solid #ccc;
@ -225,76 +207,42 @@ li a
padding-bottom: 12px; padding-bottom: 12px;
font-size: 16px; font-size: 16px;
} }
.grid_istat { .grid_istat { margin-bottom: 5px; }
margin-bottom: 5px;
}
.stat_green { background-color: lightgreen; border-color: green; } .stat_green { background-color: lightgreen; border-color: green; }
.stat_orange { background-color: #ffe4b3; border-color: orange; } .stat_orange { background-color: #ffe4b3; border-color: orange; }
.stat_red { background-color: #ffb2b2; border-color: red; } .stat_red { background-color: #ffb2b2; border-color: red; }
.stat_disabled { background-color: lightgray; border-color: gray; } .stat_disabled { background-color: lightgray; border-color: gray; }
.rowitem .rowitem {
{
width: 100%; width: 100%;
padding-left: 8px; /*padding-left: 8px;
padding-right: 8px; padding-right: 8px;
padding-top: 17px; padding-top: 17px;
padding-bottom: 12px; padding-bottom: 12px;
font-weight: bold; font-weight: bold;
text-transform: uppercase; text-transform: uppercase;*/
padding-left: 10px;
padding-top: 14px;
padding-bottom: 12px;
padding-right: 10px;
background-color: white; background-color: white;
} }
.rowitem.passive .rowitem.passive {
{
font-weight: normal; font-weight: normal;
text-transform: none; text-transform: none;
} }
.rowitem:not(:last-child) .rowitem:not(:last-child) {
{
border-bottom: 1px dotted #ccc; border-bottom: 1px dotted #ccc;
} }
.rowitem a .rowitem a {
{
text-decoration: none; text-decoration: none;
color: black; color: black;
} }
.rowitem a:hover { color: silver; } .rowitem a:hover { color: silver; }
.opthead { display: none; } .opthead { display: none; }
.col_left .formrow {
{
width: 30%;
float: left;
}
.col_right
{
width: 69%;
overflow: hidden;
}
.colitem
{
padding-left: 8px;
padding-right: 8px;
padding-top: 17px;
padding-bottom: 12px;
font-weight: bold;
text-transform: uppercase;
}
.colitem.passive
{
font-weight: normal;
text-transform: none;
}
.colitem a
{
text-decoration: none;
color: black;
}
.colitem a:hover { color: silver; }
.formrow
{
width: 100%; width: 100%;
background-color: white; background-color: white;
} }
@ -307,42 +255,49 @@ li a
.formrow:after { clear: both; } .formrow:after { clear: both; }
.formrow:not(:last-child) { border-bottom: 1px dotted #ccc; } .formrow:not(:last-child) { border-bottom: 1px dotted #ccc; }
.formitem .formitem {
{
float: left; float: left;
padding-left: 8px; padding: 10px;
padding-right: 8px; min-width: 20%;
padding-top: 13px; /*font-size: 17px;*/
padding-bottom: 8px; font-weight: normal;
font-weight: bold;
} }
.formitem:first-child { font-weight: bold; }
.formitem:not(:last-child) { border-right: 1px dotted #ccc; } .formitem:not(:last-child) { border-right: 1px dotted #ccc; }
.formitem.invisible_border { border: none; } .formitem.invisible_border { border: none; }
/* Mostly for textareas */ /* Mostly for textareas */
.formitem:only-child { width: 100%; } .formitem:only-child { width: 100%; }
.formitem textarea .formitem textarea {
{
width: 100%; width: 100%;
height: 100px; height: 100px;
outline-color: #8e8e8e; outline-color: #8e8e8e;
} }
.formitem:has-child() .formitem:has-child() {
{
margin: 0 auto; margin: 0 auto;
float: none; float: none;
} }
.formitem:not(:only-child) input, .formitem:not(:only-child) select { padding: 3px;/*5px;*/ }
.formitem:not(:only-child).formlabel {
padding-top: 15px;/*18px;*/
padding-bottom: 12px;/*16px;*/
/*padding-left: 15px;*/
}
.formbutton {
padding: 7px;
display: block;
margin-left: auto;
margin-right: auto;
font-size: 15px;
border-color: #ccc;
}
button button {
{
background: white; background: white;
border: 1px solid #8e8e8e; border: 1px solid #8e8e8e;
} }
/* Topics */ /* Topics */
.topic_status .topic_status {
{
text-transform: none; text-transform: none;
margin-left: 8px; margin-left: 8px;
padding-left: 2px; padding-left: 2px;
@ -367,8 +322,7 @@ button
background: linear-gradient(to bottom, #eaeaea, hsl(0,0%,79%)); background: linear-gradient(to bottom, #eaeaea, hsl(0,0%,79%));
} }
.username .username, .panel_tag {
{
text-transform: none; text-transform: none;
margin-left: 0px; margin-left: 0px;
padding-left: 4px; padding-left: 4px;
@ -382,12 +336,19 @@ button
border-width: 1px; border-width: 1px;
font-size: 15px; font-size: 15px;
} }
button.username button.username {
{
position: relative; position: relative;
top: -0.25px; top: -0.25px;
} }
/* We'll be rewriting the profiles soon too! */
/*.username.real_username {
color: #404040;
font-size: 16px;
padding-right: 4px;
}
.username.real_username:hover { color: black; }*/
.postQuote { .postQuote {
border: rgb(200,200,210); border: rgb(200,200,210);
background: rgb(245,245,255); background: rgb(245,245,255);
@ -400,42 +361,23 @@ button.username
border-width: 1px; border-width: 1px;
} }
.tag-mini
{
text-transform: none;
margin-left: 0px;
padding-left: 3px;
padding-right: 3px;
padding-top: 1.5px;
padding-bottom: 0px;
color: #505050; /* 80,80,80 */
background-color: #FFFFFF;
border-style: dotted;
border-color: #505050; /* 232,232,232. All three RGB colours being the same seems to create a shade of gray */
border-width: 1px;
font-size: 10px;
}
.mention { font-weight: bold; } .mention { font-weight: bold; }
.show_on_edit { display: none; } .show_on_edit { display: none; }
.alert .alert {
{
display: block; display: block;
padding: 5px; padding: 5px;
margin-bottom: 10px; margin-bottom: 10px;
border: 1px solid #ccc; border: 1px solid #ccc;
} }
.alert_success .alert_success {
{
display: block; display: block;
padding: 5px; padding: 5px;
border: 1px solid A2FC00; border: 1px solid #A2FC00;
margin-bottom: 10px; margin-bottom: 10px;
background-color: DAF7A6; background-color: #DAF7A6;
} }
.alert_error .alert_error {
{
display: block; display: block;
padding: 5px; padding: 5px;
border: 1px solid #FF004B; border: 1px solid #FF004B;
@ -484,6 +426,25 @@ button.username
border-left: solid 1px #eaeaea; border-left: solid 1px #eaeaea;
} }
.like_label:before {
content: "😀";
}
.edit_label:before {
content: "🖊️";
}
.trash_label:before {
content: "🗑️";
}
.flag_label:before {
content: "🚩";
}
.mod_button {
margin-right: 4px;
}
.simple > .real_username { color: #404040; font-size: 17px; }
.simple > .user_content { background: none; }
.simple { background-color: white; } .simple { background-color: white; }
.post_item:not(.simple) { .post_item:not(.simple) {
background-color: #eaeaea; background-color: #eaeaea;
@ -576,7 +537,116 @@ button.username
.prev_button { left: 14px; } .prev_button { left: 14px; }
.next_button { right: 14px; } .next_button { right: 14px; }
/* Media Queries from Simple. Probably useless in Conflux */ .head_tag_upshift {
float: right;
position: relative;
top: -2px;
}
/* Control Panel */
.panel_upshift:visited {
color: black;
}
.tag-mini {
margin-left: 0px;
padding-left: 0px;
padding-right: 0px;
padding-top: 2px;
padding-bottom: 2px;
color: black;
font-size: 12px;
}
.panel_tag {
padding-left: 0px;
padding-right: 0px;
border: none;
background: none;
color: #202020;
font-size: 14px;
}
.panel_floater {
float: right;
}
#panel_groups > .rowitem > .panel_floater {
float: none;
}
#panel_groups > .rowitem > .panel_floater > .panel_right_button {
float: right;
}
#panel_forums > .rowitem > .panel_floater {
float: none;
}
#panel_forums > .rowitem > .panel_floater > .panel_buttons {
float: right;
}
.panel_rank_tag, .forum_preset, .forum_active {
float: none;
color: #202020 !important;
font-size: 11px;
}
.panel_rank_tag_admin:before {
content: "Admins";
}
.panel_rank_tag_mod:before {
content: "Mods";
}
.panel_rank_tag_banned:before {
content: "Banned";
}
.panel_rank_tag_guest:before {
content: "Guests";
}
.panel_rank_tag_member:before {
content: "Members";
}
.forum_preset_announce:after {
content: "Announcements";
}
.forum_preset_members:after {
content: "Member Only";
}
.forum_preset_staff:after {
content: "Staff Only";
}
.forum_preset_admins:after {
content: "Admin Only";
}
.forum_preset_archive:after {
content: "Archive";
}
.forum_preset_all:after {
content: "Public";
}
.forum_preset_custom, .forum_preset_ {
display: none !important;
}
.forum_active_Hide:before {
content: "Hidden";
}
.forum_active_Hide + .forum_preset:before {
content: " | ";
}
.forum_active_Show {
display: none !important;
}
.theme_row > .panel_floater > .panel_right_button {
margin-left: 5px;
}
@media(max-width: 1300px) {
.theme_row {
background-image: none !important;
}
}
/* The Media Queries */
@media (max-width: 880px) { @media (max-width: 880px) {
li { li {
height: 29px; height: 29px;
@ -589,23 +659,25 @@ button.username
height: 30px; height: 30px;
margin-top: 8px; margin-top: 8px;
} }
.menu_left { padding-right: 9px; } .menu_left, .menu_right { padding-right: 9px; }
.menu_right { padding-right: 9px; }
.menu_alerts { .menu_alerts {
padding-left: 7px; padding-left: 7px;
padding-right: 7px; padding-right: 7px;
font-size: 18px; font-size: 18px;
} }
body { padding-left: 4px; padding-right: 4px; margin: 0px !important; width: 100% !important; height: 100% !important; overflow-x: hidden; } body {
padding-left: 4px;
padding-right: 4px;
margin: 0px !important;
width: 100% !important;
height: 100% !important;
overflow-x: hidden;
}
.container { width: auto; } .container { width: auto; }
.selectedAlert .alertList { top: 37px; right: 4px; } .selectedAlert .alertList { top: 37px; right: 4px; }
} }
@media (max-width: 810px) {
.rowitem { text-transform: none; }
}
@media (max-width: 680px) { @media (max-width: 680px) {
li { li {
padding-left: 5px; padding-left: 5px;
@ -615,10 +687,9 @@ button.username
} }
li a { font-size: 14px; } li a { font-size: 14px; }
ul { height: 26px; } ul { height: 26px; }
.menu_left { padding-right: 7px; } .menu_left, .menu_right { padding-right: 7px; }
.menu_right { padding-right: 7px; }
.menu_create_topic { display: none; } .menu_create_topic { display: none; }
.menu_alerts { .menu_alerts {
padding-left: 4px; padding-left: 4px;
padding-right: 4px; padding-right: 4px;
@ -626,7 +697,7 @@ button.username
padding-top: 1px; padding-top: 1px;
} }
.selectedAlert .alertList { top: 33px; } .selectedAlert .alertList { top: 33px; }
.hide_on_mobile { display: none; } .hide_on_mobile { display: none; }
.prev_button, .next_button { top: auto;bottom: 5px; } .prev_button, .next_button { top: auto;bottom: 5px; }
.colstack_grid { grid-template-columns: none; grid-gap: 8px; } .colstack_grid { grid-template-columns: none; grid-gap: 8px; }
@ -636,8 +707,30 @@ button.username
@media (max-width: 470px) { @media (max-width: 470px) {
ul { margin-bottom: 10px; } ul { margin-bottom: 10px; }
.menu_overview, .menu_profile, .hide_on_micro { display: none; } .menu_overview, .menu_profile, .hide_on_micro { display: none; }
.selectedAlert .alertList {
width: 156px;
margin-bottom: 5px;
}
.alertItem.withAvatar {
background-size: 36px;
text-align: center;
padding-left: 42px;
height: 46px;
}
.alertItem {
padding: 8px;
}
.alertItem .text {
height: 30px;
font-size: 10px;
font-weight: bold;
white-space: normal;
}
.alertItem .text.smaller {
font-size: 9px;
}
.post_container { overflow: visible !important; } .post_container { overflow: visible !important; }
.post_item { .post_item {
background-position: 0px 2px !important; background-position: 0px 2px !important;
background-size: 64px 64px !important; background-size: 64px 64px !important;
@ -679,7 +772,7 @@ button.username
.user_content.nobuttons { min-height: 100.5px !important; } .user_content.nobuttons { min-height: 100.5px !important; }
.the_name { font-size: 15px; } .the_name { font-size: 15px; }
.post_tag { font-size: 12px; } .post_tag { font-size: 12px; }
.container { width: 100% !important; } .container { width: 100% !important; }
} }

View File

@ -1,14 +1,15 @@
{ {
"Name": "tempra-conflux", "Name": "tempra-conflux",
"FriendlyName": "Tempra Conflux", "FriendlyName": "Tempra Conflux",
"Version": "0.0.1", "Version": "0.1.0-dev",
"Creator": "Azareal", "Creator": "Azareal",
"FullImage": "tempra-conflux.png", "FullImage": "tempra-conflux.png",
"MobileFriendly": true, "MobileFriendly": true,
"URL": "github.com/Azareal/Gosora",
"Templates": [ "Templates": [
{ {
"Name": "topic", "Name": "topic",
"Source": "topic_alt" "Source": "topic_alt"
} }
] ]
} }

View File

@ -4,8 +4,7 @@
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
} }
body body {
{
font-family: cursive; font-family: cursive;
padding-bottom: 8px; padding-bottom: 8px;
} }
@ -15,8 +14,7 @@ body
.user_content { font-family: Segoe UI Emoji, arial; } .user_content { font-family: Segoe UI Emoji, arial; }
} }
ul ul {
{
padding-left: 0px; padding-left: 0px;
padding-right: 0px; padding-right: 0px;
height: 36px; height: 36px;
@ -25,31 +23,27 @@ ul
background-color: white; background-color: white;
margin-bottom: 12px; margin-bottom: 12px;
} }
li li {
{
height: 35px; height: 35px;
padding-left: 10px; padding-left: 10px;
padding-top: 8px; padding-top: 8px;
padding-bottom: 8px; padding-bottom: 8px;
} }
li:hover { background: rgb(250,250,250); } li:hover { background: rgb(250,250,250); }
li a li a {
{
text-decoration: none; text-decoration: none;
/*color: #515151;*/ /*color: #515151;*/
color: black; color: black;
font-size: 17px; font-size: 17px;
} }
.menu_left .menu_left {
{
float: left; float: left;
border-right: 1px solid #ccc; border-right: 1px solid #ccc;
padding-right: 10px; padding-right: 10px;
font-family: cursive; font-family: cursive;
padding-top: 4px; padding-top: 4px;
} }
.menu_right .menu_right {
{
float: right; float: right;
border-left: 1px solid #ccc; border-left: 1px solid #ccc;
padding-right: 10px; padding-right: 10px;
@ -74,25 +68,16 @@ li a
padding-top: 2.5px; padding-top: 2.5px;
height: 14px; height: 14px;
text-align: center; text-align: center;
border: white solid 1px; border: white solid 1px;
} }
.menu_alerts .alert_counter:empty { .menu_alerts .alert_counter:empty { display: none; }
display: none;
}
.selectedAlert { .selectedAlert, .selectedAlert:hover {
background: white; background: white;
color: black; color: black;
} }
.selectedAlert:hover { .menu_alerts .alertList { display: none; }
background: white;
color: black;
}
.menu_alerts .alertList {
display: none;
text-transform: none;
}
.selectedAlert .alertList { .selectedAlert .alertList {
position: absolute; position: absolute;
top: 51px; top: 51px;
@ -100,24 +85,27 @@ li a
background: white; background: white;
font-size: 10px; font-size: 10px;
line-height: 16px; line-height: 16px;
width: 135px; width: 300px;
right: calc(5% + 7px); right: calc(5% + 7px);
border-top: 1px solid #ccc; border-top: 1px solid #ccc;
border-left: 1px solid #ccc; border-left: 1px solid #ccc;
border-right: 1px solid #ccc; border-right: 1px solid #ccc;
border-bottom: 1px solid #ccc; border-bottom: 1px solid #ccc;
margin-bottom: 10px;
} }
.alertItem { .alertItem {
padding: 8px; padding: 8px;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
padding-top: 15px;
padding-bottom: 16px;
} }
.alertItem.withAvatar { .alertItem.withAvatar {
background-size: auto 56px; background-size: 60px;
background-repeat: no-repeat; background-repeat: no-repeat;
text-align: right;
padding-right: 12px; padding-right: 12px;
height: 46px; padding-left: 68px;
height: 50px;
} }
.alertItem.withAvatar:not(:last-child) { .alertItem.withAvatar:not(:last-child) {
border-bottom: 1px solid rgb(230,230,230); border-bottom: 1px solid rgb(230,230,230);
@ -126,24 +114,24 @@ li a
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
float: right; float: right;
width: calc(100% - 20px); height: 40px;
height: 30px; width: 100%;
white-space: nowrap;
} }
.alertItem .text { .alertItem .text {
font-size: 10px; font-size: 13px;
font-weight: bold; font-weight: normal;
margin-left: 5px;
} }
.container .container {
{
width: 90%; width: 90%;
padding: 0px; padding: 0px;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
} }
.rowblock .rowblock {
{
border: 1px solid #ccc; border: 1px solid #ccc;
width: 100%; width: 100%;
padding: 0px; padding: 0px;
@ -151,8 +139,7 @@ li a
} }
.rowblock:empty { display: none; } .rowblock:empty { display: none; }
.colblock_left .colblock_left {
{
border: 1px solid #ccc; border: 1px solid #ccc;
padding: 0px; padding: 0px;
padding-top: 0px; padding-top: 0px;
@ -160,8 +147,7 @@ li a
float: left; float: left;
margin-right: 8px; margin-right: 8px;
} }
.colblock_right .colblock_right {
{
border: 1px solid #ccc; border: 1px solid #ccc;
padding: 0px; padding: 0px;
padding-top: 0px; padding-top: 0px;
@ -169,24 +155,20 @@ li a
overflow: hidden; overflow: hidden;
word-wrap: break-word; word-wrap: break-word;
} }
.colblock_left:empty { display: none; } .colblock_left:empty, .colblock_right:empty { display: none; }
.colblock_right:empty { display: none; }
/* The new method of doing columns layouts, colblock is now deprecated :( */ /* The new method of doing columns layouts, colblock is now deprecated :( */
.colstack_left .colstack_left {
{
float: left; float: left;
width: 30%; width: 30%;
margin-right: 8px; margin-right: 8px;
} }
.colstack_right .colstack_right {
{
float: left; float: left;
width: 65%; width: 65%;
width: calc(70% - 15px); width: calc(70% - 15px);
} }
.colstack_item .colstack_item {
{
border: 1px solid #ccc; border: 1px solid #ccc;
padding: 0px; padding: 0px;
padding-top: 0px; padding-top: 0px;
@ -205,6 +187,7 @@ li a
/*grid-gap: 15px;*/ /*grid-gap: 15px;*/
grid-gap: 12px; grid-gap: 12px;
margin-left: 5px; margin-left: 5px;
margin-top: 2px;
} }
.grid_item { .grid_item {
border: 1px solid #ccc; border: 1px solid #ccc;
@ -224,7 +207,7 @@ li a
} }
.grid_istat { .grid_istat {
/*margin-bottom: 10px;*/ /*margin-bottom: 10px;*/
margin-bottom: 5px; margin-bottom: 3px;
} }
.stat_green { background-color: lightgreen; border-color: lightgreen; } .stat_green { background-color: lightgreen; border-color: lightgreen; }
@ -232,29 +215,19 @@ li a
.stat_red { background-color: #ffb2b2; border-color: #ffb2b2; } .stat_red { background-color: #ffb2b2; border-color: #ffb2b2; }
.stat_disabled { background-color: lightgray; border-color: lightgray; } .stat_disabled { background-color: lightgray; border-color: lightgray; }
.rowhead { font-family: cursive; } .rowitem {
.rowitem
{
width: 100%; width: 100%;
padding-left: 8px; padding-left: 8px;
padding-right: 8px; padding-right: 8px;
padding-top: 12px; padding-top: 12px;
padding-bottom: 12px; padding-bottom: 12px;
font-weight: bold;
text-transform: uppercase;
background-color: white; background-color: white;
font-family: cursive;
} }
.rowitem.passive .rowitem:not(:last-child) {
{
font-weight: normal;
text-transform: none;
}
.rowitem:not(:last-child)
{
border-bottom: 1px dotted #ccc; border-bottom: 1px dotted #ccc;
} }
.rowitem a .rowitem a {
{
text-decoration: none; text-decoration: none;
color: black; color: black;
} }
@ -262,39 +235,7 @@ li a
.top_post { margin-bottom: 16px; } .top_post { margin-bottom: 16px; }
.opthead { display: none; } .opthead { display: none; }
.col_left .formrow {
{
width: 30%;
float: left;
}
.col_right
{
width: 69%;
overflow: hidden;
}
.colitem
{
padding-left: 8px;
padding-right: 8px;
padding-top: 17px;
padding-bottom: 12px;
font-weight: bold;
text-transform: uppercase;
}
.colitem.passive
{
font-weight: normal;
text-transform: none;
}
.colitem a
{
text-decoration: none;
color: black;
}
.colitem a:hover { color: silver; }
.formrow
{
width: 100%; width: 100%;
background-color: white; background-color: white;
} }
@ -305,49 +246,51 @@ li a
display: table; display: table;
} }
.formrow:after { clear: both; } .formrow:after { clear: both; }
.formrow:not(:last-child) { border-bottom: 1px dotted #ccc; }
.formrow:not(:last-child) .formitem {
{
border-bottom: 1px dotted #ccc;
}
.formitem
{
float: left; float: left;
padding-left: 8px; padding: 10px;
padding-right: 8px; min-width: 20%;
padding-top: 13px; /*font-size: 17px;*/
padding-bottom: 8px; font-weight: normal;
font-weight: bold;
} }
.formitem:first-child { font-weight: bold; }
.formitem:not(:last-child) { border-right: 1px dotted #ccc; } .formitem:not(:last-child) { border-right: 1px dotted #ccc; }
.formitem.invisible_border { border: none; } .formitem.invisible_border { border: none; }
/* Mostly for textareas */ /* Mostly for textareas */
.formitem:only-child { width: 100%; } .formitem:only-child { width: 100%; }
.formitem textarea .formitem textarea {
{
width: 100%; width: 100%;
height: 100px; height: 100px;
outline-color: #8e8e8e; outline-color: #8e8e8e;
} }
.formitem:has-child() .formitem:has-child() {
{
margin: 0 auto; margin: 0 auto;
float: none; float: none;
} }
.formitem:not(:only-child) input, .formitem:not(:only-child) select { padding: 3px;/*5px;*/ }
.formitem:not(:only-child).formlabel {
padding-top: 15px;/*18px;*/
padding-bottom: 12px;/*16px;*/
/*padding-left: 15px;*/
}
.formbutton {
padding: 7px;
display: block;
margin-left: auto;
margin-right: auto;
font-size: 15px;
border-color: #ccc;
}
button button {
{
background: white; background: white;
border: 1px solid #8e8e8e; border: 1px solid #8e8e8e;
} }
/* Topics */ /* Topics */
.topic_status .topic_status {
{
text-transform: none; text-transform: none;
margin-left: 8px; margin-left: 8px;
padding-left: 2px; padding-left: 2px;
@ -360,8 +303,7 @@ button
} }
.topic_status:empty { display: none; } .topic_status:empty { display: none; }
.username .username, .panel_tag {
{
text-transform: none; text-transform: none;
margin-left: 0px; margin-left: 0px;
padding-left: 0px; padding-left: 0px;
@ -372,13 +314,16 @@ button
font-size: 15px; font-size: 15px;
background: none; background: none;
} }
button.username button.username {
{
position: relative; position: relative;
top: -0.25px; top: -0.25px;
} }
.username.level { color: #303030; } .username.level { color: #303030; }
.username.real_username { color: #404040; font-size: 17px; padding-right: 4px; } .username.real_username {
color: #404040;
font-size: 16px;
padding-right: 4px;
}
.username.real_username:hover { color: black; } .username.real_username:hover { color: black; }
.tag-text { .tag-text {
@ -386,29 +331,18 @@ button.username
display: inline-block; display: inline-block;
} }
.post_item > .username { .controls > .username {
padding-top: 23px;
display: inline-block; display: inline-block;
}
.tag-mini
{
text-transform: none;
margin-left: 0px;
padding-left: 3px;
padding-right: 3px;
padding-top: 1.5px;
padding-bottom: 0px; padding-bottom: 0px;
color: #505050; /* 80,80,80 */
background-color: #FFFFFF;
border-style: dotted;
border-color: #505050; /* 232,232,232. All three RGB colours being the same seems to create a shade of gray */
border-width: 1px;
font-size: 10px;
} }
.post_item > .mod_button > button { .real_username {
font-size: 15px; margin-right: -8px;
}
.mod_button > button {
font-family: cursive;
font-size: 12px;
color: #202020; color: #202020;
opacity: 0.7; opacity: 0.7;
border: none; border: none;
@ -417,6 +351,60 @@ button.username
opacity: 0.9; opacity: 0.9;
} }
.mod_button:not(:last-child) {
margin-right: 4px;
}
.like_label:before {
content: "+1";
}
.like_count_label:before {
content: "likes";
}
.like_count_label {
color: #202020;
opacity: 0.7;
font-size: 12px;
}
.like_count {
color: #202020;
opacity: 0.7;
padding-left: 1px;
padding-right: 2px;
font-size: 12px;
}
.like_count:before {
content: "|";
margin-right: 5px;
}
.edit_label:before {
content: "Edit";
}
.trash_label:before {
content: "Delete";
}
.pin_label:before {
content: "Pin";
}
.unpin_label:before {
content: "Unpin";
}
.flag_label:before {
content: "Flag";
}
.level_label {
margin-right: 1px;
}
.level_label:before {
content: "Level";
}
.controls {
margin-top: 23px;
display: inline-block;
width: 100%;
}
.action_item { .action_item {
padding: 14px; padding: 14px;
text-align: center; text-align: center;
@ -433,37 +421,34 @@ button.username
margin-bottom: 8px; margin-bottom: 8px;
} }
.mention {
font-weight: bold;
}
.level { .level {
float: right; float: right;
color: #505050;
border-left: none; border-left: none;
padding-left: 3px; padding-left: 3px;
padding-right: 5px; padding-right: 5px;
font-size: 16px; font-family: cursive;
font-size: 15px;
color: #202020;
opacity: 0.7;
border: none;
} }
.mention { font-weight: bold; }
.show_on_edit { display: none; } .show_on_edit { display: none; }
.alert .alert {
{
display: block; display: block;
padding: 5px; padding: 5px;
margin-bottom: 10px; margin-bottom: 10px;
border: 1px solid #ccc; border: 1px solid #ccc;
} }
.alert_success .alert_success {
{
display: block; display: block;
padding: 5px; padding: 5px;
border: 1px solid A2FC00; border: 1px solid A2FC00;
margin-bottom: 10px; margin-bottom: 10px;
background-color: DAF7A6; background-color: DAF7A6;
} }
.alert_error .alert_error {
{
display: block; display: block;
padding: 5px; padding: 5px;
border: 1px solid #FF004B; border: 1px solid #FF004B;
@ -495,6 +480,104 @@ button.username
.prev_button { left: 14px; } .prev_button { left: 14px; }
.next_button { right: 14px; } .next_button { right: 14px; }
.head_tag_upshift {
color: #202020;
opacity: 0.7;
font-size: 12px;
}
/* Control Panel */
.tag-mini {
margin-left: 0px;
padding-left: 0px;
padding-right: 0px;
padding-top: 2px;
padding-bottom: 2px;
font-family: cursive;
font-size: 12px;
color: #202020;
opacity: 0.7;
}
.panel_floater {
float: right;
}
#panel_groups > .rowitem > .panel_floater {
float: none;
}
#panel_groups > .rowitem > .panel_floater > .panel_right_button {
float: right;
}
#panel_forums > .rowitem > .panel_floater {
float: none;
}
#panel_forums > .rowitem > .panel_floater > .panel_buttons {
float: right;
}
#panel_forums > .rowitem > .panel_floater > .panel_buttons > .panel_right_button {
color: #505050;
font-size: 14px;
}
.panel_rank_tag, .forum_preset, .forum_active {
float: none;
color: #202020;
opacity: 0.7;
font-size: 10px;
}
.panel_rank_tag_admin:before {
content: "Admin Group";
}
.panel_rank_tag_mod:before {
content: "Mod Group";
}
.panel_rank_tag_banned:before {
content: "Banned Group";
}
.panel_rank_tag_guest:before {
content: "Guest Group";
}
.panel_rank_tag_member:before {
content: "Member Group";
}
.forum_preset_announce:after {
content: "Announcements";
}
.forum_preset_members:after {
content: "Member Only";
}
.forum_preset_staff:after {
content: "Staff Only";
}
.forum_preset_admins:after {
content: "Admin Only";
}
.forum_preset_archive:after {
content: "Archive";
}
.forum_preset_all:after {
content: "Public";
}
.forum_preset_custom, .forum_preset_ {
display: none !important;
}
.forum_active_Hide:before {
content: "Hidden";
}
.forum_active_Hide + .forum_preset:before {
content: " | ";
}
.forum_active_Show {
display: none !important;
}
@media(max-width: 1300px) {
.theme_row {
background-image: none !important;
}
}
@media (max-width: 880px) { @media (max-width: 880px) {
li { li {
height: 29px; height: 29px;
@ -514,18 +597,21 @@ button.username
padding-right: 7px; padding-right: 7px;
font-size: 18px; font-size: 18px;
} }
body { padding-left: 4px; padding-right: 4px; margin: 0px !important; width: 100% !important; height: 100% !important; overflow-x: hidden; } body {
padding-left: 4px;
padding-right: 4px;
margin: 0px !important;
width: 100% !important;
height: 100% !important;
overflow-x: hidden;
}
.container { width: auto; } .container { width: auto; }
.selectedAlert .alertList { top: 37px; right: 4px; } .selectedAlert .alertList { top: 37px; right: 4px; }
} }
@media (max-width: 810px) { @media (max-width: 810px) {
.rowitem { text-transform: none; }
/*.rowhead { font-family: arial; }
.menu_left { font-family: arial; }*/
body { font-family: arial; } body { font-family: arial; }
.level { font-size: 17px; }
} }
@media (max-width: 700px) { @media (max-width: 700px) {
@ -540,35 +626,56 @@ button.username
.menu_left { padding-right: 5px; padding-top: 1px; } .menu_left { padding-right: 5px; padding-top: 1px; }
.menu_right { padding-right: 5px; } .menu_right { padding-right: 5px; }
.menu_create_topic { display: none;} .menu_create_topic { display: none;}
.menu_alerts { .menu_alerts {
padding-left: 4px; padding-left: 4px;
padding-right: 4px; padding-right: 4px;
font-size: 16px; font-size: 16px;
padding-top: 1px; padding-top: 1px;
} }
.menu_alerts .alert_counter { .menu_alerts .alert_counter { top: -23px; left: 8px; }
top: -23px;
left: 8px;
}
.selectedAlert .alertList { top: 33px; } .selectedAlert .alertList { top: 33px; }
.hide_on_mobile { display: none; } .hide_on_mobile { display: none; }
.prev_button, .next_button { top: auto; bottom: 5px; } .prev_button, .next_button { top: auto; bottom: 5px; }
.colstack_grid { grid-template-columns: none; grid-gap: 8px; } .colstack_grid { grid-template-columns: none; grid-gap: 8px; }
.grid_istat { margin-bottom: 0px; } .grid_istat { margin-bottom: 0px; }
} }
@media (max-width: 350px) {
.hide_on_micro { display: none !important; }
}
@media (max-width: 470px) { @media (max-width: 470px) {
.menu_overview { display: none; } .menu_overview, .menu_profile, .hide_on_micro { display: none; }
.menu_profile { display: none; } .selectedAlert .alertList {
.hide_on_micro { display: none; } width: 135px;
.post_container { margin-bottom: 5px;
overflow: visible !important;
} }
.alertItem.withAvatar {
background-size: 36px;
text-align: right;
padding-left: 10px;
height: 46px;
}
.alertItem {
padding: 8px;
}
.alertItem.withAvatar .text {
width: calc(100% - 20px);
height: 30px;
white-space: normal;
}
.alertItem .text {
font-size: 10px;
font-weight: bold;
margin-left: 0px;
}
.post_container { overflow: visible !important; }
.post_item { .post_item {
background-position: 0px 2px !important; background-position: 0px 2px !important;
background-size: 64px 64px !important; background-size: 64px auto !important;
padding-left: 2px !important; padding-left: 2px !important;
min-height: 96px; min-height: 96px;
position: relative !important; position: relative !important;
@ -576,6 +683,7 @@ button.username
.post_item > .user_content { .post_item > .user_content {
margin-left: 75px !important; margin-left: 75px !important;
width: 100% !important; width: 100% !important;
min-height: 45px;
} }
.post_item > .mod_button { .post_item > .mod_button {
float: right !important; float: right !important;
@ -583,9 +691,7 @@ button.username
position: relative; position: relative;
top: -14px; top: -14px;
} }
.post_item > .mod_button > button { .post_item > .mod_button > button { opacity: 1; }
opacity: 1;
}
.post_item > .real_username { .post_item > .real_username {
position: absolute; position: absolute;
top: 70px; top: 70px;
@ -597,6 +703,11 @@ button.username
font-size: 15px; font-size: 15px;
text-align: center; text-align: center;
} }
.post_item > .controls {
margin-top: 0px;
margin-left: 74px;
width: calc(100% - 74px);
}
.container { width: 100% !important; } .container { width: 100% !important; }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 385 KiB

After

Width:  |  Height:  |  Size: 240 KiB

View File

@ -1,10 +1,10 @@
{ {
"Name": "tempra-cursive", "Name": "tempra-cursive",
"FriendlyName": "Tempra Cursive", "FriendlyName": "Tempra Cursive",
"Version": "0.0.1", "Version": "0.1.0-dev",
"Creator": "Azareal", "Creator": "Azareal",
"FullImage": "tempra-cursive.png", "FullImage": "tempra-cursive.png",
"ForkOf": "tempra-simple", "ForkOf": "tempra-simple",
"Tag": "🏗️", "MobileFriendly": true,
"MobileFriendly": true "URL": "github.com/Azareal/Gosora"
} }

View File

@ -4,8 +4,7 @@
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
} }
body body {
{
font-family: arial; font-family: arial;
padding-bottom: 8px; padding-bottom: 8px;
} }
@ -15,10 +14,7 @@ body
.user_content { font-family: Segoe UI Emoji, arial; } .user_content { font-family: Segoe UI Emoji, arial; }
} }
/*.move_left{float: left;position: relative;left: 50%;} ul {
.move_right{float: left;position: relative;left: -50%;}*/
ul
{
padding-left: 0px; padding-left: 0px;
padding-right: 0px; padding-right: 0px;
height: 36px; height: 36px;
@ -27,29 +23,25 @@ ul
background-color: white; background-color: white;
margin-bottom: 12px; margin-bottom: 12px;
} }
li li {
{
height: 35px; height: 35px;
padding-left: 10px; padding-left: 10px;
padding-top: 8px; padding-top: 8px;
padding-bottom: 8px; padding-bottom: 8px;
} }
li:hover { background: rgb(250,250,250); } li:hover { background: rgb(250,250,250); }
li a li a {
{
text-decoration: none; text-decoration: none;
/*color: #515151;*/ /*color: #515151;*/
color: black; color: black;
font-size: 17px; font-size: 17px;
} }
.menu_left .menu_left {
{
float: left; float: left;
border-right: 1px solid #ccc; border-right: 1px solid #ccc;
padding-right: 10px; padding-right: 10px;
} }
.menu_right .menu_right {
{
float: right; float: right;
border-left: 1px solid #ccc; border-left: 1px solid #ccc;
padding-right: 10px; padding-right: 10px;
@ -89,7 +81,6 @@ li a
} }
.menu_alerts .alertList { .menu_alerts .alertList {
display: none; display: none;
text-transform: none;
} }
.selectedAlert .alertList { .selectedAlert .alertList {
position: absolute; position: absolute;
@ -98,24 +89,27 @@ li a
background: white; background: white;
font-size: 10px; font-size: 10px;
line-height: 16px; line-height: 16px;
width: 135px; width: 300px;
right: calc(5% + 7px); right: calc(5% + 7px);
border-top: 1px solid #ccc; border-top: 1px solid #ccc;
border-left: 1px solid #ccc; border-left: 1px solid #ccc;
border-right: 1px solid #ccc; border-right: 1px solid #ccc;
border-bottom: 1px solid #ccc; border-bottom: 1px solid #ccc;
margin-bottom: 10px;
} }
.alertItem { .alertItem {
padding: 8px; padding: 8px;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
padding-top: 15px;
padding-bottom: 16px;
} }
.alertItem.withAvatar { .alertItem.withAvatar {
background-size: auto 56px; background-size: 60px;
background-repeat: no-repeat; background-repeat: no-repeat;
text-align: right;
padding-right: 12px; padding-right: 12px;
height: 46px; padding-left: 68px;
height: 50px;
} }
.alertItem.withAvatar:not(:last-child) { .alertItem.withAvatar:not(:last-child) {
border-bottom: 1px solid rgb(230,230,230); border-bottom: 1px solid rgb(230,230,230);
@ -124,24 +118,24 @@ li a
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
float: right; float: right;
width: calc(100% - 20px); height: 40px;
height: 30px; width: 100%;
white-space: nowrap;
} }
.alertItem .text { .alertItem .text {
font-size: 10px; font-size: 13px;
font-weight: bold; font-weight: normal;
margin-left: 5px;
} }
.container .container {
{
width: 90%; width: 90%;
padding: 0px; padding: 0px;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
} }
.rowblock .rowblock {
{
border: 1px solid #ccc; border: 1px solid #ccc;
width: 100%; width: 100%;
padding: 0px; padding: 0px;
@ -149,8 +143,7 @@ li a
} }
.rowblock:empty { display: none; } .rowblock:empty { display: none; }
.colblock_left .colblock_left {
{
border: 1px solid #ccc; border: 1px solid #ccc;
padding: 0px; padding: 0px;
padding-top: 0px; padding-top: 0px;
@ -158,8 +151,7 @@ li a
float: left; float: left;
margin-right: 8px; margin-right: 8px;
} }
.colblock_right .colblock_right {
{
border: 1px solid #ccc; border: 1px solid #ccc;
padding: 0px; padding: 0px;
padding-top: 0px; padding-top: 0px;
@ -167,24 +159,20 @@ li a
overflow: hidden; overflow: hidden;
word-wrap: break-word; word-wrap: break-word;
} }
.colblock_left:empty { display: none; } .colblock_left:empty, .colblock_right:empty { display: none; }
.colblock_right:empty { display: none; }
/* The new method of doing columns layouts, colblock is now deprecated :( */ /* The new method of doing columns layouts, colblock is now deprecated :( */
.colstack_left .colstack_left {
{
float: left; float: left;
width: 30%; width: 30%;
margin-right: 8px; margin-right: 8px;
} }
.colstack_right .colstack_right {
{
float: left; float: left;
width: 65%; width: 65%;
width: calc(70% - 15px); width: calc(70% - 15px);
} }
.colstack_item .colstack_item {
{
border: 1px solid #ccc; border: 1px solid #ccc;
padding: 0px; padding: 0px;
padding-top: 0px; padding-top: 0px;
@ -203,6 +191,7 @@ li a
/*grid-gap: 15px;*/ /*grid-gap: 15px;*/
grid-gap: 12px; grid-gap: 12px;
margin-left: 5px; margin-left: 5px;
margin-top: 2px;
} }
.grid_item { .grid_item {
border: 1px solid #ccc; border: 1px solid #ccc;
@ -230,28 +219,26 @@ li a
.stat_red { background-color: #ffb2b2; border-color: #ffb2b2; } .stat_red { background-color: #ffb2b2; border-color: #ffb2b2; }
.stat_disabled { background-color: lightgray; border-color: lightgray; } .stat_disabled { background-color: lightgray; border-color: lightgray; }
.rowitem .rowitem {
{
width: 100%; width: 100%;
padding-left: 8px; /*padding-left: 8px;
padding-right: 8px; padding-right: 8px;
padding-top: 17px; padding-top: 17px;
padding-bottom: 12px;*/
padding-left: 10px;
padding-top: 14px;
padding-bottom: 12px; padding-bottom: 12px;
font-weight: bold; padding-right: 10px;
text-transform: uppercase; /*font-weight: bold;*/
background-color: white; background-color: white;
} }
.rowitem.passive /*.rowitem:not(.passive) {
{ font-size: 17px;
font-weight: normal; }*/
text-transform: none; .rowitem:not(:last-child) {
}
.rowitem:not(:last-child)
{
border-bottom: 1px dotted #ccc; border-bottom: 1px dotted #ccc;
} }
.rowitem a .rowitem a {
{
text-decoration: none; text-decoration: none;
color: black; color: black;
} }
@ -259,31 +246,7 @@ li a
.top_post { margin-bottom: 12px; } .top_post { margin-bottom: 12px; }
.opthead { display: none; } .opthead { display: none; }
.col_left .formrow {
{
width: 30%;
float: left;
}
.col_right
{
width: 69%;
overflow: hidden;
}
.colitem
{
padding-left: 8px;
padding-right: 8px;
padding-top: 17px;
padding-bottom: 12px;
font-weight: bold;
text-transform: uppercase;
}
.colitem.passive { font-weight: normal; text-transform: none; }
.colitem a { text-decoration: none; color: black; }
.colitem a:hover { color: silver; }
.formrow
{
width: 100%; width: 100%;
background-color: white; background-color: white;
} }
@ -296,43 +259,49 @@ li a
.formrow:after { clear: both; } .formrow:after { clear: both; }
.formrow:not(:last-child) { border-bottom: 1px dotted #ccc; } .formrow:not(:last-child) { border-bottom: 1px dotted #ccc; }
.formitem .formitem {
{
float: left; float: left;
padding-left: 8px; padding: 10px;
padding-right: 8px; min-width: 20%;
padding-top: 13px; /*font-size: 17px;*/
padding-bottom: 8px; font-weight: normal;
font-weight: bold;
} }
.formitem:first-child { font-weight: bold; }
.formitem:not(:last-child) { border-right: 1px dotted #ccc; } .formitem:not(:last-child) { border-right: 1px dotted #ccc; }
.formitem.invisible_border { border: none; } .formitem.invisible_border { border: none; }
/* Mostly for textareas */ /* Mostly for textareas */
.formitem:only-child { width: 100%; } .formitem:only-child { width: 100%; }
.formitem textarea .formitem textarea {
{
width: 100%; width: 100%;
height: 100px; height: 100px;
outline-color: #8e8e8e; outline-color: #8e8e8e;
} }
.formitem:has-child() .formitem:has-child() {
{
margin: 0 auto; margin: 0 auto;
float: none; float: none;
} }
.formitem:not(:only-child) input, .formitem:not(:only-child) select { padding: 3px;/*5px;*/ }
.formitem:not(:only-child).formlabel {
padding-top: 15px;/*18px;*/
padding-bottom: 12px;/*16px;*/
/*padding-left: 15px;*/
}
.formbutton {
padding: 7px;
display: block;
margin-left: auto;
margin-right: auto;
font-size: 15px;
border-color: #ccc;
}
button button {
{
background: white; background: white;
border: 1px solid #8e8e8e; border: 1px solid #8e8e8e;
} }
/* Topics */ /* Topics */
.topic_status .topic_status {
{
text-transform: none; text-transform: none;
margin-left: 8px; margin-left: 8px;
padding-left: 2px; padding-left: 2px;
@ -345,8 +314,7 @@ button
} }
.topic_status:empty { display: none; } .topic_status:empty { display: none; }
.username .username, .panel_tag {
{
text-transform: none; text-transform: none;
margin-left: 0px; margin-left: 0px;
padding-left: 4px; padding-left: 4px;
@ -370,8 +338,7 @@ button.username { position: relative; top: -0.25px; }
display: inline-block; display: inline-block;
} }
.tag-mini .tag-mini {
{
text-transform: none; text-transform: none;
margin-left: 0px; margin-left: 0px;
padding-left: 3px; padding-left: 3px;
@ -395,6 +362,55 @@ button.username { position: relative; top: -0.25px; }
opacity: 0.9; opacity: 0.9;
} }
.mod_button {
margin-right: 4px;
}
.like_label:before, .like_count_label:before {
content: "😀";
}
.like_count_label {
color: #505050;
float: right;
opacity: 0.85;
margin-left: 5px;
}
.like_count {
float: right;
color: #505050;
border-left: none;
padding-left: 5px;
padding-right: 5px;
font-size: 17px;
}
.edit_label:before {
content: "🖊️";
}
.trash_label:before {
content: "🗑️";
}
.pin_label:before {
content: "📌";
}
.unpin_label:before {
content: "📌";
}
.unpin_label {
background-color: #D6FFD6;
}
.flag_label:before {
content: "🚩";
}
.level_label:before {
content: "👑";
}
.controls {
margin-top: 23px;
display: inline-block;
width: 100%;
}
.action_item { .action_item {
padding: 14px; padding: 14px;
text-align: center; text-align: center;
@ -411,10 +427,6 @@ button.username { position: relative; top: -0.25px; }
margin-bottom: 8px; margin-bottom: 8px;
} }
.mention {
font-weight: bold;
}
.level { .level {
float: right; float: right;
color: #505050; color: #505050;
@ -424,24 +436,23 @@ button.username { position: relative; top: -0.25px; }
font-size: 17px; font-size: 17px;
} }
.mention { font-weight: bold; }
.show_on_edit { display: none; } .show_on_edit { display: none; }
.alert
{ .alert {
display: block; display: block;
padding: 5px; padding: 5px;
margin-bottom: 10px; margin-bottom: 10px;
border: 1px solid #ccc; border: 1px solid #ccc;
} }
.alert_success .alert_success {
{
display: block; display: block;
padding: 5px; padding: 5px;
border: 1px solid A2FC00; border: 1px solid A2FC00;
margin-bottom: 10px; margin-bottom: 10px;
background-color: DAF7A6; background-color: DAF7A6;
} }
.alert_error .alert_error {
{
display: block; display: block;
padding: 5px; padding: 5px;
border: 1px solid #FF004B; border: 1px solid #FF004B;
@ -472,6 +483,72 @@ button.username { position: relative; top: -0.25px; }
} }
.prev_button { left: 14px; } .prev_button { left: 14px; }
.next_button { right: 14px; } .next_button { right: 14px; }
.head_tag_upshift {
float: right;
position: relative;
top: -2px;
}
/* Control Panel */
.panel_upshift {
font-size: 18px;
position: relative;
top: -2px;
}
.panel_upshift:visited {
color: black;
}
/*.panel_tag_upshift {
margin-left: 2px;
position: relative;
top:-3px;
color: #505050;
}*/
.panel_floater {
float: right;
}
.panel_rank_tag_admin:before {
content: "👑";
}
.panel_rank_tag_mod:before {
content: "👮";
}
.panel_rank_tag_banned:before {
content: "⛓️";
}
.panel_rank_tag_guest:before {
content: "👽";
}
.panel_rank_tag_member:before {
content: "👪";
}
.forum_preset_announce:before {
content: "📣";
}
.forum_preset_members:before {
content: "👪";
}
.forum_preset_staff:before {
content: "👮";
}
.forum_preset_admins:before {
content: "👑";
}
.forum_preset_archive:before {
content: "☠️";
}
.forum_preset_all, .forum_preset_custom, .forum_preset_ {
display: none !important;
}
.forum_active_Hide:before {
content: "🕵️";
}
.forum_active_Show {
display: none !important;
}
@media (max-width: 880px) { @media (max-width: 880px) {
li { li {
@ -492,7 +569,7 @@ button.username { position: relative; top: -0.25px; }
padding-right: 7px; padding-right: 7px;
font-size: 18px; font-size: 18px;
} }
body { body {
padding-left: 4px; padding-left: 4px;
padding-right: 4px; padding-right: 4px;
@ -505,10 +582,6 @@ button.username { position: relative; top: -0.25px; }
.selectedAlert .alertList { top: 37px; right: 4px; } .selectedAlert .alertList { top: 37px; right: 4px; }
} }
@media (max-width: 810px) {
.rowitem { text-transform: none; }
}
@media (max-width: 680px) { @media (max-width: 680px) {
li { li {
padding-left: 5px; padding-left: 5px;
@ -521,7 +594,7 @@ button.username { position: relative; top: -0.25px; }
.menu_left { padding-right: 7px; } .menu_left { padding-right: 7px; }
.menu_right { padding-right: 7px; } .menu_right { padding-right: 7px; }
.menu_create_topic { display: none;} .menu_create_topic { display: none;}
.menu_alerts { .menu_alerts {
padding-left: 4px; padding-left: 4px;
padding-right: 4px; padding-right: 4px;
@ -529,7 +602,7 @@ button.username { position: relative; top: -0.25px; }
padding-top: 1px; padding-top: 1px;
} }
.selectedAlert .alertList { top: 33px; } .selectedAlert .alertList { top: 33px; }
.hide_on_mobile { display: none !important; } .hide_on_mobile { display: none !important; }
.prev_button, .next_button { top: auto; bottom: 5px; } .prev_button, .next_button { top: auto; bottom: 5px; }
.colstack_grid { grid-template-columns: none; grid-gap: 8px; } .colstack_grid { grid-template-columns: none; grid-gap: 8px; }
@ -538,6 +611,30 @@ button.username { position: relative; top: -0.25px; }
@media (max-width: 470px) { @media (max-width: 470px) {
.menu_overview, .menu_profile { display: none; } .menu_overview, .menu_profile { display: none; }
.selectedAlert .alertList {
width: 135px;
margin-bottom: 5px;
}
.alertItem.withAvatar {
background-size: 36px;
text-align: right;
padding-left: 10px;
height: 46px;
}
.alertItem {
padding: 8px;
}
.alertItem.withAvatar .text {
width: calc(100% - 20px);
height: 30px;
white-space: normal;
}
.alertItem .text {
font-size: 10px;
font-weight: bold;
margin-left: 0px;
}
.hide_on_micro { display: none !important; } .hide_on_micro { display: none !important; }
.post_container { overflow: visible !important; } .post_container { overflow: visible !important; }
.post_item:not(.action_item) { .post_item:not(.action_item) {
@ -552,33 +649,49 @@ button.username { position: relative; top: -0.25px; }
width: 100% !important; width: 100% !important;
min-height: 45px; min-height: 45px;
} }
.post_item > .mod_button { .post_item > .controls > .mod_button {
float: right !important; float: right !important;
margin-left: 2px !important; margin-left: 2px !important;
margin-right: 3px;
} }
.post_item > .mod_button > button { opacity: 1; } .post_item > .controls > .mod_button > button {
.post_item > .real_username { opacity: 1;
/*position: absolute; padding-left: 3px;
top: 70px; padding-right: 3px;
float: left; }
margin-top: -2px;*/ .post_item > .controls > .real_username {
margin-top: 0px; margin-top: 0px;
/*padding-top: 3px !important;
margin-right: 2px;
width: 60px;*/
margin-left: 74px;
margin-right: 0px; margin-right: 0px;
font-size: 15px; font-size: 15px;
/*text-align: center;*/
color: black; color: black;
max-width: 61px; max-width: 61px;
/*overflow: hidden;*/
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.post_item > .controls {
margin-top: 0px;
margin-left: 74px;
width: calc(100% - 74px);
}
.container { width: 100% !important; } .container { width: 100% !important; }
} }
@media (max-width: 330px) { @media (max-width: 330px) {
li { padding-left: 6px; } li { padding-left: 6px; }
.menu_left { padding-right: 6px; } .menu_left { padding-right: 6px; }
.post_item > .controls > .real_username {
display: inline-block;
overflow: hidden;
margin-right: -3px;
text-overflow: clip;
max-width: 84px;
}
.post_item > .controls {
margin-left: 72px;
}
.top_post > .post_item > .controls > .real_username {
max-width: 57px;
}
.top_post > .post_item {
padding-right: 4px;
}
} }

View File

@ -1,8 +1,9 @@
{ {
"Name": "tempra-simple", "Name": "tempra-simple",
"FriendlyName": "Tempra Simple", "FriendlyName": "Tempra Simple",
"Version": "0.0.1", "Version": "0.1.0-dev",
"Creator": "Azareal", "Creator": "Azareal",
"FullImage": "tempra-simple.png", "FullImage": "tempra-simple.png",
"MobileFriendly": true "MobileFriendly": true,
} "URL": "github.com/Azareal/Gosora"
}