Update the UI look and feel

This commit is contained in:
Rob Crittenden 2007-11-01 16:15:32 -04:00
parent 77a105688c
commit 6a0ca23577
34 changed files with 503 additions and 439 deletions

View File

@ -212,6 +212,8 @@ AC_CONFIG_FILES([
ipa-gui/ipagui/static/Makefile
ipa-gui/ipagui/static/css/Makefile
ipa-gui/ipagui/static/images/Makefile
ipa-gui/ipagui/static/images/template/Makefile
ipa-gui/ipagui/static/images/branding/Makefile
ipa-gui/ipagui/static/javascript/Makefile
ipa-gui/ipagui/subcontrollers/Makefile
ipa-gui/ipagui/templates/Makefile

View File

@ -1,272 +1,381 @@
/*
* Quick mash-up of CSS for the TG quick start page.
*/
*
{
margin: 0;
padding: 0;
}
html, body {
color: #000;
background:#fff;
margin: 0;
padding: 0;
font-family: sans-serif;
height: 100%;
}
body {
min-width: 750px;
background-image: url('/static/images/template/background.png');
background-repeat: repeat-x;
background-color: #f9f9f9;
margin: 0px;
padding: 0px;
padding-top: 8px;
min-width: 750px;
}
#page {
background:#ccc; /* should be same as #sidebar */
margin:0 auto;
width:100%;
clear:both;
body, h1, h2, h3, h4, h5, p, ul, li, div, span {
font-family: "Luxi Sans", "Gill Sans", "Verdana", "Helvetica", sans-serif;
font-size: small;
color: #444;
}
#head {
margin: 0px;
padding: 0px;
padding-left: 12px;
}
#header {
background:#fff;
#head h1 a {
display: block;
text-indent: -9999px;
height: 54px;
width: 350px;
overflow: hidden;
float: left;
background: url('/static/images/branding/logo.png') no-repeat;
}
#header #logo {
float:left;
#searchbar {
float: right;
margin-right: 24px;
margin-top: 18px;
}
#header #headerinfo {
text-align:right;
padding-right:10px;
#navbar {
width: 100%;
height: 64px;
margin: 0px;
clear: both;
background-image: url('/static/images/template/background-navbar.png');
background-repeat: repeat-x;
}
#header #headerinfo #login {
#navbar ul {
margin: 0px;
padding: 0px;
padding-left: 10px;
list-style: none;
}
#header #headerinfo #topsearch {
padding-top: 15px;
#navbar li {
float: left;
margin: 0px;
padding: 0px;
font-size: small;
}
.searchtext {
background-color:#E5F1F4;
border:1px solid #8E8E8E;
color:#444444;
#navbar a {
display: block;
margin: 22px 15px;
}
#navbar .active {
background-image: url('/static/images/template/background-navbar-active.png');
height: 70px;
width: 116px;
#nav {
background:#cc0000;
color:#fff;
min-height:3px;
max-height:3px;
text-align: center;
}
#nav ul {
margin:0;
padding:0;
list-style:none;
#login {
float: right;
padding-top: 15px;
padding-right: 10px;
}
#nav li {
display:inline;
#content {
width: 100%;
min-height: 50%;
background-color: #f9f9f9;
background-image: url('/static/images/template/background-content.png');
background-repeat: repeat-x;
}
#nav a:visited {
color:#fff;
}
#nav a:link {
color:#fff;
#details {
height: 100%;
margin: 0px 24px;
margin-right: 300px;
padding: 18px 18px;
padding-bottom: 12%;
border-top: 1px solid #bbdc5f;
background-color: white;
text-align: left;
}
#main_content {
background:#fff;
float:right;
width:84%;
min-height:500px;
border-left: 1px solid #000;
padding: 10px;
#details p {
margin-top: 1ex;
margin-bottom: 1ex;
}
#main_content h1,h2 {
margin-top: 0px;
margin-bottom: 5px;
}
#sidebar {
background:#ccc; /* should be same as #page */
float:left;
width:11%;
padding: 5px;
font-size: medium;
width: 250px;
text-align: left;
padding: 18px 13px;
margin-right: 24px;
float: right;
height: 100%;
border: 1px solid #aaa;
background-color: #ccc;
background-image: url('/static/images/template/background-sidebar.png');
background-repeat: repeat-y;
}
#sidebar p {
line-height: 150%;
#sidebar h1, h2, h3 {
padding: 0px;
margin: 0px;
}
#sidebar h2 {
margin-top: 0;
}
#sidebar h2 { font-size: medium; }
#sidebar h3 { font-size: small; }
#sidebar ul {
margin-left: 1.5em;
padding-left: 0;
padding: 0px;
margin: 0px;
list-style: none;
padding-bottom: 10px;
}
#sidebar a:visited,
#sidebar a:link {
color:#000;
#sidebar ul, #sidebar li {
margin-bottom: 6px;
font-size: small;
}
#sidebar hr {
border-top: 1px solid #aaa;
border-bottom: 1px solid #ddd;
color: #ddd;
margin-top: 20px !important;
margin-bottom: 20px !important;
}
input.text {
border: 1px solid #8e8e8e;
background-color: #e5f1f4;
color: #444444;
}
input.button {
}
#navbar-secondary li {
font-size: medium;
}
#navbar-secondary .active a:link,
#navbar-secondary .active a:visited,
#navbar-secondary .active a:active,
#navbar-secondary .active a,
#navbar-secondary li
{
color: #555 !important;
text-decoration: none;
font-weight: bold;
}
#details * {
color: #444;
}
#details p,
#details td,
#details li {
font-size: small;
color: #555;
}
#details h1 {
color: #7d7d5b;
font-size: x-large;
height: 40px;
/*
* padding-left: 48px;
*/
padding-top: 6px;
vertical-align: middle;
}
#details h1.user {
background-image: url('/static/images/objects/object-user.png');
background-repeat: no-repeat;
margin-bottom: 18px;
}
#details h2, #details table caption, h2.formsection {
color: #999;
font-size: large;
font-weight: normal;
border-bottom: 1px solid #999;
margin-bottom: 10px;
text-align: left;
width: 100%;
}
h2.formsection {
margin-top: 12px;
}
#details h3, table.formtable th {
font-size: small;
color: black;
}
table.details {
margin-bottom: 18px;
width: 100%;
}
#details table.details th {
font-size: small;
width: 150px;
padding: 4px 0px;
padding-right: 8px;
border-bottom: 1px dotted #ddd;
}
#details table.details th.even { background-color: white; }
#details table.details th.odd { background-color: #eee; }
#details table.details td {
padding-left: 8px;
padding-bottom: 3px;
border-bottom: 1px dotted #ddd;
width: 60%;
}
#details hr {
margin-top: 48px;
margin-bottom: 12px;
height: 1px;
border-color: #bbb;
border-width: 0pt 0pt 1px;
padding: 0.5em;
border-style: none none dashed;
}
input.submitbutton {
float: right;
}
#alertbox {
width: 100%;
padding: 6px 0px;
margin-top: 12px;
margin-bottom: 18px;
vertical-align: middle;
-moz-border-radius: 6px;
background-color: #6995d5;
color: white;
}
#alertbox h2 {
width: auto;
padding: 0px 16px;
float: left;
font-size: medium;
text-transform: uppercase;
color: white;
font-weight: bold;
border: none;
}
#alertbox p {
padding: 0px 0px;
text-align: center;
color: white;
width: auto;
}
td, th {
text-align: left;
}
#footer {
background:#fff;
clear:both;
border-top: 1px solid #000;
padding-top: 10px;
text-align: center;
font-size: x-small;
text-align: center;
margin-left: auto;
margin-right: auto;
width: 30%;
padding: 20px 20px;
}
#footer a:visited,
#footer a:link {
color:#777;
text-decoration: none;
table.formtable {
width: 100%;
}
.formsection {
color: #888888;
width: 90%;
font-weight: bold;
border-bottom: 1px solid;
margin: 20px 0px 20px 0px;
table.formtable th, table.formtable td {
vertical-align: top;
padding-bottom: 10px;
}
.formtable {
width: 90%;
table.formtable th {
width: 28%;
}
.formtable th {
width: 20%;
text-align: right;
table.formtable td {
}
.floatlist {
float: right;
width: 50%;
input.submitbutton, input.searchbutton, #source_searcharea input.searchbutton {
border: 1px outset #aaa;
padding: 2px 1px;
margin-bottom: 2px;
}
.floatheader {
color: #885555;
font-weight: bold;
table.formtable td input[type="text"], input#criteria {
border: 1px inset #dcdcdc;
font-size: medium;
padding: 2px 1px;
background-color: #f5faff;
}
.small {
font-size: small;
table.formtable td select {
border: 1px inset #dcdcdc;
font-size: small;
padding: 2px 1px;
background-color: #f5faff;
}
.xsmall {
font-size: x-small;
p.empty-message {
font-size: large;
font-style: italic;
color: #888 !important;
}
#status_block {
margin: 0 auto 0.5em auto;
padding: 15px 10px 15px 55px;
background: #ecc;
border: 1px solid #c99;
width: 450px;
font-size: 120%;
font-weight: bolder;
div.instructions {
padding: 2px 6px;
margin-top: 16px;
border-top: 1px solid #c0d5f1;
border-bottom: 1px solid #c0d5f1;
background-color: #eef4fd;
}
.warning_message {
font-size: 120%;
color: #ee0000;
font-weight: bolder;
div#search {
padding-top: 16px;
padding-bottom: 24px;
}
.fielderror {
color: red;
font-weight: bold;
}
.requiredfield {
background: #eebbbb;
}
#resultstable,
#resultstable th,
#resultstable td {
border-collapse: collapse;
border-style: solid;
border-width: 1px;
margin: 0px;
padding: 5px;
}
#resultstable th {
background: #eee;
}
.deletebutton {
}
/*
* Used for checkboxlist of aci attributes
*/
ul.requiredfield {
background: #ffffff;
}
ul.checkboxlist {
padding: 0px;
margin: 0px;
ul.checkboxlist li {
list-style: none;
margin: 8px 0px;
}
/*
* TableKit css
*/
.sortcol {
cursor: pointer;
padding-right: 20px !important;
background-repeat: no-repeat !important;
background-position: right center !important;
ul.checkboxlist li input {
background-color: yellow;
height: 1.1em;
width: 1.2em;
border: 1px solid red;
}
.sortasc {
background-image: url(/static/images/up.gif) !important;
}
.sortdesc {
background-image: url(/static/images/down.gif) !important;
}
.nosort {
cursor: default;
}
th.resize-handle-active {
cursor: e-resize;
}
div.resize-handle {
cursor: e-resize;
width: 2px;
border-right: 1px dashed #1E90FF;
position:absolute;
top:0;
left:0;
}
/*
* Overrides for printing
*/
@media print {
#header { display:none; }
#nav { display:none; }
#sidebar { display:none; }
#footer { display:none; }
#main_content { width: 95%; margin:0; padding:0; border-left-style: none; }
.submitbutton { display:none; }
.deletebutton { display:none; }
}

View File

@ -1,5 +1,10 @@
NULL =
SUBDIRS = \
branding \
template \
$(NULL)
appdir = $(IPA_DATA_DIR)/ipagui/static/images
app_DATA = \
down.gif \

View File

@ -0,0 +1,14 @@
NULL =
appdir = $(IPA_DATA_DIR)/ipagui/static/images/branding
app_DATA = \
logo.png \
$(NULL)
EXTRA_DIST = \
$(app_DATA) \
$(NULL)
MAINTAINERCLEANFILES = \
*~ \
Makefile.in

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -0,0 +1,20 @@
NULL =
appdir = $(IPA_DATA_DIR)/ipagui/static/images/template
app_DATA = \
background-content.png \
background-navbar-active_fullsize.png \
background-navbar-active.png \
background-navbar_fullsize.png \
background-navbar.png \
background.png \
background-sidebar.png \
$(NULL)
EXTRA_DIST = \
$(app_DATA) \
$(NULL)
MAINTAINERCLEANFILES = \
*~ \
Makefile.in

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 634 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

View File

@ -7,7 +7,7 @@
</head>
<body>
<h2>Edit Delegation</h2>
<h1>Edit Delegation</h1>
${form.display(action=tg.url("/delegate/update"), value=delegate,
actionname='Update')}

View File

@ -59,33 +59,23 @@
<form action="${action}" name="${name}" method="${method}" class="tableform">
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
<input type="submit" class="submitbutton" name="submit"
value="${actionname} Delegation"/>
<br/><br/>
</th>
<td>
<input type="submit" class="submitbutton" name="submit"
value="Cancel ${actionname}"/>
<br/><br/>
</td>
<td py:if='actionname == "Update"'>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
<span py:if='actionname == "Update"'>
<input type="button" class="deletebutton"
value="Delete Delegation"
onclick="return confirmDelete();"
/>
<br/><br/>
</td>
</tr>
</table>
</span>
<div py:for="field in hidden_fields"
py:replace="field.display(value_for(field), **params_for(field))"
/>
<h2>Delegation Details</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th valign="top">
@ -114,13 +104,11 @@
py:content="tg.errors.get('source_group_dn')" />
</div>
<div id="source_searcharea" style="display:none">
<div>
<input id="source_criteria" type="text"
onkeypress="return enterDoSearch(event, 'source');" />
<input type="button" value="Find"
<input class="searchbutton" type="button" value="Find"
onclick="return doSearch('source');"
/>
</div>
<div id="source_searchresults">
</div>
</div>
@ -156,7 +144,7 @@
<div>
<input id="dest_criteria" type="text"
onkeypress="return enterDoSearch(event, 'dest');" />
<input type="button" value="Find"
<input class="searchbutton" type="button" value="Find"
onclick="return doSearch('dest');"
/>
</div>
@ -167,28 +155,18 @@
</tr>
</table>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
<br/>
<hr />
<input type="submit" class="submitbutton" name="submit"
value="${actionname} Delegation"/>
</th>
<td>
<br/>
<input type="submit" class="submitbutton" name="submit"
value="Cancel ${actionname}"/>
</td>
<td py:if='actionname == "Update"'>
<br/>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
<span py:if='actionname == "Update"'>
<input type="button" class="deletebutton"
value="Delete Delegation"
onclick="return confirmDelete();"
/>
</td>
</tr>
</table>
</span>
<script py:if="not value.get('source_group_dn')"
type="text/javascript">

View File

@ -6,11 +6,12 @@
<body py:match="item.tag=='{http://www.w3.org/1999/xhtml}body'" py:attrs="item.items()">
<div id="main_content">
<div id="status_block" py:if="value_of('tg_flash', None)"
py:content="XML(tg_flash)"></div>
<div id="details">
<div id="alertbox" py:if="value_of('tg_flash', None)"><p py:content="XML(tg_flash)"></p></div>
<div py:replace="[item.text]+item[:]"></div>
</div>
</div>
</body>
</html>

View File

@ -25,10 +25,9 @@ from ipagui.helpers import ipahelper
method="post" action="${tg.url('/delegate/edit')}">
<input type="hidden" id="edit_acistr" name="acistr" value="" />
</form>
<h1>Delegations</h1>
<h2>Delegations</h2>
<table id="resultstable" class="sortable resizable">
<table id="resultstable" class="details sortable resizable">
<thead>
<tr>
<th>${fields.name.label}</th>

View File

@ -6,11 +6,9 @@
<title>Add Delegation</title>
</head>
<body>
<h2>Add Delegation</h2>
<h1>Add Delegation</h1>
${form.display(action=tg.url("/delegate/create"), value=delegate,
actionname='Add')}
</body>
</html>

View File

@ -6,16 +6,14 @@
<title>Edit Group</title>
</head>
<body>
<div>
<div style="float:right">
<input type="checkbox" id="toggleprotected_checkbox"
<div id="details">
<h1>Edit Group</h1>
<input type="checkbox" id="toggleprotected_checkbox"
onclick="toggleProtectedFields(this);">
<span class="small">edit protected fields</span>
</input>
</div>
<h2>Edit Group</h2>
</div>
${form.display(action=tg.url('/group/update'), value=group, members=members)}
</div>
</body>
</html>

View File

@ -9,26 +9,15 @@
<form action="${action}" name="${name}" method="${method}" class="tableform"
onsubmit="preSubmit()" >
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
<input type="submit" class="submitbutton" name="submit"
value="Update Group"/>
</th>
<td>
<input type="submit" class="submitbutton" name="submit"
value="Cancel Edit" />
</td>
<td>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
<input type="button" class="deletebutton"
value="Delete Group"
onclick="return confirmDelete();"
/>
<br/><br/>
</td>
</tr>
</table>
<?python
from ipagui.helpers import ipahelper
@ -73,7 +62,7 @@ from ipagui.helpers import ipahelper
py:replace="field.display(value_for(field), **params_for(field))"
/>
<div class="formsection">Group Details</div>
<h2 class="formsection">Group Details</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -120,7 +109,7 @@ from ipagui.helpers import ipahelper
</table>
<div>
<div class="formsection">Group Members</div>
<h2 class="formsection">Group Members</h2>
<div class="floatlist">
<div class="floatheader">To Remove:</div>
@ -176,7 +165,7 @@ from ipagui.helpers import ipahelper
</div>
<div style="clear:both">
<div class="formsection">Add Members</div>
<h2 class="formsection">Add Members</h2>
<div class="floatlist">
<div class="floatheader">To Add:</div>
@ -188,7 +177,7 @@ from ipagui.helpers import ipahelper
<div id="search">
<input id="criteria" type="text" name="criteria"
onkeypress="return enterDoSearch(event);" />
<input type="button" value="Find"
<input class="searchbutton" type="button" value="Find"
onclick="return doSearch();"
/>
</div>
@ -196,30 +185,15 @@ from ipagui.helpers import ipahelper
</div>
</div>
</div>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
<br />
<hr />
<input type="submit" class="submitbutton" name="submit"
value="Update Group"/>
</th>
<td>
<br />
<input type="submit" class="submitbutton" name="submit"
value="Cancel Edit" />
</td>
<td>
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
<input type="button" class="deletebutton"
value="Delete Group"
onclick="return confirmDelete();"
/>
</td>
</tr>
</table>
</form>
<script type="text/javascript">

View File

@ -6,8 +6,8 @@
<body py:match="item.tag=='{http://www.w3.org/1999/xhtml}body'" py:attrs="item.items()">
<div id="main_content">
<div id="status_block" py:if="value_of('tg_flash', None)"
py:content="XML(tg_flash)"></div>
<div id="alertbox" py:if="value_of('tg_flash', None)">
<p py:content="XML(tg_flash)"></p></div>
<div py:replace="[item.text]+item[:]"></div>
</div>

View File

@ -6,6 +6,8 @@
<title>Find Groups</title>
</head>
<body>
<div id="details">
<h1>Find Groups</h1>
<script type="text/javascript" charset="utf-8" src="${tg.url('/static/javascript/tablekit.js')}"></script>
<div id="search">
<form action="${tg.url('/group/list')}" method="get">
@ -18,7 +20,7 @@
</div>
<div py:if='(groups != None) and (len(groups) > 0)'>
<h2>${len(groups)} results returned:</h2>
<table id="resultstable" class="sortable resizable">
<table id="resultstable" class="details sortable resizable">
<thead>
<tr>
<th>
@ -44,7 +46,7 @@
<div py:if='(groups != None) and (len(groups) == 0)'>
<h2>No results found for "${criteria}"</h2>
</div>
<div py:if='groups == None'>
<div class="instructions" py:if='groups == None'>
<p>
Search automatically looks across multiple fields. If you want to find
Joe in Finance, try typing "joe finance" into the search box.
@ -61,5 +63,6 @@
will allow you to resize the header.
</p>
</div>
</div>
</body>
</html>

View File

@ -6,8 +6,10 @@
<title>Add Group</title>
</head>
<body>
<h2>Add Group</h2>
<div id="details">
<h1>Add Group</h1>
${form.display(action=tg.url('/group/create'), value=group)}
</div>
</body>
</html>

View File

@ -3,13 +3,7 @@
<form action="${action}" name="${name}" method="${method}" class="tableform"
onsubmit="preSubmit()" >
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<td>
<input type="submit" class="submitbutton" name="submit" value="Add Group"/>
</td>
</tr>
</table>
<?python
from ipagui.helpers import ipahelper
@ -36,7 +30,7 @@ from ipagui.helpers import ipahelper
py:replace="field.display(value_for(field), **params_for(field))"
/>
<div class="formsection">Group Details</div>
<h2 class="formsection">Group Details</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -76,7 +70,7 @@ from ipagui.helpers import ipahelper
</table>
<div style="clear:both">
<div class="formsection">Add Members</div>
<h2 class="formsection">Add Members</h2>
<div class="floatlist">
<div class="floatheader">To Add:</div>
@ -97,14 +91,9 @@ from ipagui.helpers import ipahelper
</div>
</div>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<td>
<br />
<input type="submit" class="submitbutton" name="submit" value="Add Group"/>
</td>
</tr>
</table>
<hr />
<input type="submit" class="submitbutton" name="submit" value="Add Group"/>
</form>

View File

@ -9,13 +9,14 @@
<?python
edit_url = tg.url('/group/edit', cn=group.get('cn'))
?>
<h2>View Group</h2>
<div id="details">
<h1>View Group</h1>
<input type="button"
<input class="submitbutton" type="button"
onclick="document.location.href='${edit_url}'"
value="Edit Group" />
<div class="formsection">Group Details</div>
<h2 class="formsection">Group Details</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -39,7 +40,7 @@ edit_url = tg.url('/group/edit', cn=group.get('cn'))
</tr>
</table>
<div class="formsection">Group Members</div>
<h2 class="formsection">Group Members</h2>
<div py:for="member in members">
<?python
@ -68,10 +69,10 @@ edit_url = tg.url('/group/edit', cn=group.get('cn'))
</div>
<br/>
<input type="button"
<hr />
<input class="submitbutton" type="button"
onclick="document.location.href='${edit_url}'"
value="Edit Group" />
</div>
</body>
</html>

View File

@ -16,26 +16,10 @@
<body py:match="item.tag=='{http://www.w3.org/1999/xhtml}body'" py:attrs="item.items()">
<div id="header">
<div id="logo">
<a href="${tg.url('/')}"><img
src="${tg.url('/static/images/logo.png')}"
border="0" alt="homepage"
/></a>
</div>
<div id="head">
<h1><a href="${tg.url('/')}">Free IPA</a></h1>
<div id="headerinfo">
<div id="login">
<div py:if="tg.config('identity.on') and not defined('logging_in')" id="pageLogin">
<span py:if="tg.identity.anonymous">
Kerberos login failed.
</span>
<span py:if="not tg.identity.anonymous">
Logged in as: ${tg.identity.user.display_name}
</span>
</div>
</div>
<div id="topsearch">
<div id="searchbar">
<form action="${tg.url('/topsearch')}" method="post">
<select name="searchtype">
<option>Users</option>
@ -56,40 +40,60 @@
</script>
</div>
</div>
</div>
<div id="navbar">
<!-- hiding the tabs
<ul>
<li><a href="#">Overview</a></li>
<li class="active"><a href="#">Users</a></li>
<li><a href="#">Groups</a></li>
<li><a href="#">Resources</a></li>
<li><a href="#">Policy</a></li>
<li><a href="#">Search</a></li>
</ul>
-->
<div id="login">
<div py:if="tg.config('identity.on') and not defined('logging_in')" id="pageLogin">
<span py:if="tg.identity.anonymous">
Kerberos login failed.
</span>
<span py:if="not tg.identity.anonymous">
Logged in as: ${tg.identity.user.display_name}
</span>
</div>
</div>
<div id="page">
<div id="nav"><!--
This used to have links. Keeping around in case we move them back...
--></div>
</div>
<div id="content">
<div id="sidebar">
<h2>Tasks</h2>
<p>
<a href="${tg.url('/user/new')}">Add Person</a><br/>
<a href="${tg.url('/user/list')}">Find People</a><br/>
</p>
<p>
<a href="${tg.url('/group/new')}">Add Group</a><br/>
<a href="${tg.url('/group/list')}">Find Groups</a><br/>
</p>
<p>
<a href="${tg.url('/')}">Manage Policy</a><br/>
<a href="${tg.url('/')}">Self Service</a><br/>
</p>
<p>
<a href="${tg.url('/delegate/list')}">Delegations</a><br/>
</p>
<ul>
<li><a href="${tg.url('/user/new')}">Add Person</a></li>
<li><a href="${tg.url('/user/list')}">Find People</a></li>
</ul>
<ul>
<li><a href="${tg.url('/group/new')}">Add Group</a></li>
<li><a href="${tg.url('/group/list')}">Find Groups</a></li>
</ul>
<ul>
<li><a href="${tg.url('/')}">Manage Policy</a></li>
<li><a href="${tg.url('/')}">Self Service</a></li>
</ul>
<ul>
<li><a href="${tg.url('/delegate/list')}">Delegations</a></li>
</ul>
</div>
<div py:replace="[item.text]+item[:]"></div>
</div>
<div id="footer">
<a href="http://www.freeipa.com/" target="_blank">Powered by FreeIPA</a>
</div>
</div>
</body>
</html>

View File

@ -14,7 +14,7 @@
<span class="small">edit protected fields</span>
</input>
</div>
<h2>Edit Person</h2>
<h1>Edit Person</h1>
</div>
<?python

View File

@ -9,25 +9,14 @@
<form action="${action}" name="${name}" method="${method}" class="tableform"
onsubmit="preSubmit()">
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
<input type="submit" class="submitbutton" name="submit"
value="Update Person"/>
</th>
<td>
<input type="submit" class="submitbutton" name="submit"
value="Cancel Edit" />
</td>
<td>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
<input type="button" class="deletebutton"
<input type="button" class="submitbutton"
value="Delete Person"
onclick="return confirmDelete();"
/>
</td>
</tr>
</table>
<?python
from ipagui.helpers import ipahelper
@ -38,7 +27,7 @@ from ipagui.helpers import ipahelper
<script type="text/javascript" charset="utf-8"
src="${tg.url('/static/javascript/dynamicselect.js')}"></script>
<?python
<?python
searchurl = tg.url('/user/edit_search')
selectSearchurl = tg.url('/user/user_select_search')
?>
@ -110,7 +99,7 @@ from ipagui.helpers import ipahelper
py:replace="field.display(value_for(field), **params_for(field))"
/>
<div class="formsection">Identity Details</div>
<h2 class="formsection">Identity Details</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -190,7 +179,7 @@ from ipagui.helpers import ipahelper
</tr>
</table>
<div class="formsection">Account Details</div>
<h2 class="formsection">Account Details</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -359,7 +348,7 @@ from ipagui.helpers import ipahelper
</tr>
</table>
<div class="formsection">Contact Details</div>
<h2 class="formsection">Contact Details</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -434,7 +423,7 @@ from ipagui.helpers import ipahelper
</tr>
</table>
<div class="formsection">Mailing Address</div>
<h2 class="formsection">Mailing Address</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -497,7 +486,7 @@ from ipagui.helpers import ipahelper
</tr>
</table>
<div class="formsection">Employee Information</div>
<h2 class="formsection">Employee Information</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -606,7 +595,7 @@ from ipagui.helpers import ipahelper
</tr>
</table>
<div class="formsection">Misc Information</div>
<h2 class="formsection">Misc Information</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -633,7 +622,7 @@ from ipagui.helpers import ipahelper
</table>
<div py:if='len(custom_fields) &gt; 0'>
<div class="formsection" >Custom Fields</div>
<h2 class="formsection" >Custom Fields</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr py:for='custom_field in custom_fields'>
<th>
@ -651,7 +640,7 @@ from ipagui.helpers import ipahelper
<div>
<div class="formsection">Groups</div>
<h2 class="formsection">Groups</h2>
<div class="floatlist">
<div class="floatheader">To Remove:</div>
@ -701,7 +690,7 @@ from ipagui.helpers import ipahelper
</div>
<div style="clear:both">
<div class="formsection">Add Groups</div>
<h2 class="formsection">Add Groups</h2>
<div class="floatlist">
<div class="floatheader">To Add:</div>
@ -722,28 +711,16 @@ from ipagui.helpers import ipahelper
</div>
</div>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
<br />
<hr/>
<input type="submit" class="submitbutton" name="submit"
value="Update Person"/>
</th>
<td>
<br />
<input type="submit" class="submitbutton" name="submit"
value="Cancel Edit" />
</td>
<td>
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
<input type="button" class="deletebutton"
<input type="button" class="submitbutton"
value="Delete Person"
onclick="return confirmDelete();"
/>
</td>
</tr>
</table>
</form>

View File

@ -6,8 +6,9 @@
<body py:match="item.tag=='{http://www.w3.org/1999/xhtml}body'" py:attrs="item.items()">
<div id="main_content">
<div id="status_block" py:if="value_of('tg_flash', None)"
py:content="XML(tg_flash)"></div>
<div id="details">
<div id="alertbox" py:if="value_of('tg_flash', None)">
<p py:content="XML(tg_flash)"></p></div>
<div py:replace="[item.text]+item[:]"></div>
</div>
@ -17,6 +18,7 @@
<a href="${tg.url('/user/new')}">Add Person</a><br/>
<a href="${tg.url('/user/list')}">Find People</a><br/>
</div> -->
</div>
</body>
</html>

View File

@ -6,11 +6,12 @@
<title>Find People</title>
</head>
<body>
<h1>Find People</h1>
<script type="text/javascript" charset="utf-8" src="${tg.url('/static/javascript/tablekit.js')}"></script>
<div id="search">
<form action="${tg.url('/user/list')}" method="get">
<input id="uid" type="text" name="uid" value="${uid}" />
<input type="submit" value="Find People"/>
<input class="searchbutton" type="submit" value="Find People"/>
</form>
<script type="text/javascript">
document.getElementById("uid").focus();
@ -18,7 +19,7 @@
</div>
<div py:if='(users != None) and (len(users) > 0)'>
<h2>${len(users)} results returned:</h2>
<table id="resultstable" class="sortable resizable">
<table id="resultstable" class="details sortable resizable">
<thead>
<tr>
<th>
@ -55,10 +56,11 @@
</tbody>
</table>
</div>
<div py:if='(users != None) and (len(users) == 0)'>
<h2>No results found for "${uid}"</h2>
<div id="alertbox" py:if='(users != None) and (len(users) == 0)'>
<p id="alertbox">No results found for "${uid}"</p>
</div>
<div py:if='users == None'>
<div class="instructions" py:if='users == None'>
<p>
Search automatically looks across multiple fields. If you want to find
Joe in Finance, try typing "joe finance" into the search box.

View File

@ -6,7 +6,7 @@
<title>Add Person</title>
</head>
<body>
<h2>Add Person</h2>
<h1>Add Person</h1>
${form.display(action=tg.url("/user/create"), value=user)}
</body>

View File

@ -2,14 +2,8 @@
class="simpleroster">
<form action="${action}" name="${name}" method="${method}" class="tableform"
onsubmit="preSubmit()">
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<td>
<input type="submit" class="submitbutton" name="submit" value="Add Person"/>
</td>
</tr>
</table>
<input type="submit" class="submitbutton" name="submit" value="Add Person"/>
<?python
from ipagui.helpers import ipahelper
@ -20,7 +14,7 @@ from ipagui.helpers import ipahelper
<script type="text/javascript" charset="utf-8"
src="${tg.url('/static/javascript/dynamicselect.js')}"></script>
<?python
<?python
searchurl = tg.url('/user/edit_search')
selectSearchurl = tg.url('/user/user_select_search')
?>
@ -44,7 +38,6 @@ from ipagui.helpers import ipahelper
info.name + " "));
}
}
function doSelectSearch(which_select) {
$(which_select + '_searchresults').update("Searching...");
new Ajax.Updater(which_select + '_searchresults',
@ -61,7 +54,7 @@ from ipagui.helpers import ipahelper
py:replace="field.display(value_for(field), **params_for(field))"
/>
<div class="formsection">Identity Details</div>
<h2 class="formsection">Identity Details</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -209,7 +202,7 @@ from ipagui.helpers import ipahelper
</tr>
</table>
<div class="formsection">Account Details</div>
<h2 class="formsection">Account Details</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -328,7 +321,7 @@ from ipagui.helpers import ipahelper
</tr>
</table>
<div class="formsection">Contact Details</div>
<h2 class="formsection">Contact Details</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -403,7 +396,7 @@ from ipagui.helpers import ipahelper
</tr>
</table>
<div class="formsection">Mailing Address</div>
<h2 class="formsection">Mailing Address</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -466,7 +459,7 @@ from ipagui.helpers import ipahelper
</tr>
</table>
<div class="formsection">Employee Information</div>
<h2 class="formsection">Employee Information</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -575,7 +568,7 @@ from ipagui.helpers import ipahelper
</tr>
</table>
<div class="formsection">Misc Information</div>
<h2 class="formsection">Misc Information</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -619,7 +612,8 @@ from ipagui.helpers import ipahelper
</div>
<div style="clear:both">
<div class="formsection">Add Groups</div>
<h2 class="formsection">Add Groups</h2>
<div class="floatlist">
<div class="floatheader">To Add:</div>
@ -631,7 +625,7 @@ from ipagui.helpers import ipahelper
<div id="search">
<input id="criteria" type="text" name="criteria"
onkeypress="return enterDoSearch(event);" />
<input type="button" value="Find"
<input class="searchbutton" type="button" value="Find"
onclick="return doSearch();"
/>
</div>
@ -640,14 +634,8 @@ from ipagui.helpers import ipahelper
</div>
</div>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<td>
<br />
<input type="submit" class="submitbutton" name="submit" value="Add Person"/>
</td>
</tr>
</table>
<hr />
<input type="submit" class="submitbutton" name="submit" value="Add Person"/>
</form>

View File

@ -9,9 +9,9 @@
<?python
edit_url = tg.url('/user/edit', uid=user.get('uid'))
?>
<h2>View Person</h2>
<h1>View Person</h1>
<input type="button"
<input class="submitbutton" type="button"
onclick="document.location.href='${edit_url}'"
value="Edit Person" />
@ -26,14 +26,14 @@ else:
days_suffix = ""
?>
<div py:if='pw_expires_soon' class="warning_message">
<div id="alertbox" py:if='pw_expires_soon' class="warning_message">
Password will expire in ${pw_expires_days} day${days_suffix}
</div>
<div py:if='pw_is_expired' class="warning_message">
<div id="alertbox" py:if='pw_is_expired' class="warning_message">
Password has expired
</div>
<div class="formsection">Identity Details</div>
<h2 class="formsection">Identity Details</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -73,7 +73,7 @@ else:
</tr>
</table>
<div class="formsection">Account Details</div>
<h2 class="formsection">Account Details</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -119,7 +119,7 @@ else:
</tr>
</table>
<div class="formsection">Contact Details</div>
<h2 class="formsection">Contact Details</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -160,7 +160,7 @@ else:
</tr>
</table>
<div class="formsection">Mailing Address</div>
<h2 class="formsection">Mailing Address</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -194,7 +194,7 @@ else:
</tr>
</table>
<div class="formsection">Employee Information</div>
<h2 class="formsection">Employee Information</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -240,7 +240,7 @@ else:
</tr>
</table>
<div class="formsection">Misc Information</div>
<h2 class="formsection">Misc Information</h2>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
@ -274,7 +274,7 @@ else:
</table>
</div>
<div class="formsection" py:if='len(user_reports) &gt; 0'>Direct Reports</div>
<h2 class="formsection" py:if='len(user_reports) &gt; 0'>Direct Reports</h2>
<ol py:if="len(user_reports) &gt; 0">
<li py:for="report in user_reports">
<a href="${tg.url('/user/show', uid=report.uid)}"
@ -282,16 +282,15 @@ else:
</li>
</ol>
<div class="formsection">Groups</div>
<h2 class="formsection">Groups</h2>
<div py:for="group in user_groups">
<a href="${tg.url('/group/show', cn=group.cn)}">${group.cn}</a>
</div>
<br/>
<input type="button"
<hr />
<input class="submitbutton" type="button"
onclick="document.location.href='${edit_url}'"
value="Edit Person" />
</body>
</html>

View File

@ -6,9 +6,9 @@
<title>Welcome</title>
</head>
<body>
<div id="main_content">
<div id="status_block" py:if="value_of('tg_flash', None)"
py:content="XML(tg_flash)"></div>
<div id="details">
<div id="alertbox" py:if="value_of('tg_flash', None)">
<p py:content="XML(tg_flash)"></p></div>
<h1>Welcome to Free IPA</h1>
<noscript>
@ -19,8 +19,7 @@
</noscript>
<p>
IPA is used to manage Identity, Policy, and Auditing for your
organization.
IPA is used to manage Identity, Policy, and Auditing for your organization.
</p>
<p>
To get started, you can use the search box in the top right to find