From 2c120186f7c1873876642c22429ba53999cab8ed Mon Sep 17 00:00:00 2001 From: flashwave Date: Sat, 31 Oct 2015 19:14:54 +0100 Subject: [PATCH] r20151031 --- _sakura/components/BBcode.php | 14 +++ _sakura/components/Template.php | 133 +++++++++++++++++++++- _sakura/sakura.php | 3 +- _sakura/templates/misaki/main/profile.tpl | 38 +++---- public/content/data/misaki/css/misaki.css | 100 +++++++++++----- public/content/data/misaki/js/misaki.js | 10 +- public/index.php | 11 +- 7 files changed, 243 insertions(+), 66 deletions(-) create mode 100644 _sakura/components/BBcode.php diff --git a/_sakura/components/BBcode.php b/_sakura/components/BBcode.php new file mode 100644 index 0000000..22f5a9d --- /dev/null +++ b/_sakura/components/BBcode.php @@ -0,0 +1,14 @@ +setTemplate(Configuration::getConfig('site_style')); + + // Set a fallback + $this->setFallback(Configuration::getConfig('site_style')); + } + + // Set a template name + public function setTemplate($name) { + // Assign config path to a variable so we don't have to type it out twice + $confPath = ROOT . '_sakura/templates/' . $name . '/template.ini'; + + // Check if the configuration file exists + if (!file_exists($confPath)) { + trigger_error('Template configuration does not exist', E_USER_ERROR); + } + + // Parse and store the configuration + $this->templateOptions = parse_ini_file($confPath, true); + + // Make sure we're not using a manage template for the main site or the other way around + if (defined('SAKURA_MANAGE') && (bool) $this->templateOptions['manage']['mode'] != (bool) SAKURA_MANAGE) { + trigger_error('Incorrect template type', E_USER_ERROR); + } + + // Set variables + $this->templateName = $name; + + // Reinitialise + $this->initTemplate(); + } + + // Initialise main template engine + public function initTemplate() { + // Initialise Twig Filesystem Loader + $twigLoader = new Twig_Loader_Filesystem(ROOT . '_sakura/templates/' . $this->templateName); + + // Environment variable + $twigEnv = []; + + // Enable caching + if (Configuration::getConfig('enable_tpl_cache')) { + $twigEnv['cache'] = ROOT . 'cache'; + } + + // And now actually initialise the templating engine + $this->template = new Twig_Environment($twigLoader, $twigEnv); + + // Load String template loader + $this->template->addExtension(new Twig_Extension_StringLoader()); + } + + // Set a fallback + private function setFallback($name) { + // Assign config path to a variable so we don't have to type it out twice + $confPath = ROOT . '_sakura/templates/' . $name . '/template.ini'; + + // Check if the configuration file exists + if (!file_exists($confPath)) { + trigger_error('Template configuration does not exist', E_USER_ERROR); + } + + // Parse and store the configuration + $this->fallbackOptions = parse_ini_file($confPath, true); + + // Make sure we're not using a manage template for the main site or the other way around + if (defined('SAKURA_MANAGE') && (bool) $this->fallbackOptions['manage']['mode'] != (bool) SAKURA_MANAGE) { + trigger_error('Incorrect template type', E_USER_ERROR); + } + + // Set variables + $this->fallbackName = $name; + + // Reinitialise + $this->initFallback(); + } + + // Initialise main fallback engine + public function initFallback() { + // Initialise Twig Filesystem Loader + $twigLoader = new Twig_Loader_Filesystem(ROOT . '_sakura/templates/' . $this->fallbackName); + + // Environment variable + $twigEnv = []; + + // Enable caching + if (Configuration::getConfig('enable_tpl_cache')) { + $twigEnv['cache'] = ROOT . 'cache'; + } + + // And now actually initialise the templating engine + $this->fallback = new Twig_Environment($twigLoader, $twigEnv); + + // Load String template loader + $this->fallback->addExtension(new Twig_Extension_StringLoader()); + } + + // Set variables + public function setVariables($vars) { + $this->vars = array_merge($this->vars, $vars); + } + + // Render a template + public function render($file) + { + try { + return $this->template->render($file, $this->vars); + } catch (\Exception $e) { + try { + return $this->fallback->render($file, $this->vars); + } catch (\Exception $e) { + trigger_error($e->getMessage(), E_USER_ERROR); + } + } + } } diff --git a/_sakura/sakura.php b/_sakura/sakura.php index c4b97aa..5719c21 100755 --- a/_sakura/sakura.php +++ b/_sakura/sakura.php @@ -8,7 +8,7 @@ namespace Sakura; // Define Sakura version -define('SAKURA_VERSION', '20151024'); +define('SAKURA_VERSION', '20151031'); define('SAKURA_VLABEL', 'Eminence'); define('SAKURA_COLOUR', '#6C3082'); define('SAKURA_STABLE', false); @@ -34,6 +34,7 @@ require_once ROOT . '_sakura/components/Hashing.php'; require_once ROOT . '_sakura/components/Configuration.php'; require_once ROOT . '_sakura/components/Database.php'; require_once ROOT . '_sakura/components/Urls.php'; +require_once ROOT . '_sakura/components/Template.php'; require_once ROOT . '_sakura/components/Templates.php'; require_once ROOT . '_sakura/components/Permissions.php'; require_once ROOT . '_sakura/components/Session.php'; diff --git a/_sakura/templates/misaki/main/profile.tpl b/_sakura/templates/misaki/main/profile.tpl index 38383f4..e5cf687 100755 --- a/_sakura/templates/misaki/main/profile.tpl +++ b/_sakura/templates/misaki/main/profile.tpl @@ -14,44 +14,34 @@ background-image: linear-gradient(0deg, transparent 0%, transparent 12%, rgba(0, 0, 0, .7) 30%, transparent 76%, transparent 100%), url('{{ urls.format('IMAGE_HEADER', [profile.data.user_id]) }}'); } + + #profileHeader.floating { + background-image: linear-gradient(90deg, transparent 0%, transparent 40%, #3A2E44 45%), url('{{ urls.format('IMAGE_HEADER', [profile.data.user_id]) }}'); + background-size: auto 130px; + background-repeat: no-repeat; + background-position: left top; + } {% endblock %} -{# block js %} +{% block js %} -{% endblock #} +{% endblock %} {% block content %}
diff --git a/public/content/data/misaki/css/misaki.css b/public/content/data/misaki/css/misaki.css index 92a6f83..bb7068b 100755 --- a/public/content/data/misaki/css/misaki.css +++ b/public/content/data/misaki/css/misaki.css @@ -265,7 +265,7 @@ a:active { padding-bottom: 100px; } -#wrapper > #content { +#content { position: relative; max-width: 1018px; margin: 0 auto; @@ -276,16 +276,20 @@ a:active { border: 1px solid rgba(148, 117, 178, .6); } +#content.floatingNavigation { + padding-top: 37px; +} + /* * Header navigation */ -#content > #navigation { +#navigation { width: 100%; - height: 30px; + height: 25px; background: linear-gradient(0deg, transparent, #453851 50%, #342740) transparent; font-family: "Exo2-0-LightItalic", sans-serif; - font-size: 2em; - line-height: 30px; + font-size: 1.5em; + line-height: 25px; letter-spacing: 0; text-shadow: 1px 1px 3px #111; margin-bottom: 5px; @@ -294,14 +298,19 @@ a:active { max-width: 1018px; } -#content > #navigation > ul > li { +#content.floatingNavigation #navigation { + position: fixed; + top: 0; +} + +#navigation > ul > li { list-style: none; float: left; } -#content > #navigation > ul > li > a:not(.ignore) { - height: 30px; - line-height: 30px; +#navigation > ul > li > a:not(.ignore) { + height: 25px; + line-height: 25px; display: inline-block; text-align: center; color: inherit; @@ -310,56 +319,57 @@ a:active { transition: .2s; } -#content > #navigation > ul > li > a { +#navigation > ul > li > a { z-index: 901; position: relative; } -#content > #navigation > .nav-left > li > a:not(.ignore):hover { +#navigation > .nav-left > li > a:not(.ignore):hover { background: rgba(0, 0, 0, .2); } -#content > #navigation > .nav-left > li > a:not(.ignore):active { +#navigation > .nav-left > li > a:not(.ignore):active { background: rgba(0, 0, 0, .3); } -#content > #navigation .nav-usermenu > a { +#navigation .nav-usermenu > a { display: block !important; text-align: right !important; } -#content > #navigation .nav-usermenu > a:after { +#navigation .nav-usermenu > a:after { font-family: FontAwesome; content: " \f0d7"; } -#content > #navigation .nav-usermenu:hover > a:after { +#navigation .nav-usermenu:hover > a:after { font-family: FontAwesome; content: " \f0d8"; } -#content > #navigation .nav-avatar { - height: 30px; - width: 30px; +#navigation .nav-avatar { + height: 25px; + width: 25px; background: url('/pixel.png') no-repeat scroll left center / cover transparent; } -#content > #navigation > ul > li > ul { +#navigation > ul > li > ul { display: none; } -#content > #navigation > ul > li:hover > ul { +#navigation > ul > li:hover > ul { display: block; z-index: 900; - background: rgba(69, 56, 81, .5); + background: rgba(69, 56, 81, .8); position: absolute; top: 0; right: 0; list-style: none; - padding: 35px 4px 5px; + padding: 30px 4px 5px; + box-shadow: 0 2px 6px rgba(0, 0, 0, .75); } -#content > #navigation > ul > li > ul > li > a { +#navigation > ul > li > ul > li > a { color: inherit; text-decoration: none; display: block; @@ -367,15 +377,15 @@ a:active { padding: 2px 7px; } -#content > #navigation > ul > li > ul > li > a:hover { - background: rgba(0, 0, 0, .1); -} - -#content > #navigation > ul > li > ul > li > a:active { +#navigation > ul > li > ul > li > a:hover { background: rgba(0, 0, 0, .2); } -#content > #navigation .nav-usermenu ul { +#navigation > ul > li > ul > li > a:active { + background: rgba(0, 0, 0, .3); +} + +#navigation .nav-usermenu ul { right: -30px; text-align: right; min-width: 150px; @@ -404,8 +414,8 @@ a:active { align-content: stretch; width: 100%; position: relative; - top: -35px; - margin-bottom: -35px; + top: -31px; + margin-bottom: -31px; } .profile .profileContainer { @@ -436,6 +446,15 @@ a:active { align-items: flex-end; } +#profileHeader.floating { + position: fixed; + top: 0; + padding-top: 30px; + max-width: 1018px; + height: 95px; + box-shadow: 0 2px 6px rgba(0, 0, 0, .75); +} + #userAvatar { font-size: 0; background: transparent no-repeat scroll left center / cover; @@ -446,6 +465,13 @@ a:active { margin: 10px; margin-bottom: -10px; flex-shrink: 0; + transition: .2s; +} + +#profileHeader.floating #userAvatar { + height: 100px; + width: 100px; + margin: 5px 5px -5px; } #profileHeader > .userData { @@ -456,6 +482,14 @@ a:active { width: 100%; } +#profileHeader.floating > .userData { + position: initial; + top: 0; + height: 100%; + font-size: .8em; + line-height: 1.5em; +} + #profileHeader > .userData > .headerLeft { flex-grow: 1; } @@ -478,6 +512,10 @@ a:active { margin: 10px 10px 0 0; } +#profileContent.headerFloating { + margin-top: 264px; +} + #profileContent > .userDataBar { width: 210px; margin-top: 10px; diff --git a/public/content/data/misaki/js/misaki.js b/public/content/data/misaki/js/misaki.js index 606db58..eec4e0e 100755 --- a/public/content/data/misaki/js/misaki.js +++ b/public/content/data/misaki/js/misaki.js @@ -84,15 +84,9 @@ function convertParallaxPositionValue(pos, dir, neg) { window.addEventListener("scroll", function(e) { if(e.pageY > 123) { var content = document.getElementById('content'); - var navigation = document.getElementById('navigation'); - navigation.style.position = 'fixed'; - navigation.style.top = '0'; - content.style.paddingTop = '37px'; + content.className = 'floatingNavigation'; } else { var content = document.getElementById('content'); - var navigation = document.getElementById('navigation'); - navigation.style.position = null; - navigation.style.top = null; - content.style.paddingTop = null; + content.className = null; } }); diff --git a/public/index.php b/public/index.php index 7bb31ee..d6345c6 100755 --- a/public/index.php +++ b/public/index.php @@ -74,5 +74,14 @@ $renderData['stats'] = [ 'onlineUsers' => Users::checkAllOnline(), ]; +// Initialise templating engine +$template = new Template(); + +// Change templating engine +$template->setTemplate($templateName); + +// Set parse variables +$template->setVariables($renderData); + // Print page contents -print Templates::render(($forumMode ? 'forum' : 'main') . '/index.tpl', $renderData); +echo $template->render(($forumMode ? 'forum' : 'main') . '/index.tpl');