[url] tags now use a custom parser.

Added more images and updated others.
The [code] tag is now enabled by default.
Fixed some visual flaws in the profiles.
Profile comments are no longer overriden by Tempra Conflux's post layout CSS.
A lock emoji is now used instead of [Status|closed] blocks.
Moved more inline CSS into the stylesheets.
Usernames now link to the profiles in the Tempra Conflux, Cosmo and Cosmo Conflux themes.
This commit is contained in:
Azareal 2017-01-08 16:02:19 +00:00
parent 8aee1ab123
commit 7833ad72fc
29 changed files with 279 additions and 169 deletions

View File

@ -6,6 +6,10 @@ The initial code-base was forked from one of my side projects, but has now gone
Discord Server: https://discord.gg/eyYvtTf
If you like this software, please give it a star and give us some feedback :)
If you dislike it, please give us some feedback on how to make it better! We're always looking for feedback. We love hearing your opinions. If there's something missing or something doesn't look quite right, don't worry! We plan to change many things before the alpha!
# Features
Basic Forum Functionality. All of the little things you would expect of any forum software. E.g. Moderation, Custom Themes, Avatars, and so on.

BIN
images/cosmo-profiles.PNG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 579 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 269 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

View File

Before

Width:  |  Height:  |  Size: 204 KiB

After

Width:  |  Height:  |  Size: 204 KiB

View File

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 74 KiB

View File

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 75 KiB

View File

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 KiB

View File

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 122 KiB

View File

Before

Width:  |  Height:  |  Size: 187 KiB

After

Width:  |  Height:  |  Size: 187 KiB

View File

@ -1,7 +1,14 @@
package main
//import "log"
//import "fmt"
import "bytes"
//import "strings"
import "regexp"
var bbcode_invalid_url []byte
var bbcode_url_open []byte
var bbcode_url_open2 []byte
var bbcode_url_close []byte
var bbcode_bold *regexp.Regexp
var bbcode_italic *regexp.Regexp
var bbcode_underline *regexp.Regexp
@ -14,8 +21,13 @@ func init() {
}
func init_bbcode() {
plugins["bbcode"].AddHook("parse_assign", bbcode_parse_without_code)
//plugins["bbcode"].AddHook("parse_assign", bbcode_full_parse)
//plugins["bbcode"].AddHook("parse_assign", bbcode_parse_without_code)
plugins["bbcode"].AddHook("parse_assign", bbcode_full_parse)
bbcode_invalid_url = []byte("<span style='color: red;'>[Invalid URL]</span>")
bbcode_url_open = []byte("<a href='")
bbcode_url_open2 = []byte("'>")
bbcode_url_close = []byte("</a>")
bbcode_bold = regexp.MustCompile(`(?s)\[b\](.*)\[/b\]`)
bbcode_italic = regexp.MustCompile(`(?s)\[i\](.*)\[/i\]`)
@ -27,8 +39,8 @@ func init_bbcode() {
}
func deactivate_bbcode() {
plugins["bbcode"].RemoveHook("parse_assign", bbcode_parse_without_code)
//plugins["bbcode"].RemoveHook("parse_assign", bbcode_full_parse)
//plugins["bbcode"].RemoveHook("parse_assign", bbcode_parse_without_code)
plugins["bbcode"].RemoveHook("parse_assign", bbcode_full_parse)
}
func bbcode_regex_parse(data interface{}) interface{} {
@ -147,13 +159,12 @@ func bbcode_parse_without_code(data interface{}) interface{} {
closer := []byte("</u></i></b></s>")
msgbytes = append(msgbytes, closer...)
}
msg = string(msgbytes)
if complex_bbc {
msg = bbcode_url.ReplaceAllString(msg,"<a href=\"$1$2//$3\" rel=\"nofollow\">$1$2//$3</i>")
msg = bbcode_url_label.ReplaceAllString(msg,"<a href=\"$1$2//$3\" rel=\"nofollow\">$4</i>")
}
return msg
return string(msgbytes)
}
// Does every type of BBCode
@ -233,13 +244,73 @@ func bbcode_full_parse(data interface{}) interface{} {
closer := []byte("</u></i></b></s>")
msgbytes = append(msgbytes, closer...)
}
msg = string(msgbytes)
if complex_bbc {
msg = bbcode_url.ReplaceAllString(msg,"<a href=\"$1$2//$3\" rel=\"nofollow\">$1$2//$3</i>")
var start int
var lastTag int
var outbytes []byte
for i := 0; i < len(msgbytes); i++ {
MainLoop:
if msgbytes[i] == '[' {
OuterComplex:
if msgbytes[i + 1] == 'u' {
if msgbytes[i + 2] == 'r' && msgbytes[i + 3] == 'l' && msgbytes[i + 4] == ']' {
outbytes = append(outbytes, msgbytes[lastTag:i]...)
start = i + 5
i = start
if msgbytes[i] == 'h' {
if msgbytes[i + 1] == 't' && msgbytes[i + 2] == 't' && msgbytes[i + 3] == 'p' {
if bytes.Equal(msgbytes[i + 4:i + 7],[]byte("s://")) {
i += 7
} else if msgbytes[i + 4] == ':' && msgbytes[i + 5] == '/' && msgbytes[i + 6] == '/' {
i += 6
} else {
outbytes = append(outbytes, bbcode_invalid_url...)
continue
}
}
} else if msgbytes[i] == 'f' {
if bytes.Equal(msgbytes[i + 1:i + 5],[]byte("tp://")) {
i += 5
}
}
for ;; i++ {
if msgbytes[i] == '[' {
if !bytes.Equal(msgbytes[i + 1:i + 6],[]byte("/url]")) {
//log.Print("Not the URL closing tag!")
//fmt.Println(msgbytes[i + 1:i + 6])
goto OuterComplex
}
break
} else if msgbytes[i] != '\\' && msgbytes[i] != '_' && !(msgbytes[i] > 44 && msgbytes[i] < 58) && !(msgbytes[i] > 64 && msgbytes[i] < 91) && !(msgbytes[i] > 96 && msgbytes[i] < 123) {
outbytes = append(outbytes, bbcode_invalid_url...)
//log.Print("Weird character")
//fmt.Println(msgbytes[i])
goto MainLoop
}
}
outbytes = append(outbytes, bbcode_url_open...)
outbytes = append(outbytes, msgbytes[start:i]...)
outbytes = append(outbytes, bbcode_url_open2...)
outbytes = append(outbytes, msgbytes[start:i]...)
outbytes = append(outbytes, bbcode_url_close...)
i += 6
lastTag = i
}
}
}
}
if len(outbytes) != 0 {
return string(outbytes)
}
msg = string(msgbytes)
//msg = bbcode_url.ReplaceAllString(msg,"<a href=\"$1$2//$3\" rel=\"nofollow\">$1$2//$3</i>")
msg = bbcode_url_label.ReplaceAllString(msg,"<a href=\"$1$2//$3\" rel=\"nofollow\">$4</i>")
//msg = strings.Replace(msg,"[code]","",-1)
//msg = strings.Replace(msg,"[/code]","",-1)
// Convert [code] into class="codequotes"
} else {
msg = string(msgbytes)
}
return msg
}

