[Cluster-devel] conga/luci cluster/form-macros cluster/resourc ...

rmccabe at sourceware.org rmccabe at sourceware.org
Thu Sep 14 21:24:25 UTC 2006


CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	rmccabe at sourceware.org	2006-09-14 21:24:25

Modified files:
	luci/cluster   : form-macros resource-form-macros 
	                 resource_form_handlers.js 
	luci/homebase  : homebase_common.js 
	luci/site/luci/Extensions: cluster_adapters.py 

Log message:
	the end of the service/resource frontend nastiness. i hope.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&r1=1.59&r2=1.60
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource-form-macros.diff?cvsroot=cluster&r1=1.10&r2=1.11
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&r1=1.7&r2=1.8
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/homebase_common.js.diff?cvsroot=cluster&r1=1.9&r2=1.10
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.64&r2=1.65

--- conga/luci/cluster/form-macros	2006/09/13 17:50:22	1.59
+++ conga/luci/cluster/form-macros	2006/09/14 21:24:24	1.60
@@ -1148,15 +1148,9 @@
 
 	<div id="resskel" class="invisible">
 		<tal:block metal:use-macro="here/resource-form-macros/macros/resource-swap-form" />
-		<p class="invisible expander">
-			<img class="service_tree" name="arrow_down" alt="[-]"
-				src="/luci/cluster/arrow_down.png"
-				onClick="collapse_div(this)">
-			<span class="service_tree expander">Hide Children</span>
-		</p>
 	</div>
 
-	<h2>Service Composition</h2>
+	<h2 onclick="forms_to_xml()">Service Composition</h2>
 
 	<div class="service_comp_list" tal:attributes="id sinfo/root_uuid">
 
@@ -1205,19 +1199,13 @@
 			<tal:block metal:use-macro="here/resource-form-macros/macros/scr_macro" />
 		</span>
 
-		<p
-			tal:attributes="
-				class python: (res['max_depth'] == 0 and 'invisible' or ('rc_indent' + str(res['indent_ctr'] - 1))) + ' expander'">
-			<img class="service_tree" name="arrow_down" alt="[-]"
-				src="/luci/cluster/arrow_down.png"
-				onClick="collapse_div(this)">
-			<span class="service_tree expander">Hide Children</span>
-		</p>
-
 		<tal:block
 			tal:replace="structure python: '</div>' * (res['indent_ctr'] - res['max_depth'])" />
 	</div>
 	</div>
+	<form name="master">
+		<input type="hidden" name="form_xml" />
+	</form>
 </div>
 
 <div metal:define-macro="service-form">
--- conga/luci/cluster/resource-form-macros	2006/09/13 17:50:22	1.10
+++ conga/luci/cluster/resource-form-macros	2006/09/14 21:24:24	1.11
@@ -4,6 +4,35 @@
 </head>
 <body>
 
+<div metal:define-macro="res_form_footer" tal:omit-tag="">
+	<p class="hbSubmit">
+		<input class="hbSubmit" type="button"
+			onClick="validate_form(this.form);"
+			tal:attributes="value python: sinfo and 'Apply' or 'Submit'" />
+
+		<tal:block tal:condition="sinfo">
+			<input class="hbSubmit" type="button" value="Add a child"
+				onClick="add_child_resource(this.form)" />
+			<input class="hbSubmit" type="button" value="Delete this resource"
+				onClick="delete_resource(this.form)" />
+		</tal:block>
+	</p>
+
+	<tal:block tal:condition="not:exists:res"
+		tal:define="global expclass string: invisible expander" />
+
+	<tal:block tal:condition="exists:res">
+		<tal:block tal:define="
+			global expclass python: ((res['max_depth'] == 0 and 'invisible ') + 'expander')" />
+	</tal:block>
+
+	<p tal:attributes="class expclass">
+		<img class="service_tree" name="arrow_down" alt="[-]"
+			src="/luci/cluster/arrow_down.png"
+			onClick="collapse_div(this)">
+		<span class="service_tree expander">Hide Children</span>
+	</p>
+</div>
 
 <div metal:define-macro="resources-form">
 	<h2>Resources for <span tal:replace="request/clustername" /></h2>
