From: rmccabe@sourceware.org <rmccabe@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] conga/luci Makefile cluster/100wait cluster/cl ...
Date: 30 Jun 2006 17:00:13 -0000 [thread overview]
Message-ID: <20060630170013.29362.qmail@sourceware.org> (raw)
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>
reply other threads:[~2006-06-30 17:00 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20060630170013.29362.qmail@sourceware.org \
--to=rmccabe@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.