More work on the Shadow theme.
Switched gopsutil with a temporary more stable fork. Ping PostgreSQL upon connecting. We need a global solution for connection drops. A connection timeout, perhaps? Added the rowmenu CSS class for styling sidebar menus. Added the real_first_child CSS class, we might be able to get around using it by redoing the <form> nesting. Added the rowlist CSS class. Added the bgavatars CSS class. Added avatars to the User Manager. Added limited responsivity to the Shadow Theme, I might have broken some things in the other themes, I'll fix that soon! A per-theme post-avatar-bg.jpg file is now used for the first topic layout rather than the global white-dot.jpg file.
This commit is contained in:
parent
d976a192fb
commit
02a0cbb6bb
10
README.md
10
README.md
|
@ -88,16 +88,18 @@ Several important features for saving memory in the templates system may have to
|
|||
|
||||
An example of running the commands directly on Windows.
|
||||
|
||||
Linux is similar, however you might need to use cd and mv a bit more like in the shell files due to the differences in go build across platforms.
|
||||
Linux is similar, however you might need to use cd and mv a bit more like in the shell files due to the differences in go build across platforms. Additionally, Linux doesn't require `StackExchange/wmi` or ``/x/sys/windows`
|
||||
|
||||
```bash
|
||||
git clone https://github.com/Azareal/Gosora
|
||||
|
||||
go get -u github.com/go-sql-driver/mysql
|
||||
|
||||
go get -u golang.org/x/crypto/bcrypt
|
||||
|
||||
go get -u github.com/StackExchange/wmi
|
||||
|
||||
go get -u github.com/shirou/gopsutil
|
||||
go get -u github.com/Azareal/gopsutil
|
||||
|
||||
go get -u github.com/gorilla/websocket
|
||||
|
||||
|
@ -162,11 +164,11 @@ We're looking for ways to clean-up the plugin system so that all of them (except
|
|||
|
||||
* golang.org/x/crypto/bcrypt For hashing passwords.
|
||||
|
||||
* github.com/shirou/gopsutil For pulling information on CPU and memory usage.
|
||||
* github.com/Azareal/gopsutil For pulling information on CPU and memory usage. I've temporarily forked this, as we were having stability issues with the latest build.
|
||||
|
||||
* github.com/StackExchange/wmi Dependency for gopsutil on Windows.
|
||||
|
||||
* golang.org/x/sys/windows Also a dependency for gopsutil on Windows.
|
||||
* golang.org/x/sys/windows Also a dependency for gopsutil on Windows. This isn't needed at the moment, as I've rolled things back to an older more stable build.
|
||||
|
||||
* github.com/gorilla/websocket Needed for Gosora's Optional WebSockets Module.
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ go get -u github.com/lib/pq
|
|||
echo "Installing bcrypt"
|
||||
go get -u golang.org/x/crypto/bcrypt
|
||||
echo "Installing gopsutil"
|
||||
go get -u github.com/shirou/gopsutil
|
||||
go get -u github.com/Azareal/gopsutil
|
||||
echo "Installing Gorilla WebSockets"
|
||||
go get -u github.com/gorilla/websocket
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ if %errorlevel% neq 0 (
|
|||
exit /b %errorlevel%
|
||||
)
|
||||
echo Installing the gopsutil library
|
||||
go get -u github.com/shirou/gopsutil
|
||||
go get -u github.com/Azareal/gopsutil
|
||||
if %errorlevel% neq 0 (
|
||||
pause
|
||||
exit /b %errorlevel%
|
||||
|
|
|
@ -71,7 +71,9 @@ CREATE TABLE `replies`(
|
|||
`createdAt` datetime not null,
|
||||
`createdBy` int not null,
|
||||
`lastEdit` int not null,
|
||||
`lastEditBy` int not null,
|
||||
`lastEditBy` int not null, /* Do we need this? */
|
||||
/*`editIndex` int not null,*/ /* For append edits, e.g. auto-merges? Is this enough for this feature? */
|
||||
`lastUpdated` datetime not null,
|
||||
`ipaddress` varchar(200) DEFAULT '0.0.0.0.0' not null,
|
||||
`likeCount` int DEFAULT 0 not null,
|
||||
`words` int DEFAULT 1 not null,
|
||||
|
|
6
pgsql.go
6
pgsql.go
|
@ -29,6 +29,12 @@ func _init_database() (err error) {
|
|||
return err
|
||||
}
|
||||
|
||||
// Make sure that the connection is alive
|
||||
err = db.Ping()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Fetch the database version
|
||||
db.QueryRow("SELECT VERSION()").Scan(&db_version)
|
||||
|
||||
|
|
|
@ -190,7 +190,7 @@ func install_socialgroups() error {
|
|||
qgen.DB_Table_Column{"joinable","smallint",0,false,false,"0"},
|
||||
qgen.DB_Table_Column{"owner","int",0,false,false,""},
|
||||
qgen.DB_Table_Column{"memberCount","int",0,false,false,""},
|
||||
qgen.DB_Table_Column{"mainForum","int",0,false,false,"0"}, // The board the user lands on when they click ona group, we'll make it possible for group admins to change what users land on
|
||||
qgen.DB_Table_Column{"mainForum","int",0,false,false,"0"}, // The board the user lands on when they click on a group, we'll make it possible for group admins to change what users land on
|
||||
//qgen.DB_Table_Column{"boards","varchar",255,false,false,""}, // Cap the max number of boards at 8 to avoid overflowing the confines of a 64-bit integer?
|
||||
qgen.DB_Table_Column{"backdrop","varchar",200,false,false,""}, // File extension for the uploaded file, or an external link
|
||||
qgen.DB_Table_Column{"createdAt","createdAt",0,false,false,""},
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 538 B |
Binary file not shown.
After Width: | Height: | Size: 539 B |
Binary file not shown.
After Width: | Height: | Size: 539 B |
236
template_list.go
236
template_list.go
|
@ -37,6 +37,12 @@ var menu_1 []byte = []byte(`</a></li>
|
|||
<li class="menu_left menu_forums"><a href="/forums/">Forums</a></li>
|
||||
<li class="menu_left menu_topics"><a href="/">Topics</a></li>
|
||||
<li class="menu_left menu_create_topic"><a href="/topics/create/">Create Topic</a></li>
|
||||
<li id="general_alerts" class="menu_right menu_alerts">
|
||||
<div class="alert_bell"></div>
|
||||
<div class="alert_counter"></div>
|
||||
<div class="alert_aftercounter"></div>
|
||||
<div class="alertList"></div>
|
||||
</li>
|
||||
`)
|
||||
var menu_2 []byte = []byte(`
|
||||
<li class="menu_left menu_account"><a href="/user/edit/critical/">Account</a></li>
|
||||
|
@ -54,12 +60,6 @@ var menu_8 []byte = []byte(`
|
|||
<li class="menu_left menu_login"><a href="/accounts/login/">Login</a></li>
|
||||
`)
|
||||
var menu_9 []byte = []byte(`
|
||||
<li id="general_alerts" class="menu_right menu_alerts">
|
||||
<div class="alert_bell"></div>
|
||||
<div class="alert_counter"></div>
|
||||
<div class="alert_aftercounter"></div>
|
||||
<div class="alertList"></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -73,155 +73,158 @@ var header_11 []byte = []byte(`>
|
|||
`)
|
||||
var header_12 []byte = []byte(`<div class="alert">`)
|
||||
var header_13 []byte = []byte(`</div>`)
|
||||
var topic_0 []byte = []byte(`<div id="prevFloat" class="prev_button"><a class="prev_link" href="/topic/`)
|
||||
var topic_1 []byte = []byte(`?page=`)
|
||||
var topic_2 []byte = []byte(`"><</a></div>`)
|
||||
var topic_3 []byte = []byte(`<link rel="prerender" href="/topic/`)
|
||||
var topic_4 []byte = []byte(`?page=`)
|
||||
var topic_5 []byte = []byte(`" />
|
||||
var topic_0 []byte = []byte(`
|
||||
|
||||
<form id="edit_topic_form" action='/topic/edit/submit/`)
|
||||
var topic_1 []byte = []byte(`' method="post" />
|
||||
`)
|
||||
var topic_2 []byte = []byte(`<div id="prevFloat" class="prev_button"><a class="prev_link" href="/topic/`)
|
||||
var topic_3 []byte = []byte(`?page=`)
|
||||
var topic_4 []byte = []byte(`"><</a></div>`)
|
||||
var topic_5 []byte = []byte(`<link rel="prerender" href="/topic/`)
|
||||
var topic_6 []byte = []byte(`?page=`)
|
||||
var topic_7 []byte = []byte(`" />
|
||||
<div id="nextFloat" class="next_button">
|
||||
<a class="next_link" href="/topic/`)
|
||||
var topic_6 []byte = []byte(`?page=`)
|
||||
var topic_7 []byte = []byte(`">></a>
|
||||
var topic_8 []byte = []byte(`?page=`)
|
||||
var topic_9 []byte = []byte(`">></a>
|
||||
</div>`)
|
||||
var topic_8 []byte = []byte(`
|
||||
var topic_10 []byte = []byte(`
|
||||
|
||||
<div class="rowblock rowhead topic_block">
|
||||
<form action='/topic/edit/submit/`)
|
||||
var topic_9 []byte = []byte(`' method="post">
|
||||
<div class="rowitem topic_item`)
|
||||
var topic_10 []byte = []byte(` topic_sticky_head`)
|
||||
var topic_11 []byte = []byte(` topic_closed_head`)
|
||||
var topic_12 []byte = []byte(`">
|
||||
var topic_11 []byte = []byte(` topic_sticky_head`)
|
||||
var topic_12 []byte = []byte(` topic_closed_head`)
|
||||
var topic_13 []byte = []byte(`">
|
||||
<a class='topic_name hide_on_edit'>`)
|
||||
var topic_13 []byte = []byte(`</a>
|
||||
var topic_14 []byte = []byte(`</a>
|
||||
`)
|
||||
var topic_14 []byte = []byte(`<span class='username hide_on_micro topic_status_e topic_status_closed hide_on_edit' title='Status: Closed' style="font-weight:normal;float: right;position:relative;top:-5px;">🔒︎</span>`)
|
||||
var topic_15 []byte = []byte(`
|
||||
<input class='show_on_edit topic_name_input' name="topic_name" value='`)
|
||||
var topic_16 []byte = []byte(`' type="text" />
|
||||
var topic_15 []byte = []byte(`<span class='username hide_on_micro topic_status_e topic_status_closed hide_on_edit' title='Status: Closed' style="font-weight:normal;float: right;position:relative;top:-5px;">🔒︎</span>`)
|
||||
var topic_16 []byte = []byte(`
|
||||
<input form='edit_topic_form' class='show_on_edit topic_name_input' name="topic_name" value='`)
|
||||
var topic_17 []byte = []byte(`' type="text" />
|
||||
`)
|
||||
var topic_17 []byte = []byte(`<select name="topic_status" class='show_on_edit topic_status_input' style='float: right;'>
|
||||
var topic_18 []byte = []byte(`<select form='edit_topic_form' name="topic_status" class='show_on_edit topic_status_input' style='float: right;'>
|
||||
<option>open</option>
|
||||
<option>closed</option>
|
||||
</select>`)
|
||||
var topic_18 []byte = []byte(`
|
||||
<button name="topic-button" class="formbutton show_on_edit submit_edit">Update</button>
|
||||
`)
|
||||
var topic_19 []byte = []byte(`
|
||||
<button form='edit_topic_form' name="topic-button" class="formbutton show_on_edit submit_edit">Update</button>
|
||||
`)
|
||||
var topic_20 []byte = []byte(`
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="rowblock post_container top_post">
|
||||
<div class="rowitem passive editable_parent post_item `)
|
||||
var topic_20 []byte = []byte(`" style="`)
|
||||
var topic_21 []byte = []byte(`background-image:url(`)
|
||||
var topic_22 []byte = []byte(`), url(/static/white-dot.jpg);background-position: 0px `)
|
||||
var topic_23 []byte = []byte(`-1`)
|
||||
var topic_24 []byte = []byte(`0px;background-repeat:no-repeat, repeat-y;`)
|
||||
var topic_25 []byte = []byte(`">
|
||||
var topic_21 []byte = []byte(`" style="`)
|
||||
var topic_22 []byte = []byte(`background-image:url(`)
|
||||
var topic_23 []byte = []byte(`), url(/static/post-avatar-bg.jpg);background-position: 0px `)
|
||||
var topic_24 []byte = []byte(`-1`)
|
||||
var topic_25 []byte = []byte(`0px;background-repeat:no-repeat, repeat-y;`)
|
||||
var topic_26 []byte = []byte(`">
|
||||
<p class="hide_on_edit topic_content user_content" style="margin:0;padding:0;">`)
|
||||
var topic_26 []byte = []byte(`</p>
|
||||
var topic_27 []byte = []byte(`</p>
|
||||
<textarea name="topic_content" class="show_on_edit topic_content_input">`)
|
||||
var topic_27 []byte = []byte(`</textarea>
|
||||
var topic_28 []byte = []byte(`</textarea>
|
||||
|
||||
<span class="controls">
|
||||
|
||||
<a href="/user/`)
|
||||
var topic_28 []byte = []byte(`.`)
|
||||
var topic_29 []byte = []byte(`" class="username real_username">`)
|
||||
var topic_30 []byte = []byte(`</a>
|
||||
var topic_29 []byte = []byte(`.`)
|
||||
var topic_30 []byte = []byte(`" class="username real_username">`)
|
||||
var topic_31 []byte = []byte(`</a>
|
||||
`)
|
||||
var topic_31 []byte = []byte(`<a href="/topic/like/submit/`)
|
||||
var topic_32 []byte = []byte(`" class="mod_button" title="Love it" style="color:#202020;">
|
||||
var topic_32 []byte = []byte(`<a href="/topic/like/submit/`)
|
||||
var topic_33 []byte = []byte(`" class="mod_button" title="Love it" style="color:#202020;">
|
||||
<button class="username like_label" style="`)
|
||||
var topic_33 []byte = []byte(`background-color:/*#eaffea*/#D6FFD6;`)
|
||||
var topic_34 []byte = []byte(`"></button></a>`)
|
||||
var topic_35 []byte = []byte(`<a href='/topic/edit/`)
|
||||
var topic_36 []byte = []byte(`' class="mod_button open_edit" style="font-weight:normal;" title="Edit Topic"><button class="username edit_label"></button></a>`)
|
||||
var topic_37 []byte = []byte(`<a href='/topic/delete/submit/`)
|
||||
var topic_38 []byte = []byte(`' class="mod_button" style="font-weight:normal;" title="Delete Topic"><button class="username trash_label"></button></a>`)
|
||||
var topic_39 []byte = []byte(`<a class="mod_button" href='/topic/unstick/submit/`)
|
||||
var topic_40 []byte = []byte(`' style="font-weight:normal;" title="Unpin Topic"><button class="username unpin_label"></button></a>`)
|
||||
var topic_41 []byte = []byte(`<a href='/topic/stick/submit/`)
|
||||
var topic_42 []byte = []byte(`' class="mod_button" style="font-weight:normal;" title="Pin Topic"><button class="username pin_label"></button></a>`)
|
||||
var topic_43 []byte = []byte(`
|
||||
var topic_34 []byte = []byte(`background-color:/*#eaffea*/#D6FFD6;`)
|
||||
var topic_35 []byte = []byte(`"></button></a>`)
|
||||
var topic_36 []byte = []byte(`<a href='/topic/edit/`)
|
||||
var topic_37 []byte = []byte(`' class="mod_button open_edit" style="font-weight:normal;" title="Edit Topic"><button class="username edit_label"></button></a>`)
|
||||
var topic_38 []byte = []byte(`<a href='/topic/delete/submit/`)
|
||||
var topic_39 []byte = []byte(`' class="mod_button" style="font-weight:normal;" title="Delete Topic"><button class="username trash_label"></button></a>`)
|
||||
var topic_40 []byte = []byte(`<a class="mod_button" href='/topic/unstick/submit/`)
|
||||
var topic_41 []byte = []byte(`' style="font-weight:normal;" title="Unpin Topic"><button class="username unpin_label"></button></a>`)
|
||||
var topic_42 []byte = []byte(`<a href='/topic/stick/submit/`)
|
||||
var topic_43 []byte = []byte(`' class="mod_button" style="font-weight:normal;" title="Pin Topic"><button class="username pin_label"></button></a>`)
|
||||
var topic_44 []byte = []byte(`
|
||||
<a class="mod_button" href="/report/submit/`)
|
||||
var topic_44 []byte = []byte(`?session=`)
|
||||
var topic_45 []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_45 []byte = []byte(`?session=`)
|
||||
var topic_46 []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_46 []byte = []byte(`<a class="username hide_on_micro like_count">`)
|
||||
var topic_47 []byte = []byte(`</a><a class="username hide_on_micro like_count_label" title="Like Count"></a>`)
|
||||
var topic_48 []byte = []byte(`<a class="username hide_on_micro user_tag">`)
|
||||
var topic_49 []byte = []byte(`</a>`)
|
||||
var topic_50 []byte = []byte(`<a class="username hide_on_micro level">`)
|
||||
var topic_51 []byte = []byte(`</a><a class="username hide_on_micro level_label" style="float:right;" title="Level"></a>`)
|
||||
var topic_52 []byte = []byte(`
|
||||
var topic_47 []byte = []byte(`<a class="username hide_on_micro like_count">`)
|
||||
var topic_48 []byte = []byte(`</a><a class="username hide_on_micro like_count_label" title="Like Count"></a>`)
|
||||
var topic_49 []byte = []byte(`<a class="username hide_on_micro user_tag">`)
|
||||
var topic_50 []byte = []byte(`</a>`)
|
||||
var topic_51 []byte = []byte(`<a class="username hide_on_micro level">`)
|
||||
var topic_52 []byte = []byte(`</a><a class="username hide_on_micro level_label" style="float:right;" title="Level"></a>`)
|
||||
var topic_53 []byte = []byte(`
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="rowblock post_container" style="overflow: hidden;">`)
|
||||
var topic_53 []byte = []byte(`
|
||||
var topic_54 []byte = []byte(`
|
||||
<div class="rowitem passive deletable_block editable_parent post_item action_item">
|
||||
<span class="action_icon" style="font-size: 18px;padding-right: 5px;">`)
|
||||
var topic_54 []byte = []byte(`</span>
|
||||
<span>`)
|
||||
var topic_55 []byte = []byte(`</span>
|
||||
<span>`)
|
||||
var topic_56 []byte = []byte(`</span>
|
||||
</div>
|
||||
`)
|
||||
var topic_56 []byte = []byte(`
|
||||
var topic_57 []byte = []byte(`
|
||||
<div class="rowitem passive deletable_block editable_parent post_item `)
|
||||
var topic_57 []byte = []byte(`" style="`)
|
||||
var topic_58 []byte = []byte(`background-image:url(`)
|
||||
var topic_59 []byte = []byte(`), url(/static/white-dot.jpg);background-position: 0px `)
|
||||
var topic_60 []byte = []byte(`-1`)
|
||||
var topic_61 []byte = []byte(`0px;background-repeat:no-repeat, repeat-y;`)
|
||||
var topic_62 []byte = []byte(`">
|
||||
var topic_58 []byte = []byte(`" style="`)
|
||||
var topic_59 []byte = []byte(`background-image:url(`)
|
||||
var topic_60 []byte = []byte(`), url(/static/post-avatar-bg.jpg);background-position: 0px `)
|
||||
var topic_61 []byte = []byte(`-1`)
|
||||
var topic_62 []byte = []byte(`0px;background-repeat:no-repeat, repeat-y;`)
|
||||
var topic_63 []byte = []byte(`">
|
||||
<p class="editable_block user_content" style="margin:0;padding:0;">`)
|
||||
var topic_63 []byte = []byte(`</p>
|
||||
var topic_64 []byte = []byte(`</p>
|
||||
|
||||
<span class="controls">
|
||||
|
||||
<a href="/user/`)
|
||||
var topic_64 []byte = []byte(`.`)
|
||||
var topic_65 []byte = []byte(`" class="username real_username">`)
|
||||
var topic_66 []byte = []byte(`</a>
|
||||
var topic_65 []byte = []byte(`.`)
|
||||
var topic_66 []byte = []byte(`" class="username real_username">`)
|
||||
var topic_67 []byte = []byte(`</a>
|
||||
`)
|
||||
var topic_67 []byte = []byte(`<a href="/reply/like/submit/`)
|
||||
var topic_68 []byte = []byte(`" class="mod_button" title="Love it" style="color:#202020;"><button class="username like_label" style="`)
|
||||
var topic_69 []byte = []byte(`background-color:/*#eaffea*/#D6FFD6;`)
|
||||
var topic_70 []byte = []byte(`"></button></a>`)
|
||||
var topic_71 []byte = []byte(`<a href="/reply/edit/submit/`)
|
||||
var topic_72 []byte = []byte(`" class="mod_button" title="Edit Reply"><button class="username edit_item edit_label"></button></a>`)
|
||||
var topic_73 []byte = []byte(`<a href="/reply/delete/submit/`)
|
||||
var topic_74 []byte = []byte(`" class="mod_button" title="Delete Reply"><button class="username delete_item trash_label"></button></a>`)
|
||||
var topic_75 []byte = []byte(`
|
||||
var topic_68 []byte = []byte(`<a href="/reply/like/submit/`)
|
||||
var topic_69 []byte = []byte(`" class="mod_button" title="Love it" style="color:#202020;"><button class="username like_label" style="`)
|
||||
var topic_70 []byte = []byte(`background-color:/*#eaffea*/#D6FFD6;`)
|
||||
var topic_71 []byte = []byte(`"></button></a>`)
|
||||
var topic_72 []byte = []byte(`<a href="/reply/edit/submit/`)
|
||||
var topic_73 []byte = []byte(`" class="mod_button" title="Edit Reply"><button class="username edit_item edit_label"></button></a>`)
|
||||
var topic_74 []byte = []byte(`<a href="/reply/delete/submit/`)
|
||||
var topic_75 []byte = []byte(`" class="mod_button" title="Delete Reply"><button class="username delete_item trash_label"></button></a>`)
|
||||
var topic_76 []byte = []byte(`
|
||||
<a class="mod_button" href="/report/submit/`)
|
||||
var topic_76 []byte = []byte(`?session=`)
|
||||
var topic_77 []byte = []byte(`&type=reply" class="mod_button report_item" title="Flag Reply"><button class="username report_item flag_label"></button></a>
|
||||
var topic_77 []byte = []byte(`?session=`)
|
||||
var topic_78 []byte = []byte(`&type=reply" class="mod_button report_item" title="Flag Reply"><button class="username report_item flag_label"></button></a>
|
||||
|
||||
`)
|
||||
var topic_78 []byte = []byte(`<a class="username hide_on_micro like_count">`)
|
||||
var topic_79 []byte = []byte(`</a><a class="username hide_on_micro like_count_label" title="Like Count"></a>`)
|
||||
var topic_80 []byte = []byte(`<a class="username hide_on_micro user_tag">`)
|
||||
var topic_81 []byte = []byte(`</a>`)
|
||||
var topic_82 []byte = []byte(`<a class="username hide_on_micro level">`)
|
||||
var topic_83 []byte = []byte(`</a><a class="username hide_on_micro level_label" style="float:right;" title="Level">`)
|
||||
var topic_84 []byte = []byte(`</a>
|
||||
var topic_79 []byte = []byte(`<a class="username hide_on_micro like_count">`)
|
||||
var topic_80 []byte = []byte(`</a><a class="username hide_on_micro like_count_label" title="Like Count"></a>`)
|
||||
var topic_81 []byte = []byte(`<a class="username hide_on_micro user_tag">`)
|
||||
var topic_82 []byte = []byte(`</a>`)
|
||||
var topic_83 []byte = []byte(`<a class="username hide_on_micro level">`)
|
||||
var topic_84 []byte = []byte(`</a><a class="username hide_on_micro level_label" style="float:right;" title="Level">`)
|
||||
var topic_85 []byte = []byte(`</a>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
`)
|
||||
var topic_85 []byte = []byte(`</div>
|
||||
var topic_86 []byte = []byte(`</div>
|
||||
|
||||
`)
|
||||
var topic_86 []byte = []byte(`
|
||||
var topic_87 []byte = []byte(`
|
||||
<div class="rowblock topic_reply_form">
|
||||
<form action="/reply/create/" method="post">
|
||||
<input name="tid" value='`)
|
||||
var topic_87 []byte = []byte(`' type="hidden" />
|
||||
var topic_88 []byte = []byte(`' type="hidden" />
|
||||
<div class="formrow real_first_child">
|
||||
<div class="formitem"><textarea name="reply-content" placeholder="Insert reply here"></textarea></div>
|
||||
</div>
|
||||
|
@ -410,13 +413,17 @@ var topic_alt_89 []byte = []byte(`' type="hidden" />
|
|||
`)
|
||||
var profile_0 []byte = []byte(`
|
||||
|
||||
<div id="profile_left_pane" class="colblock_left" style="max-width: 220px;">
|
||||
<div class="rowitem" style="padding: 0;">
|
||||
<div id="profile_left_lane" class="colstack_left">
|
||||
<!--<div class="colstack_item colstack_head rowhead">
|
||||
<div class="rowitem"><a>Profile</a></div>
|
||||
</div>-->
|
||||
<div id="profile_left_pane" class="rowmenu">
|
||||
<div class="rowitem avatarRow" style="padding: 0;">
|
||||
<img src="`)
|
||||
var profile_1 []byte = []byte(`" style="max-width: 100%;margin: 0;display: block;" />
|
||||
var profile_1 []byte = []byte(`" class="avatar" />
|
||||
</div>
|
||||
<div class="rowitem">
|
||||
<span style="font-size: 18px;">`)
|
||||
<span class="profileName">`)
|
||||
var profile_2 []byte = []byte(`</span>`)
|
||||
var profile_3 []byte = []byte(`<span class="username" style="float: right;font-weight: normal;">`)
|
||||
var profile_4 []byte = []byte(`</span>`)
|
||||
|
@ -443,14 +450,16 @@ var profile_14 []byte = []byte(`
|
|||
var profile_15 []byte = []byte(`?session=`)
|
||||
var profile_16 []byte = []byte(`&type=user" class="profile_menu_item report_item">Report</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="colblock_right rowhead" style="width: calc(95% - 210px);">
|
||||
<div id="profile_right_lane" class="colstack_right">
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem"><a>Comments</a></div>
|
||||
</div>
|
||||
<div id="profile_comments" class="colblock_right" style="overflow: hidden;border-top: none;width:calc(95% - 210px);">`)
|
||||
</div>
|
||||
<div id="profile_comments" class="colstack_item" style="overflow: hidden;border-top: none;">`)
|
||||
var profile_17 []byte = []byte(`
|
||||
<div class="rowitem passive deletable_block editable_parent simple `)
|
||||
<div class="rowitem passive deletable_block editable_parent simple `)
|
||||
var profile_18 []byte = []byte(`" style="`)
|
||||
var profile_19 []byte = []byte(`background-image: url(`)
|
||||
var profile_20 []byte = []byte(`), url(/static/white-dot.jpg);background-position: 0px `)
|
||||
|
@ -477,26 +486,27 @@ var profile_32 []byte = []byte(`?session=`)
|
|||
var profile_33 []byte = []byte(`&type=user-reply"><button class="username report_item flag_label"></button></a>
|
||||
|
||||
`)
|
||||
var profile_34 []byte = []byte(`<a class="username hide_on_mobile" style="float: right;">`)
|
||||
var profile_34 []byte = []byte(`<a class="username hide_on_mobile user_tag" style="float: right;">`)
|
||||
var profile_35 []byte = []byte(`</a>`)
|
||||
var profile_36 []byte = []byte(`
|
||||
</div>
|
||||
`)
|
||||
`)
|
||||
var profile_37 []byte = []byte(`</div>
|
||||
|
||||
<div class="colblock_right" style="border-top: none;width: calc(95% - 210px);">
|
||||
`)
|
||||
var profile_38 []byte = []byte(`
|
||||
<form action="/profile/reply/create/" method="post">
|
||||
<form action="/profile/reply/create/" method="post">
|
||||
<input name="uid" value='`)
|
||||
var profile_39 []byte = []byte(`' type="hidden" />
|
||||
<div class="colstack_item topic_reply_form" style="border-top: none;">
|
||||
<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>
|
||||
`)
|
||||
var profile_40 []byte = []byte(`
|
||||
</div>
|
||||
|
@ -607,9 +617,9 @@ var forum_11 []byte = []byte(`</a>
|
|||
`)
|
||||
var forum_12 []byte = []byte(`
|
||||
<div class="opt create_topic_opt" title="Create Topic"><a href="/topics/create/`)
|
||||
var forum_13 []byte = []byte(`">🖊︎</a></div>
|
||||
var forum_13 []byte = []byte(`"></a></div>
|
||||
`)
|
||||
var forum_14 []byte = []byte(`<div class="opt locked_opt" title="You don't have the permissions needed to create a topic">🔒︎</div>`)
|
||||
var forum_14 []byte = []byte(`<div class="opt locked_opt" title="You don't have the permissions needed to create a topic"><a></a></div>`)
|
||||
var forum_15 []byte = []byte(`
|
||||
<div style="clear: both;"></div>
|
||||
`)
|
||||
|
|
|
@ -66,199 +66,200 @@ w.Write([]byte(item))
|
|||
w.Write(header_13)
|
||||
}
|
||||
}
|
||||
if tmpl_topic_vars.Page > 1 {
|
||||
w.Write(topic_0)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||
w.Write(topic_1)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Page - 1)))
|
||||
if tmpl_topic_vars.Page > 1 {
|
||||
w.Write(topic_2)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||
w.Write(topic_3)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Page - 1)))
|
||||
w.Write(topic_4)
|
||||
}
|
||||
if tmpl_topic_vars.LastPage != tmpl_topic_vars.Page {
|
||||
w.Write(topic_3)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||
w.Write(topic_4)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Page + 1)))
|
||||
w.Write(topic_5)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||
w.Write(topic_6)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Page + 1)))
|
||||
w.Write(topic_7)
|
||||
}
|
||||
w.Write(topic_8)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||
w.Write(topic_8)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Page + 1)))
|
||||
w.Write(topic_9)
|
||||
if tmpl_topic_vars.Topic.Sticky {
|
||||
}
|
||||
w.Write(topic_10)
|
||||
if tmpl_topic_vars.Topic.Sticky {
|
||||
w.Write(topic_11)
|
||||
} else {
|
||||
if tmpl_topic_vars.Topic.Is_Closed {
|
||||
w.Write(topic_11)
|
||||
}
|
||||
}
|
||||
w.Write(topic_12)
|
||||
w.Write([]byte(tmpl_topic_vars.Topic.Title))
|
||||
}
|
||||
}
|
||||
w.Write(topic_13)
|
||||
if tmpl_topic_vars.Topic.Is_Closed {
|
||||
w.Write([]byte(tmpl_topic_vars.Topic.Title))
|
||||
w.Write(topic_14)
|
||||
if tmpl_topic_vars.Topic.Is_Closed {
|
||||
w.Write(topic_15)
|
||||
}
|
||||
if tmpl_topic_vars.CurrentUser.Perms.EditTopic {
|
||||
w.Write(topic_15)
|
||||
w.Write([]byte(tmpl_topic_vars.Topic.Title))
|
||||
w.Write(topic_16)
|
||||
if tmpl_topic_vars.CurrentUser.Perms.CloseTopic {
|
||||
w.Write([]byte(tmpl_topic_vars.Topic.Title))
|
||||
w.Write(topic_17)
|
||||
}
|
||||
if tmpl_topic_vars.CurrentUser.Perms.CloseTopic {
|
||||
w.Write(topic_18)
|
||||
}
|
||||
w.Write(topic_19)
|
||||
w.Write([]byte(tmpl_topic_vars.Topic.ClassName))
|
||||
w.Write(topic_20)
|
||||
if tmpl_topic_vars.Topic.Avatar != "" {
|
||||
w.Write(topic_21)
|
||||
w.Write([]byte(tmpl_topic_vars.Topic.Avatar))
|
||||
w.Write(topic_22)
|
||||
if tmpl_topic_vars.Topic.ContentLines <= 5 {
|
||||
w.Write(topic_23)
|
||||
}
|
||||
w.Write(topic_20)
|
||||
w.Write([]byte(tmpl_topic_vars.Topic.ClassName))
|
||||
w.Write(topic_21)
|
||||
if tmpl_topic_vars.Topic.Avatar != "" {
|
||||
w.Write(topic_22)
|
||||
w.Write([]byte(tmpl_topic_vars.Topic.Avatar))
|
||||
w.Write(topic_23)
|
||||
if tmpl_topic_vars.Topic.ContentLines <= 5 {
|
||||
w.Write(topic_24)
|
||||
}
|
||||
w.Write(topic_25)
|
||||
w.Write([]byte(tmpl_topic_vars.Topic.Content))
|
||||
}
|
||||
w.Write(topic_26)
|
||||
w.Write([]byte(tmpl_topic_vars.Topic.Content))
|
||||
w.Write(topic_27)
|
||||
w.Write([]byte(tmpl_topic_vars.Topic.UserSlug))
|
||||
w.Write([]byte(tmpl_topic_vars.Topic.Content))
|
||||
w.Write(topic_28)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.CreatedBy)))
|
||||
w.Write([]byte(tmpl_topic_vars.Topic.UserSlug))
|
||||
w.Write(topic_29)
|
||||
w.Write([]byte(tmpl_topic_vars.Topic.CreatedByName))
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.CreatedBy)))
|
||||
w.Write(topic_30)
|
||||
if tmpl_topic_vars.CurrentUser.Perms.LikeItem {
|
||||
w.Write([]byte(tmpl_topic_vars.Topic.CreatedByName))
|
||||
w.Write(topic_31)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||
if tmpl_topic_vars.CurrentUser.Perms.LikeItem {
|
||||
w.Write(topic_32)
|
||||
if tmpl_topic_vars.Topic.Liked {
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||
w.Write(topic_33)
|
||||
}
|
||||
if tmpl_topic_vars.Topic.Liked {
|
||||
w.Write(topic_34)
|
||||
}
|
||||
if tmpl_topic_vars.CurrentUser.Perms.EditTopic {
|
||||
w.Write(topic_35)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||
}
|
||||
if tmpl_topic_vars.CurrentUser.Perms.EditTopic {
|
||||
w.Write(topic_36)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||
w.Write(topic_37)
|
||||
}
|
||||
if tmpl_topic_vars.CurrentUser.Perms.DeleteTopic {
|
||||
w.Write(topic_37)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||
w.Write(topic_38)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||
w.Write(topic_39)
|
||||
}
|
||||
if tmpl_topic_vars.CurrentUser.Perms.PinTopic {
|
||||
if tmpl_topic_vars.Topic.Sticky {
|
||||
w.Write(topic_39)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||
w.Write(topic_40)
|
||||
} else {
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||
w.Write(topic_41)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||
} else {
|
||||
w.Write(topic_42)
|
||||
}
|
||||
}
|
||||
w.Write(topic_43)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||
w.Write(topic_43)
|
||||
}
|
||||
}
|
||||
w.Write(topic_44)
|
||||
w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||
w.Write(topic_45)
|
||||
if tmpl_topic_vars.Topic.LikeCount > 0 {
|
||||
w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
|
||||
w.Write(topic_46)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.LikeCount)))
|
||||
if tmpl_topic_vars.Topic.LikeCount > 0 {
|
||||
w.Write(topic_47)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.LikeCount)))
|
||||
w.Write(topic_48)
|
||||
}
|
||||
if tmpl_topic_vars.Topic.Tag != "" {
|
||||
w.Write(topic_48)
|
||||
w.Write([]byte(tmpl_topic_vars.Topic.Tag))
|
||||
w.Write(topic_49)
|
||||
} else {
|
||||
w.Write([]byte(tmpl_topic_vars.Topic.Tag))
|
||||
w.Write(topic_50)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.Level)))
|
||||
} else {
|
||||
w.Write(topic_51)
|
||||
}
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.Level)))
|
||||
w.Write(topic_52)
|
||||
}
|
||||
w.Write(topic_53)
|
||||
if len(tmpl_topic_vars.ItemList) != 0 {
|
||||
for _, item := range tmpl_topic_vars.ItemList {
|
||||
if item.ActionType != "" {
|
||||
w.Write(topic_53)
|
||||
w.Write([]byte(item.ActionIcon))
|
||||
w.Write(topic_54)
|
||||
w.Write([]byte(item.ActionType))
|
||||
w.Write([]byte(item.ActionIcon))
|
||||
w.Write(topic_55)
|
||||
} else {
|
||||
w.Write([]byte(item.ActionType))
|
||||
w.Write(topic_56)
|
||||
w.Write([]byte(item.ClassName))
|
||||
} else {
|
||||
w.Write(topic_57)
|
||||
if item.Avatar != "" {
|
||||
w.Write([]byte(item.ClassName))
|
||||
w.Write(topic_58)
|
||||
w.Write([]byte(item.Avatar))
|
||||
if item.Avatar != "" {
|
||||
w.Write(topic_59)
|
||||
if item.ContentLines <= 5 {
|
||||
w.Write([]byte(item.Avatar))
|
||||
w.Write(topic_60)
|
||||
}
|
||||
if item.ContentLines <= 5 {
|
||||
w.Write(topic_61)
|
||||
}
|
||||
w.Write(topic_62)
|
||||
w.Write([]byte(item.ContentHtml))
|
||||
w.Write(topic_63)
|
||||
w.Write([]byte(item.UserSlug))
|
||||
w.Write(topic_64)
|
||||
w.Write([]byte(strconv.Itoa(item.CreatedBy)))
|
||||
w.Write(topic_65)
|
||||
w.Write([]byte(item.CreatedByName))
|
||||
w.Write(topic_66)
|
||||
if tmpl_topic_vars.CurrentUser.Perms.LikeItem {
|
||||
w.Write(topic_67)
|
||||
w.Write([]byte(strconv.Itoa(item.ID)))
|
||||
w.Write(topic_68)
|
||||
if item.Liked {
|
||||
w.Write(topic_69)
|
||||
}
|
||||
w.Write(topic_63)
|
||||
w.Write([]byte(item.ContentHtml))
|
||||
w.Write(topic_64)
|
||||
w.Write([]byte(item.UserSlug))
|
||||
w.Write(topic_65)
|
||||
w.Write([]byte(strconv.Itoa(item.CreatedBy)))
|
||||
w.Write(topic_66)
|
||||
w.Write([]byte(item.CreatedByName))
|
||||
w.Write(topic_67)
|
||||
if tmpl_topic_vars.CurrentUser.Perms.LikeItem {
|
||||
w.Write(topic_68)
|
||||
w.Write([]byte(strconv.Itoa(item.ID)))
|
||||
w.Write(topic_69)
|
||||
if item.Liked {
|
||||
w.Write(topic_70)
|
||||
}
|
||||
if tmpl_topic_vars.CurrentUser.Perms.EditReply {
|
||||
w.Write(topic_71)
|
||||
w.Write([]byte(strconv.Itoa(item.ID)))
|
||||
}
|
||||
if tmpl_topic_vars.CurrentUser.Perms.EditReply {
|
||||
w.Write(topic_72)
|
||||
w.Write([]byte(strconv.Itoa(item.ID)))
|
||||
w.Write(topic_73)
|
||||
}
|
||||
if tmpl_topic_vars.CurrentUser.Perms.DeleteReply {
|
||||
w.Write(topic_73)
|
||||
w.Write([]byte(strconv.Itoa(item.ID)))
|
||||
w.Write(topic_74)
|
||||
}
|
||||
w.Write(topic_75)
|
||||
w.Write([]byte(strconv.Itoa(item.ID)))
|
||||
w.Write(topic_75)
|
||||
}
|
||||
w.Write(topic_76)
|
||||
w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
|
||||
w.Write([]byte(strconv.Itoa(item.ID)))
|
||||
w.Write(topic_77)
|
||||
if item.LikeCount > 0 {
|
||||
w.Write([]byte(tmpl_topic_vars.CurrentUser.Session))
|
||||
w.Write(topic_78)
|
||||
w.Write([]byte(strconv.Itoa(item.LikeCount)))
|
||||
if item.LikeCount > 0 {
|
||||
w.Write(topic_79)
|
||||
w.Write([]byte(strconv.Itoa(item.LikeCount)))
|
||||
w.Write(topic_80)
|
||||
}
|
||||
if item.Tag != "" {
|
||||
w.Write(topic_80)
|
||||
w.Write([]byte(item.Tag))
|
||||
w.Write(topic_81)
|
||||
} else {
|
||||
w.Write([]byte(item.Tag))
|
||||
w.Write(topic_82)
|
||||
w.Write([]byte(strconv.Itoa(item.Level)))
|
||||
} else {
|
||||
w.Write(topic_83)
|
||||
}
|
||||
w.Write([]byte(strconv.Itoa(item.Level)))
|
||||
w.Write(topic_84)
|
||||
}
|
||||
}
|
||||
}
|
||||
w.Write(topic_85)
|
||||
if tmpl_topic_vars.CurrentUser.Perms.CreateReply {
|
||||
}
|
||||
}
|
||||
}
|
||||
w.Write(topic_86)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||
if tmpl_topic_vars.CurrentUser.Perms.CreateReply {
|
||||
w.Write(topic_87)
|
||||
w.Write([]byte(strconv.Itoa(tmpl_topic_vars.Topic.ID)))
|
||||
w.Write(topic_88)
|
||||
}
|
||||
w.Write(footer_0)
|
||||
if tmpl_topic_vars.Header.Widgets.RightSidebar != "" {
|
||||
|
|
38
templates.go
38
templates.go
|
@ -985,6 +985,7 @@ func (c *CTemplateSet) compile_command(*parse.CommandNode) (out string) {
|
|||
return ""
|
||||
}
|
||||
|
||||
// TO-DO: Write unit tests for this
|
||||
func minify(data string) string {
|
||||
data = strings.Replace(data,"\t","",-1)
|
||||
data = strings.Replace(data,"\v","",-1)
|
||||
|
@ -993,3 +994,40 @@ func minify(data string) string {
|
|||
data = strings.Replace(data," "," ",-1)
|
||||
return data
|
||||
}
|
||||
|
||||
// TO-DO: Strip comments
|
||||
// TO-DO: Handle CSS nested in <style> tags?
|
||||
// TO-DO: Write unit tests for this
|
||||
func minify_html(data string) string {
|
||||
return minify(data)
|
||||
}
|
||||
|
||||
// TO-DO: Have static files use this
|
||||
// TO-DO: Strip comments
|
||||
// TO-DO: Convert the rgb()s to hex codes?
|
||||
// TO-DO: Write unit tests for this
|
||||
func minify_css(data string) string {
|
||||
return minify(data)
|
||||
}
|
||||
|
||||
// TO-DO: Convert this to three character hex strings whenever possible?
|
||||
// TO-DO: Write unit tests for this
|
||||
func rgb_to_hexstr(red int, green int, blue int) string {
|
||||
return strconv.FormatInt(int64(red), 16) + strconv.FormatInt(int64(green), 16) + strconv.FormatInt(int64(blue), 16)
|
||||
}
|
||||
|
||||
/*
|
||||
// TO-DO: Write unit tests for this
|
||||
func hexstr_to_rgb(hexstr string) (red int, blue int, green int, err error) {
|
||||
// Strip the # at the start
|
||||
if hexstr[0] == '#' {
|
||||
hexstr = strings.TrimPrefix(hexstr,"#")
|
||||
}
|
||||
if len(hexstr) != 3 && len(hexstr) != 6 {
|
||||
return 0, 0, 0, errors.New("Hex colour codes may only be three or six characters long")
|
||||
}
|
||||
|
||||
if len(hexstr) == 3 {
|
||||
hexstr = hexstr[0] + hexstr[0] + hexstr[1] + hexstr[1] + hexstr[2] + hexstr[2]
|
||||
}
|
||||
}*/
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<div class="colstack_item colstack_head rowhead">
|
||||
<div class="rowitem"><a>My Account</a></div>
|
||||
</div>
|
||||
<div class="colstack_item">
|
||||
<div class="colstack_item rowmenu">
|
||||
<div class="rowitem passive"><a href="/user/edit/avatar/">Change Avatar</a></div>
|
||||
<div class="rowitem passive"><a href="/user/edit/username/">Change Username</a></div>
|
||||
<div class="rowitem passive"><a href="/user/edit/critical/">Change Password</a></div>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
{{end}}
|
||||
<div class="colstack_item">
|
||||
<form action="/user/edit/avatar/submit/" method="post" enctype="multipart/form-data">
|
||||
<div class="formrow">
|
||||
<div class="formrow real_first_child">
|
||||
<div class="formitem formlabel"><a>Upload Avatar</a></div>
|
||||
<div class="formitem"><input name="account-avatar" type="file" /></div>
|
||||
</div>
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
<div class="rowitem"><a>Emails</a></div>
|
||||
</div>
|
||||
<div class="colstack_item">
|
||||
<!-- TO-DO: Do we need this inline CSS? -->
|
||||
{{range .ItemList}}
|
||||
<div class="rowitem" style="font-weight: normal;">
|
||||
<a style="text-transform: none;">{{.Email}}</a>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
</div>
|
||||
<div class="colstack_item">
|
||||
<form action="/user/edit/username/submit/" method="post">
|
||||
<div class="formrow">
|
||||
<div class="formrow real_first_child">
|
||||
<div class="formitem formlabel"><a>Current Username</a></div>
|
||||
<div class="formitem formlabel">{{.CurrentUser.Name}}</div>
|
||||
</div>
|
||||
|
@ -15,7 +15,7 @@
|
|||
<div class="formitem"><input name="account-new-username" type="text" /></div>
|
||||
</div>
|
||||
<div class="formrow">
|
||||
<div class="formitem"><button name="account-button" class="formbutton">Update</button></div>
|
||||
<div class="formitem"><button name="account-button" class="formbutton form_middle_button">Update</button></div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
</div>
|
||||
<div class="colstack_item">
|
||||
<form action="/user/edit/critical/submit/" method="post">
|
||||
<div class="formrow">
|
||||
<div class="formrow real_first_child">
|
||||
<div class="formitem formlabel"><a>Current Password</a></div>
|
||||
<div class="formitem"><input name="account-current-password" type="password" placeholder="*****" /></div>
|
||||
</div>
|
||||
|
@ -19,7 +19,7 @@
|
|||
<div class="formitem"><input name="account-confirm-password" type="password" placeholder="*****" /></div>
|
||||
</div>
|
||||
<div class="formrow">
|
||||
<div class="formitem"><button name="account-button" class="formbutton">Update</button></div>
|
||||
<div class="formitem"><button name="account-button" class="formbutton form_middle_button">Update</button></div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
</div>
|
||||
<div class="rowblock">
|
||||
<form action="/topic/create/submit/" method="post">
|
||||
<div class="formrow">
|
||||
<div class="formrow real_first_child">
|
||||
<div class="formitem formlabel"><a>Board</a></div>
|
||||
<div class="formitem"><select name="topic-board">
|
||||
{{range .ItemList}}<option {{if eq .ID $.FID}}selected{{end}} value="{{.ID}}">{{.Name}}</option>{{end}}
|
||||
|
@ -15,10 +15,11 @@
|
|||
<div class="formitem"><input name="topic-name" type="text" placeholder="Topic Name" /></div>
|
||||
</div>
|
||||
<div class="formrow">
|
||||
<div class="formitem"><textarea name="topic-content" placeholder="Insert content here"></textarea></div>
|
||||
<div class="formitem formlabel"><a>Content</a></div>
|
||||
<div class="formitem"><textarea class="large" name="topic-content" placeholder="Insert content here"></textarea></div>
|
||||
</div>
|
||||
<div class="formrow">
|
||||
<div class="formitem"><button name="topic-button" class="formbutton">Create Topic</button></div>
|
||||
<div class="formitem"><button name="topic-button" class="formbutton form_middle_button">Create Topic</button></div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
</div>
|
||||
{{if ne .CurrentUser.ID 0}}
|
||||
{{if .CurrentUser.Perms.CreateTopic}}
|
||||
<div class="opt create_topic_opt" title="Create Topic"><a href="/topics/create/{{.Forum.ID}}">🖊︎</a></div>
|
||||
{{else}}<div class="opt locked_opt" title="You don't have the permissions needed to create a topic">🔒︎</div>{{end}}
|
||||
<div class="opt create_topic_opt" title="Create Topic"><a href="/topics/create/{{.Forum.ID}}"></a></div>
|
||||
{{else}}<div class="opt locked_opt" title="You don't have the permissions needed to create a topic"><a></a></div>{{end}}
|
||||
<div style="clear: both;"></div>
|
||||
{{end}}
|
||||
</div>
|
||||
|
|
|
@ -6,6 +6,12 @@
|
|||
<li class="menu_left menu_forums"><a href="/forums/">Forums</a></li>
|
||||
<li class="menu_left menu_topics"><a href="/">Topics</a></li>
|
||||
<li class="menu_left menu_create_topic"><a href="/topics/create/">Create Topic</a></li>
|
||||
<li id="general_alerts" class="menu_right menu_alerts">
|
||||
<div class="alert_bell"></div>
|
||||
<div class="alert_counter"></div>
|
||||
<div class="alert_aftercounter"></div>
|
||||
<div class="alertList"></div>
|
||||
</li>
|
||||
{{if .CurrentUser.Loggedin}}
|
||||
<li class="menu_left menu_account"><a href="/user/edit/critical/">Account</a></li>
|
||||
<li class="menu_left menu_profile"><a href="/user/{{.CurrentUser.Slug}}.{{.CurrentUser.ID}}">Profile</a></li>
|
||||
|
@ -15,12 +21,6 @@
|
|||
<li class="menu_left menu_register"><a href="/accounts/create/">Register</a></li>
|
||||
<li class="menu_left menu_login"><a href="/accounts/login/">Login</a></li>
|
||||
{{end}}
|
||||
<li id="general_alerts" class="menu_right menu_alerts">
|
||||
<div class="alert_bell"></div>
|
||||
<div class="alert_counter"></div>
|
||||
<div class="alert_aftercounter"></div>
|
||||
<div class="alertList"></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem"><a href="/panel/logs/mod/">Logs</a></div>
|
||||
</div>
|
||||
<div class="colstack_item">
|
||||
<div class="colstack_item rowmenu">
|
||||
<div class="rowitem passive"><a href="/panel/logs/mod/">Moderation Logs</a></div>
|
||||
{{if .CurrentUser.Perms.ViewAdminLogs}}<div class="rowitem passive"><a>Administration Logs</a></div>{{end}}
|
||||
{{if .CurrentUser.Perms.ViewAdminLogs}}<div class="rowitem passive"><a>System Logs</a></div>{{end}}
|
||||
|
@ -14,7 +14,7 @@
|
|||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem"><a>Administration Logs</a></div>
|
||||
</div>
|
||||
<div id="panel_adminlogs" class="colstack_item">
|
||||
<div id="panel_adminlogs" class="colstack_item rowlist">
|
||||
{{range .Logs}}
|
||||
<div class="rowitem" style="font-weight: normal;text-transform: none;">
|
||||
<a style="font-size: 17px;">{{.Action}}</a><br />
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
var form_vars = {'perm_preset': ['can_moderate','can_post','read_only','no_access','default','custom']};
|
||||
</script>
|
||||
|
||||
</div>
|
||||
<div class="colstack_right">
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem"><a>{{.Name}} Forum</a></div>
|
||||
|
@ -41,14 +40,14 @@ var form_vars = {'perm_preset': ['can_moderate','can_post','read_only','no_acces
|
|||
</div>
|
||||
</div>
|
||||
<div class="formrow">
|
||||
<div class="formitem"><button name="panel-button" class="formbutton">Update Forum</button></div>
|
||||
<div class="formitem"><button name="panel-button" class="formbutton form_middle_button">Update Forum</button></div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem"><a>Forum Permissions</a></div>
|
||||
</div>
|
||||
<div id="forum_quick_perms" class="colstack_item">
|
||||
<div id="forum_quick_perms" class="colstack_item rowlist">
|
||||
{{range .Groups}}
|
||||
<div class="formrow">
|
||||
<div class="formitem editable_parent">
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem"><a>Forums</a></div>
|
||||
</div>
|
||||
<div id="panel_forums" class="colstack_item">
|
||||
<div id="panel_forums" class="colstack_item rowlist">
|
||||
{{range .ItemList}}
|
||||
<div class="rowitem editable_parent" style="{{if eq .ID 1}}border-bottom-style:solid;{{end}}">
|
||||
<span class="panel_floater">
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem"><a href="/panel/groups/edit/{{.ID}}">Group Editor</a></div>
|
||||
</div>
|
||||
<div class="colstack_item">
|
||||
<div class="colstack_item rowmenu">
|
||||
<div class="rowitem passive"><a href="/panel/groups/edit/{{.ID}}">General</a></div>
|
||||
<div class="rowitem passive"><a>Promotions</a></div>
|
||||
<div class="rowitem passive"><a href="/panel/groups/edit/perms/{{.ID}}">Permissions</a></div>
|
||||
|
@ -15,7 +15,7 @@
|
|||
<div class="rowitem"><a>{{.Name}} Group</a></div>
|
||||
</div>
|
||||
<form action="/panel/groups/edit/perms/submit/{{.ID}}?session={{.CurrentUser.Session}}" method="post">
|
||||
<div id="panel_group" class="colstack_item">
|
||||
<div id="panel_group" class="colstack_item rowlist">
|
||||
{{if .CurrentUser.Perms.EditGroupLocalPerms}}
|
||||
{{range .LocalPerms}}
|
||||
<div class="formrow">
|
||||
|
@ -32,13 +32,13 @@
|
|||
{{end}}
|
||||
{{end}}
|
||||
<div class="formrow">
|
||||
<div class="formitem"><button name="panel-button" class="formbutton">Update Group</button></div>
|
||||
<div class="formitem"><button name="panel-button" class="formbutton form_middle_button">Update Group</button></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem"><a>Extended Permissions</a></div>
|
||||
</div>
|
||||
<div class="colstack_item">
|
||||
<div class="colstack_item rowlist">
|
||||
{{if .CurrentUser.Perms.EditGroupGlobalPerms}}
|
||||
{{range .GlobalPerms}}
|
||||
<div class="formrow">
|
||||
|
@ -55,7 +55,7 @@
|
|||
{{end}}
|
||||
{{end}}
|
||||
<div class="formrow">
|
||||
<div class="formitem"><button name="panel-button" class="formbutton">Update Group</button></div>
|
||||
<div class="formitem"><button name="panel-button" class="formbutton form_middle_button">Update Group</button></div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem"><a href="/panel/groups/edit/{{.ID}}">Group Editor</a></div>
|
||||
</div>
|
||||
<div class="colstack_item">
|
||||
<div class="colstack_item rowmenu">
|
||||
<div class="rowitem passive"><a href="/panel/groups/edit/{{.ID}}">General</a></div>
|
||||
<div class="rowitem passive"><a>Promotions</a></div>
|
||||
<div class="rowitem passive"><a href="/panel/groups/edit/perms/{{.ID}}">Permissions</a></div>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem"><a>Groups</a></div>
|
||||
</div>
|
||||
<div id="panel_groups" class="colstack_item">
|
||||
<div id="panel_groups" class="colstack_item rowlist">
|
||||
{{range .ItemList}}
|
||||
<div class="rowitem panel_compactrow editable_parent">
|
||||
<a href="/panel/groups/edit/{{.ID}}" class="panel_upshift">{{.Name}}</a>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem"><a href="/panel/">Control Panel</a></div>
|
||||
</div>
|
||||
<div class="colstack_item">
|
||||
<div class="colstack_item rowmenu">
|
||||
<div class="rowitem passive"><a href="/panel/users/">Users</a></div>
|
||||
<div class="rowitem passive"><a href="/panel/groups/">Groups</a></div>
|
||||
{{if .CurrentUser.Perms.ManageForums}}<div class="rowitem passive"><a href="/panel/forums/">Forums</a></div>{{end}}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem"><a href="/panel/logs/mod/">Logs</a></div>
|
||||
</div>
|
||||
<div class="colstack_item">
|
||||
<div class="colstack_item rowmenu">
|
||||
<div class="rowitem passive"><a href="/panel/logs/mod/">Moderation Logs</a></div>
|
||||
{{if .CurrentUser.Perms.ViewAdminLogs}}<div class="rowitem passive"><a>Administration Logs</a></div>{{end}}
|
||||
{{if .CurrentUser.Perms.ViewAdminLogs}}<div class="rowitem passive"><a>System Logs</a></div>{{end}}
|
||||
|
@ -14,7 +14,7 @@
|
|||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem"><a>Moderation Logs</a></div>
|
||||
</div>
|
||||
<div id="panel_modlogs" class="colstack_item">
|
||||
<div id="panel_modlogs" class="colstack_item rowlist">
|
||||
{{range .Logs}}
|
||||
<div class="rowitem panel_compactrow" style="font-weight: normal;text-transform: none;">
|
||||
<span style="float: left;">
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem"><a>Settings</a></div>
|
||||
</div>
|
||||
<div id="panel_settings" class="colstack_item">
|
||||
<div id="panel_settings" class="colstack_item rowlist">
|
||||
{{range $key, $value := .Something}}
|
||||
<div class="rowitem panel_compactrow editable_parent">
|
||||
<a href="/panel/settings/edit/{{$key}}" class="editable_block panel_upshift">{{$key}}</a>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem"><a href="/panel/themes/">Theme Manager</a></div>
|
||||
</div>
|
||||
<div class="colstack_item">
|
||||
<div class="colstack_item rowmenu">
|
||||
<div class="rowitem passive"><a href="#">Widgets</a></div>
|
||||
</div>
|
||||
{{template "panel-inner-menu.html" . }}
|
||||
|
|
|
@ -5,15 +5,15 @@
|
|||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem"><a>Users</a></div>
|
||||
</div>
|
||||
<div id="panel_users" class="colstack_item">
|
||||
<div id="panel_users" class="colstack_item rowlist bgavatars">
|
||||
{{range .ItemList}}
|
||||
<div class="rowitem editable_parent" style="font-weight: normal;text-transform: none;">
|
||||
<div class="rowitem editable_parent" style="{{if .Avatar}}background-image: url('{{.Avatar}}');{{end}}">
|
||||
<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">Profile</a>
|
||||
{{if (.Tag) and (.Is_Super_Mod)}}<span style="float: right;"><span class="panel_tag" style="margin-left 4px;">{{.Tag}}</span></span>{{end}}
|
||||
|
||||
<span class="panel_floater">
|
||||
{{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 .Is_Banned}}<a href="/users/unban/{{.ID}}?session={{$.CurrentUser.Session}}" class="panel_tag panel_right_button ban_button">Unban</a>{{else if not .Is_Super_Mod}}<a href="/users/ban/{{.ID}}?session={{$.CurrentUser.Session}}" class="panel_tag panel_right_button ban_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>
|
||||
</div>
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
{{template "header.html" . }}
|
||||
|
||||
<div id="profile_left_pane" 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 id="profile_left_lane" class="colstack_left">
|
||||
<!--<div class="colstack_item colstack_head rowhead">
|
||||
<div class="rowitem"><a>Profile</a></div>
|
||||
</div>-->
|
||||
<div id="profile_left_pane" class="rowmenu">
|
||||
<div class="rowitem avatarRow" style="padding: 0;">
|
||||
<img src="{{.ProfileOwner.Avatar}}" class="avatar" />
|
||||
</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 class="profileName">{{.ProfileOwner.Name}}</span>{{if .ProfileOwner.Tag}}<span class="username" style="float: right;font-weight: normal;">{{.ProfileOwner.Tag}}</span>{{end}}
|
||||
</div>
|
||||
<div class="rowitem passive">
|
||||
<a class="profile_menu_item">Add Friend</a>
|
||||
|
@ -17,13 +21,15 @@
|
|||
<div class="rowitem passive">
|
||||
<a href="/report/submit/{{.ProfileOwner.ID}}?session={{.CurrentUser.Session}}&type=user" class="profile_menu_item report_item">Report</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="colblock_right rowhead" style="width: calc(95% - 210px);">
|
||||
<div id="profile_right_lane" class="colstack_right">
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem"><a>Comments</a></div>
|
||||
</div>
|
||||
<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 {{.ClassName}}" 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;{{end}}">
|
||||
</div>
|
||||
<div id="profile_comments" class="colstack_item" style="overflow: hidden;border-top: none;">{{range .ItemList}}
|
||||
<div class="rowitem passive deletable_block editable_parent simple {{.ClassName}}" 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;{{end}}">
|
||||
<span class="editable_block user_content simple">{{.ContentHtml}}</span><br /><br />
|
||||
<a href="/user/{{.UserSlug}}.{{.CreatedBy}}" class="real_username username">{{.CreatedByName}}</a>
|
||||
|
||||
|
@ -33,21 +39,22 @@
|
|||
|
||||
<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 user_tag" style="float: right;">{{.Tag}}</a>{{end}}
|
||||
</div>
|
||||
{{end}}</div>
|
||||
{{end}}</div>
|
||||
|
||||
<div class="colblock_right" style="border-top: none;width: calc(95% - 210px);">
|
||||
{{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" />
|
||||
<div class="colstack_item topic_reply_form" style="border-top: none;">
|
||||
<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>
|
||||
{{end}}
|
||||
</div>
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{{template "header.html" . }}
|
||||
|
||||
<form id="edit_topic_form" action='/topic/edit/submit/{{.Topic.ID}}' method="post" />
|
||||
{{if gt .Page 1}}<div id="prevFloat" class="prev_button"><a class="prev_link" href="/topic/{{.Topic.ID}}?page={{subtract .Page 1}}"><</a></div>{{end}}
|
||||
|
||||
{{if ne .LastPage .Page}}<link rel="prerender" href="/topic/{{.Topic.ID}}?page={{add .Page 1}}" />
|
||||
|
@ -8,23 +9,22 @@
|
|||
</div>{{end}}
|
||||
|
||||
<div class="rowblock rowhead topic_block">
|
||||
<form action='/topic/edit/submit/{{.Topic.ID}}' method="post">
|
||||
<div class="rowitem topic_item{{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>
|
||||
{{if .Topic.Is_Closed}}<span class='username hide_on_micro topic_status_e topic_status_closed hide_on_edit' title='Status: Closed' style="font-weight:normal;float: right;position:relative;top:-5px;">🔒︎</span>{{end}}
|
||||
{{if .CurrentUser.Perms.EditTopic}}
|
||||
<input class='show_on_edit topic_name_input' name="topic_name" value='{{.Topic.Title}}' type="text" />
|
||||
{{if .CurrentUser.Perms.CloseTopic}}<select name="topic_status" class='show_on_edit topic_status_input' style='float: right;'>
|
||||
<input form='edit_topic_form' class='show_on_edit topic_name_input' name="topic_name" value='{{.Topic.Title}}' type="text" />
|
||||
{{if .CurrentUser.Perms.CloseTopic}}<select form='edit_topic_form' name="topic_status" class='show_on_edit topic_status_input' style='float: right;'>
|
||||
<option>open</option>
|
||||
<option>closed</option>
|
||||
</select>{{end}}
|
||||
<button name="topic-button" class="formbutton show_on_edit submit_edit">Update</button>
|
||||
<button form='edit_topic_form' name="topic-button" class="formbutton show_on_edit submit_edit">Update</button>
|
||||
{{end}}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="rowblock post_container top_post">
|
||||
<div class="rowitem passive editable_parent post_item {{.Topic.ClassName}}" style="{{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;{{end}}">
|
||||
<div class="rowitem passive editable_parent post_item {{.Topic.ClassName}}" style="{{if .Topic.Avatar}}background-image:url({{.Topic.Avatar}}), url(/static/post-avatar-bg.jpg);background-position: 0px {{if le .Topic.ContentLines 5}}-1{{end}}0px;background-repeat:no-repeat, repeat-y;{{end}}">
|
||||
<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>
|
||||
|
||||
|
@ -54,7 +54,7 @@
|
|||
<span>{{.ActionType}}</span>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="rowitem passive deletable_block editable_parent post_item {{.ClassName}}" 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;{{end}}">
|
||||
<div class="rowitem passive deletable_block editable_parent post_item {{.ClassName}}" style="{{if .Avatar}}background-image:url({{.Avatar}}), url(/static/post-avatar-bg.jpg);background-position: 0px {{if le .ContentLines 5}}-1{{end}}0px;background-repeat:no-repeat, repeat-y;{{end}}">
|
||||
<p class="editable_block user_content" style="margin:0;padding:0;">{{.ContentHtml}}</p>
|
||||
|
||||
<span class="controls">
|
||||
|
|
|
@ -35,6 +35,7 @@ type Theme struct
|
|||
Tag string
|
||||
URL string
|
||||
Sidebars string // Allowed Values: left, right, both, false
|
||||
//DisableMinifier // Is this really a good idea? I don't think themes should be fighting against the minifier
|
||||
Settings map[string]ThemeSetting
|
||||
Templates []TemplateMapping
|
||||
TemplatesMap map[string]string
|
||||
|
@ -154,6 +155,7 @@ func init_themes() {
|
|||
}
|
||||
|
||||
func add_theme_static_files(theme Theme) {
|
||||
// TO-DO: Use a function instead of a closure to make this more testable? What about a function call inside the closure to take the theme variable into account?
|
||||
err := filepath.Walk("./themes/" + theme.Name + "/public", func(path string, f os.FileInfo, err error) error {
|
||||
if dev.DebugMode {
|
||||
log.Print("Attempting to add static file '" + path + "' for default theme '" + theme.Name + "'")
|
||||
|
|
|
@ -188,7 +188,7 @@ hr { color: silver; border: 1px solid silver; }
|
|||
.rowitem:not(:last-child) { border-bottom: 1px dotted #ccc; }
|
||||
.rowblock:first-of-type { margin-top: 8px; }
|
||||
|
||||
.datarow {
|
||||
.datarow, .rowlist .rowitem {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
@ -196,6 +196,12 @@ hr { color: silver; border: 1px solid silver; }
|
|||
font-size:12px;
|
||||
}
|
||||
|
||||
.rowlist.bgavatars .rowitem {
|
||||
background-repeat: no-repeat;
|
||||
background-size: 40px;
|
||||
padding-left: 47px;
|
||||
}
|
||||
|
||||
.rowhead .rowitem, .colhead, .opthead .rowitem, .colstack_head .rowitem {
|
||||
background: #ce2424;
|
||||
background: -webkit-gradient(linear, 0 0, 0 bottom, from(#f97779), to(#ce2424));
|
||||
|
|
|
@ -175,7 +175,7 @@ hr { color: silver; border: 1px solid silver; }
|
|||
.rowblock:first-of-type { margin-top: 8px; }
|
||||
.rowitem:not(:last-child) { border-bottom: 1px dotted #ccc; }
|
||||
|
||||
.datarow {
|
||||
.datarow, .rowlist .rowitem {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
@ -183,6 +183,12 @@ hr { color: silver; border: 1px solid silver; }
|
|||
font-size:12px;
|
||||
}
|
||||
|
||||
.rowlist.bgavatars .rowitem {
|
||||
background-repeat: no-repeat;
|
||||
background-size: 40px;
|
||||
padding-left: 47px;
|
||||
}
|
||||
|
||||
.rowhead .rowitem, .opthead .rowitem, .colstack_head .rowitem, .colhead {
|
||||
background: #ce2424;
|
||||
background: -webkit-gradient(linear, 0 0, 0 bottom, from(#f97779), to(#ce2424));
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
# Theme Notes
|
||||
|
||||
/public/post-avatar-bg.jpg is a solid rgb(71,71,71)
|
||||
|
|
@ -45,6 +45,7 @@ li {
|
|||
.menu_overview {
|
||||
margin-right: 13px;
|
||||
margin-left: 10px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.menu_left:not(.menu_overview) {
|
||||
|
@ -57,7 +58,7 @@ li {
|
|||
}
|
||||
|
||||
.menu_alerts {
|
||||
float: none;
|
||||
float: right;
|
||||
padding-top: 14px;
|
||||
}
|
||||
|
||||
|
@ -94,6 +95,13 @@ a {
|
|||
color: white;
|
||||
}
|
||||
|
||||
.alert {
|
||||
padding-bottom: 12px;
|
||||
background-color: rgb(61,61,61);
|
||||
padding: 12px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.rowblock {
|
||||
margin-left: 8px;
|
||||
margin-right: 8px;
|
||||
|
@ -108,7 +116,7 @@ a {
|
|||
font-size: 15px;
|
||||
}
|
||||
|
||||
.rowblock:last-child {
|
||||
.rowblock:last-child, .colstack_item:last-child {
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
|
@ -228,17 +236,11 @@ a {
|
|||
margin-left: 3px;
|
||||
}
|
||||
|
||||
.topic_reply_form {
|
||||
.formrow.real_first_child, .formrow:first-child {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.formitem {
|
||||
margin-top: 0px;
|
||||
padding-bottom: 2px;
|
||||
padding-top: 3px;
|
||||
}
|
||||
|
||||
.formrow.real_first_child .formitem {
|
||||
.formrow.real_first_child .formitem, .formrow:first-child .formitem {
|
||||
padding-top: 12px;
|
||||
}
|
||||
|
||||
|
@ -249,6 +251,19 @@ a {
|
|||
textarea {
|
||||
background-color: #444444;
|
||||
border-color: #555555;
|
||||
width: calc(100% - 15px);
|
||||
min-height: 80px;
|
||||
}
|
||||
|
||||
textarea:focus, input:focus, select:focus {
|
||||
outline-color: rgb(95,95,95);
|
||||
}
|
||||
|
||||
textarea.large {
|
||||
min-height: 120px;
|
||||
margin-top: 1px;
|
||||
padding: 5px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.topic_reply_form textarea {
|
||||
|
@ -264,3 +279,271 @@ textarea {
|
|||
padding-bottom: 6px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.formrow {
|
||||
flex-direction: row;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.formitem {
|
||||
margin-top: 0px;
|
||||
padding-bottom: 2px;
|
||||
padding-top: 3px;
|
||||
flex-grow: 2;
|
||||
}
|
||||
|
||||
.formlabel {
|
||||
flex-grow: 0;
|
||||
width: 20%;
|
||||
padding-top: 9px;
|
||||
}
|
||||
|
||||
/* If the form label is on the right */
|
||||
.formlabel:not(:first-child) {
|
||||
font-size: 15px;
|
||||
flex-grow: 2;
|
||||
}
|
||||
|
||||
.formrow.real_first_child .formlabel, .formrow:first-child .formlabel {
|
||||
padding-top: 17px;
|
||||
}
|
||||
|
||||
/* Too big compared to the other items in the Control Panel and Account Panel */
|
||||
/*.colstack_item .formrow.real_first_child, .colstack_item .formrow:first-child {
|
||||
margin-top: 8px;
|
||||
}*/
|
||||
.colstack_item .formrow.real_first_child, .colstack_item .formrow:first-child {
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
.thin_margins .formrow.real_first_child, .thin_margins .formrow:first-child {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.formitem a {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.rowmenu .rowitem, .rowlist .rowitem, .rowlist .formitem {
|
||||
margin-top: 3px;
|
||||
font-size: 13px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.rowlist.bgavatars .rowitem {
|
||||
background-repeat: no-repeat;
|
||||
background-size: 40px;
|
||||
padding-left: 46px;
|
||||
}
|
||||
|
||||
.rowlist .formrow, .rowlist .formrow:first-child {
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
.formitem input {
|
||||
background-color: #444444;
|
||||
border: 1px solid #555555;
|
||||
color: #999999;
|
||||
padding-bottom: 6px;
|
||||
font-size: 13px;
|
||||
|
||||
padding: 5px;
|
||||
width: calc(100% - 16px);
|
||||
}
|
||||
|
||||
.formitem select {
|
||||
background-color: #444444;
|
||||
border: 1px solid #555555;
|
||||
color: #999999;
|
||||
font-size: 13px;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.rowlist .formitem select {
|
||||
padding: 2px;
|
||||
font-size: 11px;
|
||||
margin-top: -5px;
|
||||
}
|
||||
|
||||
input, select, textarea {
|
||||
caret-color: rgb(95,95,95);
|
||||
}
|
||||
|
||||
.form_middle_button {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
display: block;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
/* Forum View */
|
||||
.rowhead {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.has_opt {
|
||||
margin-right: 0px;
|
||||
display: inline-block;
|
||||
float: left;
|
||||
padding-right: 0px;
|
||||
}
|
||||
.rowhead .rowitem:not(.has_opt) {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.opt {
|
||||
float: left;
|
||||
margin-top: 8px;
|
||||
height: 30.4px;
|
||||
padding-left: 5px;
|
||||
width: 100%;
|
||||
background-color: rgb(61,61,61);
|
||||
padding-top: 11px;
|
||||
}
|
||||
.opt a {
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.create_topic_opt a:before {
|
||||
content: "New Topic";
|
||||
}
|
||||
.locked_opt a:before {
|
||||
content: "Locked";
|
||||
}
|
||||
|
||||
/* Profiles */
|
||||
#profile_left_lane {
|
||||
width: 220px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
#profile_left_lane .avatarRow {
|
||||
overflow: hidden;
|
||||
max-height: 220px;
|
||||
}
|
||||
#profile_left_lane .avatar {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
display: block;
|
||||
}
|
||||
#profile_left_lane .username {
|
||||
font-size: 14px;
|
||||
display: block;
|
||||
margin-top: 3px;
|
||||
}
|
||||
#profile_left_lane .profileName {
|
||||
font-size: 18px;
|
||||
}
|
||||
#profile_right_lane {
|
||||
width: calc(100% - 245px);
|
||||
}
|
||||
#profile_right_lane .rowitem {
|
||||
margin-top: 5px;
|
||||
}
|
||||
#profile_right_lane .colstack_item .formrow.real_first_child, #profile_right_lane .colstack_item .formrow:first-child {
|
||||
margin-top: 5px;
|
||||
}
|
||||
.simple .user_tag {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
@media(max-width: 935px) {
|
||||
.simple .user_tag {
|
||||
display: none;
|
||||
}
|
||||
#profile_left_lane {
|
||||
width: 160px;
|
||||
}
|
||||
#profile_left_lane .avatarRow {
|
||||
max-height: 160px;
|
||||
}
|
||||
#profile_left_lane .profileName {
|
||||
font-size: 16px;
|
||||
}
|
||||
#profile_right_lane {
|
||||
width: calc(100% - 185px);
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width: 830px) {
|
||||
ul {
|
||||
padding-left: 10px;
|
||||
padding-right: 0px;
|
||||
height: 35px;
|
||||
}
|
||||
li {
|
||||
height: 26px;
|
||||
}
|
||||
|
||||
.menu_overview {
|
||||
margin-right: 9px;
|
||||
margin-left: 0px;
|
||||
font-size: 15px;
|
||||
width: 32px;
|
||||
text-align: center;
|
||||
}
|
||||
.menu_left {
|
||||
margin-right: 7px;
|
||||
}
|
||||
.menu_left:not(.menu_overview) {
|
||||
font-size: 13px;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.menu_alerts {
|
||||
padding-top: 9px;
|
||||
float: left;
|
||||
margin-right: 6px;
|
||||
}
|
||||
.alert_counter {
|
||||
border-radius: 8px;
|
||||
font-size: 0px;
|
||||
color: #c80000;
|
||||
left: 2px;
|
||||
}
|
||||
.alert_aftercounter {
|
||||
float: none;
|
||||
margin-right: 0px;
|
||||
font-size: 13px;
|
||||
padding-top: 1.5px;
|
||||
}
|
||||
.has_alerts .alert_aftercounter {
|
||||
position: relative;
|
||||
top: -5px;
|
||||
}
|
||||
.menu_alerts:not(.has_alerts) .alert_counter {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#back {
|
||||
width: calc(100% - 20px);
|
||||
}
|
||||
.opthead, .rowhead, .colstack_head {
|
||||
padding-top: 0px !important;
|
||||
font-size 15px;
|
||||
}
|
||||
.rowblock:not(.opthead):not(.colstack_head):not(.rowhead) .rowitem {
|
||||
font-size: 14px;
|
||||
}
|
||||
.rowsmall {
|
||||
font-size: 11px;
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width: 470px) {
|
||||
.menu_create_topic {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width: 370px) {
|
||||
.menu_profile {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width: 324px) {
|
||||
ul {
|
||||
padding-left: 5px;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
.rowlist .tag-mini {
|
||||
font-size: 10px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
|
||||
.panel_right_button {
|
||||
float: right;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
#panel_users .ban_button {
|
||||
font-size: 10px;
|
||||
float: none;
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
#panel_users .ban_button:before {
|
||||
content: "|";
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
#forum_quick_perms .edit_fields {
|
||||
float: right;
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 539 B |
|
@ -149,6 +149,19 @@ li a {
|
|||
font-size:12px;
|
||||
}
|
||||
|
||||
.rowlist {
|
||||
font-size: 14px;
|
||||
}
|
||||
.rowlist .rowitem {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.rowlist.bgavatars .rowitem {
|
||||
background-repeat: no-repeat;
|
||||
background-size: 40px;
|
||||
padding-left: 48px;
|
||||
}
|
||||
|
||||
.colblock_left {
|
||||
border: 1px solid #ccc;
|
||||
padding: 0px;
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
# Theme Notes
|
||||
|
||||
/public/post-avatar-bg.jpg is a solid rgb(255,255,255) white.
|
||||
|
|
@ -77,13 +77,17 @@ li a {
|
|||
text-align: center;
|
||||
border: white solid 1px;
|
||||
}
|
||||
.menu_alerts .alert_counter:empty { display: none; }
|
||||
.menu_alerts .alert_counter:empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.selectedAlert, .selectedAlert:hover {
|
||||
background: white;
|
||||
color: black;
|
||||
}
|
||||
.menu_alerts .alertList { display: none; }
|
||||
.menu_alerts .alertList {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.selectedAlert .alertList {
|
||||
position: absolute;
|
||||
|
@ -94,10 +98,7 @@ li a {
|
|||
line-height: 16px;
|
||||
width: 300px;
|
||||
right: calc(5% + 7px);
|
||||
border-top: 1px solid #ccc;
|
||||
border-left: 1px solid #ccc;
|
||||
border-right: 1px solid #ccc;
|
||||
border-bottom: 1px solid #ccc;
|
||||
border: 1px solid #ccc;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.alertItem {
|
||||
|
@ -144,8 +145,18 @@ li a {
|
|||
padding: 0px;
|
||||
padding-top: 0px;
|
||||
}
|
||||
.rowblock:empty { display: none; }
|
||||
.rowsmall { font-size:12px; }
|
||||
.rowblock:empty {
|
||||
display: none;
|
||||
}
|
||||
.rowsmall {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.rowlist.bgavatars .rowitem {
|
||||
background-repeat: no-repeat;
|
||||
background-size: 50px;
|
||||
padding-left: 58px;
|
||||
}
|
||||
|
||||
.colblock_left {
|
||||
border: 1px solid #ccc;
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 539 B |
|
@ -0,0 +1,4 @@
|
|||
# Theme Notes
|
||||
|
||||
/public/post-avatar-bg.jpg is a solid rgb(255,255,255) white.
|
||||
|
|
@ -277,6 +277,9 @@ li a {
|
|||
width: 50px;
|
||||
text-align: center;
|
||||
}
|
||||
.create_topic_opt a:before {
|
||||
content '🖊︎';
|
||||
}
|
||||
.create_topic_opt, .create_topic_opt a {
|
||||
color: rgb(120,120,120);
|
||||
text-decoration: none;
|
||||
|
@ -284,11 +287,22 @@ li a {
|
|||
.locked_opt {
|
||||
color: rgb(80,80,80);
|
||||
}
|
||||
.locked_opt:before {
|
||||
content: '🔒︎';
|
||||
}
|
||||
|
||||
.datarow {
|
||||
.rowlist {
|
||||
font-size: 15px;
|
||||
}
|
||||
.datarow, .rowlist .rowitem {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.rowlist.bgavatars .rowitem {
|
||||
background-repeat: no-repeat;
|
||||
background-size: 40px;
|
||||
padding-left: 46px;
|
||||
}
|
||||
|
||||
.formrow {
|
||||
width: 100%;
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 539 B |
|
@ -5,6 +5,6 @@ go get -u github.com/lib/pq
|
|||
echo "Updating bcrypt"
|
||||
go get -u golang.org/x/crypto/bcrypt
|
||||
echo "Updating gopsutil"
|
||||
go get -u github.com/shirou/gopsutil
|
||||
go get -u github.com/Azareal/gopsutil
|
||||
echo "Updating Gorilla WebSockets"
|
||||
go get -u github.com/gorilla/websocket
|
||||
|
|
|
@ -34,7 +34,7 @@ if %errorlevel% neq 0 (
|
|||
)
|
||||
|
||||
echo Updating gopsutil
|
||||
go get -u github.com/shirou/gopsutil
|
||||
go get -u github.com/Azareal/gopsutil
|
||||
if %errorlevel% neq 0 (
|
||||
pause
|
||||
exit /b %errorlevel%
|
||||
|
|
Loading…
Reference in New Issue