@@ -64,30 +93,27 @@
 </div>
 
 <div metal:define-macro="resource-swap-form">
-<form>
 	<p class="reshdr">
 		<strong class="reshdr">Select a Resource Type</strong>
 	</p>
 
 	<p class="reshdr">
-	<select onChange="swap_div_elem(this.form.parentNode.parentNode,
-		'invisible', 'container',
-		this.options[this.selectedIndex].value);">
-		<option name="blank" value="blank" checked>Select a Resource</option>
-		<option name="IP" value="IP">IP address</option>
-		<option name="FS" value="FS">File system</option>
-		<option name="GFS" value="GFS">GFS file system</option>
-		<option name="NFSM" value="NFSM">NFS mount</option>
-		<option name="NFSC" value="NFSC">NFS client</option>
-		<option name="NFSX" value="NFSX">NFS export</option>
-		<option name="SCR" value="SCR">Script</option>
-		<option name="SMB" value="SMB">Samba</option>
-	</select>
+		<form>
+		<select onChange="swap_div_elem(this.form.parentNode,
+									this.options[this.selectedIndex].value);">
+			<option name="blank" value="blank" checked>Select a Resource</option>
+			<option name="IP" value="IP">IP address</option>
+			<option name="FS" value="FS">File system</option>
+			<option name="GFS" value="GFS">GFS file system</option>
+			<option name="NFSM" value="NFSM">NFS mount</option>
+			<option name="NFSC" value="NFSC">NFS client</option>
+			<option name="NFSX" value="NFSX">NFS export</option>
+			<option name="SCR" value="SCR">Script</option>
+			<option name="SMB" value="SMB">Samba</option>
+		</select>
+		</form>
 	</p>
 
-	<div name="container" class="systemsTable">
-	</div>
-
 	<div name="invisible" class="invisible">
 		<div name="blank"> </div>
 		<div metal:use-macro="here/resource-form-macros/macros/ip_macro" />
@@ -99,7 +125,6 @@
 		<div metal:use-macro="here/resource-form-macros/macros/smb_macro" />
 		<div metal:use-macro="here/resource-form-macros/macros/scr_macro" />
 	</div>
-</form>
 </div>
 
 <div metal:define-macro="resourceadd-form">
@@ -231,9 +256,12 @@
 
 	<p class="reshdr">IP Address Resource Configuration</p>
 
-	<form name="ip_form" method="get"
-		tal:attributes="action processURL">
-	<input name="pagetype" type="hidden" value="35"/>
+	<form method="get"
+		tal:attributes="
+			action processURL | nothing;
+			name res/parent_uuid | nothing">
+
+	<input name="pagetype" type="hidden" value="35" />
 
 	<input name="parent_uuid" type="hidden"
 		tal:attributes="value res/parent_uuid | nothing" />
@@ -274,19 +302,7 @@
 		</tr>
 	</table>
 
-	<p class="hbSubmit">
-		<input class="hbSubmit" type="button"
-			onClick="validate_form(this.form);"
-			tal:attributes="value python: sinfo and 'Apply' or 'Submit'" />
-
-		<tal:block tal:condition="sinfo">
-			<input class="hbSubmit" type="button" value="Add a child"
-				onClick="add_child_resource(this.form)" />
-			<input class="hbSubmit" type="button" value="Delete this resource"
-				onClick="delete_resource(this.form)" />
-		</tal:block>
-	</p>
-
+	<div metal:use-macro="here/resource-form-macros/macros/res_form_footer" />
 	</form>
 </div>
 
@@ -320,7 +336,11 @@
 
 	<p class="reshdr">File System Resource Configuration</p>
 
-	<form name="fs_form" method="get" tal:attributes="action processURL">
+	<form method="get"
+		tal:attributes="
+			action processURL | nothing;
+			name res/parent_uuid | nothing">
+		
 	<input name="pagetype" type="hidden" value="35" />
 
 	<input name="parent_uuid" type="hidden"
