diff --git a/_sakura/changelog.json b/_sakura/changelog.json index 468f0c8..20d4228 100644 --- a/_sakura/changelog.json +++ b/_sakura/changelog.json @@ -2924,6 +2924,32 @@ "user": "Flashwave" } + ], + + "20150927": [ + + "eminence", + { + "type": "FIX", + "change": "Fixed age being displayed on profile despite the user not having a year set.", + "user": "Flashwave" + }, + { + "type": "FIX", + "change": "Fixed the same error being logged multiple times.", + "user": "Flashwave" + }, + { + "type": "REM", + "change": "Removed the scroll to top button.", + "user": "Flashwave" + }, + { + "type": "ADD", + "change": "Added some fundamentals for the on-site chat.", + "user": "Flashwave" + } + ] } diff --git a/_sakura/components/Main.php b/_sakura/components/Main.php index 5e5cd6c..48bc493 100644 --- a/_sakura/components/Main.php +++ b/_sakura/components/Main.php @@ -147,7 +147,7 @@ class Main [ 'backtrace' => [$backtrace, '=', true], 'error_string' => [$errstr, '='], - 'error_line' => [$errstr, '='], + 'error_line' => [$errline, '='], ] )) { // If so assign the errid diff --git a/_sakura/sakura.php b/_sakura/sakura.php index c897aae..f303585 100644 --- a/_sakura/sakura.php +++ b/_sakura/sakura.php @@ -8,7 +8,7 @@ namespace Sakura; // Define Sakura version -define('SAKURA_VERSION', '20150926'); +define('SAKURA_VERSION', '20150927'); define('SAKURA_VLABEL', 'Eminence'); define('SAKURA_COLOUR', '#6C3082'); define('SAKURA_STABLE', false); diff --git a/_sakura/templates/yuuno/global/chat.tpl b/_sakura/templates/yuuno/global/chat.tpl new file mode 100644 index 0000000..34286f5 --- /dev/null +++ b/_sakura/templates/yuuno/global/chat.tpl @@ -0,0 +1,30 @@ +{% block content %} +
+
+
+
+ Online Users +
+
+
+
+
+
Hanyuu
+
Display actions
+
+
+
+
+
+{% endblock %} + +{% block style %} + +{% endblock %} + +{% block js %} + + +{% endblock %} diff --git a/_sakura/templates/yuuno/global/master.tpl b/_sakura/templates/yuuno/global/master.tpl index 1be95fa..cf67ce6 100644 --- a/_sakura/templates/yuuno/global/master.tpl +++ b/_sakura/templates/yuuno/global/master.tpl @@ -62,11 +62,6 @@ // Space for things that need to happen onload window.addEventListener("load", function() { - // Alter the go to top button - var gotop = document.getElementById('scrollToTop'); - gotop.setAttribute('href', 'javascript:void(0);'); - gotop.setAttribute('onclick', 'scrollToTop();'); - {% if session.checkLogin %} // Convert href to object in logout link prepareAjaxLink('headerLogoutLink', 'submitPost', ', true, "Logging out..."'); @@ -234,37 +229,8 @@ {% block content %}

{{ php.self }} is now printing!

{% endblock %} -{# -
-
-
- Online Users -
-
-
-
-
-
Hanyuu
-
Display actions
-
-
-
-
-
-
Flashwave
-
Display actions
-
-
-
-
-
-#} -
-{# - - #} - -
+ + {# include 'global/chat.tpl' #} +{% endblock %} + +{% block js %} {% endblock %} diff --git a/_sakura/templates/yuuno/profile/index.tpl b/_sakura/templates/yuuno/profile/index.tpl index 85817e7..4971798 100644 --- a/_sakura/templates/yuuno/profile/index.tpl +++ b/_sakura/templates/yuuno/profile/index.tpl @@ -46,7 +46,7 @@ {% endif %}
{{ profile.data.username }} has {% if not profile.forumStats.posts %}no{% else %}{{ profile.forumStats.posts }}{% endif %} forum post{% if profile.forumStats.posts != 1 %}s{% endif %}. - {% if profile.data.birthday != '0000-00-00' %} + {% if profile.data.birthday != '0000-00-00' and profile.data.birthday|split('-')[0] > 0 %}
Age {{ profile.elapsed(' old').birth }} {% endif %} {% if profile.profileFields %} diff --git a/public/content/data/yuuno/css/chat.css b/public/content/data/yuuno/css/chat.css new file mode 100644 index 0000000..631a043 --- /dev/null +++ b/public/content/data/yuuno/css/chat.css @@ -0,0 +1,106 @@ +/* + * Site chat styling + */ +#chat > #chatOnlineUsers { + position: fixed; + right: -300px; + top: 0; + bottom: 0; + width: 300px; + background: rgba(0, 0, 0, .7); + color: #FFF; + z-index: 1; + box-shadow: 0 0 2px #222; + overflow: auto; + transition: .5s; + visibility: hidden; +} + +#chat > #chatOnlineUsers.open { + right: 0; + visibility: visible; +} + +#chat > #chatOnlineUsers > div { + margin: 5px; +} + +#chat > #chatOnlineUsers > .chatOnlineListTitle { + background: none; + font-size: 2em; + line-height: 1.2em; + font-family: "SegoeUI-Light", sans-serif; + padding: 5px; +} + +#chatUserList > div { + display: flex; + align-items: center; + background: rgba(0, 0, 0, .7); + padding: 5px; + border-radius: 5px; +} + +#chatUserList > div:not(:last-child) { + margin-bottom: 5px; +} + +#chatUserList > div > .avatar { + width: 50px; + height: 50px; + background: transparent url("/content/pixel.png") no-repeat scroll left center / contain; + border-radius: 5px; +} + +#chatUserList > div > .options { + margin-left: 10px; +} + +#chatUserList > div > .options > .actions { + list-style: none; + font-size: .8em; + line-height: 1.2em; +} + +#chatAccessButtons { + position: fixed; + bottom: 0; + right: 0; + z-index: 2; +} + +#chatAccessButtons > a { + display: flex; + flex-direction: column; + margin: 5px 0; + background: rgba(0, 0, 0, .5); + color: #FFF; + font-size: 2em; + width: 40px; + height: 40px; + line-height: 40px; + border-radius: 5px 0 0 5px; + text-decoration: none; + text-align: center; + text-shadow: 0 0 2px #FFF; + position: relative; + transition: .5s; + box-shadow: 0 0 2px #222; + cursor: pointer; +} + +#chatAccessButtons > a:hover { + text-shadow: 0 0 5px #FFF; +} + +#chatAccessButtons > a:active { + text-shadow: 0 0 7px #FFF; +} + +#chatAccessButtons > a.enter { + animation: slideInFromRight 1 .6s, fadeIn 1 .6s; +} + +#chatAccessButtons > a.exit { + animation: slideOutToBottom 1 .6s, fadeOut 1 .6s; +} diff --git a/public/content/data/yuuno/css/yuuno.css b/public/content/data/yuuno/css/yuuno.css index 61bb2ae..6e520c4 100644 --- a/public/content/data/yuuno/css/yuuno.css +++ b/public/content/data/yuuno/css/yuuno.css @@ -422,48 +422,6 @@ a.default:active { } -#actionBtns { - position: fixed; - bottom: 0; - right: 0; - z-index: 4; -} - -#actionBtns > a { - display: flex; - flex-direction: column; - margin: 5px 0; - background: rgba(0, 0, 0, .5); - color: #FFF; - font-size: 2em; - width: 40px; - height: 40px; - line-height: 40px; - border-radius: 5px 0 0 5px; - text-decoration: none; - text-align: center; - text-shadow: 0 0 2px #FFF; - position: relative; - transition: .5s; - box-shadow: 0 0 2px #222; -} - -#actionBtns > a:hover { - text-shadow: 0 0 5px #FFF; -} - -#actionBtns > a:active { - text-shadow: 0 0 7px #FFF; -} - -#actionBtns > a.enter { - animation: slideInFromRight 1 .6s, fadeIn 1 .6s; -} - -#actionBtns > a.exit { - animation: slideOutToBottom 1 .6s, fadeOut 1 .6s; -} - #headerLoginForm { background: rgba(211, 191, 255, .8); border: 1px solid #9475B2; @@ -548,63 +506,6 @@ a.default:active { text-shadow: 0 0 8px #8364A1; } -/* - * Site chat styling - */ -#chat > #chatOnlineUsers { - position: fixed; - right: 0; - top: 0; - bottom: 0; - width: 300px; - background: rgba(0, 0, 0, .7); - color: #FFF; - z-index: 3; - box-shadow: 0 0 2px #222; - overflow: auto; -} - -#chat > #chatOnlineUsers > div { - margin: 5px; -} - -#chat > #chatOnlineUsers > .chatOnlineListTitle { - background: none; - font-size: 2em; - line-height: 1.2em; - font-family: "SegoeUI-Light", sans-serif; - padding: 5px; -} - -#chatUserList > div { - display: flex; - align-items: center; - background: rgba(0, 0, 0, .7); - padding: 5px; - border-radius: 5px; -} - -#chatUserList > div:not(:last-child) { - margin-bottom: 5px; -} - -#chatUserList > div > .avatar { - width: 50px; - height: 50px; - background: transparent url("/content/pixel.png") no-repeat scroll left center / contain; - border-radius: 5px; -} - -#chatUserList > div > .options { - margin-left: 10px; -} - -#chatUserList > div > .options > .actions { - list-style: none; - font-size: .8em; - line-height: 1.2em; -} - /* * Site header styling */ diff --git a/public/content/data/yuuno/js/chat.js b/public/content/data/yuuno/js/chat.js new file mode 100644 index 0000000..54bdfb7 --- /dev/null +++ b/public/content/data/yuuno/js/chat.js @@ -0,0 +1,57 @@ +/* + * On-site Sock Chat client + */ + +var Chat = { + + server: null, + chatContainer: null, + accessButtons: null, + onlineList: null, + connected: false, + + connect: function(server, force) { + // Set server + this.server = server; + + // Set required variables + this.chatContainer = document.getElementById('chat'); + this.accessButtons = document.getElementById('chatAccessButtons'); + this.onlineList = document.getElementById('chatOnlineUsers'); + + // Check if we haven't already established a connection + if(this.connected && !force) { + this.accessButtons.innerHTML += ''; + } + + // Attempt to connect to the server + this.accessButtons.innerHTML = '
'; + + // Grab connection indicator + var connectionIndicator = document.getElementById('chatConnecting'); + + setTimeout(function() { + if(Chat.connected) { + connectionIndicator.setAttribute('title', 'Connected!'); + connectionIndicator.children[0].className = 'fa fa-chain'; + var accessButtonsCont = ''; + } else { + connectionIndicator.setAttribute('title', 'Failed to connect, try again later!'); + connectionIndicator.children[0].className = 'fa fa-chain-broken'; + var accessButtonsCont = ''; + } + setTimeout(function() { + Chat.accessButtons.innerHTML = accessButtonsCont; + }, 500); + }, 500); + }, + + toggleOnlineList: function() { + this.onlineList.className = this.onlineList.className != 'open' ? 'open' : ''; + }, + + toggleTicker: function() { + this.chatTicker.className = this.chatTicker.className != 'open' ? 'open' : ''; + } + +}; diff --git a/public/content/data/yuuno/js/yuuno.js b/public/content/data/yuuno/js/yuuno.js index 0e04c4b..c0e48db 100644 --- a/public/content/data/yuuno/js/yuuno.js +++ b/public/content/data/yuuno/js/yuuno.js @@ -864,49 +864,3 @@ var n = this, j = (j = i.length) > 3 ? j % 3 : 0; return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ""); }; - -// Event watcher for the scroll-to-top button -window.onscroll = function() { - - // Assign the gotop button to a variable - var gotop = document.getElementById('scrollToTop'); - - // If the vertical offset of the page is below 112px (just below the header) keep the button hidden - if(this.pageYOffset < 1) { - - // Check if the "exit" is in the classes and if it isn't continue - if(gotop.className.indexOf('exit') < 0) { - - // Replace the enter with exit (for the animation) - gotop.className = gotop.className.replace('enter', ''); - gotop.className = gotop.className + ' exit'; - - // Check if hidden is set and if not continue - if(gotop.className.indexOf('hidden') < 0) { - - // Set a timeout to add the hidden class after 600ms - setTimeout(function() { - if(this.pageYOffset < 1) { - gotop.className = gotop.className + ' hidden'; - } - }, 600); - } - - } - - // Else show the button - } else if(this.pageYOffset > 0) { - - // Check if enter is set - if(gotop.className.indexOf('enter') < 0) { - - // Remove the hidden and exit classes and add the enter class - gotop.className = gotop.className.replace('hidden', ''); - gotop.className = gotop.className.replace('exit', ''); - gotop.className = gotop.className + ' enter'; - - } - - } - -};