new template based upon bootstrap

This commit is contained in:
Sean O'Brien 2012-02-27 17:18:41 -05:00 committed by James Vasile
parent d2bcebf676
commit 638b287d1b
26 changed files with 184 additions and 735 deletions

View File

@ -7,7 +7,7 @@ class Apps(PagePlugin):
def __init__(self, *args, **kwargs):
PagePlugin.__init__(self, *args, **kwargs)
self.register_page("apps")
self.menu = cfg.main_menu.add_item("User Apps", "/apps", 80)
self.menu = cfg.main_menu.add_item("Apps", "/apps", 80)
self.menu.add_item("Photo Gallery", "/apps/photos", 35)
@cherrypy.expose
@ -27,7 +27,7 @@ class Apps(PagePlugin):
@require()
def photos(self):
return self.fill_template(title="Open ID", main='', sidebar_right="""
<h2>Photo Gallery</h2><p>Your photos might well be the most valuable
<strong>Photo Gallery</strong><p>Your photos might well be the most valuable
digital property you have, so why trust it to companies that have no
investment in the sentimental value of your family snaps? Keep those
photos local, backed up, easily accessed and free from the whims of

View File

@ -8,7 +8,7 @@ class Help(PagePlugin):
def __init__(self, *args, **kwargs):
PagePlugin.__init__(self, *args, **kwargs)
self.register_page("help")
self.menu = cfg.main_menu.add_item(_("Documentation and FAQ"), "/help", 101)
self.menu = cfg.main_menu.add_item(_("Documentation"), "/help", 101)
self.menu.add_item(_("Where to Get Help"), "/help/index", 5)
self.menu.add_item(_("Developer's Manual"), "/help/view/plinth", 10)
self.menu.add_item(_("FAQ"), "/help/view/faq", 20)
@ -27,7 +27,7 @@ class Help(PagePlugin):
offer suggestions, edits, and screenshots for completing
it!</p>
<p><a href="http://wiki.debian.org/FreedomBox">A section of
<p><a href="http://wiki.debian.org/FreedomBox" target="_blank">A section of
the Debian wiki</a> is devoted to the %(box)s. At some
point the documentation in the wiki and the documentation in
the manual should dovetail.</p>
@ -48,8 +48,9 @@ class Help(PagePlugin):
@cherrypy.expose
def about(self):
return self.fill_template(title=_("About the %s" % cfg.box_name), main="""
<p> We live in a world where our use of the network is
mediated by organizations that often do not have our best
<img src="/static/theme/img/freedombox-logo-200px.png" style="float:right;padding:25px;" />
<p>We live in a world where our use of the network is
mediated by those who often do not have our best
interests at heart. By building software that does not rely on
a central service, we can regain control and privacy. By
keeping our data in our homes, we gain useful legal
@ -62,14 +63,15 @@ class Help(PagePlugin):
runs on must be cheap. The software it runs on must be easy to
install and administrate by anybody. It must be easy to
transition from existing services.</p>
<p>There are a number of projects working to realize a future
<p><a class="btn btn-primary btn-large" href="http://wiki.debian.org/FreedomBox" target="_blank">Learn more &raquo;</a></p>""",
sidebar_right=_("""<strong>Our Goal</strong><p>There are a number of projects working to realize a future
of distributed services; we aim to bring them all together in
a convenient package.</p>
<p>For more information about the Freedom Box project, see the
<p>For more information about the FreedomBox project, see the
<a href="http://wiki.debian.org/FreedomBox">Debian
Wiki</a>.</p>""")
Wiki</a>.</p>
"""))
class View(PagePlugin):
def __init__(self, *args, **kwargs):

View File

@ -50,9 +50,9 @@ class Form():
quad = [0,0,0,0]
self.text += """ <label>
<span>%(label)s</span>
<input type="text" class="inputtextnowidth" name="%(name)s0" id="%(id)s0" value="%(q0)s" maxlength="3" size="1"/><b>.</b>
<input type="text" class="inputtextnowidth" name="%(name)s1" id="%(id)s1" value="%(q1)s" maxlength="3" size="1"/><b>.</b>
<input type="text" class="inputtextnowidth" name="%(name)s2" id="%(id)s2" value="%(q2)s" maxlength="3" size="1"/><b>.</b>
<input type="text" class="inputtextnowidth" name="%(name)s0" id="%(id)s0" value="%(q0)s" maxlength="3" size="1"/><strong>.</strong>
<input type="text" class="inputtextnowidth" name="%(name)s1" id="%(id)s1" value="%(q1)s" maxlength="3" size="1"/><strong>.</strong>
<input type="text" class="inputtextnowidth" name="%(name)s2" id="%(id)s2" value="%(q2)s" maxlength="3" size="1"/><strong>.</strong>
<input type="text" class="inputtextnowidth" name="%(name)s3" id="%(id)s3" value="%(q3)s" maxlength="3" size="1"/>
</label>""" % {'label':label, 'name':name, 'id':id, 'q0':quad[0], 'q1':quad[1], 'q2':quad[2], 'q3':quad[3]}
@ -77,7 +77,7 @@ class Form():
self.text += """
<div class="submit">
<label><span></span>
<input type="submit" class="button" value="%s" name="%s" id="%s" />
<input type="submit" class="btn-primary" value="%s" name="%s" id="%s" />
</label></div>\n""" % (label, name, id)
def submit_row(self, buttons):
"""buttons is a list of tuples, each containing label, name, id. Name and id are optional."""
@ -99,7 +99,7 @@ class Form():
if button_text != '':
button_text += "&nbsp;"
button_text += '<input type="submit" class="button" value="%s" name="%s" id="%s" />\n' % (label, name, id)
button_text += '<input type="submit" class="btn-primary" value="%s" name="%s" id="%s" />\n' % (label, name, id)
self.text += '%s</div></label>' % button_text
def name_or_id(self, name, id):
if not name: name = id