@@ -427,18 +447,7 @@
 		</tr>
 	</table>
 
-	<p class="hbSubmit">
-		<input class="hbSubmit" type="button"
-			onClick="validate_form(this.form);"
-			tal:attributes="value python: sinfo and 'Apply' or 'Submit'" />
-
-		<tal:block tal:condition="sinfo">
-			<input class="hbSubmit" type="button" value="Add a child"
-				onClick="add_child_resource(this.form)" />
-			<input class="hbSubmit" type="button" value="Delete this resource"
-				onClick="delete_resource(this.form)" />
-		</tal:block>
-	</p>
+	<div metal:use-macro="here/resource-form-macros/macros/res_form_footer" />
 	</form>
 </div>
 
@@ -467,7 +476,11 @@
 
 	<p class="reshdr">GFS Resource Configuration</p>
 
-	<form name="gfs_form" method="get" tal:attributes="action processURL">
+	<form method="get"
+		tal:attributes="
+			action processURL | nothing;
+			name res/parent_uuid | nothing">
+
 	<input name="pagetype" type="hidden" value="35" />
 
 	<input name="parent_uuid" type="hidden"
@@ -543,19 +556,7 @@
 		</tr>
 	</table>
 
-	<p class="hbSubmit">
-		<input class="hbSubmit" type="button"
-			onClick="validate_form(this.form);"
-			tal:attributes="value python: sinfo and 'Apply' or 'Submit'" />
-
-		<tal:block tal:condition="sinfo">
-			<input class="hbSubmit" type="button" value="Add a child"
-				onClick="add_child_resource(this.form)" />
-			<input class="hbSubmit" type="button" value="Delete this resource"
-				onClick="delete_resource(this.form)" />
-		</tal:block>
-	</p>
-
+	<div metal:use-macro="here/resource-form-macros/macros/res_form_footer" />
 	</form>
 </div>
 
@@ -584,7 +585,11 @@
 
 	<p class="reshdr">NFS Mount Resource Configuration</p>
 
-	<form name="nfsm_form" method="get" tal:attributes="action processURL">
+	<form method="get"
+		tal:attributes="
+			action processURL | nothing;
+			name res/parent_uuid | nothing">
+
 	<input name="pagetype" type="hidden" value="35" />
 
 	<input name="parent_uuid" type="hidden"
@@ -673,19 +678,7 @@
 		</tr>
 	</table>
 
-	<p class="hbSubmit">
-		<input class="hbSubmit" type="button"
-			onClick="validate_form(this.form);"
-			tal:attributes="value python: sinfo and 'Apply' or 'Submit'" />
-
-		<tal:block tal:condition="sinfo">
-			<input class="hbSubmit" type="button" value="Add a child"
-				onClick="add_child_resource(this.form)" />
-			<input class="hbSubmit" type="button" value="Delete this resource"
-				onClick="delete_resource(this.form)" />
-		</tal:block>
-	</p>
-
+	<div metal:use-macro="here/resource-form-macros/macros/res_form_footer" />
 	</form>
 </div>
 
@@ -710,7 +703,11 @@
 
 	<p class="reshdr">NFS Client Resource Configuration</p>
 
-	<form name="nfsc_form" method="post" tal:attributes="action processURL">
+	<form method="post"
+		tal:attributes="
+			action processURL | nothing;
+			name res/parent_uuid | nothing">
+
 	<input name="pagetype" type="hidden" value="35" />
 
 	<input name="parent_uuid" type="hidden"
@@ -761,19 +758,7 @@
 		</tr>
 	</table>
 
-	<p class="hbSubmit">
-		<input class="hbSubmit" type="button"
-			onClick="validate_form(this.form);"
-			tal:attributes="value python: sinfo and 'Apply' or 'Submit'" />
-
-		<tal:block tal:condition="sinfo">
-			<input class="hbSubmit" type="button" value="Add a child"
-				onClick="add_child_resource(this.form)" />
-			<input class="hbSubmit" type="button" value="Delete this resource"
-				onClick="delete_resource(this.form)" />
-		</tal:block>
-	</p>
-
+	<div metal:use-macro="here/resource-form-macros/macros/res_form_footer" />
 	</form>
 </div>
 
