summaryrefslogtreecommitdiffstats
path: root/inc/render.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'inc/render.inc.php')
-rw-r--r--inc/render.inc.php52
1 files changed, 45 insertions, 7 deletions
diff --git a/inc/render.inc.php b/inc/render.inc.php
index 5515c659..53e2f314 100644
--- a/inc/render.inc.php
+++ b/inc/render.inc.php
@@ -40,19 +40,39 @@ class Render
self::$mustache = new Mustache_Engine($options);
}
+ private static function cssEsc($str)
+ {
+ return str_replace(array('"', '&', '<', '>'), array('\\000022', '\\000026', '\\00003c', '\\00003e'), $str);
+ }
+
/**
* Output the buffered, generated page
*/
public static function output()
{
Header('Content-Type: text/html; charset=utf-8');
+ /* @var $modules Module[] */
$modules = array_reverse(Module::getActivated());
+ $pageModule = Page::getModule();
+ $title = Property::get('page-title-prefix', '');
+ $bgcolor = Property::get('logo-background', '');
+ if (!empty($bgcolor) || !empty($title)) {
+ self::$header .= '<style type="text/css">' . "\n";
+ if (!empty($bgcolor)) {
+ $fgcolor = self::readableColor($bgcolor);
+ self::$header .= ".navbar-header{background-color:$bgcolor}a.navbar-brand{color:$fgcolor!important}";
+ }
+ if (!empty($title)) {
+ self::$header .= '#navbar-sub:after{content:"' . self::cssEsc($title) . '";margin:0}';
+ }
+ self::$header .= "\n</style>";
+ }
ob_start('ob_gzhandler');
echo
'<!DOCTYPE html>
<html>
<head>
- <title>', self::$title, RENDER_DEFAULT_TITLE, '</title>
+ <title>', $title, self::$title, RENDER_DEFAULT_TITLE, '</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
@@ -61,9 +81,9 @@ class Render
';
// Include any module specific styles
foreach ($modules as $module) {
- $file = $module->getDir() . '/style.css';
- if (file_exists($file)) {
- echo '<link href="', $file, '" rel="stylesheet" media="screen">';
+ $files = $module->getCss($module != $pageModule);
+ foreach ($files as $file) {
+ echo '<link href="', $module->getDir(), '/', $file, '" rel="stylesheet" media="screen">';
}
}
echo '
@@ -91,9 +111,9 @@ class Render
<script src="script/collapse.js"></script>
';
foreach ($modules as $module) {
- $file = $module->getDir() . '/clientscript.js';
- if (file_exists($file)) {
- echo '<script src="', $file, '"></script>';
+ $files = $module->getScripts($module != $pageModule);
+ foreach ($files as $file) {
+ echo '<script src="', $module->getDir(), '/', $file, '"></script>';
}
}
echo
@@ -285,4 +305,22 @@ class Render
self::$dashboard = $params;
}
+ public static function readableColor($hex) {
+ if (strlen($hex) <= 4) {
+ $cnt = 1;
+ } else {
+ $cnt = 2;
+ }
+ if (preg_match('/^#?([a-f0-9]{'.$cnt.'})([a-f0-9]{'.$cnt.'})([a-f0-9]{'.$cnt.'})$/i', $hex, $out) != 1)
+ return '#000';
+ $chans = array();
+ $f = ($cnt === 1 ? 17 : 1);
+ for ($i = 1; $i <= 3; ++$i) {
+ $out[$i] = (hexdec($out[$i]) * $f);
+ $chans[] = $out[$i] ^ 0x80;
+ }
+ $b = (255 - (0.299 * $out[1] + 0.587 * $out[2] + 0.114 * $out[3])) * 2;
+ return sprintf("#%02x%02x%02x", ($chans[0] + $b) / 3, ($chans[1] + $b) / 3, ($chans[2] + $b) / 3);
+ }
+
}