View File

@ -9,7 +9,7 @@ class Privacy(PagePlugin):
def __init__(self, *args, **kwargs):
PagePlugin.__init__(self, *args, **kwargs)
self.register_page("privacy")
self.menu = cfg.main_menu.add_item("Privacy Controls", "/privacy", 12)
self.menu = cfg.main_menu.add_item("Privacy", "/privacy", 12)
self.menu.add_item("General Config", "/privacy/config", 10)
self.menu.add_item("Ad Blocking", "/privacy/adblock", 20)
self.menu.add_item("TOR", "/privacy/TOR", 30)
@ -29,7 +29,7 @@ class Privacy(PagePlugin):
is a founding consideration, not an afterthought.</p>
"""
return self.fill_template(title=_("Privacy Control Panel"), main=main,
sidebar_right=_("""<h2>Statement of Principles</h2><p>When we say your
sidebar_right=_("""<strong>Statement of Principles</strong><p>When we say your
privacy is important, it's not just an empty pleasantry. We really
mean it. Your privacy control panel should give you fine-grained
control over exactly who can access your %s and the
@ -37,6 +37,6 @@ information on it.</p>
<p>Your personal information should not leave this box without your
knowledge and direction. And if companies or government wants this
information, they have to ask <b>you</b> for it. This gives you a
information, they have to ask <strong>you</strong> for it. This gives you a
change to refuse and also tells you who wants your data.</p>
""") % cfg.product_name)

View File

@ -14,5 +14,5 @@ class Info(PagePlugin):
@require()
def index(self):
return self.fill_template(title="Router Information", main="""
<p> Eventually we will display a bunch of info, graphs and logs about the routing functions here.</p>
<p>Eventually we will display a bunch of info, graphs and logs about the routing functions here.</p>
""")

View File