@@ -794,7 +779,11 @@
 
 	<p class="reshdr">NFS Export Resource Configuration</p>
 
-	<form name="nfsx_form" method="post" tal:attributes="action processURL">
+	<form method="post"
+		tal:attributes="
+			action processURL | nothing;
+			name res/parent_uuid | nothing">
+
 	<input name="pagetype" type="hidden" value="35" />
 
 	<input name="parent_uuid" type="hidden"
@@ -829,19 +818,7 @@
 		</tr>
 	</table>
 
-	<p class="hbSubmit">
-		<input class="hbSubmit" type="button"
-			onClick="validate_form(this.form);"
-			tal:attributes="value python: sinfo and 'Apply' or 'Submit'" />
-
-		<tal:block tal:condition="sinfo">
-			<input class="hbSubmit" type="button" value="Add a child"
-				onClick="add_child_resource(this.form)" />
-			<input class="hbSubmit" type="button" value="Delete this resource"
-				onClick="delete_resource(this.form)" />
-		</tal:block>
-	</p>
-
+	<div metal:use-macro="here/resource-form-macros/macros/res_form_footer" />
 	</form>
 </div>
 
@@ -863,7 +840,11 @@
 
 	<p class="reshdr">Script Resource Configuration</p>
 
-	<form name="scr_form" method="post" tal:attributes="action processURL">
+	<form method="post"
+		tal:attributes="
+			action processURL | nothing;
+			name res/parent_uuid | nothing">
+
 	<input name="pagetype" type="hidden" value="35" />
 
 	<input name="parent_uuid" type="hidden"
@@ -906,19 +887,7 @@
 		</tr>
 	</table>
 
-	<p class="hbSubmit">
-		<input class="hbSubmit" type="button"
-			onClick="validate_form(this.form);"
-			tal:attributes="value python: sinfo and 'Apply' or 'Submit'" />
-
-		<tal:block tal:condition="sinfo">
-			<input class="hbSubmit" type="button" value="Add a child"
-				onClick="add_child_resource(this.form)" />
-			<input class="hbSubmit" type="button" value="Delete this resource"
-				onClick="delete_resource(this.form)" />
-		</tal:block>
-	</p>
-
+	<div metal:use-macro="here/resource-form-macros/macros/res_form_footer" />
 	</form>
 </div>
 
@@ -944,7 +913,11 @@
 		Samba Server Configuration
 	</p>
 
-	<form name="smb_form" method="post" tal:attributes="action processURL">
+	<form method="post"
+		tal:attributes="
+			action processURL | nothing;
+			name res/parent_uuid | nothing">
+
 	<input name="pagetype" type="hidden" value="35" />
 
 	<input name="parent_uuid" type="hidden"
@@ -986,20 +959,7 @@
 			</td>
 		</tr>
 	</table>
-
-	<p class="hbSubmit">
-		<input class="hbSubmit" type="button"
-			onClick="validate_form(this.form);"
-			tal:attributes="value python: sinfo and 'Apply' or 'Submit'" />
-
-		<tal:block tal:condition="sinfo">
-			<input class="hbSubmit" type="button" value="Add a child"
-				onClick="add_child_resource(this.form)" />
-			<input class="hbSubmit" type="button" value="Delete this resource"
-				onClick="delete_resource(this.form)" />
-		</tal:block>
-	</p>
-
+	<div metal:use-macro="here/resource-form-macros/macros/res_form_footer" />
 	</form>
 </div>
 
