r20160121
This commit is contained in:
parent
25f032b470
commit
8a39677267
24 changed files with 95 additions and 2649 deletions
|
@ -5,7 +5,6 @@
|
|||
"ext-json": "*",
|
||||
"twig/twig": "*",
|
||||
"phpmailer/phpmailer": "*",
|
||||
"erusev/parsedown": "*",
|
||||
"paypal/rest-api-sdk-php": "*",
|
||||
"jbbcode/jbbcode": "^1.3"
|
||||
}
|
||||
|
|
|
@ -29,9 +29,6 @@ class News
|
|||
$this->posters[$post['user_id']] = User::construct($post['user_id']);
|
||||
}
|
||||
|
||||
// Parse the news post
|
||||
$post['news_content_parsed'] = Utils::mdParse($post['news_content']);
|
||||
|
||||
// Attach the poster
|
||||
$post['news_poster'] = $this->posters[$post['user_id']];
|
||||
|
||||
|
|
|
@ -692,13 +692,13 @@ class User
|
|||
// Get a user's userpage
|
||||
public function userPage()
|
||||
{
|
||||
return Utils::mdParse($this->page, true);
|
||||
return BBcode::toHTML(htmlentities($this->page));
|
||||
}
|
||||
|
||||
// Get a user's signature
|
||||
public function signature()
|
||||
{
|
||||
return BBcode::toHTML($this->signature);
|
||||
return BBcode::toHTML(htmlentities($this->signature));
|
||||
}
|
||||
|
||||
// Get username change history
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
|
||||
namespace Sakura;
|
||||
|
||||
use Parsedown;
|
||||
use PHPMailer;
|
||||
|
||||
/**
|
||||
|
@ -14,16 +13,6 @@ use PHPMailer;
|
|||
*/
|
||||
class Utils
|
||||
{
|
||||
// Parse markdown
|
||||
public static function mdParse($text, $escape = false)
|
||||
{
|
||||
$pd = new Parsedown();
|
||||
|
||||
return $escape ?
|
||||
$pd->setMarkupEscaped(true)->text($text) :
|
||||
$pd->text($text);
|
||||
}
|
||||
|
||||
// Get emoticons
|
||||
public static function getEmotes()
|
||||
{
|
||||
|
@ -270,22 +259,8 @@ class Utils
|
|||
// Subject line
|
||||
$mail->Subject = $subject;
|
||||
|
||||
// Set the mail type to HTML
|
||||
$mail->isHTML(true);
|
||||
|
||||
// Set email contents
|
||||
$htmlMail = file_get_contents(ROOT . 'templates/htmlEmail.html');
|
||||
|
||||
// Replace template tags
|
||||
$htmlMail = str_replace('{{ sitename }}', Config::get('sitename'), $htmlMail);
|
||||
$htmlMail = str_replace('{{ siteurl }}', '//' . Config::get('url_main'), $htmlMail);
|
||||
$htmlMail = str_replace('{{ contents }}', self::mdParse($body), $htmlMail);
|
||||
|
||||
// Set HTML body
|
||||
$mail->Body = $htmlMail;
|
||||
|
||||
// Set fallback body
|
||||
$mail->AltBody = $body;
|
||||
// Set body
|
||||
$mail->Body = $body;
|
||||
|
||||
// Send the message
|
||||
$send = $mail->send();
|
||||
|
|
|
@ -16,11 +16,6 @@
|
|||
@import url('/content/fonts/exo2-0-light/font.css'); /* Exo 2.0 Light */
|
||||
@import url('/content/fonts/exo2-0-lightitalic/font.css'); /* Exo 2.0 Light Italic */
|
||||
|
||||
/*
|
||||
* Import markdown stylesheet
|
||||
*/
|
||||
@import url('markdown.css');
|
||||
|
||||
/*
|
||||
* Keyframe definitions
|
||||
*/
|
||||
|
|
|
@ -8,7 +8,9 @@
|
|||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.bbcode h1 {
|
||||
.bbcode h1,
|
||||
.bbcode h2,
|
||||
.bbcode h3 {
|
||||
text-shadow: 0 0 5px #8364A1;
|
||||
color: #614390;
|
||||
}
|
||||
|
@ -30,7 +32,7 @@
|
|||
border: 1px solid #9475b2;
|
||||
border-bottom: 0;
|
||||
border-right: 0;
|
||||
background: linear-gradient(90deg, #B697d4, transparent) transparent;
|
||||
background: #D8B9F6;
|
||||
margin: .5em;
|
||||
}
|
||||
|
||||
|
@ -44,7 +46,7 @@
|
|||
|
||||
.bbcode blockquote > .quote {
|
||||
margin-left: .5em;
|
||||
padding-bottom: .5em;
|
||||
padding-bottom: .2em;
|
||||
}
|
||||
|
||||
.bbcode a {
|
||||
|
|
|
@ -1,121 +0,0 @@
|
|||
/*
|
||||
* Markdown Styling
|
||||
*/
|
||||
@charset "utf-8";
|
||||
|
||||
.markdown {
|
||||
line-height: 1.4;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.markdown a {
|
||||
color: #00F;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.markdown a:hover {
|
||||
color: #00F;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.markdown a:active {
|
||||
color: #F00;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.markdown h1,
|
||||
.markdown h2,
|
||||
.markdown h3,
|
||||
.markdown h4,
|
||||
.markdown h5,
|
||||
.markdown h6 {
|
||||
border-bottom: 1px solid;
|
||||
padding-bottom: 5px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.markdown p,
|
||||
.markdown blockquote,
|
||||
.markdown ul,
|
||||
.markdown ol,
|
||||
.markdown dl,
|
||||
.markdown table,
|
||||
.markdown pre {
|
||||
margin-top: 0;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.markdown hr {
|
||||
border: 0;
|
||||
height: 1px;
|
||||
color: #000;
|
||||
background: #000;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.markdown table {
|
||||
display: block;
|
||||
width: 100%;
|
||||
overflow: auto;
|
||||
word-break: keep-all;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
.markdown table tr {
|
||||
border-spacing: 0;
|
||||
border: 1px solid #9475B2;
|
||||
}
|
||||
|
||||
.markdown table th,
|
||||
.markdown table td {
|
||||
padding: 6px 13px;
|
||||
border: 1px solid #9475B2;
|
||||
}
|
||||
|
||||
.markdown table tr:nth-child(even) {
|
||||
background: #B19DDD;
|
||||
}
|
||||
|
||||
.markdown hr {
|
||||
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAYAAACtBE5DAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OENDRjNBN0E2NTZBMTFFMEI3QjRBODM4NzJDMjlGNDgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OENDRjNBN0I2NTZBMTFFMEI3QjRBODM4NzJDMjlGNDgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4Q0NGM0E3ODY1NkExMUUwQjdCNEE4Mzg3MkMyOUY0OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4Q0NGM0E3OTY1NkExMUUwQjdCNEE4Mzg3MkMyOUY0OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqqezsUAAAAfSURBVHjaYmRABcYwBiM2QSA4y4hNEKYDQxAEAAIMAHNGAzhkPOlYAAAAAElFTkSuQmCC') repeat-x scroll 0 0 transparent;
|
||||
border: 0 none;
|
||||
color: #CCC;
|
||||
height: 4px;
|
||||
padding: 0;
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
.markdown blockquote {
|
||||
border-left: 4px solid #9475B2;
|
||||
padding: 0 15px;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.markdown blockquote > blockquote {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.markdown blockquote > :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.markdown pre {
|
||||
word-wrap: normal;
|
||||
}
|
||||
|
||||
.markdown .highlight pre,
|
||||
.markdown pre {
|
||||
background: #B19DDD;
|
||||
border: 1px solid #9475B2;
|
||||
font-size: 13px;
|
||||
line-height: 19px;
|
||||
overflow: auto;
|
||||
padding: 6px 10px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.markdown ul,
|
||||
.markdown ol {
|
||||
margin-left: 40px;
|
||||
}
|
|
@ -13,9 +13,8 @@
|
|||
@import url('/content/fonts/segoeui/font.css');
|
||||
@import url('/content/fonts/segoeui-light/font.css');
|
||||
|
||||
/* Import bbcode and markdown specific style */
|
||||
/* Import bbcode specific style */
|
||||
@import url('bbcode.css');
|
||||
@import url('markdown.css');
|
||||
|
||||
/*
|
||||
* Animation Keyframes
|
||||
|
@ -733,6 +732,12 @@ a.default:active {
|
|||
font-size: .8em;
|
||||
}
|
||||
|
||||
.ad-container img {
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.ad-container a {
|
||||
color: #22E;
|
||||
text-decoration: none;
|
||||
|
@ -752,7 +757,12 @@ a.default:active {
|
|||
|
||||
.ad-container.ad-sidebar > .ad-box {
|
||||
text-align: center;
|
||||
padding: 2px;
|
||||
padding: 6px 2px;
|
||||
}
|
||||
|
||||
.ad-container.ad-sidebar img {
|
||||
max-height: 250px;
|
||||
max-width: 250px;
|
||||
}
|
||||
|
||||
.ad-container.ad-footer {
|
||||
|
@ -761,6 +771,11 @@ a.default:active {
|
|||
text-align: center;
|
||||
}
|
||||
|
||||
.ad-container.ad-footer img {
|
||||
max-height: 90px;
|
||||
max-width: 728px;
|
||||
}
|
||||
|
||||
.ad-container.ad-footer > .ad-box {
|
||||
display: inline-block;
|
||||
padding: 2px;
|
||||
|
@ -1198,10 +1213,15 @@ a.default:active {
|
|||
}
|
||||
|
||||
.news-body {
|
||||
font-size: 10pt;
|
||||
font-size: .9em;
|
||||
padding: 2px 0 0 3px;
|
||||
}
|
||||
|
||||
.news-body p {
|
||||
margin: 0;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.news-post-time {
|
||||
font-size: 8pt;
|
||||
padding: 6px 15px;
|
||||
|
|
|
@ -378,56 +378,6 @@ function registerVarCheck(id, mode, option) {
|
|||
input.className = input.className.replace(check ? 'red' : 'green', '');
|
||||
}
|
||||
}
|
||||
// Initialising the element parallax functionality
|
||||
function initialiseParallax(id) {
|
||||
// Assign the element to a variable
|
||||
var parallax = document.getElementById(id);
|
||||
// Set proper position values
|
||||
parallax.style.top = '-2.5px';
|
||||
parallax.style.bottom = '-2.5px';
|
||||
parallax.style.left = '-2.5px';
|
||||
parallax.style.right = '-2.5px';
|
||||
// Add the event listener to the body element
|
||||
document.addEventListener("mousemove", function (e) {
|
||||
// Alter the position of the parallaxed element
|
||||
parallax.style.top = convertParallaxPositionValue(e.clientY, true, false) + 'px';
|
||||
parallax.style.bottom = convertParallaxPositionValue(e.clientY, true, true) + 'px';
|
||||
parallax.style.left = convertParallaxPositionValue(e.clientX, false, false) + 'px';
|
||||
parallax.style.right = convertParallaxPositionValue(e.clientX, false, true) + 'px';
|
||||
});
|
||||
}
|
||||
// Converting the position value of the mouseover to a pixel value
|
||||
function convertParallaxPositionValue(pos, dir, neg) {
|
||||
// Get the body element
|
||||
var body = document.getElementsByTagName('body')[0];
|
||||
// Get percentage of current position
|
||||
var position = (pos / (dir ? body.clientHeight : body.clientWidth)) * 100;
|
||||
// If someone decided to fuck with the inputs reset it to 0%
|
||||
if (position < 0 || position > 100) {
|
||||
position = 0;
|
||||
}
|
||||
// Do the first maths
|
||||
position = (position / (dir ? 25 : 20)) - 2.5;
|
||||
// If the negative flag is set inverse the number
|
||||
if (neg) {
|
||||
position = -position;
|
||||
}
|
||||
// Subtract another 2.5 to make the element not go all over the place
|
||||
position = position - 2.5;
|
||||
// Return the proper position value
|
||||
return position;
|
||||
}
|
||||
// """"""""Smooth"""""""" scrolling
|
||||
function scrollToTop() {
|
||||
// Get the current position
|
||||
var windowY = window.pageYOffset - 100;
|
||||
// Move up
|
||||
window.scrollTo(0, windowY);
|
||||
// Keep executing this function till we're at the top
|
||||
if (windowY + 1 > 0) {
|
||||
setTimeout(function () { scrollToTop(); }, 10);
|
||||
}
|
||||
}
|
||||
// Replace some special tags
|
||||
function replaceTag(tag) {
|
||||
return { '&': '&', '<': '<', '>': '>' }[tag] || tag;
|
||||
|
|
|
@ -466,69 +466,6 @@ function registerVarCheck(id: string, mode: string, option: any = null): void {
|
|||
}
|
||||
}
|
||||
|
||||
// Initialising the element parallax functionality
|
||||
function initialiseParallax(id: string) {
|
||||
// Assign the element to a variable
|
||||
var parallax: HTMLElement = document.getElementById(id);
|
||||
|
||||
// Set proper position values
|
||||
parallax.style.top = '-2.5px';
|
||||
parallax.style.bottom = '-2.5px';
|
||||
parallax.style.left = '-2.5px';
|
||||
parallax.style.right = '-2.5px';
|
||||
|
||||
// Add the event listener to the body element
|
||||
document.addEventListener("mousemove", (e) => {
|
||||
// Alter the position of the parallaxed element
|
||||
parallax.style.top = convertParallaxPositionValue(e.clientY, true, false) + 'px';
|
||||
parallax.style.bottom = convertParallaxPositionValue(e.clientY, true, true) + 'px';
|
||||
parallax.style.left = convertParallaxPositionValue(e.clientX, false, false) + 'px';
|
||||
parallax.style.right = convertParallaxPositionValue(e.clientX, false, true) + 'px';
|
||||
});
|
||||
}
|
||||
|
||||
// Converting the position value of the mouseover to a pixel value
|
||||
function convertParallaxPositionValue(pos: number, dir: boolean, neg: boolean): number {
|
||||
// Get the body element
|
||||
var body: HTMLElement = document.getElementsByTagName('body')[0];
|
||||
|
||||
// Get percentage of current position
|
||||
var position: number = (pos / (dir ? body.clientHeight : body.clientWidth)) * 100;
|
||||
|
||||
// If someone decided to fuck with the inputs reset it to 0%
|
||||
if (position < 0 || position > 100) {
|
||||
position = 0;
|
||||
}
|
||||
|
||||
// Do the first maths
|
||||
position = (position / (dir ? 25 : 20)) - 2.5;
|
||||
|
||||
// If the negative flag is set inverse the number
|
||||
if (neg) {
|
||||
position = -position;
|
||||
}
|
||||
|
||||
// Subtract another 2.5 to make the element not go all over the place
|
||||
position = position - 2.5;
|
||||
|
||||
// Return the proper position value
|
||||
return position;
|
||||
}
|
||||
|
||||
// """"""""Smooth"""""""" scrolling
|
||||
function scrollToTop(): void {
|
||||
// Get the current position
|
||||
var windowY: number = window.pageYOffset - 100;
|
||||
|
||||
// Move up
|
||||
window.scrollTo(0, windowY);
|
||||
|
||||
// Keep executing this function till we're at the top
|
||||
if (windowY + 1 > 0) {
|
||||
setTimeout(() => { scrollToTop(); }, 10);
|
||||
}
|
||||
}
|
||||
|
||||
// Replace some special tags
|
||||
function replaceTag(tag: string): string {
|
||||
return { '&': '&', '<': '<', '>': '>' }[tag] || tag;
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -19,7 +19,7 @@ $template->setTemplate($templateName);
|
|||
if (isset($_GET['p'])) {
|
||||
// Set default variables
|
||||
$renderData['page'] = [
|
||||
'content' => Utils::mdParse("# Unable to load the requested info page.\r\n\r\nCheck the URL and try again."),
|
||||
'content' => '<h1>Unable to load the requested info page.</h1><p>Check the URL and try again.</p>',
|
||||
];
|
||||
|
||||
// Set page id
|
||||
|
@ -31,7 +31,7 @@ if (isset($_GET['p'])) {
|
|||
$renderData['page'] = [
|
||||
'id' => $pageId,
|
||||
'title' => $ipData['page_title'],
|
||||
'content' => Utils::mdParse($ipData['page_content']),
|
||||
'content' => $ipData['page_content'],
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -52,6 +52,8 @@ $renderData['newsCount'] = Config::get('front_page_news_posts');
|
|||
|
||||
$renderData['forum'] = ($forumMode ? (new Forum\Forum()) : null);
|
||||
|
||||
$renderData['latestPosts'] = Database::fetch('posts', true, null, ['post_id', true], [3]);
|
||||
|
||||
$renderData['stats'] = [
|
||||
'userCount' => Database::count('users', ['password_algo' => ['nologin', '!='], 'rank_main' => ['1', '!=']])[0],
|
||||
'newestUser' => ($_INDEX_NEWEST_USER = User::construct(Users::getNewestUserId())),
|
||||
|
|
|
@ -18,29 +18,17 @@ $template->setTemplate($templateName);
|
|||
// CHeck if the user is logged in
|
||||
if (Users::checkLogin()) {
|
||||
// Add page specific things
|
||||
$renderData['page'] = [
|
||||
|
||||
$renderData['memberlist'] = [
|
||||
'ranks' => ($_MEMBERLIST_RANKS = Users::getAllRanks()),
|
||||
'active' => ($_MEMBERLIST_ACTIVE = (
|
||||
isset($_GET['rank'])
|
||||
&& $_GET['rank']
|
||||
&& array_key_exists($_GET['rank'], $_MEMBERLIST_RANKS) ? $_GET['rank'] : 0
|
||||
)),
|
||||
'notfound' => ($_MEMBERLIST_NFOUND = (
|
||||
isset($_GET['rank'])
|
||||
&& !array_key_exists($_GET['rank'], $_MEMBERLIST_RANKS) && $_GET['rank'] != 0
|
||||
)),
|
||||
'sorts' => ($_MEMBERLIST_SORTS = ['boxes', 'rectangles', 'list']),
|
||||
'sort' => isset($_GET['sort']) && $_GET['sort'] && in_array($_GET['sort'], $_MEMBERLIST_SORTS) ?
|
||||
$_GET['sort'] :
|
||||
$_MEMBERLIST_SORTS[0],
|
||||
|
||||
'users' => ($_MEMBERLIST_ACTIVE && !$_MEMBERLIST_NFOUND ? Users::getUsersInRank($_MEMBERLIST_ACTIVE) : Users::getAllUsers()),
|
||||
'membersPerPage' => Config::get('members_per_page'),
|
||||
];
|
||||
|
||||
$renderData['users'] = ($_MEMBERLIST_ACTIVE && !$_MEMBERLIST_NFOUND ? Users::getUsersInRank($_MEMBERLIST_ACTIVE) : Users::getAllUsers());
|
||||
|
||||
$renderData['membersPerPage'] = Config::get('members_per_page');
|
||||
|
||||
// Set parse variables
|
||||
$template->setVariables($renderData);
|
||||
|
||||
|
|
|
@ -59,9 +59,10 @@ if (isset($_GET['restrict']) && $_GET['restrict'] == session_id() && $currentUse
|
|||
|
||||
if ($restricted) {
|
||||
$profile->removeRanks([Config::get('restricted_rank_id')]);
|
||||
$profile->addRanks([2]);
|
||||
} else {
|
||||
$profile->addRanks([Config::get('restricted_rank_id')]);
|
||||
$profile->removeRanks($profile->ranks());
|
||||
$profile->removeRanks(array_keys($profile->ranks));
|
||||
}
|
||||
|
||||
$renderData['page'] = [
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
namespace Sakura;
|
||||
|
||||
// Define Sakura version
|
||||
define('SAKURA_VERSION', '20160118');
|
||||
define('SAKURA_VERSION', '20160120');
|
||||
define('SAKURA_VLABEL', 'Amethyst');
|
||||
define('SAKURA_COLOUR', '#9966CC');
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
<div class="markdown">
|
||||
<div class="bbcode">
|
||||
{{ profile.userPage|raw }}
|
||||
</div>
|
||||
|
|
|
@ -38,11 +38,13 @@
|
|||
{% else %}
|
||||
There were no online users in the past {{ sakura.onlineTimeout / 60 }} minute{% if sakura.onlineTimeout != 60 %}s{% endif %}.
|
||||
{% endif %}
|
||||
{#<div class="ad-container ad-sidebar" id="sideAd">
|
||||
<div class="head">Advertisment</div>
|
||||
{% if not user.permission(constant('Sakura\\Perms\\Site::CHANGE_BACKGROUND')) or user.mainRankId == 4 %}
|
||||
<div class="ad-container ad-sidebar" id="sideAd">
|
||||
<div class="ad-box">
|
||||
<img src="http://i.flash.moe/1445793369-523-9238.png" />
|
||||
<div><a href="#">Click here to meow!</a></div>
|
||||
<a href="http://jbox.com/r.php??&acc=269&___store=jlist&bannerid=28" target="_blank">
|
||||
<img src="https://jlist.com/js/magestore/affiliateplus/banner.php?id=28&account_id=269&store_id=2" alt="250x250 PG senpai shirt" title="250x250 PG senpai shirt" width="250" height="250" />
|
||||
</a>
|
||||
</div>
|
||||
</div>#}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
<h1 style="color: {{ post.news_poster.colour }}; text-shadow: 0 0 7px {% if post.news_poster.colour != 'inherit' %}{{ post.news_poster.colour }}{% else %}#222{% endif %}; padding: 0 0 10px;">{{ post.news_poster.username }}</h1>
|
||||
</div>
|
||||
</a>
|
||||
<div class="markdown">
|
||||
{{ post.news_content_parsed|raw }}
|
||||
<div class="bbcode">
|
||||
{{ post.news_content|raw }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
|
|
|
@ -132,10 +132,6 @@
|
|||
}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% if php.self == '/profile.php' ? (profile.background and not profile.optionFields.disableProfileParallax) : (user.permission(constant('Sakura\\Perms\\Site::CHANGE_BACKGROUND')) and user.optionFields.profileBackgroundSiteWide and user.background and not user.optionFields.disableProfileParallax) %}
|
||||
initialiseParallax('userBackground');
|
||||
{% endif %}
|
||||
});
|
||||
|
||||
// Error reporter
|
||||
|
@ -240,11 +236,15 @@
|
|||
<h1 class="stylised" style="text-align: center; margin: 2em auto;">{{ php.self }} is now printing!</h1>
|
||||
{% endblock %}
|
||||
|
||||
{#<div class="ad-container ad-footer" id="footerAd">
|
||||
{% if not user.permission(constant('Sakura\\Perms\\Site::CHANGE_BACKGROUND')) or user.mainRankId == 4 %}
|
||||
<div class="ad-container ad-footer" id="footerAd">
|
||||
<div class="ad-box">
|
||||
<img src="http://i.flash.moe/1445792838-522-8610.png" />
|
||||
<a href="http://jbox.com/r.php??series/touhou&acc=269&___store=jlist&bannerid=8" target="_blank">
|
||||
<img src="https://jlist.com/js/magestore/affiliateplus/banner.php?id=8&account_id=269&store_id=2" alt="728x90 PG -- Touhou 1" title="728x90 PG -- Touhou 1" width="728" height="90" />
|
||||
</a>
|
||||
</div>
|
||||
</div>#}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="ftsections">
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
{% block title %}{% if page.title %}{{ page.title }}{% else %}Not found!{% endif %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="content standalone markdown">
|
||||
<div class="content standalone bbcode">
|
||||
<div>
|
||||
{{ page.content|raw }}
|
||||
</div>
|
||||
|
|
|
@ -1,50 +1,55 @@
|
|||
{% extends 'global/master.twig' %}
|
||||
|
||||
{% set sorts = ['boxes', 'rectangles', 'list'] %}
|
||||
{% set sort = get.sort in sorts ? get.sort : sorts[0] %}
|
||||
|
||||
{% set notfound = memberlist.active == 0 and get.rank is defined %}
|
||||
|
||||
{% set rankTitle %}
|
||||
{% if page.notfound %}Not found{% else %}{% if not page.active %}All members{% else %}{{ page.ranks[page.active].name(true) }}{% endif %}{% endif %}
|
||||
{% if notfound %}Not found{% else %}{% if not memberlist.active %}All members{% else %}{{ memberlist.ranks[memberlist.active].name(true) }}{% endif %}{% endif %}
|
||||
{% endset %}
|
||||
|
||||
{% set rankDescription %}
|
||||
{% if page.notfound %}The requested rank could not be found!{% else %}{% if not page.active %}The entire user list.{% else %}{{ page.ranks[page.active].description }}{% endif %}{% endif %}
|
||||
{% if notfound %}The requested rank could not be found!{% else %}{% if not memberlist.active %}The entire user list.{% else %}{{ memberlist.ranks[memberlist.active].description }}{% endif %}{% endif %}
|
||||
{% endset %}
|
||||
|
||||
{% set users = users|batch(membersPerPage) %}
|
||||
{% set users = memberlist.users|batch(memberlist.membersPerPage) %}
|
||||
|
||||
{% set currPage = get.page|default(1) - 1 %}
|
||||
|
||||
{% set paginationPages = users %}
|
||||
{% set paginationUrl %}{% if page.sort and page.active %}{{ urls.format('MEMBERLIST_ALL', [page.sort, page.active]) }}{% elseif page.sort %}{{ urls.format('MEMBERLIST_SORT', [page.sort]) }}{% elseif page.active %}{{ urls.format('MEMBERLIST_RANK', [page.active]) }}{% else %}{{ urls.format('MEMBERLIST_INDEX') }}{% endif %}{% endset %}
|
||||
{% set paginationUrl %}{% if sort and memberlist.active %}{{ urls.format('MEMBERLIST_ALL', [sort, memberlist.active]) }}{% elseif sort %}{{ urls.format('MEMBERLIST_SORT', [sort]) }}{% elseif memberlist.active %}{{ urls.format('MEMBERLIST_RANK', [memberlist.active]) }}{% else %}{{ urls.format('MEMBERLIST_INDEX') }}{% endif %}{% endset %}
|
||||
|
||||
{% block title %}{{ rankTitle }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="headerNotify" style="margin-bottom: 1px;">
|
||||
<h1 style="{% if page.active %}text-shadow: 0 0 5px {{ page.ranks[page.active].colour }}; color: {{ page.ranks[page.active].colour }};{% else %}text-shadow: 0 0 5px #555;{% endif %}">{{ rankTitle }}</h1>
|
||||
<h1 style="{% if memberlist.active %}text-shadow: 0 0 5px {{ memberlist.ranks[memberlist.active].colour }}; color: {{ memberlist.ranks[memberlist.active].colour }};{% else %}text-shadow: 0 0 5px #555;{% endif %}">{{ rankTitle }}</h1>
|
||||
<h3>{{ rankDescription }}</h3>
|
||||
</div>
|
||||
<div class="membersPage" style="min-height: 500px;">
|
||||
<div class="dropDown" style="margin: 0 auto; font-size: 1.5em; line-height: 1.5em; height: 30px;">
|
||||
<div class="dropDownInner" style="float: left; color: #FFF;">
|
||||
<a class="dropDownDesc">Rank:</a>
|
||||
<a href="{% if page.sort %}{{ urls.format('MEMBERLIST_SORT', [page.sort]) }}{% else %}{{ urls.format('MEMBERLIST_INDEX') }}{% endif %}"{% if not page.active %} class="dropDownSelected"{% endif %}>All members</a>
|
||||
{% for rank in page.ranks %}
|
||||
{% if not rank.hidden or (rank.hidden and page.active == rank.id) %}
|
||||
<a href="{% if page.sort %}{{ urls.format('MEMBERLIST_ALL', [page.sort, rank.id]) }}{% else %}{{ urls.format('MEMBERLIST_RANK', [rank.id]) }}{% endif %}" style="color: {{ rank.colour }};"{% if page.active == rank.id %} class="dropDownSelected"{% endif %}>{{ rank.name(true) }}</a>
|
||||
<a href="{% if sort %}{{ urls.format('MEMBERLIST_SORT', [sort]) }}{% else %}{{ urls.format('MEMBERLIST_INDEX') }}{% endif %}"{% if not memberlist.active %} class="dropDownSelected"{% endif %}>All members</a>
|
||||
{% for rank in memberlist.ranks %}
|
||||
{% if not rank.hidden or (rank.hidden and memberlist.active == rank.id) %}
|
||||
<a href="{% if sort %}{{ urls.format('MEMBERLIST_ALL', [sort, rank.id]) }}{% else %}{{ urls.format('MEMBERLIST_RANK', [rank.id]) }}{% endif %}" style="color: {{ rank.colour }};"{% if memberlist.active == rank.id %} class="dropDownSelected"{% endif %}>{{ rank.name(true) }}</a>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="dropDownInner" style="float: left;">
|
||||
<a class="dropDownDesc">View:</a>
|
||||
{% for sort in page.sorts %}
|
||||
<a href="{% if page.active %}{{ urls.format('MEMBERLIST_ALL', [sort, page.active]) }}{% else %}{{ urls.format('MEMBERLIST_SORT', [sort]) }}{% endif %}"{% if page.sort == sort %} class="dropDownSelected"{% endif %}>{{ sort|capitalize }}</a>
|
||||
{% for s in sorts %}
|
||||
<a href="{% if memberlist.active %}{{ urls.format('MEMBERLIST_ALL', [s, memberlist.active]) }}{% else %}{{ urls.format('MEMBERLIST_SORT', [s]) }}{% endif %}"{% if s == sort %} class="dropDownSelected"{% endif %}>{{ s|capitalize }}</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% if not users|length %}
|
||||
<h1 class="stylised" style="margin: 2em 0;">This rank has no members!</h1>
|
||||
{% elseif not page.notfound %}
|
||||
<div class="membersPageList {{ page.sort }}">
|
||||
{% if page.sort == page.sorts[2] %}
|
||||
{% elseif not notfound %}
|
||||
<div class="membersPageList {{ sort }}">
|
||||
{% if sort == sorts[2] %}
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
|
@ -70,22 +75,22 @@
|
|||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
#{{ page.active ? count + 1 : count }}
|
||||
#{{ memberlist.active ? count + 1 : count }}
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ urls.format('USER_PROFILE', [user.id]) }}" class="default" style="font-weight: bold; color: {{ user.colour }}; text-shadow: 0 0 5px {{ user.colour }};">{{ user.username }}</a>
|
||||
</td>
|
||||
<td title="{{ user.dates.joined|date(sakura.dateFormat) }}">
|
||||
<td title="{{ user.registered|date(sakura.dateFormat) }}">
|
||||
{{ user.elapsed.joined }}
|
||||
</td>
|
||||
<td title="{% if user.dates.lastOnline == 0 %}Never logged in.{% else %}{{ user.dates.lastOnline|date(sakura.dateFormat) }}{% endif %}">
|
||||
{% if user.dates.lastOnline == 0 %}<i>Never logged in.</i>{% else %}{{ user.elapsed.lastOnline }}{% endif %}
|
||||
<td title="{% if user.lastOnline == 0 %}Never logged in.{% else %}{{ user.lastOnline|date(sakura.dateFormat) }}{% endif %}">
|
||||
{% if user.lastOnline == 0 %}<i>Never logged in.</i>{% else %}{{ user.elapsed.lastOnline }}{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{ user.userTitle }}
|
||||
{{ user.title }}
|
||||
</td>
|
||||
<td>
|
||||
<img src="{{ sakura.contentPath }}/images/flags/{{ user.country.short|lower }}.png" alt="{% if user.country.short|lower == 'xx' %}?{% else %}{{ user.country.long }}{% endif %}" title="{% if user.country.short|lower == 'xx' %}Unknown{% else %}{{ user.country.long }}{% endif %}" />
|
||||
<img src="{{ sakura.contentPath }}/images/flags/{{ user.country|lower }}.png" alt="{% if user.country|lower == 'xx' %}?{% else %}{{ user.country(true) }}{% endif %}" title="{% if user.country|lower == 'xx' %}Unknown{% else %}{{ user.country(true) }}{% endif %}" />
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
@ -104,9 +109,9 @@
|
|||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if users|length > 1 %}
|
||||
{% include 'elements/pagination.twig' %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
<img src="{{ urls.format('IMAGE_AVATAR', [profile.id]) }}" alt="{{ profile.username }}'s Avatar" class="default-avatar-setting" style="box-shadow: 0 3px 7px #{% if profile.isOnline %}484{% else %}844{% endif %};" /><br />
|
||||
{% if profile.mainRankId > 1 and profile.checkBan|length < 1 %}
|
||||
<span style="font-size: .8em;">{{ profile.title }}</span>
|
||||
<h1 style="color: {{ profile.colour }}; text-shadow: 0 0 7px {% if profile.colour != 'inherit' %}{{ profile.colour }}{% else %}#222{% endif %}; padding: 0 0 2px;" {% if profile.getUsernameHistory %} title="Known as {{ profile.getUsernameHistory[0]['username_old'] }} before {{ profile.getUsernameHistory[0]['chahttp://flashii.test/u/2/headernge_time']|date(sakura.dateFormat) }}." {% endif %}>{{ profile.username }}</h1>
|
||||
<h1 style="color: {{ profile.colour }}; text-shadow: 0 0 7px {% if profile.colour != 'inherit' %}{{ profile.colour }}{% else %}#222{% endif %}; padding: 0 0 2px;" {% if profile.getUsernameHistory %} title="Known as {{ profile.getUsernameHistory[0]['username_old'] }} before {{ profile.getUsernameHistory[0]['change_time']|date(sakura.dateFormat) }}." {% endif %}>{{ profile.username }}</h1>
|
||||
{% if profile.isPremium[0] %}<img src="{{ sakura.contentPath }}/images/tenshi.png" alt="Tenshi" style="vertical-align: middle;" /> {% endif %}<img src="{{ sakura.contentPath }}/images/flags/{{ profile.country|lower }}.png" alt="{{ profile.country.short }}" style="vertical-align: middle;" /> <span style="font-size: .8em; line-height: 11px;">{{ profile.country.long }}</span>
|
||||
{% if session.checkLogin %}
|
||||
<div class="user-actions">
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
<div class="markdown">
|
||||
<div class="bbcode">
|
||||
{{ profile.userPage|raw }}
|
||||
</div>
|
||||
|
|
|
@ -1,34 +1,23 @@
|
|||
{% block js %}
|
||||
<script type="text/javascript" charset="utf-8" src="{{ sakura.contentPath }}/libraries/showdown.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
<div class="markdown" id="userPagePreview" style="max-height: 500px; overflow-y: auto; background: #C2AEEE; box-shadow: inset 0 0 1em 1em #D3BFFF;">
|
||||
<!--div class="bbcode" id="userPagePreview" style="max-height: 500px; overflow-y: auto; background: #C2AEEE; box-shadow: inset 0 0 1em 1em #D3BFFF;">
|
||||
<noscript>
|
||||
<h1 class="stylised" style="margin: 1em auto;">The preview requires JavaScript, enable it.</h1>
|
||||
</noscript>
|
||||
</div>
|
||||
</div-->
|
||||
<hr class="default" />
|
||||
<form enctype="multipart/form-data" method="post" action="{{ sakura.currentPage }}" id="userPageEditorForm">
|
||||
<input type="hidden" name="sessid" value="{{ php.sessionid }}" />
|
||||
<input type="hidden" name="timestamp" value="{{ php.time }}" />
|
||||
<input type="hidden" name="mode" value="userpage" />
|
||||
<div><textarea name="userpage" id="userPageEditor" placeholder="# Welcome to my user page!" class="inputStyling" style="width: calc(100% - 12px); height: 400px;">{% if user.page %}{{ user.page }}{% else %}# Welcome to my user page!{% endif %}</textarea></div>
|
||||
<div><textarea name="userpage" id="userPageEditor" placeholder="[header]Welcome to my userpage![/header]" class="inputStyling" style="width: calc(100% - 12px); height: 400px;">{% if user.page %}{{ user.page }}{% else %}[header]Welcome to my userpage![/header]{% endif %}</textarea></div>
|
||||
<div class="profile-save">
|
||||
<input type="submit" value="Save" name="submit" class="inputStyling" />
|
||||
<input type="reset" value="Reset" name="reset" class="inputStyling" />
|
||||
</div>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
var converter = new showdown.Converter();
|
||||
|
||||
function updateUserPage() {
|
||||
document.getElementById('userPagePreview').innerHTML = converter.makeHtml(safeTagsReplace(document.getElementById('userPageEditor').value));
|
||||
}
|
||||
|
||||
document.getElementById('userPageEditor').addEventListener('keyup', updateUserPage);
|
||||
//document.getElementById('userPageEditor').addEventListener('keyup', updateUserPage);
|
||||
|
||||
window.addEventListener('load', function() {
|
||||
prepareAjaxForm('userPageEditorForm', 'Updating user page...');
|
||||
updateUserPage();
|
||||
});
|
||||
</script>
|
||||
|
|
Reference in a new issue