[Cluster-devel] conga/luci/storage cylinder_select.js form-mac ...

rmccabe at sourceware.org rmccabe at sourceware.org
Tue Sep 25 16:49:37 UTC 2007


CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	rmccabe at sourceware.org	2007-09-25 16:49:36

Modified files:
	luci/storage   : cylinder_select.js form-macros 
Added files:
	luci/storage   : popup_log.js storage_content.js 
	                 storage_probing.js storage_svs.js 
	                 storage_utils.js storage_validation.js 

Log message:
	Extract CSS and javascript from page templates

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/popup_log.js.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_content.js.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_probing.js.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_svs.js.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_utils.js.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_validation.js.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/cylinder_select.js.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/form-macros.diff?cvsroot=cluster&r1=1.26&r2=1.27

/cvs/cluster/conga/luci/storage/popup_log.js,v  -->  standard output
revision 1.1
--- conga/luci/storage/popup_log.js
+++ -	2007-09-25 16:49:37.071853000 +0000
@@ -0,0 +1,15 @@
+function popup_log(mylink, windowname) {
+	//Thanks to htmlcodetutorial.com
+	if (!window.focus) {
+		return true;
+	}
+
+	var href;
+	if (typeof(mylink) == 'string') {
+		href = mylink;
+	} else {
+		href = mylink.href;
+	}
+	window.open(href, windowname, 'width=500,height=500,scrollbars=yes');
+	return false;
+}
/cvs/cluster/conga/luci/storage/storage_content.js,v  -->  standard output
revision 1.1
--- conga/luci/storage/storage_content.js
+++ -	2007-09-25 16:49:37.163554000 +0000
@@ -0,0 +1,30 @@
+/*
+** Copyright (C) 2006-2007 Red Hat, Inc.
+**
+** This program is free software; you can redistribute
+** it and/or modify it under the terms of version 2 of the
+** GNU General Public License as published by the
+** Free Software Foundation.
+*/
+
+var replace_properties_block__old_select_value = ''
+
+function replace_properties_block(parent_id, select_id) {
+	var selem = document.getElementById(select_id);
+	var 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) {
+	var 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;
+}
/cvs/cluster/conga/luci/storage/storage_probing.js,v  -->  standard output
revision 1.1
--- conga/luci/storage/storage_probing.js
+++ -	2007-09-25 16:49:37.243145000 +0000
@@ -0,0 +1,47 @@
+/*
+** Copyright (C) 2006-2007 Red Hat, Inc.
+**
+** This program is free software; you can redistribute
+** it and/or modify it under the terms of version 2 of the
+** GNU General Public License as published by the
+** Free Software Foundation.
+*/
+
+function strip_left(txt) {
+	for (var 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:\n\n' + res);
+				window.location = list_URL;
+			}
+		} else {
+			alert("Error retrieving data from Luci 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);
/cvs/cluster/conga/luci/storage/storage_svs.js,v  -->  standard output
revision 1.1
--- conga/luci/storage/storage_svs.js
+++ -	2007-09-25 16:49:37.322933000 +0000
@@ -0,0 +1,23 @@
+/*
+** Copyright (C) 2006-2007 Red Hat, Inc.
+**
+** This program is free software; you can redistribute
+** it and/or modify it under the terms of version 2 of the
+** GNU General Public License as published by the
+** Free Software Foundation.
+*/
+
+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];
+		var item_type = item.nodeName().lower();
+		if (item_type == 'span' || item_type == 'div') {
+			if (item.id == child_id) {
+				item.className = 'visible';
+			} else if (item.className == 'visible') {
+				item.className = 'invisible';
+			}
+		}
+	}
+}
/cvs/cluster/conga/luci/storage/storage_utils.js,v  -->  standard output
revision 1.1
--- conga/luci/storage/storage_utils.js
+++ -	2007-09-25 16:49:37.431385000 +0000
@@ -0,0 +1,72 @@
+/*
+** Copyright (C) 2006-2007 Red Hat, Inc.
+**
+** This program is free software; you can redistribute
+** it and/or modify it under the terms of version 2 of the
+** GNU General Public License as published by the
+** Free Software Foundation.
+*/
+
+function strip_left(txt) {
+	for (var i = 0 ; i < txt.length ; i++) {
+		if (txt[i] == " " || txt[i] == "\n") {
+			continue;
+		}
+		return txt.substr(i);
+	}
+	return txt;
+}
+
+function check_batch_callback() {
+	if (xmlHttp_object.readyState == 4) {
+		var err_url = (window.location + '').split("?")[1].split("&");
+		for (var i = 0 ; i < err_url.length ; i++) {
+			var t = err_url[i];
+			if (t.indexOf("storagename=") == 0) {
+				err_url = './?' + t + '&pagetype=44';
+				break;
+			}
+		}
+
+		if (xmlHttp_object.status == 200) {
+			var msg = xmlHttp_object.responseText;
+			msg = strip_left(msg);
+			var res = msg.split('\n');
+
+			if (res[0] == "DONE") {
+				window.location = res[1];
+			} else if (res[0] == "NOT_DONE") {
+				setTimeout("initiate_check_batch()", 3000);
+			} else {
+				var m = '';
+				if (res[0] == "FAILURE") {
+					err_url = res[1];
+					m = res[2];
+				} else {
+					m = msg;
+				}
+				alert('An error has occured while committing changes:\n\n' + m);
+				window.location = err_url;
+			}
+		} else {
+			alert("Error retrieving data from Luci server:\n\nTransfer error:\nStorage server might (not) have completed successfuly.\nVerify by yourself.");
+			window.location = err_url;
+		}
+	}
+}
+
+function initiate_check_batch() {
+	var form = document.getElementById("urls_form");
+	for (var i = 0 ; i < form.length ; i++) {
+		var elem = form.elements[i];
+		var name = elem.name;
+		var value = elem.value;
+
+		if (name == 'check_url') {
+			initiate_async_get(value, check_batch_callback);
+			return;
+		}
+	}
+}
+
+setTimeout("initiate_check_batch()", 1000);
/cvs/cluster/conga/luci/storage/storage_validation.js,v  -->  standard output
revision 1.1
--- conga/luci/storage/storage_validation.js
+++ -	2007-09-25 16:49:37.516263000 +0000
@@ -0,0 +1,398 @@
+/*
+** Copyright (C) 2006-2007 Red Hat, Inc.
+**
+** This program is free software; you can redistribute
+** it and/or modify it under the terms of version 2 of the
+** GNU General Public License as published by the
+** Free Software Foundation.
+*/
+
+function validate_text(	elem,
+						timeout,
+						illegal_chars,
+						reserved_words,
+						min_length,
+						max_length,
+						button_id)
+{
+	document.getElementById(button_id).disabled = true;
+
+	var value = elem.value;
+
+	for (var i = 0 ; i < value.length ; i++) {
+		if (illegal_chars.indexOf(value[i]) != -1) {
+			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 != '') {
+			elem.className = 'validation_error';
+			display_warning(elem, timeout, 'Reserved words are: ' + res_list);
+			return;
+		}
+	}
+
+	if (value.length < min_length) {
+		elem.className = 'validation_error';
+		display_warning(elem, timeout, 'Minimum length is ' + min_length);
+		return;
+	}
+
+	if (value.length > max_length) {
+		elem.className = 'validation_error';
+		display_warning(elem, timeout, 'Maximum length is ' + max_length);
+		return;
+	}
+
+	elem.className = '';
+	document.getElementById(button_id).disabled = false;
+}
+
+function validate_int(elem, timeout, min, max, step, units, button_id) {
+	document.getElementById(button_id).disabled = true;
+
+	var value = elem.value;
+	for (var i = 0 ; i < value.length ; i++) {
+		if ('0123456789'.indexOf(value[i]) == -1) {
+			elem.className = 'validation_error';
+			display_warning(elem, timeout, 'Only whole numbers are allowed');
+			return;
+		}
+	}
+
+	min = parseInt(min);
+	max = parseInt(max);
+	step = parseInt(step);
+
+	if (step == 0) {
+		step = 1;
+	}
+
+	value = parseInt(value);
+	value = (value / step) * step;
+
+	if (value < min) {
+		elem.className = 'validation_error';
+		display_warning(elem, timeout,
+			'Minimum allowed value is ' + min + ' ' + units);
+		return;
+	}
+
+	if (value > max) {
+		elem.className = 'validation_error';
+		display_warning(elem, timeout,
+			'Maximum allowed value is ' + max + ' ' + units);
+		return;
+	}
+
+	elem.className = '';
+	document.getElementById(button_id).disabled = false;
+}
+
+function validate_float(elem, timeout, min, max, step, units, button_id) {
+	document.getElementById(button_id).disabled = true;
+
+	var value = elem.value;
+	for (var i = 0 ; i < value.length ; i++) {
+		if ('0123456789.'.indexOf(value[i]) == -1) {
+			elem.className = 'validation_error';
+			display_warning(elem, timeout,
+				'Only digits and \'.\' are allowed');
+			return;
+		}
+	}
+
+	min = parseFloat(min);
+	max = parseFloat(max);
+	step = parseFloat(step);
+
+	if (step == 0.0) {
+		step = 0.00001;
+	}
+
+	value = parseFloat(value);
+	value = (value / step) * step;
+
+	if (value < min) {
+		elem.className = 'validation_error';
+		display_warning(elem, timeout,
+			'Minimum allowed value is ' + min + ' ' + units);
+		return;
+	}
+
+	if (value > max) {
+		elem.className = 'validation_error';
+		display_warning(elem, timeout,
+			'Maximum allowed value is ' + max + ' ' + units);
+		return;
+	}
+
+	elem.className = '';
+	document.getElementById(button_id).disabled = false;
+}
+
+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) {
+		return false;
+	}
+
+	if (elem.value.length >= 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 validate_float_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 digits and dot are allowed');
+		return false;
+	}
+
+	if (ch == '.') {
+		var txt = elem.value;
+		var c = 0;
+		for (var i = 0 ; i < txt.length ; i++) {
+			if (txt[i] == '.') {
+				c++;
+			}
+		}
+
+		if (c != 0) {
+			return false;
+		}
+	}
+
+	return true;
+}
+
+function get_keycode(ev) {
+	if (ev.keyCode) {
+		return ev.keyCode;
+	} else {
+		return ev.which;
+	}
+}
+
+var pending_warning = false;
+function display_warning(el, timeout, text) {
+	if (!pending_warning) {
+		pending_warning = true;
+		alert(text);
+		pending_warning = false;
+	}
+/*
+	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 obj = new Object();
+
+	obj.x = el.offsetLeft;
+	obj.y = el.offsetTop;
+	var parent_el = el.offsetParent;
+	obj.width = el.offsetWidth;
+	obj.height = el.offsetHeight;
+
+	while (parent_el !== null) {
+		obj.x += parent_el.offsetLeft;
+		obj.y += parent_el.offsetTop;
+		parent_el = parent_el.offsetParent;
+	}
+	return obj;
+}
+
+function reset_form(form) {
+	if (confirm('Do you really want to reset the form?')) {
+		form.reset();
+		for (var i = 0 ; i < form.length ; i++) {
+			form.elements[i].className = '';
+			form.elements[i].disabled = false;
+		}
+		return true;
+	}
+	return false;
+}
+
+function strip_left(txt) {
+	for (var i = 0 ; i < txt.length ; i++) {
+		if (txt[i] == " " || txt[i] == "\n") {
+			continue;
+		}
+		return txt.substr(i);
+	}
+	return txt;
+}
+
+// Apply is a 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) {
+			var res = xmlHttp_object.responseText;
+			res = strip_left(res);
+			if (res.substr(0, 2) == "OK") {
+				if (confirm(tmp_prompt_msg)) {
+					var 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));
+
+				var form = document.getElementById(tmp_form_id);
+				for (var i = 0 ; i < form.length ; i++) {
+					var elem = form.elements[i];
+					var 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)
+{
+	var form = document.getElementById(form_id);
+	var URL = validation_URL + '?';
+
+	tmp_prompt_msg = prompt_msg;
+	tmp_form_id = form_id;
+	tmp_submit_URL = form.action + '?';
+
+	for (var i = 0 ; i < form.length ; i++) {
+		var elem = form.elements[i];
+		var name = elem.name;
+		var 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;
+	}
+}
--- conga/luci/storage/cylinder_select.js	2007/09/25 03:49:50	1.1
+++ conga/luci/storage/cylinder_select.js	2007/09/25 16:49:36	1.2
@@ -12,20 +12,23 @@
 var ellipse_dict = [ 2, 3, 4, 5, 5, 6, 6, 7, 7, 7, 8, 8, 8, 8 ];
 
 function ellipse(y) {
-	if (y > 26)
+	if (y > 26) {
 		return ellipse(40 - y);
-	if (y > 13)
+	}
+	if (y > 13) {
 		return 9;
+	}
 	return ellipse_dict[y];
 }
 
 function select_subcyl(id, h_data) {
 	var old_selection = current_selection;
 	unselect_cyl(old_selection, h_data);
-	if (id == old_selection)
+	if (id == old_selection) {
 		current_selection = h_data[0][0];
-	else
+	} else {
 		current_selection = id;
+	}
 	display_props(h_data);
 }
 
@@ -36,8 +39,7 @@
 			var list = h_data[i][1];
 			for (var j = 0 ; j < list.length ; j++) {
 				var el = document.getElementById(list[j]);
-				if (el)
-					el.className = 'invisible';
+				el.className = 'invisible';
 			}
 		}
 	}
--- conga/luci/storage/form-macros	2007/09/25 03:50:27	1.26
+++ conga/luci/storage/form-macros	2007/09/25 16:49:36	1.27
@@ -1,99 +1,16 @@
 <html>
-  <head>
-    <title tal:content="string:"></title>
-  </head>
-  <body>
+<head>
+	<title tal:content="string:" />
+</head>
+<body>
 
 
 <div metal:define-macro="forms-css">
-   <style>
-table.form td { padding: 0px;  }
-
-
-
-table {
-    border-spacing: 0px;
-}
-
-th {
-    font-weigt: bold;
-}
-
-th, td {
-    padding: 5px;
-}
-
-
-table.props-form-table {
-    width: 100%;
-    padding: 2px;
-}
-table.props-form-table tr,
-table.props-form-table td {
-    padding: 2px;
-}
-
-tr.props-form-header {
-    background-color: #fff;
-}
-tr.props-form-header th {
-    background-color: #dee7ec;
-    text-align: left;
-}
-tr.props-form-header th:first-child {
-}
-tr.props-form-header th:last-child {
-}
-
-tr.props-form-body {
-    height: 100%;
-}
-tr.props-form-body td {
-    width: 50%;
-}
-tr.props-form-body td:first-child {
-    border-left: 1px solid #dee7ec;
-}
-tr.props-form-body td:last-child {
-    border-right: 1px solid #dee7ec;
-}
-
-tr.props-form-footer {
-    background-color: #fff;
-}
-tr.props-form-footer td {
-    background-color: #dee7ec;
-    padding: 3px;
-}
-tr.props-form-footer td:first-child {
-}
-tr.props-form-footer td:last-child {
-}
-
-table.props-inner-table {
-    width: 100%;
-    height: 100%;
-}
-table.props-inner-table tr {
-
-}
-table.props-inner-table tr td:first-child {
-    border-left: 2px solid #fff;
-}
-table.props-inner-table tr td:last-child {
-    border-right: 2px solid #fff;
-}
-table.props-inner-table td {
-    width: auto;
-}
-
-
-   </style>
+	<style type="text/css">
+		<!-- @import url(conga_storage.css); -->
+	</style>
 </div>
 
-
-
-
 <div metal:define-macro="commit-changes">
    <span tal:omit-tag=""
         tal:define="batch_id     python:here.apply_storage_changes(ricci, storage_report, request);
@@ -108,66 +25,7 @@
   </span>
 
 
-<script language="javascript" type="text/javascript">
-
-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 check_batch_callback() {
-  if (xmlHttp_object.readyState == 4) {
-    var err_url = (window.location + '').split("?")[1].split("&");
-    for (i=0; i<err_url.length; i++) {
-      var t = err_url[i];
-      if (t.indexOf("storagename=") == 0) {
-        err_url = './?' + t + '&pagetype=44';
-        break;
-      }
-    }
-    if (xmlHttp_object.status == 200) {
-      var msg = xmlHttp_object.responseText;
-      msg = strip_left(msg);
-      var res = msg.split('\n');
-      if (res[0] == "DONE") {
-         window.location = res[1];
-      } else if (res[0] == "NOT_DONE") {
-         setTimeout("initiate_check_batch()", 3000);
-      } else {
-         var m = '';
-         if (res[0] == "FAILURE") {
-           err_url = res[1];
-           m = res[2];
-         } else {
-           m = msg;
-         }
-         alert('An error has occured while committing changes:\n\n' + m);
-         window.location = err_url;
-      }
-    } else {
-      alert("Error retrieving data from Luci server:\n\nTransfer error:\nStorage server might (not) have completed successfuly.\nVerify by yourself.");
-      window.location = err_url;
-    }
-  }
-}
-function initiate_check_batch() {
-  form = document.getElementById("urls_form");
-  for (i=0; i<form.length; i++) {
-    elem = form.elements[i];
-    name = elem.name;
-    value = elem.value;
-    if (name == 'check_url') {
-      initiate_async_get(value, check_batch_callback);
-      return;
-    }
-  }
-}
-setTimeout("initiate_check_batch()", 1000);
-
-</script>
+<script type="text/javascript" src="storage_utils.js"></script>
 
 </div>
 
@@ -194,41 +52,7 @@
 
 
 <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:\n\n' + res);
-           window.location = list_URL;
-        }
-    } else {
-        alert("Error retrieving data from Luci 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>
+	<script type="text/javascript" src="storage_probing.js"></script>
 
    <table style="width: 100%;">
     <tr>
@@ -351,24 +175,14 @@
 
 
 <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>
+	<style type="text/css">
+		<!-- @import url(storage_tree.css); -->
+	</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"
-       style="cursor: pointer;"/>
+  <img src="tree_transparent.gif" style="cursor: pointer;"/>
  </a>
 </div>
 
@@ -415,25 +229,8 @@
   </div>
 
 
-  <div metal:define-macro="view-mappers-all-form">
-
-
-<script language="javascript" type="text/javascript">
-
-function popup_log(mylink, windowname)
-{
-   //Thanks to htmlcodetutorial.com
-   if (!window.focus) return true;
-     var href;
-   if (typeof(mylink) == 'string')
-     href=mylink;
-   else
-     href=mylink.href;
-   window.open(href, windowname, 'width=500,height=500,scrollbars=yes');
-   return false;
-}
-
-</script>
+<div metal:define-macro="view-mappers-all-form">
+	<script type="text/javascript" src="popup_log.js"></script>
 
 
    <div metal:use-macro="here/form-macros/macros/tree-css"/>
@@ -1160,452 +957,26 @@
 
 
 
-  <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="content-scripts">
+   <script type="text/javascript" src="storage_content.js"></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: #fff; }
- </style>
-
- <script language="javascript" type="text/javascript">
-
-
-// validations
-
-function validate_text(elem, timeout, illegal_chars, reserved_words, min_length, max_length, button_id)
-{
-   document.getElementById(button_id).disabled = true;
-
-   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 = '';
-   document.getElementById(button_id).disabled = false;
-}
-
-
-function validate_int(elem, timeout, min, max, step, units, button_id)
-{
-   document.getElementById(button_id).disabled = true;
-
-   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;
-      }
-   }
-
-   min  = parseInt(min);
-   max  = parseInt(max);
-   step = parseInt(step);
-   if (step == 0)
-      step = 1;
-   value = parseInt(value);
-   value = (value / step) * step;
-
-   if (value < min) {
-      //return;
-      elem.className = 'validation_error';
-      display_warning(elem, timeout, 'Minimum allowed value is ' + min + ' ' + units);
-      return;
-   }
-
-   if (value > max) {
-      //return;
-      elem.className = 'validation_error';
-      display_warning(elem, timeout, 'Maximum allowed value is ' + max + ' ' + units);
-      return;
-   }
-
-   elem.className = '';
-   document.getElementById(button_id).disabled = false;
-}
-
-function validate_float(elem, timeout, min, max, step, units, button_id)
-{
-   document.getElementById(button_id).disabled = true;
-
-   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 digits and dot are allowed');
-         return;
-      }
-   }
-
-   min  = parseFloat(min);
-   max  = parseFloat(max);
-   step = parseFloat(step);
-   if (step == 0.0)
-      step = 0.00001;
-   value = parseFloat(value);
-   value = (value / step) * step;
-
-   if (value < min) {
-      //return;
-      elem.className = 'validation_error';
-      display_warning(elem, timeout, 'Minimum allowed value is ' + min + ' ' + units);
-      return;
-   }
-
-   if (value > max) {
-      //return;
-      elem.className = 'validation_error';
-      display_warning(elem, timeout, 'Maximum allowed value is ' + max + ' ' + units);
-      return;
-   }
-
-   elem.className = '';
-   document.getElementById(button_id).disabled = false;
-}
-
-
-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 validate_float_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 digits and dot are allowed');
-      return false;
-   }
-
-   if (ch == '.') {
-      txt = elem.value;
-      c = 0;
-      for (i=0; i<txt.length; i++) {
-         if (txt[i] == '.')
-            c++;
-      }
-      if (c != 0)
-         return false;
-   }
-
-   return true;
-}
-
-function get_keycode(ev)
-{
-    if (ev.keyCode)
-        return ev.keyCode;
-    else
-        return ev.which;
-}
-
-var pending_warning = false;
-
-function display_warning(el, timeout, text)
-{
-	if (!pending_warning) {
-		pending_warning = true;
-		alert(text);
-		pending_warning = false;
-	}
-    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 = '';
-         form.elements[i].disabled  = false;
-      }
-      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>
+	<style type="text/css">
+		<!-- @import url(storage_validation.css); -->
+	</style>
+	<script type="text/javascript" src="storage_validation.js"></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>
+	<style type="text/css">
+		<!-- @import url(storage_svs.css); -->
+	</style>
+	<script type="text/javascript" src="storage_svs.js"></script>
 </div>
 
-  <div metal:define-macro="display-BD">
+<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"/>




More information about the Cluster-devel mailing list