[Cluster-devel] conga/luci Makefile cluster/100wait cluster/cl ...
rmccabe at sourceware.org
rmccabe at sourceware.org
Fri Jun 30 17:00:13 UTC 2006
CVSROOT: /cvs/cluster
Module name: conga
Changes by: rmccabe at sourceware.org 2006-06-30 17:00:03
Modified files:
luci : Makefile
Added files:
luci/cluster : 100wait clu_portlet_fetcher clusterportlet.css
form-chooser form-macros index_html main_footer
main_logo main_pathbar main_personalbar
main_sections portlet_cluconfig
portlet_cluconfig_macro status_check systest
luci/storage : 100wait.gif black_bar_40.png
black_right_end_40.png blue_bar_40.png
blue_cap_40.png blue_right_end_40.png
cache_report clu_portlet_fetcher
clusterportlet.css form-chooser form-macros
icon_bd_LV.png icon_bd_LV_snapshot.png
icon_bd_crypto.png icon_bd_ide.png
icon_bd_multipath.png icon_bd_net.png
icon_bd_partition.png icon_bd_raid.png
icon_bd_scsi.png icon_mapper_PT.png
icon_mapper_VG.png icon_mapper_crypto.png
icon_mapper_multipath.png icon_mapper_raid.png
index_html main_footer main_logo main_pathbar
main_personalbar main_sections mappings_macros
mappings_provider portlet_cluconfig
portlet_cluconfig_macro red_bar_40.png
red_cap_40.png red_right_end_40.png
selection_1px_40.png selection_bar_40.png
selection_left_end_40.png
selection_right_end_40.png snapshot.gif
tree_bullet.gif tree_closed.gif tree_opened.gif
tree_transparent.gif validate_html
Log message:
check in the page template, image, and css files for storage and homebase that currently reside only in Zope's DB (Data.fs)
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/Makefile.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/100wait.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/clu_portlet_fetcher.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/clusterportlet.css.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-chooser.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/index_html.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/main_footer.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/main_logo.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/main_pathbar.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/main_personalbar.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/main_sections.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/portlet_cluconfig.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/portlet_cluconfig_macro.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/status_check.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/systest.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/100wait.gif.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/black_bar_40.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/black_right_end_40.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/blue_bar_40.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/blue_cap_40.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/blue_right_end_40.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/cache_report.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/clu_portlet_fetcher.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/clusterportlet.css.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/form-chooser.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/form-macros.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_LV.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_LV_snapshot.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_crypto.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_ide.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_multipath.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_net.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_partition.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_raid.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_scsi.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_mapper_PT.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_mapper_VG.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_mapper_crypto.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_mapper_multipath.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_mapper_raid.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/index_html.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/main_footer.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/main_logo.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/main_pathbar.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/main_personalbar.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/main_sections.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/mappings_macros.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/mappings_provider.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/portlet_cluconfig.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/portlet_cluconfig_macro.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/red_bar_40.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/red_cap_40.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/red_right_end_40.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/selection_1px_40.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/selection_bar_40.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/selection_left_end_40.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/selection_right_end_40.png.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/snapshot.gif.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/tree_bullet.gif.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/tree_closed.gif.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/tree_opened.gif.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/tree_transparent.gif.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/validate_html.diff?cvsroot=cluster&r1=NONE&r2=1.1
--- conga/luci/Makefile 2006/06/16 23:14:34 1.5
+++ conga/luci/Makefile 2006/06/30 17:00:02 1.6
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.5 2006/06/16 23:14:34 kupcevic Exp $
+# $Id: Makefile,v 1.6 2006/06/30 17:00:02 rmccabe Exp $
all: luci
@@ -60,7 +60,7 @@
PLONEINSTANCE=luci
DBFILE=Data.fs
ZOPEFTP=localhost:8021
-ZOPEHTTP=http://localhost:8080/
+ZOPEHTTP=http://localhost:25639/
ZOPEDIRS=cluster storage homebase
all_old: tar
@@ -72,7 +72,7 @@
import_pts:
@pwd=`pwd` ; cd $(PT_DIR) && \
- ( for i in $(ZOPEDIRS) ; do wget -q -r -nH --cut-dirs=1 "ftp://$(ZOPEUSER):$(ZOPEPASS)@$(ZOPEFTP)/$(PLONEINSTANCE)/$$i/" ; done) ; cd $$pwd
+ ( for i in $(ZOPEDIRS) ; do wget -r -nH --cut-dirs=1 "ftp://$(ZOPEUSER):$(ZOPEPASS)@$(ZOPEFTP)/$(PLONEINSTANCE)/$$i/*" ; done) ; cd $$pwd
pack:
@./make_tools/pack.py $(ZOPEINSTANCE)/var/Data.fs
/cvs/cluster/conga/luci/cluster/100wait,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/cluster/100wait and - differ
co: output error: Broken pipe
co aborted
/cvs/cluster/conga/luci/cluster/clu_portlet_fetcher,v --> standard output
revision 1.1
--- conga/luci/cluster/clu_portlet_fetcher
+++ - 2006-06-30 17:00:05.263304000 +0000
@@ -0,0 +1,42 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+ i18n:domain="plone">
+
+<body>
+
+<metal:leftcolumn define-macro="left_column">
+<!-- unchecked_clusystems are all clusters...the check_clusters call filters list through user permissions -->
+<span tal:define="global unchecked_clusystems root/luci/systems/cluster/objectItems"/>
+<span tal:define="global clusystems python:here.check_clusters(request,unchecked_clusystems)"/>
+<div tal:omit-tag="" metal:use-macro="here/portlet_cluconfig/macros/cluchooseportlet" />
+<span tal:omit-tag="" tal:define="global hasclustername request/clustername |nothing"/>
+<span tal:omit-tag="" tal:condition="hasclustername">
+<div tal:omit-tag="" metal:use-macro="here/portlet_cluconfig/macros/cluconfigportlet" />
+</span>
+</metal:leftcolumn>
+
+<!--
+
+<metal:rightcolumn define-macro="right_column"
+ tal:define="Iterator python:modules['Products.CMFPlone'].IndexIterator;
+ tabindex python:Iterator(pos=20000);"
+ tal:condition="sr">
+
+ <metal:block tal:repeat="slot sr">
+ <tal:dontcrash tal:on-error="python:context.plone_log('Error %s on %s while rendering portlet %s'%(error.type, error.value, slot[0]))"
+ tal:define="pathexpr python:slot[0];
+ usemacro python:slot[1];">
+
+ <tal:block tal:condition="usemacro">
+ <metal:block metal:use-macro="python:path(pathexpr)" />
+ </tal:block>
+
+ <span tal:condition="not: usemacro"
+ tal:replace="structure python:path(pathexpr)" />
+
+ </tal:dontcrash>
+ </metal:block>
+</metal:rightcolumn>
+-->
+
+</body>
+</html>
/cvs/cluster/conga/luci/cluster/clusterportlet.css,v --> standard output
revision 1.1
--- conga/luci/cluster/clusterportlet.css
+++ - 2006-06-30 17:00:05.428827000 +0000
@@ -0,0 +1,238 @@
+dl.portlet {
+ margin: 1px 0 1em 0;
+ border-bottom: 1px solid #8cacbb;
+}
+
+dl.portlet a {
+ text-decoration: none;
+}
+#portal-columns {
+ width: 100% !important;
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+#portal-column-one {
+ vertical-align: top;
+ width: 16em;
+}
+
+#portal-column-content {
+ vertical-align: top;
+ margin: 0;
+ padding: 0;
+}
+
+#portal-column-two {
+ vertical-align: top;
+ width: 16em;
+}
+
+/* Padding for the columns */
+
+#portal-column-one .visualPadding {
+ padding: 2em 0em 1em 2em;
+}
+
+#portal-column-two .visualPadding {
+ padding: 2em 2em 1em 0em;
+}
+
+/* XXX: The two below rules should really be in the rule above, but that makes the items grow/shrink on :hover (navtree) - need to investigate how to make it not do that. ~limi, Dec 2005 */
+dd.portletItem a,
+dd.portletFooter a {
+ border-bottom: none;
+}
+dd.portletItem a:visited,
+dd.portletFooter a:visited {
+ color: #436976;
+}
+
+.portletHeader {
+ background-color: #dee7ec;
+ border: 1px solid #8cacbb;
+ padding: 0em 1em;
+ text-transform: lowercase;
+ font-weight: normal;
+ line-height: 1.6em;
+}
+
+.portletHeader a {
+ color: Black;
+}
+
+.portletItem {
+ margin: 0;
+ padding: 1em;
+ border-left: 1px solid #8cacbb;
+ border-right: 1px solid #8cacbb;
+}
+.portletItem a {
+ display: block;
+}
+
+.portletItemDetails {
+ text-align: right;
+ display: block;
+ color: Black;
+}
+
+dd.portletFooter {
+ background-color: #eef3f5;
+ margin: 0;
+ padding: 0.25em 1em;
+ border: 1px solid #8cacbb;
+ border-style: dotted solid none solid;
+ text-align: right;
+}
+
+
+/* Elements that enable layout with rounded corners */
+
+.portletTopLeft {}
+.portletTopRight {}
+.portletBottomLeft {}
+.portletBottomRight {}
+.portletCluConfigTree {
+ margin: 0 0 0 0.75em;
+ padding: 0;
+ list-style: none;
+ list-style-image: none;
+ line-height: 1em;
+}
+
+
+
+.cluConfigTree {
+ list-style: none;
+ list-style-image: none;
+ margin-top: 1px;
+}
+
+.cluConfig li {
+ margin-bottom: 1px;
+}
+
+.cluConfigTreeItem {
+ display: block;
+ padding: 0;
+ margin: 0;
+}
+.cluConfigTreeItem a,
+dd.portletItem .cluConfigTreeItem a {
+ border: 1px solid White;
+ display: block;
+ text-decoration: none;
+ padding-top: 0.2em;
+ padding-bottom: 0.25em;
+}
+
+.cluConfigTreeItem a:hover,
+dd.portletItem .cluConfigTreeItem a:hover {
+ background-color: #dee7ec;
+ color: #436976;
+ border: 1px solid #8cacbb;
+}
+
+.cluConfigTreeCurrentItem {
+ background-color: #dee7ec;
+ color: #436976;
+ border: 1px solid #8cacbb !important;
+}
+li.cluConfigTreeCurrentItem {
+ display: block;
+ padding: 0 0 0 1px;
+ margin: 0 0 2px -1px;
+}
+li.cluConfigTreeCurrentItem a,
+li.cluConfigTreeCurrentItem a:hover {
+ display: block;
+ border: 1px solid #dee7ec;
+ min-height: 1.6em;
+ line-height: 1.6em;
+ height: auto;
+}
+
+/* Another workaround for broken Internet Explorer */
+
+* html li.cluConfigTreeCurrentItem a,
+* html li.cluConfigTreeCurrentItem a:hover {
+ height: 1.6em;
+}
+.type-nodecfg, .type-nodes, .type-node, .type-nodelist,
+.type-nodegrid, .type-nodeadd {
+display: block;
+}
+
+.cluConfigTreeLevel0 { margin: 0; }
+.cluConfigTreeLevel1 { margin-left: 1em;}
+.cluConfigTreeLevel2 { margin-left: 0.75em; }
+.cluConfigTreeLevel3 { margin-left: 0.75em; }
+.cluConfigTreeLevel4 { margin-left: 0.75em; }
+.cluConfigTreeLevel5 { margin-left: 0.75em; }
+
+#main-portal-logo {
+ background: url(./clusterbanner.png) no-repeat;
+ border: 0;
+ margin: 0.75em 0em 0.75em 1.5em;
+ padding: 0;
+}
+
+#main-portal-logo a {
+ display: block;
+ text-decoration: none;
+ overflow: hidden;
+ border: 0;
+ margin: 0;
+ padding: 0;
+ padding-top: 87px;
+ height: 0px !important;
+ height /**/: 57px;
+ width: 252px;
+ cursor: pointer;
+}
+
+#portal-globalnav li a {
+ /* The normal, unselected tabs. They are all links */
+ background-color: transparent;
+ border-color: #8cacabb;
+ border-width: 1px;
+ border-style: solid solid none solid;
+ color: #436976;
+ height: auto;
+ margin-right: 0.5em;
+ padding: 0em 1.25em;
+ text-decoration: none;
+ text-transform: lowercase;
+}
+
+#portal-globalnav li.selected a {
+ /* The selected tab. There's only one of this */
+ background-color: #dee7ec;
+ border: 1px solid #8cacbb;
+ border-bottom: #dee7ec 1px solid;
+ color: #436976;
+}
+#portal-globalnav li a:hover {
+ background-color: #dee7ec;
+ border-color: #8cacbb;
+ border-bottom-color: #dee7ec;
+ color: #436976;
+}
+#portal-personaltools {
+ /* Bar with personalized menu (user preferences, favorites etc) */
+ background-color: #dee7ec;
+ border-top-color: #8cacbb;
+ border-top-style: solid;
+ border-top-width: 1px;
+ border-bottom-color: #8cacbb;
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+ line-height: 1.6em;
+ color: Black;
+ padding: 0em 3em 0em 3em;
+ margin: 0;
+ text-align: right;
+ text-transform: lowercase;
+ list-style: none;
+}
/cvs/cluster/conga/luci/cluster/form-chooser,v --> standard output
revision 1.1
--- conga/luci/cluster/form-chooser
+++ - 2006-06-30 17:00:05.579000000 +0000
@@ -0,0 +1,137 @@
+<html>
+ <head>
+ <title tal:content="template/title">The title</title>
+ </head>
+ <body>
+
+ <metal:choose-form metal:define-macro="main-form">
+ <span tal:define="global waiting request/specialpagetype |nothing"/>
+ <span tal:condition="busywaiting">
+ <div metal:use-macro="here/form-macros/macros/busywaitpage"/>
+ </span>
+ <span tal:condition="not: busywaiting">
+ <span tal:omit-tag="" tal:define="global ptype request/pagetype |nothing"/>
+ <span tal:omit-tag="" tal:condition="python: not ptype">
+ <div metal:use-macro="here/form-macros/macros/entry-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '0'">
+ <div metal:use-macro="here/form-macros/macros/entry-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '4'">
+ <div metal:use-macro="here/form-macros/macros/clusters-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '5'">
+ <div metal:use-macro="here/form-macros/macros/cluster-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '6'">
+ <div metal:use-macro="here/form-macros/macros/clusteradd-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '7'">
+ <div metal:use-macro="here/form-macros/macros/clusters-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '9'">
+ <div metal:use-macro="here/form-macros/macros/node-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '10'">
+ <div metal:use-macro="here/form-macros/macros/nodes-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '11'">
+ <div metal:use-macro="here/form-macros/macros/nodelist-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '12'">
+ <div metal:use-macro="here/form-macros/macros/nodegrid-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '14'">
+ <div metal:use-macro="here/form-macros/macros/nodes-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '15'">
+ <div metal:use-macro="here/form-macros/macros/nodeadd-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '16'">
+ <div metal:use-macro="here/form-macros/macros/nodeprocess-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '20'">
+ <div metal:use-macro="here/form-macros/macros/servicelist-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '21'">
+ <div metal:use-macro="here/form-macros/macros/serviceadd-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '22'">
+ <div metal:use-macro="here/form-macros/macros/servicelist-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '23'">
+ <div metal:use-macro="here/form-macros/macros/servicelist-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '24'">
+ <div metal:use-macro="here/form-macros/macros/serviceconfig-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '25'">
+ <div metal:use-macro="here/form-macros/macros/serviceprocess-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '26'">
+ <div metal:use-macro="here/form-macros/macros/servicestart"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '27'">
+ <div metal:use-macro="here/form-macros/macros/servicestop"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '28'">
+ <div metal:use-macro="here/form-macros/macros/servicerestart"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '30'">
+ <div metal:use-macro="here/form-macros/macros/resources-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '31'">
+ <div metal:use-macro="here/form-macros/macros/resourceadd-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '32'">
+ <div metal:use-macro="here/form-macros/macros/resourcelist-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '33'">
+ <div metal:use-macro="here/form-macros/macros/resourceconfig-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '34'">
+ <div metal:use-macro="here/form-macros/macros/resource-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '35'">
+ <div metal:use-macro="here/form-macros/macros/resourceprocess-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '40'">
+ <div metal:use-macro="here/form-macros/macros/fdoms-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '41'">
+ <div metal:use-macro="here/form-macros/macros/fdomadd-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '42'">
+ <div metal:use-macro="here/form-macros/macros/fdomlist-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '43'">
+ <div metal:use-macro="here/form-macros/macros/fdomconfig-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '44'">
+ <div metal:use-macro="here/form-macros/macros/fdom-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '45'">
+ <div metal:use-macro="here/form-macros/macros/fdomprocess-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '50'">
+ <div metal:use-macro="here/form-macros/macros/fencedevs-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '51'">
+ <div metal:use-macro="here/form-macros/macros/fencedevadd-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '52'">
+ <div metal:use-macro="here/form-macros/macros/fencedevlist-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '45'">
+ <div metal:use-macro="here/form-macros/macros/fencedevconfig-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '54'">
+ <div metal:use-macro="here/form-macros/macros/fencedev-form"/>
+ </span>
+ <span tal:omit-tag="" tal:condition="python: ptype == '55'">
+ <div metal:use-macro="here/form-macros/macros/fencedevprocess-form"/>
+ </span>
+ </span>
+ </metal:choose-form>
+ </body>
+</html>
/cvs/cluster/conga/luci/cluster/form-macros,v --> standard output
revision 1.1
--- conga/luci/cluster/form-macros
+++ - 2006-06-30 17:00:05.776536000 +0000
@@ -0,0 +1,317 @@
+<html>
+ <head>
+ <title tal:content="template/title">The title</title>
+ </head>
+ <body>
+
+ <div metal:define-macro="entry-form">
+ <h2>Entry Form</h2>
+ </div>
+ <div metal:define-macro="busywaitpage">
+ <table>
+ <tr>
+ <td>
+ <h2>Please be patient - this cluster's configuration is being modified.</h2>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <img src="100wait"/>
+ </td>
+ </tr>
+ </table>
+
+ </div>
+ <div metal:define-macro="clusters-form">
+ <table>
+ <tbody>
+ <span tal:repeat="clu clusystems">
+ <span tal:define="ragent python:here.getRicciAgent(clu)">
+ <span tal:define="global stat python:here.getClusterStatus(ragent)"/>
+ <span tal:define="global cstatus python:here.getClustersInfo(stat,request)"/>
+ </span>
+ <tr width="100%" STYLE="border-bottom: blue 3px groove;">
+ <td width="100%" STYLE="border-bottom: #8cacbb 3px solid;">
+ <table width="800px">
+ <tr STYLE="padding:10px;margin:10px;border-width:0px;"><td STYLE="padding:10px;margin:10px;border-width:0px;"><h1 STYLE="border:0px;">Cluster Name: <span tal:content="cstatus/clustername"/></h1></td>
+ <td STYLE="margin:10px"><form METHOD=POST onSubmit="return dropdown(this.gourl)">
+ <SELECT NAME="gourl">
+ <span tal:condition="python:cstatus['running'] == 'true'">
+ <OPTION VALUE="">This cluster is running...</OPTION>
+ <OPTION VALUE=""><font color="red">Stop this cluster</font></OPTION>
+ </span>
+ <span tal:condition="python:cstatus['running'] == 'false'">
+ <OPTION VALUE="">This cluster is stopped...</OPTION>
+ <OPTION VALUE=""><font color="green">Start this cluster</font></OPTION>
+ </span>
+ </SELECT>
+ <INPUT TYPE=SUBMIT VALUE="Go"/>
+ </FORM>
+ </td>
+ <td STYLE="width:30%; text-align:right;"><h1 STYLE="border:0px;">Pretty Name: <span tal:content="cstatus/clusteralias"/></h1></td>
+ </tr>
+ <tr STYLE="padding:10px;margin:10px"><td STYLE="padding:10px;margin:10px"><h2 STYLE="border:0px;">Status: <i><span tal:content="cstatus/status"/></i></h2></td>
+ <td STYLE="padding:10px;margin:10px"><h2 STYLE="border:0px;">Total Cluster Votes: <i><span tal:content="cstatus/votes"/></i></h2></td>
+ <td STYLE="padding:10px;margin:10px"><h2 STYLE="border:0px;">Minimum Required Quorum: <i><span tal:content="cstatus/minquorum"/></i></h2></td>
+ </tr>
+ <tr STYLE="padding:10px;margin:10px"><td STYLE="padding:10px;margin:10px"><h2 STYLE="border:0px;">Nodes:</h2> <ul><span tal:repeat="nd cstatus/currentnodes"><li><a href="" tal:attributes="href nd/configurl"><span tal:content="nd/nodename"/></a></li></span></ul></td>
+ <td STYLE="width:30%;text-align:right"><h3>Currently Hosting: </h3><ul><span tal:repeat="svc cstatus/currentservices"><li><a href="" tal:attributes="href svc/svcurl"><span tal:content="svc/name"/></a></li></span></ul></td>
+ </tr>
+
+ </span>
+ </tbody>
+ </table>
+ </div>
+ <div metal:define-macro="cluster-form">
+ <h2>Cluster Form</h2>
+ </div>
+ <div metal:define-macro="clusteradd-form">
+ <h2>Cluster Add Form</h2>
+ </div>
+ <div metal:define-macro="clusterconfig-form">
+ <h2>Cluster Configuration Form</h2>
+ </div>
+ <div metal:define-macro="node-form">
+ <h2>Node Form</h2>
+ </div>
+ <div metal:define-macro="nodes-form">
+ <table>
+ <span tal:define="global ricci_agent python:here.getRicciAgentForCluster(request)"/>
+ <span tal:define="global status python:here.getClusterStatus(ricci_agent)"/>
+ <span tal:define="global nds python:here.getNodesInfo(modelb,status,request)"/>
+ <span tal:repeat="nd nds">
+ <tr width="100%" STYLE="border-bottom: blue 3px groove;">
+ <td width="100%" STYLE="border-bottom: #8cacbb 3px solid;">
+ <table width="800px">
+ <tr STYLE="padding:10px;margin:10px;border-width:0px;"><td STYLE="padding:10px;margin:10px;border-width:0px;"><h1 STYLE="border:0px;">Node Name: <span tal:content="nd/nodename"/></h1></td>
+ <td STYLE="margin:10px"><form METHOD=POST onSubmit="return dropdown(this.gourl)">
+ <SELECT NAME="gourl">
+ <OPTION VALUE="">Choose a Task...</OPTION>
+ <OPTION VALUE="" tal:attributes="VALUE nd/configurl">Configure</OPTION>
+ <OPTION VALUE="">Have node leave cluster</OPTION>
+ <OPTION VALUE="">Stop all cluster services</OPTION>
+ <OPTION VALUE="">----------</OPTION>
+ <OPTION VALUE="">Fence this node</OPTION>
+ <OPTION VALUE="">Reboot this node</OPTION>
+ <OPTION VALUE="">----------</OPTION>
+ <OPTION VALUE="">Delete</OPTION>
+ </SELECT>
+ <INPUT TYPE=SUBMIT VALUE="Go"/>
+ </FORM>
+ </td>
+ <td STYLE="width:30%; text-align:right;"><h3><a href="" tal:attributes="href nd/fenceurl">Manage Fencing for this Node</a></h3></td>
+ </tr>
+ <tr STYLE="padding:10px;margin:10px"><td STYLE="padding:10px;margin:10px"><h2 STYLE="border:0px;">Status: <i><span tal:content="nd/status"/></i></h2></td></tr>
+ <tr STYLE="padding:10px;margin:10px"><td STYLE="padding:10px;margin:10px"><h2 STYLE="border:0px;">Currently Hosting:</h2> <ul><span tal:repeat="svc nd/currentservices"><li><a href="" tal:attributes="href svc/svcurl"><span tal:content="svc/servicename"/></a></li></span></ul></td>
+ <td STYLE="width:30%;text-align:right"><h3>Failover Domain Membership: </h3><ul><span tal:repeat="fdom nd/fdoms"><li><a href="" tal:attributes="href fdom/fdomurl"><span tal:content="fdom/name"/></a></li></span></ul></td>
+ </tr>
+ </table>
+ </tr>
+
+ </span>
+ </table>
+ </div>
+ <div metal:define-macro="nodelist-form">
+ <h2>Node List Form</h2>
+ </div>
+ <div metal:define-macro="nodegrid-form">
+ <h2>Node Grid Form</h2>
+ </div>
+ <div metal:define-macro="nodeconfig-form">
+ <h2>Node Configuration Form</h2>
+ </div>
+ <div metal:define-macro="nodeadd-form">
+ <h2>Node Add Form</h2>
+ </div>
+ <div metal:define-macro="nodeprocess-form">
+ <h2>Node Process Form</h2>
+ </div>
+ <div metal:define-macro="services-form">
+ <h2>Services Form</h2>
+ </div>
+ <div metal:define-macro="servicelist-form">
+ <table>
+ <span tal:define="global ricci_agent python:here.getRicciAgentForCluster(request)"/>
+ <span tal:define="global svcstatus python:here.getClusterStatus(ricci_agent)"/>
+ <span tal:define="global svcinf python:here.getServicesInfo(svcstatus,modelb,request)"/>
+ <span tal:define="global svcs svcinf/services"/>
+ <span tal:repeat="svc svcs">
+ <tr width="100%" STYLE="border-bottom: blue 3px groove;">
+ <td width="100%" STYLE="border-bottom: #8cacbb 3px solid;">
+ <table width="800px">
+ <tr STYLE="padding:10px;margin:10px;border-width:0px;"><td STYLE="padding:10px;margin:10px;border-width:0px;"><h1 STYLE="border:0px;">Service Name: <span tal:content="svc/name"/></h1></td>
+ <td STYLE="margin:10px"><form METHOD=POST onSubmit="return dropdown(this.gourl)">
+ <SELECT NAME="gourl">
+ <OPTION VALUE="">Choose a Task...</OPTION>
+ <OPTION VALUE="" tal:attributes="VALUE svc/cfgurl">Configure</OPTION>
+ <OPTION VALUE="">----------</OPTION>
+ <OPTION VALUE="">Delete</OPTION>
+ </SELECT>
+ <INPUT TYPE=SUBMIT VALUE="Go"/>
+ </FORM>
+ </td>
+ <span tal:define="autostart svc/autostart |nothing">
+ <span tal:condition="autostart">
+ <td STYLE="width:30%; text-align:right;"><h2 STYLE="border:0px;">Autostart is enabled for this service</h2></td>
+ </span>
+ <span tal:condition="not: autostart">
+ <td STYLE="width:30%; text-align:right;"><h2 STYLE="border:0px;">Autostart is enabled for this service</h2></td>
+ </span>
+ </span>
+ </tr>
+ <span tal:define="running svc/running |nothing">
+ <span tal:condition="running">
+ <tr STYLE="padding:10px;margin:10px">
+ <td STYLE="padding:10px;margin:10px"><h2 STYLE="border:0px;">Status: <i><font color="green">Running on <span tal:content="svc/nodename"/></font></i></h2></td>
+ <td STYLE="width:30%;text-align:right"><h2 STYLE="border:0px;">Failover Domain Association: <span tal:content="svc/faildom"/></h2></td>
+ </tr>
+ </span>
+ <span tal:condition="not: running">
+ <tr STYLE="padding:10px;margin:10px">
+ <td STYLE="padding:10px;margin:10px"><h2 STYLE="border:0px;">Status: <i><font color="red">This service is stopped</font></i></h2></td>
+
+ <td STYLE="width:30%;text-align:center"><h2 STYLE="border:0px;">Failover Domain Association: <span tal:content="svc/faildom"/></h2></td>
+ </tr>
+ </span>
+ </span>
+
+ </table>
+ </tr>
+
+ </span>
+ </table>
+
+ </div>
+ <div metal:define-macro="serviceadd-form">
+ <h2>Service Add Form</h2>
+ </div>
+ <div metal:define-macro="servicestart">
+ <span tal:define="global ricci_agent python:here.getRicciAgentForCluster(request)"/>
+ <span tal:define="result python:here.serviceStart(ricci_agent, request)"/>
+ <!-- <span metal:use-macro="here/form-macros/macros/serviceconfig-form"/> -->
+ </div>
+ <div metal:define-macro="servicerestart">
+ <span tal:define="global ricci_agent python:here.getRicciAgentForCluster(request)"/>
+ <span tal:define="result python:here.serviceRestart(ricci_agent, request)"/>
+ <!-- <span metal:use-macro="here/form-macros/macros/serviceconfig-form"/> -->
+ </div>
+ <div metal:define-macro="servicestop">
+ <span tal:define="global ricci_agent python:here.getRicciAgentForCluster(request)"/>
+ <span tal:define="result python:here.serviceStop(ricci_agent,request)"/>
+ <!-- <span metal:use-macro="here/form-macros/macros/serviceconfig-form"/> -->
+ </div>
+ <div metal:define-macro="serviceconfig-form">
+ <span tal:define="global ricci_agent python:here.getRicciAgentForCluster(request)"/>
+ <span tal:define="global sstat python:here.getClusterStatus(ricci_agent)"/>
+ <span tal:define="global sinfo python:here.getServiceInfo(sstat, modelb,request)">
+ <span tal:define="global running sinfo/running | nothing"/>
+ <table width="800px">
+ <tr STYLE="padding:10px;margin:10px;border-width:0px;">
+ <td STYLE="padding:10px;margin:10px;border-width:0px;"><h1 STYLE="border:0px;">Service Name: <span tal:content="sinfo/name"/></h1></td>
+ <td STYLE="margin:10px"><form METHOD=POST onSubmit="return dropdown(this.gourl)">
+ <SELECT NAME="gourl">
+ <span tal:define="global innermap sinfo/innermap"/>
+ <span tal:condition="running">
+ <OPTION VALUE=""><span tal:content="innermap/current"/></OPTION>
+ <OPTION VALUE="" tal:attributes="VALUE innermap/restarturl">Restart this service</OPTION>
+ <OPTION VALUE="">----------</OPTION>
+ <OPTION VALUE="" tal:attributes="VALUE innermap/disableurl">Disable this service</OPTION>
+ <OPTION VALUE="">----------</OPTION>
+ <span tal:repeat="starturl innermap/links">
+ <OPTION VALUE="" tal:attributes="VALUE starturl/url">Start this service on <span tal:content="starturl/nodename"/></OPTION>
+ </span>
+ <OPTION VALUE="">----------</OPTION>
+ <OPTION VALUE="">Delete this service</OPTION>
+ </span>
+ <span tal:condition="not: running">
+ <OPTION VALUE=""><span tal:content="innermap/current"/></OPTION>
+ <OPTION VALUE="">----------</OPTION>
+ <OPTION VALUE="" tal:attributes="VALUE innermap/enableurl">Enable this service</OPTION>
+ <OPTION VALUE="">----------</OPTION>
+ <span tal:define="starturls innermap/links">
+ <span tal:repeat="starturl starturls">
+ <OPTION VALUE="" tal:attributes="VALUE starturl/url">Start this service on <span tal:content="starturl/nodename"/></OPTION>
+ </span>
+ </span>
+ <OPTION VALUE="">----------</OPTION>
+ <OPTION VALUE="">Delete This service</OPTION>
+ </span>
+ </SELECT>
+ <INPUT TYPE=SUBMIT VALUE="Go"/>
+ </FORM>
+ </td>
+ </tr>
+
+ <tr STYLE="padding:10px;margin:10px;border-width:0px;">
+ <span tal:condition="running">
+ <td STYLE="width:30%;text-align:center"><h1 STYLE="border:0px;">Service Status: <font color="green"><i>Running</i></font></h1></td>
+ </span>
+ <span tal:condition="not: running">
+ <td STYLE="width:30%;text-align:center"><h1 STYLE="border:0px;">Service Status: <font color="red"><i>Stopped</i></font></h1></td>
+ </span>
+ </tr>
+ </table>
+ </span>
+ </div>
+ <div metal:define-macro="service-form">
+ <h2>Service Form</h2>
+ </div>
+ <div metal:define-macro="serviceprocess-form">
+ <h2>Service Process Form</h2>
+ </div>
+ <div metal:define-macro="resources-form">
+ <h2>Resources Form</h2>
+ </div>
+ <div metal:define-macro="resourcelist-form">
+ <h2>Resource List Form</h2>
+ </div>
+ <div metal:define-macro="resourceadd-form">
+ <h2>Resource Add Form</h2>
+ </div>
+ <div metal:define-macro="resourceconfig-form">
+ <h2>Resource Configuration Form</h2>
+ </div>
+ <div metal:define-macro="resource-form">
+ <h2>Resource Form</h2>
+ </div>
+ <div metal:define-macro="resourceprocess-form">
+ <h2>Resource Process Form</h2>
+ </div>
+ <div metal:define-macro="fdoms-form">
+ <h2>Failover Domains Form</h2>
+ </div>
+ <div metal:define-macro="fdomlist-form">
+ <h2>Failover Domains List Form</h2>
+ </div>
+ <div metal:define-macro="fdomadd-form">
+ <h2>Failover Domain Add Form</h2>
+ </div>
+ <div metal:define-macro="fdomconfig-form">
+ <h2>Failover Domain Configuration Form</h2>
+ </div>
+ <div metal:define-macro="fdom-form">
+ <h2>Failover Domain Form</h2>
+ </div>
+ <div metal:define-macro="fdomprocess-form">
+ <h2>Failover Domain Process Form</h2>
+ </div>
+ <div metal:define-macro="fencedevs-form">
+ <h2>Fence Devices Form</h2>
+ </div>
+ <div metal:define-macro="fencedevlist-form">
+ <h2>Fence Device List Form</h2>
+ </div>
+ <div metal:define-macro="fencedevadd-form">
+ <h2>Fence Device Add Form</h2>
+ </div>
+ <div metal:define-macro="fencedevconfig-form">
+ <h2>Fence Device Configuration Form</h2>
+ </div>
+ <div metal:define-macro="fencedev-form">
+ <h2>Fence Device Form</h2>
+ </div>
+ <div metal:define-macro="fencedevprocess-form">
+ <h2>Fence Device Process Form</h2>
+ </div>
+ </body>
+</html>
/cvs/cluster/conga/luci/cluster/index_html,v --> standard output
revision 1.1
--- conga/luci/cluster/index_html
+++ - 2006-06-30 17:00:05.895575000 +0000
@@ -0,0 +1,242 @@
+<metal:page define-macro="master"><metal:doctype define-slot="doctype"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></metal:doctype>
+<metal:block define-slot="top_slot" />
+<metal:block use-macro="here/global_defines/macros/defines" />
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xml:lang="en"
+ lang="en"
+ tal:attributes="lang language;
+ xml:lang language">
+
+ <head metal:use-macro="here/header/macros/html_header">
+
+
+
+
+
+ <metal:fillbase fill-slot="base">
+ <metal:baseslot define-slot="base">
+ <base href="" tal:attributes="href here/renderBase" />
+ </metal:baseslot>
+ </metal:fillbase>
+
+ <metal:headslot fill-slot="head_slot"
+ tal:define="lang language;
+ charset site_properties/default_charset|string:utf-8">
+
+ <metal:cache use-macro="here/global_cache_settings/macros/cacheheaders">
+ Get the global cache headers located in global_cache_settings.
+ </metal:cache>
+
+ <metal:headslot define-slot="head_slot" />
+ <div tal:define="global hascluster request/clustername |nothing; global busywaiting python:None;"/>
+ <span tal:condition="not: hascluster">
+ <meta googaa="ooo"/>
+ </span>
+ <span tal:condition="hascluster">
+ <span tal:define="global isBusy python:here.isClusterBusy(request)"/>
+ <span tal:define="global firsttime request/busyfirst |nothing"/>
+ <span tal:condition="firsttime">
+ <span tal:define="global busywaiting python:True"/>
+ </span>
+ <span tal:define="global busy isBusy/busy |nothing"/>
+ <span tal:condition="busy">
+ <span tal:define="global busywaiting python:True"/>
+ <meta http-equiv="refresh" content="" tal:attributes="content isBusy/refreshurl"/>
+ </span>
+ </span>
+ <tal:comment replace="nothing"> A slot where you can insert elements in the header from a template </tal:comment>
+ </metal:headslot>
+
+
+
+ <metal:cssslot fill-slot="css_slot">
+ <tal:comment replace="nothing"> A slot where you can insert CSS in the header from a template </tal:comment>
+
+ <style type="text/css"><!-- @import url(./clusterportlet.css); --></style>
+ <metal:cssslot define-slot="css_slot" />
+ </metal:cssslot>
+
+ <metal:javascriptslot fill-slot="javascript_head_slot">
+ <tal:comment replace="nothing"> A slot where you can insert javascript in the header from a template </tal:comment>
+ <SCRIPT TYPE="text/javascript">
+ <!--
+ function dropdown(mySel)
+ {
+ var myWin, myVal;
+ myVal = mySel.options[mySel.selectedIndex].value;
+ if(myVal)
+ {
+ if(mySel.form.target)myWin = parent[mySel.form.target];
+ else myWin = window;
+ if (! myWin) return true;
+ myWin.location = myVal;
+ }
+ return false;
+ }
+ //-->
+ </SCRIPT>
+ <metal:javascriptslot define-slot="javascript_head_slot" />
+ </metal:javascriptslot>
+
+ </head>
+
+ <body tal:attributes="class here/getSectionFromURL;
+ dir python:test(isRTL, 'rtl', 'ltr')">
+ <div id="visual-portal-wrapper">
+
+ <div id="portal-top" i18n:domain="plone">
+
+ <div id="portal-header">
+ <a class="hiddenStructure"
+ accesskey="2"
+ tal:attributes="href string:${request/ACTUAL_URL}#documentContent"
+ i18n:translate="label_skiptocontent">Skip to content.</a>
+
+ <a class="hiddenStructure"
+ accesskey="6"
+ tal:attributes="href string:${request/ACTUAL_URL}#portlet-navigation-tree"
+ i18n:translate="label_skiptonavigation">Skip to navigation</a>
+<!--
+ <div metal:use-macro="here/global_siteactions/macros/site_actions">
+ Site-wide actions (Contact, Sitemap, Help, Style Switcher etc)
+ </div>
+-->
+<!--
+ <div metal:use-macro="here/global_searchbox/macros/quick_search">
+ The quicksearch box, normally placed at the top right
+ </div>
+-->
+ <a metal:use-macro="here/main_logo/macros/main_portal_logo">
+ The portal logo, linked to the portal root
+ </a>
+<!--
+ <div metal:use-macro="here/global_skinswitcher/macros/skin_tabs">
+ The skin switcher tabs. Based on which role you have, you
+ get a selection of skins that you can switch between.
+ </div>
+-->
+ <div metal:use-macro="here/main_sections/macros/portal_tabs">
+ The global sections tabs. (Welcome, News etc)
+ </div>
+ </div>
+
+ <div metal:use-macro="here/main_personalbar/macros/personal_bar">
+ The personal bar. (log in, logout etc...)
+ </div>
+<!--
+ <div metal:use-macro="here/main_pathbar/macros/path_bar">
+ The breadcrumb navigation ("you are here")
+ </div>
+ </div>
+-->
+ <div class="visualClear"><!-- --></div>
+
+ <tal:comment replace="nothing">
+ The wrapper table. It contains the three columns. There's a table-less
+ alternative in the plone_tableless skin layer that you can use if you
+ prefer layouts that don't use tables.
+ </tal:comment>
+ <!-- <div tal:define="global hascluster request/clustername |nothing"/> -->
+ <span tal:condition="hascluster">
+ <span tal:define="global ricci_agent python:here.getRicciAgentForCluster(request)"/>
+ <div tal:omit-tag="" tal:define="global modelb python:here.getmodelbuilder(ricci_agent)" />
+ </span>
+ <table id="portal-columns">
+ <tbody>
+ <tr>
+ <tal:comment replace="nothing"> Start of the left column </tal:comment>
+ <td id="portal-column-one"
+ metal:define-slot="column_one_slot"
+ tal:condition="sl">
+ <div class="visualPadding">
+ <metal:portlets define-slot="portlets_one_slot">
+ <metal:leftportlets use-macro="here/clu_portlet_fetcher/macros/left_column">
+ This instruction gets the portlets (boxes) for the left column.
+ </metal:leftportlets>
+ </metal:portlets>
+
+ </div>
+ </td>
+ <tal:comment replace="nothing"> End of the left column </tal:comment>
+
+ <tal:comment replace="nothing"> Start of main content block </tal:comment>
+ <td id="portal-column-content">
+
+ <metal:block define-slot="content">
+ <div id="content"
+ metal:define-macro="content">
+
+
+
+ <div class="documentContent" id="region-content">
+
+ <a name="documentContent"></a>
+
+ <metal:bodytext metal:define-slot="main" tal:content="nothing">
+
+ Page body text
+ </metal:bodytext>
+ <span tal:omit-tag="" tal:define="global cname request/clustername |nothing"/>
+ <span tal:omit-tag="" tal:condition="not: cname">
+ <h1>Choose a cluster to administer</h1>
+ </span>
+ <span tal:omit-tag="" tal:condition="cname">
+ <h1 tal:content="string:${cname}"></h1>
+ </span>
+
+
+ </div>
+
+ </div>
+
+ </metal:block>
+ <metal:main-form-content use-macro="here/form-chooser/macros/main-form">
+ <h1>Future Site of Forms</h1>
+ </metal:main-form-content>
+ </td>
+ <tal:comment replace="nothing"> End of main content block </tal:comment>
+
+<!--
+ <tal:comment replace="nothing"> Start of right column </tal:comment>
+ <td id="portal-column-two"
+ metal:define-slot="column_two_slot"
+ tal:condition="sr">
+ <div class="visualPadding">
+ <metal:portlets define-slot="portlets_two_slot">
+ <metal:rightportlets use-macro="here/portlets_fetcher/macros/right_column">
+ This instruction gets the portlets (boxes) for the right column.
+ </metal:rightportlets>
+ </metal:portlets>
+
+ </div>
+ </td>
+ <tal:comment replace="nothing"> End of the right column </tal:comment>
+-->
+ </tr>
+ </tbody>
+ </table>
+ <tal:comment replace="nothing"> end column wrapper </tal:comment>
+
+ <div class="visualClear"><!-- --></div>
+
+
+ <hr class="netscape4" />
+
+ <metal:block i18n:domain="plone">
+
+ <metal:footer use-macro="here/main_footer/macros/portal_footer">
+ Footer
+ </metal:footer>
+
+ <metal:colophon use-macro="here/colophon/macros/colophon">
+ The colophon area - contains details about the production of
+ the site. Typically "powered by" buttons, standards, tools used.
+ </metal:colophon>
+ </metal:block>
+
+ </div>
+
+</body>
+</html>
+</metal:page>
/cvs/cluster/conga/luci/cluster/main_footer,v --> standard output
revision 1.1
--- conga/luci/cluster/main_footer
+++ - 2006-06-30 17:00:06.525419000 +0000
@@ -0,0 +1,37 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<body>
+<div id="portal-footer" metal:define-macro="portal_footer">
+
+<p>
+ <span i18n:translate="description_copyright" tal:omit-tag="">
+ The
+ <span>
+ <a href="http://redhat.com">Conga™ Cluster and Storage Management System</a>
+ </span>
+ is Copyright
+ <acronym title="Copyright" i18n:name="copyright" i18n:attributes="title title_copyright;">©</acronym>
+ 2000-<span i18n:name="current_year"
+ tal:define="now modules/DateTime/DateTime"
+ tal:content="now/year" />
+ by
+ <span>
+ <a href="http://redhat.com/Conga">Red Hat, Luci, Ricci, </a>
+ </span>
+ et al.
+ </span>
+</p>
+
+<p>
+
+
+ <span i18n:translate="description_license">
+ Distributed under the
+ <span i18n:name="license">
+ <a href="http://creativecommons.org/licenses/GPL/2.0/" i18n:translate="label_gnu_gpl_licence">GNU GPL license</a>
+ </span>.
+ </span>
+</p>
+
+</div>
+</body>
+</html>
\ No newline at end of file
/cvs/cluster/conga/luci/cluster/main_logo,v --> standard output
revision 1.1
--- conga/luci/cluster/main_logo
+++ - 2006-06-30 17:00:06.614260000 +0000
@@ -0,0 +1,15 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+ i18n:domain="plone">
+
+<body>
+
+<!-- THE PORTAL LOGO DEFINITION -->
+<h1 id="main-portal-logo" metal:define-macro="main_portal_logo">
+ <a href="/">
+ Luci
+ </a>
+</h1>
+
+
+</body>
+</html>
/cvs/cluster/conga/luci/cluster/main_pathbar,v --> standard output
revision 1.1
--- conga/luci/cluster/main_pathbar
+++ - 2006-06-30 17:00:06.782077000 +0000
@@ -0,0 +1,40 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+ i18n:domain="plone">
+
+<body>
+
+<!-- THE PATHBAR (breadcrumbs) DEFINITION -->
+<div metal:define-macro="path_bar"
+ id="portal-breadcrumbs"
+ tal:define="breadcrumbs python:putils.createBreadCrumbs(here);
+ portal_url portal_url|utool">
+
+ <span id="breadcrumbs-you-are-here" i18n:translate="you_are_here">You
+are here:</span>
+ <a i18n:translate="tabs_home" tal:attributes="href python:portal_url">Home</a>
+ <span tal:condition="breadcrumbs" class="breadcrumbSeparator">
+ <tal:ltr condition="not: isRTL">→</tal:ltr>
+ <tal:rtl condition="isRTL">←</tal:rtl>
+ </span>
+ <span tal:repeat="crumb breadcrumbs"
+ tal:attributes="dir python:test(isRTL, 'rtl', 'ltr')">
+ <tal:last tal:define="is_last repeat/crumb/end">
+ <a href="#"
+ tal:omit-tag="not: crumb/absolute_url"
+ tal:condition="python:not is_last"
+ tal:attributes="href crumb/absolute_url"
+ tal:content="crumb/Title">
+ crumb
+ </a>
+ <span class="breadcrumbSeparator" tal:condition="not: is_last">
+ <tal:ltr condition="not: isRTL">→</tal:ltr>
+ <tal:rtl condition="isRTL">←</tal:rtl>
+ </span>
+ <span tal:condition="is_last"
+ tal:content="crumb/Title">crumb</span>
+ </tal:last>
+ </span>
+
+</div>
+</body>
+</html>
/cvs/cluster/conga/luci/cluster/main_personalbar,v --> standard output
revision 1.1
--- conga/luci/cluster/main_personalbar
+++ - 2006-06-30 17:00:07.528406000 +0000
@@ -0,0 +1,44 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+ i18n:domain="plone">
+
+<body>
+
+<!-- THE PERSONAL BAR DEFINITION -->
+
+<div metal:define-macro="personal_bar"
+ tal:define="display_actions python:user_actions[:-1]+global_actions+user_actions[-1:];
+ getIconFor nocall:putils/getIconFor;"
+ tal:omit-tag="">
+
+<h5 class="hiddenStructure" i18n:translate="heading_personal_tools">Personal tools</h5>
+
+<ul id="portal-personaltools">
+ <li class="portalUser"
+ tal:condition="not: isAnon"><a
+ id="user-name"
+ tal:omit-tag="not: mtool/getHomeFolder"
+ tal:attributes="href string:${mtool/getHomeUrl}">
+ <span class="visualCaseSensitive"
+ tal:replace="user/getUserName">
+ John
+ </span>
+ </a></li>
+
+ <tal:actions tal:repeat="action python:here.getOrderedUserActions(keyed_actions=keyed_actions)">
+ <li tal:define="icon python:getIconFor(action['category'], action['id'], None);
+ class_name string:actionicon-${action/category}-${action/id};
+ class_name python:test(icon, class_name, nothing);"
+ tal:attributes="class class_name">
+ <a href=""
+ tal:attributes="href action/url;
+ class python:test(icon, 'visualIconPadding', nothing);">
+ <tal:actionname i18n:translate="" tal:content="action/name">dummy</tal:actionname>
+ </a>
+ </li>
+ </tal:actions>
+
+</ul>
+</div>
+
+</body>
+</html>
/cvs/cluster/conga/luci/cluster/main_sections,v --> standard output
revision 1.1
--- conga/luci/cluster/main_sections
+++ - 2006-06-30 17:00:07.633171000 +0000
@@ -0,0 +1,27 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+ i18n:domain="plone">
+
+<body>
+
+<!-- THE SECTION TABS DEFINITION -->
+<div metal:define-macro="portal_tabs"
+ tal:omit-tag=""
+ tal:define="tabs python:here.getTabs(request)">
+
+ <h5 class="hiddenStructure" i18n:translate="heading_sections">Sections</h5>
+
+ <ul id="portal-globalnav">
+ <tal:tabs tal:repeat="tab tabs">
+ <li tal:attributes="id string:portaltab-${tab/Title};
+ class python:test(tab['isSelected'], 'selected', 'plain');">
+ <a href=""
+ tal:content="tab/Title"
+ tal:attributes="href tab/Taburl;
+ title tab/Description|nothing">
+ Tab Name
+ </a></li></tal:tabs>
+ </ul>
+</div>
+
+</body>
+</html>
/cvs/cluster/conga/luci/cluster/portlet_cluconfig,v --> standard output
revision 1.1
--- conga/luci/cluster/portlet_cluconfig
+++ - 2006-06-30 17:00:07.874291000 +0000
@@ -0,0 +1,60 @@
+<html xmlns:tal="http://xml.zope.org/namespaces/tal"
+ xmlns:metal="http://xml.zope.org/namespaces/metal">
+
+<body>
+
+
+<div metal:define-macro="cluchooseportlet"
+ tal:omit-tag=""
+ tal:define="global data python:here.createCluChooser(request, clusystems)">
+
+<dl class="portlet" id="portlet-cluconfig-tree">
+ <dt class="portletHeader">
+ <a href="#">
+ Clusters
+ </a>
+ </dt>
+
+ <dd class="portletItemSingle">
+ <ul class="portletCluConfigTree cluConfigTreeLevel0">
+
+ <tal:clucfgtree define=" level python:1;
+ children python:data.get('children',[]);
+ show_children python:True;
+ isNaviTree python:False;">
+ <metal:main metal:use-macro="here/portlet_cluconfig_macro/macros/cluconfig_main" />
+ </tal:clucfgtree>
+ </ul>
+ </dd>
+</dl>
+
+</div>
+
+<div metal:define-macro="cluconfigportlet"
+ tal:omit-tag=""
+ tal:define="global data python:here.createCluConfigTree(request, modelb)">
+
+<dl class="portlet" id="portlet-cluconfig-tree">
+ <dt class="portletHeader">
+ <a href="#" tal:attributes="href python:here.getClusterURL(request,modelb)">
+ <div tal:omit-tag="" tal:content="python: here.getClusterAlias(modelb)" />
+ </a>
+ </dt>
+
+ <dd class="portletItemSingle">
+ <ul class="portletCluConfigTree cluConfigTreeLevel0">
+
+ <tal:clucfgtree define=" level python:1;
+ children python:data.get('children',[]);
+ show_children python:True;
+ isNaviTree python:False;">
+ <metal:main metal:use-macro="here/portlet_cluconfig_macro/macros/cluconfig_main" />
+ </tal:clucfgtree>
+ </ul>
+ </dd>
+</dl>
+
+</div>
+
+</body>
+</html>
/cvs/cluster/conga/luci/cluster/portlet_cluconfig_macro,v --> standard output
revision 1.1
--- conga/luci/cluster/portlet_cluconfig_macro
+++ - 2006-06-30 17:00:08.040244000 +0000
@@ -0,0 +1,41 @@
+<html>
+<body>
+<metal:main define-macro="cluconfig_main">
+<tal:cfgitem repeat="item children">
+<li class="cluConfigTreeItem visualNoMarker"
+ tal:define="parent_shows_children show_children|nothing;
+ children item/children|nothing;
+ cur_item item/currentItem;"
+ tal:condition="python: (cur_item or parent_shows_children or children)">
+
+ <tal:level define="item_type_class python: 'type-' + item['cfg_type'];">
+ <div tal:attributes="class item_type_class">
+ <a tal:condition="cur_item"
+ tal:attributes="href item/absolute_url;
+ title item/Description|nothing;
+ class string: cluConfigTreeCurrentItem visualIconPadding"
+ tal:content="item/Title|nothing">
+ Selected Item Title</a>
+ <tal:children condition="python: parent_shows_children or children">
+ <a tal:condition="not: cur_item"
+ tal:attributes="href item/absolute_url;
+ title item/Description|nothing;
+ class string: visualIconPadding;"
+ tal:content="item/Title|nothing">
+ Unselected Item Title</a>
+ </tal:children>
+ </div>
+
+ <ul tal:attributes="class python:'cluConfigTree cluConfigTreeLevel'+str(level)"
+ tal:define="show_children item/show_children| python:True;
+ level python:level+1;"
+ tal:condition="python: (show_children or isNaviTree) and children">
+ <metal:recurse use-macro="here/portlet_cluconfig_macro/macros/cluconfig_main"/>
+ </ul>
+ </tal:level>
+</li>
+</tal:cfgitem>
+</metal:main>
+</body>
+</html>
+
/cvs/cluster/conga/luci/cluster/status_check,v --> standard output
revision 1.1
--- conga/luci/cluster/status_check
+++ - 2006-06-30 17:00:08.427865000 +0000
@@ -0,0 +1,9 @@
+<html>
+ <head>
+ <title tal:content="template/title">The title</title>
+ </head>
+ <body>
+ <span tal:define="stuff python:here.getClusterStatus('merope.lab')"/>
+
+ </body>
+</html>
/cvs/cluster/conga/luci/cluster/systest,v --> standard output
revision 1.1
--- conga/luci/cluster/systest
+++ - 2006-06-30 17:00:08.547373000 +0000
@@ -0,0 +1,14 @@
+<html>
+ <head>
+ <title tal:content="template/title">The title</title>
+ </head>
+ <body>
+<span tal:define="global items root/plonybalony/systems/cluster/objectItems">
+ <div tal:repeat="item items">
+ id: <span tal:replace="python:item[0]" />
+ </div>
+ </span>
+
+
+ </body>
+</html>
/cvs/cluster/conga/luci/storage/100wait.gif,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/100wait.gif and - differ
co: output error: Broken pipe
co aborted
/cvs/cluster/conga/luci/storage/black_bar_40.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/black_bar_40.png and - differ
/cvs/cluster/conga/luci/storage/black_right_end_40.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/black_right_end_40.png and - differ
/cvs/cluster/conga/luci/storage/blue_bar_40.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/blue_bar_40.png and - differ
/cvs/cluster/conga/luci/storage/blue_cap_40.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/blue_cap_40.png and - differ
/cvs/cluster/conga/luci/storage/blue_right_end_40.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/blue_right_end_40.png and - differ
/cvs/cluster/conga/luci/storage/cache_report,v --> standard output
revision 1.1
--- conga/luci/storage/cache_report
+++ - 2006-06-30 17:00:09.496414000 +0000
@@ -0,0 +1,17 @@
+<span tal:omit-tag=""
+ tal:define="global storagename request/storagename|nothing"/>
+<span tal:omit-tag=""
+ tal:define="stosystemss context/systems/storage/objectItems;
+ global allowed_systems python:here.allowed_systems(user, stosystemss);
+ global access_to_host_allowed python:here.access_to_host_allowed(storagename, allowed_systems)"/>
+<span tal:omit-tag=""
+ tal:define="global ricci python:here.get_ricci_communicator(storagename, allowed_systems);
+ global storage_report python:here.get_storage_report(ricci, request.SESSION)"/>
+<span tal:omit-tag=""
+ tal:condition="storage_report">
+OK
+</span>
+<span tal:omit-tag=""
+ tal:condition="not: storage_report">
+error
+</span>
/cvs/cluster/conga/luci/storage/clu_portlet_fetcher,v --> standard output
revision 1.1
--- conga/luci/storage/clu_portlet_fetcher
+++ - 2006-06-30 17:00:09.586553000 +0000
@@ -0,0 +1,43 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+ i18n:domain="plone">
+
+<body>
+
+<metal:leftcolumn define-macro="left_column">
+<span tal:define="global stosystems allowed_systems"/>
+<div tal:omit-tag="" metal:use-macro="here/portlet_cluconfig/macros/stochooseportlet" />
+<!--
+<span tal:omit-tag="" tal:define="global hasstoragename request/storagename |nothing"/>
+<span tal:omit-tag="" tal:condition="hasstoragename">
+-->
+<span tal:omit-tag="" tal:condition="storage_report">
+<div tal:omit-tag="" metal:use-macro="here/portlet_cluconfig/macros/stoconfigportlet" />
+</span>
+</metal:leftcolumn>
+
+<!--
+
+<metal:rightcolumn define-macro="right_column"
+ tal:define="Iterator python:modules['Products.CMFPlone'].IndexIterator;
+ tabindex python:Iterator(pos=20000);"
+ tal:condition="sr">
+
+ <metal:block tal:repeat="slot sr">
+ <tal:dontcrash tal:on-error="python:context.plone_log('Error %s on %s while rendering portlet %s'%(error.type, error.value, slot[0]))"
+ tal:define="pathexpr python:slot[0];
+ usemacro python:slot[1];">
+
+ <tal:block tal:condition="usemacro">
+ <metal:block metal:use-macro="python:path(pathexpr)" />
+ </tal:block>
+
+ <span tal:condition="not: usemacro"
+ tal:replace="structure python:path(pathexpr)" />
+
+ </tal:dontcrash>
+ </metal:block>
+</metal:rightcolumn>
+-->
+
+</body>
+</html>
/cvs/cluster/conga/luci/storage/clusterportlet.css,v --> standard output
revision 1.1
--- conga/luci/storage/clusterportlet.css
+++ - 2006-06-30 17:00:09.677918000 +0000
@@ -0,0 +1,238 @@
+dl.portlet {
+ margin: 1px 0 1em 0;
+ border-bottom: 1px solid #8cacbb;
+}
+
+dl.portlet a {
+ text-decoration: none;
+}
+#portal-columns {
+ width: 100% !important;
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+#portal-column-one {
+ vertical-align: top;
+ width: 16em;
+}
+
+#portal-column-content {
+ vertical-align: top;
+ margin: 0;
+ padding: 0;
+}
+
+#portal-column-two {
+ vertical-align: top;
+ width: 16em;
+}
+
+/* Padding for the columns */
+
+#portal-column-one .visualPadding {
+ padding: 2em 0em 1em 2em;
+}
+
+#portal-column-two .visualPadding {
+ padding: 2em 2em 1em 0em;
+}
+
+/* XXX: The two below rules should really be in the rule above, but that makes the items grow/shrink on :hover (navtree) - need to investigate how to make it not do that. ~limi, Dec 2005 */
+dd.portletItem a,
+dd.portletFooter a {
+ border-bottom: none;
+}
+dd.portletItem a:visited,
+dd.portletFooter a:visited {
+ color: #436976;
+}
+
+.portletHeader {
+ background-color: #dee7ec;
+ border: 1px solid #8cacbb;
+ padding: 0em 1em;
+ text-transform: lowercase;
+ font-weight: normal;
+ line-height: 1.6em;
+}
+
+.portletHeader a {
+ color: Black;
+}
+
+.portletItem {
+ margin: 0;
+ padding: 1em;
+ border-left: 1px solid #8cacbb;
+ border-right: 1px solid #8cacbb;
+}
+.portletItem a {
+ display: block;
+}
+
+.portletItemDetails {
+ text-align: right;
+ display: block;
+ color: Black;
+}
+
+dd.portletFooter {
+ background-color: #eef3f5;
+ margin: 0;
+ padding: 0.25em 1em;
+ border: 1px solid #8cacbb;
+ border-style: dotted solid none solid;
+ text-align: right;
+}
+
+
+/* Elements that enable layout with rounded corners */
+
+.portletTopLeft {}
+.portletTopRight {}
+.portletBottomLeft {}
+.portletBottomRight {}
+.portletCluConfigTree {
+ margin: 0 0 0 0.75em;
+ padding: 0;
+ list-style: none;
+ list-style-image: none;
+ line-height: 1em;
+}
+
+
+
+.cluConfigTree {
+ list-style: none;
+ list-style-image: none;
+ margin-top: 1px;
+}
+
+.cluConfig li {
+ margin-bottom: 1px;
+}
+
+.cluConfigTreeItem {
+ display: block;
+ padding: 0;
+ margin: 0;
+}
+.cluConfigTreeItem a,
+dd.portletItem .cluConfigTreeItem a {
+ border: 1px solid White;
+ display: block;
+ text-decoration: none;
+ padding-top: 0.2em;
+ padding-bottom: 0.25em;
+}
+
+.cluConfigTreeItem a:hover,
+dd.portletItem .cluConfigTreeItem a:hover {
+ background-color: #dee7ec;
+ color: #436976;
+ border: 1px solid #8cacbb;
+}
+
+.cluConfigTreeCurrentItem {
+ background-color: #dee7ec;
+ color: #436976;
+ border: 1px solid #8cacbb !important;
+}
+li.cluConfigTreeCurrentItem {
+ display: block;
+ padding: 0 0 0 1px;
+ margin: 0 0 2px -1px;
+}
+li.cluConfigTreeCurrentItem a,
+li.cluConfigTreeCurrentItem a:hover {
+ display: block;
+ border: 1px solid #dee7ec;
+ min-height: 1.6em;
+ line-height: 1.6em;
+ height: auto;
+}
+
+/* Another workaround for broken Internet Explorer */
+
+* html li.cluConfigTreeCurrentItem a,
+* html li.cluConfigTreeCurrentItem a:hover {
+ height: 1.6em;
+}
+.type-nodecfg, .type-nodes, .type-node, .type-nodelist,
+.type-nodegrid, .type-nodeadd {
+display: block;
+}
+
+.cluConfigTreeLevel0 { margin: 0; }
+.cluConfigTreeLevel1 { margin-left: 1em;}
+.cluConfigTreeLevel2 { margin-left: 0.75em; }
+.cluConfigTreeLevel3 { margin-left: 0.75em; }
+.cluConfigTreeLevel4 { margin-left: 0.75em; }
+.cluConfigTreeLevel5 { margin-left: 0.75em; }
+
+#main-portal-logo {
+ background: url(./clusterbanner.png) no-repeat;
+ border: 0;
+ margin: 0.75em 0em 0.75em 1.5em;
+ padding: 0;
+}
+
+#main-portal-logo a {
+ display: block;
+ text-decoration: none;
+ overflow: hidden;
+ border: 0;
+ margin: 0;
+ padding: 0;
+ padding-top: 87px;
+ height: 0px !important;
+ height /**/: 57px;
+ width: 252px;
+ cursor: pointer;
+}
+
+#portal-globalnav li a {
+ /* The normal, unselected tabs. They are all links */
+ background-color: transparent;
+ border-color: #8cacabb;
+ border-width: 1px;
+ border-style: solid solid none solid;
+ color: #436976;
+ height: auto;
+ margin-right: 0.5em;
+ padding: 0em 1.25em;
+ text-decoration: none;
+ text-transform: lowercase;
+}
+
+#portal-globalnav li.selected a {
+ /* The selected tab. There's only one of this */
+ background-color: #dee7ec;
+ border: 1px solid #8cacbb;
+ border-bottom: #dee7ec 1px solid;
+ color: #436976;
+}
+#portal-globalnav li a:hover {
+ background-color: #dee7ec;
+ border-color: #8cacbb;
+ border-bottom-color: #dee7ec;
+ color: #436976;
+}
+#portal-personaltools {
+ /* Bar with personalized menu (user preferences, favorites etc) */
+ background-color: #dee7ec;
+ border-top-color: #8cacbb;
+ border-top-style: solid;
+ border-top-width: 1px;
+ border-bottom-color: #8cacbb;
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+ line-height: 1.6em;
+ color: Black;
+ padding: 0em 3em 0em 3em;
+ margin: 0;
+ text-align: right;
+ text-transform: lowercase;
+ list-style: none;
+}
/cvs/cluster/conga/luci/storage/form-chooser,v --> standard output
revision 1.1
--- conga/luci/storage/form-chooser
+++ - 2006-06-30 17:00:09.763294000 +0000
@@ -0,0 +1,61 @@
+<html>
+ <head>
+ <title tal:content="template/title">The title</title>
+ </head>
+ <body>
+
+ <metal:choose-form metal:define-macro="main-form">
+
+<!--
+ <span tal:omit-tag="" tal:condition="python: storage_report == None and storagename != None">
+ <div metal:use-macro="here/form-macros/macros/error-form"/>
+ </span>
+-->
+
+ <span tal:omit-tag="" tal:condition="python: access_to_host_allowed == False and storagename != None">
+ <h2>
+ Insufficient rights
+ </h2>
+ <div metal:use-macro="here/form-macros/macros/error-form"/>
+ </span>
+
+ <span tal:omit-tag="" tal:condition="python: storage_report == None and storagename != None and access_to_host_allowed">
+ <div metal:use-macro="here/form-macros/macros/wait-probing-storage"/>
+ </span>
+
+ <span tal:omit-tag="" tal:condition="python: (pagetype == '0' or pagetype == None) and storagename == None">
+ <div metal:use-macro="here/form-macros/macros/systems-form"/>
+ </span>
+
+ <span tal:omit-tag="" tal:condition="python: pagetype=='commit_changes' and storage_report != None">
+ <div metal:use-macro="here/form-macros/macros/commit-changes"/>
+ </span>
+
+ <span tal:omit-tag="" tal:condition="python: pagetype == '44' and storage_report != None">
+ <div metal:use-macro="here/form-macros/macros/view-mappers-all-form"/>
+ </span>
+
+ <span tal:omit-tag="" tal:condition="python: pagetype == '51' and storage_report != None">
+ <div metal:use-macro="here/form-macros/macros/view-mappers-form"/>
+ </span>
+
+ <span tal:omit-tag="" tal:condition="python: pagetype == '52' and storage_report != None">
+ <div metal:use-macro="here/form-macros/macros/view-mapper-form"/>
+ </span>
+
+ <span tal:omit-tag="" tal:condition="python: pagetype == '61' and storage_report != None">
+ <div metal:use-macro="here/form-macros/macros/view-hard-drives-form"/>
+ </span>
+
+ <span tal:omit-tag="" tal:condition="python: pagetype == '62' and storage_report != None">
+ <div metal:use-macro="here/form-macros/macros/view-BD-form"/>
+ </span>
+
+ <span tal:omit-tag="" tal:condition="python: pagetype == '101' and storage_report != None">
+ <div metal:use-macro="here/form-macros/macros/create-mapper-form"/>
+ </span>
+
+ </metal:choose-form>
+
+ </body>
+</html>
/cvs/cluster/conga/luci/storage/form-macros,v --> standard output
revision 1.1
--- conga/luci/storage/form-macros
+++ - 2006-06-30 17:00:09.854492000 +0000
@@ -0,0 +1,1434 @@
+<html>
+ <head>
+ <title tal:content="template/title">The title</title>
+ </head>
+ <body>
+
+
+<div metal:define-macro="forms-css">
+ <style>
+ table.form td { padding: 0px; }
+ </style>
+</div>
+
+
+
+
+<div metal:define-macro="commit-changes">
+ commiting changes...
+ <span tal:define="main_URL context/storage/index_html/absolute_url"
+ tal:replace="structure python:here.apply(ricci, storage_report, request, main_URL)">
+ here.apply() response
+ </span>
+</div>
+
+
+
+
+<div metal:define-macro="wait-probing-storage">
+ <script>
+function strip_left(txt) {
+ for (i=0; i<txt.length; i++) {
+ if (txt[i] == " " || txt[i] == "\n")
+ continue;
+ return txt.substr(i);
+ }
+ return txt;
+}
+function cache_report_callback() {
+ if (xmlHttp_object.readyState == 4) {
+ var i = (window.location + '').indexOf('?');
+ var list_URL = (window.location + '').substr(0, i);
+ if (xmlHttp_object.status == 200) {
+ res = xmlHttp_object.responseText;
+ res = strip_left(res);
+ if (res.substr(0, 2) == "OK") {
+ window.location.reload();
+ } else {
+ alert('An error has occured while probing storage');
+ window.location = list_URL;
+ }
+ } else {
+ alert("Error retrieving data from server");
+ window.location = list_URL;
+ }
+ }
+}
+function cache_report() {
+ var i = (window.location + '').indexOf('?');
+ var URL = 'cache_report' + (window.location + '').substr(i);
+ initiate_async_get(URL, cache_report_callback);
+}
+setTimeout("cache_report()", 10)
+ </script>
+
+ <table style="width: 100%;">
+ <tr>
+ <td align="center">
+ <img src="100wait.gif" style="padding-top: 1cm;"/>
+ </td>
+ </tr>
+ <tr>
+ <td align="center">
+ <div style="padding-bottom: 4cm;">Probing storage</div>
+ </td>
+ </tr>
+ </table>
+</div>
+
+
+
+
+ <div metal:define-macro="systems-form">
+ <table cellpadding="4"
+ tal:define="sort_by request/sort_by|nothing">
+ <tr tal:define="main_url context/storage/index_html/absolute_url">
+ <th>
+ <a tal:condition="python:sort_by == 'hostname' or sort_by == None"
+ tal:attributes="href python:main_url + '?pagetype=' + str(pagetype) + '&sort_by=hostname_reverse'">
+ Hostname
+ </a>
+ <a tal:condition="python:sort_by != 'hostname' and sort_by != None"
+ tal:attributes="href python:main_url + '?pagetype=' + str(pagetype) + '&sort_by=hostname'">
+ Hostname
+ </a>
+ </th>
+ <th>
+ <a tal:condition="python:sort_by == 'OS'"
+ tal:attributes="href python:main_url + '?pagetype=' + str(pagetype) + '&sort_by=OS_reverse'">
+ Operating System
+ </a>
+ <a tal:condition="python:sort_by != 'OS'"
+ tal:attributes="href python:main_url + '?pagetype=' + str(pagetype) + '&sort_by=OS'">
+ Operating System
+ </a>
+ </th>
+ <th>
+ <a tal:condition="python:sort_by == 'cluster_name'"
+ tal:attributes="href python:main_url + '?pagetype=' + str(pagetype) + '&sort_by=cluster_name_reverse'">
+ Cluster Name
+ </a>
+ <a tal:condition="python:sort_by != 'cluster_name'"
+ tal:attributes="href python:main_url + '?pagetype=' + str(pagetype) + '&sort_by=cluster_name'">
+ Cluster Name
+ </a>
+ </th>
+ <th>
+ <a tal:condition="python:sort_by == 'cluster_alias'"
+ tal:attributes="href python:main_url + '?pagetype=' + str(pagetype) + '&sort_by=cluster_alias_reverse'">
+ Cluster Alias
+ </a>
+ <a tal:condition="python:sort_by != 'cluster_alias'"
+ tal:attributes="href python:main_url + '?pagetype=' + str(pagetype) + '&sort_by=cluster_alias'">
+ Cluster Alias
+ </a>
+ </th>
+ </tr>
+ <span tal:omit-tag=""
+ tal:repeat="sys python:here.build_systems_list(sort_by, allowed_systems)">
+ <tr>
+ <td tal:define="tmp_host sys/hostname">
+ <a tal:condition="sys/available"
+ tal:attributes="href python:request['URL'] + '?pagetype=44&storagename=' + tmp_host">
+ <span tal:replace="tmp_host"/>
+ </a>
+ <span style="color:red" tal:condition="not: sys/available" tal:content="tmp_host"/>
+ </td>
+ <td>
+ <span tal:condition="sys/available" tal:replace="sys/OS"/>
+ <span style="color:red" tal:condition="not: sys/available" tal:content="sys/OS"/>
+ </td>
+ <td>
+ <span tal:replace="sys/cluname"/>
+ </td>
+ <td>
+ <span tal:replace="sys/clualias"/>
+ </td>
+ </tr>
+ </span>
+ </table>
+ </div>
+
+
+ <div metal:define-macro="error-form">
+ <h2>Error Form</h2>
+ An error has occured, more details once implemented :)
+ </div>
+
+
+<div tal:omit-tag="" metal:define-macro="tree-css">
+ <style type="text/css">
+ @media screen, print {
+ ul.tree { margin-left : 0px; padding : 0px; }
+ ul.tree ul.tree, ul.tree ul , ul.tree li { margin-left : 10px; padding : 0px; }
+ ul.tree { list-style: none; }
+ ul.tree li { padding-left: 0px; }
+ ul.tree li.opened { padding-left: 0px; background-image: url(tree_opened.gif); background-repeat: no-repeat; background-position: 0 0; }
+ ul.tree li.closed { padding-left: 0px; background-image: url(tree_closed.gif); background-repeat: no-repeat; background-position: 0 0; }
+ ul.tree li.bullet { padding-left: 0px; background-image: url(tree_bullet.gif); background-repeat: no-repeat; background-position: 0 0; }
+ ul.tree li.opened ul { display: block; }
+ ul.tree li.closed ul { display: none; }
+ }
+ </style>
+</div>
+<div tal:omit-tag="" metal:define-macro="li-collapse-handler">
+ <a onClick="this.parentNode.className = (this.parentNode.className == 'opened') ? 'closed' : 'opened';"><img src="tree_transparent.gif"/></a>
+</div>
+
+
+ <div metal:define-macro="view-mappers-form">
+ <div metal:use-macro="here/form-macros/macros/tree-css"/>
+ <div metal:use-macro="here/form-macros/macros/content-scripts"/>
+ <div metal:use-macro="here/form-macros/macros/single-visible-span"/>
+ <div metal:use-macro="here/form-macros/macros/form-scripts"/>
+ <span tal:omit-tag=""
+ tal:define="mapper_type request/mapper_type;
+ mappers_all python:here.get_mappers_data(storage_report)">
+ <span tal:omit-tag=""
+ tal:condition="python:mapper_type in mappers_all">
+ <span tal:omit-tag=""
+ tal:define="mappers_data python:mappers_all[mapper_type]">
+ <div metal:use-macro="here/form-macros/macros/display-mappers-of-type"/>
+ </span>
+ </span>
+ <span tal:omit-tag=""
+ tal:condition="python:mapper_type not in mappers_all">
+ Please use links to navigate around, don't modify address bar
+ </span>
+ </span>
+ </div>
+
+
+ <div metal:define-macro="view-hard-drives-form">
+ <div metal:use-macro="here/form-macros/macros/tree-css"/>
+ <div metal:use-macro="here/form-macros/macros/content-scripts"/>
+ <div metal:use-macro="here/form-macros/macros/single-visible-span"/>
+ <div metal:use-macro="here/form-macros/macros/form-scripts"/>
+ <span tal:omit-tag=""
+ tal:define="mappers_all python:here.get_mappers_data(storage_report)">
+ <span tal:omit-tag=""
+ tal:repeat="mapper_type python:mappers_all.keys()">
+ <span tal:omit-tag=""
+ tal:condition="python:mapper_type == 'hard_drives'"
+ tal:define="mappers_data python:mappers_all[mapper_type]">
+ <div metal:use-macro="here/form-macros/macros/display-hard-drives"/>
+ </span>
+ </span>
+ </span>
+ </div>
+
+
+ <div metal:define-macro="view-mappers-all-form">
+ <div metal:use-macro="here/form-macros/macros/tree-css"/>
+ <div metal:use-macro="here/form-macros/macros/content-scripts"/>
+ <div metal:use-macro="here/form-macros/macros/single-visible-span"/>
+ <div metal:use-macro="here/form-macros/macros/form-scripts"/>
+ <span tal:omit-tag=""
+ tal:define="mappers_all python:here.get_mappers_data(storage_report)">
+ <span tal:omit-tag=""
+ tal:repeat="mapper_type python:mappers_all.keys()">
+ <span tal:omit-tag=""
+ tal:condition="python:mapper_type == 'hard_drives'"
+ tal:define="mappers_data python:mappers_all[mapper_type]">
+ <div metal:use-macro="here/form-macros/macros/display-hard-drives"/>
+ </span>
+ </span>
+ <span tal:omit-tag=""
+ tal:repeat="mapper_type python:mappers_all.keys()">
+ <span tal:omit-tag=""
+ tal:condition="python:mapper_type != 'hard_drives'"
+ tal:define="mappers_data python:mappers_all[mapper_type]">
+ <div metal:use-macro="here/form-macros/macros/display-mappers-of-type"/>
+ </span>
+ </span>
+ </span>
+ </div>
+
+
+
+ <div metal:define-macro="display-mappers-of-type">
+ <h2 tal:content="python:mappers_data['pretty_type'] + 's'"/>
+ <span tal:condition="not: mappers_data/mappers">
+ No <span tal:replace="mappers_data/pretty_type"/>s exist on <span tal:replace="storagename"/>.
+ <br/>
+ Use link on the left to create new <span tal:replace="mappers_data/pretty_type"/>.
+ </span>
+ <ul class="tree"
+ tal:condition="mappers_data/mappers">
+ <span tal:repeat="mapper mappers_data/mappers">
+ <li tal:condition="mapper/pretty_name"
+ class="closed"><div metal:use-macro="here/form-macros/macros/li-collapse-handler"/>
+ <a tal:define="tmp_URL context/storage/index_html/absolute_url;
+ URL python:tmp_URL + '?storagename=' + storagename + '&pagetype=52'"
+ tal:attributes="href python:URL + '&mapper_type=' + mapper['mapper_type'] + '&mapper_id=' + mapper['mapper_id']"
+ tal:content="mapper/pretty_name"></a>
+ <ul class="tree">
+ <li class="closed"><div metal:use-macro="here/form-macros/macros/li-collapse-handler"/>
+ <span tal:replace="mapper/pretty_type"/> Properties:
+ <ul class="tree">
+ <li>
+ <span tal:define="properties_span_id mapper/mapper_id"
+ tal:attributes="id properties_span_id">
+ <div metal:use-macro="here/form-macros/macros/display-mapper"/>
+ </span>
+ </li>
+ </ul>
+ </li>
+ <li class="closed"><div metal:use-macro="here/form-macros/macros/li-collapse-handler"/>
+ <span tal:replace="mapper/pretty_targets_name"/>:
+ <ul class="tree">
+ <span tal:repeat="target mapper/targets">
+ <li class="closed"><div metal:use-macro="here/form-macros/macros/li-collapse-handler"/>
+ <a tal:define="tmp_URL context/storage/index_html/absolute_url;
+ URL python:tmp_URL + '?storagename=' + storagename + '&pagetype=62'"
+ tal:attributes="href python:URL + '&mapper_type=' + target['mapper_type'] + '&mapper_id=' + target['mapper_id'] + '&bd_path=' + target['path']"
+ tal:content="target/pretty_name"/>
+ <span tal:content="target/description"/>
+ <ul class="tree">
+ <li tal:define="bd_data target;
+ prefix python:mapper['mapper_id'] + '_target_' + bd_data['path'] + '_';
+ properties_span_id python:prefix + 'properties_span_id'">
+ <span tal:attributes="id properties_span_id">
+ <div metal:use-macro="here/form-macros/macros/display-BD"/>
+ </span>
+ </li>
+ </ul>
+ </li>
+ </span>
+ </ul>
+ </li>
+ <li class="closed"><div metal:use-macro="here/form-macros/macros/li-collapse-handler"/>
+ <span tal:replace="mapper/pretty_sources_name"/>:
+ <ul class="tree">
+ <span tal:repeat="source mapper/sources">
+ <li class="closed"><div metal:use-macro="here/form-macros/macros/li-collapse-handler"/>
+ <a tal:define="tmp_URL context/storage/index_html/absolute_url;
+ URL python:tmp_URL + '?storagename=' + storagename + '&pagetype=62'"
+ tal:attributes="href python:URL + '&mapper_type=' + source['mapper_type'] + '&mapper_id=' + source['mapper_id'] + '&bd_path=' + source['path']"
+ tal:content="source/path"/>
+ <span tal:content="source/description"/>
+ <ul class="tree">
+ <li tal:define="bd_data source;
+ prefix python:mapper['mapper_id'] + '_source_' + bd_data['path'] + '_';
+ properties_span_id python:prefix + 'properties_span_id'">
+ <span tal:attributes="id properties_span_id">
+ <div metal:use-macro="here/form-macros/macros/display-BD"/>
+ </span>
+ </li>
+ </ul>
+ </li>
+ </span>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </span>
+ </ul>
+ </div>
+
+
+ <div metal:define-macro="display-hard-drives">
+ <h2 tal:content="mappers_data/pretty_type"/>
+ <span tal:condition="not: mappers_data/mappers">
+ No <span tal:replace="mappers_data/pretty_type"/>s exist on <span tal:replace="storagename"/>.
+ <br/>
+ Use link on the left to create new <span tal:replace="mappers_data/pretty_type"/>.
+ </span>
+ <ul class="tree"
+ tal:condition="mappers_data/mappers">
+ <span tal:repeat="mapper mappers_data/mappers">
+ <span tal:repeat="target mapper/targets">
+ <li class="closed"><div metal:use-macro="here/form-macros/macros/li-collapse-handler"/>
+ <a tal:define="tmp_URL context/storage/index_html/absolute_url;
+ URL python:tmp_URL + '?storagename=' + storagename + '&pagetype=62'"
+ tal:attributes="href python:URL + '&mapper_type=' + target['mapper_type'] + '&mapper_id=' + target['mapper_id'] + '&bd_path=' + target['path']"
+ tal:content="target/pretty_name"/>
+ <span tal:content="target/description"/>
+ <ul class="tree">
+ <li tal:define="bd_data target;
+ prefix python:mapper['mapper_id'] + '_target_' + bd_data['path'] + '_';
+ properties_span_id python:prefix + 'properties_span_id'">
+ <span tal:attributes="id properties_span_id">
+ <div metal:use-macro="here/form-macros/macros/display-BD"/>
+ </span>
+ </li>
+ </ul>
+ </li>
+ </span>
+ </span>
+ </ul>
+ </div>
+
+
+
+ <div metal:define-macro="view-mapper-form">
+ <div metal:use-macro="here/form-macros/macros/content-scripts"/>
+ <div metal:use-macro="here/form-macros/macros/form-scripts"/>
+ <div metal:use-macro="here/form-macros/macros/single-visible-span"/>
+ <span tal:omit-tag=""
+ tal:define="mapper python:here.get_mapper_data(storage_report, request['mapper_id']);
+ properties_span_id python:mapper['mapper_id'] + '_properties_span_id'">
+ <div align="center">
+ <h3>
+ <span tal:content="python:mapper['pretty_type'] + ' '"/>
+ <span style="cursor: pointer; text-decoration: underline"
+ tal:attributes="onclick python:'singleVisibleSpan(\'' + properties_span_id + '\', \'' + mapper['mapper_id'] + '\')'"
+ tal:content="mapper/pretty_name">
+ mapper name
+ </span>
+ </h3>
+ </div>
+
+
+ <input type="checkbox"
+ id="graphics_checkbox_id"
+ checked=""
+ onchange="var s = (this.checked)?'graphical_view':'textual_view'; singleVisibleSpan('mappings_view', s);"/>
+ Graphical View
+ <span id="mappings_view">
+
+ <div id="graphical_view" class="visible">
+ <iframe style="border: none;"
+ tal:attributes="src python:'mappings_provider?storagename=' + storagename + '&mapper_id=' + mapper['mapper_id'];
+ width string:700px;
+ height string:180"></iframe>
+ </div>
+
+ <div id="textual_view" class="invisible">
+ <br/>
+ <div>
+ <h3>
+ <span tal:omit-tag=""
+ tal:define="targets mapper/targets_all">
+ <span tal:omit-tag=""
+ tal:condition="python:len(targets) > 1"
+ tal:content="python:mapper['pretty_targets_name'] + ': '"/>
+ <span tal:omit-tag=""
+ tal:condition="python:len(targets) == 1"
+ tal:content="python:mapper['pretty_target_name'] + ': '"/>
+ <span tal:omit-tag=""
+ tal:repeat="t targets">
+ <span style="cursor: pointer; text-decoration: underline"
+ tal:attributes="onclick python:'singleVisibleSpan(\'' + properties_span_id + '\', \'' + t['path'] + '\')'"
+ tal:content="t/pretty_name">
+ target name
+ </span>
+ </span>
+ </span>
+ </h3>
+ </div>
+ <br/>
+ <div>
+ <h3>
+ <span tal:omit-tag=""
+ tal:define="sources mapper/sources">
+ <span tal:omit-tag=""
+ tal:condition="python: len(sources) > 1"
+ tal:content="python:mapper['pretty_sources_name'] + ': '"/>
+ <span tal:omit-tag=""
+ tal:condition="python: len(sources) == 1"
+ tal:content="python:mapper['pretty_source_name'] + ': '"/>
+ <span tal:omit-tag=""
+ tal:repeat="s sources">
+ <span style="cursor: pointer; text-decoration: underline"
+ tal:attributes="onclick python:'singleVisibleSpan(\'' + properties_span_id + '\', \'' + s['path'] + '\')'"
+ tal:content="s/pretty_name">
+ source name
+ </span>
+ </span>
+ </span>
+ </h3>
+ </div>
+ <br/>
+ </div>
+
+ </span> <!-- display -->
+
+
+
+
+
+ <div tal:attributes="id properties_span_id"
+ style="width: 700px; height: 320px; overflow: auto; ">
+ <span id="warning_box"
+ style="position:absolute; visibility: hidden; border: medium double red; color: red; background-color: white; text-align: center; width: 350px; ">
+ </span>
+
+ <div tal:attributes="id mapper/mapper_id;
+ class string:visible">
+ <div metal:use-macro="here/form-macros/macros/display-mapper"/>
+ </div>
+ <span tal:omit-tag=""
+ tal:repeat="bd_data mapper/targets">
+ <div tal:attributes="id bd_data/path;
+ class string:invisible">
+ <div metal:use-macro="here/form-macros/macros/display-BD"/>
+ </div>
+ </span>
+ <span tal:omit-tag=""
+ tal:repeat="bd_data mapper/new_targets">
+ <div tal:attributes="id bd_data/path;
+ class string:invisible">
+ <div metal:use-macro="here/form-macros/macros/display-BD"/>
+ </div>
+ </span>
+ <span tal:omit-tag=""
+ tal:repeat="bd_data mapper/sources">
+ <div tal:attributes="id bd_data/path;
+ class string:invisible">
+ <div metal:use-macro="here/form-macros/macros/display-BD"/>
+ </div>
+ </span>
+ </div>
+ </span>
+ </div>
+
+
+
+ <div metal:define-macro="view-BDs-form">
+ <h2>BDs Form</h2>
+ </div>
+
+
+
+ <div metal:define-macro="view-BD-form">
+ <div metal:use-macro="here/form-macros/macros/content-scripts"/>
+ <div metal:use-macro="here/form-macros/macros/form-scripts"/>
+ <div metal:use-macro="here/form-macros/macros/single-visible-span"/>
+ <span tal:omit-tag=""
+ tal:define="bd_data python:here.get_bd_data(storage_report, request['mapper_id'], request['bd_path']);
+ mapper python:here.get_mapper_data(storage_report, request['mapper_id'])">
+ <span tal:define="properties_span_id string:if seen in javascript error log -> FIXME">
+ <div metal:use-macro="here/form-macros/macros/display-BD"/>
+ </span>
+ </span>
+ </div>
+
+
+
+ <div metal:define-macro="create-mapper-form"
+ tal:define="mapper python:here.get_mapper_template_data(storage_report, request['mapper_type']);
+ prefix python:'create_mapper_template_' + mapper['mapper_type'] + '_';
+ properties_span_id string:;
+ mapper_template_form_id python:prefix + 'mapper_template_form_id';
+ create_mapper_button_id python:prefix + 'mapper_template_apply_button_id'">
+ <div metal:use-macro="here/form-macros/macros/forms-css"/>
+ <div metal:use-macro="here/form-macros/macros/form-scripts"/>
+ <form tal:attributes="id mapper_template_form_id;
+ method string:get">
+ <input tal:attributes="type string:hidden;
+ name string:pagetype;
+ value string:commit_changes"/>
+ <input tal:attributes="type string:hidden;
+ name string:object_type;
+ value string:mapper_template"/>
+ <input tal:attributes="type string:hidden;
+ name string:mapper_type;
+ value mapper/mapper_type"/>
+ <input tal:attributes="type string:hidden;
+ name string:mapper_id;
+ value python:''"/>
+ <input tal:attributes="type string:hidden;
+ name string:storagename;
+ value storagename"/>
+ <table class="form">
+ <caption>
+ <div align="left">
+ <h2>
+ New <span tal:replace="mapper/pretty_type"/>
+ </h2>
+ </div>
+ </caption>
+ <tr>
+ <th>
+ <div align="left">
+
+ </div>
+ </th>
+ <th>
+ <div align="left">
+ <span tal:replace="mapper/pretty_type"/> Properties
+ </div>
+ </th>
+ <th>
+ <div align="left">
+ <span tal:replace="mapper/pretty_sources_name"/>
+ </div>
+ <th>
+ </tr>
+ <tr>
+ <td>
+ <table>
+ <tr>
+ <td>
+ icon
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <table>
+
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ <td>
+ <span tal:omit-tag=""
+ tal:define="props mapper/props">
+ <div metal:use-macro="here/form-macros/macros/display-props"/>
+ </span>
+ </td>
+ <td>
+ <table>
+ <caption tal:condition="python:mapper['min_sources'] == mapper['max_sources']">
+ Select <span tal:replace="mapper/min_sources"/> <span tal:replace="mapper/pretty_source_name"/>
+ </caption>
+ <caption tal:condition="python:mapper['min_sources'] != mapper['max_sources']">
+ Select <span tal:replace="mapper/min_sources"/> to <span tal:replace="mapper/max_sources"/> <span tal:replace="mapper/pretty_sources_name"/>
+ </caption>
+ <span tal:omit-tag=""
+ tal:define="bds mapper/new_sources"
+ tal:repeat="bd bds">
+ <tr>
+ <td>
+ <table>
+ <tr>
+ <td>
+ <input tal:attributes="type string:checkbox;
+ name python:'source_bd_' + bd['path']"/>
+ </td>
+ <td>
+ <span tal:replace="bd/path"/> (<span tal:replace="bd/props/size/value"/> <span tal:replace="bd/props/size/units"/> - <span tal:replace="bd/pretty_type"/>)
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </span>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+ </td>
+ <td>
+ <div align="right">
+ <input type="button"
+ name="action_type"
+ value="Reset"
+ onclick="return reset_form(this.form)"
+ class="form_button"/>
+ <input tal:define="prompt_msg python:'Do you really want to create new ' + mapper['pretty_type'] + '?';
+ validate_url context/validate_html/absolute_url"
+ tal:attributes="id create_mapper_button_id;
+ type string:button;
+ name string:action_type;
+ value string:Create;
+ onclick python:'return validate_and_submit_form(\'' + validate_url + '\', \'' + mapper_template_form_id + '\', \'' + create_mapper_button_id + '\', \'' + prompt_msg + '\')'"
+ class="form_button"/>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </form>
+ </div>
+
+
+
+
+
+
+
+
+
+ <div tal:omit-tag="" metal:define-macro="display-props">
+ <span tal:omit-tag=""
+ tal:define="predefines_test python:'display-props: ' + str(props) + prefix + properties_span_id"/>
+ <table>
+ <span tal:omit-tag=""
+ tal:repeat="p props">
+ <tr tal:define="prop python:props[p];
+ prop_pr_name prop/pretty_name">
+ <td tal:content="prop_pr_name"/>
+ <td tal:define="prop_type prop/type;
+ prop_units prop/units">
+ <table>
+ <tr>
+ <td>
+ <span tal:condition="python:prop_type == 'label'">
+ <span tal:omit-tag=""
+ tal:condition="prop/replacements|nothing">
+ <input tal:attributes="type string:hidden;
+ name p;
+ value prop/value"/>
+ <select tal:define="repls prop/replacements;
+ select_id python:prefix + '_select_replace_block_' + p"
+ tal:attributes="id select_id;
+ onfocus python:'replace_properties_block__old_select_value = this.value';
+ onchange python:'replace_properties_block(\'' + properties_span_id + '\', \'' + select_id + '\')'">
+ <span tal:omit-tag=""
+ tal:repeat="repl_name repls/repl_names">
+ <option tal:attributes="value python:repls[repl_name]['path']"/><span tal:replace="repl_name"/>
+ </span>
+ </select>
+ </span>
+ <span tal:condition="not: prop/replacements|nothing"
+ tal:replace="prop/value"/>
+ </span>
+
+
+
+ <input tal:condition="python:prop_type == 'text'"
+ tal:attributes="name p;
+ type string:text;
+ value prop/value;
+ onkeypress python:'return validate_text_keypress(this, event, 2, \'' + prop['validation']['illegal_chars'] + '\', ' + str(prop['validation']['max_length']) + ')';
+ onblur python:'validate_text(this, 2, \'' + prop['validation']['illegal_chars'] + '\', \'' + prop['validation']['reserved_words'] + '\', ' + str(prop['validation']['min_length']) + ', ' + str(prop['validation']['max_length']) + ')'"/>
+
+ <input tal:condition="python:prop_type == 'int'"
+ tal:attributes="name p;
+ type string:text;
+ value prop/value;
+ onblur python:'validate_int(this, 2, ' + str(prop['validation']['min']) + ', ' + str(prop['validation']['max']) + ', ' + str(prop['validation']['step']) + ')'"
+ onkeypress="return validate_int_keypress(this, event, 2)"/>
+
+
+
+ <span tal:condition="python:prop_type == 'select'">
+ <select tal:define="prop_options prop/value"
+ tal:attributes="name p">
+ <span tal:omit-tag=""
+ tal:repeat="prop_opt prop_options">
+ <option tal:attributes="value prop_opt"/><span tal:replace="prop_opt"/>
+ </span>
+ </select>
+ </span>
+ </td>
+ <td>
+ <span tal:replace="prop_units"/>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </span>
+ </table>
+ </div>
+
+
+
+
+ <div tal:omit-tag="" metal:define-macro="display-content">
+ <span tal:omit-tag=""
+ tal:define="predefines_test python:'display-content: ' + str(cont) + properties_span_id"/>
+ <span tal:omit-tag=""
+ tal:define="props cont/props">
+ <div metal:use-macro="here/form-macros/macros/display-props"/>
+ </span>
+ </div>
+
+
+
+ <div tal:omit-tag="" metal:define-macro="content-scripts">
+ <script language="javascript" type="text/javascript">
+
+ var replace_properties_block__old_select_value = ''
+ function replace_properties_block(parent_id, select_id) {
+ selem = document.getElementById(select_id);
+ child_id = selem.value;
+ selem.value = replace_properties_block__old_select_value;
+ singleVisibleSpan(parent_id, child_id);
+ }
+
+ function change_content(select_content_id, content_span_id) {
+ content_id = document.getElementById(select_content_id).value;
+ singleVisibleSpan(content_span_id, content_id);
+ }
+
+ function reset_bd_form(form, select_content_id, content_span_id) {
+ if (reset_form(form)) {
+ change_content(select_content_id, content_span_id);
+ return true;
+ }
+ return false;
+ }
+
+ </script>
+ </div>
+
+
+
+<div tal:omit-tag="" metal:define-macro="form-scripts">
+ <style>
+ input { background-image: none; }
+ input.validation_error { border: medium double red; background-color: orange; }
+ input.selected { border: thin solid orange; }
+ input.form_button { background-color: #dee7ec; }
+ </style>
+
+ <script language="javascript" type="text/javascript">
+
+
+// validations
+
+function validate_text(elem, timeout, illegal_chars, reserved_words, min_length, max_length)
+{
+ var value = elem.value;
+
+ for (var i=0; i<value.length; i++) {
+ if (illegal_chars.indexOf(value[i]) != -1) {
+ return;
+ elem.className = 'validation_error';
+ display_warning(elem, timeout, 'Illegal characters are: \'' + illegal_chars + '\'');
+ return;
+ }
+ }
+
+ var res_list = reserved_words.split(';');
+ for (var i=0; i<res_list.length; i++) {
+ if (value == res_list[i] && value != '') {
+ return;
+ elem.className = 'validation_error';
+ display_warning(elem, timeout, 'Reserved words are: ' + res_list);
+ return;
+ }
+ }
+
+ if (value.length < min_length) {
+ return;
+ elem.className = 'validation_error';
+ display_warning(elem, timeout, 'Minimum length is ' + min_length);
+ return;
+ }
+
+ if (value.length > max_length) {
+ return;
+ elem.className = 'validation_error';
+ display_warning(elem, timeout, 'Maximum length is ' + max_length);
+ return;
+ }
+
+ elem.className = '';
+}
+
+
+function validate_int(elem, timeout, min, max, step)
+{
+ var value = elem.value;
+
+ for (var i=0; i<value.length; i++) {
+ if ('0123456789'.indexOf(value[i]) == -1) {
+ return;
+ elem.className = 'validation_error';
+ display_warning(elem, timeout, 'Only whole numbers are allowed');
+ return;
+ }
+ }
+
+ value = ((value - 0) / step) * step;
+
+ if (value < min) {
+ return;
+ elem.className = 'validation_error';
+ display_warning(elem, timeout, 'Minimum allowed value is ' + min);
+ return;
+ }
+
+ if (value > max) {
+ return;
+ elem.className = 'validation_error';
+ display_warning(elem, timeout, 'Maximum allowed value is ' + max);
+ return;
+ }
+
+ elem.className = '';
+}
+
+
+
+function validate_text_keypress(elem, event, timeout, illegal_chars, max_length)
+{
+ var ev = event;
+ if (!ev) ev = window.event;
+ var key = get_keycode(ev);
+
+ if (key == 8 || key == 9) return true;
+ else if (ev.which) ;
+ else if (document.selection) ;
+ else return true;
+
+ var ch = String.fromCharCode(key);
+
+ if (illegal_chars.indexOf(ch) != -1) {
+// display_warning(elem, timeout, 'Illegal characters are: \'' + illegal_chars + '\'');
+ return false;
+ }
+
+ if (elem.value.length + 1 > max_length) {
+// display_warning(elem, timeout, 'Maximum allowed length is ' + max_length);
+ return false;
+ }
+
+ return true;
+}
+
+function validate_int_keypress(elem, event, timeout)
+{
+ var ev = event;
+ if (!ev) ev = window.event;
+ var key = get_keycode(ev);
+
+ if (key == 8 || key == 9) return true;
+ else if (ev.which) ;
+ else if (document.selection) ;
+ else return true;
+
+ var ch = String.fromCharCode(key);
+
+ if ('0123456789'.indexOf(ch) == -1) {
+// display_warning(elem, timeout, 'Only whole numbers are allowed');
+ return false;
+ }
+
+ return true;
+}
+
+function get_keycode(ev)
+{
+ if (ev.keyCode)
+ return ev.keyCode;
+ else
+ return ev.which;
+}
+
+function display_warning(el, timeout, text)
+{
+ alert(text);
+ return;
+
+ var geom_obj = getGeom(el);
+
+ var warning_box = document.getElementById('warning_box');
+ if (!warning_box) {
+ alert(text);
+ return;
+ }
+
+ warning_box.innerHTML = text;
+ /*
+ warning_box.style.position = 'absolute'
+ warning_box.style.left = geom_obj.x + '';
+ warning_box.style.top = (geom_obj.y - 65) + '';
+ warning_box.style.display = 'inline';
+ */
+ warning_box.style.visibility = 'visible';
+ setTimeout("remove_warning()", (1000 * timeout));
+}
+
+function remove_warning()
+{
+ var warning_box = document.getElementById('warning_box');
+// warning_box.style.display = 'none';
+ warning_box.style.visibility = 'hidden';
+}
+
+function getGeom(el)
+{
+ var object = new Object();
+
+ object.x = el.offsetLeft;
+ object.y = el.offsetTop;
+ var parent = el.offsetParent;
+ object.width = el.offsetWidth;
+ object.height = el.offsetHeight;
+ while(parent != null) {
+ object.x += parent.offsetLeft;
+ object.y += parent.offsetTop;
+ parent = parent.offsetParent;
+ }
+ return object;
+}
+
+function reset_form(form) {
+ if (confirm('Do you really want to reset the form?')) {
+ form.reset();
+ for (i=0; i<form.length; i++)
+ form.elements[i].className = '';
+ return true;
+ }
+ return false;
+}
+
+
+
+
+
+
+function strip_left(txt) {
+ for (i=0; i<txt.length; i++) {
+ if (txt[i] == " " || txt[i] == "\n")
+ continue;
+ return txt.substr(i);
+ }
+ return txt;
+}
+
+
+// Apply is button, other ones are submits
+
+var tmp_submit_URL = "";
+var tmp_button_id = "";
+var tmp_prompt_msg = "";
+var tmp_form_id = "";
+
+function validate_and_submit_form_callback() {
+ if (xmlHttp_object.readyState == 4) {
+ if (xmlHttp_object.status == 200) {
+ res = xmlHttp_object.responseText;
+ res = strip_left(res);
+ if (res.substr(0, 2) == "OK") {
+ if (confirm(tmp_prompt_msg)) {
+ URL = tmp_submit_URL + 'action_type=Apply';
+ tmp_submit_URL = "";
+ window.location.assign(URL);
+ return;
+ }
+ } else {
+
+ // get elem_name & msg
+ var ind = res.indexOf(' ');
+ var elem_name = res.substr(0, ind);
+ var err_msg = strip_left(res.substr(ind));
+
+ form = document.getElementById(tmp_form_id);
+ for (i=0; i<form.length; i++) {
+ elem = form.elements[i];
+ name = elem.name;
+ if (name == elem_name)
+ elem.className = 'validation_error';
+ }
+
+ alert(err_msg);
+ }
+ } else {
+ alert("Error retrieving data from server");
+ }
+ if (tmp_button_id != "")
+ document.getElementById(tmp_button_id).disabled = false;
+ tmp_button_id = "";
+ }
+}
+function validate_and_submit_form(validation_URL, form_id, button_id, prompt_msg) {
+ form = document.getElementById(form_id);
+ tmp_prompt_msg = prompt_msg;
+ tmp_form_id = form_id;
+ tmp_submit_URL = form.action + '?';
+ URL = validation_URL + '?';
+ for (i=0; i<form.length; i++) {
+ elem = form.elements[i];
+ name = elem.name;
+ value = elem.value;
+ if (name != 'action_type' && name != '') {
+ if (elem.type == 'checkbox') {
+ if (elem.checked)
+ value = 'on';
+ else
+ value = 'off';
+ }
+ URL += name + '=' + value + '&';
+ tmp_submit_URL += name + '=' + value + '&';
+ }
+ }
+ URL += 'action_type=Validate';
+ initiate_async_get(URL, validate_and_submit_form_callback);
+ tmp_button_id = button_id;
+ if (tmp_button_id != "")
+ document.getElementById(tmp_button_id).disabled = true;
+}
+
+
+ </script>
+</div>
+
+
+<div tal:omit-tag="" metal:define-macro="single-visible-span">
+<!--
+ @media screen, print {
+ span.visible { visibility: visible; }
+ span.invisible { visibility: hidden; }
+ div.visible { display: block; }
+ div.invisible { height: 0px; width: 0px; overflow: hidden; }
+ }
+-->
+ <style type="text/css">
+ @media screen, print {
+ span.visible { display: block; }
+ span.invisible { display: none; }
+ div.visible { display: block; }
+ div.invisible { display: none; }
+ }
+ </style>
+ <script language="javascript" type="text/javascript">
+ function singleVisibleSpan(parent_id, child_id) {
+ parent = document.getElementById(parent_id);
+ for (var i=0; i < parent.childNodes.length; i++) {
+ var item = parent.childNodes[i];
+ if (item.nodeName == 'SPAN' || item.nodeName == 'span' || item.nodeName == 'DIV' || item.nodeName == 'div') {
+ if (item.id == child_id)
+ item.className = 'visible';
+ else if (item.className == 'visible')
+ item.className = 'invisible';
+ }
+ }
+ }
+ </script>
+</div>
+
+ <div metal:define-macro="display-BD">
+ <div metal:use-macro="here/form-macros/macros/forms-css"/>
+ <span tal:omit-tag=""
+ tal:define="predefines_test python:'display-BD: ' + str(bd_data) + storagename + properties_span_id"/>
+ <span tal:omit-tag=""
+ tal:define="mapper string:;
+ conts python:bd_data['contents'];
+ prefix prefix|bd_data/path;
+ prefix python:prefix + '_';
+ bd_form_id python:prefix + 'bd_form';
+ select_content_id python:prefix + 'select_content_id';
+ apply_button_id python:prefix + 'apply_button_id';
+ content_span_id python:prefix + 'content_span_id'">
+ <form tal:attributes="id bd_form_id;
+ method string:get">
+ <input tal:attributes="type string:hidden;
+ name string:pagetype;
+ value string:commit_changes"/>
+ <input tal:condition="not: bd_data/new"
+ tal:attributes="type string:hidden;
+ name string:object_type;
+ value string:bd"/>
+ <input tal:condition="bd_data/new"
+ tal:attributes="type string:hidden;
+ name string:object_type;
+ value string:bd_template"/>
+ <input tal:attributes="type string:hidden;
+ name string:mapper_id;
+ value bd_data/mapper_id"/>
+ <input tal:attributes="type string:hidden;
+ name string:mapper_type;
+ value bd_data/mapper_type"/>
+ <input tal:attributes="type string:hidden;
+ name string:bd_path;
+ value bd_data/path"/>
+ <input tal:attributes="type string:hidden;
+ name string:storagename;
+ value storagename"/>
+ <table class="form">
+ <caption>
+ <div align="left">
+ <h2>
+ <span tal:omit-tag=""
+ tal:condition="not: bd_data/new">
+ <span tal:replace="bd_data/pretty_type"/> '<span tal:replace="bd_data/pretty_name"/>' - <span tal:replace="bd_data/path"/>
+ </span>
+ <span tal:condition="bd_data/new"
+ tal:replace="bd_data/pretty_type"/>
+ </h2>
+ </div>
+ </caption>
+ <tr>
+ <th>
+ <div align="left">
+
+ </div>
+ </th>
+ <th>
+ <div align="left">
+ <span tal:replace="bd_data/pretty_type"/> Properties
+ </div>
+ </th>
+ <th>
+ <div align="left">
+ <table tal:condition="conts">
+ <tr>
+ <td>
+ Content<span tal:condition="python:len(conts) == 1"
+ tal:replace="string::"/>
+ </td>
+ <td>
+ <select tal:define="funct python:'change_content(\'' + select_content_id + '\', \'' + content_span_id + '\')'"
+ tal:condition="python:len(conts) > 1"
+ tal:attributes="id select_content_id;
+ name string:content_id;
+ onchange funct">
+ <span tal:omit-tag=""
+ tal:repeat="cont conts">
+ <option tal:attributes="value cont/id"/><span tal:replace="cont/name"/>
+ </span>
+ </select>
+ <span tal:define="cont python:conts[0]"
+ tal:condition="python:len(conts) == 1">
+ <input tal:attributes="id select_content_id;
+ type string:hidden;
+ name string:content_id;
+ value cont/id"/>
+ <span tal:replace="cont/name"/>
+ </span>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </th>
+ </tr>
+ <tr>
+ <td>
+ <table>
+ <tr>
+ <td align="center">
+ <img tal:attributes="src bd_data/icon"
+ style="width: 60px;"/>
+ </td>
+ </tr>
+ <tr>
+ <td align="center">
+ <table>
+ <span tal:omit-tag=""
+ tal:define="actions bd_data/actions"
+ tal:repeat="action actions">
+ <tr>
+ <td tal:define="act_name action/name;
+ act_msg action/msg;
+ act_link action/link"
+ align="center">
+ <span tal:condition="act_link">
+ <input tal:define="act_link python:act_link + '&storagename=' + storagename;
+ funct python:'window.location.assign(\'' + act_link + '\')'"
+ tal:attributes="type string:button;
+ name string:action_type;
+ value act_name;
+ onclick funct"
+ class="form_button"/>
+ </span>
+ <span tal:condition="not: act_link">
+ <input tal:condition="act_msg"
+ tal:attributes="type string:submit;
+ name string:action_type;
+ value act_name;
+ onclick python:'return confirm(\'' + act_msg + '\')'"
+ class="form_button"/>
+ <input tal:condition="not: act_msg"
+ tal:attributes="type string:submit;
+ name string:action_type;
+ value act_name"
+ class="form_button"/>
+ </span>
+ </td>
+ </tr>
+ </span>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ <td>
+ <span tal:omit-tag=""
+ tal:define="props bd_data/props">
+ <div metal:use-macro="here/form-macros/macros/display-props"/>
+ </span>
+ </td>
+ <td tal:condition="conts">
+ <span tal:attributes="id content_span_id">
+ <span tal:define="cont python:conts[0]"
+ tal:attributes="class string:visible;
+ id cont/id">
+ <div metal:use-macro="here/form-macros/macros/display-content"/>
+ </span>
+ <span tal:omit-tag=""
+ tal:repeat="cont python:conts[1:]">
+ <span tal:attributes="class string:invisible;
+ id cont/id">
+ <div metal:use-macro="here/form-macros/macros/display-content"/>
+ </span>
+ </span>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+ </td>
+ <td>
+ <div align="right"
+ tal:define="validate_url context/validate_html/absolute_url">
+ <input tal:attributes="type string:button;
+ name string:action_type;
+ value string:Reset;
+ onclick python:'return reset_bd_form(this.form, \'' + select_content_id + '\', \'' + content_span_id + '\')'"
+ class="form_button"/>
+ <input tal:condition="bd_data/new"
+ tal:define="prompt_msg python:'Do you really want to create ' + bd_data['pretty_type'] + '?'"
+ tal:attributes="id apply_button_id;
+ type string:button;
+ name string:action_type;
+ value string:Create;
+ onclick python:'return validate_and_submit_form(\'' + validate_url + '\', \'' + bd_form_id + '\', \'' + apply_button_id + '\', \'' + prompt_msg + '\')'"
+ class="form_button"/>
+ <input tal:condition="not: bd_data/new"
+ tal:define="prompt_msg python:'Do you really want to apply changes to ' + bd_data['pretty_type'] + ' \\\'' + bd_data['pretty_name'] + '\\\'?'"
+ tal:attributes="id apply_button_id;
+ type string:button;
+ name string:action_type;
+ value string:Apply;
+ onclick python:'return validate_and_submit_form(\'' + validate_url + '\', \'' + bd_form_id + '\', \'' + apply_button_id + '\', \'' + prompt_msg + '\')'"
+ class="form_button"/>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </form>
+ </span>
+ </div>
+
+
+
+
+ <div metal:define-macro="display-mapper">
+ <div metal:use-macro="here/form-macros/macros/forms-css"/>
+ <span tal:omit-tag=""
+ tal:define="predefines_test python:'display-mapper: ' + str(mapper) + storagename + properties_span_id"/>
+ <form tal:define="prefix prefix|mapper/mapper_id;
+ prefix python:prefix + '_';
+ mapper_form_id python:prefix + 'mapper_form_id';
+ apply_button_id python:prefix + 'apply_button_id'"
+ tal:attributes="id mapper_form_id;
+ method string:get">
+ <input tal:attributes="type string:hidden;
+ name string:pagetype;
+ value string:commit_changes"/>
+ <input tal:attributes="type string:hidden;
+ name string:object_type;
+ value string:mapper"/>
+ <input tal:attributes="type string:hidden;
+ name string:mapper_id;
+ value mapper/mapper_id"/>
+ <input tal:attributes="type string:hidden;
+ name string:mapper_type;
+ value mapper/mapper_type"/>
+ <input tal:attributes="type string:hidden;
+ name string:storagename;
+ value storagename"/>
+ <table class="form">
+ <caption>
+ <div align="left">
+ <h2>
+ <span tal:replace="mapper/pretty_type"/> '<span tal:replace="mapper/pretty_name"/>'
+ </h2>
+ </div>
+ </caption>
+ <tr>
+ <th>
+ <div align="left">
+
+ </div>
+ </th>
+ <th>
+ <div align="left">
+ <span tal:replace="mapper/pretty_type"/> Properties
+ </div>
+ <th>
+ </tr>
+ <tr>
+ <td>
+ <table>
+ <tr>
+ <td align="center">
+ <img tal:attributes="src mapper/icon"
+ style="width: 60px;"/>
+ </td>
+ </tr>
+ <tr>
+ <td align="center">
+ <table>
+ <span tal:omit-tag=""
+ tal:define="actions mapper/actions"
+ tal:repeat="action actions">
+ <tr>
+ <td tal:define="act_name action/name;
+ act_msg action/msg;
+ act_link action/link"
+ align="center">
+ <span tal:condition="act_link">
+ <input tal:define="act_link python:act_link + '&storagename=' + storagename;
+ funct python:'window.location.assign(\'' + act_link + '\')'"
+ tal:attributes="type string:button;
+ name string:action_type;
+ value act_name;
+ onclick funct"
+ class="form_button"/>
+ </span>
+ <span tal:condition="not: act_link">
+ <input tal:condition="act_msg"
+ tal:attributes="type string:submit;
+ name string:action_type;
+ value act_name;
+ onclick python:'return confirm(\'' + act_msg + '\')'"
+ class="form_button"/>
+ <input tal:condition="not: act_msg"
+ tal:attributes="type string:submit;
+ name string:action_type;
+ value act_name"
+ class="form_button"/>
+ </span>
+ </td>
+ </tr>
+ </span>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ <td>
+ <span tal:omit-tag=""
+ tal:define="props mapper/props">
+ <div metal:use-macro="here/form-macros/macros/display-props"/>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td>
+
+ </td>
+ <td>
+ <div align="right">
+ <input type="button"
+ name="action_type"
+ value="Reset"
+ onclick="return reset_form(this.form)"
+ class="form_button"/>
+ <input tal:define="prompt_msg python:'Do you really want to apply changes to ' + mapper['pretty_type'] + ' \\\'' + mapper['pretty_name'] + '\\\'?';
+ validate_url context/validate_html/absolute_url"
+ tal:attributes="id apply_button_id;
+ type string:button;
+ name string:action_type;
+ value string:Apply;
+ onclick python:'return validate_and_submit_form(\'' + validate_url + '\', \'' + mapper_form_id + '\', \'' + apply_button_id + '\', \'' + prompt_msg + '\')'"
+ class="form_button"/>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </form>
+ </div>
+
+
+
+
+ </body>
+</html>
/cvs/cluster/conga/luci/storage/icon_bd_LV.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/icon_bd_LV.png and - differ
/cvs/cluster/conga/luci/storage/icon_bd_LV_snapshot.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/icon_bd_LV_snapshot.png and - differ
/cvs/cluster/conga/luci/storage/icon_bd_crypto.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/icon_bd_crypto.png and - differ
/cvs/cluster/conga/luci/storage/icon_bd_ide.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/icon_bd_ide.png and - differ
/cvs/cluster/conga/luci/storage/icon_bd_multipath.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/icon_bd_multipath.png and - differ
/cvs/cluster/conga/luci/storage/icon_bd_net.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/icon_bd_net.png and - differ
/cvs/cluster/conga/luci/storage/icon_bd_partition.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/icon_bd_partition.png and - differ
/cvs/cluster/conga/luci/storage/icon_bd_raid.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/icon_bd_raid.png and - differ
/cvs/cluster/conga/luci/storage/icon_bd_scsi.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/icon_bd_scsi.png and - differ
/cvs/cluster/conga/luci/storage/icon_mapper_PT.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/icon_mapper_PT.png and - differ
/cvs/cluster/conga/luci/storage/icon_mapper_VG.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/icon_mapper_VG.png and - differ
/cvs/cluster/conga/luci/storage/icon_mapper_crypto.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/icon_mapper_crypto.png and - differ
/cvs/cluster/conga/luci/storage/icon_mapper_multipath.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/icon_mapper_multipath.png and - differ
/cvs/cluster/conga/luci/storage/icon_mapper_raid.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/icon_mapper_raid.png and - differ
/cvs/cluster/conga/luci/storage/index_html,v --> standard output
revision 1.1
--- conga/luci/storage/index_html
+++ - 2006-06-30 17:00:11.754278000 +0000
@@ -0,0 +1,296 @@
+<metal:page define-macro="master"><metal:doctype define-slot="doctype"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></metal:doctype>
+<metal:block define-slot="top_slot" />
+<metal:block use-macro="here/global_defines/macros/defines" />
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xml:lang="en"
+ lang="en"
+ tal:attributes="lang language;
+ xml:lang language">
+
+ <head metal:use-macro="here/header/macros/html_header">
+
+
+
+
+
+ <metal:fillbase fill-slot="base">
+ <metal:baseslot define-slot="base">
+ <base href="" tal:attributes="href here/renderBase" />
+ </metal:baseslot>
+ </metal:fillbase>
+
+ <metal:headslot fill-slot="head_slot"
+ tal:define="lang language;
+ charset site_properties/default_charset|string:utf-8">
+
+ <metal:cache use-macro="here/global_cache_settings/macros/cacheheaders">
+ Get the global cache headers located in global_cache_settings.
+ </metal:cache>
+
+ <metal:headslot define-slot="head_slot" />
+ <tal:comment replace="nothing"> A slot where you can insert elements in the header from a template </tal:comment>
+ </metal:headslot>
+
+ <metal:cssslot fill-slot="css_slot">
+ <tal:comment replace="nothing"> A slot where you can insert CSS in the header from a template </tal:comment>
+
+ <style type="text/css"><!-- @import url(./clusterportlet.css); --></style>
+ <metal:cssslot define-slot="css_slot" />
+ </metal:cssslot>
+
+ <metal:javascriptslot fill-slot="javascript_head_slot">
+ <tal:comment replace="nothing"> A slot where you can insert javascript in the header from a template </tal:comment>
+ <metal:javascriptslot define-slot="javascript_head_slot">
+
+
+
+
+
+
+<!-- async helper functions -->
+<script language="javascript" type="text/javascript">
+
+var xmlHttp_object = false;
+
+function initiate_async_get(url, funct) {
+ xmlHttp_object = false;
+
+ /*@cc_on @*/
+ /*@if (@_jscript_version >= 5)
+ try {
+ xmlHttp_object = new ActiveXObject("Msxml2.XMLHTTP");
+ } catch (e) {
+ try {
+ xmlHttp_object = new ActiveXObject("Microsoft.XMLHTTP");
+ } catch (e2) {
+ xmlHttp_object = false;
+ }
+ }
+ @end @*/
+
+ if (!xmlHttp_object && typeof XMLHttpRequest != 'undefined') {
+ xmlHttp_object = new XMLHttpRequest();
+ }
+
+ if (xmlHttp_object) {
+ xmlHttp_object.open("GET", url, true);
+ xmlHttp_object.onreadystatechange = funct;
+ xmlHttp_object.send(null);
+ } else {
+ alert("Unable to initiate async GET");
+ }
+}
+
+
+
+var span_to_replace = "";
+var replace_span_button_to_disable_id = "";
+
+function replace_span_content_callback() {
+ if (xmlHttp_object.readyState == 4) {
+ if (xmlHttp_object.status == 200) {
+ var response = xmlHttp_object.responseText;
+ document.getElementById(span_to_replace).innerHTML = response;
+ } else {
+ alert("Error retrieving data from server");
+ }
+ if (replace_span_button_to_disable_id != "")
+ document.getElementById(replace_span_button_to_disable_id).disabled = false;
+ replace_span_button_to_disable_id = '';
+ }
+}
+function replace_span_content(span_id, url, button_to_disable_id) {
+ span_to_replace = span_id;
+ replace_span_button_to_disable_id = button_to_disable_id;
+ initiate_async_get(url, replace_span_content_callback);
+ if (replace_span_button_to_disable_id != "")
+ document.getElementById(replace_span_button_to_disable_id).disabled = true;
+}
+
+</script>
+
+
+
+
+
+
+
+
+ </metal:javascriptslot>
+ </metal:javascriptslot>
+
+
+
+
+ </head>
+
+ <body tal:attributes="class here/getSectionFromURL;
+ dir python:test(isRTL, 'rtl', 'ltr')">
+ <div id="visual-portal-wrapper">
+
+ <div id="portal-top" i18n:domain="plone">
+
+ <div id="portal-header">
+ <a class="hiddenStructure"
+ accesskey="2"
+ tal:attributes="href string:${request/ACTUAL_URL}#documentContent"
+ i18n:translate="label_skiptocontent">Skip to content.</a>
+
+ <a class="hiddenStructure"
+ accesskey="6"
+ tal:attributes="href string:${request/ACTUAL_URL}#portlet-navigation-tree"
+ i18n:translate="label_skiptonavigation">Skip to navigation</a>
+<!--
+ <div metal:use-macro="here/global_siteactions/macros/site_actions">
+ Site-wide actions (Contact, Sitemap, Help, Style Switcher etc)
+ </div>
+-->
+<!--
+ <div metal:use-macro="here/global_searchbox/macros/quick_search">
+ The quicksearch box, normally placed at the top right
+ </div>
+-->
+ <a metal:use-macro="here/main_logo/macros/main_portal_logo">
+ The portal logo, linked to the portal root
+ </a>
+<!--
+ <div metal:use-macro="here/global_skinswitcher/macros/skin_tabs">
+ The skin switcher tabs. Based on which role you have, you
+ get a selection of skins that you can switch between.
+ </div>
+-->
+ <div metal:use-macro="here/main_sections/macros/portal_tabs">
+ The global sections tabs. (Welcome, News etc)
+ </div>
+ </div>
+
+ <div metal:use-macro="here/main_personalbar/macros/personal_bar">
+ The personal bar. (log in, logout etc...)
+ </div>
+<!--
+ <div metal:use-macro="here/main_pathbar/macros/path_bar">
+ The breadcrumb navigation ("you are here")
+ </div>
+ </div>
+-->
+ <div class="visualClear"><!-- --></div>
+
+ <tal:comment replace="nothing">
+ The wrapper table. It contains the three columns. There's a table-less
+ alternative in the plone_tableless skin layer that you can use if you
+ prefer layouts that don't use tables.
+ </tal:comment>
+ <span tal:omit-tag=""
+ tal:define="global pagetype request/pagetype|nothing;
+ global storagename request/storagename|nothing"/>
+ <span tal:omit-tag=""
+ tal:condition="not: pagetype">
+ <span tal:omit-tag=""
+ tal:define="global pagetype python:'0'"/>
+ </span>
+ <span tal:omit-tag=""
+ tal:define="stosystemss context/systems/storage/objectItems;
+ global allowed_systems python:here.allowed_systems(user, stosystemss);
+ global access_to_host_allowed python:here.access_to_host_allowed(storagename, allowed_systems)"/>
+ <span tal:omit-tag=""
+ tal:define="global ricci python:here.get_ricci_communicator(storagename, allowed_systems);
+ global storage_report nothing"/>
+ <span tal:omit-tag=""
+ tal:condition="storagename"
+ tal:define="report_cached python:here.is_storage_report_cached(request.SESSION, storagename)">
+ <span tal:omit-tag=""
+ tal:condition="report_cached">
+ <span tal:omit-tag=""
+ tal:define="global storage_report python:here.get_storage_report(ricci, request.SESSION)"/>
+ </span>
+ </span>
+
+ <table id="portal-columns">
+ <tbody>
+ <tr>
+ <tal:comment replace="nothing"> Start of the left column </tal:comment>
+ <td id="portal-column-one"
+ metal:define-slot="column_one_slot"
+ tal:condition="sl">
+ <div class="visualPadding">
+ <metal:portlets define-slot="portlets_one_slot">
+ <metal:leftportlets use-macro="here/clu_portlet_fetcher/macros/left_column">
+ This instruction gets the portlets (boxes) for the left column.
+ </metal:leftportlets>
+ </metal:portlets>
+
+ </div>
+ </td>
+ <tal:comment replace="nothing"> End of the left column </tal:comment>
+
+ <tal:comment replace="nothing"> Start of main content block </tal:comment>
+ <td id="portal-column-content">
+ <metal:block define-slot="content">
+ <div id="content" metal:define-macro="content">
+ <div class="documentContent" id="region-content">
+ <a name="documentContent"></a>
+ <metal:bodytext metal:define-slot="main" tal:content="nothing">
+ Page body text
+ </metal:bodytext>
+ <span tal:omit-tag="" tal:condition="not: storagename">
+ <h1>Choose a storage system to administer</h1>
+ </span>
+ <span tal:omit-tag="" tal:condition="storagename">
+ <h1 tal:content="storagename"></h1>
+ </span>
+ </div>
+ </div>
+ </metal:block>
+ <metal:main-form-content use-macro="here/form-chooser/macros/main-form">
+ <h1>Future Site of Forms</h1>
+ </metal:main-form-content>
+ </td>
+ <tal:comment replace="nothing"> End of main content block </tal:comment>
+
+<!--
+ <tal:comment replace="nothing"> Start of right column </tal:comment>
+ <td id="portal-column-two"
+ metal:define-slot="column_two_slot"
+ tal:condition="sr">
+ <div class="visualPadding">
+ <metal:portlets define-slot="portlets_two_slot">
+ <metal:rightportlets use-macro="here/portlets_fetcher/macros/right_column">
+ This instruction gets the portlets (boxes) for the right column.
+ </metal:rightportlets>
+ </metal:portlets>
+
+ </div>
+ </td>
+ <tal:comment replace="nothing"> End of the right column </tal:comment>
+-->
+ </tr>
+ </tbody>
+ </table>
+ <tal:comment replace="nothing"> end column wrapper </tal:comment>
+
+ <div class="visualClear"><!-- --></div>
+
+
+ <hr class="netscape4" />
+
+ <metal:block i18n:domain="plone">
+
+ <metal:footer use-macro="here/main_footer/macros/portal_footer">
+ Footer
+ </metal:footer>
+
+ <metal:colophon use-macro="here/colophon/macros/colophon">
+ The colophon area - contains details about the production of
+ the site. Typically "powered by" buttons, standards, tools used.
+ </metal:colophon>
+ </metal:block>
+
+ </div>
+
+
+
+
+</body>
+</html>
+</metal:page>
/cvs/cluster/conga/luci/storage/main_footer,v --> standard output
revision 1.1
--- conga/luci/storage/main_footer
+++ - 2006-06-30 17:00:11.833370000 +0000
@@ -0,0 +1,37 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<body>
+<div id="portal-footer" metal:define-macro="portal_footer">
+
+<p>
+ <span i18n:translate="description_copyright" tal:omit-tag="">
+ The
+ <span>
+ <a href="http://redhat.com">Conga™ Cluster and Storage Management System</a>
+ </span>
+ is Copyright
+ <acronym title="Copyright" i18n:name="copyright" i18n:attributes="title title_copyright;">©</acronym>
+ 2000-<span i18n:name="current_year"
+ tal:define="now modules/DateTime/DateTime"
+ tal:content="now/year" />
+ by
+ <span>
+ <a href="http://redhat.com/Conga">Red Hat, Luci, Ricci, </a>
+ </span>
+ et al.
+ </span>
+</p>
+
+<p>
+
+
+ <span i18n:translate="description_license">
+ Distributed under the
+ <span i18n:name="license">
+ <a href="http://creativecommons.org/licenses/GPL/2.0/" i18n:translate="label_gnu_gpl_licence">GNU GPL license</a>
+ </span>.
+ </span>
+</p>
+
+</div>
+</body>
+</html>
\ No newline at end of file
/cvs/cluster/conga/luci/storage/main_logo,v --> standard output
revision 1.1
--- conga/luci/storage/main_logo
+++ - 2006-06-30 17:00:11.911094000 +0000
@@ -0,0 +1,15 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+ i18n:domain="plone">
+
+<body>
+
+<!-- THE PORTAL LOGO DEFINITION -->
+<h1 id="main-portal-logo" metal:define-macro="main_portal_logo">
+ <a href="/" >
+ Luci
+ </a>
+</h1>
+
+
+</body>
+</html>
/cvs/cluster/conga/luci/storage/main_pathbar,v --> standard output
revision 1.1
--- conga/luci/storage/main_pathbar
+++ - 2006-06-30 17:00:11.989317000 +0000
@@ -0,0 +1,40 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+ i18n:domain="plone">
+
+<body>
+
+<!-- THE PATHBAR (breadcrumbs) DEFINITION -->
+<div metal:define-macro="path_bar"
+ id="portal-breadcrumbs"
+ tal:define="breadcrumbs python:putils.createBreadCrumbs(here);
+ portal_url portal_url|utool">
+
+ <span id="breadcrumbs-you-are-here" i18n:translate="you_are_here">You
+are here:</span>
+ <a i18n:translate="tabs_home" tal:attributes="href python:portal_url">Home</a>
+ <span tal:condition="breadcrumbs" class="breadcrumbSeparator">
+ <tal:ltr condition="not: isRTL">→</tal:ltr>
+ <tal:rtl condition="isRTL">←</tal:rtl>
+ </span>
+ <span tal:repeat="crumb breadcrumbs"
+ tal:attributes="dir python:test(isRTL, 'rtl', 'ltr')">
+ <tal:last tal:define="is_last repeat/crumb/end">
+ <a href="#"
+ tal:omit-tag="not: crumb/absolute_url"
+ tal:condition="python:not is_last"
+ tal:attributes="href crumb/absolute_url"
+ tal:content="crumb/Title">
+ crumb
+ </a>
+ <span class="breadcrumbSeparator" tal:condition="not: is_last">
+ <tal:ltr condition="not: isRTL">→</tal:ltr>
+ <tal:rtl condition="isRTL">←</tal:rtl>
+ </span>
+ <span tal:condition="is_last"
+ tal:content="crumb/Title">crumb</span>
+ </tal:last>
+ </span>
+
+</div>
+</body>
+</html>
/cvs/cluster/conga/luci/storage/main_personalbar,v --> standard output
revision 1.1
--- conga/luci/storage/main_personalbar
+++ - 2006-06-30 17:00:12.067083000 +0000
@@ -0,0 +1,44 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+ i18n:domain="plone">
+
+<body>
+
+<!-- THE PERSONAL BAR DEFINITION -->
+
+<div metal:define-macro="personal_bar"
+ tal:define="display_actions python:user_actions[:-1]+global_actions+user_actions[-1:];
+ getIconFor nocall:putils/getIconFor;"
+ tal:omit-tag="">
+
+<h5 class="hiddenStructure" i18n:translate="heading_personal_tools">Personal tools</h5>
+
+<ul id="portal-personaltools">
+ <li class="portalUser"
+ tal:condition="not: isAnon"><a
+ id="user-name"
+ tal:omit-tag="not: mtool/getHomeFolder"
+ tal:attributes="href string:${mtool/getHomeUrl}">
+ <span class="visualCaseSensitive"
+ tal:replace="user/getUserName">
+ John
+ </span>
+ </a></li>
+
+ <tal:actions tal:repeat="action python:here.getOrderedUserActions(keyed_actions=keyed_actions)">
+ <li tal:define="icon python:getIconFor(action['category'], action['id'], None);
+ class_name string:actionicon-${action/category}-${action/id};
+ class_name python:test(icon, class_name, nothing);"
+ tal:attributes="class class_name">
+ <a href=""
+ tal:attributes="href action/url;
+ class python:test(icon, 'visualIconPadding', nothing);">
+ <tal:actionname i18n:translate="" tal:content="action/name">dummy</tal:actionname>
+ </a>
+ </li>
+ </tal:actions>
+
+</ul>
+</div>
+
+</body>
+</html>
/cvs/cluster/conga/luci/storage/main_sections,v --> standard output
revision 1.1
--- conga/luci/storage/main_sections
+++ - 2006-06-30 17:00:12.147204000 +0000
@@ -0,0 +1,27 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+ i18n:domain="plone">
+
+<body>
+
+<!-- THE SECTION TABS DEFINITION -->
+<div metal:define-macro="portal_tabs"
+ tal:omit-tag=""
+ tal:define="tabs python:here.getTabs(request)">
+
+ <h5 class="hiddenStructure" i18n:translate="heading_sections">Sections</h5>
+
+ <ul id="portal-globalnav">
+ <tal:tabs tal:repeat="tab tabs">
+ <li tal:attributes="id string:portaltab-${tab/Title};
+ class python:test(tab['isSelected'], 'selected', 'plain');">
+ <a href=""
+ tal:content="tab/Title"
+ tal:attributes="href tab/Taburl;
+ title tab/Description|nothing">
+ Tab Name
+ </a></li></tal:tabs>
+ </ul>
+</div>
+
+</body>
+</html>
/cvs/cluster/conga/luci/storage/mappings_macros,v --> standard output
revision 1.1
--- conga/luci/storage/mappings_macros
+++ - 2006-06-30 17:00:12.226430000 +0000
@@ -0,0 +1,133 @@
+<html>
+ <head>
+ <title tal:content="template/title">The title</title>
+ </head>
+ <body>
+
+ <h2><span tal:replace="here/title_or_id">content title or id</span>
+ <span tal:condition="template/title"
+ tal:replace="template/title">optional template title</span></h2>
+
+ This is Page Template <em tal:content="template/id">template id</em>.
+ </body>
+
+
+
+
+
+
+
+
+ <div metal:define-macro="draw-base-cyl"
+ tal:define="cap python:cyl['color'] + '_cap_40.png'">
+
+ <div tal:omit-tag=""
+ tal:define="cyls cyl/cyls;
+ tmp python:cyls.reverse()"
+ tal:repeat="subcyl cyls">
+ <div tal:define="beg subcyl/beg;
+ end subcyl/end;
+ id subcyl/id;
+ size python:end - beg;
+ right_end python:subcyl['color'] + '_right_end_40.png';
+ bar python:subcyl['color'] + '_bar_40.png'"
+ tal:attributes="class string:visible;
+ id id;
+ style python:here.add_commas('position:absolute', here.add_commas('left: ' + str(beg), 'top: 0'))">
+ <img tal:attributes="src right_end;
+ height string:40;
+ width string:10;
+ style python:here.add_commas('position:absolute', here.add_commas('left: ' + str(size), 'top: 0'))"/>
+ <img tal:attributes="src bar;
+ height string:40;
+ width python:str(size);
+ style python:here.add_commas('position:absolute', here.add_commas('left: ' + str(0), 'top: 0'))"/>
+ </div>
+ </div>
+
+ <img tal:define="one_tmp_assignment python:here.add_commas('position:absolute', here.add_commas('left: -' + str(curve_width), 'top: 0'))"
+ tal:attributes="src cap;
+ height string:40;
+ width string:20;
+ style one_tmp_assignment"/>
+
+ </div>
+
+
+
+ <div metal:define-macro="draw-highlights">
+
+ <div tal:omit-tag=""
+ tal:repeat="high highs">
+ <div tal:define="beg high/beg;
+ end high/end;
+ size python:end - beg;
+ id high/id"
+ tal:attributes="class string:invisible;
+ id id;
+ style python:here.add_commas('position:absolute', here.add_commas('left: ' + str(beg), 'top: 0'))">
+ <span tal:omit-tag=""
+ tal:condition="python:high['type'] == 'select'">
+ <div metal:use-macro="here/mappings_macros/macros/draw-select"/>
+ </span>
+ <span tal:omit-tag=""
+ tal:condition="python:high['type'] == 'snapshot'">
+ <div metal:use-macro="here/mappings_macros/macros/draw-snapshot"/>
+ </span>
+ <span tal:omit-tag=""
+ tal:condition="python:high['type'] == 'snapshot-origin'">
+ <div metal:use-macro="here/mappings_macros/macros/draw-snapshot-origin"/>
+ </span>
+ </div>
+ </div>
+
+ </div>
+
+
+ <div metal:define-macro="draw-select">
+ <span tal:omit-tag=""
+ tal:condition="python:size > 0 and size < curve_width">
+ <span tal:repeat="off python:range(size)">
+ <img tal:attributes="src string:selection_1px_40.png;
+ height string:40;
+ style python:here.add_commas('position:absolute', here.add_commas('left: ' + str(off), 'top: 0'))"/>
+ </span>
+ </span>
+ <span tal:omit-tag=""
+ tal:condition="python:size >= curve_width">
+ <img tal:attributes="src string:selection_left_end_40.png;
+ height string:40;
+ width string:10;
+ style python:here.add_commas('position:absolute', here.add_commas('left: ' + str(0), 'top: 0'))"/>
+ <img tal:attributes="src string:selection_bar_40.png;
+ height string:40;
+ width python:str(size - curve_width);
+ style python:here.add_commas('position:absolute', here.add_commas('left: ' + str(curve_width), 'top: 0'))"/>
+ <img tal:attributes="src string:selection_right_end_40.png;
+ height string:40;
+ width string:10;
+ style python:here.add_commas('position:absolute', here.add_commas('left: ' + str(size), 'top: 0'))"/>
+ </span>
+ </div>
+
+ <div metal:define-macro="draw-snapshot">
+ <div style="height:40"></div>
+ <div tal:attributes="style python:here.add_commas('position:absolute', 'left: ' + str(size/2-12))">
+ <img src="snapshot.gif" style="width: 25px; height: 20px;"/>
+ </div>
+ </div>
+
+ <div metal:define-macro="draw-snapshot-origin">
+<!-- <div style="position: absolute; top: -3">
+ <div style="border-top: medium dotted red; border-bottom: medium dotted red"> -->
+ <div>
+ <div style="border-bottom: medium dotted #0000FF">
+ <div tal:attributes="style python:here.add_commas('height: 40', 'width: ' + str(size))"></div>
+ </div>
+ </div>
+ </div>
+
+
+
+
+</html>
/cvs/cluster/conga/luci/storage/mappings_provider,v --> standard output
revision 1.1
--- conga/luci/storage/mappings_provider
+++ - 2006-06-30 17:00:12.305904000 +0000
@@ -0,0 +1,227 @@
+<html>
+
+<span tal:omit-tag=""
+ tal:define="global pagetype request/pagetype|nothing;
+ global storagename request/storagename|nothing"/>
+<span tal:omit-tag=""
+ tal:condition="not: pagetype">
+ <span tal:omit-tag=""
+ tal:define="global pagetype python:'0'"/>
+</span>
+<span tal:omit-tag=""
+ tal:define="stosystemss context/systems/storage/objectItems;
+ global allowed_systems python:here.allowed_systems(user, stosystemss);
+ global access_to_host_allowed python:here.access_to_host_allowed(storagename, allowed_systems)"/>
+<span tal:omit-tag=""
+ tal:define="global ricci python:here.get_ricci_communicator(storagename, allowed_systems);
+ global storage_report python:here.get_storage_report(ricci, request.SESSION)"/>
+
+<span tal:omit-tag=""
+ tal:define="global cyl_width python:600;
+ global X_offset python:30;
+ global Y_offset python:30;
+ global curve_width python:10;
+ global mapper python:here.get_mapper_data(storage_report, request['mapper_id']);
+ global mapp_info python:here.get_mappings_info(mapper, cyl_width)"/>
+
+<head>
+ <title tal:content="mapper/pretty_name">The title</title>
+
+ <script>
+
+ function ellipse(y) {
+ if (y == 0)
+ return 2;
+
+ if (y == 1)
+ return 3;
+
+ if (y == 2)
+ return 4;
+
+ if (y == 3)
+ return 5;
+
+ if (y == 4)
+ return 5;
+
+ if (y == 5)
+ return 6;
+
+ if (y == 6)
+ return 6;
+
+ if (y == 7)
+ return 7;
+
+ if (y == 8)
+ return 7;
+
+ if (y == 9)
+ return 7;
+
+ if (y == 10)
+ return 8;
+
+ if (y == 11)
+ return 8;
+
+ if (y == 12)
+ return 8;
+
+ if (y == 13)
+ return 8;
+
+ if (y > 26)
+ return ellipse(40 - y);
+
+ else
+ return 9;
+ }
+
+ var properties_span_id = '';
+ var current_selection = '';
+
+ function select_subcyl(id, h_data) {
+ var old_selection = current_selection;
+ unselect_cyl(old_selection, h_data);
+ if (id == old_selection)
+ current_selection = h_data[0][0];
+ else
+ current_selection = id;
+ display_props(h_data);
+ }
+ function unselect_cyl(id, h_data) {
+ for (var i=0; i<h_data.length; i++) {
+ var t_id = h_data[i][0];
+ if (t_id == id) {
+ var list = h_data[i][1];
+ for (var j=0; j<list.length; j++) {
+ var el = document.getElementById(list[j]);
+ el.className = 'invisible';
+ }
+ }
+ }
+ current_selection = '';
+ }
+ function display_props(h_data) {
+ for (var i=0; i<h_data.length; i++) {
+ var id = h_data[i][0];
+ if (id == current_selection) {
+ var list = h_data[i][1];
+ for (var j=0; j<list.length; j++) {
+ var el = document.getElementById(list[j]);
+ el.className = 'visible';
+ }
+ }
+ }
+ parent = top.document.getElementById(properties_span_id);
+ for (var i=0; i < parent.childNodes.length; i++) {
+ var item = parent.childNodes[i];
+ if (item.nodeName == 'SPAN' || item.nodeName == 'span' || item.nodeName == 'DIV' || item.nodeName == 'div') {
+ if (item.id == current_selection)
+ item.className = 'visible';
+ else if (item.className == 'visible')
+ item.className = 'invisible';
+ }
+ }
+ }
+
+
+
+ function cyl_click(X, Y, c_data, h_data) {
+ if (Y < 0 || Y > 40)
+ return;
+ var x = X - ellipse(Y);
+ var y = Y;
+ for (var i=0; i<c_data.length; i++) {
+ var elem = c_data[i];
+ var id = elem[0];
+ var beg = elem[1][0];
+ var end = elem[1][1];
+ if (x > beg && x < end)
+ select_subcyl(id, h_data);
+ }
+ }
+
+ </script>
+
+ <style>
+
+ div.visible { visibility: visible; }
+ div.invisible { visibility: hidden; }
+
+ </style>
+
+
+</head>
+
+<body tal:define="onload_c python:'properties_span_id = \'' + mapper['mapper_id'] + '_properties_span_id\'';
+ onload_c python:here.add_commas(onload_c, 'current_selection = \'' + mapp_info['mapper']['mapper_id'] + '\'');
+ onload_c python:here.add_commas(onload_c, 'display_props(' + mapp_info['js'] + ')')"
+ tal:attributes="onload onload_c">
+
+
+
+
+
+<span>
+
+ <!-- upper cylinder -->
+ <div tal:define="cyl mapp_info/upper_cyl;
+ X_offset python:X_offset + cyl['offset']"
+ tal:condition="cyl/cyls"
+ tal:attributes="style python:here.add_commas('position:absolute', here.add_commas('left: ' + str(X_offset), 'top: ' + str(Y_offset)))">
+
+ <div tal:define="one_temp_assignment python:here.add_commas('position:absolute', here.add_commas('left: ' + str(curve_width), 'top: 0'))"
+ tal:attributes="onmousedown python:'cyl_click(event.clientX-' + str(curve_width) + '-' + str(X_offset) + ', event.clientY-' + str(Y_offset) + ', ' + cyl['js'] + ', ' + mapp_info['js'] + ')';
+ style python:here.add_commas('cursor: pointer', one_temp_assignment);
+ id string:upper_cylinder">
+
+ <!-- base -->
+ <div metal:use-macro="here/mappings_macros/macros/draw-base-cyl"/>
+
+ <!-- highlights -->
+ <span tal:omit-tag=""
+ tal:define="highs cyl/highs">
+ <div metal:use-macro="here/mappings_macros/macros/draw-highlights"/>
+ </span>
+
+
+ </div>
+ </div>
+
+
+ <!-- lower cylinder -->
+ <div tal:define="cyl mapp_info/lower_cyl;
+ lower_Y_offset python:Y_offset + 80;
+ X_offset python:X_offset + cyl['offset']"
+ tal:condition="cyl/cyls"
+ tal:attributes="style python:here.add_commas('position:absolute', here.add_commas('left: ' + str(X_offset), 'top: ' + str(lower_Y_offset)))">
+
+ <div tal:define="one_temp_assignment python:here.add_commas('position:absolute', here.add_commas('left: ' + str(curve_width), 'top: 0'))"
+ tal:attributes="onmousedown python:'cyl_click(event.clientX-' + str(curve_width) + '-' + str(X_offset) + ', event.clientY-' + str(lower_Y_offset) + ', ' + cyl['js'] + ', ' + mapp_info['js'] + ')';
+ style python:here.add_commas('cursor: pointer', one_temp_assignment);
+ id string:lower_cylinder">
+
+ <!-- base -->
+ <div metal:use-macro="here/mappings_macros/macros/draw-base-cyl"/>
+
+ <!-- highlights -->
+ <span tal:omit-tag=""
+ tal:define="highs cyl/highs">
+ <div metal:use-macro="here/mappings_macros/macros/draw-highlights"/>
+ </span>
+
+
+ </div>
+ </div>
+
+
+</span>
+
+
+
+
+ </body>
+</html>
/cvs/cluster/conga/luci/storage/portlet_cluconfig,v --> standard output
revision 1.1
--- conga/luci/storage/portlet_cluconfig
+++ - 2006-06-30 17:00:12.386487000 +0000
@@ -0,0 +1,60 @@
+<html xmlns:tal="http://xml.zope.org/namespaces/tal"
+ xmlns:metal="http://xml.zope.org/namespaces/metal">
+
+<body>
+
+
+<div metal:define-macro="stochooseportlet"
+ tal:omit-tag=""
+ tal:define="global data python:here.createStorageChooser(request, stosystems)">
+ <dl class="portlet" id="portlet-cluconfig-tree">
+ <dt class="portletHeader">
+ <a href="#">
+ storage
+ </a>
+ </dt>
+ <dd class="portletItemSingle">
+ <ul class="portletCluConfigTree cluConfigTreeLevel0">
+ <tal:clucfgtree define=" level python:1;
+ children python:data.get('children',[]);
+ show_children python:True;
+ isNaviTree python:False;">
+ <metal:main metal:use-macro="here/portlet_cluconfig_macro/macros/cluconfig_main" />
+ </tal:clucfgtree>
+ </ul>
+ </dd>
+ </dl>
+</div>
+
+
+<div metal:define-macro="stoconfigportlet"
+ tal:omit-tag=""
+ tal:define="global data python:here.createStorageConfigTree(request, storage_report)">
+ <dl class="portlet" id="portlet-cluconfig-tree">
+ <dt class="portletHeader">
+<!--
+ <a href="#" tal:attributes="href python:here.getClusterURL(request, modelb)">
+ <div tal:omit-tag="" tal:content="python: here.getClusterName(modelb)" />
+ </a>
+-->
+ <a href="#" tal:attributes="href python:here.getStorageURL(request, storagename)">
+ <div tal:omit-tag="" tal:content="storagename" />
+ </a>
+ </dt>
+ <dd class="portletItemSingle">
+ <ul class="portletCluConfigTree cluConfigTreeLevel0">
+
+ <tal:clucfgtree define=" level python:1;
+ children python:data.get('children',[]);
+ show_children python:True;
+ isNaviTree python:False;">
+ <metal:main metal:use-macro="here/portlet_cluconfig_macro/macros/cluconfig_main" />
+ </tal:clucfgtree>
+ </ul>
+ </dd>
+ </dl>
+</div>
+
+
+</body>
+</html>
/cvs/cluster/conga/luci/storage/portlet_cluconfig_macro,v --> standard output
revision 1.1
--- conga/luci/storage/portlet_cluconfig_macro
+++ - 2006-06-30 17:00:12.469267000 +0000
@@ -0,0 +1,41 @@
+<html>
+<body>
+<metal:main define-macro="cluconfig_main">
+<tal:cfgitem repeat="item children">
+<li class="cluConfigTreeItem visualNoMarker"
+ tal:define="parent_shows_children show_children|nothing;
+ children item/children|nothing;
+ cur_item item/currentItem;"
+ tal:condition="python: (cur_item or parent_shows_children or children)">
+
+ <tal:level define="item_type_class python: 'type-' + item['cfg_type'];">
+ <div tal:attributes="class item_type_class">
+ <a tal:condition="cur_item"
+ tal:attributes="href item/absolute_url;
+ title item/Description|nothing;
+ class string: cluConfigTreeCurrentItem visualIconPadding"
+ tal:content="item/Title|nothing">
+ Selected Item Title</a>
+ <tal:children condition="python: parent_shows_children or children">
+ <a tal:condition="not: cur_item"
+ tal:attributes="href item/absolute_url;
+ title item/Description|nothing;
+ class string: visualIconPadding;"
+ tal:content="item/Title|nothing">
+ Unselected Item Title</a>
+ </tal:children>
+ </div>
+
+ <ul tal:attributes="class python:'cluConfigTree cluConfigTreeLevel'+str(level)"
+ tal:define="show_children item/show_children| python:True;
+ level python:level+1;"
+ tal:condition="python: (show_children or isNaviTree) and children">
+ <metal:recurse use-macro="here/portlet_cluconfig_macro/macros/cluconfig_main"/>
+ </ul>
+ </tal:level>
+</li>
+</tal:cfgitem>
+</metal:main>
+</body>
+</html>
+
/cvs/cluster/conga/luci/storage/red_bar_40.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/red_bar_40.png and - differ
/cvs/cluster/conga/luci/storage/red_cap_40.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/red_cap_40.png and - differ
/cvs/cluster/conga/luci/storage/red_right_end_40.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/red_right_end_40.png and - differ
/cvs/cluster/conga/luci/storage/selection_1px_40.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/selection_1px_40.png and - differ
/cvs/cluster/conga/luci/storage/selection_bar_40.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/selection_bar_40.png and - differ
/cvs/cluster/conga/luci/storage/selection_left_end_40.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/selection_left_end_40.png and - differ
/cvs/cluster/conga/luci/storage/selection_right_end_40.png,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/selection_right_end_40.png and - differ
/cvs/cluster/conga/luci/storage/snapshot.gif,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/snapshot.gif and - differ
/cvs/cluster/conga/luci/storage/tree_bullet.gif,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/tree_bullet.gif and - differ
/cvs/cluster/conga/luci/storage/tree_closed.gif,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/tree_closed.gif and - differ
/cvs/cluster/conga/luci/storage/tree_opened.gif,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/tree_opened.gif and - differ
/cvs/cluster/conga/luci/storage/tree_transparent.gif,v --> standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/storage/tree_transparent.gif and - differ
/cvs/cluster/conga/luci/storage/validate_html,v --> standard output
revision 1.1
--- conga/luci/storage/validate_html
+++ - 2006-06-30 17:00:13.817189000 +0000
@@ -0,0 +1,35 @@
+<span tal:omit-tag=""
+ tal:define="global pagetype request/pagetype|nothing;
+ global storagename request/storagename|nothing"/>
+<span tal:omit-tag=""
+ tal:define="stosystemss context/systems/storage/objectItems;
+ global allowed_systems python:here.allowed_systems(user, stosystemss);
+ global access_to_host_allowed python:here.access_to_host_allowed(storagename, allowed_systems)"/>
+<span tal:omit-tag=""
+ tal:define="global ricci python:here.get_ricci_communicator(storagename, allowed_systems);
+ global storage_report python:here.get_storage_report(ricci, request.SESSION)"/>
+
+<span tal:omit-tag=""
+ tal:define="global action_type request/action_type|nothing"/>
+
+
+<span tal:omit-tag=""
+ tal:condition="not: access_to_host_allowed">
+ widget_name You are not authorized to modify <span tal:replace="storagename"/>!!!
+</span>
+
+<span tal:omit-tag=""
+ tal:condition="access_to_host_allowed">
+ <span tal:omit-tag=""
+ tal:condition="python:action_type == 'Validate'"
+ tal:content="python:here.validate(storage_report, request)">
+ Validation result:
+ OK if validated
+ message if not validated
+ </span>
+
+ <span tal:omit-tag=""
+ tal:condition="python:action_type != 'Validate'">
+ This form is to be used for validation only
+ </span>
+</span>
More information about the Cluster-devel
mailing list