sinuca
10 years ago
committed by
czaks
7 changed files with 425 additions and 0 deletions
@ -0,0 +1,84 @@ |
|||||
|
body { |
||||
|
font-family: sans-serif; |
||||
|
background: none repeat scroll 0 0 #EEFDFF; |
||||
|
font-size: 12px; |
||||
|
margin: 6px; |
||||
|
padding: 0; |
||||
|
} |
||||
|
|
||||
|
h1.title { |
||||
|
font-family: Verdana, Tahoma, sans-serif; |
||||
|
font-size: 23px; |
||||
|
color: #333300; |
||||
|
margin-top: 1em; |
||||
|
background: none; |
||||
|
letter-spacing: normal; |
||||
|
} |
||||
|
|
||||
|
header div.subtitle { |
||||
|
font-family: Verdana, Tahoma, sans-serif; |
||||
|
color: #333300; |
||||
|
font-weight: normal; |
||||
|
font-size: medium; |
||||
|
font-style: italic; |
||||
|
} |
||||
|
|
||||
|
div.favelito { |
||||
|
text-align: center; |
||||
|
} |
||||
|
|
||||
|
.favelito { |
||||
|
display: block; |
||||
|
height: auto; |
||||
|
max-width: 100%; |
||||
|
vertical-align: middle; |
||||
|
} |
||||
|
|
||||
|
div.news-content { |
||||
|
margin-left: 1em; |
||||
|
text-align: justify; |
||||
|
} |
||||
|
|
||||
|
h2 { |
||||
|
color: #000; |
||||
|
background: #D6F0E4; |
||||
|
} |
||||
|
|
||||
|
div.sidebar h2 { |
||||
|
font-family: Verdana, Tahoma, sans-serif; |
||||
|
font-size: 18px; |
||||
|
} |
||||
|
|
||||
|
div.sidebar h3 { |
||||
|
margin: 0; |
||||
|
background: #D6F0E4; |
||||
|
font-size: 100% |
||||
|
} |
||||
|
|
||||
|
div.fav_irc h4 { |
||||
|
font-family: Verdana, Tahoma, sans-serif; |
||||
|
margin: 0; |
||||
|
font-size: 10px; |
||||
|
background: #D6F0E4; |
||||
|
} |
||||
|
|
||||
|
div.fav_irc h4 a { |
||||
|
color: #FF7800; |
||||
|
text-decoration: none; |
||||
|
vertical-align: top; |
||||
|
} |
||||
|
|
||||
|
ul.fav_nav { |
||||
|
margin-top: 0; |
||||
|
padding: 0; |
||||
|
list-style: none; |
||||
|
} |
||||
|
|
||||
|
ul.fav_nav a { |
||||
|
text-decoration: none; |
||||
|
color: #555500; |
||||
|
} |
||||
|
|
||||
|
.sidebar a:hover { |
||||
|
text-decoration: underline; |
||||
|
} |
@ -0,0 +1,102 @@ |
|||||
|
<!doctype html> |
||||
|
<html> |
||||
|
<head> |
||||
|
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> |
||||
|
<!-- <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> --> |
||||
|
<link rel="stylesheet" media="screen" href="{{ config.url_stylesheet }}"> |
||||
|
{% if settings.tryresponsive %} |
||||
|
<script type="text/javascript" src="{{ config.additional_javascript_url }}js/jquery.min.js"></script> |
||||
|
<script type="text/javascript"> |
||||
|
$().ready(function () { |
||||
|
$(".botao-55").click(function () { |
||||
|
$("iframe#sidebar").toggleClass("sidebar-vem"); |
||||
|
$("iframe#main").toggleClass("mainbar-pls"); |
||||
|
}); |
||||
|
}); |
||||
|
</script> |
||||
|
{% endif %} |
||||
|
<style type="text/css"> |
||||
|
iframe { |
||||
|
border: none; |
||||
|
margin: 0; |
||||
|
padding: 0; |
||||
|
height: 99%; |
||||
|
position: absolute |
||||
|
} |
||||
|
iframe#sidebar { |
||||
|
left: 0; |
||||
|
top: 0; |
||||
|
width: 15% |
||||
|
} |
||||
|
iframe#main { |
||||
|
left: 15%; |
||||
|
top: 0; |
||||
|
width: 85% |
||||
|
} |
||||
|
iframe.sidebar-vem { |
||||
|
left: 0!important; |
||||
|
} |
||||
|
iframe.mainbar-pls { |
||||
|
left: 15%!important; |
||||
|
} |
||||
|
.botao-55 { |
||||
|
position: fixed; |
||||
|
top: 5px; |
||||
|
right: 5px; |
||||
|
cursor: pointer; |
||||
|
background-color: #EEE; |
||||
|
opacity: 0.3; |
||||
|
display: none; |
||||
|
border-radius: 3px; |
||||
|
border-width: 1px; |
||||
|
border-style: solid; |
||||
|
border-color: #B7C5D9; |
||||
|
} |
||||
|
.botao-55:hover { |
||||
|
opacity: 1; |
||||
|
} |
||||
|
.span-55 { |
||||
|
font-family: Verdana, Tahoma, sans-serif; |
||||
|
font-size: 50px; |
||||
|
font-weight: bolder; |
||||
|
} |
||||
|
{% if settings.tryresponsive %} |
||||
|
@media screen and (max-width: 767px) { |
||||
|
.botao-55 { |
||||
|
display: block; |
||||
|
} |
||||
|
iframe#sidebar { |
||||
|
width: 45%; |
||||
|
left: -45%; |
||||
|
-webkit-transition: all 0.25s ease-out; |
||||
|
-moz-transition: all 0.25s ease-out; |
||||
|
-o-transition: all 0.25s ease-out; |
||||
|
transition: all 0.25s ease-out; |
||||
|
} |
||||
|
iframe#main { |
||||
|
left: 0; |
||||
|
width: 100%; |
||||
|
-webkit-transition: all 0.25s ease-out; |
||||
|
-moz-transition: all 0.25s ease-out; |
||||
|
-o-transition: all 0.25s ease-out; |
||||
|
transition: all 0.25s ease-out; |
||||
|
} |
||||
|
iframe.mainbar-pls { |
||||
|
left: 45%!important; |
||||
|
} |
||||
|
iframe.sidebar-vem { |
||||
|
left: 0!important; |
||||
|
} |
||||
|
} |
||||
|
{% endif %} |
||||
|
</style> |
||||
|
<title>{{ settings.title }}</title> |
||||
|
</head> |
||||
|
<body> |
||||
|
<iframe src="{{ settings.file_sidebar }}" id="sidebar" name="sidebar"></iframe> |
||||
|
<iframe src="{{ settings.file_news }}" id="main" name="main"></iframe> |
||||
|
<div class="botao-55"> |
||||
|
<span class="span-55">55</span> |
||||
|
</div> |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,87 @@ |
|||||
|
<?php |
||||
|
$theme = Array(); |
||||
|
|
||||
|
// Theme name |
||||
|
$theme['name'] = 'Favelaframes'; |
||||
|
// Description (you can use Tinyboard markup here) |
||||
|
$theme['description'] = |
||||
|
'Use a basic frameset layout, with a list of boards and pages on a sidebar to the left of the page. |
||||
|
|
||||
|
Users never have to leave the homepage; they can do all their browsing from the one page.'; |
||||
|
$theme['version'] = 'v0.1'; |
||||
|
|
||||
|
// Theme configuration |
||||
|
$theme['config'] = Array(); |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'Site title', |
||||
|
'name' => 'title', |
||||
|
'type' => 'text' |
||||
|
); |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'Slogan', |
||||
|
'name' => 'subtitle', |
||||
|
'type' => 'text', |
||||
|
'comment' => '(optional)' |
||||
|
); |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'Main HTML file', |
||||
|
'name' => 'file_main', |
||||
|
'type' => 'text', |
||||
|
'default' => $config['file_index'], |
||||
|
'comment' => '(eg. "index.html")' |
||||
|
); |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'Sidebar file', |
||||
|
'name' => 'file_sidebar', |
||||
|
'type' => 'text', |
||||
|
'default' => 'sidebar.html', |
||||
|
'comment' => '(eg. "sidebar.html")' |
||||
|
); |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'News file', |
||||
|
'name' => 'file_news', |
||||
|
'type' => 'text', |
||||
|
'default' => 'news.html', |
||||
|
'comment' => '(eg. "news.html")' |
||||
|
); |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'IRC url', |
||||
|
'name' => 'irc_url', |
||||
|
'type' => 'text', |
||||
|
'default' => 'http://qchat.rizon.net/?nick=Anao.&channels=55ch&uio=d4', |
||||
|
'comment' => '(optional) Link to IRC channel' |
||||
|
); |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'IRC address', |
||||
|
'name' => 'irc_address', |
||||
|
'type' => 'text', |
||||
|
'default' => '#[email protected]', |
||||
|
'comment' => '(optional) IRC channel address to appear as a label to the url entered above' |
||||
|
); |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'CSS file', |
||||
|
'name' => 'css', |
||||
|
'type' => 'text', |
||||
|
'default' => 'favelaframes.css', |
||||
|
'comment' => '(eg. "favelaframes.css")' |
||||
|
); |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'Try the little responsive thingy thing', |
||||
|
'name' => 'tryresponsive', |
||||
|
'type' => 'checkbox', |
||||
|
'default' => true, |
||||
|
'comment' => 'With this checked, the menu frame will become collapsible when viewport width is under 767px.' |
||||
|
); |
||||
|
|
||||
|
// Unique function name for building everything |
||||
|
$theme['build_function'] = 'favelaframes_build'; |
||||
|
?> |
@ -0,0 +1,40 @@ |
|||||
|
{% filter remove_whitespace %} |
||||
|
<!doctype html> |
||||
|
<html> |
||||
|
<head> |
||||
|
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> |
||||
|
<title>{{ settings.title }}</title> |
||||
|
<link rel="stylesheet" media="screen" href="{{ config.url_stylesheet }}"/> |
||||
|
<link rel="stylesheet" media="screen" href="{{ config.uri_stylesheets }}{{ settings.css }}"> |
||||
|
</head> |
||||
|
<body> |
||||
|
<header> |
||||
|
<div class="favelito"> |
||||
|
<img src="{{ config.root }}static/favelito.png" alt="Favelito"> |
||||
|
</div> |
||||
|
<h1 class="title">{{ settings.title }}</h1> |
||||
|
<div class="subtitle">"{{ settings.subtitle }}"</div> |
||||
|
</header> |
||||
|
|
||||
|
<div class="news-content"> |
||||
|
{% if news|count == 0 %} |
||||
|
<p style="text-align:center" class="unimportant">(No news to show.)</p> |
||||
|
{% else %} |
||||
|
{% for entry in news %} |
||||
|
<h2 id="{{ entry.id }}"> |
||||
|
{% if entry.subject %} |
||||
|
{{ entry.subject }} |
||||
|
{% else %} |
||||
|
<em>no subject</em> |
||||
|
{% endif %} |
||||
|
<span class="unimportant"> — by {{ entry.name }} at {{ entry.time|date(config.post_date) }}</span> |
||||
|
</h2> |
||||
|
<p>{{ entry.body }}</p> |
||||
|
{% endfor %} |
||||
|
{% endif %} |
||||
|
</div> |
||||
|
|
||||
|
<p class="unimportant" style="margin-top:20px;text-align:center;">Powered by <a href="http://tinyboard.org/">Tinyboard</a> {{ config.version }} | <a href="http://tinyboard.org/">Tinyboard</a> Copyright © 2010-2012 Tinyboard Development Group</p> |
||||
|
</body> |
||||
|
</html> |
||||
|
{% endfilter %} |
@ -0,0 +1,38 @@ |
|||||
|
{% filter remove_whitespace %} |
||||
|
<!doctype html> |
||||
|
<html> |
||||
|
<head> |
||||
|
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> |
||||
|
<title>{{ settings.title }}</title> |
||||
|
<link rel="stylesheet" media="screen" href="{{ config.url_stylesheet }}"/> |
||||
|
<link rel="stylesheet" media="screen" href="{{ config.uri_stylesheets }}{{ settings.css }}"> |
||||
|
|
||||
|
<base target="main"/> |
||||
|
</head> |
||||
|
<body> |
||||
|
<div class="sidebar"> |
||||
|
<h2>{{ settings.title }}</h2> |
||||
|
<div class="fav_irc"> |
||||
|
<h4> |
||||
|
<a href="{{ settings.irc_url }}" target="_blank">{{ settings.irc_address }}</a> |
||||
|
</h4> |
||||
|
</div> |
||||
|
|
||||
|
{% for category, boards in categories %} |
||||
|
<h3> |
||||
|
{{ category }} |
||||
|
</h3> |
||||
|
<div id="{{ category }}" class="fav_category_div"> |
||||
|
<ul class="fav_nav"> |
||||
|
{% for board in boards %} |
||||
|
<li> |
||||
|
<a href="{{ board.uri }}">/{{ board.uri }} - {{ board.title|e }}</a> |
||||
|
</li> |
||||
|
{% endfor %} |
||||
|
</ul> |
||||
|
</div> |
||||
|
{% endfor %} |
||||
|
</div> |
||||
|
</body> |
||||
|
</html> |
||||
|
{% endfilter %} |
@ -0,0 +1,74 @@ |
|||||
|
<?php |
||||
|
require 'info.php'; |
||||
|
|
||||
|
function favelaframes_build($action, $settings, $board) { |
||||
|
// Possible values for $action: |
||||
|
// - all (rebuild everything, initialization) |
||||
|
// - news (news has been updated) |
||||
|
// - boards (board list changed) |
||||
|
|
||||
|
Favelaframes::build($action, $settings); |
||||
|
} |
||||
|
|
||||
|
// Wrap functions in a class so they don't interfere with normal Tinyboard operations |
||||
|
class Favelaframes { |
||||
|
public static function build($action, $settings) { |
||||
|
global $config; |
||||
|
|
||||
|
if ($action == 'all') { |
||||
|
copy('templates/themes/favelaframes/favelaframes.css', $config['dir']['home'] . 'stylesheets/' . $settings['css']); |
||||
|
file_write($config['dir']['home'] . $settings['file_main'], Favelaframes::homepage($settings)); |
||||
|
} |
||||
|
|
||||
|
if ($action == 'all' || $action == 'boards') |
||||
|
file_write($config['dir']['home'] . $settings['file_sidebar'], Favelaframes::sidebar($settings)); |
||||
|
|
||||
|
if ($action == 'all' || $action == 'news') |
||||
|
file_write($config['dir']['home'] . $settings['file_news'], Favelaframes::news($settings)); |
||||
|
} |
||||
|
|
||||
|
// Build homepage |
||||
|
public static function homepage($settings) { |
||||
|
global $config; |
||||
|
|
||||
|
return Element('themes/favelaframes/frames.html', Array('config' => $config, 'settings' => $settings)); |
||||
|
} |
||||
|
|
||||
|
// Build news page |
||||
|
public static function news($settings) { |
||||
|
global $config; |
||||
|
|
||||
|
$query = query("SELECT * FROM ``news`` ORDER BY `time` DESC") or error(db_error()); |
||||
|
$news = $query->fetchAll(PDO::FETCH_ASSOC); |
||||
|
|
||||
|
return Element('themes/favelaframes/news.html', Array( |
||||
|
'settings' => $settings, |
||||
|
'config' => $config, |
||||
|
'news' => $news |
||||
|
)); |
||||
|
} |
||||
|
|
||||
|
// Build sidebar |
||||
|
public static function sidebar($settings) { |
||||
|
global $config, $board; |
||||
|
|
||||
|
$categories = $config['categories']; |
||||
|
|
||||
|
foreach ($categories as &$boards) { |
||||
|
foreach ($boards as &$board) { |
||||
|
$title = boardTitle($board); |
||||
|
if (!$title) |
||||
|
$title = $board; // board doesn't exist, but for some reason you want to display it anyway |
||||
|
$board = Array('title' => $title, 'uri' => sprintf($config['board_path'], $board)); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return Element('themes/favelaframes/sidebar.html', Array( |
||||
|
'settings' => $settings, |
||||
|
'config' => $config, |
||||
|
'categories' => $categories |
||||
|
)); |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
?> |
After Width: | Height: | Size: 7.4 KiB |
Loading…
Reference in new issue