diff --git a/last_version.txt b/last_version.txt
new file mode 100644
index 00000000..0d4d1249
--- /dev/null
+++ b/last_version.txt
@@ -0,0 +1 @@
+0.1.0-dev
diff --git a/main.go b/main.go
index 7e4eb621..a457ce4a 100644
--- a/main.go
+++ b/main.go
@@ -25,6 +25,9 @@ const kilobyte int = 1024
const megabyte int = kilobyte * 1024
const gigabyte int = megabyte * 1024
const terabyte int = gigabyte * 1024
+//const thousand int = 1000
+//const million int = 1_000_000
+//const billion int = 1_000_000_000
const saltLength int = 32
const sessionLength int = 80
var enable_websockets bool = false // Don't change this, the value is overwritten by an initialiser
diff --git a/panel_routes.go b/panel_routes.go
index 61a4cd49..8dd7ad41 100644
--- a/panel_routes.go
+++ b/panel_routes.go
@@ -168,9 +168,13 @@ func route_panel(w http.ResponseWriter, r *http.Request){
onlineUsersColour = "stat_red"
}
- gridElements = append(gridElements, GridElement{"dash-totonline",strconv.Itoa(totonline) + " online",3,"grid_stat " + onlineColour,"","","The number of people who are currently online"})
- gridElements = append(gridElements, GridElement{"dash-gonline",strconv.Itoa(gonline) + " guests online",4,"grid_stat " + onlineGuestsColour,"","","The number of guests who are currently online"})
- gridElements = append(gridElements, GridElement{"dash-uonline",strconv.Itoa(uonline) + " users online",5,"grid_stat " + onlineUsersColour,"","","The number of logged-in users who are currently online"})
+ totonline, totunit := convert_friendly_unit(totonline)
+ uonline, uunit := convert_friendly_unit(uonline)
+ gonline, gunit := convert_friendly_unit(gonline)
+
+ gridElements = append(gridElements, GridElement{"dash-totonline",strconv.Itoa(totonline) + totunit + " online",3,"grid_stat " + onlineColour,"","","The number of people who are currently online"})
+ gridElements = append(gridElements, GridElement{"dash-gonline",strconv.Itoa(gonline) + gunit + " guests online",4,"grid_stat " + onlineGuestsColour,"","","The number of guests who are currently online"})
+ gridElements = append(gridElements, GridElement{"dash-uonline",strconv.Itoa(uonline) + uunit + " users online",5,"grid_stat " + onlineUsersColour,"","","The number of logged-in users who are currently online"})
}
gridElements = append(gridElements, GridElement{"dash-postsperday",strconv.Itoa(postCount) + " posts / " + postInterval,6,"grid_stat " + postColour,"","","The number of new posts over the last 24 hours"})
diff --git a/templates/topic.html b/templates/topic.html
index dccd92ae..c8f84fb1 100644
--- a/templates/topic.html
+++ b/templates/topic.html
@@ -18,7 +18,7 @@
-
{{range .ItemList}}{{if .ActionType}}
{{.ActionIcon}}
diff --git a/themes/cosmo-conflux/public/main.css b/themes/cosmo-conflux/public/main.css
index f2f621d8..c6d66e66 100644
--- a/themes/cosmo-conflux/public/main.css
+++ b/themes/cosmo-conflux/public/main.css
@@ -1,5 +1,5 @@
/* AtomBB Cosmo Port. Copyright Azareal 2017 - 2018 */
-/* I'm currently converting the CSS over. Don't use this yet! */
+/* I'm currently converting the CSS over from one of my previous projects. Don't use this yet! */
* {
box-sizing: border-box;
@@ -280,8 +280,7 @@ hr { color: silver; border: 1px solid silver; }
{
padding: 0px;
padding-top: 0px;
- width: 100%;
- margin-bottom: 8px;
+ margin-bottom: 16px;
overflow: hidden;
word-wrap: break-word;
}
diff --git a/themes/cosmo/public/main.css b/themes/cosmo/public/main.css
index c7971cc3..e9ac5148 100644
--- a/themes/cosmo/public/main.css
+++ b/themes/cosmo/public/main.css
@@ -1,5 +1,5 @@
/* AtomBB Cosmo Port. Copyright Azareal 2017 */
-/* I'm currently converting the CSS over. Don't use this yet! */
+/* I'm currently converting the CSS over from one of my previous projects. Don't use this yet! */
* {
box-sizing: border-box;
@@ -269,8 +269,7 @@ hr { color: silver; border: 1px solid silver; }
{
padding: 0px;
padding-top: 0px;
- width: 100%;
- margin-bottom: 8px;
+ margin-bottom: 16px;
overflow: hidden;
word-wrap: break-word;
}
diff --git a/themes/tempra-conflux/public/main.css b/themes/tempra-conflux/public/main.css
index ab0f1916..e4f96f4b 100644
--- a/themes/tempra-conflux/public/main.css
+++ b/themes/tempra-conflux/public/main.css
@@ -12,7 +12,7 @@ body
background-size: cover;
}
-/* Patch for Edge */
+/* Patch for Edge, until they fix emojis in arial x.x */
@supports (-ms-ime-align:auto) {
.user_content { font-family: Segoe UI Emoji, arial; }
}
@@ -23,27 +23,27 @@ ul
{
padding-left: 0px;
padding-right: 0px;
- height: 28px;
+ height: 36px;
list-style-type: none;
border: 1px solid #ccc;
background-color: white;
+ margin-bottom: 12px;
}
li
{
- height: 26px;
+ height: 35px;
padding-left: 10px;
- padding-top: 5px;
- padding-bottom: 5px;
- font-weight: bold;
- text-transform: uppercase;
+ padding-top: 8px;
+ padding-bottom: 8px;
}
li:hover { background: rgb(250,250,250); }
li a
{
text-decoration: none;
- color: #515151;
+ /*color: #515151;*/
+ color: black;
+ font-size: 17px;
}
-/*li a:hover { color: #7a7a7a; }*/
.menu_left
{
float: left;
@@ -58,25 +58,24 @@ li a
}
.menu_alerts {
- padding-left: 7px;
+ /*padding-left: 7px;*/
+ font-size: 20px;
padding-top: 2px;
color: rgb(80,80,80);
}
.menu_alerts .alert_counter {
- position:relative;
- font-size: 9px;
- top: -24px;
- background-color: rgb(140,0,0);
+ position: relative;
+ font-size: 8px;
+ top: -25px;
+ background-color: rgb(190,0,0);
color: white;
- padding: 3px;
width: 14px;
left: 10px;
line-height: 8px;
- border-radius: 20px;
padding-top: 2.5px;
height: 14px;
- opacity: 0.8;
text-align: center;
+ border: white solid 1px;
}
.menu_alerts .alert_counter:empty {
display: none;
@@ -100,7 +99,7 @@ li a
}
.selectedAlert .alertList {
position: absolute;
- top: 43px;
+ top: 51px;
display: block;
background: white;
font-size: 10px;
@@ -135,6 +134,8 @@ li a
height: 30px;
width: 100%;
color: black;
+ font-size: 10px;
+ font-weight: bold;
}
.alertItem .text.smaller {
font-size: 9px;
@@ -197,7 +198,7 @@ li a
padding: 0px;
padding-top: 0px;
width: 100%;
- margin-bottom: 8px;
+ margin-bottom: 12px;
overflow: hidden;
word-wrap: break-word;
}
@@ -208,7 +209,6 @@ li a
.colstack_grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
- /*grid-gap: 15px;*/
grid-gap: 12px;
margin-left: 5px;
}
@@ -220,16 +220,12 @@ li a
overflow: hidden;
}
.grid_stat, .grid_istat {
- /*padding-top: 15px;*/
text-align: center;
- /*padding-bottom: 15px;
- font-size: 20px;*/
padding-top: 12px;
padding-bottom: 12px;
font-size: 16px;
}
.grid_istat {
- /*margin-bottom: 10px;*/
margin-bottom: 5px;
}
@@ -302,16 +298,14 @@ li a
width: 100%;
background-color: white;
}
+
/* Clearfix */
.formrow:before, .formrow:after {
content: " ";
display: table;
}
.formrow:after { clear: both; }
-.formrow:not(:last-child)
-{
- border-bottom: 1px dotted #ccc;
-}
+.formrow:not(:last-child) { border-bottom: 1px dotted #ccc; }
.formitem
{
@@ -322,18 +316,10 @@ li a
padding-bottom: 8px;
font-weight: bold;
}
-.formitem:first-child
-{
- font-weight: bold;
-}
-.formitem:not(:last-child)
-{
- border-right: 1px dotted #ccc;
-}
-.formitem.invisible_border
-{
- border: none;
-}
+.formitem:first-child { font-weight: bold; }
+.formitem:not(:last-child) { border-right: 1px dotted #ccc; }
+.formitem.invisible_border { border: none; }
+
/* Mostly for textareas */
.formitem:only-child { width: 100%; }
.formitem textarea
@@ -414,10 +400,6 @@ button.username
border-width: 1px;
}
-.mention {
- font-weight: bold;
-}
-
.tag-mini
{
text-transform: none;
@@ -434,10 +416,8 @@ button.username
font-size: 10px;
}
-.show_on_edit
-{
- display: none;
-}
+.mention { font-weight: bold; }
+.show_on_edit { display: none; }
.alert
{
@@ -589,37 +569,54 @@ button.username
/* Media Queries from Simple. Probably useless in Conflux */
@media (max-width: 880px) {
- li { height: 25px; font-size: 15px; padding-left: 7px; }
- ul { height: 26px; margin-top: 8px; }
- .menu_left { padding-right: 7px; }
- .menu_right { padding-right: 7px; }
+ li {
+ height: 29px;
+ font-size: 15px;
+ padding-left: 9px;
+ padding-top: 6px;
+ padding-bottom: 6px;
+ }
+ ul {
+ height: 30px;
+ margin-top: 8px;
+ }
+ .menu_left { padding-right: 9px; }
+ .menu_right { padding-right: 9px; }
+ .menu_alerts {
+ padding-left: 7px;
+ padding-right: 7px;
+ font-size: 18px;
+ }
+
body { padding-left: 4px; padding-right: 4px; margin: 0px !important; width: 100% !important; height: 100% !important; overflow-x: hidden; }
.container { width: auto; }
- .selectedAlert .alertList { top: 33px; right: 4px; }
+ .selectedAlert .alertList { top: 37px; right: 4px; }
}
@media (max-width: 810px) {
- li
- {
- font-weight: normal;
- text-transform: none;
- }
.rowitem { text-transform: none; }
}
-@media (max-width: 620px) {
- li
- {
+@media (max-width: 680px) {
+ li {
padding-left: 5px;
- padding-top: 2px;
+ padding-top: 3px;
padding-bottom: 2px;
- height: 23px;
+ height: 25px;
}
- ul { height: 24px; }
- .menu_left { padding-right: 5px; }
- .menu_right { padding-right: 5px; }
+ li a { font-size: 14px; }
+ ul { height: 26px; }
+ .menu_left { padding-right: 7px; }
+ .menu_right { padding-right: 7px; }
.menu_create_topic { display: none; }
- .menu_alerts { padding-left: 4px; padding-right: 4px; }
+
+ .menu_alerts {
+ padding-left: 4px;
+ padding-right: 4px;
+ font-size: 16px;
+ padding-top: 1px;
+ }
+ .selectedAlert .alertList { top: 33px; }
.hide_on_mobile { display: none; }
.prev_button, .next_button { top: auto;bottom: 5px; }
@@ -628,12 +625,9 @@ button.username
}
@media (max-width: 470px) {
- .menu_overview { display: none; }
- .menu_profile { display: none; }
- .hide_on_micro { display: none; }
- .post_container {
- overflow: visible !important;
- }
+ .menu_overview, .menu_profile, .hide_on_micro { display: none; }
+ .post_container { overflow: visible !important; }
+
.post_item {
background-position: 0px 2px !important;
background-size: 64px 64px !important;
@@ -661,9 +655,7 @@ button.username
width: 60px;
font-size: 15px;
}
- .userinfo {
- width: 70px;
- }
+ .userinfo { width: 70px; }
.userinfo .avatar_item {
background-size: 64px;
width: 64px;
@@ -679,4 +671,9 @@ button.username
.post_tag { font-size: 12px; }
.container { width: 100% !important; }
-}
\ No newline at end of file
+}
+
+@media (max-width: 330px) {
+ li { padding-left: 6px; }
+ .menu_left { padding-right: 6px; }
+}
diff --git a/themes/tempra-cursive/public/main.css b/themes/tempra-cursive/public/main.css
index 52131fd6..6154f23e 100644
--- a/themes/tempra-cursive/public/main.css
+++ b/themes/tempra-cursive/public/main.css
@@ -10,7 +10,7 @@ body
padding-bottom: 8px;
}
-/* Patch for Edge */
+/* Patch for Edge, until they fix emojis in arial x.x */
@supports (-ms-ime-align:auto) {
.user_content { font-family: Segoe UI Emoji, arial; }
}
@@ -19,34 +19,34 @@ ul
{
padding-left: 0px;
padding-right: 0px;
- height: 28px;
+ height: 36px;
list-style-type: none;
border: 1px solid #ccc;
background-color: white;
+ margin-bottom: 12px;
}
li
{
- height: 26px;
+ height: 35px;
padding-left: 10px;
- padding-top: 5px;
- padding-bottom: 5px;
- font-weight: bold;
- text-transform: uppercase;
+ padding-top: 8px;
+ padding-bottom: 8px;
}
li:hover { background: rgb(250,250,250); }
li a
{
text-decoration: none;
- color: #515151;
+ /*color: #515151;*/
+ color: black;
+ font-size: 17px;
}
-/*li a:hover { color: #7a7a7a; }*/
.menu_left
{
float: left;
border-right: 1px solid #ccc;
padding-right: 10px;
font-family: cursive;
- padding-top: 2px;
+ padding-top: 4px;
}
.menu_right
{
@@ -56,25 +56,26 @@ li a
}
.menu_alerts {
- padding-left: 7px;
+ /*padding-left: 7px;*/
+ font-size: 20px;
padding-top: 2px;
color: rgb(80,80,80);
}
.menu_alerts .alert_counter {
- position:relative;
- font-size: 9px;
- top: -24px;
- background-color: rgb(140,0,0);
+ position: relative;
+ font-family: arial;
+ font-size: 8px;
+ top: -25px;
+ background-color: rgb(190,0,0);
color: white;
- padding: 3px;
width: 14px;
left: 10px;
line-height: 8px;
- border-radius: 20px;
padding-top: 2.5px;
height: 14px;
- opacity: 0.8;
text-align: center;
+
+ border: white solid 1px;
}
.menu_alerts .alert_counter:empty {
display: none;
@@ -94,7 +95,7 @@ li a
}
.selectedAlert .alertList {
position: absolute;
- top: 43px;
+ top: 51px;
display: block;
background: white;
font-size: 10px;
@@ -128,6 +129,10 @@ li a
width: calc(100% - 20px);
height: 30px;
}
+.alertItem .text {
+ font-size: 10px;
+ font-weight: bold;
+}
.container
{
@@ -186,7 +191,7 @@ li a
padding: 0px;
padding-top: 0px;
width: 100%;
- margin-bottom: 8px;
+ margin-bottom: 12px;
overflow: hidden;
word-wrap: break-word;
}
@@ -233,7 +238,7 @@ li a
width: 100%;
padding-left: 8px;
padding-right: 8px;
- padding-top: 17px;
+ padding-top: 12px;
padding-bottom: 12px;
font-weight: bold;
text-transform: uppercase;
@@ -254,6 +259,7 @@ li a
color: black;
}
.rowitem a:hover { color: silver; }
+.top_post { margin-bottom: 16px; }
.opthead { display: none; }
.col_left
@@ -484,17 +490,31 @@ button.username
.next_button { right: 14px; }
@media (max-width: 880px) {
- li { height: 25px; font-size: 15px; padding-left: 7px; }
- ul { height: 26px; margin-top: 8px; }
- .menu_left { padding-right: 7px; }
- .menu_right { padding-right: 7px; }
+ li {
+ height: 29px;
+ font-size: 15px;
+ padding-left: 9px;
+ padding-top: 2px;
+ padding-bottom: 6px;
+ }
+ ul {
+ height: 30px;
+ margin-top: 8px;
+ }
+ .menu_left { padding-right: 9px; padding-top: 2px; }
+ .menu_right { padding-right: 9px; }
+ .menu_alerts {
+ padding-left: 7px;
+ padding-right: 7px;
+ font-size: 18px;
+ }
+
body { padding-left: 4px; padding-right: 4px; margin: 0px !important; width: 100% !important; height: 100% !important; overflow-x: hidden; }
.container { width: auto; }
- .selectedAlert .alertList { top: 33px; right: 4px; }
+ .selectedAlert .alertList { top: 37px; right: 4px; }
}
@media (max-width: 810px) {
- li { font-weight: normal; text-transform: none; }
.rowitem { text-transform: none; }
/*.rowhead { font-family: arial; }
.menu_left { font-family: arial; }*/
@@ -502,19 +522,30 @@ button.username
.level { font-size: 17px; }
}
-@media (max-width: 620px) {
- li
- {
+@media (max-width: 700px) {
+ li {
padding-left: 5px;
- padding-top: 2px;
+ padding-top: 3px;
padding-bottom: 2px;
- height: 23px;
+ height: 25px;
}
- ul { height: 24px; }
- .menu_left { padding-right: 5px; }
+ li a { font-size: 14px; }
+ ul { height: 26px; }
+ .menu_left { padding-right: 5px; padding-top: 1px; }
.menu_right { padding-right: 5px; }
.menu_create_topic { display: none;}
- .menu_alerts { padding-left: 4px; padding-right: 4px; }
+
+ .menu_alerts {
+ padding-left: 4px;
+ padding-right: 4px;
+ font-size: 16px;
+ padding-top: 1px;
+ }
+ .menu_alerts .alert_counter {
+ top: -23px;
+ left: 8px;
+ }
+ .selectedAlert .alertList { top: 33px; }
.hide_on_mobile { display: none; }
.prev_button, .next_button { top: auto; bottom: 5px; }
@@ -561,4 +592,10 @@ button.username
text-align: center;
}
.container { width: 100% !important; }
-}
\ No newline at end of file
+}
+
+@media (max-width: 330px) {
+ li { padding-left: 6px; }
+ .menu_left { padding-right: 6px; }
+ .menu_alerts { border-left: none; }
+}
diff --git a/themes/tempra-simple/public/main.css b/themes/tempra-simple/public/main.css
index fcf1283c..8fbe01f2 100644
--- a/themes/tempra-simple/public/main.css
+++ b/themes/tempra-simple/public/main.css
@@ -10,7 +10,7 @@ body
padding-bottom: 8px;
}
-/* Patch for Edge */
+/* Patch for Edge, until they fix emojis in arial x.x */
@supports (-ms-ime-align:auto) {
.user_content { font-family: Segoe UI Emoji, arial; }
}
@@ -21,27 +21,27 @@ ul
{
padding-left: 0px;
padding-right: 0px;
- height: 28px;
+ height: 36px;
list-style-type: none;
border: 1px solid #ccc;
background-color: white;
+ margin-bottom: 12px;
}
li
{
- height: 26px;
+ height: 35px;
padding-left: 10px;
- padding-top: 5px;
- padding-bottom: 5px;
- font-weight: bold;
- text-transform: uppercase;
+ padding-top: 8px;
+ padding-bottom: 8px;
}
li:hover { background: rgb(250,250,250); }
li a
{
text-decoration: none;
- color: #515151;
+ /*color: #515151;*/
+ color: black;
+ font-size: 17px;
}
-/*li a:hover { color: #7a7a7a; }*/
.menu_left
{
float: left;
@@ -56,25 +56,24 @@ li a
}
.menu_alerts {
- padding-left: 7px;
+ /*padding-left: 7px;*/
+ font-size: 20px;
padding-top: 2px;
color: rgb(80,80,80);
}
.menu_alerts .alert_counter {
- position:relative;
- font-size: 9px;
- top: -24px;
- background-color: rgb(140,0,0);
+ position: relative;
+ font-size: 8px;
+ top: -25px;
+ background-color: rgb(190,0,0);
color: white;
- padding: 3px;
width: 14px;
left: 10px;
line-height: 8px;
- border-radius: 20px;
padding-top: 2.5px;
height: 14px;
- opacity: 0.8;
text-align: center;
+ border: white solid 1px;
}
.menu_alerts .alert_counter:empty {
display: none;
@@ -94,7 +93,7 @@ li a
}
.selectedAlert .alertList {
position: absolute;
- top: 43px;
+ top: 51px;
display: block;
background: white;
font-size: 10px;
@@ -128,6 +127,10 @@ li a
width: calc(100% - 20px);
height: 30px;
}
+.alertItem .text {
+ font-size: 10px;
+ font-weight: bold;
+}
.container
{
@@ -186,7 +189,7 @@ li a
padding: 0px;
padding-top: 0px;
width: 100%;
- margin-bottom: 8px;
+ margin-bottom: 12px;
overflow: hidden;
word-wrap: break-word;
}
@@ -253,6 +256,7 @@ li a
color: black;
}
.rowitem a:hover { color: silver; }
+.top_post { margin-bottom: 12px; }
.opthead { display: none; }
.col_left
@@ -274,16 +278,8 @@ li a
font-weight: bold;
text-transform: uppercase;
}
-.colitem.passive
-{
- font-weight: normal;
- text-transform: none;
-}
-.colitem a
-{
- text-decoration: none;
- color: black;
-}
+.colitem.passive { font-weight: normal; text-transform: none; }
+.colitem a { text-decoration: none; color: black; }
.colitem a:hover { color: silver; }
.formrow
@@ -298,11 +294,7 @@ li a
display: table;
}
.formrow:after { clear: both; }
-
-.formrow:not(:last-child)
-{
- border-bottom: 1px dotted #ccc;
-}
+.formrow:not(:last-child) { border-bottom: 1px dotted #ccc; }
.formitem
{
@@ -368,11 +360,7 @@ button
border-width: 1px;
font-size: 15px;
}
-button.username
-{
- position: relative;
- top: -0.25px;
-}
+button.username { position: relative; top: -0.25px; }
.username.level { color: #303030; }
.username.real_username { color: #404040; font-size: 17px; }
.username.real_username:hover { color: black; }
@@ -480,33 +468,61 @@ button.username
.next_button { right: 14px; }
@media (max-width: 880px) {
- li { height: 25px; font-size: 15px; padding-left: 7px; }
- ul { height: 26px; margin-top: 8px; }
- .menu_left { padding-right: 7px; }
- .menu_right { padding-right: 7px; }
- body { padding-left: 4px; padding-right: 4px; margin: 0px !important; width: 100% !important; height: 100% !important; overflow-x: hidden; }
+ li {
+ height: 29px;
+ font-size: 15px;
+ padding-left: 9px;
+ padding-top: 6px;
+ padding-bottom: 6px;
+ }
+ ul {
+ height: 30px;
+ margin-top: 8px;
+ }
+ .menu_left { padding-right: 9px; }
+ .menu_right { padding-right: 9px; }
+ .menu_alerts {
+ padding-left: 7px;
+ padding-right: 7px;
+ font-size: 18px;
+ }
+
+ body {
+ padding-left: 4px;
+ padding-right: 4px;
+ margin: 0px !important;
+ width: 100% !important;
+ height: 100% !important;
+ overflow-x: hidden;
+ }
.container { width: auto; }
- .selectedAlert .alertList { top: 33px; right: 4px; }
+ .selectedAlert .alertList { top: 37px; right: 4px; }
}
@media (max-width: 810px) {
- li { font-weight: normal; text-transform: none; }
.rowitem { text-transform: none; }
}
-@media (max-width: 620px) {
- li
- {
+@media (max-width: 680px) {
+ li {
padding-left: 5px;
- padding-top: 2px;
+ padding-top: 3px;
padding-bottom: 2px;
- height: 23px;
+ height: 25px;
}
- ul { height: 24px; }
- .menu_left { padding-right: 5px; }
- .menu_right { padding-right: 5px; }
+ li a { font-size: 14px; }
+ ul { height: 26px; }
+ .menu_left { padding-right: 7px; }
+ .menu_right { padding-right: 7px; }
.menu_create_topic { display: none;}
- .menu_alerts { padding-left: 4px; padding-right: 4px; }
+
+ .menu_alerts {
+ padding-left: 4px;
+ padding-right: 4px;
+ font-size: 16px;
+ padding-top: 1px;
+ }
+ .selectedAlert .alertList { top: 33px; }
.hide_on_mobile { display: none !important; }
.prev_button, .next_button { top: auto; bottom: 5px; }
@@ -515,12 +531,9 @@ button.username
}
@media (max-width: 470px) {
- .menu_overview { display: none; }
- .menu_profile { display: none; }
+ .menu_overview, .menu_profile { display: none; }
.hide_on_micro { display: none !important; }
- .post_container {
- overflow: visible !important;
- }
+ .post_container { overflow: visible !important; }
.post_item {
background-position: 0px 2px !important;
background-size: 64px 64px !important;
@@ -550,4 +563,9 @@ button.username
text-align: center;
}
.container { width: 100% !important; }
-}
\ No newline at end of file
+}
+
+@media (max-width: 330px) {
+ li { padding-left: 6px; }
+ .menu_left { padding-right: 6px; }
+}
diff --git a/utils.go b/utils.go
index b2d83ef6..1f18fcb2 100644
--- a/utils.go
+++ b/utils.go
@@ -1,15 +1,17 @@
package main
-import "fmt"
-import "time"
-import "os"
-import "math"
-import "strings"
-import "unicode"
-import "strconv"
-import "encoding/base64"
-import "crypto/rand"
-import "net/smtp"
+import (
+ "fmt"
+ "time"
+ "os"
+ "math"
+ "strings"
+ "unicode"
+ "strconv"
+ "encoding/base64"
+ "crypto/rand"
+ "net/smtp"
+)
type Version struct
{
@@ -60,36 +62,23 @@ func relative_time(in string) (string, error) {
case months > 11:
//return t.Format("Mon Jan 2 2006"), err
return t.Format("Jan 2 2006"), err
- case months > 1:
- return fmt.Sprintf("%d months ago", months), err
- case months == 1:
- return "a month ago", err
- case weeks > 1:
- return fmt.Sprintf("%d weeks ago", weeks), err
- case int(hours / 24) == 7:
- return "a week ago", err
- case int(hours / 24) == 1:
- return "1 day ago", err
- case int(hours / 24) > 1:
- return fmt.Sprintf("%d days ago", int(hours / 24)), err
- case seconds <= 1:
- return "a moment ago", err
- case seconds < 60:
- return fmt.Sprintf("%d seconds ago", int(seconds)), err
- case seconds < 120:
- return "a minute ago", err
- case seconds < 3600:
- return fmt.Sprintf("%d minutes ago", int(seconds / 60)), err
- case seconds < 7200:
- return "an hour ago", err
- default:
- return fmt.Sprintf("%d hours ago", int(seconds / 60 / 60)), err
+ case months > 1: return fmt.Sprintf("%d months ago", months), err
+ case months == 1: return "a month ago", err
+ case weeks > 1: return fmt.Sprintf("%d weeks ago", weeks), err
+ case int(hours / 24) == 7: return "a week ago", err
+ case int(hours / 24) == 1: return "1 day ago", err
+ case int(hours / 24) > 1: return fmt.Sprintf("%d days ago", int(hours / 24)), err
+ case seconds <= 1: return "a moment ago", err
+ case seconds < 60: return fmt.Sprintf("%d seconds ago", int(seconds)), err
+ case seconds < 120: return "a minute ago", err
+ case seconds < 3600: return fmt.Sprintf("%d minutes ago", int(seconds / 60)), err
+ case seconds < 7200: return "an hour ago", err
+ default: return fmt.Sprintf("%d hours ago", int(seconds / 60 / 60)), err
}
}
func convert_byte_unit(bytes float64) (float64,string) {
- switch
- {
+ switch {
case bytes >= float64(terabyte): return bytes / float64(terabyte), "TB"
case bytes >= float64(gigabyte): return bytes / float64(gigabyte), "GB"
case bytes >= float64(megabyte): return bytes / float64(megabyte), "MB"
@@ -113,6 +102,26 @@ func convert_byte_in_unit(bytes float64,unit string) (count float64) {
return
}
+func convert_unit(num int) (int,string) {
+ switch {
+ case num >= 1000000000000: return 0, "∞"
+ case num >= 1000000000: return num / 1000000000, "B"
+ case num >= 1000000: return num / 1000000, "M"
+ case num >= 1000: return num / 1000, "K"
+ default: return num, ""
+ }
+}
+
+func convert_friendly_unit(num int) (int,string) {
+ switch {
+ case num >= 1000000000000: return 0, " zillion"
+ case num >= 1000000000: return num / 1000000000, " billion"
+ case num >= 1000000: return num / 1000000, " million"
+ case num >= 1000: return num / 1000, " thousand"
+ default: return num, ""
+ }
+}
+
func SendEmail(email string, subject string, msg string) (res bool) {
// This hook is useful for plugin_sendmail or for testing tools. Possibly to hook it into some sort of mail server?
if vhooks["email_send_intercept"] != nil {
diff --git a/websockets.go b/websockets.go
index 1027b7aa..44585417 100644
--- a/websockets.go
+++ b/websockets.go
@@ -129,7 +129,7 @@ func ws_page_responses(ws_user *WS_User, page []byte) {
switch(string(page)) {
case "/panel/":
//fmt.Println("/panel/ WS Route")
- w, err := ws_user.conn.NextWriter(websocket.TextMessage)
+ /*w, err := ws_user.conn.NextWriter(websocket.TextMessage)
if err != nil {
//fmt.Println(err.Error())
return
@@ -143,7 +143,7 @@ func ws_page_responses(ws_user *WS_User, page []byte) {
w.Write([]byte("set #dash-totonline " + strconv.Itoa(totonline) + " online\r"))
w.Write([]byte("set #dash-gonline " + strconv.Itoa(gonline) + " guests online\r"))
w.Write([]byte("set #dash-uonline " + strconv.Itoa(uonline) + " users online\r"))
- w.Close()
+ w.Close()*/
// Listen for changes and inform the admins...
admin_stats_mutex.Lock()
@@ -176,12 +176,15 @@ func admin_stats_ticker() {
var last_cpu_perc int = -1
var last_available_ram int64 = -1
var no_stat_updates bool = false
+ var no_ram_updates bool = false
var onlineColour, onlineGuestsColour, onlineUsersColour, cpustr, cpuColour, ramstr, ramColour string
var cpuerr, ramerr error
var memres *mem.VirtualMemoryStat
var cpu_perc []float64
+ var totunit, uunit, gunit string
+
AdminStatLoop:
for {
//fmt.Println("tick tock")
@@ -200,7 +203,8 @@ AdminStatLoop:
// It's far more likely that the CPU Usage will change than the other stats, so we'll optimise them seperately...
no_stat_updates = (uonline == last_uonline && gonline == last_gonline && totonline == last_totonline)
- if no_stat_updates && int(cpu_perc[0]) == last_cpu_perc && last_available_ram == int64(memres.Available) {
+ no_ram_updates = (last_available_ram == int64(memres.Available))
+ if int(cpu_perc[0]) == last_cpu_perc && no_stat_updates && no_ram_updates {
time.Sleep(time.Second)
continue
}
@@ -229,6 +233,10 @@ AdminStatLoop:
} else {
onlineUsersColour = "stat_red"
}
+
+ totonline, totunit = convert_friendly_unit(totonline)
+ uonline, uunit = convert_friendly_unit(uonline)
+ gonline, gunit = convert_friendly_unit(gonline)
}
if cpuerr != nil {
@@ -245,33 +253,35 @@ AdminStatLoop:
}
}
- if ramerr != nil {
- ramstr = "Unknown"
- } else {
- total_count, total_unit := convert_byte_unit(float64(memres.Total))
- used_count := convert_byte_in_unit(float64(memres.Total - memres.Available),total_unit)
-
- // Round totals with .9s up, it's how most people see it anyway. Floats are notoriously imprecise, so do it off 0.85
- var totstr string
- if (total_count - float64(int(total_count))) > 0.85 {
- used_count += 1.0 - (total_count - float64(int(total_count)))
- totstr = strconv.Itoa(int(total_count) + 1)
+ if !no_ram_updates {
+ if ramerr != nil {
+ ramstr = "Unknown"
} else {
- totstr = fmt.Sprintf("%.1f",total_count)
- }
-
- if used_count > total_count {
- used_count = total_count
- }
- ramstr = fmt.Sprintf("%.1f",used_count) + " / " + totstr + total_unit
-
- ramperc := ((memres.Total - memres.Available) * 100) / memres.Total
- if ramperc < 50 {
- ramColour = "stat_green"
- } else if ramperc < 75 {
- ramColour = "stat_orange"
- } else {
- ramColour = "stat_red"
+ total_count, total_unit := convert_byte_unit(float64(memres.Total))
+ used_count := convert_byte_in_unit(float64(memres.Total - memres.Available),total_unit)
+
+ // Round totals with .9s up, it's how most people see it anyway. Floats are notoriously imprecise, so do it off 0.85
+ var totstr string
+ if (total_count - float64(int(total_count))) > 0.85 {
+ used_count += 1.0 - (total_count - float64(int(total_count)))
+ totstr = strconv.Itoa(int(total_count) + 1)
+ } else {
+ totstr = fmt.Sprintf("%.1f",total_count)
+ }
+
+ if used_count > total_count {
+ used_count = total_count
+ }
+ ramstr = fmt.Sprintf("%.1f",used_count) + " / " + totstr + total_unit
+
+ ramperc := ((memres.Total - memres.Available) * 100) / memres.Total
+ if ramperc < 50 {
+ ramColour = "stat_green"
+ } else if ramperc < 75 {
+ ramColour = "stat_orange"
+ } else {
+ ramColour = "stat_red"
+ }
}
}
@@ -290,20 +300,22 @@ AdminStatLoop:
}
if !no_stat_updates {
- w.Write([]byte("set #dash-totonline " + strconv.Itoa(totonline) + " online\r"))
- w.Write([]byte("set #dash-gonline " + strconv.Itoa(gonline) + " guests online\r"))
- w.Write([]byte("set #dash-uonline " + strconv.Itoa(uonline) + " users online\r"))
+ w.Write([]byte("set #dash-totonline " + strconv.Itoa(totonline) + totunit + " online\r"))
+ w.Write([]byte("set #dash-gonline " + strconv.Itoa(gonline) + gunit + " guests online\r"))
+ w.Write([]byte("set #dash-uonline " + strconv.Itoa(uonline) + uunit + " users online\r"))
- w.Write([]byte("set-class #dash-totonline grid_stat " + onlineColour + "\r"))
- w.Write([]byte("set-class #dash-gonline grid_stat " + onlineGuestsColour + "\r"))
- w.Write([]byte("set-class #dash-uonline grid_stat " + onlineUsersColour + "\r"))
+ w.Write([]byte("set-class #dash-totonline grid_item grid_stat " + onlineColour + "\r"))
+ w.Write([]byte("set-class #dash-gonline grid_item grid_stat " + onlineGuestsColour + "\r"))
+ w.Write([]byte("set-class #dash-uonline grid_item grid_stat " + onlineUsersColour + "\r"))
}
w.Write([]byte("set #dash-cpu CPU: " + cpustr + "%\r"))
- w.Write([]byte("set-class #dash-cpu grid_istat " + cpuColour + "\r"))
+ w.Write([]byte("set-class #dash-cpu grid_item grid_istat " + cpuColour + "\r"))
- w.Write([]byte("set #dash-ram RAM: " + ramstr + "\r"))
- w.Write([]byte("set-class #dash-ram grid_istat " + ramColour + "\r"))
+ if !no_ram_updates {
+ w.Write([]byte("set #dash-ram RAM: " + ramstr + "\r"))
+ w.Write([]byte("set-class #dash-ram grid_item grid_istat " + ramColour + "\r"))
+ }
w.Close()
}