--- conga/luci/cluster/resource_form_handlers.js	2006/09/13 17:50:22	1.7
+++ conga/luci/cluster/resource_form_handlers.js	2006/09/14 21:24:24	1.8
@@ -1,30 +1,64 @@
-function swap_div_elem(container, swap_out_cname, swap_in_cname, swap_in_name) {
-	var divs = container.getElementsByTagName('div');
-	if (!divs)
+function collapse_div(image) {
+	var span = null;
+	var pdiv = image.parentNode;
+	var spanc = pdiv.getElementsByTagName('span');
+	for (var i = 0 ; i < spanc.length ; i++) {
+		if (spanc[i].className.match(/expander/)) {
+			span = spanc[i];
+			break;
+		}
+	}
+	if (!span)
 		return (-1);
 
-	var swap_out_cont = null;
-	var swap_in_cont = null;
+	var div = pdiv.parentNode.parentNode;
+	while (div) {
+		if (div.tagName && div.tagName.match(/^DIV$/i) &&
+			div.className.match(/service_comp/))
+		{
+			break;
+		}
+		if (!div.nextSibling)
+			div = div.parentNode;
+		else
+			div = div.nextSibling;
+	}
+	if (!div)
+		return (-1);
+
+	var dclass = 'invisible expander service_comp';
+	if (div.className.match(/invisible/))
+		dclass = 'expander service_comp';
+	while (div) {
+		div.className = dclass;
+		div = div.nextSibling;
+	}
+
+	if (image.name == 'arrow_down') {
+		image.src = 'arrow_right.png';
+		image.name = 'arrow_right';
+		image.alt = '[-]';
+		span.innerHTML = 'Show Children';
+	} else {
+		image.src = 'arrow_down.png';
+		image.name = 'arrow_down';
+		image.alt = '[+]';
+		span.innerHTML = 'Hide Children';
+	}
+}
+
+function swap_div_elem(container, swap_in_name) {
 	var swap_in_elem = null;
-	var i = 0;
-	while ((!swap_out_cont || !swap_in_cont || !swap_in_elem) && i < divs.length)
-	{
-		if (!swap_in_cont && divs[i].getAttribute('name') == swap_in_cname)
-			swap_in_cont = divs[i];
-		else if (!swap_out_cont && divs[i].getAttribute('name') == swap_out_cname)
-			swap_out_cont = divs[i];
-		else if (!swap_in_elem && divs[i].getAttribute('name') == swap_in_name)
+	var divs = container.getElementsByTagName('div');
+
+	for (var i = 0 ; i < divs.length ; i++) {
+		if (!swap_in_elem && divs[i].getAttribute('name') == swap_in_name)
 			swap_in_elem = divs[i];
-		i++;
 	}
-
-	if (!swap_out_cont || !swap_in_cont || !swap_in_elem)
+	if (!swap_in_elem)
 		return (-1);
 
-	if (swap_in_cont.id)
-		swap_in_elem.id = swap_in_cont.id;
-	var temp = swap_in_cont.parentNode.replaceChild(swap_in_elem, swap_in_cont);
-	swap_out_cont.appendChild(temp);
+	container.parentNode.replaceChild(swap_in_elem, container);
 }
 
 function validate_ip(form) {
@@ -143,7 +177,16 @@
 function delete_resource(form) {
 	if (!confirm('Are you sure you want to delete this resource?'))
 		return (-1);
-	form.submit();
+	var div = document.getElementById(form.uuid.value);
+	if (!div)
+		return (-1);
+	var pdiv = document.getElementById(form.parent_uuid.value);
+	div.parentNode.removeChild(div);
+	var pelem = pdiv.getElementsByTagName('p');
+	for (var i = 0 ; i < pelem.length ; i++) {
+		if (pelem[i].className.match(/expander/))
+			pelem[i].className += ' invisible';
+	}
 }
 
 function add_child_resource(form) {
@@ -155,12 +198,12 @@
 
 	var ilevel = Number(form.tree_level.value) + 1;
 	var sdiv = document.getElementById('resskel');
-	if (!sdiv)
+	if (!sdiv) {
 		return (-1);
+	}
 
 	var pdiv = document.getElementById(form.uuid.value);
 	if (!pdiv) {
-		alert('failed to find ' + form.uuid.value);
 		return (-1);
 	}
 
@@ -179,8 +222,13 @@
 	node.id = null;
 	node.className = null;
 	ielem = node.getElementsByTagName('input');
-	if (!ielem)
+	if (!ielem) {
 		return (-1);
+	}
+
+	forms = node.getElementsByTagName('form');
+	for (var i = 0 ; i < forms.length ; i++)
+		forms.name = form.uuid.value;
 
 	var new_uuid = uuid_list.pop();
 	for (var i = 0 ; i < ielem.length ; i++) {
@@ -198,7 +246,11 @@
 	}
 
 	if (!child_div) {
-		/* enable parent collapse */
+		var pelem = pdiv.getElementsByTagName('p');
+		for (var i = 0 ; i < pelem.length ; i++) {
+			if (pelem[i].className.match(/expander/))
+				pelem[i].className = pelem[i].className.replace(/invisible/,'');
+		}
 		child_div = document.createElement('div');
 	} else {
 		wrap_div = document.createElement('div');
@@ -211,3 +263,29 @@
 	child_div.appendChild(node);
 	pdiv.appendChild(child_div);
 }
+
+function forms_to_xml() {
+	var form = document.getElementsByTagName('form');
+	var master_form = null;
+	var form_xml = '';
+
+	for (var i = 0 ; i < form.length ; i++) {
+		if (form[i].name == 'master') {
+			master_form = form[i];
+			continue;
+		} else if (!form[i].uuid || !form[i].uuid.value)
+			continue;
+		var temp = form[i].innerHTML.match(/<input [^>]+>/ig).toString().replace(/>(,|$)/g, '/>');
+		if (!temp)
+			continue;
+		form_xml += '<form id="' + form[i].uuid.value + '" parent="' +
+					form[i].parent_uuid.value + '">' + temp + '</form>';
+	}
+
+	if (!master_form || !form_xml)
+		return (-1);
+
+	/* sort this out in the backend */
+	master_form.form_xml.value = form_xml;
+	master_form.submit();
+}
--- conga/luci/homebase/homebase_common.js	2006/09/13 17:50:22	1.9
+++ conga/luci/homebase/homebase_common.js	2006/09/14 21:24:25	1.10
@@ -1,45 +1,3 @@
-function collapse_div(image) {
-	if (!image)
-		return (-1);
-
-	var span = null;
-	var pdiv = image.parentNode;
-	var spanc = pdiv.getElementsByTagName('span');
-	if (!spanc)
-		return (-1);
-	for (var i = 0 ; i < spanc.length ; i++) {
-		if (spanc[i].className.match(/expander/)) {
-			span = spanc[i];
-			break;
-		}
-	}
-	if (!span)
-		return (-1);
-
-	var div = image.parentNode.parentNode.nextSibling;
-	while (div) {
-		if (div.tagName && div.tagName.match(/^DIV$/i) && div.className.match(/expander/))
-			break;
-		div = div.nextSibling;
-	}
-	if (!div)
-		return (-1);
-
-	if (image.name == 'arrow_down') {
-		image.src = 'arrow_right.png';
-		image.name = 'arrow_right';
-		image.alt = '[-]';
-		span.innerHTML = 'Show Children';
-		div.className = 'invisible expander service_comp';
-	} else {
-		image.src = 'arrow_down.png';
-		image.name = 'arrow_down';
-		image.alt = '[+]';
-		span.innerHTML = 'Hide Children';
-		div.className = 'expander service_comp';
-	}
-}
-
 function is_valid_int(str, min, max) {
 	if (str.match(/[^0-9 -]/))
 		return (0);
--- conga/luci/site/luci/Extensions/cluster_adapters.py	2006/09/13 17:50:22	1.64
+++ conga/luci/site/luci/Extensions/cluster_adapters.py	2006/09/14 21:24:25	1.65
@@ -966,7 +966,7 @@
   if svc != None:
     indent_ctr = 0
     children = svc.getChildren()
-    root_uuid = make_uuid('resource') 
+    root_uuid = 'toplevel';
     for child in children:
       recurse_resources(root_uuid, child, resource_list, indent_ctr)
       




More information about the Cluster-devel mailing list