View File

@ -109,7 +109,7 @@ func route_topics(w http.ResponseWriter, r *http.Request){
}
if topicItem.Is_Closed {
topicItem.Status = "shut"
topicItem.Status = "closed"
} else {
topicItem.Status = "open"
}
@ -183,7 +183,7 @@ func route_forum(w http.ResponseWriter, r *http.Request){
}
if topicItem.Is_Closed {
topicItem.Status = "shut"
topicItem.Status = "closed"
} else {
topicItem.Status = "open"
}
@ -297,7 +297,7 @@ func route_topic_id(w http.ResponseWriter, r *http.Request){
topic.ContentLines = strings.Count(content,"\n")
if topic.Is_Closed {
topic.Status = "shut"
topic.Status = "closed"
// We don't want users posting in locked topics...
if !user.Is_Mod {

View File

@ -86,7 +86,7 @@ w.Write([]byte(`background-color: #eaeaea;`))
w.Write([]byte(`">
<a href="/topic/` + strconv.Itoa(item.ID) + `">` + item.Title + `</a> `))
if item.Is_Closed {
w.Write([]byte(`<span class="username topic_status_e topic_status_closed" style="float: right;">shut</span>
w.Write([]byte(`<span class="username topic_status_e topic_status_closed" style="float: right;">closed</span>
`))
} else {
w.Write([]byte(`<span class="username hide_on_micro topic_status_e topic_status_open" style="float: right;">open</span>`))

View File

@ -66,7 +66,7 @@ w.Write([]byte(`<div class="alert">` + item + `</div>`))
}
w.Write([]byte(`
<div class="colblock_left" style="max-width: 220px;">
<div class="rowitem" style="padding: 0;"><img src="` + tmpl_profile_vars.ProfileOwner.Avatar + `" style="max-width: 100%;margin: 0;"/></div>
<div class="rowitem" style="padding: 0;"><img src="` + tmpl_profile_vars.ProfileOwner.Avatar + `" style="max-width: 100%;margin: 0;display: block;" /></div>
<div class="rowitem" style="text-transform: capitalize;">
<span style="font-size: 18px;">` + tmpl_profile_vars.ProfileOwner.Name + `</span>`))
if tmpl_profile_vars.ProfileOwner.Tag != "" {
@ -95,12 +95,11 @@ w.Write([]byte(`
<div class="colblock_right">
<div class="rowitem rowhead"><a>Comments</a></div>
</div>
<div class="colblock_right" style="overflow: hidden;">
`))
<div class="colblock_right" style="overflow: hidden;border-top: none;">`))
if len(tmpl_profile_vars.ItemList) != 0 {
for _, item := range tmpl_profile_vars.ItemList {
w.Write([]byte(`
<div class="rowitem passive deletable_block editable_parent" style="`))
<div class="rowitem passive deletable_block editable_parent simple" style="`))
if item.Avatar != "" {
w.Write([]byte(`background-image: url(` + item.Avatar + `), url(/static/white-dot.jpg);background-position: 0px `))
if item.ContentLines <= 5 {
@ -109,7 +108,7 @@ w.Write([]byte(`-1`))
w.Write([]byte(`0px;background-repeat: no-repeat, repeat-y;background-size: 128px;padding-left: 136px;` + string(item.Css)))
}
w.Write([]byte(`">
<span class="editable_block user_content">` + string(item.ContentHtml) + `</span>
<span class="editable_block user_content simple">` + string(item.ContentHtml) + `</span>
<br /><br />
<a href="/user/` + strconv.Itoa(item.CreatedBy) + `" class="username">` + item.CreatedByName + `</a>
`))
@ -124,28 +123,28 @@ if item.Tag != "" {
w.Write([]byte(`<a class="username hide_on_mobile" style="float: right;">` + item.Tag + `</a>`))
}
w.Write([]byte(`
</div>`))
</div>
`))
}
}
w.Write([]byte(`
</div>
w.Write([]byte(`</div>
<div class="colblock_right" style="border-top: none;">
`))
if !tmpl_profile_vars.CurrentUser.Is_Banned {
w.Write([]byte(`
<div class="colblock_right">
<form action="/profile/reply/create/" method="post">
<input name="uid" value='` + strconv.Itoa(tmpl_profile_vars.ProfileOwner.ID) + `' type="hidden" />
<div class="formrow">
<div class="formitem"><textarea name="reply-content" placeholder="Insert reply here"></textarea></div>
</div>
<div class="formrow">
<div class="formitem"><button name="reply-button" class="formbutton">Create Reply</button></div>
</div>
</form>
</div>
<form action="/profile/reply/create/" method="post">
<input name="uid" value='` + strconv.Itoa(tmpl_profile_vars.ProfileOwner.ID) + `' type="hidden" />
<div class="formrow">
<div class="formitem"><textarea name="reply-content" placeholder="Insert reply here"></textarea></div>
</div>
<div class="formrow">
<div class="formitem"><button name="reply-button" class="formbutton">Create Reply</button></div>
</div>
</form>
`))
}
w.Write([]byte(`
</div>
<!--<link rel="stylesheet" href="https://use.fontawesome.com/8670aa03ca.css">-->
</div><div style="clear: both;"></div></div></div>
</body>

View File

@ -1,8 +1,8 @@
/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
package main
import "html/template"
import "io"
import "strconv"
import "html/template"
func init() {
template_topic_handle = template_topic
@ -78,8 +78,11 @@ w.Write([]byte(` style="background-color: #eaeaea;"`))
}
w.Write([]byte(`>
<a class='topic_name hide_on_edit'>` + tmpl_topic_vars.Topic.Title + `</a>
<span class='username hide_on_micro topic_status_e topic_status_` + tmpl_topic_vars.Topic.Status + ` hide_on_edit' style="font-weight:normal;float: right;">` + tmpl_topic_vars.Topic.Status + `</span>
<span class="username hide_on_micro" style="border-right: 0;font-weight: normal;float: right;">Status</span>
`))
if tmpl_topic_vars.Topic.Is_Closed {
w.Write([]byte(`<span class='username hide_on_micro topic_status_e topic_status_closed hide_on_edit' title='Status: Closed' style="font-weight:normal;float: right;">&#x1F512;&#xFE0E</span>`))
}
w.Write([]byte(`
`))
if tmpl_topic_vars.CurrentUser.Is_Mod {
w.Write([]byte(`
@ -96,7 +99,7 @@ w.Write([]byte(`
<input class='show_on_edit topic_name_input' name="topic_name" value='` + tmpl_topic_vars.Topic.Title + `' type="text" />
<select name="topic_status" class='show_on_edit topic_status_input' style='float: right;'>
<option>open</option>
<option>shut</option>
<option>closed</option>
</select>
<button name="topic-button" class="formbutton show_on_edit submit_edit">Update</button>
`))

View File

@ -1,8 +1,8 @@
/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
package main
import "io"
import "strconv"
import "html/template"
import "io"
func init() {
template_topic_alt_handle = template_topic_alt
@ -78,8 +78,11 @@ w.Write([]byte(` topic_closed_head`))
}
w.Write([]byte(`">
<a class='topic_name hide_on_edit'>` + tmpl_topic_alt_vars.Topic.Title + `</a>
<span class='username hide_on_micro topic_status_e topic_status_` + tmpl_topic_alt_vars.Topic.Status + ` hide_on_edit' style="font-weight:normal;float: right;">` + tmpl_topic_alt_vars.Topic.Status + `</span>
<span class="username hide_on_micro status_label" style="border-right: 0;font-weight: normal;float: right;">Status</span>
`))
if tmpl_topic_alt_vars.Topic.Is_Closed {
w.Write([]byte(`<span class='username hide_on_micro topic_status_e topic_status_closed hide_on_edit' title='Status: Closed' style="font-weight:normal;float: right;">&#x1F512;&#xFE0E</span>`))
}
w.Write([]byte(`
`))
if tmpl_topic_alt_vars.CurrentUser.Is_Mod {
w.Write([]byte(`
@ -109,9 +112,9 @@ w.Write([]byte(`
<style type="text/css">.rowitem:last-child .content_container { margin-bottom: 5px !important; }</style>
<div class="rowblock post_container" style="border-top: none;">
<div class="rowitem passive deletable_block editable_parent post_item" style="background-color: #eaeaea;padding-top: 4px;padding-left: 5px;clear: both;border-bottom: none;padding-right: 4px;padding-bottom: 2px;">
<div class="userinfo" style="background: white;width: 132px;padding: 2px;margin-top: 2px;float: left;position: sticky;top: 4px;box-shadow:0 1px 2px rgba(0,0,0,.1);">
<div class="avatar_item" style="background-image: url(` + tmpl_topic_alt_vars.Topic.Avatar + `), url(/static/white-dot.jpg);background-position: 0px -10px;background-repeat: no-repeat, repeat-y;background-size: 128px;width: 128px;height: 100%;min-height: 128px;border-style: solid;border-color: #eaeaea;border-width: 1px;">&nbsp;</div>
<div class="the_name" style="margin-top: 3px;text-align: center;color: #505050;">` + tmpl_topic_alt_vars.Topic.CreatedByName + `</div>
<div class="userinfo">
<div class="avatar_item" style="background-image: url(` + tmpl_topic_alt_vars.Topic.Avatar + `), url(/static/white-dot.jpg);background-position: 0px -10px;">&nbsp;</div>
<a href="/user/` + strconv.Itoa(tmpl_topic_alt_vars.Topic.CreatedBy) + `" class="the_name">` + tmpl_topic_alt_vars.Topic.CreatedByName + `</a>
`))
if tmpl_topic_alt_vars.Topic.Tag != "" {
w.Write([]byte(`<div class="tag_block"><div class="tag_pre"></div><div class="post_tag">` + tmpl_topic_alt_vars.Topic.Tag + `</div><div class="tag_post"></div></div>`))
@ -119,7 +122,7 @@ w.Write([]byte(`<div class="tag_block"><div class="tag_pre"></div><div class="po
w.Write([]byte(`
</div>
<div class="content_container">
<div class="hide_on_edit topic_content user_content" style="min-height: 153px;">` + string(tmpl_topic_alt_vars.Topic.Content.(template.HTML)) + `</div>
<div class="hide_on_edit topic_content user_content nobuttons">` + string(tmpl_topic_alt_vars.Topic.Content.(template.HTML)) + `</div>
<textarea name="topic_content" class="show_on_edit topic_content_input">` + string(tmpl_topic_alt_vars.Topic.Content.(template.HTML)) + `</textarea>
</div>
<div style="clear:both;"></div>
@ -130,8 +133,8 @@ for _, item := range tmpl_topic_alt_vars.ItemList {
w.Write([]byte(`
<div class="rowitem passive deletable_block editable_parent post_item">
<div class="userinfo">
<div class="avatar_item" style="background-image: url(` + item.Avatar + `), url(/static/white-dot.jpg);background-position: 0px -10px;background-repeat: no-repeat, repeat-y;background-size: 128px;width: 128px;height: 100%;min-height: 128px;border-style: solid;border-color: #eaeaea;border-width: 1px;">&nbsp;</div>
<div class="the_name" style="margin-top: 3px;text-align: center;color: #505050;">` + item.CreatedByName + `</div>
<div class="avatar_item" style="background-image: url(` + item.Avatar + `), url(/static/white-dot.jpg);background-position: 0px -10px;">&nbsp;</div>
<a href="/user/` + strconv.Itoa(item.CreatedBy) + `" class="the_name">` + item.CreatedByName + `</a>
`))
if item.Tag != "" {
w.Write([]byte(`<div class="tag_block"><div class="tag_pre"></div><div class="post_tag">` + item.Tag + `</div><div class="tag_post"></div></div>`))

View File

@ -1,7 +1,7 @@
/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
package main
import "strconv"
import "io"
import "strconv"
func init() {
template_topics_handle = template_topics
@ -86,13 +86,9 @@ w.Write([]byte(`background-color: #eaeaea;`))
w.Write([]byte(`">
<a href="/topic/` + strconv.Itoa(item.ID) + `">` + item.Title + `</a> `))
if item.Is_Closed {
w.Write([]byte(`<span class="username topic_status_e topic_status_closed" style="float: right;">shut</span>
`))
} else {
w.Write([]byte(`<span class="username hide_on_micro topic_status_e topic_status_open" style="float: right;">open</span>`))
w.Write([]byte(`<span class="username topic_status_e topic_status_closed" style="float: right;" title="Status: Closed">&#x1F512;&#xFE0E</span>`))
}
w.Write([]byte(`
<span class="username hide_on_micro status_label" style="border-right: 0;float: right;">Status</span>
</div>
`))
}

View File

@ -4,7 +4,7 @@
</div>
<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}}">
<a href="/topic/{{.ID}}">{{.Title}}</a> {{if .Is_Closed}}<span class="username topic_status_e topic_status_closed" style="float: right;">shut</span>
<a href="/topic/{{.ID}}">{{.Title}}</a> {{if .Is_Closed}}<span class="username topic_status_e topic_status_closed" style="float: right;">closed</span>
{{else}}<span class="username hide_on_micro topic_status_e topic_status_open" style="float: right;">open</span>{{end}}
<span class="username hide_on_micro" style="border-right: 0;float: right;">Status</span>
</div>

View File

@ -1,6 +1,6 @@
{{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;"/></div>
<div class="rowitem" style="padding: 0;"><img src="{{.ProfileOwner.Avatar}}" style="max-width: 100%;margin: 0;display: block;" /></div>
<div class="rowitem" style="text-transform: capitalize;">
<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>
@ -15,29 +15,28 @@
<div class="colblock_right">
<div class="rowitem rowhead"><a>Comments</a></div>
</div>
<div class="colblock_right" style="overflow: hidden;">
{{range .ItemList}}
<div class="rowitem passive deletable_block editable_parent" 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">{{.ContentHtml}}</span>
<div class="colblock_right" style="overflow: hidden;border-top: none;">{{range .ItemList}}
<div class="rowitem passive deletable_block editable_parent simple" style="{{ if .Avatar }}background-image: url({{.Avatar}}), url(/static/white-dot.jpg);background-position: 0px {{if le .ContentLines 5}}-1{{end}}0px;background-repeat: no-repeat, repeat-y;background-size: 128px;padding-left: 136px;{{.Css}}{{end}}">
<span class="editable_block user_content simple">{{.ContentHtml}}</span>
<br /><br />
<a href="/user/{{.CreatedBy}}" class="username">{{.CreatedByName}}</a>
{{if $.CurrentUser.Is_Mod}}<a href="/profile/reply/edit/submit/{{.ID}}"><button class="username edit_item">Edit</button></a>
<a href="/profile/reply/delete/submit/{{.ID}}"><button class="username delete_item">Delete</button></a>{{end}}
<a href="/report/submit/{{.ID}}?session={{$.CurrentUser.Session}}&type=user-reply"><button class="username report_item">Report</button></a>
{{ if .Tag }}<a class="username hide_on_mobile" style="float: right;">{{.Tag}}</a>{{end}}
</div>{{end}}
</div>
</div>
{{end}}</div>
<div class="colblock_right" style="border-top: none;">
{{if not .CurrentUser.Is_Banned}}
<div class="colblock_right">
<form action="/profile/reply/create/" method="post">
<input name="uid" value='{{.ProfileOwner.ID}}' type="hidden" />
<div class="formrow">
<div class="formitem"><textarea name="reply-content" placeholder="Insert reply here"></textarea></div>
</div>
<div class="formrow">
<div class="formitem"><button name="reply-button" class="formbutton">Create Reply</button></div>
</div>
</form>
</div>
<form action="/profile/reply/create/" method="post">
<input name="uid" value='{{.ProfileOwner.ID}}' type="hidden" />
<div class="formrow">
<div class="formitem"><textarea name="reply-content" placeholder="Insert reply here"></textarea></div>
</div>
<div class="formrow">
<div class="formitem"><button name="reply-button" class="formbutton">Create Reply</button></div>
</div>
</form>
{{end}}
</div>
{{template "footer.html" . }}

View File

@ -3,17 +3,16 @@
<form action='/topic/edit/submit/{{.Topic.ID}}' method="post">
<div class="rowitem"{{ if .Topic.Sticky }} style="background-color: #FFFFEA;"{{else if .Topic.Is_Closed}} style="background-color: #eaeaea;"{{end}}>
<a class='topic_name hide_on_edit'>{{.Topic.Title}}</a>
<span class='username hide_on_micro topic_status_e topic_status_{{.Topic.Status}} hide_on_edit' style="font-weight:normal;float: right;">{{.Topic.Status}}</span>
<span class="username hide_on_micro" style="border-right: 0;font-weight: normal;float: right;">Status</span>
{{if .Topic.Is_Closed}}<span class='username hide_on_micro topic_status_e topic_status_closed hide_on_edit' title='Status: Closed' style="font-weight:normal;float: right;">&#x1F512;&#xFE0E</span>{{end}}
{{if .CurrentUser.Is_Mod}}
<a href='/topic/edit/{{.Topic.ID}}' class="username hide_on_edit open_edit" style="font-weight: normal;margin-left: 6px;">Edit</a>
<a href='/topic/delete/submit/{{.Topic.ID}}' class="username" style="font-weight: normal;">Delete</a>
{{ if .Topic.Sticky }}<a href='/topic/unstick/submit/{{.Topic.ID}}' class="username" style="font-weight: normal;">Unpin</a>{{else}}<a href='/topic/stick/submit/{{.Topic.ID}}' class="username" style="font-weight: normal;">Pin</a>{{end}}
{{if .Topic.Sticky}}<a href='/topic/unstick/submit/{{.Topic.ID}}' class="username" style="font-weight: normal;">Unpin</a>{{else}}<a href='/topic/stick/submit/{{.Topic.ID}}' class="username" style="font-weight: normal;">Pin</a>{{end}}
<input class='show_on_edit topic_name_input' name="topic_name" value='{{.Topic.Title}}' type="text" />
<select name="topic_status" class='show_on_edit topic_status_input' style='float: right;'>
<option>open</option>
<option>shut</option>
<option>closed</option>
</select>
<button name="topic-button" class="formbutton show_on_edit submit_edit">Update</button>
{{end}}

View File

@ -3,12 +3,11 @@
<form action='/topic/edit/submit/{{.Topic.ID}}' method="post">
<div class="rowitem rowhead{{ if .Topic.Sticky }} topic_sticky_head{{else if .Topic.Is_Closed}} topic_closed_head{{end}}">
<a class='topic_name hide_on_edit'>{{.Topic.Title}}</a>
<span class='username hide_on_micro topic_status_e topic_status_{{.Topic.Status}} hide_on_edit' style="font-weight:normal;float: right;">{{.Topic.Status}}</span>
<span class="username hide_on_micro status_label" style="border-right: 0;font-weight: normal;float: right;">Status</span>
{{if .Topic.Is_Closed}}<span class='username hide_on_micro topic_status_e topic_status_closed hide_on_edit' title='Status: Closed' style="font-weight:normal;float: right;">&#x1F512;&#xFE0E</span>{{end}}
{{if .CurrentUser.Is_Mod}}
<a href='/topic/edit/{{.Topic.ID}}' class="username hide_on_edit open_edit topic_button" style="font-weight: normal;margin-left: 6px;">Edit</a>
<a href='/topic/delete/submit/{{.Topic.ID}}' class="username topic_button" style="font-weight: normal;">Delete</a>
{{ if .Topic.Sticky }}<a href='/topic/unstick/submit/{{.Topic.ID}}' class="username topic_button" style="font-weight: normal;">Unpin</a>{{else}}<a href='/topic/stick/submit/{{.Topic.ID}}' class="username topic_button" style="font-weight: normal;">Pin</a>{{end}}
{{if .Topic.Sticky}}<a href='/topic/unstick/submit/{{.Topic.ID}}' class="username topic_button" style="font-weight: normal;">Unpin</a>{{else}}<a href='/topic/stick/submit/{{.Topic.ID}}' class="username topic_button" style="font-weight: normal;">Pin</a>{{end}}
<input class='show_on_edit topic_name_input' name="topic_name" value='{{.Topic.Title}}' type="text" />
<select name="topic_status" class='show_on_edit topic_status_input' style='float: right;'>
@ -24,13 +23,13 @@
<style type="text/css">.rowitem:last-child .content_container { margin-bottom: 5px !important; }</style>
<div class="rowblock post_container" style="border-top: none;">
<div class="rowitem passive deletable_block editable_parent post_item" style="background-color: #eaeaea;padding-top: 4px;padding-left: 5px;clear: both;border-bottom: none;padding-right: 4px;padding-bottom: 2px;">
<div class="userinfo" style="background: white;width: 132px;padding: 2px;margin-top: 2px;float: left;position: sticky;top: 4px;box-shadow:0 1px 2px rgba(0,0,0,.1);">
<div class="avatar_item" style="background-image: url({{.Topic.Avatar}}), url(/static/white-dot.jpg);background-position: 0px -10px;background-repeat: no-repeat, repeat-y;background-size: 128px;width: 128px;height: 100%;min-height: 128px;border-style: solid;border-color: #eaeaea;border-width: 1px;">&nbsp;</div>
<div class="the_name" style="margin-top: 3px;text-align: center;color: #505050;">{{.Topic.CreatedByName}}</div>
<div class="userinfo">
<div class="avatar_item" style="background-image: url({{.Topic.Avatar}}), url(/static/white-dot.jpg);background-position: 0px -10px;">&nbsp;</div>
<a href="/user/{{.Topic.CreatedBy}}" class="the_name">{{.Topic.CreatedByName}}</a>
{{if .Topic.Tag}}<div class="tag_block"><div class="tag_pre"></div><div class="post_tag">{{.Topic.Tag}}</div><div class="tag_post"></div></div>{{end}}
</div>
<div class="content_container">
<div class="hide_on_edit topic_content user_content" style="min-height: 153px;">{{.Topic.Content}}</div>
<div class="hide_on_edit topic_content user_content nobuttons">{{.Topic.Content}}</div>
<textarea name="topic_content" class="show_on_edit topic_content_input">{{.Topic.Content}}</textarea>
</div>
<div style="clear:both;"></div>
@ -38,8 +37,8 @@
{{range .ItemList}}
<div class="rowitem passive deletable_block editable_parent post_item">
<div class="userinfo">
<div class="avatar_item" style="background-image: url({{.Avatar}}), url(/static/white-dot.jpg);background-position: 0px -10px;background-repeat: no-repeat, repeat-y;background-size: 128px;width: 128px;height: 100%;min-height: 128px;border-style: solid;border-color: #eaeaea;border-width: 1px;">&nbsp;</div>
<div class="the_name" style="margin-top: 3px;text-align: center;color: #505050;">{{.CreatedByName}}</div>
<div class="avatar_item" style="background-image: url({{.Avatar}}), url(/static/white-dot.jpg);background-position: 0px -10px;">&nbsp;</div>
<a href="/user/{{.CreatedBy}}" class="the_name">{{.CreatedByName}}</a>
{{if .Tag}}<div class="tag_block"><div class="tag_pre"></div><div class="post_tag">{{.Tag}}</div><div class="tag_post"></div></div>{{end}}
</div>
<div class="content_container">

View File

@ -4,9 +4,7 @@
</div>
<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}}">
<a href="/topic/{{.ID}}">{{.Title}}</a> {{if .Is_Closed}}<span class="username topic_status_e topic_status_closed" style="float: right;">shut</span>
{{else}}<span class="username hide_on_micro topic_status_e topic_status_open" style="float: right;">open</span>{{end}}
<span class="username hide_on_micro status_label" style="border-right: 0;float: right;">Status</span>
<a href="/topic/{{.ID}}">{{.Title}}</a> {{if .Is_Closed}}<span class="username topic_status_e topic_status_closed" style="float: right;" title="Status: Closed">&#x1F512;&#xFE0E</span>{{end}}
</div>
{{else}}<div class="rowitem passive">There aren't any topics yet.</div>{{end}}
</div>

View File

@ -175,9 +175,8 @@ hr { color: silver; border: 1px solid silver; }
.colhead a { color: white; display: block; padding-top: 5px; }
.colhead span { display: block; padding-top: 5px; }
.open_edit { display: none !important; }
/*.username { display: none !important; }*/
.show_on_edit { display: none; }
.status_label, .topic_status_e/*, .topic_button*/ { 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; }
.colblock_left
@ -344,7 +343,7 @@ hr { color: silver; border: 1px solid silver; }
box-sizing: border-box;
}
button
/*button
{
background: #ce2424;
background: linear-gradient(#f97779, #ce2424);
@ -357,7 +356,7 @@ button
margin-bottom: 2px;
border-radius: 5px;
}
button .big { padding: 6px; }
button .big { padding: 6px; }*/
.formbutton
{
@ -481,11 +480,6 @@ blockquote p
max-height: 128px;
max-width: 128px;
}
.bigAvatar
{
max-height: 64px;
max-width: 64px;
}
/* From Tempra Conflux */
.user_content {
@ -497,6 +491,9 @@ blockquote p
padding-bottom: 0;
width: 100%;
}
.user_content.nobuttons {
min-height: 153px;
}
.button_container {
border-top: solid 1px #eaeaea;
@ -520,6 +517,10 @@ blockquote p
padding-left: 5px;
padding-right: 5px;
}
.post_item:not(.simple) {
background-color: #eaeaea;
}
.post_item {
background-color: #eaeaea;
padding-top: 4px;
@ -533,6 +534,13 @@ blockquote p
.post_tag {
display: none;
}
.the_name {
margin-top: 3px;
text-align: center;
color: #505050;
display: block;
}
.userinfo {
background: white;
width: 132px;
@ -543,6 +551,17 @@ blockquote p
top: 4px;
box-shadow:0 1px 2px rgba(0,0,0,.1);
}
.userinfo .avatar_item {
background-repeat: no-repeat, repeat-y;
background-size: 128px;
width: 128px;
height: 100%;
min-height: 128px;
border-style: solid;
border-color: #eaeaea;
border-width: 1px;
}
.content_container {
background: white;
margin-left: 137px;
@ -783,7 +802,6 @@ blockquote p
clear: left;
width: 100%;
}
li
{
font-size: 15px;
@ -797,7 +815,6 @@ blockquote p
position: relative;
top: -25px;
}
#main
{
padding-left: 4px;
@ -825,10 +842,22 @@ blockquote p
max-height: 80px;
max-width: 80px;
}
.userRibbon { word-wrap: break-word; }
.tag_block { word-wrap: break-word; }
.notice:first-child { display: inline-block; }
.getTopics { display: none; }
.userinfo {
width: 70px;
}
.userinfo .avatar_item {
background-size: 64px;
width: 64px;
min-height: 64px;
}
.content_container {
margin-left: 73px;
}
}
@media (min-width: 800px)
{
@ -981,12 +1010,6 @@ blockquote p
padding: 8px;
}
.nav { width: 1000px; }
.bigAvatar
{
max-height: 128px;
max-width: 128px;
}
}
@media (min-width: 1603px)

View File

@ -172,9 +172,8 @@ hr { color: silver; border: 1px solid silver; }
.colhead a { color: white; display: block; padding-top: 5px; }
.colhead span { display: block; padding-top: 5px; }
.open_edit { display: none !important; }
/*.username { display: none !important; }*/
.show_on_edit { display: none; }
.status_label, .topic_status_e/*, .topic_button*/ { 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; }
.colblock_left
@ -342,7 +341,7 @@ hr { color: silver; border: 1px solid silver; }
box-sizing: border-box;
}
button
/*button
{
background: #ce2424;
background: linear-gradient(#f97779, #ce2424);
@ -355,7 +354,7 @@ button
margin-bottom: 2px;
border-radius: 5px;
}
button .big { padding: 6px; }
button .big { padding: 6px; }*/
.formbutton
{
@ -523,13 +522,13 @@ blockquote p
right: -1px;
}
.post_block.groupRibbon
.tag_block.groupRibbon
{
display: none;
}
/* From Tempra Conflux */
.user_content {
.user_content:not(.simple) {
padding: 5px;
margin-top: 3px;
margin-bottom: 0;
@ -538,6 +537,9 @@ blockquote p
padding-bottom: 0;
width: 100%;
}
.user_content.nobuttons {
min-height: 153px;
}
.button_container {
border-top: solid 1px #eaeaea;
@ -561,8 +563,10 @@ blockquote p
padding-left: 5px;
padding-right: 5px;
}
.post_item {
.post_item:not(.simple) {
background-color: #eaeaea;
}
.post_item {
padding-top: 4px;
padding-left: 7px !important;
clear: both;
@ -574,6 +578,13 @@ blockquote p
.post_item:last-child {
padding-bottom: 7px;
}
.the_name {
margin-top: 3px;
text-align: center;
color: #505050;
display: block;
}
.userinfo {
border-radius: 5px;
@ -586,6 +597,17 @@ blockquote p
top: 4px;
box-shadow:0 1px 2px rgba(0,0,0,.1);
}
.userinfo .avatar_item {
background-repeat: no-repeat, repeat-y;
background-size: 128px;
width: 128px;
height: 100%;
min-height: 128px;
border-style: solid;
border-color: #eaeaea;
border-width: 1px;
}
.content_container {
background: white;
margin-left: 140px;
@ -599,26 +621,6 @@ blockquote p
/* Anything that isn't a small mobile */
@media(min-width: 501px)
{
/*.top
{
margin-top: 0px;
margin-bottom: 0px;
margin-left: auto;
margin-right: auto;
width: 200px;
padding: 0px;
outline: none;
}
.top h1
{
text-align: center;
color: darkgray;
text-shadow: 0px 1px 0px #646464;
margin: 0px;
line-height: 60px;
}*/
.options
{
float: right;
@ -741,13 +743,6 @@ blockquote p
@media (max-width: 800px)
{
body { background: #cdcdcd; margin-bottom: 10px;}
/*.top
{
background: url('../../images/atombb-small.png') no-repeat left, url('../../images/head-bg.png');
width: 100%;
}
.top img { display: none; }*/
#main
{
width: 100%;
@ -810,9 +805,7 @@ blockquote p
body { overflow-x: hidden; }
h1 { font-size: 0; }
/*.top { display: none !important; }*/
.options { display: none !important; }
/*.top div {display: none;}*/
ul
{
line-height: 30px;
@ -828,7 +821,6 @@ blockquote p
clear: left;
width: 100%;
}
li
{
font-size: 15px;
@ -842,7 +834,6 @@ blockquote p
position: relative;
top: -25px;
}
#main
{
padding-left: 4px;
@ -870,27 +861,27 @@ blockquote p
max-height: 80px;
max-width: 80px;
}
.userRibbon { word-wrap: break-word; }
.tag_block { word-wrap: break-word; }
.tag_block:last-child { margin-bottom: 5px; }
.notice:first-child { display: inline-block; }
.forumLastposter img { display: none; }
.getTopics { display: none; }
.userinfo {
width: 70px;
}
.userinfo .avatar_item {
background-size: 64px;
width: 64px;
min-height: 64px;
}
.content_container {
margin-left: 73px;
}
}
@media (min-width: 800px)
{
/*.top {
min-height: 50px !important;
-webkit-animation-duration: 2s;
-moz-animation-duration: 2s;
animation-duration: 2s;
-webkit-animation-name: slidein;
-moz-animation-name: slidein;
animation-name: slidein;
}
.top a
{
height: 50px !important;
}*/
@-webkit-keyframes slidein
{
from { transform: translate(0,-50px) scale(0.75); }
@ -906,8 +897,6 @@ blockquote p
from { transform: translate(0,-50px) scale(0.75); }
to {}
}
/*.top img { min-height: 50px !important; }
.top h1 { display: none; }*/
.right_most { margin-right: 15%; }
#back
@ -922,7 +911,6 @@ blockquote p
border-top: none;
padding: 0px;
padding-top: 0px;
/*padding-bottom: 50px;*/
padding-bottom: 10px;
background-color: rgba(30,30,30,0.75);
@ -1029,12 +1017,6 @@ blockquote p
padding: 8px;
}
.nav { width: 1000px; }
.bigAvatar
{
max-height: 128px;
max-width: 128px;
}
}
@media (min-width: 1603px)
@ -1044,9 +1026,7 @@ blockquote p
width: 1548px;
margin-left: auto;
margin-right: auto;
/*background-color: rgba(60,60,60,0.75);*/
}
#main { width: 1250px; }
.forumLastposter .title { width: 280px; }
}

View File

@ -333,6 +333,9 @@ button.username
padding-bottom: 0;
width: 100%;
}
.user_content.nobuttons {
min-height: 153px;
}
.button_container {
border-top: solid 1px #eaeaea;
@ -357,8 +360,11 @@ button.username
padding-right: 5px;
}
.post_item {
.simple { background-color: white; }
.post_item:not(.simple) {
background-color: #eaeaea;
}
.post_item {
padding-top: 4px;
padding-left: 5px;
clear: both;
@ -372,6 +378,12 @@ button.username
.post_tag {
display: none;
}
.the_name {
margin-top: 3px;
text-align: center;
color: #505050;
display: block;
}
.userinfo {
background: white;
@ -383,6 +395,17 @@ button.username
top: 4px;
box-shadow:0 1px 2px rgba(0,0,0,.1);
}
.userinfo .avatar_item {
background-repeat: no-repeat, repeat-y;
background-size: 128px;
width: 128px;
height: 100%;
min-height: 128px;
border-style: solid;
border-color: #eaeaea;
border-width: 1px;
}
.content_container {
background: white;
margin-left: 137px;
@ -468,5 +491,17 @@ button.username
width: 60px;
font-size: 15px;
}
.userinfo {
width: 70px;
}
.userinfo .avatar_item {
background-size: 64px;
width: 64px;
min-height: 64px;
}
.content_container {
margin-left: 73px;
}
.container { width: 100% !important; }
}

View File

@ -4,6 +4,7 @@
"Version": "0.0.1",
"Creator": "Azareal",
"FullImage": "tempra-conflux.png",
"MobileFriendly": true,
"Templates": [
{
"Name": "topic",