1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
<?php
define('RENDER_DEFAULT_TITLE', 'OpenSLX Admin');
require_once('inc/util.inc.php');
require_once('Mustache/Autoloader.php');
Mustache_Autoloader::register();
/**
* HTML rendering helper class
*/
Render::init();
class Render
{
private static $mustache = false;
private static $body = '';
private static $header = '';
private static $title = '';
private static $templateCache = array();
private static $tags = array();
public static function init()
{
if (self::$mustache !== false) Util::traceError('Called Render::init() twice!');
self::$mustache = new Mustache_Engine;
}
/**
* Output the buffered, generated page
*/
public static function output()
{
Header('Content-Type: text/html; charset=utf-8');
echo
'<!DOCTYPE html>
<html>
<head>
<title>', RENDER_DEFAULT_TITLE, self::$title, '</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Bootstrap -->
<link href="style/bootstrap.min.css" rel="stylesheet" media="screen">
<link href="style/default.css" rel="stylesheet" media="screen">
',
self::$header
,
' </head>
<body>
',
self::$body
,
' <script src="script/jquery.js"></script>
<script src="script/bootstrap.min.js"></script></body>
</html>'
;
}
/**
* Set the page title (title-tag)
*/
public static function setTitle($title)
{
self::$title = ' - ' . $title;
}
/**
* Add raw html data to the header-section of the generated page
*/
public static function addHeader($html)
{
self::$header .= $html . "\n";
}
/**
* Add the given template to the output, using the given params for placeholders in the template
*/
public static function parse($template, $params)
{
self::$body .= self::$mustache->render(self::getTemplate($template), $params);
}
/**
* Open the given html tag, optionally adding the passed assoc array of params
*/
public static function openTag($tag, $params = false)
{
array_push(self::$tags, $tag);
if (!is_array($params)) {
self::$body .= '<' . $tag . '>';
} else {
self::$body .= '<' . $tag;
foreach ($params as $key => $val) {
self::$body .= ' ' . $key . '="' . htmlspecialchars($val) . '"';
}
self::$body .= '>';
}
}
/**
* Close the given tag. Will check if it maches the tag last opened
*/
public static function closeTag($tag)
{
if (empty(self::$tags)) Util::traceError('Tried to close tag ' . $tag . ' when no open tags exist.');
$last = array_pop(self::$tags);
if ($last !== $tag) Util::traceError('Tried to close tag ' . $tag . ' when last opened tag was ' . $last);
self::$body .= '</' . $tag . '>';
}
/**
* Private helper: Load the given template and return it
*/
private static function getTemplate($template)
{
if (isset(self::$templateCache[$template])) {
return self::$templateCache[$template];
}
// Load from disk
$data = @file_get_contents('templates/' . $template . '.html');
if ($data === false) $data = '<b>Non-existent template ' . $template . ' requested!</b>';
self::$templateCache[$template] =& $data;
return $data;
}
}
|