[luci/demodata] Initial UI changes - new navigation hierarchy, css changes.
by Jan Pokorný
commit 228b26d1423da3c0042586a05d42084c542be1e9
Author: Jeremy Perry <jeremy.perry(a)redhat.com>
Date: Tue Oct 6 15:10:46 2009 -0400
Initial UI changes - new navigation hierarchy, css changes.
This is the first of a few rounds of changes to get the UI where we want it. I will need some help wiring up the active states for navigation. Currently the navigation trail is not indicated per the design intent, ex; http://file.rdu.redhat.com/~jeperry/sketch/conga-cluster.png
luci/templates/cluster_list.html | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
---
diff --git a/luci/templates/cluster_list.html b/luci/templates/cluster_list.html
index 46ec6b1..d123438 100644
--- a/luci/templates/cluster_list.html
+++ b/luci/templates/cluster_list.html
@@ -21,7 +21,7 @@
<a href="${tg.url(cmd_url + '/create')}" class="toolbar_button" id="tb_create">Create</a>
<a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">Add</a>
<input type="submit" name="${apply_cmds.DELETE}" value="${_('Delete')}" class="toolbar_button" id="tb_delete"/>
- </div>
+ </div>
<!--! OVERVIEW SECTION. -->
<div id="overview">
14 years, 7 months
[luci/demodata] Little changes connected with previous cherry-picking.
by Jan Pokorný
commit 5423e9db615229ad4cdc6334a46bc81f90b9d332
Author: Jan Pokorny <jpokorny(a)redhat.com>
Date: Fri Oct 9 20:27:00 2009 +0200
Little changes connected with previous cherry-picking.
luci/public/css/shared.css | 5 +++++
luci/templates/cluster_part/node.html | 8 ++++----
2 files changed, 9 insertions(+), 4 deletions(-)
---
diff --git a/luci/public/css/shared.css b/luci/public/css/shared.css
index c1f10a3..db2c2b0 100644
--- a/luci/public/css/shared.css
+++ b/luci/public/css/shared.css
@@ -350,6 +350,7 @@ margin-bottom: 2em;
#dh_update {
width: 20px;
height: 20px;
+ background: url('../images/buttons/reboot-grey.png') center left no-repeat;
}
#dh_update:hover {
@@ -360,6 +361,7 @@ margin-bottom: 2em;
#dh_reboot {
width: 20px;
height: 20px;
+ background: url('../images/buttons/reboot-grey.png') center left no-repeat;
}
#dh_reboot:hover {
@@ -370,6 +372,7 @@ margin-bottom: 2em;
#dh_fence {
width: 20px;
height: 20px;
+ background: url('../images/buttons/fence-grey.png') center left no-repeat;
}
#dh_fence:hover {
@@ -391,6 +394,7 @@ margin-bottom: 2em;
#dh_add {
width: 20px;
height: 20px;
+ background: url('../images/buttons/add-grey.png') center left no-repeat;
}
#dh_add:hover {
@@ -401,6 +405,7 @@ margin-bottom: 2em;
#dh_delete {
width: 20px;
height: 20px;
+ background: url('../images/buttons/delete-grey.png') center left no-repeat;
}
#dh_delete:hover {
diff --git a/luci/templates/cluster_part/node.html b/luci/templates/cluster_part/node.html
index ca0a053..39b9b53 100644
--- a/luci/templates/cluster_part/node.html
+++ b/luci/templates/cluster_part/node.html
@@ -113,10 +113,10 @@
<div id="details_header">
<h3 py:content="name">Node A</h3>
<div id="details_header_buttons">
- <a href="${tg.url(cmd_url + '/apply?' + apply_cmds.DELETE + '&name=' + name)}" id="dh_reboot" title="reboot"><span class="hide">reboot</span></a>
- <a href="${tg.url(cmd_url + '/apply?' + apply_cmds.FENCE + '&name=' + name)}" id="dh_fence" title="fence"><span class="hide">fence</span></a>
- <a href="${tg.url(cmd_url + '/apply?' + apply_cmds.LEAVE + '&name=' + name)}" id="dh_leave" title="leave cluster"><span class="hide">leave cluster</span></a>
- <a href="${tg.url(cmd_url + '/apply?' + apply_cmds.DELETE + '&name=' + name)}" id="dh_delete" title="delete"><span class="hide">delete</span></a>
+ <a href="${tg.url(cmd_url + '/apply?' + apply_cmds.DELETE + '&name=' + name)}" id="dh_reboot" title="reboot"><span class="hide">Reboot</span></a>
+ <a href="${tg.url(cmd_url + '/apply?' + apply_cmds.FENCE + '&name=' + name)}" id="dh_fence" title="fence"><span class="hide">Fence</span></a>
+ <a href="${tg.url(cmd_url + '/apply?' + apply_cmds.LEAVE + '&name=' + name)}" id="dh_leave" title="leave cluster"><span class="hide">Leave cluster</span></a>
+ <a href="${tg.url(cmd_url + '/apply?' + apply_cmds.DELETE + '&name=' + name)}" id="dh_delete" title="delete"><span class="hide">Delete</span></a>
</div>
<span class="details_header_info_label">status</span>
<span class="details_header_info" py:choose="details['status']">
14 years, 7 months
[luci/demodata] Another round ofstructural UI cleanup (css, html)
by Jan Pokorný
commit 79d65f3bc41fd13af5043d38d06239ea97772619
Author: Jeremy Perry <jeremy.perry(a)redhat.com>
Date: Thu Oct 8 18:01:47 2009 -0400
Another round ofstructural UI cleanup (css, html)
- cherry picked from 59dcd540b92451d208f3e9c1e6642f600577fd2a, merged without any extra attention, not tested
- I'll try it then and commit changes if necessary
luci/public/css/shared.css | 37 ++++++++++++++---------------
luci/public/css/style.css | 19 ++++++++------
luci/templates/cluster_part/failover.html | 4 +-
luci/templates/cluster_part/fence.html | 6 ++--
luci/templates/cluster_part/service.html | 6 ++--
5 files changed, 37 insertions(+), 35 deletions(-)
---
diff --git a/luci/public/css/shared.css b/luci/public/css/shared.css
index b0c0807..c1f10a3 100644
--- a/luci/public/css/shared.css
+++ b/luci/public/css/shared.css
@@ -106,11 +106,11 @@ tr.grid_row td {
/* --------------------------------- toolbar -------------------------------- */
-.toolbar {
- padding-left: 1em;
- /*line-height: 23px;
- height: 31px;*/
- background: #484646 /*url(../images/toolbar_line.png) top left repeat-x;*/
+#toolbar {
+ clear: both;
+ padding: 0 1em;
+ margin: 1em 1em 0 1em;
+ background: #484646; /*url(../images/toolbar_line.png) top left repeat-x;*/
}
.toolbar#toolbar_collapsed {
@@ -144,7 +144,7 @@ tr.grid_row td {
/* update */
#tb_update {
background: url('../images/buttons/reboot-white.png') center left no-repeat;
- padding-left: 17px;
+ padding-left: 18px;
border: none;
font-size: inherit;
}
@@ -156,7 +156,7 @@ tr.grid_row td {
/* reboot */
#tb_reboot {
background: url('../images/buttons/reboot-white.png') center left no-repeat;
- padding-left: 17px;
+ padding-left: 18px;
border: none;
font-size: inherit;
}
@@ -168,7 +168,7 @@ tr.grid_row td {
/* fence */
#tb_fence {
background: url('../images/buttons/fence-white.png') center left no-repeat;
- padding-left: 17px;
+ padding-left: 18px;
border: none;
font-size: inherit;
}
@@ -180,7 +180,7 @@ tr.grid_row td {
/* leave (cluster) */
#tb_leave {
background: url('../images/buttons/leave-white.png') center left no-repeat;
- padding-left: 31px;
+ padding-left: 32px;
border: none;
font-size: inherit;
}
@@ -192,7 +192,7 @@ tr.grid_row td {
/* add */
#tb_add {
background: url('../images/buttons/add-white.png') center left no-repeat;
- padding-left: 17px;
+ padding-left: 18px;
border: none;
font-size: inherit;
}
@@ -204,7 +204,7 @@ tr.grid_row td {
/* create */
#tb_create {
background: url('../images/buttons/create-white.png') center left no-repeat;
- padding-left: 17px;
+ padding-left: 18px;
border: none;
font-size: inherit;
}
@@ -349,7 +349,7 @@ margin-bottom: 2em;
/* update */
#dh_update {
width: 20px;
- background: url('../images/buttons/reboot-grey.png') center left no-repeat;
+ height: 20px;
}
#dh_update:hover {
@@ -359,7 +359,7 @@ margin-bottom: 2em;
/* reboot */
#dh_reboot {
width: 20px;
- background: url('../images/buttons/reboot-grey.png') center left no-repeat;
+ height: 20px;
}
#dh_reboot:hover {
@@ -369,7 +369,7 @@ margin-bottom: 2em;
/* fence */
#dh_fence {
width: 20px;
- background: url('../images/buttons/fence-grey.png') center left no-repeat;
+ height: 20px;
}
#dh_fence:hover {
@@ -379,7 +379,7 @@ margin-bottom: 2em;
/* leave (cluster) */
#dh_leave {
width: 30px;
- line-height: 60%;
+ height: 20px;
background: url('../images/buttons/leave-grey.png') center left no-repeat;
}
@@ -390,7 +390,7 @@ margin-bottom: 2em;
/* add */
#dh_add {
width: 20px;
- background: url('../images/buttons/add-grey.png') center left no-repeat;
+ height: 20px;
}
#dh_add:hover {
@@ -400,10 +400,9 @@ margin-bottom: 2em;
/* delete */
#dh_delete {
width: 20px;
- background: url('../images/buttons/delete-grey.png') center left no-repeat;
+ height: 20px;
}
#dh_delete:hover {
background-image: url('../images/buttons/delete-white.png');
-}
-
+}
\ No newline at end of file
diff --git a/luci/public/css/style.css b/luci/public/css/style.css
index 9edbba6..67dbb1a 100644
--- a/luci/public/css/style.css
+++ b/luci/public/css/style.css
@@ -86,7 +86,7 @@ ul.mainmenu li.loginlogout a:hover {
}
ul.submenu {
- margin: 0 0 10px 0;
+ margin: 1em;
padding: 0 0px;
position: relative;
float: left;
@@ -142,18 +142,22 @@ ul.headermenu li a {
text-decoration: none;
}
+#wrapper {
+ width: 960px;
+}
+
#content {
background: #fff url('../images/contentbg.png') left bottom no-repeat;
margin: 0;
- padding: 10px;
+ padding: 0;
overflow: hidden;
float: left;
min-height: 400px;
- width: 940px;
+ width: 100%;
}
-#content .currentpage {
- margin-top: 0;
+.currentpage {
+ color:red;
}
/* Login form*/
@@ -363,10 +367,10 @@ background:#f9c5c1 url(../images/error.png) no-repeat scroll 10px center;
}
#flash .alert,
#flash .info {
-background:#EEEEFF url(../images/info.png) no-repeat scroll 10px center;
+background:#e9f4fa url(../images/info.png) no-repeat scroll 10px center;
}
.notice {
-background:#EEEEFF url(../images/info.png) no-repeat scroll 10px center;
+background:#e9f4fa url(../images/info.png) no-repeat scroll 10px center;
}
.fielderror {
color:red;
@@ -375,4 +379,3 @@ font-weight:bold;
div.clearingdiv {
clear:both;
}
-
diff --git a/luci/templates/cluster_part/failover.html b/luci/templates/cluster_part/failover.html
index 27d8108..1dfbe6b 100644
--- a/luci/templates/cluster_part/failover.html
+++ b/luci/templates/cluster_part/failover.html
@@ -19,8 +19,8 @@
<form action="${tg.url(cmd_url + '/apply')}" method="post">
<div class="toolbar">
- <input type="submit" name="${apply_cmds.DELETE}" value="${_('delete')}" class="toolbar_button" id="tb_delete"/>
- <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">add</a>
+ <input type="submit" name="${apply_cmds.DELETE}" value="${_('Delete')}" class="toolbar_button" id="tb_delete"/>
+ <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">Add</a>
</div>
<!--! OVERVIEW SECTION. -->
diff --git a/luci/templates/cluster_part/fence.html b/luci/templates/cluster_part/fence.html
index f2450ee..c17dbef 100644
--- a/luci/templates/cluster_part/fence.html
+++ b/luci/templates/cluster_part/fence.html
@@ -17,9 +17,9 @@
<form action="${tg.url(cmd_url + '/apply')}" method="post">
<div class="toolbar">
- <input type="submit" name="${apply_cmds.UPDATE}" value="${_('update')}" class="toolbar_button" id="tb_update"/>
- <input type="submit" name="${apply_cmds.DELETE}" value="${_('delete')}" class="toolbar_button" id="tb_delete"/>
- <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">add</a>
+ <input type="submit" name="${apply_cmds.UPDATE}" value="${_('Update')}" class="toolbar_button" id="tb_update"/>
+ <input type="submit" name="${apply_cmds.DELETE}" value="${_('Delete')}" class="toolbar_button" id="tb_delete"/>
+ <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">Add</a>
</div>
<!--! OVERVIEW SECTION. -->
diff --git a/luci/templates/cluster_part/service.html b/luci/templates/cluster_part/service.html
index a7269ff..0b5a704 100644
--- a/luci/templates/cluster_part/service.html
+++ b/luci/templates/cluster_part/service.html
@@ -17,9 +17,9 @@
<form action="${tg.url(cmd_url + '/apply')}" method="post">
<div class="toolbar">
- <input type="submit" name="${apply_cmds.REBOOT}" value="${_('reboot')}" class="toolbar_button" id="tb_reboot" />
- <input type="submit" name="${apply_cmds.DELETE}" value="${_('delete')}" class="toolbar_button" id="tb_delete" />
- <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">add</a>
+ <input type="submit" name="${apply_cmds.REBOOT}" value="${_('Reboot')}" class="toolbar_button" id="tb_reboot" />
+ <input type="submit" name="${apply_cmds.DELETE}" value="${_('Delete')}" class="toolbar_button" id="tb_delete" />
+ <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">Add</a>
</div>
<!--! OVERVIEW SECTION. -->
14 years, 7 months
[luci/demodata] Merged with (most of) changes in master, Jeremy's 2nd commit.
by Jan Pokorný
commit c7bddb2ab07d57fd5c4791c9d2a1a88cdc82c5d1
Author: Jan Pokorny <jpokorny(a)redhat.com>
Date: Fri Oct 9 16:57:13 2009 +0200
Merged with (most of) changes in master, Jeremy's 2nd commit.
- homebase part in the URL removed as unneeded, displaying as root's index should be better (login form can still be present if autentization for this index method is required)
- '/cluster' removed, considered unneeded, change could be better for user (less steps to clusters list)
- title processing in master.html is back again (removed accidentally while merging)
luci/controllers/cluster.py | 2 +
luci/controllers/root.py | 56 ++++++++---
luci/public/css/shared.css | 45 +++------
luci/templates/cluster.html | 41 --------
luci/templates/cluster_part/failover.html | 6 +-
luci/templates/cluster_part/node.html | 6 +-
luci/templates/cluster_part/service.html | 4 +-
luci/templates/create.html | 149 ++++-------------------------
luci/templates/homebase.html | 25 +++---
luci/templates/master.html | 31 ++++--
luci/widgets/create_cluster_form.py | 4 +-
11 files changed, 118 insertions(+), 251 deletions(-)
---
diff --git a/luci/controllers/cluster.py b/luci/controllers/cluster.py
index 9e5af80..e613018 100644
--- a/luci/controllers/cluster.py
+++ b/luci/controllers/cluster.py
@@ -47,6 +47,7 @@ from luci.lib.base import SubController, SubControllerApplyMixin, \
from luci.controllers.decorators import *
from luci.lib.app_strings import Title, FlashMsg
from luci.lib.helpers import relativeUrlList2Str
+from luci.widgets.create_cluster_form import create_cluster_form
__all__ = ['ClusterController', 'ClusterCmdController']
@@ -182,6 +183,7 @@ class ClusterCmdController(SubController, SubControllerApplyMixin):
def create(self, name=''):
"""Display form for cluster creation."""
+ tmpl_context.form = create_cluster_form
cmd_url_str = relativeUrlList2Str(scheme.APP_PREFIX,
base2CmdCtrl(scheme.CLUSTERS))
diff --git a/luci/controllers/root.py b/luci/controllers/root.py
index d48f3b6..0cd47d9 100644
--- a/luci/controllers/root.py
+++ b/luci/controllers/root.py
@@ -69,33 +69,59 @@ class RootController(BaseController):
# METHODS OF THE ROOT CONTROLLER
- @expose('luci.templates.index')
+ # Homebase pages.
+
+ @expose('luci.templates.homebase')
+ # Uncomment this (or replace with more suitable decorator/predicate)
+ # to apply access control.
+ #(a)require(predicates.not_anonymous())
def index(self):
"""Handle the front-page."""
- return dict(page='index')
+ return dict(homebasepage='homebasepage')
+
+ @expose('luci.templates.homebase')
+ # Uncomment this (or replace with more suitable decorator/predicate)
+ # to apply access control.
+ #(a)require(predicates.not_anonymous())
+ def addsystem(self):
+ tmpl_context.form = create_add_system_form
+ return dict(homebasepage='addsystem')
+
+ @expose('luci.templates.homebase')
+ # Uncomment this (or replace with more suitable decorator/predicate)
+ # to apply access control.
+ #(a)require(predicates.not_anonymous())
+ def addexisting(self):
+ tmpl_context.form = create_add_existing_form
+ return dict(homebasepage='addexisting')
+
+ @expose('luci.templates.homebase')
+ # Uncomment this (or replace with more suitable decorator/predicate)
+ # to apply access control.
+ #(a)require(predicates.not_anonymous())
+ def adduser(self):
+ tmpl_context.form = create_add_user_form
+ return dict(homebasepage='adduser')
+
+ @expose('luci.templates.homebase')
+ # Uncomment this (or replace with more suitable decorator/predicate)
+ # to apply access control.
+ #(a)require(predicates.not_anonymous())
+ def managesystems(self):
+ tmpl_context.form = create_manage_systems_form
+ return dict(homebasepage='managesystems')
+
@expose('luci.templates.about')
def about(self):
"""Handle the 'about' page."""
return dict(page='about')
- @expose('luci.templates.homebase')
- def homebase(self, homebasepage='homebasepage', **args):
- if homebasepage == 'addsystem':
- tmpl_context.form = create_add_system_form
- elif homebasepage == 'addexisting':
- tmpl_context.form = create_add_existing_form
- elif homebasepage == 'adduser':
- tmpl_context.form = create_add_user_form
- elif homebasepage == 'managesystems':
- tmpl_context.form = create_manage_systems_form
-
- return dict(page='homebase',homebasepage=homebasepage,args=args)
@expose('luci.templates.cluster')
def cluster(self,clusterpage='clusterlist', **args):
if clusterpage == 'createcluster':
- tmpl_context.form = create_cluster_form
+ tmpl_context.form = create_cluster_form
return dict(page='cluster', clusterpage=clusterpage)
diff --git a/luci/public/css/shared.css b/luci/public/css/shared.css
index 13f0730..b0c0807 100644
--- a/luci/public/css/shared.css
+++ b/luci/public/css/shared.css
@@ -7,7 +7,8 @@ table {
}
table th {
- font-weight: normal;
+ font-size: 10px;
+ color: #777;
}
table input {
@@ -35,31 +36,18 @@ img {
.float_button {
float: right;
clear: right;
- right: 15em;
margin: 0;
- width: 14em;
display: block;
- background-color: #f2f2f2;
- text-align: center;
- border: 1px solid;
- color: #666;
- text-decoration: none;
- font-size: medium;
- z-index: 99;
cursor: pointer;
- -moz-border-radius: 6px 6px;
}
a.float_button {
- padding: 1px 0;
}
.float_button:hover {
- background-color: #e8f6d4;
}
.float_button:active {
- background-color: #d2edaa;
}
.input_priority, .input_priority_disabled {
@@ -86,7 +74,7 @@ a.float_button {
}
tr.grid_row td {
- padding: 3px;
+ padding: 4px 1em 4px 0;
}
@@ -125,7 +113,7 @@ tr.grid_row td {
background: #484646 /*url(../images/toolbar_line.png) top left repeat-x;*/
}
-.toolbar#toolbar_collapsed{
+.toolbar#toolbar_collapsed {
display: none;
overflow: hidden;
}
@@ -140,9 +128,11 @@ tr.grid_row td {
}
.toolbar_button {
- margin: 10px 10px 10px 0;
+ margin: 8px 8px 8px 0;
color: #ffffff;
text-decoration: none;
+ padding: 2px;
+ cursor: pointer;
}
.toolbar_button:hover {
@@ -156,7 +146,6 @@ tr.grid_row td {
background: url('../images/buttons/reboot-white.png') center left no-repeat;
padding-left: 17px;
border: none;
- cursor: pointer;
font-size: inherit;
}
@@ -169,7 +158,6 @@ tr.grid_row td {
background: url('../images/buttons/reboot-white.png') center left no-repeat;
padding-left: 17px;
border: none;
- cursor: pointer;
font-size: inherit;
}
@@ -182,7 +170,6 @@ tr.grid_row td {
background: url('../images/buttons/fence-white.png') center left no-repeat;
padding-left: 17px;
border: none;
- cursor: pointer;
font-size: inherit;
}
@@ -195,7 +182,6 @@ tr.grid_row td {
background: url('../images/buttons/leave-white.png') center left no-repeat;
padding-left: 31px;
border: none;
- cursor: pointer;
font-size: inherit;
}
@@ -208,7 +194,6 @@ tr.grid_row td {
background: url('../images/buttons/add-white.png') center left no-repeat;
padding-left: 17px;
border: none;
- cursor: pointer;
font-size: inherit;
}
@@ -221,7 +206,6 @@ tr.grid_row td {
background: url('../images/buttons/create-white.png') center left no-repeat;
padding-left: 17px;
border: none;
- cursor: pointer;
font-size: inherit;
}
@@ -234,7 +218,6 @@ tr.grid_row td {
background: url('../images/buttons/delete-white.png') center left no-repeat;
padding-left: 17px;
border: none;
- cursor: pointer;
font-size: inherit;
}
@@ -246,7 +229,7 @@ tr.grid_row td {
/* -------------------------------- overview -------------------------------- */
#overview {
- margin: 0 0 5px 0;
+ margin: 0 1em 1em;
}
#overview tbody tr.even {
@@ -310,7 +293,7 @@ tr.grid_row td {
/* --------------------------------- details -------------------------------- */
#details {
-margin-bottom: 20px;
+margin-bottom: 2em;
}
.details_section {
@@ -325,8 +308,8 @@ margin-bottom: 20px;
}
#details_header {
- padding: 1px 1em;
- margin: 0 0 1em 0;
+ padding: 0 1em;
+ margin: 1em;
height: 54px;
color: #666;
border-top: #555 6px solid;
@@ -335,14 +318,14 @@ margin-bottom: 20px;
#details_header h3 {
margin: 0;
- padding: 4px 0 0 0;
+ padding: 8px 0 0 0;
font-size: medium;
}
#details_header_buttons {
float: right;
position: relative;
- top: -5px;
+ top: -12px;
width: 25%;
}
@@ -350,7 +333,7 @@ margin-bottom: 20px;
float: right;
display: block;
text-decoration: none;
- padding: 0 4px;
+ padding: 0 0 0 4px;
}
.details_header_info {
diff --git a/luci/templates/cluster_part/failover.html b/luci/templates/cluster_part/failover.html
index 0aa54b2..27d8108 100644
--- a/luci/templates/cluster_part/failover.html
+++ b/luci/templates/cluster_part/failover.html
@@ -76,7 +76,7 @@
<div id="details_header">
<h3 py:content="name">Failover name</h3>
<div id="details_header_buttons">
- <a href="${tg.url(cmd_url + '/apply?' + apply_cmds.DELETE + '&name=' + name)}" id="dh_delete" title="delete"><span class="hide">delete</span></a>
+ <a href="${tg.url(cmd_url + '/apply?' + apply_cmds.DELETE + '&name=' + name)}" id="dh_delete" title="delete"><span class="hide">Delete</span></a>
</div>
</div>
@@ -155,8 +155,8 @@
<tr class="grid_row">
<th class="icon"></th>
<th class="fdom_tmembers_name"></th>
- <th class="fdom_tmembers_member">member</th>
- <th class="fdom_tmembers_priority">priority</th>
+ <th class="fdom_tmembers_member">Member</th>
+ <th class="fdom_tmembers_priority">Priority</th>
<td class="table_space"></td>
</tr>
</thead>
diff --git a/luci/templates/cluster_part/node.html b/luci/templates/cluster_part/node.html
index d2d7ad9..ca0a053 100644
--- a/luci/templates/cluster_part/node.html
+++ b/luci/templates/cluster_part/node.html
@@ -160,7 +160,7 @@
<tr class="grid_row">
<th class="icon"></th>
<th class="node_tfdoms_name"></th>
- <th class="node_tfdoms_priority">priority</th>
+ <th class="node_tfdoms_priority">Priority</th>
<td class="table_space"></td>
</tr>
</thead>
@@ -187,7 +187,7 @@
<tr class="grid_row">
<th class="icon"></th>
<th class="node_tfences_name"></th>
- <th class="node_tfences_type">type</th>
+ <th class="node_tfences_type">Type</th>
<td class="table_space"></td>
</tr>
</thead>
@@ -214,7 +214,7 @@
<tr class="grid_row">
<th class="icon"></th>
<th class="node_tdaemons_name"></th>
- <th class="node_tdaemons_status">status</th>
+ <th class="node_tdaemons_status">Status</th>
<td class="table_space"></td>
</tr>
</thead>
diff --git a/luci/templates/cluster_part/service.html b/luci/templates/cluster_part/service.html
index be85cf3..a7269ff 100644
--- a/luci/templates/cluster_part/service.html
+++ b/luci/templates/cluster_part/service.html
@@ -110,7 +110,7 @@
<a href="${tg.url(cmd_url + '/apply?' + apply_cmds.REBOOT + '&name=' + name)}" id="dh_update" title="reboot"><span class="hide">reboot</span></a>
<!-- TODO: remove? <a href="${tg.url(request.path_qs)}" id="dh_update" title="refresh"><span class="hide">refresh</span></a> -->
</div>
- <span class="details_header_info_label">status</span> <span class="details_header_info">${tmpl_context.current_service_status}</span>
+ <span class="details_header_info_label">Status</span> <span class="details_header_info">${tmpl_context.current_service_status}</span>
<form style="display: inline; padding-left: 24px; ">
<select style="font-size: small;">
<option value="null">Start on node...</option>
@@ -132,7 +132,7 @@
<tr class="grid_row">
<th class="icon"></th>
<th class="service_tresources_name"></th>
- <th class="service_tresources_type">type</th>
+ <th class="service_tresources_type">Type</th>
<td class="table_space"></td>
</tr>
</thead>
diff --git a/luci/templates/create.html b/luci/templates/create.html
index 4db6ba9..5077542 100644
--- a/luci/templates/create.html
+++ b/luci/templates/create.html
@@ -12,136 +12,23 @@
</head>
<body>
-
- <form action="${tg.url(cmd_url + '/cluster_create')}" method="post">
-
- <h1>Create a new cluster</h1>
-
- <table id="systemsTable" class="systemsTable" cellspacing="0">
- <thead class="systemsTable">
- <tr class="systemsTable"><td class="systemsTable" colspan="2">
- <div class="systemsTableTop">
- <strong>Cluster Name</strong>
- <input class="hbInputSys" type="text"
- id="clustername" name="clustername" />
- </div>
- </td></tr>
- <tr class="systemsTable">
- <th class="systemsTable">Node Hostname</th>
- <th class="systemsTable">Root Password</th>
- <th class="systemsTable">Key ID</th>
- <th></th>
- </tr>
- </thead>
-
- <tfoot class="systemsTable">
- <tr class="systemsTable"><td class="systemsTable" colspan="2">
- <div class="systemsTableEnd">
- <input type="button" value="Add a cluster node" />
- </div>
- </td></tr>
-
- <tr class="systemsTable"><td colspan="2" class="systemsTable">
- </td></tr>
-
- <tr class="systemsTable"><td colspan="2" class="systemsTable">
- <input type="radio" name="download_pkgs" value="1" />
- Download packages
- </td></tr>
-
- <tr class="systemsTable"><td colspan="2" class="systemsTable">
- <input type="radio" name="download_pkgs" value="0" />
- Use locally installed packages.
- </td></tr>
-
- <tr class="systemsTable"><td colspan="2" class="systemsTable">
- </td></tr>
- <tr class="systemsTable"><td colspan="2" class="systemsTable">
- </td></tr>
- <tr class="systemsTable"><td colspan="2" class="systemsTable">
- <input type="checkbox" name="enable_storage" />Enable shared storage support
- </td></tr>
- <tr class="systemsTable"><td colspan="2" class="systemsTable">
- <input type="checkbox" id="reboot_nodes" name="reboot_nodes"
- />Reboot nodes before joining cluster
- </td></tr>
- <tr class="systemsTable"><td colspan="2" class="systemsTable">
- <input type="checkbox"
- name="allSameCheckBox" id="allSameCheckBox" />
-
- Check if node passwords are identical.
- </td></tr>
- </tfoot>
-
- <tbody>
- <tr class="systemsTable" id="__SYSTEM_ROW_0">
- <td class="systemsTable">
- <input class="hbInputSys" type="text"
- id="__SYSTEM0_addr" name="__SYSTEM0_addr" />
- </td>
- <td class="systemsTable">
- <input type="password"
- class="hbInputPass" autocomplete="off"
- id="__SYSTEM0_passwd" name="__SYSTEM0_passwd" />
- </td>
- <td class="systemsTable">
- <img id="__SYSTEM0Fingerprint" src="lock-open.png"
- title="no key fingerprint available" />
- </td>
- <td class="systemsTable">
- <img src="delete-row.png" class="deleteRow"
- title="delete this row" />
- </td>
- </tr>
- <tr class="systemsTable" id="__SYSTEM_ROW_1">
- <td class="systemsTable">
- <input class="hbInputSys" type="text"
- id="__SYSTEM1_addr" name="__SYSTEM1_addr" />
- </td>
- <td class="systemsTable">
- <input type="password"
- class="hbInputPass" autocomplete="off"
- id="__SYSTEM1_passwd" name="__SYSTEM1_passwd" />
- </td>
- <td class="systemsTable">
- <img id="__SYSTEM1Fingerprint" src="lock-open.png"
- title="no key fingerprint available" />
- </td>
- <td class="systemsTable">
- <img src="delete-row.png" class="deleteRow"
- title="delete this row" />
- </td>
- </tr>
- <tr class="systemsTable" id="__SYSTEM_ROW_2">
- <td class="systemsTable">
- <input class="hbInputSys" type="text"
- id="__SYSTEM2_addr" name="__SYSTEM2_addr" />
- </td>
- <td class="systemsTable">
- <input type="password"
- class="hbInputPass" autocomplete="off"
- id="__SYSTEM2_passwd" name="__SYSTEM2_passwd" />
- </td>
- <td class="systemsTable">
- <img id="__SYSTEM2Fingerprint" src="lock-open.png"
- title="no key fingerprint available" />
- </td>
- <td class="systemsTable">
- <img src="delete-row.png" class="deleteRow"
- title="delete this row" />
- </td>
- </tr>
- <tr class="systemsTable"><td colspan="2" class="systemsTable">
- </td></tr>
- <tr class="systemsTable"><td colspan="2" class="systemsTable">
- </td></tr>
- </tbody>
- </table>
-
- <div class="hbSubmit" id="hbSubmit">
- <input type="hidden" name="cluster_create" value="1" />
- <input type="submit" name="Submit" value="Submit" />
- </div>
- </form>
+ <table>
+ <tr>
+ <td valign="top">
+ <div class="sidebar">
+ <a href="${tg.url('/clusters/')}">Cluster List</a><br/>
+ <a href="${tg.url('/cluster/createcluster')}">Create a New Cluster</a><br/>
+ <a href="${tg.url('/cluster/configure')}">Configure</a><br/>
+ </div>
+ </td>
+ <td valign="top">
+ <div class="mainpage">
+ <div>
+ <div py:replace="tmpl_context.form()">Input Form</div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ </table>
</body>
</html>
diff --git a/luci/templates/homebase.html b/luci/templates/homebase.html
index 0dae841..dca786c 100644
--- a/luci/templates/homebase.html
+++ b/luci/templates/homebase.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:py="http://genshi.edgewall.org/"
@@ -15,14 +15,15 @@
<div class="sidebar">
<h2>Take action</h2>
<div class="actions">
- <a href="/homebase/addsystem">Add a System</a><br/>
- <a href="/homebase/addexisting">Add an Existing Cluster</a><br/>
- <a href="/homebase/managesystems">Manage Systems</a><br/>
- <a href="/homebase/adduser">Add a User</a><br/>
+ <a href="/addsystem">Add a System</a><br/>
+ <a href="/addexisting">Add an Existing Cluster</a><br/>
+ <a href="/managesystems">Manage Systems</a><br/>
+ <a href="/adduser">Add a User</a><br/>
</div>
</div>
- <div class="mainpage">
- <div py:if="homebasepage == 'managesystems'">
+ <div class="mainpage"
+ py:choose="homebasepage">
+ <div py:when="'managesystems'">
<h3>Manage Systems and Clusters</h3>
<hr/>
<fieldset><legend>Reauthenticate</legend>
@@ -35,26 +36,26 @@
<h3>Storage Systems</h3>
</fieldset>
</div>
- <div py:if="homebasepage == 'addsystem'">
+ <div py:when="'addsystem'">
<h3>Add a System</h3>
<hr/>
<div py:replace="tmpl_context.form()">Input Form</div>
</div>
- <div py:if="homebasepage == 'addexisting'">
+ <div py:when="'addexisting'">
<h3>Add an Existing Cluster</h3>
<hr/>
<p>Enter one node from the cluster you wish to add to the Luci management interface.</p>
<div py:replace="tmpl_context.form()">Input Form</div>
</div>
- <div py:if="homebasepage == 'adduser'">
+ <div py:when="'adduser'">
<h3>Add a User</h3>
<hr/>
<div py:replace="tmpl_context.form()">Input Form</div>
</div>
- <div py:if="homebasepage == 'homebasepage'">
+ <div py:when="'homebasepage'">
<h2>Problems</h2>
<p>Table with summary of problems goes here</p>
- <h2><a href="${tg.url('/cluster')}" class="${('', 'active')[defined('page') and page==page=='clusters']}">Clusters</a></h2>
+ <h2><a href="${tg.url('/clusters')}" class="${('', 'active')[defined('page') and page==page=='clusters']}">Clusters</a></h2>
<p>Table with summary of clusters goes here.</p>
</div>
</div>
diff --git a/luci/templates/master.html b/luci/templates/master.html
index 7dc8d16..fdfed19 100644
--- a/luci/templates/master.html
+++ b/luci/templates/master.html
@@ -9,24 +9,35 @@
<xi:include href="footer.html" />
<xi:include href="title.html" />
<head py:match="head" py:attrs="select('@*')">
- <meta content="text/html; charset=UTF-8" http-equiv="content-type" py:replace="''"/>
- <title py:replace="''">Your title goes here</title>
- <meta py:replace="select('*')"/>
-
- <link rel="stylesheet" type="text/css" media="screen" href="${tg.url('/css/style.css')}" />
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" py:replace="''"/>
+ <meta py:replace="select('*')"/>
+ <link rel="stylesheet" type="text/css" media="screen" href="${tg.url('/css/style.css')}" />
</head>
+<!--! Title processing - find title definition in certain template and
+ pass it to 'title' macro. !-->
+<py:match path="title" once="true"
+ py:with="title_text = unicode(select('text()'))">
+ <title>
+ ${title(title_text)}
+ </title>
+</py:match>
+
<body py:match="body" py:attrs="select('@*')">
+ <div id="wrapper">
${header()}
<div id="breadcrumb">
<ul class="mainmenu">
- <li><a href="${tg.url('/homebase')}" class="${('', 'active')[defined('page') and page==page=='homebase']}">Homebase</a></li>
- <li><a href="${tg.url('/cluster')}" class="${('', 'active')[defined('page') and page==page=='clusters']}">Clusters*</a></li>
+ <li><a href="${tg.url('/')}" class="${('', 'active')[defined('page') and page=='homebase']}">Homebase</a></li>
+ <li><a href="${tg.url('/clusters')}" class="${('', 'active')[defined('page') and page=='clusters']}">Clusters*</a></li>
</ul>
</div>
<div id="content">
+ <py:with vars="flash=tg.flash_obj.render('flash', use_js=False)">
+ <div py:if="flash" py:content="XML(flash)" />
+ </py:with>
<py:if test="'cluster_url' in dir(tmpl_context)">
<ul class="submenu">
<li><a href="${tg.url(tmpl_context.cluster_url + '/nodes')}">Nodes</a></li>
@@ -39,14 +50,12 @@
<div class="currentpage">
</div>
</py:if>
- <py:with vars="flash=tg.flash_obj.render('flash', use_js=False)">
- <div py:if="flash" py:content="XML(flash)" />
- </py:with>
- <!-- Start of content -->
+
<div py:replace="select('*|text()')"/>
<!-- End of content -->
</div>
${footer()}
+ </div>
</body>
</html>
diff --git a/luci/widgets/create_cluster_form.py b/luci/widgets/create_cluster_form.py
index 91275c7..64dce46 100644
--- a/luci/widgets/create_cluster_form.py
+++ b/luci/widgets/create_cluster_form.py
@@ -3,7 +3,7 @@ import tw.forms as twf
from tw.forms import TableForm, TextField, PasswordField, RadioButtonList, RadioButton, CheckBox, CheckBoxTable, Label, Spacer
import tw.dynforms as twd
-__all__ = ["CreateClusterForm", "create_cluster_form"]
+__all__ = ["CreateClusterForm", "create_cluster_form"]
class HostForm(twd.GrowingTableFieldSet):
children = [
@@ -21,4 +21,4 @@ class CreateClusterForm(twd.CustomisedForm):
CheckBoxTable('opt', options=[('shared_storage', "Enable Shared Storage Support"), ('reboot_nodes', "Reboot nodes before joining cluster"), ('same_passwd', "Check if node passwords are identical")], suppress_label = True, default = ("Enable Shared Storage Support"))
]
-create_cluster_form = CreateClusterForm('create_cluster_form', action='createcluster')
+create_cluster_form = CreateClusterForm('create_cluster_form', action='cluster_create')
14 years, 7 months
[luci] Another round ofstructural UI cleanup (css, html)
by Jeremy Perry
commit 59dcd540b92451d208f3e9c1e6642f600577fd2a
Author: Jeremy Perry <jeremy.perry(a)redhat.com>
Date: Thu Oct 8 18:01:47 2009 -0400
Another round ofstructural UI cleanup (css, html)
luci/public/css/shared.css | 100 ++++++++++++++---------------
luci/public/css/style.css | 20 ++++--
luci/templates/cluster_part/failover.html | 10 ++--
luci/templates/cluster_part/fence.html | 6 +-
luci/templates/cluster_part/node.html | 6 +-
luci/templates/cluster_part/service.html | 10 ++--
luci/templates/master.html | 9 ++-
7 files changed, 83 insertions(+), 78 deletions(-)
---
diff --git a/luci/public/css/shared.css b/luci/public/css/shared.css
index fc070b8..9e9a446 100644
--- a/luci/public/css/shared.css
+++ b/luci/public/css/shared.css
@@ -7,7 +7,8 @@ table {
}
table th {
- font-weight: normal;
+ font-size: 10px;
+ color: #777;
}
table input {
@@ -24,12 +25,8 @@ img {
}
-.maintable th {
- padding: 8px;
-}
-
-.maintable td {
- padding: 2px;
+.maintable td, .maintable th {
+ padding: 8px;
}
.table_space {
@@ -39,31 +36,18 @@ img {
.float_button {
float: right;
clear: right;
- right: 15em;
margin: 0;
- width: 14em;
display: block;
- background-color: #f2f2f2;
- text-align: center;
- border: 1px solid;
- color: 666;
- text-decoration: none;
- font-size: medium;
- z-index: 99;
cursor: pointer;
- -moz-border-radius: 6px 6px;
}
a.float_button {
- padding: 1px 0;
}
.float_button:hover {
- background-color: #e8f6d4;
}
.float_button:active {
- background-color: #d2edaa;
}
.input_priority, .input_priority_disabled {
@@ -90,7 +74,7 @@ a.float_button {
}
tr.grid_row td {
-padding:3px;
+ padding: 4px 1em 4px 0;
}
@@ -100,7 +84,7 @@ padding:3px;
}
.entity_ok {
- color: 000;
+ color: #000;
}
.entity_fail {
@@ -123,15 +107,32 @@ padding:3px;
/* --------------------------------- toolbar -------------------------------- */
#toolbar {
- padding-left: 1em;
- background: #484646;
- clear:both;
+ clear: both;
+ padding: 0 1em;
+ margin: 1em 1em 0 1em;
+ background: #484646; /*url(../images/toolbar_line.png) top left repeat-x;*/
+}
+
+.toolbar#toolbar_collapsed {
+ display: none;
+ overflow: hidden;
+}
+
+.toolbar_view_button {
+ float:right;
+ color: #fff;
+ margin-right: 1em;
+ text-decoration: none;
+ font-style: italic;
+ cursor: pointer;
}
.toolbar_button {
- margin: 10px 10px 10px 0;
+ margin: 8px 8px 8px 0;
color: #ffffff;
text-decoration: none;
+ padding: 2px;
+ cursor: pointer;
}
.toolbar_button:hover {
@@ -143,9 +144,8 @@ padding:3px;
/* update */
#tb_update {
background: url('../images/reboot-white.png') center left no-repeat;
- padding-left: 17px;
+ padding-left: 18px;
border: none;
- cursor: pointer;
font-size: inherit;
}
@@ -156,9 +156,8 @@ padding:3px;
/* reboot */
#tb_reboot {
background: url('../images/reboot-white.png') center left no-repeat;
- padding-left: 17px;
+ padding-left: 18px;
border: none;
- cursor: pointer;
font-size: inherit;
}
@@ -169,9 +168,8 @@ padding:3px;
/* fence */
#tb_fence {
background: url('../images/fence-white.png') center left no-repeat;
- padding-left: 17px;
+ padding-left: 18px;
border: none;
- cursor: pointer;
font-size: inherit;
}
@@ -182,9 +180,8 @@ padding:3px;
/* leave (cluster) */
#tb_leave {
background: url('../images/leave-white.png') center left no-repeat;
- padding-left: 31px;
+ padding-left: 32px;
border: none;
- cursor: pointer;
font-size: inherit;
}
@@ -195,10 +192,9 @@ padding:3px;
/* add */
#tb_add {
background: url('../images/add-white.png') center left no-repeat;
- padding-left: 17px;
+ padding-left: 18px;
border: none;
- cursor: pointer;
- font-size: inherit;
+ font-size: inherit;
}
#tb_add:hover {
@@ -208,10 +204,9 @@ padding:3px;
/* create */
#tb_create {
background: url('../images/create-white.png') center left no-repeat;
- padding-left: 17px;
+ padding-left: 18px;
border: none;
- cursor: pointer;
- font-size: inherit;
+ font-size: inherit;
}
#tb_create:hover {
@@ -223,7 +218,6 @@ padding:3px;
background: url('../images/delete-white.png') center left no-repeat;
padding-left: 17px;
border: none;
- cursor: pointer;
font-size: inherit;
}
@@ -235,7 +229,7 @@ padding:3px;
/* -------------------------------- overview -------------------------------- */
#overview {
- margin: 0 0 5px 0;
+ margin: 0 1em 1em;
}
#overview tbody tr.even {
@@ -299,7 +293,7 @@ padding:3px;
/* --------------------------------- details -------------------------------- */
#details {
-margin-bottom: 20px;
+margin-bottom: 2em;
}
.details_section {
@@ -314,8 +308,8 @@ margin-bottom: 20px;
}
#details_header {
- padding: 1px 1em;
- margin: 0 0 1em 0;
+ padding: 0 1em;
+ margin: 1em;
height: 54px;
color: #666;
border-top: #555 6px solid;
@@ -324,14 +318,14 @@ margin-bottom: 20px;
#details_header h3 {
margin: 0;
- padding: 4px 0 0 0;
+ padding: 8px 0 0 0;
font-size: medium;
}
#details_header_buttons {
float: right;
position: relative;
- top: -5px;
+ top: -12px;
width: 25%;
}
@@ -339,7 +333,7 @@ margin-bottom: 20px;
float: right;
display: block;
text-decoration: none;
- padding: 0 4px;
+ padding: 0 0 0 4px;
}
.details_header_info {
@@ -355,6 +349,7 @@ margin-bottom: 20px;
/* update */
#dh_update {
width: 20px;
+ height: 20px;
background: url('../images/reboot-grey.png') center left no-repeat;
}
@@ -365,6 +360,7 @@ margin-bottom: 20px;
/* reboot */
#dh_reboot {
width: 20px;
+ height: 20px;
background: url('../images/reboot-grey.png') center left no-repeat;
}
@@ -375,6 +371,7 @@ margin-bottom: 20px;
/* fence */
#dh_fence {
width: 20px;
+ height: 20px;
background: url('../images/fence-grey.png') center left no-repeat;
}
@@ -385,7 +382,7 @@ margin-bottom: 20px;
/* leave (cluster) */
#dh_leave {
width: 30px;
- line-height: 60%;
+ height: 20px;
background: url('../images/leave-grey.png') center left no-repeat;
}
@@ -396,6 +393,7 @@ margin-bottom: 20px;
/* add */
#dh_add {
width: 20px;
+ height: 20px;
background: url('../images/add-grey.png') center left no-repeat;
}
@@ -406,10 +404,10 @@ margin-bottom: 20px;
/* delete */
#dh_delete {
width: 20px;
+ height: 20px;
background: url('../images/delete-grey.png') center left no-repeat;
}
#dh_delete:hover {
background-image: url('../images/delete-white.png');
-}
-
+}
\ No newline at end of file
diff --git a/luci/public/css/style.css b/luci/public/css/style.css
index 0898606..980265b 100644
--- a/luci/public/css/style.css
+++ b/luci/public/css/style.css
@@ -91,7 +91,7 @@ ul.mainmenu li.loginlogout a:hover {
}
ul.submenu {
- margin: 0 0 10px 0;
+ margin: 1em;
padding: 0 0px;
position: relative;
float: left;
@@ -147,18 +147,22 @@ ul.headermenu li a {
text-decoration: none;
}
+#wrapper {
+ width: 960px;
+}
+
#content {
background: #fff url('../images/contentbg.png') left bottom no-repeat;
margin: 0;
- padding: 10px;
+ padding: 0;
overflow: hidden;
float: left;
min-height: 400px;
- width: 940px;
+ width: 100%;
}
-#content .currentpage {
- margin-top: 0;
+.currentpage {
+ color:red;
}
/* Login form*/
@@ -368,10 +372,10 @@ background:#f9c5c1 url(../images/error.png) no-repeat scroll 10px center;
}
#flash .alert,
#flash .info {
-background:#EEEEFF url(../images/info.png) no-repeat scroll 10px center;
+background:#e9f4fa url(../images/info.png) no-repeat scroll 10px center;
}
.notice {
-background:#EEEEFF url(../images/info.png) no-repeat scroll 10px center;
+background:#e9f4fa url(../images/info.png) no-repeat scroll 10px center;
}
.fielderror {
color:red;
@@ -379,4 +383,4 @@ font-weight:bold;
}
div.clearingdiv {
clear:both;
-}
+}
\ No newline at end of file
diff --git a/luci/templates/cluster_part/failover.html b/luci/templates/cluster_part/failover.html
index 14f14e9..ef1c616 100644
--- a/luci/templates/cluster_part/failover.html
+++ b/luci/templates/cluster_part/failover.html
@@ -18,8 +18,8 @@
<form action="${tg.url(cmd_url + '/apply')}" method="post">
<div id="toolbar">
- <input type="submit" name="${apply_cmds.DELETE}" value="${_('delete')}" class="toolbar_button" id="tb_delete"/>
- <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">add</a>
+ <input type="submit" name="${apply_cmds.DELETE}" value="${_('Delete')}" class="toolbar_button" id="tb_delete"/>
+ <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">Add</a>
</div>
<!--! OVERVIEW SECTION. -->
@@ -75,7 +75,7 @@
<div id="details_header">
<h3 py:content="name">Failover name</h3>
<div id="details_header_buttons">
- <a href="${tg.url(cmd_url + '/apply?' + apply_cmds.DELETE + '&name=' + name)}" id="dh_delete" title="delete"><span class="hide">delete</span></a>
+ <a href="${tg.url(cmd_url + '/apply?' + apply_cmds.DELETE + '&name=' + name)}" id="dh_delete" title="delete"><span class="hide">Delete</span></a>
</div>
</div>
@@ -154,8 +154,8 @@
<tr class="grid_row">
<th class="icon"></th>
<th class="fdom_tmembers_name"></th>
- <th class="fdom_tmembers_member">member</th>
- <th class="fdom_tmembers_priority">priority</th>
+ <th class="fdom_tmembers_member">Member</th>
+ <th class="fdom_tmembers_priority">Priority</th>
<td class="table_space"></td>
</tr>
</thead>
diff --git a/luci/templates/cluster_part/fence.html b/luci/templates/cluster_part/fence.html
index 4da35f4..9a411dc 100644
--- a/luci/templates/cluster_part/fence.html
+++ b/luci/templates/cluster_part/fence.html
@@ -16,9 +16,9 @@
<form action="${tg.url(cmd_url + '/apply')}" method="post">
<div id="toolbar">
- <input type="submit" name="${apply_cmds.UPDATE}" value="${_('update')}" class="toolbar_button" id="tb_update"/>
- <input type="submit" name="${apply_cmds.DELETE}" value="${_('delete')}" class="toolbar_button" id="tb_delete"/>
- <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">add</a>
+ <input type="submit" name="${apply_cmds.UPDATE}" value="${_('Update')}" class="toolbar_button" id="tb_update"/>
+ <input type="submit" name="${apply_cmds.DELETE}" value="${_('Delete')}" class="toolbar_button" id="tb_delete"/>
+ <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">Add</a>
</div>
<!--! OVERVIEW SECTION. -->
diff --git a/luci/templates/cluster_part/node.html b/luci/templates/cluster_part/node.html
index e66dc36..43876c6 100644
--- a/luci/templates/cluster_part/node.html
+++ b/luci/templates/cluster_part/node.html
@@ -154,7 +154,7 @@
<tr class="grid_row">
<th class="icon"></th>
<th class="node_tfdoms_name"></th>
- <th class="node_tfdoms_priority">priority</th>
+ <th class="node_tfdoms_priority">Priority</th>
<td class="table_space"></td>
</tr>
</thead>
@@ -181,7 +181,7 @@
<tr class="grid_row">
<th class="icon"></th>
<th class="node_tfences_name"></th>
- <th class="node_tfences_type">type</th>
+ <th class="node_tfences_type">Type</th>
<td class="table_space"></td>
</tr>
</thead>
@@ -208,7 +208,7 @@
<tr class="grid_row">
<th class="icon"></th>
<th class="node_tdaemons_name"></th>
- <th class="node_tdaemons_status">status</th>
+ <th class="node_tdaemons_status">Status</th>
<td class="table_space"></td>
</tr>
</thead>
diff --git a/luci/templates/cluster_part/service.html b/luci/templates/cluster_part/service.html
index 66bea3d..6035f04 100644
--- a/luci/templates/cluster_part/service.html
+++ b/luci/templates/cluster_part/service.html
@@ -16,9 +16,9 @@
<form action="${tg.url(cmd_url + '/apply')}" method="post">
<div id="toolbar">
- <input type="submit" name="${apply_cmds.REBOOT}" value="${_('reboot')}" class="toolbar_button" id="tb_reboot" />
- <input type="submit" name="${apply_cmds.DELETE}" value="${_('delete')}" class="toolbar_button" id="tb_delete" />
- <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">add</a>
+ <input type="submit" name="${apply_cmds.REBOOT}" value="${_('Reboot')}" class="toolbar_button" id="tb_reboot" />
+ <input type="submit" name="${apply_cmds.DELETE}" value="${_('Delete')}" class="toolbar_button" id="tb_delete" />
+ <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">Add</a>
</div>
<!--! OVERVIEW SECTION. -->
@@ -109,7 +109,7 @@
<a href="${tg.url(cmd_url + '/apply?' + apply_cmds.REBOOT + '&name=' + name)}" id="dh_update" title="reboot"><span class="hide">reboot</span></a>
<!-- TODO: remove? <a href="${tg.url(request.path_qs)}" id="dh_update" title="refresh"><span class="hide">refresh</span></a> -->
</div>
- <span class="details_header_info_label">status</span> <span class="details_header_info">${tmpl_context.current_service_status}</span>
+ <span class="details_header_info_label">Status</span> <span class="details_header_info">${tmpl_context.current_service_status}</span>
<form style="display: inline; padding-left: 24px; ">
<select style="font-size: small;">
<option value="null">Start on node...</option>
@@ -131,7 +131,7 @@
<tr class="grid_row">
<th class="icon"></th>
<th class="service_tresources_name"></th>
- <th class="service_tresources_type">type</th>
+ <th class="service_tresources_type">Type</th>
<td class="table_space"></td>
</tr>
</thead>
diff --git a/luci/templates/master.html b/luci/templates/master.html
index 5dd2431..07d8514 100644
--- a/luci/templates/master.html
+++ b/luci/templates/master.html
@@ -16,6 +16,7 @@
</head>
<body py:match="body" py:attrs="select('@*')">
+ <div id="wrapper">
${header()}
<div id="breadcrumb">
@@ -26,6 +27,9 @@
</div>
<div id="content">
+ <py:with vars="flash=tg.flash_obj.render('flash', use_js=False)">
+ <div py:if="flash" py:content="XML(flash)" />
+ </py:with>
<py:if test="'cluster_url' in dir(tmpl_context)">
<ul class="submenu">
<li><a href="${tg.url(tmpl_context.cluster_url + '/nodes')}">Nodes</a></li>
@@ -38,13 +42,12 @@
<div class="currentpage">
</div>
</py:if>
- <py:with vars="flash=tg.flash_obj.render('flash', use_js=False)">
- <div py:if="flash" py:content="XML(flash)" />
- </py:with>
+
<div py:replace="select('*|text()')"/>
<!-- End of content -->
</div>
${footer()}
+ </div>
</body>
</html>
14 years, 7 months
[luci] Reduced the spacing between clusters and nodes in the cluster list and node
by Chris Feist
commit b576cb0704239983a7e4a0e63e738953fc13288a
Author: Chris Feist <cfeist(a)redhat.com>
Date: Wed Oct 7 16:50:03 2009 -0500
Reduced the spacing between clusters and nodes in the cluster list and node
list pages.
luci/public/css/shared.css | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
---
diff --git a/luci/public/css/shared.css b/luci/public/css/shared.css
index 34d1fa9..fc070b8 100644
--- a/luci/public/css/shared.css
+++ b/luci/public/css/shared.css
@@ -24,10 +24,14 @@ img {
}
-.maintable td, .maintable th {
+.maintable th {
padding: 8px;
}
+.maintable td {
+ padding: 2px;
+}
+
.table_space {
width: 100%;
}
14 years, 7 months
[luci/demodata] Merging continues as I forgot some things.
by Jan Pokorný
commit f8410d7063c75fc768378cc38a9dcec73d6f9b74
Author: Jan Pokorny <jpokorny(a)redhat.com>
Date: Wed Oct 7 20:15:24 2009 +0200
Merging continues as I forgot some things.
luci/config/app_cfg.py | 3 ++-
luci/public/images/breadcrumb_bg.png | Bin 0 -> 260 bytes
luci/public/images/breadcrumb_separator.png | Bin 0 -> 505 bytes
luci/public/images/{ => buttons}/add-grey.png | Bin 293 -> 293 bytes
luci/public/images/{ => buttons}/add-white.png | Bin 253 -> 253 bytes
luci/public/images/{ => buttons}/create-grey.png | Bin 545 -> 545 bytes
luci/public/images/{ => buttons}/create-white.png | Bin 377 -> 377 bytes
luci/public/images/{ => buttons}/delete-grey.png | Bin 353 -> 353 bytes
luci/public/images/{ => buttons}/delete-white.png | Bin 295 -> 295 bytes
luci/public/images/{ => buttons}/fence-grey.png | Bin 435 -> 435 bytes
luci/public/images/{ => buttons}/fence-white.png | Bin 389 -> 389 bytes
luci/public/images/{ => buttons}/leave-grey.png | Bin 484 -> 484 bytes
luci/public/images/{ => buttons}/leave-white.png | Bin 449 -> 449 bytes
luci/public/images/{ => buttons}/reboot-grey.png | Bin 373 -> 373 bytes
luci/public/images/{ => buttons}/reboot-white.png | Bin 310 -> 310 bytes
luci/public/images/contentbg.png | Bin 408 -> 348 bytes
luci/public/images/toolbar_line.png | Bin 241 -> 2855 bytes
luci/templates/cluster_part/node.html | 4 ++--
luci/templates/header.html | 10 +++++++++-
luci/templates/homebase.html | 18 +++++++-----------
luci/templates/master.html | 1 -
setup.py | 5 +++--
22 files changed, 23 insertions(+), 18 deletions(-)
---
diff --git a/luci/config/app_cfg.py b/luci/config/app_cfg.py
index 008d069..720ee17 100644
--- a/luci/config/app_cfg.py
+++ b/luci/config/app_cfg.py
@@ -17,7 +17,7 @@ from tg.configuration import AppConfig
import luci
from luci import model
-from luci.lib import app_globals, helpers #, ricci_communicator, ricci_defines, ricci_helpers
+from luci.lib import app_globals, helpers
base_config = AppConfig()
base_config.renderers = []
@@ -54,6 +54,7 @@ base_config.sa_auth.form_plugin = None
# You may optionally define a page where you want users to be redirected to
# on login:
base_config.sa_auth.post_login_url = '/post_login'
+base_config.sa_auth.cookie_secret = '59c05701f'
# You may optionally define a page where you want users to be redirected to
# on logout:
diff --git a/luci/public/images/breadcrumb_bg.png b/luci/public/images/breadcrumb_bg.png
new file mode 100755
index 0000000..c80200c
Binary files /dev/null and b/luci/public/images/breadcrumb_bg.png differ
diff --git a/luci/public/images/breadcrumb_separator.png b/luci/public/images/breadcrumb_separator.png
new file mode 100755
index 0000000..c7764c7
Binary files /dev/null and b/luci/public/images/breadcrumb_separator.png differ
diff --git a/luci/public/images/add-grey.png b/luci/public/images/buttons/add-grey.png
similarity index 100%
rename from luci/public/images/add-grey.png
rename to luci/public/images/buttons/add-grey.png
diff --git a/luci/public/images/add-white.png b/luci/public/images/buttons/add-white.png
similarity index 100%
rename from luci/public/images/add-white.png
rename to luci/public/images/buttons/add-white.png
diff --git a/luci/public/images/create-grey.png b/luci/public/images/buttons/create-grey.png
similarity index 100%
rename from luci/public/images/create-grey.png
rename to luci/public/images/buttons/create-grey.png
diff --git a/luci/public/images/create-white.png b/luci/public/images/buttons/create-white.png
similarity index 100%
rename from luci/public/images/create-white.png
rename to luci/public/images/buttons/create-white.png
diff --git a/luci/public/images/delete-grey.png b/luci/public/images/buttons/delete-grey.png
similarity index 100%
rename from luci/public/images/delete-grey.png
rename to luci/public/images/buttons/delete-grey.png
diff --git a/luci/public/images/delete-white.png b/luci/public/images/buttons/delete-white.png
similarity index 100%
rename from luci/public/images/delete-white.png
rename to luci/public/images/buttons/delete-white.png
diff --git a/luci/public/images/fence-grey.png b/luci/public/images/buttons/fence-grey.png
similarity index 100%
rename from luci/public/images/fence-grey.png
rename to luci/public/images/buttons/fence-grey.png
diff --git a/luci/public/images/fence-white.png b/luci/public/images/buttons/fence-white.png
similarity index 100%
rename from luci/public/images/fence-white.png
rename to luci/public/images/buttons/fence-white.png
diff --git a/luci/public/images/leave-grey.png b/luci/public/images/buttons/leave-grey.png
similarity index 100%
rename from luci/public/images/leave-grey.png
rename to luci/public/images/buttons/leave-grey.png
diff --git a/luci/public/images/leave-white.png b/luci/public/images/buttons/leave-white.png
similarity index 100%
rename from luci/public/images/leave-white.png
rename to luci/public/images/buttons/leave-white.png
diff --git a/luci/public/images/reboot-grey.png b/luci/public/images/buttons/reboot-grey.png
similarity index 100%
rename from luci/public/images/reboot-grey.png
rename to luci/public/images/buttons/reboot-grey.png
diff --git a/luci/public/images/reboot-white.png b/luci/public/images/buttons/reboot-white.png
similarity index 100%
rename from luci/public/images/reboot-white.png
rename to luci/public/images/buttons/reboot-white.png
diff --git a/luci/public/images/contentbg.png b/luci/public/images/contentbg.png
old mode 100644
new mode 100755
index 613e478..d023af8
Binary files a/luci/public/images/contentbg.png and b/luci/public/images/contentbg.png differ
diff --git a/luci/public/images/toolbar_line.png b/luci/public/images/toolbar_line.png
old mode 100644
new mode 100755
index 5738646..0b5de14
Binary files a/luci/public/images/toolbar_line.png and b/luci/public/images/toolbar_line.png differ
diff --git a/luci/templates/cluster_part/node.html b/luci/templates/cluster_part/node.html
index 0b11f2f..d2d7ad9 100644
--- a/luci/templates/cluster_part/node.html
+++ b/luci/templates/cluster_part/node.html
@@ -23,9 +23,9 @@
<div class="toolbar" id="toolbar_shown">
<input type="submit" name="${apply_cmds.REBOOT}" value="${_('Reboot')}" class="toolbar_button" id="tb_reboot" />
<input type="submit" name="${apply_cmds.FENCE}" value="${_('Fence')}" class="toolbar_button" id="tb_fence" />
- <input type="submit" name="${apply_cmds.LEAVE}" value="${_('Leave cluster')}" class="toolbar_button" id="tb_leave" />
+ <input type="submit" name="${apply_cmds.LEAVE}" value="${_('Leave Cluster')}" class="toolbar_button" id="tb_leave" />
<input type="submit" name="${apply_cmds.DELETE}" value="${_('Delete')}" class="toolbar_button" id="tb_delete" />
- <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">add</a>
+ <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">Add</a>
<div class="toolbar_view_button" onclick="onOverviewCollapse()">collapse</div>
</div>
diff --git a/luci/templates/header.html b/luci/templates/header.html
index 560d112..5991110 100644
--- a/luci/templates/header.html
+++ b/luci/templates/header.html
@@ -3,7 +3,15 @@
py:strip="">
<py:def function="header">
<div id="header">
- <h3></h3>
+ <h1>logo here</h1>
+ <ul class="headermenu">
+ <li py:if="request.identity" id="admin" class="loginlogout"><a href="${tg.url('/admin')}">Admin</a></li>
+ <li><a href="${tg.url('/about')}" class="${('', 'active')[defined('page') and page==page=='about']}">About</a></li>
+ <span py:if="tg.auth_stack_enabled" py:strip="True">
+ <li py:if="not request.identity" id="login" class="loginlogout"><a href="${tg.url('/login')}">Login</a></li>
+ <li py:if="request.identity" id="login" class="loginlogout"><a href="${tg.url('/logout_handler')}">Logout</a></li>
+ </span>
+ </ul>
</div>
</py:def>
</html>
diff --git a/luci/templates/homebase.html b/luci/templates/homebase.html
index 4d599b1..0dae841 100644
--- a/luci/templates/homebase.html
+++ b/luci/templates/homebase.html
@@ -12,17 +12,15 @@
</head>
<body>
- <table>
- <tr>
- <td valign="top">
<div class="sidebar">
+ <h2>Take action</h2>
+ <div class="actions">
<a href="/homebase/addsystem">Add a System</a><br/>
<a href="/homebase/addexisting">Add an Existing Cluster</a><br/>
<a href="/homebase/managesystems">Manage Systems</a><br/>
<a href="/homebase/adduser">Add a User</a><br/>
+ </div>
</div>
- </td>
- <td valign="top">
<div class="mainpage">
<div py:if="homebasepage == 'managesystems'">
<h3>Manage Systems and Clusters</h3>
@@ -54,13 +52,11 @@
<div py:replace="tmpl_context.form()">Input Form</div>
</div>
<div py:if="homebasepage == 'homebasepage'">
- <h2>Luci Homebase</h2>
- <p>Welcome to Luci.</p>
- <p>Select an action from the list on the left.</p>
+ <h2>Problems</h2>
+ <p>Table with summary of problems goes here</p>
+ <h2><a href="${tg.url('/cluster')}" class="${('', 'active')[defined('page') and page==page=='clusters']}">Clusters</a></h2>
+ <p>Table with summary of clusters goes here.</p>
</div>
</div>
- </td>
- </tr>
- </table>
</body>
</html>
diff --git a/luci/templates/master.html b/luci/templates/master.html
index 706dfd9..7dc8d16 100644
--- a/luci/templates/master.html
+++ b/luci/templates/master.html
@@ -40,7 +40,6 @@
</div>
</py:if>
<py:with vars="flash=tg.flash_obj.render('flash', use_js=False)">
-
<div py:if="flash" py:content="XML(flash)" />
</py:with>
<!-- Start of content -->
diff --git a/setup.py b/setup.py
index 0d35dab..c639e21 100644
--- a/setup.py
+++ b/setup.py
@@ -17,7 +17,7 @@ setup(
"TurboGears2 >= 2.0b7",
"Catwalk >= 2.0.2",
"Babel >=0.9.4",
- #can be removed iif use_toscawidgets = False
+ #can be removed if use_toscawidgets = False
"toscawidgets >= 0.9.7.1",
"tw.dynforms",
"zope.sqlalchemy >= 0.4 ",
@@ -36,7 +36,8 @@ setup(
'public/*/*/*']},
message_extractors={'luci': [
('**.py', 'python', None),
- ('templates/**.mako', 'mako', None),
+ # Mako not used
+ # ('templates/**.mako', 'mako', None),
('templates/**.html', 'genshi', None),
('public/**', 'ignore', None)]},
14 years, 7 months
[luci/demodata] Merged with Jeremy's version (that was based on master branch).
by Jan Pokorný
commit ee37884f3628857621f843bb390508d1194bedc7
Author: Jan Pokorny <jpokorny(a)redhat.com>
Date: Wed Oct 7 19:29:06 2009 +0200
Merged with Jeremy's version (that was based on master branch).
luci/public/css/shared.css | 64 +++++---
luci/public/css/style.css | 248 +++++++++++++++++++----------
luci/templates/cluster_list.html | 19 +--
luci/templates/cluster_part/failover.html | 13 +-
luci/templates/cluster_part/fence.html | 13 +-
luci/templates/cluster_part/node.html | 21 +--
luci/templates/cluster_part/service.html | 13 +-
luci/templates/global_res.html | 11 +-
luci/templates/master.html | 65 ++++----
setup.py | 8 +-
10 files changed, 269 insertions(+), 206 deletions(-)
---
diff --git a/luci/public/css/shared.css b/luci/public/css/shared.css
index a5602e1..13f0730 100644
--- a/luci/public/css/shared.css
+++ b/luci/public/css/shared.css
@@ -20,27 +20,34 @@ img {
/* --------------------------------- common --------------------------------- */
+.maintable thead {
+
+}
+
+.maintable td, .maintable th {
+ padding: 8px;
+}
+
.table_space {
width: 100%;
}
.float_button {
- position: relative;
float: right;
clear: right;
right: 15em;
- margin: 0 -14em 0 0;
+ margin: 0;
width: 14em;
display: block;
background-color: #f2f2f2;
text-align: center;
- border: 2px outset;
- color: black;
+ border: 1px solid;
+ color: #666;
text-decoration: none;
font-size: medium;
z-index: 99;
cursor: pointer;
- -moz-border-radius: 10px 10px;
+ -moz-border-radius: 6px 6px;
}
a.float_button {
@@ -78,13 +85,18 @@ a.float_button {
background-color: #f2f2f2;
}
+tr.grid_row td {
+ padding: 3px;
+}
+
+
#not_selected {
text-align: center;
line-height: 200%;
}
.entity_ok {
- color: green;
+ color: #000;
}
.entity_fail {
@@ -108,10 +120,10 @@ a.float_button {
.toolbar {
padding-left: 1em;
- line-height: 23px;
- height: 31px;
- background: #484646 url(../images/toolbar_line.png) top left repeat-x;
-}
+ /*line-height: 23px;
+ height: 31px;*/
+ background: #484646 /*url(../images/toolbar_line.png) top left repeat-x;*/
+}
.toolbar#toolbar_collapsed{
display: none;
@@ -128,7 +140,7 @@ a.float_button {
}
.toolbar_button {
- margin: 0 .5em 0 .5em;
+ margin: 10px 10px 10px 0;
color: #ffffff;
text-decoration: none;
}
@@ -197,7 +209,7 @@ a.float_button {
padding-left: 17px;
border: none;
cursor: pointer;
- font-size: inherit;
+ font-size: inherit;
}
#tb_add:hover {
@@ -210,7 +222,7 @@ a.float_button {
padding-left: 17px;
border: none;
cursor: pointer;
- font-size: inherit;
+ font-size: inherit;
}
#tb_create:hover {
@@ -242,19 +254,19 @@ a.float_button {
}
#overview tbody tr.chosen {
- background-color: #d2edaa;
+ background-color: #c8deec;
}
#overview tbody tr:hover {
- background-color: #fafdf5;
+ background-color: #f5fafc;
}
#overview tbody tr.chosen:hover {
- background-color: #d2edaa;
+ background-color: #c5dae8;
}
#overview tbody tr.even:hover {
- background-color: #e8f6d4;
+ background-color: #e9f4fa;
}
#table_sep {
@@ -297,24 +309,28 @@ a.float_button {
/* --------------------------------- details -------------------------------- */
+#details {
+margin-bottom: 20px;
+}
+
.details_section {
- margin-left: 1em;
+ margin: 1em;
}
.details_section h4 {
- margin: 1em 0 .5em 0;
+ margin: 2em 0 1em;
}
.details_inner {
- margin-left: 1em;
}
#details_header {
padding: 1px 1em;
margin: 0 0 1em 0;
height: 54px;
- color: #ffffff;
- background: #5b5a5b url(../images/details_header_line.png) top left repeat-x;
+ color: #666;
+ border-top: #555 6px solid;
+ background: #efefef; /* url(../images/details_header_line.png) top left repeat-x */
}
#details_header h3 {
@@ -342,7 +358,7 @@ a.float_button {
}
.details_header_info_label {
- color: #ddd;
+ color: #666;
}
/* specific buttons of details header */
@@ -380,7 +396,7 @@ a.float_button {
/* leave (cluster) */
#dh_leave {
width: 30px;
- line-height: 60%;
+ line-height: 60%;
background: url('../images/buttons/leave-grey.png') center left no-repeat;
}
diff --git a/luci/public/css/style.css b/luci/public/css/style.css
index b6fbe95..9edbba6 100644
--- a/luci/public/css/style.css
+++ b/luci/public/css/style.css
@@ -2,109 +2,158 @@
@import url("create.css");
html {
- background: #555555 url('../images/pagebg.png') top left repeat-x;
- text-align: center;
- margin: 0;
- padding: 0;
+ background: #555555 url('../images/pagebg.png') top left repeat-x;
+ text-align: center;
+ margin: 0;
+ padding: 0;
}
body {
- text-align: left;
- width: 960px;
- margin: 0 auto;
- padding: 0;
- font-size: 12px;
- font-family:"Lucida Grande","Lucida Sans Unicode",geneva,verdana,sans-serif;
+ text-align: left;
+ width: 960px;
+ margin: 0 auto;
+ padding: 0;
+ font-size: 12px;
+ font-family:"Lucida Grande","Lucida Sans Unicode",geneva,verdana,sans-serif;
}
a {
- color: #286571;
+ color: #006cc2;
+}
+
+#breadcrumb {
+ background:transparent none repeat scroll 0 0;
+ clear:both;
+ color:#FFF;
+ float:none;
+ font-size:14px;
+ height:2.5em;
+ line-height:2.5em;
+ list-style-image:none;
+ list-style-position:outside;
+ list-style-type:none;
+ margin:0;
+}
+
+ul.mainmenu {
+ background: url(../images/toolbar_line.png) top left repeat-x;
+ margin: 0;
+ padding: 0;
+ position: relative;
+ float: left;
+ display: block;
+ width: 960px;
+}
+
+ul.mainmenu li {
+/* background:transparent url(../images/breadcrumb_bg.png) repeat-x scroll 100% 50%; */
+ list-style-type: none;
+ float: left;
+ margin: 0;
+ padding: 0 0 0 1em;
+ position: relative;
+}
+
+ul.mainmenu li a {
+ background:transparent url(../images/breadcrumb_separator.png) no-repeat scroll 100% 50%;
+ color: #fff;
+ float: left;
+ display: block;
+ margin-left:0;
+ padding:0 1.75em 0 0;
+ font-size: 14px;
+ text-decoration: none;
}
-#header {
- height: 132px;
- margin: 10px 10px 0 10px;
- background: url('../images/logo.jpg') top left no-repeat;
+ul.mainmenu li a:hover, ul.mainmenu li a.active {
+/* background:transparent url(../images/breadcrumb_separator.png) no-repeat scroll 100% 50%; */
+/* background: url('../images/menu-item-actibg.png') left top no-repeat; */
}
-#header h1 {
- padding: 0;
- margin: 0;
- padding-top: 30px;
- padding-left: 180px;
- color: #fff;
- position: relative;
- font-size: 36px;
+ul.mainmenu li.first a {
+/* background: none; */
}
-#header h1 .subtitle {
- font-size: 60%;
- position: absolute;
- left: 240px;
- top: 70px;
+ul.mainmenu li.first a:hover, ul.mainmenu li.first a.active {
}
-ul#mainmenu {
- margin: 0;
- padding: 0 10px;
- background: url('../images/menubg.png') top left no-repeat;
- height: 38px;
+ul.mainmenu li.loginlogout {
+ float: right;
}
-ul#mainmenu li {
- list-style-type: none;
- margin: 0;
- padding: 0;
- position: relative;
- display: inline;
- float: left;
+ul.mainmenu li.loginlogout a:hover {
+ background: url('../images/menu-item-actibg.png') left top no-repeat;
}
-ul#mainmenu li a {
- color: #fff;
- float: left;
- height: 31px;
- display: block;
- line-height: 30px;
- vertical-align: middle;
- padding: 0 10px;
- font-size: 12px;
- text-decoration: none;
- background: url('../images/menu-item-border.png') left top no-repeat;
+ul.submenu {
+ margin: 0 0 10px 0;
+ padding: 0 0px;
+ position: relative;
+ float: left;
}
-ul#mainmenu li a:hover, ul#mainmenu li a.active {
- background: url('../images/menu-item-actibg.png') left top no-repeat;
+ul.submenu li {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+ position: relative;
+ display: inline;
+ float: left;
}
-ul#mainmenu li.first a {
- background: none;
+ul.submenu li a {
+ color: #000;
+ position: relative;
+ padding: 10px 10px;
+ float: left;
+ display: block;
+ font-size: 14px;
+ vertical-align: middle;
+ text-decoration: none;
+ }
+
+ul.submenu li a:hover, ul.submenu li a.active {
+ background: #ccc;
}
-ul#mainmenu li.first a:hover, ul#mainmenu li.first a.active {
- background: url('../images/menu-item-actibg-first.png') left top no-repeat;
+#header {
+ height:60px;
}
-ul#mainmenu li.loginlogout
-{
- float: right;
- right: 10px;
+#header h1 {
+ color: #fff;
+ font-weight: normal;
+ display: inline;
}
-ul#mainmenu li.loginlogout a:hover
-{
- background: url('../images/menu-item-border.png') left top no-repeat;
+ul.headermenu {
+ float: right;
+}
+
+ul.headermenu li {
+ list-style-type: none;
+ float:left;
+ display: block;
+ padding: 0 0 0 1em;
+}
+
+ul.headermenu li a {
+ color:#fff;
+ text-decoration: none;
}
#content {
- background: #fff url('../images/contentbg.png') left bottom no-repeat;
- margin : 0 10px 10px 10px;
- padding: 0 10px;
- overflow: hidden;
+ background: #fff url('../images/contentbg.png') left bottom no-repeat;
+ margin: 0;
+ padding: 10px;
+ overflow: hidden;
+ float: left;
+ min-height: 400px;
+ width: 940px;
}
#content .currentpage {
- margin-top: 0;
+ margin-top: 0;
}
/* Login form*/
@@ -112,6 +161,7 @@ ul#mainmenu li.loginlogout a:hover
#loginform
{
text-align: center;
+ margin-top: 100px;
}
form.loginfields
@@ -201,19 +251,15 @@ form.loginfields input#submit
/* Sidebar */
.sidebar {
- border: 1px solid #cce;
- background-color: #eee;
- margin: 0.5em;
- margin-left: 1.5em;
- padding: 1em;
- float: right;
+ padding: 20px;
width: 200px;
- font-size: 88%;
+ float: left;
}
.sidebar h2 {
margin-top: 0;
- color: black;
+ color: #ccc;
+ font-weight: normal;
}
.sidebar ul {
@@ -221,7 +267,13 @@ form.loginfields input#submit
padding-left: 0;
}
-
+.actions {
+ border: 1px solid #cce;
+ background-color: #eee;
+ font-size: 14px;
+ line-height: 24px;
+ padding: 1em;
+}
#sb_top {
clear: right;
@@ -247,22 +299,41 @@ form.loginfields input#submit
margin-bottom: 0.5em;
}
+
+/* Main area in homebase */
+.mainpage {
+ margin-left: 240px; /* 200 (sidebar width) + 40 (sidebar padding) */
+ padding: 20px 20px 0 0;
+}
+
+.mainpage h2 {
+ margin-top: 0;
+ color: #ccc;
+ font-weight: normal;
+}
+
+
/* Other and footer */
#footer {
- background: #fff;
- padding: 10px;
- color:#888888;
- font-size:90%;
+ clear:both;
+ padding: 10px;
+ color:#b1c2d0;
+ font-size:90%;
}
+
+#footer a {
+ color:#cfe3f3;
+}
+
.flogo {
- float:left;
- margin-bottom:0px;
- padding-left:20px;
- padding-right:20px;
- padding-top:0px;
+ float:left;
+ margin-bottom:0px;
+ padding-left:20px;
+ padding-right:20px;
+ padding-top:0px;
}
.foottext p {
- margin: 0; padding: 0;
+ margin: 0; padding: 0;
}
.code {
font-family:monospace;
@@ -304,3 +375,4 @@ font-weight:bold;
div.clearingdiv {
clear:both;
}
+
diff --git a/luci/templates/cluster_list.html b/luci/templates/cluster_list.html
index e129c95..46ec6b1 100644
--- a/luci/templates/cluster_list.html
+++ b/luci/templates/cluster_list.html
@@ -18,27 +18,24 @@
<form action="${tg.url(cmd_url + '/apply')}" method="post">
<div class="toolbar">
<!--<input type="submit" name="${apply_cmds.UPDATE}" value="${_('update')}" class="toolbar_button" id="tb_update"/>!-->
- <input type="submit" name="${apply_cmds.DELETE}" value="${_('delete')}" class="toolbar_button" id="tb_delete"/>
- <a href="${tg.url(cmd_url + '/create')}" class="toolbar_button" id="tb_create">create</a>
- <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">add</a>
+ <a href="${tg.url(cmd_url + '/create')}" class="toolbar_button" id="tb_create">Create</a>
+ <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">Add</a>
+ <input type="submit" name="${apply_cmds.DELETE}" value="${_('Delete')}" class="toolbar_button" id="tb_delete"/>
</div>
<!--! OVERVIEW SECTION. -->
<div id="overview">
- <table id="clusters_tlist">
+ <table id="clusters_tlist" class="maintable">
<thead>
<tr>
<th class="checkbox"></th>
<th class="icon"></th>
- <th class="main_id">name</th>
- <th class="cluster_tlist_status">status</th>
- <th class="cluster_tlist_votes">total votes</th>
- <th class="cluster_tlist_quorum">min. required quorum</th>
+ <th class="main_id">Name</th>
+ <th class="cluster_tlist_status">Status</th>
+ <th class="cluster_tlist_votes">Total Votes</th>
+ <th class="cluster_tlist_quorum">Min. Required Quorum</th>
<td class="table_space"></td>
</tr>
- <tr>
- <td colspan="7" id="table_sep"><hr /></td>
- </tr>
</thead>
<tbody>
<!--! List all the fences. -->
diff --git a/luci/templates/cluster_part/failover.html b/luci/templates/cluster_part/failover.html
index bd02981..0aa54b2 100644
--- a/luci/templates/cluster_part/failover.html
+++ b/luci/templates/cluster_part/failover.html
@@ -25,20 +25,17 @@
<!--! OVERVIEW SECTION. -->
<div id="overview">
- <table id="fdom_tlist">
+ <table id="fdom_tlist" class="maintable">
<thead>
<tr>
<th class="checkbox"></th>
<th class="icon"></th>
- <th class="main_id">name</th>
- <th class="fdom_tlist_enabled">enabled</th>
- <th class="fdom_tlist_prioritizied">prioritizied</th>
- <th class="fdom_tlist_restricted">restricted</th>
+ <th class="main_id">Name</th>
+ <th class="fdom_tlist_enabled">Enabled</th>
+ <th class="fdom_tlist_prioritizied">Prioritized</th>
+ <th class="fdom_tlist_restricted">Restricted</th>
<td class="table_space"></td>
</tr>
- <tr>
- <td colspan="7" id="table_sep"><hr /></td>
- </tr>
</thead>
<tbody>
<!--! List all the failover domains. -->
diff --git a/luci/templates/cluster_part/fence.html b/luci/templates/cluster_part/fence.html
index 43d7f71..f2450ee 100644
--- a/luci/templates/cluster_part/fence.html
+++ b/luci/templates/cluster_part/fence.html
@@ -24,20 +24,17 @@
<!--! OVERVIEW SECTION. -->
<div id="overview">
- <table id="fence_tlist">
+ <table id="fence_tlist" class="maintable">
<thead>
<tr>
<th class="checkbox"></th>
<th class="icon"><img src="${tg.url('/images/global_11x11_black.png')}" alt="shared fences"/></th>
- <th class="main_id">name</th>
- <th class="fence_tlist_type">fence type</th>
- <th class="fence_tlist_members">member nodes</th>
- <th class="fence_tlist_ip">IP address</th>
+ <th class="main_id">Name</th>
+ <th class="fence_tlist_type">Fence Type</th>
+ <th class="fence_tlist_members">Member Nodes</th>
+ <th class="fence_tlist_ip">IP Address</th>
<td class="table_space"></td>
</tr>
- <tr>
- <td colspan="7" id="table_sep"><hr /></td>
- </tr>
</thead>
<tbody>
<!--! List all the fences. -->
diff --git a/luci/templates/cluster_part/node.html b/luci/templates/cluster_part/node.html
index 9ae4af3..0b11f2f 100644
--- a/luci/templates/cluster_part/node.html
+++ b/luci/templates/cluster_part/node.html
@@ -21,30 +21,27 @@
<div class="toolbar_view_button" onclick="onOverviewShow()">show</div>
</div>
<div class="toolbar" id="toolbar_shown">
- <input type="submit" name="${apply_cmds.REBOOT}" value="${_('reboot')}" class="toolbar_button" id="tb_reboot" />
- <input type="submit" name="${apply_cmds.FENCE}" value="${_('fence')}" class="toolbar_button" id="tb_fence" />
- <input type="submit" name="${apply_cmds.LEAVE}" value="${_('leave cluster')}" class="toolbar_button" id="tb_leave" />
- <input type="submit" name="${apply_cmds.DELETE}" value="${_('delete')}" class="toolbar_button" id="tb_delete" />
+ <input type="submit" name="${apply_cmds.REBOOT}" value="${_('Reboot')}" class="toolbar_button" id="tb_reboot" />
+ <input type="submit" name="${apply_cmds.FENCE}" value="${_('Fence')}" class="toolbar_button" id="tb_fence" />
+ <input type="submit" name="${apply_cmds.LEAVE}" value="${_('Leave cluster')}" class="toolbar_button" id="tb_leave" />
+ <input type="submit" name="${apply_cmds.DELETE}" value="${_('Delete')}" class="toolbar_button" id="tb_delete" />
<a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">add</a>
<div class="toolbar_view_button" onclick="onOverviewCollapse()">collapse</div>
</div>
<!--! OVERVIEW SECTION. -->
<div id="overview">
- <table id="node_tlist">
+ <table id="node_tlist" class="maintable">
<thead>
<tr>
<th class="checkbox"></th>
<th class="icon">!</th>
- <th class="main_id">name</th>
- <th class="node_tlist_status">status</th>
- <th class="node_tlist_load">service load</th>
- <th class="node_tlist_ip">IP address</th>
+ <th class="main_id">Name</th>
+ <th class="node_tlist_status">Status</th>
+ <th class="node_tlist_load">Service Load</th>
+ <th class="node_tlist_ip">IP Address</th>
<td class="table_space"></td>
</tr>
- <tr>
- <td colspan="7" id="table_sep"><hr /></td>
- </tr>
</thead>
<tbody>
<!--! List all the nodes. -->
diff --git a/luci/templates/cluster_part/service.html b/luci/templates/cluster_part/service.html
index 88e3ad2..be85cf3 100644
--- a/luci/templates/cluster_part/service.html
+++ b/luci/templates/cluster_part/service.html
@@ -24,20 +24,17 @@
<!--! OVERVIEW SECTION. -->
<div id="overview">
- <table id="service_tlist">
+ <table id="service_tlist" class="maintable">
<thead>
<tr>
<th class="checkbox"></th>
<th class="icon">!</th>
- <th class="main_id">name</th>
- <th class="service_tlist_status">status</th>
- <th class="service_tlist_enabled">enabled</th>
- <th class="service_tlist_fdom">failover domain</th>
+ <th class="main_id">Name</th>
+ <th class="service_tlist_status">Status</th>
+ <th class="service_tlist_enabled">Enabled</th>
+ <th class="service_tlist_fdom">Failover Domain</th>
<td class="table_space"></td>
</tr>
- <tr>
- <td colspan="7" id="table_sep"><hr /></td>
- </tr>
</thead>
<tbody>
<!--! List all the services. -->
diff --git a/luci/templates/global_res.html b/luci/templates/global_res.html
index 4324be2..341f533 100644
--- a/luci/templates/global_res.html
+++ b/luci/templates/global_res.html
@@ -23,19 +23,16 @@
<!--! OVERVIEW SECTION. -->
<div id="overview">
- <table id="clusters_tlist">
+ <table id="clusters_tlist" class="maintable">
<thead>
<tr>
<th class="checkbox"></th>
<th class="icon"></th>
- <th class="main_id">name</th>
- <th class="globalres_tlist_type">type</th>
- <th class="globalres_tlist_main">main data item</th>
+ <th class="main_id">Name</th>
+ <th class="globalres_tlist_type">Type</th>
+ <th class="globalres_tlist_main">Main Data Item</th>
<td class="table_space"></td>
</tr>
- <tr>
- <td colspan="7" id="table_sep"><hr /></td>
- </tr>
</thead>
<tbody>
<!--! List all the global resources. -->
diff --git a/luci/templates/master.html b/luci/templates/master.html
index a002b6d..706dfd9 100644
--- a/luci/templates/master.html
+++ b/luci/templates/master.html
@@ -4,57 +4,50 @@
xmlns:py="http://genshi.edgewall.org/"
xmlns:xi="http://www.w3.org/2001/XInclude"
py:strip="">
-<xi:include href="header.html" />
-<xi:include href="sidebars.html" />
-<xi:include href="footer.html" />
-<xi:include href="title.html" />
-
+ <xi:include href="header.html" />
+ <xi:include href="sidebars.html" />
+ <xi:include href="footer.html" />
+ <xi:include href="title.html" />
<head py:match="head" py:attrs="select('@*')">
- <meta content="text/html; charset=UTF-8" http-equiv="content-type" py:replace="''"/>
- <meta py:replace="select('*')"/>
- <link rel="stylesheet" type="text/css" media="screen" href="${tg.url('/css/style.css')}" />
-</head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" py:replace="''"/>
+ <title py:replace="''">Your title goes here</title>
+ <meta py:replace="select('*')"/>
-<!--! Title processing - find title definition in certain template and
- pass it to 'title' macro. !-->
-<py:match path="title" once="true"
- py:with="title_text = unicode(select('text()'))">
- <title>
- ${title(title_text)}
- </title>
-</py:match>
+ <link rel="stylesheet" type="text/css" media="screen" href="${tg.url('/css/style.css')}" />
+</head>
<body py:match="body" py:attrs="select('@*')">
${header()}
- <ul id="mainmenu">
- <li><a href="${tg.url('/homebase')}">homebase</a></li>
- <li><a href="${tg.url('/cluster')}">cluster</a></li>
- <li><a href="${tg.url('/storage')}">storage</a></li>
- <li><a href="${tg.url('/about')}" class="${('', 'active')[defined('page') and page==page=='about']}">About</a></li>
- <py:if test="tmpl_context.cluster_url != ''">
- <li><a href="${tg.url(tmpl_context.cluster_url + '/nodes')}">Nodes</a></li>
- <li><a href="${tg.url(tmpl_context.cluster_url + '/services')}">Services</a></li>
- <li><a href="${tg.url(tmpl_context.cluster_url + '/failovers')}">Failovers</a></li>
- <li><a href="${tg.url(tmpl_context.cluster_url +'/fences')}">Fences</a></li>
- </py:if>
- <span py:if="tg.auth_stack_enabled" py:strip="True">
- <li py:if="not request.identity" id="login" class="loginlogout"><a href="${tg.url('/login')}">Login</a></li>
- <li py:if="request.identity" id="login" class="loginlogout"><a href="${tg.url('/logout_handler')}">Logout</a></li>
- <li py:if="request.identity" id="admin" class="loginlogout"><a href="${tg.url('/admin')}">Admin</a></li>
- </span>
- </ul>
+
+ <div id="breadcrumb">
+ <ul class="mainmenu">
+ <li><a href="${tg.url('/homebase')}" class="${('', 'active')[defined('page') and page==page=='homebase']}">Homebase</a></li>
+ <li><a href="${tg.url('/cluster')}" class="${('', 'active')[defined('page') and page==page=='clusters']}">Clusters*</a></li>
+ </ul>
+ </div>
+
<div id="content">
+ <py:if test="'cluster_url' in dir(tmpl_context)">
+ <ul class="submenu">
+ <li><a href="${tg.url(tmpl_context.cluster_url + '/nodes')}">Nodes</a></li>
+ <li><a href="${tg.url(tmpl_context.cluster_url + '/services')}">Services</a></li>
+ <li><a href="${tg.url(tmpl_context.cluster_url + '/failovers')}">Failovers</a></li>
+ <li><a href="${tg.url(tmpl_context.cluster_url + '/fences')}">Fences</a></li>
+ </ul>
+ </py:if>
<py:if test="defined('page')">
<div class="currentpage">
</div>
</py:if>
<py:with vars="flash=tg.flash_obj.render('flash', use_js=False)">
- <div py:if="flash" py:content="XML(flash)" />
+
+ <div py:if="flash" py:content="XML(flash)" />
</py:with>
<!-- Start of content -->
<div py:replace="select('*|text()')"/>
<!-- End of content -->
- ${footer()}
+
</div>
+ ${footer()}
</body>
</html>
diff --git a/setup.py b/setup.py
index 0baae9f..0d35dab 100644
--- a/setup.py
+++ b/setup.py
@@ -22,9 +22,9 @@ setup(
"tw.dynforms",
"zope.sqlalchemy >= 0.4 ",
"repoze.tm2 >= 1.0a4",
-
+
"repoze.what-quickstart >= 1.0",
- ],
+ ],
setup_requires=["PasteScript >= 1.7"],
paster_plugins=['PasteScript', 'Pylons', 'TurboGears2', 'tg.devtools'],
packages=find_packages(exclude=['ez_setup']),
@@ -32,8 +32,8 @@ setup(
test_suite='nose.collector',
tests_require=['WebTest', 'BeautifulSoup'],
package_data={'luci': ['i18n/*/LC_MESSAGES/*.mo',
- 'templates/*/*',
- 'public/*/*']},
+ 'templates/*/*',
+ 'public/*/*/*']},
message_extractors={'luci': [
('**.py', 'python', None),
('templates/**.mako', 'mako', None),
14 years, 7 months
[luci/demodata] Little changes (a bit better collapsing of nodes list)
by Jan Pokorný
commit aa10ecd254247456940196f6713d3dea494950e9
Author: Jan Pokorny <jpokorny(a)redhat.com>
Date: Wed Oct 7 15:14:56 2009 +0200
Little changes (a bit better collapsing of nodes list)
luci/controllers/error.py | 6 +++---
luci/controllers/secure.py | 15 ++++++++++++---
luci/controllers/template.py | 17 ++++++++---------
luci/templates/cluster_part/node.html | 8 ++++----
4 files changed, 27 insertions(+), 19 deletions(-)
---
diff --git a/luci/controllers/error.py b/luci/controllers/error.py
index a9dea8a..a27d5e1 100644
--- a/luci/controllers/error.py
+++ b/luci/controllers/error.py
@@ -7,15 +7,14 @@ __all__ = ['ErrorController']
class ErrorController(object):
- """
- Generates error documents as and when they are required.
+ """Generates error documents as and when they are required.
The ErrorDocuments middleware forwards to ErrorController when error
related status codes are returned from the application.
This behaviour can be altered by changing the parameters to the
ErrorDocuments middleware in your config/middleware.py file.
-
+
"""
@expose('luci.templates.error')
@@ -28,3 +27,4 @@ class ErrorController(object):
code=request.params.get('code', resp.status_int),
message=request.params.get('message', default_message))
return values
+
diff --git a/luci/controllers/secure.py b/luci/controllers/secure.py
index 3ceb15b..b02be9b 100644
--- a/luci/controllers/secure.py
+++ b/luci/controllers/secure.py
@@ -1,8 +1,17 @@
# -*- coding: utf-8 -*-
"""Sample controller with all its actions protected."""
+
+# TODO: Remove this module? It should be also unmounted from RootController
+# then.
+# I think it serves only for demonstration of secured access, it's good
+# to remember 'allow_only' construction, but it should be also in doc of TG2.
+# -- JP
+
+
from tg import expose, flash
from pylons.i18n import ugettext as _, lazy_ugettext as l_
from repoze.what.predicates import has_permission
+
#from dbsprockets.dbmechanic.frameworks.tg2 import DBMechanic
#from dbsprockets.saprovider import SAProvider
@@ -14,17 +23,17 @@ __all__ = ['SecureController']
class SecureController(BaseController):
"""Sample controller-wide authorization"""
-
+
# The predicate that must be met for all the actions in this controller:
allow_only = has_permission('manage',
msg=l_('Only for people with the "manage" permission'))
-
+
@expose('luci.templates.index')
def index(self):
"""Let the user know that's visiting a protected controller."""
flash(_("Secure Controller here"))
return dict(page='index')
-
+
@expose('luci.templates.index')
def some_where(self):
"""Let the user know that this action is protected too."""
diff --git a/luci/controllers/template.py b/luci/controllers/template.py
index 30942b9..1635d02 100644
--- a/luci/controllers/template.py
+++ b/luci/controllers/template.py
@@ -7,29 +7,28 @@ __all__ = ['TemplateController']
class TemplateController(BaseController):
- """
- The fallback controller for luci.
-
+ """The fallback controller for Luci.
+
By default, the final controller tried to fulfill the request
when no other routes match. It may be used to display a template
when all else fails, e.g.::
-
+
def view(self, url):
return render('/%s' % url)
-
+
Or if you're using Mako and want to explicitly send a 404 (Not
Found) response code when the requested template doesn't exist::
-
+
import mako.exceptions
-
+
def view(self, url):
try:
return render('/%s' % url)
except mako.exceptions.TopLevelLookupException:
abort(404)
-
+
"""
-
def view(self, url):
"""Abort the request with a 404 HTTP status code."""
abort(404)
+
diff --git a/luci/templates/cluster_part/node.html b/luci/templates/cluster_part/node.html
index bd47fd6..9ae4af3 100644
--- a/luci/templates/cluster_part/node.html
+++ b/luci/templates/cluster_part/node.html
@@ -17,16 +17,16 @@
form_utils = app_globals.form_utils">
<form action="${tg.url(cmd_url + '/apply')}" method="post">
- <div class="toolbar" id="toolbar_collapsed" onclick="onOverviewShow()">
- <div class="toolbar_view_button">show</div>
+ <div class="toolbar" id="toolbar_collapsed">
+ <div class="toolbar_view_button" onclick="onOverviewShow()">show</div>
</div>
- <div class="toolbar" id="toolbar_shown" onclick="onOverviewCollapse()">
+ <div class="toolbar" id="toolbar_shown">
<input type="submit" name="${apply_cmds.REBOOT}" value="${_('reboot')}" class="toolbar_button" id="tb_reboot" />
<input type="submit" name="${apply_cmds.FENCE}" value="${_('fence')}" class="toolbar_button" id="tb_fence" />
<input type="submit" name="${apply_cmds.LEAVE}" value="${_('leave cluster')}" class="toolbar_button" id="tb_leave" />
<input type="submit" name="${apply_cmds.DELETE}" value="${_('delete')}" class="toolbar_button" id="tb_delete" />
<a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">add</a>
- <div class="toolbar_view_button">collapse</div>
+ <div class="toolbar_view_button" onclick="onOverviewCollapse()">collapse</div>
</div>
<!--! OVERVIEW SECTION. -->
14 years, 7 months
[luci] Initial UI changes - new navigation hierarchy, css changes.
by Jeremy Perry
commit 868843dabd79f6bd7e18ea88b94216d76fc70b2b
Author: Jeremy Perry <jeremy.perry(a)redhat.com>
Date: Tue Oct 6 15:10:46 2009 -0400
Initial UI changes - new navigation hierarchy, css changes.
This is the first of a few rounds of changes to get the UI where we want it. I will need some help wiring up the active states for navigation. Currently the navigation trail is not indicated per the design intent, ex; http://file.rdu.redhat.com/~jeperry/sketch/conga-cluster.png
luci/public/css/shared.css | 55 ++++++---
luci/public/css/style.css | 166 +++++++++++++++++++--------
luci/public/images/breadcrumb_bg.png | Bin 0 -> 260 bytes
luci/public/images/breadcrumb_separator.png | Bin 0 -> 505 bytes
luci/public/images/contentbg.png | Bin 408 -> 348 bytes
luci/public/images/toolbar_line.png | Bin 241 -> 2855 bytes
luci/templates/cluster_list.html | 21 ++--
luci/templates/cluster_part/failover.html | 13 +--
luci/templates/cluster_part/fence.html | 13 +--
luci/templates/cluster_part/node.html | 23 ++--
luci/templates/cluster_part/service.html | 13 +--
luci/templates/header.html | 10 ++-
luci/templates/homebase.html | 20 ++--
luci/templates/master.html | 33 ++----
14 files changed, 214 insertions(+), 153 deletions(-)
---
diff --git a/luci/public/css/shared.css b/luci/public/css/shared.css
index 5002c07..34d1fa9 100644
--- a/luci/public/css/shared.css
+++ b/luci/public/css/shared.css
@@ -20,27 +20,34 @@ img {
/* --------------------------------- common --------------------------------- */
+.maintable thead {
+
+}
+
+.maintable td, .maintable th {
+ padding: 8px;
+}
+
.table_space {
width: 100%;
}
.float_button {
- position: relative;
float: right;
clear: right;
right: 15em;
- margin: 0 -14em 0 0;
+ margin: 0;
width: 14em;
display: block;
background-color: #f2f2f2;
text-align: center;
- border: 2px outset;
- color: black;
+ border: 1px solid;
+ color: 666;
text-decoration: none;
font-size: medium;
z-index: 99;
cursor: pointer;
- -moz-border-radius: 10px 10px;
+ -moz-border-radius: 6px 6px;
}
a.float_button {
@@ -78,13 +85,18 @@ a.float_button {
background-color: #f2f2f2;
}
+tr.grid_row td {
+padding:3px;
+}
+
+
#not_selected {
text-align: center;
line-height: 200%;
}
.entity_ok {
- color: green;
+ color: 000;
}
.entity_fail {
@@ -108,13 +120,12 @@ a.float_button {
#toolbar {
padding-left: 1em;
- line-height: 23px;
- height: 31px;
- background: #484646 url(../images/toolbar_line.png) top left repeat-x;
+ background: #484646;
+ clear:both;
}
.toolbar_button {
- margin: 0 .5em 0 .5em;
+ margin: 10px 10px 10px 0;
color: #ffffff;
text-decoration: none;
}
@@ -228,19 +239,19 @@ a.float_button {
}
#overview tbody tr.chosen {
- background-color: #d2edaa;
+ background-color: #c8deec;
}
#overview tbody tr:hover {
- background-color: #fafdf5;
+ background-color: #f5fafc;
}
#overview tbody tr.chosen:hover {
- background-color: #d2edaa;
+ background-color: #c5dae8;
}
#overview tbody tr.even:hover {
- background-color: #e8f6d4;
+ background-color: #e9f4fa;
}
#table_sep {
@@ -283,24 +294,28 @@ a.float_button {
/* --------------------------------- details -------------------------------- */
+#details {
+margin-bottom: 20px;
+}
+
.details_section {
- margin-left: 1em;
+ margin: 1em;
}
.details_section h4 {
- margin: 1em 0 .5em 0;
+ margin: 2em 0 1em;
}
.details_inner {
- margin-left: 1em;
}
#details_header {
padding: 1px 1em;
margin: 0 0 1em 0;
height: 54px;
- color: #ffffff;
- background: #5b5a5b url(../images/details_header_line.png) top left repeat-x;
+ color: #666;
+ border-top: #555 6px solid;
+ background: #efefef; /* url(../images/details_header_line.png) top left repeat-x */
}
#details_header h3 {
@@ -328,7 +343,7 @@ a.float_button {
}
.details_header_info_label {
- color: #ddd;
+ color: #666;
}
/* specific buttons of details header */
diff --git a/luci/public/css/style.css b/luci/public/css/style.css
index 115f92d..0898606 100644
--- a/luci/public/css/style.css
+++ b/luci/public/css/style.css
@@ -23,92 +23,138 @@ body {
}
a {
- color: #286571;
+ color: #006cc2;
}
-.leftmenu {
- position: relative;
- float:left;
- width: 136px;
- background-color: #ffffff;
-}
-
-.leftmenu h2 {
- background-color: #bdd898;
- border: 1px solid #000000;
- margin: 0 0 0 0;
-}
-
-.leftmenu h3 {
- margin: 5px 5px 5px 5px;
- font-weight: normal;
+#breadcrumb {
+ background:transparent none repeat scroll 0 0;
+ clear:both;
+ color:#FFF;
+ float:none;
+ font-size:14px;
+ height:2.5em;
+ line-height:2.5em;
+ list-style-image:none;
+ list-style-position:outside;
+ list-style-type:none;
+ margin:0;
}
ul.mainmenu {
+ background: url(../images/toolbar_line.png) top left repeat-x;
margin: 0;
- padding: 0 0px;
+ padding: 0;
position: relative;
float: left;
- height: 30px;
+ display: block;
+ width: 960px;
}
ul.mainmenu li {
+/* background:transparent url(../images/breadcrumb_bg.png) repeat-x scroll 100% 50%; */
list-style-type: none;
+ float: left;
margin: 0;
- padding: 0;
+ padding: 0 0 0 1em;
position: relative;
- display: inline;
- float: left;
}
ul.mainmenu li a {
+ background:transparent url(../images/breadcrumb_separator.png) no-repeat scroll 100% 50%;
color: #fff;
float: left;
- height: 31px;
display: block;
- line-height: 30px;
- vertical-align: middle;
- padding: 0 10px;
- font-size: 12px;
+ margin-left:0;
+ padding:0 1.75em 0 0;
+ font-size: 14px;
text-decoration: none;
}
ul.mainmenu li a:hover, ul.mainmenu li a.active {
- background: url('../images/menu-item-actibg.png') left top no-repeat;
+/* background:transparent url(../images/breadcrumb_separator.png) no-repeat scroll 100% 50%; */
+/* background: url('../images/menu-item-actibg.png') left top no-repeat; */
}
ul.mainmenu li.first a {
- background: none;
+/* background: none; */
}
ul.mainmenu li.first a:hover, ul.mainmenu li.first a.active {
}
-ul.mainmenu li.loginlogout
-{
+ul.mainmenu li.loginlogout {
float: right;
}
-ul.mainmenu li.loginlogout a:hover
-{
+ul.mainmenu li.loginlogout a:hover {
background: url('../images/menu-item-actibg.png') left top no-repeat;
}
+ul.submenu {
+ margin: 0 0 10px 0;
+ padding: 0 0px;
+ position: relative;
+ float: left;
+}
+
+ul.submenu li {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+ position: relative;
+ display: inline;
+ float: left;
+}
+
ul.submenu li a {
+ color: #000;
position: relative;
+ padding: 10px 10px;
float: left;
- height: 25px;
display: block;
- font-size: 10px;
- clear: right;
+ font-size: 14px;
+ vertical-align: middle;
+ text-decoration: none;
+ }
+
+ul.submenu li a:hover, ul.submenu li a.active {
+ background: #ccc;
+}
+
+#header {
+ height:60px;
+}
+
+#header h1 {
+ color: #fff;
+ font-weight: normal;
+ display: inline;
+}
+
+ul.headermenu {
+ float: right;
+}
+
+ul.headermenu li {
+ list-style-type: none;
+ float:left;
+ display: block;
+ padding: 0 0 0 1em;
+}
+
+ul.headermenu li a {
+ color:#fff;
+ text-decoration: none;
}
#content {
background: #fff url('../images/contentbg.png') left bottom no-repeat;
- margin : 0 10px 10px 10px;
- padding: 0 0px;
+ margin: 0;
+ padding: 10px;
overflow: hidden;
float: left;
+ min-height: 400px;
+ width: 940px;
}
#content .currentpage {
@@ -120,6 +166,7 @@ ul.submenu li a {
#loginform
{
text-align: center;
+ margin-top: 100px;
}
form.loginfields
@@ -209,19 +256,15 @@ form.loginfields input#submit
/* Sidebar */
.sidebar {
- border: 1px solid #cce;
- background-color: #eee;
- margin: 0.5em;
- margin-left: 1.5em;
- padding: 1em;
- float: right;
+ padding: 20px;
width: 200px;
- font-size: 88%;
+ float: left;
}
.sidebar h2 {
margin-top: 0;
- color: black;
+ color: #ccc;
+ font-weight: normal;
}
.sidebar ul {
@@ -229,7 +272,13 @@ form.loginfields input#submit
padding-left: 0;
}
-
+.actions {
+ border: 1px solid #cce;
+ background-color: #eee;
+ font-size: 14px;
+ line-height: 24px;
+ padding: 1em;
+}
#sb_top {
clear: right;
@@ -255,13 +304,32 @@ form.loginfields input#submit
margin-bottom: 0.5em;
}
+
+/* Main area in homebase */
+.mainpage {
+ margin-left: 240px; /* 200 (sidebar width) + 40 (sidebar padding) */
+ padding: 20px 20px 0 0;
+}
+
+.mainpage h2 {
+ margin-top: 0;
+ color: #ccc;
+ font-weight: normal;
+}
+
+
/* Other and footer */
#footer {
- background: #fff;
+ clear:both;
padding: 10px;
- color:#888888;
+ color:#b1c2d0;
font-size:90%;
}
+
+#footer a {
+ color:#cfe3f3;
+}
+
.flogo {
float:left;
margin-bottom:0px;
diff --git a/luci/public/images/breadcrumb_bg.png b/luci/public/images/breadcrumb_bg.png
new file mode 100755
index 0000000..c80200c
Binary files /dev/null and b/luci/public/images/breadcrumb_bg.png differ
diff --git a/luci/public/images/breadcrumb_separator.png b/luci/public/images/breadcrumb_separator.png
new file mode 100755
index 0000000..c7764c7
Binary files /dev/null and b/luci/public/images/breadcrumb_separator.png differ
diff --git a/luci/public/images/contentbg.png b/luci/public/images/contentbg.png
old mode 100644
new mode 100755
index 613e478..d023af8
Binary files a/luci/public/images/contentbg.png and b/luci/public/images/contentbg.png differ
diff --git a/luci/public/images/toolbar_line.png b/luci/public/images/toolbar_line.png
old mode 100644
new mode 100755
index 5738646..0b5de14
Binary files a/luci/public/images/toolbar_line.png and b/luci/public/images/toolbar_line.png differ
diff --git a/luci/templates/cluster_list.html b/luci/templates/cluster_list.html
index 804b2cf..8386269 100644
--- a/luci/templates/cluster_list.html
+++ b/luci/templates/cluster_list.html
@@ -17,27 +17,24 @@
<form action="${tg.url(cmd_url + '/apply')}" method="post">
<div id="toolbar">
<!--<input type="submit" name="${apply_cmds.UPDATE}" value="${_('update')}" class="toolbar_button" id="tb_update"/>!-->
- <input type="submit" name="${apply_cmds.DELETE}" value="${_('delete')}" class="toolbar_button" id="tb_delete"/>
- <a href="${tg.url(cmd_url + '/create')}" class="toolbar_button" id="tb_create">create</a>
- <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">add</a>
- </div>
+ <a href="${tg.url(cmd_url + '/create')}" class="toolbar_button" id="tb_create">Create</a>
+ <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">Add</a>
+ <input type="submit" name="${apply_cmds.DELETE}" value="${_('Delete')}" class="toolbar_button" id="tb_delete"/>
+ </div>
<!--! OVERVIEW SECTION. -->
<div id="overview">
- <table id="clusters_tlist">
+ <table id="clusters_tlist" class="maintable">
<thead>
<tr>
<th class="checkbox"></th>
<th class="icon"></th>
- <th class="main_id">name</th>
- <th class="cluster_tlist_status">status</th>
- <th class="cluster_tlist_votes">total votes</th>
- <th class="cluster_tlist_quorum">min. required quorum</th>
+ <th class="main_id">Name</th>
+ <th class="cluster_tlist_status">Status</th>
+ <th class="cluster_tlist_votes">Total Votes</th>
+ <th class="cluster_tlist_quorum">Min. Required Quorum</th>
<td class="table_space"></td>
</tr>
- <tr>
- <td colspan="7" id="table_sep"><hr /></td>
- </tr>
</thead>
<tbody>
<!--! List all the fences. -->
diff --git a/luci/templates/cluster_part/failover.html b/luci/templates/cluster_part/failover.html
index 315e27a..14f14e9 100644
--- a/luci/templates/cluster_part/failover.html
+++ b/luci/templates/cluster_part/failover.html
@@ -24,20 +24,17 @@
<!--! OVERVIEW SECTION. -->
<div id="overview">
- <table id="fdom_tlist">
+ <table id="fdom_tlist" class="maintable">
<thead>
<tr>
<th class="checkbox"></th>
<th class="icon"></th>
- <th class="main_id">name</th>
- <th class="fdom_tlist_enabled">enabled</th>
- <th class="fdom_tlist_prioritizied">prioritizied</th>
- <th class="fdom_tlist_restricted">restricted</th>
+ <th class="main_id">Name</th>
+ <th class="fdom_tlist_enabled">Enabled</th>
+ <th class="fdom_tlist_prioritizied">Prioritizied</th>
+ <th class="fdom_tlist_restricted">Restricted</th>
<td class="table_space"></td>
</tr>
- <tr>
- <td colspan="7" id="table_sep"><hr /></td>
- </tr>
</thead>
<tbody>
<!--! List all the failover domains. -->
diff --git a/luci/templates/cluster_part/fence.html b/luci/templates/cluster_part/fence.html
index fa1464b..4da35f4 100644
--- a/luci/templates/cluster_part/fence.html
+++ b/luci/templates/cluster_part/fence.html
@@ -23,20 +23,17 @@
<!--! OVERVIEW SECTION. -->
<div id="overview">
- <table id="fence_tlist">
+ <table id="fence_tlist" class="maintable">
<thead>
<tr>
<th class="checkbox"></th>
<th class="icon"><img src="${tg.url('/images/global_11x11_black.png')}" alt="shared fences"/></th>
- <th class="main_id">name</th>
- <th class="fence_tlist_type">fence type</th>
- <th class="fence_tlist_members">member nodes</th>
- <th class="fence_tlist_ip">IP address</th>
+ <th class="main_id">Name</th>
+ <th class="fence_tlist_type">Fence Type</th>
+ <th class="fence_tlist_members">Member Nodes</th>
+ <th class="fence_tlist_ip">IP Address</th>
<td class="table_space"></td>
</tr>
- <tr>
- <td colspan="7" id="table_sep"><hr /></td>
- </tr>
</thead>
<tbody>
<!--! List all the fences. -->
diff --git a/luci/templates/cluster_part/node.html b/luci/templates/cluster_part/node.html
index 577b49a..e66dc36 100644
--- a/luci/templates/cluster_part/node.html
+++ b/luci/templates/cluster_part/node.html
@@ -16,29 +16,26 @@
<form action="${tg.url(cmd_url + '/apply')}" method="post">
<div id="toolbar">
- <input type="submit" name="${apply_cmds.REBOOT}" value="${_('reboot')}" class="toolbar_button" id="tb_reboot" />
- <input type="submit" name="${apply_cmds.FENCE}" value="${_('fence')}" class="toolbar_button" id="tb_fence" />
- <input type="submit" name="${apply_cmds.LEAVE}" value="${_('leave cluster')}" class="toolbar_button" id="tb_leave" />
- <input type="submit" name="${apply_cmds.DELETE}" value="${_('delete')}" class="toolbar_button" id="tb_delete" />
- <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">add</a>
+ <input type="submit" name="${apply_cmds.REBOOT}" value="${_('Reboot')}" class="toolbar_button" id="tb_reboot" />
+ <input type="submit" name="${apply_cmds.FENCE}" value="${_('Fence')}" class="toolbar_button" id="tb_fence" />
+ <input type="submit" name="${apply_cmds.LEAVE}" value="${_('Leave Cluster')}" class="toolbar_button" id="tb_leave" />
+ <input type="submit" name="${apply_cmds.DELETE}" value="${_('Delete')}" class="toolbar_button" id="tb_delete" />
+ <a href="${tg.url(cmd_url + '/add')}" class="toolbar_button" id="tb_add">Add</a>
</div>
<!--! OVERVIEW SECTION. -->
<div id="overview">
- <table id="node_tlist">
+ <table id="node_tlist" class="maintable">
<thead>
<tr>
<th class="checkbox"></th>
<th class="icon">!</th>
- <th class="main_id">name</th>
- <th class="node_tlist_status">status</th>
- <th class="node_tlist_load">service load</th>
- <th class="node_tlist_ip">IP address</th>
+ <th class="main_id">Name</th>
+ <th class="node_tlist_status">Status</th>
+ <th class="node_tlist_load">Service Load</th>
+ <th class="node_tlist_ip">IP Address</th>
<td class="table_space"></td>
</tr>
- <tr>
- <td colspan="7" id="table_sep"><hr /></td>
- </tr>
</thead>
<tbody>
<!--! List all the nodes. -->
diff --git a/luci/templates/cluster_part/service.html b/luci/templates/cluster_part/service.html
index 16e84a9..66bea3d 100644
--- a/luci/templates/cluster_part/service.html
+++ b/luci/templates/cluster_part/service.html
@@ -23,20 +23,17 @@
<!--! OVERVIEW SECTION. -->
<div id="overview">
- <table id="service_tlist">
+ <table id="service_tlist" class="maintable">
<thead>
<tr>
<th class="checkbox"></th>
<th class="icon">!</th>
- <th class="main_id">name</th>
- <th class="service_tlist_status">status</th>
- <th class="service_tlist_enabled">enabled</th>
- <th class="service_tlist_fdom">failover domain</th>
+ <th class="main_id">Name</th>
+ <th class="service_tlist_status">Status</th>
+ <th class="service_tlist_enabled">Enabled</th>
+ <th class="service_tlist_fdom">Failover Domain</th>
<td class="table_space"></td>
</tr>
- <tr>
- <td colspan="7" id="table_sep"><hr /></td>
- </tr>
</thead>
<tbody>
<!--! List all the services. -->
diff --git a/luci/templates/header.html b/luci/templates/header.html
index 560d112..5991110 100644
--- a/luci/templates/header.html
+++ b/luci/templates/header.html
@@ -3,7 +3,15 @@
py:strip="">
<py:def function="header">
<div id="header">
- <h3></h3>
+ <h1>logo here</h1>
+ <ul class="headermenu">
+ <li py:if="request.identity" id="admin" class="loginlogout"><a href="${tg.url('/admin')}">Admin</a></li>
+ <li><a href="${tg.url('/about')}" class="${('', 'active')[defined('page') and page==page=='about']}">About</a></li>
+ <span py:if="tg.auth_stack_enabled" py:strip="True">
+ <li py:if="not request.identity" id="login" class="loginlogout"><a href="${tg.url('/login')}">Login</a></li>
+ <li py:if="request.identity" id="login" class="loginlogout"><a href="${tg.url('/logout_handler')}">Logout</a></li>
+ </span>
+ </ul>
</div>
</py:def>
</html>
diff --git a/luci/templates/homebase.html b/luci/templates/homebase.html
index 4d599b1..9acff1a 100644
--- a/luci/templates/homebase.html
+++ b/luci/templates/homebase.html
@@ -12,17 +12,15 @@
</head>
<body>
- <table>
- <tr>
- <td valign="top">
<div class="sidebar">
+ <h2>Take action</h2>
+ <div class="actions">
<a href="/homebase/addsystem">Add a System</a><br/>
<a href="/homebase/addexisting">Add an Existing Cluster</a><br/>
<a href="/homebase/managesystems">Manage Systems</a><br/>
<a href="/homebase/adduser">Add a User</a><br/>
+ </div>
</div>
- </td>
- <td valign="top">
<div class="mainpage">
<div py:if="homebasepage == 'managesystems'">
<h3>Manage Systems and Clusters</h3>
@@ -54,13 +52,11 @@
<div py:replace="tmpl_context.form()">Input Form</div>
</div>
<div py:if="homebasepage == 'homebasepage'">
- <h2>Luci Homebase</h2>
- <p>Welcome to Luci.</p>
- <p>Select an action from the list on the left.</p>
+ <h2>Problems</h2>
+ <p>Table with summary of problems goes here</p>
+ <h2><a href="${tg.url('/cluster')}" class="${('', 'active')[defined('page') and page==page=='clusters']}">Clusters</a></h2>
+ <p>Table with summary of clusters goes here.</p>
</div>
</div>
- </td>
- </tr>
- </table>
</body>
-</html>
+</html>
\ No newline at end of file
diff --git a/luci/templates/master.html b/luci/templates/master.html
index 4762da3..5dd2431 100644
--- a/luci/templates/master.html
+++ b/luci/templates/master.html
@@ -17,35 +17,23 @@
<body py:match="body" py:attrs="select('@*')">
${header()}
- <div class="leftmenu">
- <img src="../../images/conga.png"/>
- <h2>CLUSTERS</h2>
- <h3>ClusterOne</h3>
- <h3>ClusterTwo</h3>
- </div>
- <div class="menus">
+ <div id="breadcrumb">
<ul class="mainmenu">
- <li><a href="${tg.url('/homebase')}" class="${('', 'active')[defined('page') and page==page=='homebase']}">homebase</a></li>
- <li><a href="${tg.url('/cluster')}" class="${('', 'active')[defined('page') and page==page=='clusters']}">cluster</a></li>
- <li><a href="${tg.url('/about')}" class="${('', 'active')[defined('page') and page==page=='about']}">About</a></li>
- <span py:if="tg.auth_stack_enabled" py:strip="True">
- <li py:if="not request.identity" id="login" class="loginlogout"><a href="${tg.url('/login')}">Login</a></li>
- <li py:if="request.identity" id="login" class="loginlogout"><a href="${tg.url('/logout_handler')}">Logout</a></li>
- <li py:if="request.identity" id="admin" class="loginlogout"><a href="${tg.url('/admin')}">Admin</a></li>
- </span>
- </ul><br/><br/>
- <py:if test="'cluster_url' in dir(tmpl_context)">
- <ul class="mainmenu submenu">
+ <li><a href="${tg.url('/homebase')}" class="${('', 'active')[defined('page') and page==page=='homebase']}">Homebase</a></li>
+ <li><a href="${tg.url('/cluster')}" class="${('', 'active')[defined('page') and page==page=='clusters']}">Clusters*</a></li>
+ </ul>
+ </div>
+
+ <div id="content">
+ <py:if test="'cluster_url' in dir(tmpl_context)">
+ <ul class="submenu">
<li><a href="${tg.url(tmpl_context.cluster_url + '/nodes')}">Nodes</a></li>
<li><a href="${tg.url(tmpl_context.cluster_url + '/services')}">Services</a></li>
<li><a href="${tg.url(tmpl_context.cluster_url + '/failovers')}">Failovers</a></li>
<li><a href="${tg.url(tmpl_context.cluster_url +'/fences')}">Fences</a></li>
</ul>
- <br/><br/>
</py:if>
- </div>
- <div id="content">
<py:if test="defined('page')">
<div class="currentpage">
</div>
@@ -55,7 +43,8 @@
</py:with>
<div py:replace="select('*|text()')"/>
<!-- End of content -->
- ${footer()}
+
</div>
+ ${footer()}
</body>
</html>
14 years, 7 months