@ -11,7 +11,7 @@ class router(PagePlugin):
order = 9 # order of running init in PagePlugins
def __init__(self, *args, **kwargs):
self.register_page("router")
self.menu = cfg.main_menu.add_item("Router Admin", "/router", 10)
self.menu = cfg.main_menu.add_item("Router", "/router", 10)
self.menu.add_item("Wireless", "/router/wireless", 12)
self.menu.add_item("Firewall", "/router/firewall", 18)
self.menu.add_item("Hotspot and Mesh", "/router/hotspot")
@ -54,7 +54,7 @@ class setup(PagePlugin):
def index(self):
parts = self.forms('/router/setup')
parts['title'] = "General Router Setup"
parts['sidebar_right']="""<h2>Introduction</h2><p>Your %s is a replacement for your
parts['sidebar_right']="""<strong>Introduction</strong><p>Your %s is a replacement for your
wireless router. By default, it should do everything your usual
router does. With the addition of some extra modules, its abilities
can rival those of high-end routers costing hundreds of dollars.</p>
@ -88,7 +88,7 @@ class wan(FormPlugin, PagePlugin):
url = ["/router/setup"]
order = 10
js = """<script LANGUAGE="JavaScript">
js = """<script type="text/javascript">
<!--
function hideshow_static() {
var d = document.getElementById('connect_type');
@ -105,7 +105,7 @@ class wan(FormPlugin, PagePlugin):
def sidebar_right(self, *args, **kwargs):
side=''
if cfg.users.expert():
side += """<h2>WAN Connection Type</h2>
side += """<strong>WAN Connection Type</strong>
<h3>DHCP</h3><p>DHCP allows your router to automatically
connect with the upstream network. If you are unsure what
option to choose, stick with DHCP. It is usually
@ -150,7 +150,7 @@ class wan(FormPlugin, PagePlugin):
form.dotted_quad("Static DNS 2", name="dns2", quad=[dns20, dns21, dns22, dns23])
form.dotted_quad("Static DNS 3", name="dns3", quad=[dns30, dns31, dns32, dns33])
form.html('</div>')
form.html(""" <script LANGUAGE="JavaScript">
form.html(""" <script type="text/javascript">
<!--
hideshow_static();
// -->

View File

@ -8,7 +8,7 @@ class Services(PagePlugin):
def __init__(self, *args, **kwargs):
PagePlugin.__init__(self, *args, **kwargs)
self.register_page("services")
self.menu = cfg.main_menu.add_item("Other Services", "/services", 90)
self.menu = cfg.main_menu.add_item("Services", "/services", 90)
self.menu.add_item("Open ID", "/services/openid", 35)
@cherrypy.expose
@ -19,7 +19,7 @@ class Services(PagePlugin):
@require()
def openid(self):
return self.fill_template(title="Open ID", main='', sidebar_right="""
<h2>One Login for Every Site</h2><p>Your %s is also an OpenID
<strong>One Login for Every Site</strong><p>Your %s is also an OpenID
machine. It can generate credentials that allow you to log in to many
websites without the need to remember or enter a separate username and
password at each one.</p>

View File

@ -10,7 +10,7 @@ class Sharing(PagePlugin):
def __init__(self, *args, **kwargs):
PagePlugin.__init__(self, *args, **kwargs)
self.register_page("sharing")
self.menu = cfg.main_menu.add_item("Resource Sharing", "/sharing", 35)
self.menu = cfg.main_menu.add_item("Sharing", "/sharing", 35)
self.menu.add_item("File Server", "/sharing/files", 10)
@cherrypy.expose
@ -25,7 +25,7 @@ class Sharing(PagePlugin):
@require()
def files(self):
return self.fill_template(title="File Server", main='', sidebar_right=_("""
<h2>Freedom NAS</h2><p> The %s can make your spare hard drives accessible to your
<strong>Freedom NAS</strong><p> The %s can make your spare hard drives accessible to your
local network, thus acting as a NAS server. We currently support
sharing files via NFS and SMB.
@ -47,7 +47,7 @@ class PrinterSharing(PagePlugin):
<p>TODO: Setup and install CUPS</p>
"""
return self.fill_template(title="Printer Sharing", main=main, sidebar_right="""
<h2>Share Your Printer</h2><p> The %s can share your printer via Samba and CUPS.</p>
<strong>Share Your Printer</strong><p> The %s can share your printer via Samba and CUPS.</p>
""" % cfg.box_name)

View File

@ -64,7 +64,7 @@ class general(FormPlugin, PagePlugin):
## only expert users are going to get deep enough to see any timestamps
if not cfg.users.expert():
return ''
return _(#"""<h2>Time Zone</h2>
return _(#"""<strong>Time Zone</strong>
"""<p>Set your timezone to get accurate
timestamps. %(product)s will use this information to set your
%(box)s's systemwide timezone.</p>

View File

@ -15,7 +15,7 @@ class experts(FormPlugin, PagePlugin):
order = 10
def help(self, *args, **kwargs):
side = _(#"""<h2>Expert Mode</h2>
side = _(#"""<strong>Expert Mode</strong>
"""
<p>The %(box)s can be administered in two modes, 'basic'
and 'expert'. Basic mode hides a lot of features and

View File

@ -18,7 +18,7 @@ class Sys(PagePlugin):
def __init__(self, *args, **kwargs):
PagePlugin.__init__(self, *args, **kwargs)
self.register_page("sys")
self.menu = cfg.main_menu.add_item(_("%s System" % cfg.product_name), "/sys", 100)
self.menu = cfg.main_menu.add_item(_("System"), "/sys", 100)
self.menu.add_item(_("Configure"), "/sys/config", 10)
self.menu.add_item(_("Package Manager"), "/sys/packages", 20)
self.menu.add_item(_("Users and Groups"), "/sys/users", 15)
@ -37,7 +37,7 @@ class Sys(PagePlugin):
@require()
def packages(self):
side=_("""
<h2>Help</h2>
<strong>Help</strong>
<p>On this page, you can add or remove %s plugins to your %s.</p>
<p>Plugins are just Debian packages, so Debian's usual package management features should make this job fairly easy.</p>
""" % (cfg.product_name, cfg.box_name))

View File

@ -24,8 +24,8 @@ class add(FormPlugin, PagePlugin):
order = 30
sidebar_left = ''
sidebar_right = _("""<h2>Add User</h2><p>Adding a user via this
administrative interface <b>might</b> create a system user.
sidebar_right = _("""<strong>Add User</strong><p>Adding a user via this
administrative interface <strong>might</strong> create a system user.
For example, if you provide a user with ssh access, she will
need a system account. If you don't know what that means,
don't worry about it.</p>""")
@ -70,16 +70,16 @@ class edit(FormPlugin, PagePlugin):
order = 35
sidebar_left = ''
sidebar_right = _("""<h2>Edit Users</h2><p>Click on a user's name to
go to a screen for editing that user's account.</p><h2>Delete
Users</h2><p>Check the box next to a users' names and then click
sidebar_right = _("""<strong>Edit Users</strong><p>Click on a user's name to
go to a screen for editing that user's account.</p><strong>Delete
Users</strong><p>Check the box next to a users' names and then click
"Delete User" to remove users from %s and the %s
system.</p><p>Deleting users is permanent!</p>""" % (cfg.product_name, cfg.box_name))
def main(self, msg=''):
users = cfg.users.keys()
add_form = Form(title=_("Edit or Delete User"), action="/sys/users/edit", message=msg)
add_form.html('<span class="indent"><b>Delete</b><br /></span>')
add_form.html('<span class="indent"><strong>Delete</strong><br /></span>')
for uname in sorted(users.keys()):
add_form.html('<span class="indent">&nbsp;&nbsp;%s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' %
add_form.get_checkbox(name=uname) +
@ -123,6 +123,6 @@ class edit(FormPlugin, PagePlugin):
return self.fill_template(template="err", title=_("Unnown User"), main=main,
sidebar_left=self.sidebar_left, sidebar_right=sidebar_right)
main = _("""<h2>Edit User '%s'</h2>""" % u['username'])
main = _("""<strong>Edit User '%s'</strong>""" % u['username'])
sidebar_right = ''
return self.fill_template(title="", main=main, sidebar_left=self.sidebar_left, sidebar_right=sidebar_right)

View File

@ -22,13 +22,13 @@ class wan(FormPlugin, PagePlugin):
end will be reachable from the WAN. If your %(box)s
connects you to the internet, that means you'll be able to log
in to the front end from the internet. This might be
convenient, but it is also <b>dangerous</b>, since it can
convenient, but it is also <strong>dangerous</strong>, since it can
enable attackers to gain access to your %(box)s from the
outside world. All they'll need is your username and
passphrase, which they might guess or they might simply try
every posible combination of letters and numbers until they
get in. If you enable the WAN administration option, you
<b>must</b> use long and complex passphrases.</p>
<strong>must</strong> use long and complex passphrases.</p>
<p>For security reasons, neither WAN Administration nor WAN
SSH is available to the `admin` user account.</p>

View File

@ -6,70 +6,62 @@
#end if
#end def
<!doctype html>
<!--[if lt IE 7 ]> <html class="ie ie6 no-js" lang="en"> <![endif]-->
<!--[if IE 7 ]> <html class="ie ie7 no-js" lang="en"> <![endif]-->
<!--[if IE 8 ]> <html class="ie ie8 no-js" lang="en"> <![endif]-->
<!--[if IE 9 ]> <html class="ie ie9 no-js" lang="en"> <![endif]-->
<!--[if gt IE 9]><!--><html class="no-js" lang="en"><!--<![endif]-->
<!-- the "no-js" class is for Modernizr. -->
<head id="www-sitename-com" data-template-set="html5-reset">
<!--[if gt IE 9]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<!-- the "no-js" class is for Modernizr -->
<head>
<meta charset="utf-8" />
<!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame -->
<!-- Always force latest IE rendering engine and Chrome Frame -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title>$default($title, "Plinth Front End to the Freedom Box")</title>
<meta name="title" content="$default($title, 'Plinth Front End to the Freedom Box')" />
<meta name="description" content="Plinth admin frontend for Freedom Box" />
<!-- I believe that robots should only have faces if they truly need them. -->
<meta name="robots" content="noindex, nofollow, noarchive" />
<meta name="googlebot" content="noindex, nofollow, noarchive, nosnippet, noodp, noimageindex, notranslate" />
<meta name="msnbot" content="noindex, nofollow, noarchive, noodp" />
<meta name="slurp" content="noindex, nofollow, noarchive, noodp, noydir" />
<!-- Mobile Viewport Fix
j.mp/mobileviewport & davidbcalhoun.com/2010/viewport-metatag
<!-- Mobile Viewport Fix http://j.mp/mobileviewport & http://davidbcalhoun.com/2010/viewport-metatag
device-width : Occupy full width of the screen in its current orientation
initial-scale = 1.0 retains dimensions instead of zooming out if page height > device height
maximum-scale = 1.0 retains dimensions instead of zooming in if page width < device width
-->
<!-- Uncomment to use; use thoughtfully!
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
-->
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- I believe that robots should only have faces if they truly need them -->
<meta name="robots" content="noindex, nofollow, noarchive" />
<meta name="googlebot" content="noindex, nofollow, noarchive, nosnippet, noodp, noimageindex, notranslate" />
<meta name="msnbot" content="noindex, nofollow, noarchive, noodp" />
<meta name="slurp" content="noindex, nofollow, noarchive, noodp, noydir" />
<meta name="title" content="$default($title, 'FreedomBox Dashboard')" />
<meta name="description" content="Plinth administrative interface for the FreedomBox" />
<title>$default($title, "FreedomBox Dashboard")</title>
<link rel="shortcut icon" href="$basehref/static/theme/img/favicon.ico" />
<!-- This is the traditional favicon.
- size: 16x16 or 32x32
- transparency is OK
- see wikipedia for info on browser support: http://mky.be/favicon/ -->
<!-- This is the traditional favicon. Size: 16x16 or 32x32, transparency is OK -->
<link rel="apple-touch-icon" href="$basehref/static/theme/img/freedombox-button-114px.png" />
<!-- The is the icon for iOS's Web Clip.
- size: 57x57 for older iPhones, 72x72 for iPads, 114x114 for iPhone4's retina display (IMHO, just go ahead and use the biggest one)
- To prevent iOS from applying its styles to the icon name it thusly: apple-touch-icon-precomposed.png
- Transparency is not recommended (iOS will put a black BG behind the icon) -->
<link rel="apple-touch-icon" sizes="57x57" href="$basehref/static/theme/img/apple-touch-icon-57px-precomposed.png" />
<link rel="apple-touch-icon" sizes="72x72" href="$basehref/static/theme/img/apple-touch-icon-72px-precomposed.png" />
<link rel="apple-touch-icon" sizes="114x114" href="$basehref/static/theme/img/apple-touch-icon-114px-precomposed.png" />
<!-- The is the icon for iOS's Web Clip. Size: 57x57 for older iPhones, 72x72 for iPads, 114x114 for iPhone4
- To prevent iOS from applying its styles to the icon name it thusly: apple-touch-icon-precomposed.png
- Transparency is not recommended (iOS will put a black BG behind the icon) -->
<!-- HTML5-Reset CSS: screen, mobile & print are all in the same file -->
<link rel="stylesheet" href="$basehref/static/theme/css/style-html5reset.css" />
<!-- Original Plinth CSS, not sure if this should all be integrated into "style-html5reset.css" -->
<link rel="stylesheet" href="$basehref/static/theme/css/style-plinth.css" />
<!--<link rel="stylesheet" href="$basehref/static/theme/css/style-plinth-2col.css" />-->
<link rel="stylesheet/less" href="$basehref/static/theme/less/style.less" />
<script type="text/javascript" src="$basehref/static/theme/js/libs/less-1.2.1.min.js"></script>
<!-- Use SimpLESS (Win/Linux/Mac) or LESS.app (Mac) to compile your .less files
to style.css, and replace the 2 lines above with this one:
<link rel="stylesheet/less" href="$basehref/static/theme/less/style.css">
-->
$css
<!-- Local copy of Modernizr -->
<script type="text/javascript" src="$basehref/static/theme/js/modernizr-1.7.min.js"></script>
<!-- Local copy of JQuery -->
<script type="text/javascript" src="$basehref/static/theme/js/jquery-1.5.1.min.js"></script>
<!-- HTML5-Reset functions -->
<script type="text/javascript" src="$basehref/static/theme/js/functions.js"></script>
<!-- JS required for Plinth menus and UI -->
<link rel="stylesheet" href="$basehref/static/theme/css/bootstrap.css" />
<style type="text/css">
body {
padding-top: 60px;
padding-bottom: 40px;
}
.sidebar-nav {
padding: 9px 0;
}
</style>
<script type="text/javascript" src="$basehref/static/theme/js/menu.js"></script>
<script type="text/javascript" src="$basehref/static/theme/js/plinth.js"></script>
$js
@ -82,43 +74,49 @@
</script>
</head>
<body onload="javascript:onload_handler();">
<div class="wrapper"><!-- may not be necessary: http://camendesign.com/code/developpeurs_sans_frontieres -->
<!--[if lt IE 7]><p class=chromeframe>Your browser is <em>ancient!</em> <a href="http://browsehappy.com/">Upgrade to a different browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">install Google Chrome Frame</a> to experience this site.</p><![endif]-->
<!-- ^ Freedombox needs a better version of "Browse Happy", with freedom and privacy-respecting browsers only -->
<header>
<div id="header"> <!-- should be replaced by <header> for HTML5 transition -->
<div id="headerleft">
<a href="$basehref/"><img src="$basehref/static/theme/img/freedombox.png" /></a>
</div> <!-- End headerleft -->
<div id="headerright">
<br /><br /><br />
<h1><a href="$basehref/"><img src="$basehref/static/theme/img/freedombox-logotype.png" /></a></h1>
<h2><a href="$basehref/">Plinth Administration Control Panel</a></h2>
<nav>
<script>
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container-fluid">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a href="$basehref/" style="float:left;padding-right:5px;"><img src="$basehref/static/theme/img/freedombox-logo-32px.png" /></a><a class="brand" href="$basehref/" style="padding-top:8px">FreedomBox Dashboard</a>
<div class="nav-collapse">
<script type="text/javascript">
<!--
main_menu(main_menu_items);
// -->
</script>
</nav> <!-- End main menu -->
</div> <!-- End headerright -->
#if $username
<p class="navbar-text pull-right">Logged in as <a href="$username">$username</a>. <a href="$basehref/auth/logout" title="Log out">Log out</a>.</p>
#else
<p class="navbar-text pull-right">Not logged in. <a href="$basehref/auth/login" title="Log in">Log in</a>.</p>
#end if
</div><!--/.nav-collapse -->
</div>
</div>
</div>
#if $username
<p id="layoutdims">Logged in as $username. <a href="$basehref/auth/logout" title="Log out">Logout.</a></p>
#else
<p id="layoutdims">Not logged in. <a href="$basehref/auth/login" title="Log in">Log in.</a></p>
#end if
</div> <!-- should be replaced by </header> for HTML5 transition -->
</header> <!-- End header -->
<div class="colmask threecol">
<div class="colmid">
<div class="colleft">
<article>
<div class="col1">
<h2>
<div class="container-fluid">
<div class="row-fluid" style="padding-top:25px;">
<div class="span3">
<div class="well sidebar-nav">
#block nav_block
$nav
#end block nav_block
#block sidebar_left_block
$sidebar_left
#end block sidebar_left_block
</div><!--/.well -->
</div><!--/span-->
<div class="span9">
<div class="hero-unit">
<h2>
#block title_block
$title
#end block title_block
@ -126,58 +124,62 @@
#block main_block
$main
#end block main_block
</div>
</article> <!-- End column 1 -->
<div class="col2">
#block nav_block
$nav
#end block nav_block
#block sidebar_left_block
$sidebar_left
#end block sidebar_left_block
</div> <!-- End column 2 -->
<aside>
<div class="col3">
<div id="ads">
<!--<a href="http://matthewjamestaylor.com">
<img src="mjt-125x125.gif" width="125" border="0" height="125" alt="Art and Design by Matthew James Taylor" />
</a>
-->
</div>
#block sidebar_right_block
</div>
<div class="row-fluid">
<div class="span8 alert alert-info">
#block sidebar_right_block
$sidebar_right
#end block sidebar_right_block
</div>
</aside> <!-- End column 3 -->
</div><!--/span-->
</div><!--/row-->
</div>
</div>
</div>
</div><!--/span-->
</div><!--/row-->
<footer>
<div id="footer"> <!-- should be replaced by <footer> for HTML5 transition -->
#block footer_block
<hr>
<footer>
<p>#block footer_block
<p>
Plinth is &copy; Copyright 2012 <a href="http://hackervisions.org" target="_blank">James Vasile</a>. It is
free software offered to you under the terms of
the <a href="http://www.gnu.org/licenses/agpl.html" target="_blank">GNU Affero General Public
License</a>, Version 3 or later.
License</a>, Version 3 or later. This Plinth theme was built by <a href="http://seandiggity.com" target="_blank">Sean &quot;Diggity&quot; O&apos;Brien</a>.
</p>
<!--<p>Current page: $current_url</p>-->
<p>Current page: $current_url</p>
<p>
This page uses
the <a href="http://matthewjamestaylor.com/blog/perfect-3-column.htm" target="_blank">Perfect
'Holy Grail' 3 Column Liquid Layout</a>
by <a href="http://matthewjamestaylor.com" target="_blank">Matthew James Taylor</a>.
And the <a href="http://html5reset.org" target="_blank">HTML5-Reset</a> boilerplate template.
</p>
#end block footer_block
</div> <!-- should be replaced by </footer> for HTML5 transition -->
</footer>
#end block footer_block</p>
</footer>
</div> <!-- End wrapper -->
</div><!--/.fluid-container-->
<!-- JavaScript <script> tags are placed at the end of the document to speed up initial page loads-->
<!-- Local copy of HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script type="text/javascript" src="$basehref/static/theme/js/libs/html5.js"></script>
<![endif]-->
<!-- Local copy of Modernizr -->
<script type="text/javascript" src="$basehref/static/theme/js/libs/modernizr-2.5.3-respond-1.1.0.min.js"></script>
<!-- Local copy of jQuery -->
<script type="text/javascript" src="$basehref/static/theme/js/libs/jquery-1.7.1.min.js"></script>
<!-- Bootstrap JS -->
<script type="text/javascript" src="$basehref/static/theme/js/libs/bootstrap/bootstrap-transition.js"></script>
<script type="text/javascript" src="$basehref/static/theme/js/libs/bootstrap/bootstrap-alert.js"></script>
<script type="text/javascript" src="$basehref/static/theme/js/libs/bootstrap/bootstrap-modal.js"></script>
<script type="text/javascript" src="$basehref/static/theme/js/libs/bootstrap/bootstrap-dropdown.js"></script>
<script type="text/javascript" src="$basehref/static/theme/js/libs/bootstrap/bootstrap-scrollspy.js"></script>
<script type="text/javascript" src="$basehref/static/theme/js/libs/bootstrap/bootstrap-tab.js"></script>
<script type="text/javascript" src="$basehref/static/theme/js/libs/bootstrap/bootstrap-tooltip.js"></script>
<script type="text/javascript" src="$basehref/static/theme/js/libs/bootstrap/bootstrap-popover.js"></script>
<script type="text/javascript" src="$basehref/static/theme/js/libs/bootstrap/bootstrap-button.js"></script>
<script type="text/javascript" src="$basehref/static/theme/js/libs/bootstrap/bootstrap-collapse.js"></script>
<script type="text/javascript" src="$basehref/static/theme/js/libs/bootstrap/bootstrap-carousel.js"></script>
<script type="text/javascript" src="$basehref/static/theme/js/libs/bootstrap/bootstrap-typeahead.js"></script>
<!-- JS plugins -->
<script type="text/javascript" src="$basehref/static/theme/js/plugins.js"></script>
<!-- Additional JS -->
<script type="text/javascript" src="$basehref/static/theme/js/functions.js"></script>
</body>
</html>

View File

@ -1,177 +0,0 @@
/*
HTML5 Reset :: style.css
----------------------------------------------------------
We have learned much from/been inspired by/taken code where offered from:
Eric Meyer :: http://ericmeyer.com
HTML5 Doctor :: http://html5doctor.com
and the HTML5 Boilerplate :: http://html5boilerplate.com
-------------------------------------------------------------------------------*/
/* Let's default this puppy out
-------------------------------------------------------------------------------*/
html, body, body div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, figure, footer, header, hgroup, menu, nav, section, time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
outline: 0;
font-size: 100%;
vertical-align: baseline;
background: transparent;
}
article, aside, figure, footer, header, hgroup, nav, section {display: block;}
/* Responsive images and other embedded objects
Note: keeping IMG here will cause problems if you're using foreground images as sprites.
If this default setting for images is causing issues, you might want to replace it with a .responsive class instead. */
img,
object,
embed {max-width: 100%;}
/* force a vertical scrollbar to prevent a jumpy page */
html {overflow-y: scroll;}
/* we use a lot of ULs that aren't bulleted.
don't forget to restore the bullets within content. */
ul {list-style: none;}
blockquote, q {quotes: none;}
blockquote:before,
blockquote:after,
q:before,
q:after {content: ''; content: none;}
a {margin: 0; padding: 0; font-size: 100%; vertical-align: baseline; background: transparent;}
del {text-decoration: line-through;}
abbr[title], dfn[title] {border-bottom: 1px dotted #000; cursor: help;}
/* tables still need cellspacing="0" in the markup */
table {border-collapse: collapse; border-spacing: 0;}
th {font-weight: bold; vertical-align: bottom;}
td {font-weight: normal; vertical-align: top;}
hr {display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0;}
input, select {vertical-align: middle;}
pre {
white-space: pre; /* CSS2 */
white-space: pre-wrap; /* CSS 2.1 */
white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */
word-wrap: break-word; /* IE */
}
input[type="radio"] {vertical-align: text-bottom;}
input[type="checkbox"] {vertical-align: bottom; *vertical-align: baseline;}
.ie6 input {vertical-align: text-bottom;}
select, input, textarea {font: 99% sans-serif;}
table {font-size: inherit; font: 100%;}
/* Accessible focus treatment
people.opera.com/patrickl/experiments/keyboard/test */
a:hover, a:active {outline: none;}
small {font-size: 85%;}
strong, th {font-weight: bold;}
td, td img {vertical-align: top;}
/* Make sure sup and sub don't screw with your line-heights
gist.github.com/413930 */
sub, sup {font-size: 75%; line-height: 0; position: relative;}
sup {top: -0.5em;}
sub {bottom: -0.25em;}
/* standardize any monospaced elements */
pre, code, kbd, samp {font-family: monospace, sans-serif;}
/* hand cursor on clickable elements */
.clickable,
label,
input[type=button],
input[type=submit],
button {cursor: pointer;}
/* Webkit browsers add a 2px margin outside the chrome of form elements */
button, input, select, textarea {margin: 0;}
/* make buttons play nice in IE */
button {width: auto; overflow: visible;}
/* scale images in IE7 more attractively */
.ie7 img {-ms-interpolation-mode: bicubic;}
/* prevent BG image flicker upon hover */
.ie6 html {filter: expression(document.execCommand("BackgroundImageCache", false, true));}
/* let's clear some floats */
.clearfix:before, .clearfix:after { content: "\0020"; display: block; height: 0; overflow: hidden; }
.clearfix:after { clear: both; }
.clearfix { zoom: 1; }
/* Ok, this is where the fun starts.
-------------------------------------------------------------------------------*/
/* new Linux- and Windows-friendly sans-serif font stack: http://mky.be/fontstack */
body {font: 13px Helmet, Freesans, sans-serif;}
/* using local fonts? make sure to read up on Paul Irish's
Bulletproof @font-face syntax: http://mky.be/font-face/bulletproof/ */
/* we like off-black for text */
body, select, input, textarea {color: #333;}
a {color: #03f;}
a:hover {color: #69f;}
/* Custom text-selection colors (remove any text shadows: twitter.com/miketaylr/status/12228805301) */
::-moz-selection{background: #fcd700; color: #fff; text-shadow: none;}
::selection {background: #fcd700; color: #fff; text-shadow: none;}
/* j.mp/webkit-tap-highlight-color */
a:link {-webkit-tap-highlight-color: #fcd700;}
ins {background-color: #fcd700; color: #000; text-decoration: none;}
mark {background-color: #fcd700; color: #000; font-style: italic; font-weight: bold;}
/* Print styles!
-------------------------------------------------------------------------------*/
@media print {
}
/* Media queries!
-------------------------------------------------------------------------------*/
/* Consider this: www.cloudfour.com/css-media-query-for-mobile-is-fools-gold/ */
@media screen and (max-device-width: 480px) {
}
@media all and (orientation: portrait) {
}
@media all and (orientation: landscape) {
}

View File

@ -1,30 +0,0 @@
/* 2 Column settings */
.colright {
float:left;
width:0%; /* width of page */
position:relative;
}
.threecol .colmid {
right:5%; /* width of the right column */
}
.threecol .colleft {
right:70%; /* width of the middle column */
}
.threecol .col1 {
width:66%; /* width of center column content (column width minus padding on either side) */
left:102%; /* 100% plus left padding of center column */
}
.threecol .col2 {
width:21%; /* Width of left column content (column width minus padding on either side) */
left:11%; /* width of (right column) plus (center column left and right padding) plus (left column left padding) */
}
.threecol .col3 {
width:21%; /* Width of right column content (column width minus padding on either side) */
/* Note this used to be 85%, but I subtracted 1% for padding to pull stuff closer to the margin */
left:84%; /* Please make note of the brackets here:
(100% - left column width) plus (center column left and right padding) plus (left column left and right padding) plus (right column left padding) */
}

View File

@ -1,328 +0,0 @@
body {
margin:0;
padding:0;
border:0; /* This removes the border around the viewport in old versions of IE */
width:100%;
background:#EEE;
min-width:600px; /* Minimum width of layout - remove line if not required */
/* The min-width property does not work in old versions of Internet Explorer */
font-size:90%;
font-family:Arial, Helvetica, sans-serif;
}
a {
color:#3D8FE2;
text-decoration:none;
}
a:hover {
color:#fff;
background:#3D8FE2;
text-decoration:none;
}
h1, h2, h3 {
margin:.8em 0 .2em 0;
padding:0;
}
p {
margin:.4em 0 .8em 0;
padding:0;
}
img {
margin:10px 0 5px;
}
#ads img {
display:block;
padding-top:10px;
}
/* Header styles */
#header {
clear:both;
float:left;
width:100%;
border-bottom:1px solid #000;
}
#headerleft {
float: left;
padding-left: 1em;
}
#headerleft a { color:#1D6FE2; text-decoration:none; outline: none;}
#headerright {
float:left;
}
#headerright p,
#headerright h1,
#headerright h2 {
padding:.4em 15px 0 15px;
margin:0;
}
#headerright h1 a,
#headerright h2 a {color:black; text-decoration:none; outline: none;}
#headerright ul {
clear:left;
float:left;
width:100%;
list-style:none;
margin:10px 0 0 0;
padding:0;
}
#headerright ul li {
display:inline;
list-style:none;
margin:0;
padding:0;
}
#headerright ul li a {
display:block;
float:left;
margin:0 0 0 1px;
padding:3px 10px;
text-align:center;
background:#EEE;
color:#000;
text-decoration:none;
position:relative;
left:15px;
line-height:1.3em;
}
#headerright ul li a:hover {
background:lightblue;
color:#fff;
}
#headerright ul li a.active,
#headerright ul li a.active:hover {
color:#fff;
background:#000;
font-weight:bold;
text-decoration:none;
}
#headerright ul li a span {
display:block;
}
/* 'widths' sub menu */
#layoutdims {
clear:both;
background:#eee;
background:lightblue;
border-top:4px solid #000;
margin:0;
padding:6px 15px !important;
text-align:right;
}
/* column container */
.colmask {
position:relative; /* This fixes the IE7 overflow hidden bug */
clear:both;
float:left;
width:100%; /* width of whole page */
overflow:hidden; /* This chops off any overhanging divs */
}
/* common column settings */
.colright,
.colmid,
.colleft {
float:left;
width:100%; /* width of page */
position:relative;
}
.col1,
.col2,
.col3 {
float:left;
position:relative;
padding:0 0em 1em 0; /* no left and right padding on columns, we just make them narrower instead
only padding top and bottom is included here, make it whatever value you need */
overflow:hidden;
}
.col2 h2,
.col3 h2 {color:black;
font-weight:bold;
font-size:100%;
text-align:center;
background:cornflowerblue;
margin-top: 1em;
margin-bottom: 0.4em;}
.col2 h3,
.col3 h3 {color:black;
font-weight:bold;
font-size:100%;
text-align:left;
padding-top: 0em;
margin-top: 0em;
margin-bottom: 0em;}
.col3 p {
margin: 0.4em 0.5em .8em 0.5em;
padding:0;
}
.col2 li {padding-bottom: 0.2em;}
.col2 a {padding-left: 0.2em;}
.col2 a.active,
.col2 a.active:hover {
color:#fff;
background:#000;
font-weight:bold;
text-decoration:none;
padding: 0.2em;
}
/* 3 Column settings */
.threecol {
background:#eee; /* right column background colour */
background:#EEE;
}
.threecol .colmid {
right:25%; /* width of the right column */
background:lightblue;
}
.threecol .colleft {
right:50%; /* width of the middle column */
background:#f4f4f4; /* left column background colour */
background:#EEE;
}
.threecol .col1 {
width:46%; /* width of center column content (column width minus padding on either side) */
left:102%; /* 100% plus left padding of center column */
}
.threecol .col2 {
width:21%; /* Width of left column content (column width minus padding on either side) */
left:31%; /* width of (right column) plus (center column left and right padding) plus (left column left padding) */
}
.threecol .col3 {
width:21%; /* Width of right column content (column width minus padding on either side) */
/* Note this used to be 85%, but I subtracted 1% for padding to pull stuff closer to the margin */
left:84%; /* Please make note of the brackets here:
(100% - left column width) plus (center column left and right padding) plus (left column left and right padding) plus (right column left padding) */
}
/* Footer styles */
#footer {
clear:both;
float:left;
width:100%;
border-top:1px solid #000;
padding: 1em;
font-size:75%;
background:lightblue;
}
#footer p {
margin:0;
}
/* Form Styles */
form.form {
margin:0 auto;
width:100%;
background:#EEE;
position:relative;
margin-top:2em;
}
form.form h2 {
color:#ffffff;
font-size:1.2em;
background:lightblue;
text-transform:uppercase;
padding:0.5em 0em 0.5em 0.5em;
margin-bottom: 1em;
}
form.form h3 {
color:red;
font-weight:bold;
font-size:1em;
padding:0.5em 0 0.5em 0.5em;
text-align:center;
background:#EEE;
}
form.form .line,
form.form p {
width:94%;
display: block;
background:#EEE;
padding:0.5em 0em 1em 1em;
padding-right:0.5em;
margin-left:0.5em;
background:#1D6FE2;
margin-top: 0em;
margin-bottom: 0em;
}
form.form label {
width:100%;
display: block;
background:#EEE;
padding:1em 0 0.5em 0em;
}
form.form .submit {
text-align:left;
}
form.form .indent {
padding: 0px;
padding-left: 0.75em;
}
form.form label span {
display: block;
color:black;
font-size:12px;
float:left;
width:30%;
text-align:right;
padding:0.5em 2em 0 0;
}
form.form .inputtext {
padding:0.2em 0.3em 0.2em 0.3em;
background:#1D6FE2;
border-bottom: 1px double #171717;
border-top: 1px double #171717;
border-left:1px double #333333;
border-right:1px double #333333;
}
form.form .checkbox { text-align: left;}
form.form .inputtextnowidth {
padding:0.5em 0.5em 0em 0em;
background:#1D6FE2;
border-bottom: 1px double #171717;
border-top: 1px double #171717;
border-left:1px double #333333;
border-right:1px double #333333;
}
form.form .textbox{
padding:7px 7px;
width:60%;
background:#1D6FE2;
border-bottom: 1px double #171717;
border-top: 1px double #171717;
border-left:1px double #333333;
border-right:1px double #333333;
overflow:hidden;
height:150px;
}
form.form .button
{
margin:0 0 10px 0;
padding:4px 7px;
background:lightblue;
border:0px;
position: relative;
top:10px;
width:100px;
border-bottom: 1px double lightblue;
border-top: 1px double cornflowerblue;
border-left:1px double lightblue;
border-right:1px double cornflowerblue;
}
.err {color:red;}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

View File

@ -20,4 +20,4 @@ $(window).resize(function() {
});
*/
*/

File diff suppressed because one or more lines are too long

View File

@ -1,11 +1,11 @@
function main_menu(items) {
output = "<ul>"
output = '<ul class="nav">'
for (item in items) {
i = items[item];
// Handle active page
if (i["active"]) {
active = 'class = "active"';
active = ' class="active"';
} else {
active = '';
}
@ -18,25 +18,25 @@ function main_menu(items) {
label = "&nbsp;<br />" + label;
}
output = output +'<li><a href="' + i["url"] + '" ' + active + '>' + label + "</a></li>";
output = output +'<li' + active + '><a href="' + i["url"] + '"' + active + '>' + label + "</a></li>";
}
output = output + "</ul>";
document.write(output);
}
function render_items(items) {
output = "<ul>";
output = '<ul class="nav nav-list"><li class="nav-header">Menu</li>';
for (item in items) {
i = items[item];
// Handle active page
if (i["active"]) {
active = 'class = "active"';
active = ' class="active"';
} else {
active = '';
}
output = output +'<li><a href="' + i["url"] + '" ' + active + '>' + i['label'] + "</a></li>";
output = output +'<li' + active + '><a href="' + i["url"] + '"' + active + '>' + i['label'] + "</a></li>";
if (i['subs']) {
output += render_items(i['subs']);
}
@ -49,6 +49,6 @@ function side_menu(items) {
if (items.length == 0) {
return 0;
}
output = "<h2>Menu</h2>" + render_items(items);
output = render_items(items);
document.write(output);
}
}

File diff suppressed because one or more lines are too long

View File

@ -1,15 +1,13 @@
# HTML5 Reset (http://html5reset.org)
# Plinth HTML5 Bootstrap Theme by Sean "Diggity" O'Brien (https://github.com/seandiggity/Plinth)
## Summary:
HTML5 Reset is a simple set of best practices to get web projects off on the right foot.
This theme is free software offered to you under the terms of the GNU Affero General Public License, Version 3 or later:
http://www.gnu.org/licenses/agpl.html
It is based upon Twitter's Bootstrap (http://twitter.github.com/bootstrap) with some pieces from HTML5 Boilerplate
(http://html5boilerplate.com) and HTML5-Reset (http://html5reset.org). As such, it includes code from a variety of
HTML5, CSS3, and JavaScript projects. Please see the individual files included with this theme for author information.
Refer to the Plinth documentation for information about editing themes and templates.
1. A style sheet designed to strip initial files from browsers, meaning you start off with a blank slate.
2. Easy to customize -- remove whatever you don't need, keep what you do.
3. Analytics and jQuery snippets in place
4. Meta tags ready for population
5. Empty mobile and print style sheets, including blocks for device orientation
6. Modernizr.js [http://www.modernizr.com/](http://www.modernizr.com/) enables HTML5 compatibility with IE (and a dozen other great features)
7. IE-specific classes for simple CSS-targeting
8. iPhone/iPad/iTouch icon snippets
9. Lots of other keen stuff...

View File

@ -1 +1 @@
css/style-plinth.css
less/style.less