From mboxrd@z Thu Jan 1 00:00:00 1970 From: rmccabe@sourceware.org Date: 6 Sep 2006 22:13:34 -0000 Subject: [Cluster-devel] conga/luci/cluster form-macros resource-form-m ... Message-ID: <20060906221334.2688.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe at sourceware.org 2006-09-06 22:13:33 Modified files: luci/cluster : form-macros resource-form-macros resource_form_handlers.js validate_config_qdisk.js Log message: more UI and JS validation bits Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&r1=1.55&r2=1.56 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource-form-macros.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_qdisk.js.diff?cvsroot=cluster&r1=1.1&r2=1.2 --- conga/luci/cluster/form-macros 2006/09/05 21:25:44 1.55 +++ conga/luci/cluster/form-macros 2006/09/06 22:13:33 1.56 @@ -551,15 +551,18 @@
Score
+ +   + - - + @@ -572,6 +575,12 @@ + + + @@ -584,6 +593,7 @@ @@ -614,6 +624,14 @@ id python: 'heuristic' + str(curHeur) + ':hscore'; name python: 'heuristic' + str(curHeur) + ':hscore';"/> + + + --- conga/luci/cluster/resource-form-macros 2006/09/05 21:25:44 1.6 +++ conga/luci/cluster/resource-form-macros 2006/09/06 22:13:33 1.7 @@ -265,8 +265,15 @@ - +
+ + + +
+ @@ -369,7 +376,7 @@ + tal:attributes="value opt | nothing" /> @@ -379,7 +386,7 @@ + tal:attributes="value fsid | nothing" /> @@ -416,8 +423,14 @@ - +
+ + + +
@@ -527,8 +540,14 @@ - +
+ + + +
@@ -651,8 +670,14 @@ - +
+ + + +
@@ -726,8 +751,14 @@ - +
+ + + +
@@ -776,8 +807,14 @@ - +
+ + + +
@@ -837,8 +874,14 @@ - +
+ + + +
@@ -900,8 +943,14 @@ - +
+ + + +
--- conga/luci/cluster/resource_form_handlers.js 2006/08/10 23:06:20 1.3 +++ conga/luci/cluster/resource_form_handlers.js 2006/09/06 22:13:33 1.4 @@ -1,164 +1,129 @@ -/*swap_div switches between types of forms - * based on a chooser within the document */ -function swap_div(container_id, element_id){ - container_element = document.getElementById(container_id); - if (!container_element) { - alert('Can\'t find element with id = ' + container_id); - return (-1) - } - child_element = document.getElementById(element_id); - if (!child_element) { - alert('Can\'t find element with id = ' + element_id); - return (-1) - } - for(child in child_element.children){ - alert(child); - } - temp = container_element.firstChild; - container_element.replaceChild(child_element, container_element.firstChild); - - invisible_div = document.getElementById('invisible'); - if (!invisible_div) { - alert('No invisible div'); - return (-1) - } - - invisible_div.appendChild(temp); -} - -/*In order to val a new resource type, - *create a form within the resource-form-macros - *with 'resource-name'_form as the 'name' - *attribute, and use: - * onSubmit="valResource('resource-name'_form)" - *val handler functions here and further - *down within actual cluster code.*/ - -function validate(form){ - if(form.type.value != 'ip'){ - if(form.resourceName.value.length == 0){ - alert("Please enter a name for this resource. \n"); - return; - } - } - /*Get the type of form from the first - *part of the name string*/ - type = form.type.value; - /*use eval to access proper resource - *valer function as defined below*/ - eval("val"+(type.toUpperCase())+"(form);"); - /*TODO: val error checking!!!*/ -} - -/*Val an IP Resource*/ -function valIP(form){ - /*first, check to make sure all input - *fields have values*/ - if (isNaN(parseInt(form.ip1.value)) || - isNaN(parseInt(form.ip2.value)) || - isNaN(parseInt(form.ip3.value)) || - isNaN(parseInt(form.ip4.value)) ) { - error = "The IP Address contains illegal characters. \n"; - alert(error); - } - else{ - form.submit(); - } -} - -/*Val an NFS Mount Resource*/ -function valNFSM(form){ - error = "" - /*check to make sure all input - *fields have values*/ - if(form.mountpoint.value == "") - error += "Please enter a mount point.\n"; - if(form.host.value == "") - error += "Please enter a host.\n"; - if(form.exportpath.value == "") - error += "Please enter an export path.\n"; - if(error != "") - alert(error); - else - form.submit(); -} - -/*Validate an NFS Export Resource*/ -function valNFSX(form){ - form.submit(); -} - -/*Validate an NFS Client Resource*/ -function valNFSC(form){ - error = "" - /*check to make sure all input - *fields have values*/ - if(form.target.value == "") - error += "Please enter a target.\n"; - if(error != "") - alert(error); - else - form.submit(); -} - -/*Validate an FS Resource*/ -function valFS(form){ - error = "" - /*check to make sure all input - *fields have values*/ - if(form.fsTypeSelect.value == "") - error += "Please Select a file system type.\n"; - if(form.mountpoint.value == "") - error += "Please enter a mount point.\n"; - if(form.device.value == "") - error += "Please enter a device.\n"; - if(form.fsid.value == "") - error += "Please enter a file system id.\n"; - if(error != "") - alert(error); - else - form.submit(); -} - -/*Validate a GFS Resource*/ -function valGFS(form){ - error = "" - /*check to make sure all input - *fields have values*/ - if(form.mountpoint.value == "") - error += "Please enter a mount point.\n"; - if(form.device.value == "") - error += "Please enter a device.\n"; - if(form.fsid.value == "") - error += "Please enter a file system id.\n"; - if(error != "") - alert(error); - else - form.submit(); -} - -/*Validate a Script Resource*/ -function valSCR(form){ - error = "" - /*check to make sure all input - *fields have values*/ - if(form.file.value == "") - error += "Please enter a filename.\n"; - if(error != "") - alert(error); - else - form.submit(); -} - -/*Validate a Samba Resource*/ -function valSMB(form){ - error = "" - /*check to make sure all input - *fields have values*/ - if(form.workgroup.value == "") - error += "Please enter a workgroup.\n"; - if(error != "") - alert(error); - else - form.submit(); +function swap_div(container_id, element_id) { + var container_element = document.getElementById(container_id); + if (!container_element) + return (-1); + + var child_element = document.getElementById(element_id); + if (!child_element) + return (-1); + + var invisible_div = document.getElementById('invisible'); + if (!invisible_div) + return (-1); + + var temp = container_element.firstChild; + container_element.replaceChild(child_element, container_element.firstChild); + invisible_div.appendChild(temp); +} + +function validate_ip(form) { + var errors = new Array(); + var ipstr = form.ip1.value + '.' + form.ip2.value + '.' + + form.ip3.value + '.' + form.ip4.value; + + if (!isValidHost(ipstr)) + errors.push('\"' + ipstr '\" is an invalid IP address.'); + return (errors); +} + +function validate_nfs_mount(form) { + var errors = new Array(); + + if (!form.mountpoint || str_is_blank(form.mounpoint.value)) + errors.push('No mount point was given.'); + + if (!form.host || str_is_blank(form.host.value)) + errors.push('No NFS server host was given.'); + + if (!form.exportpath || str_is_blank(form.exportpath.value)) + errors.push('No NFS export path was given.'); + return (errors); +} + +function validate_nfs_export(form) { + var errors = new Array(); + return (errors); +} + +function validate_nfs_client(form) { + var errors = new Array(); + + if (!form.target || str_is_blank(form.target.value)) + errors.push('No NFS client target was given.'); + return (errors); +} + +function validate_filesystem(form) { + var errors = new Array(); + + if (!form.fsTypeSelect || str_is_blank(form.fsTypeSelect.value)) + errors.push('No file system type was given.'); + + if (!form.mountpoint || str_is_blank(form.mountpoint.value)) + errors.push('No file system mount point was given.'); + + if (!form.device || str_is_blank(form.device.value)) + errors.push('No device containing the file system was given.'); + + if (!form.fsid || str_is_blank(form.fsid.value)) + errors.push('No file system ID was given.'); + return (errors); +} + +function validate_gfs(form) { + my errors = new Array(); + + if (!form.mountpoint || str_is_blank(form.mountpoint.value)) + errors.push('No file system mount point was given.'); + + if (!form.device || str_is_blank(form.device.value)) + errors.push('No device containing file system was given.'); + + if (!form.fsid || str_is_blank(form.fsid.value)) + errors.push('No file system ID was given.'); + return (errors); +} + +function validate_script(form) { + var errors = new Array(); + + if (!form.file || str_is_blank(form.file.value)) + errors.push('No path to the script file was given.'); + return (errors); +} + +function validate_samba(form) { + var errors = new Array(); + + if (!form.workgroup || str_is_blank(form.workgroup.value)) + errors.push('No workgroup was given'); + return (errors); +} + +var form_validators = new Array(); +form_validators['ip'] = validate_ip; +form_validators['nfsm'] = validate_nfs_mount; +form_validators['nfsx'] = validate_nfs_export; +form_validators['nfsc'] = validate_nfs_client; +form_validators['fs'] = validate_filesystem; +form_validators['gfs'] = validate_gfs; +form_validators['scr'] = validate_script; +form_validators['smb'] = validate_samba; + +function validate(form) { + var valfn = form_validators[form.type.value]; + if (!valfn) + return (-1); + + if (error_dialog(valfn(form))) + return (-1); + form.submit(); +} + +function delete_resource(form) { + return (-1); +} + +function add_child_resource(form) { + return (-1); } --- conga/luci/cluster/validate_config_qdisk.js 2006/08/17 16:22:41 1.1 +++ conga/luci/cluster/validate_config_qdisk.js 2006/09/06 22:13:33 1.2 @@ -1,3 +1,74 @@ +var heuristic_names = [ ':hname', ':hprog', ':hinterval', ':hscore', ':hdel' ]; + +function clear_heuristic(form, heur_num) { + var str_prefix = 'heuristic' + heur_num; + for (var i = 0 ; i < heuristic_names.length - 1 ; i++) { + var id = str_prefix + heuristic_names[i]; + var elem = document.getElementById(id); + if (!elem) + continue; + elem.value = ''; + } + + return (0); +} + +function delete_qdisk_heur(field, form) { + if (!field) + return (-1); + + if (!form) + return (-1); + + var num_heur = form.num_heuristics; + if (!num_heur) + return (-1); + num_heur = Number(num_heur.value); + + var id = field.id; + var hnum = id.split(':')[0].substr(9); + if (!is_valid_int(hnum, 0, 9)) + return (-1); + hnum = Number(hnum); + + if (num_heur < 1) { + if (!confirm('Delete this qurorum disk heuristic?')) + return (-1); + + return (clear_heuristic(form, hnum)); + } + + var heur_body = document.getElementById('heuristicList'); + if (!heur_body) + return (-1); + + if (!confirm('Delete qurorum disk heuristic ' + (hnum + 1) + '?')) + return (-1); + + heur_body.deleteRow(hnum) + + for (var i = hnum + 1 ; i <= num_heur ; i++) { + var tr = document.getElementById('heuristic' + i); + if (!tr) + continue; + var prefix_str = 'heuristic' + (i - 1); + + tr.setAttribute('id', prefix_str); + tr.setAttribute('name', prefix_str); + + for (var n = 0 ; n < heuristic_names.length ; n++) { + var elem = document.getElementById('heuristic' + i + heuristic_names[n]); + if (!elem) + continue; + + elem.setAttribute('id', prefix_str + heuristic_names[n]); + elem.setAttribute('name', prefix_str + heuristic_names[n]); + } + } + + form.num_heuristics.value = num_heur - 1; +} + function check_heuristic(hnum, form) { var errors = new Array(); @@ -9,27 +80,27 @@ if (errors.length > 0) return (errors); - hstr = 'heuristic' + hnum + ':'; + var hstr = 'heuristic' + hnum; - hname = document.getElementById(hstr + 'hname'); + var hname = document.getElementById(hstr + ':hname'); if (!hname || str_is_blank(hname.value)) errors.push('No name was given for heuristic ' + (hnum + 1)); else hname = hname.value; - hpath = document.getElementById(hstr + 'hpath'); + var hpath = document.getElementById(hstr + ':hpath'); if (!hpath || str_is_blank(hpath.value)) errors.push('No path was given for heuristic ' + (hnum + 1)); else hpath = hpath.value; - hint = document.getElementById(hstr + 'hinterval'); + var hint = document.getElementById(hstr + ':hinterval'); if (!hint || str_is_blank(hint.value)) errors.push('No interval was given for heuristic ' + (hnum + 1)); else hint = hint.value; - hscore = document.getElementById(hstr + 'hscore'); + var hscore = document.getElementById(hstr + ':hscore'); if (!hscore || str_is_blank(hscore.value)) errors.push('No score was given for heuristic ' + (hnum + 1)); else @@ -60,12 +131,13 @@ return (error_dialog(errors)); } + var qpart = null; if (form.quorumd[0].checked) qpart = 0 else if (form.quorumd[1].checked) qpart = 1; else { - errors.push('You submitted an invalid value while specifying whether or not to use a quorum partition: ' + qpart + '.'); + errors.push('You submitted an invalid value while specifying whether or not to use a quorum partition.'); return (error_dialog(errors)); } @@ -102,17 +174,17 @@ errors.push('No device setting was given.'); else { /* TODO: check this */ - device = form.device.value; + var device = form.device.value; } if (!form.label || str_is_blank(form.label.value)) errors.push('No label setting was given.'); else { /* TODO: check this */ - label = form.device.label; + var label = form.device.label; } - hnum = document.getElementById('num_heuristics'); + var hnum = document.getElementById('num_heuristics'); if (hnum) { hnum = Number(hnum.value); if (hnum == 0) @@ -135,10 +207,11 @@ var oldInput = null; function addHeuristic(parent_name) { - parent = document.getElementById(parent_name); - if (!parent) + var parente = document.getElementById(parent_name); + if (!parente) return; - hnum = document.getElementById('num_heuristics'); + + var hnum = document.getElementById('num_heuristics'); if (!hnum) return; @@ -147,69 +220,86 @@ alert('There is a maximum of 10 heuristics.'); return; } - hstr = 'heuristic' + cur_hnum + ':'; - name_td = document.createElement('td'); + var hstr = 'heuristic' + cur_hnum; + + var name_td = document.createElement('td'); name_td.className = 'systemsTable'; - name_input = document.createElement('input'); + var name_input = document.createElement('input'); name_input.className = 'qdname qdisk'; - name_input.setAttribute('name', hstr + 'hname'); - name_input.setAttribute('id', hstr + 'hname'); + name_input.setAttribute('name', hstr + ':hname'); + name_input.setAttribute('id', hstr + ':hname'); name_input.setAttribute('type', 'text'); name_td.appendChild(name_input); - path_td = document.createElement('td'); + var path_td = document.createElement('td'); path_td.className = 'systemsTable'; - path_input = document.createElement('input'); + var path_input = document.createElement('input'); path_input.className = 'qdpath qdisk'; - path_input.setAttribute('name', hstr + 'hprog'); - path_input.setAttribute('id', hstr + 'hprog'); + path_input.setAttribute('name', hstr + ':hprog'); + path_input.setAttribute('id', hstr + ':hprog'); path_input.setAttribute('type', 'text'); path_td.appendChild(path_input); - interval_td = document.createElement('td'); + var interval_td = document.createElement('td'); interval_td.className = 'systemsTable'; - interval_input = document.createElement('input'); + var interval_input = document.createElement('input'); interval_input.className = 'qdint qdisk'; - interval_input.setAttribute('name', hstr + 'hinterval'); - interval_input.setAttribute('id', hstr + 'hinterval'); + interval_input.setAttribute('name', hstr + ':hinterval'); + interval_input.setAttribute('id', hstr + ':hinterval'); interval_input.setAttribute('type', 'text'); interval_td.appendChild(interval_input); - score_td = document.createElement('td'); + var score_td = document.createElement('td'); score_td.className = 'systemsTable'; - score_input = document.createElement('input'); + var score_input = document.createElement('input'); score_input.className = 'qdscore qdisk'; - score_input.setAttribute('name', hstr + 'hscore'); - score_input.setAttribute('id', hstr + 'hscore'); + score_input.setAttribute('name', hstr + ':hscore'); + score_input.setAttribute('id', hstr + ':hscore'); score_input.setAttribute('type', 'input'); score_td.appendChild(score_input); - tr = document.createElement('tr'); + var del_td = document.createElement('td'); + del_td.className = 'systemsTable'; + var del_img = document.createElement('img'); + del_img.className = 'qdscore qdisk qdel_img'; + del_img.setAttribute('name', hstr + ':hdel'); + del_img.setAttribute('id', hstr + ':hdel'); + del_img.setAttribute('src', '/luci/homebase/x.png'); + del_img.setAttribute('onClick', 'delete_qdisk_heur(this, document.quorum_partition)'); + del_td.appendChild(del_img); + + var tr = document.createElement('tr'); tr.className = 'systemsTable'; + tr.setAttribute('id', 'heuristic' + cur_hnum); tr.appendChild(name_td); tr.appendChild(path_td); tr.appendChild(interval_td); tr.appendChild(score_td); - parent.appendChild(tr); - hnum.value++; + tr.appendChild(del_td); + parente.appendChild(tr); + hnum.value = cur_hnum; } function disableChildrenInput(parent_name) { - parent = document.getElementById(parent_name); - if (!parent) + var parente = document.getElementById(parent_name); + if (!parente) return; - inputElem = parent.getElementsByTagName('input'); + var inputElem = parente.getElementsByTagName('input'); if (!inputElem || inputElem.length < 1) { oldInput = null; return; } + if (inputElem[0].disabled) return; + oldInput = new Array(inputElem.length); for (var i = 0 ; i < inputElem.length ; i++) { - e = inputElem[i]; + var e = inputElem[i]; + if (e.type == 'hidden') + continue; e.disabled = true; if (e.type == 'button') @@ -220,22 +310,18 @@ } function enableChildrenInput(parent_name) { - parent = document.getElementById(parent_name); - if (!parent) + var parente = document.getElementById(parent_name); + if (!parente) return; - inputElem = parent.getElementsByTagName('input'); - if (!inputElem || inputElem.length < 1) { - return; - } - - if (!inputElem[0].disabled) + var inputElem = parente.getElementsByTagName('input'); + if (!inputElem || inputElem.length < 1 || !inputElem[0].disabled) return; for (var i = 0 ; i < inputElem.length ; i++) { - e = inputElem[i]; + var e = inputElem[i]; e.disabled = false; - if (e.type == 'button') + if (e.type == 'button' || e.type == 'hidden') continue; if (oldInput && oldInput[e.name]) e.value = oldInput[e.name];