From mboxrd@z Thu Jan 1 00:00:00 1970 From: rmccabe@sourceware.org Date: 27 Nov 2007 16:58:20 -0000 Subject: [Cluster-devel] conga/luci plone-custom/conga.js plone-custom/ ... Message-ID: <20071127165820.771.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 2007-11-27 16:58:19 Modified files: luci/plone-custom: conga.js conga_ajax.js luci/homebase : homebase_common.js index_html luci/cluster : index_html resource_form_handlers.js Added files: luci/plone-custom: luci.css Removed files: luci/homebase : luci_homebase.css Log message: - Shuffle some files around to allow better caching - Add some more javascript async helpers Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/luci.css.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga.js.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga_ajax.js.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/homebase_common.js.diff?cvsroot=cluster&r1=1.21&r2=1.22 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/index_html.diff?cvsroot=cluster&r1=1.24&r2=1.25 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/luci_homebase.css.diff?cvsroot=cluster&r1=1.46&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/index_html.diff?cvsroot=cluster&r1=1.39&r2=1.40 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&r1=1.40&r2=1.41 /cvs/cluster/conga/luci/plone-custom/luci.css,v --> standard output revision 1.1 --- conga/luci/plone-custom/luci.css +++ - 2007-11-27 16:58:19.542109000 +0000 @@ -0,0 +1,535 @@ +/* +** 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. +*/ + +input[type=text], input[type=password] { + padding: .2em ! important; + font-family: "Bitstream Vera Sans Mono", "DejaVu Sans Mono", monospace; + font-size: 12px; +} + +input[type=button] { + font-size: 12px; +} + +input[type=checkbox], input[type=radio] { + float: left ! important; + vertical-align: middle; + background: #dee7ec; + margin-right: +.3333em; +} + +input.pad_left { + margin-left: +.3333em; +} + +input.pad_right { + margin-right: +.3333em; +} + +td.pad_right { + padding-right: +.6666em; +} + +form.form_border { + border-bottom: 1px solid #8cacbb; +} + +div.fence { + max-width: 700px; + padding: .5em; +} + +*.fence { + background: #dee7ec; +} + +table.fence { + padding: .618em; + width: 700px; +} + +div.fence_level { + padding: .4045em; + border-bottom: 1px solid #cccccc; +} + +div.fence_instance { + margin-left: 1em; + padding-left: .4045em; + border-left: 1px solid #cccccc; +} + +div.fence, +td.fence { + padding-top: .309em; + padding-bottom: .309em; +} + +td.fence { + width: 50%; +} + +ul.configTab { + color: #436976 !important; + margin: 20px 0px 0px 0px !important; + padding: 0px !important; + padding-left: 15px !important; + border-bottom: none !important; + z-index: 1 !important; +} + +input.qdisk { + font-family: "Bitstream Vera Sans Mono", "DejaVu Sans Mono", monospace ! important; + font-size: 12px ! important; + padding: .2em; +} + +input.qdname { + padding: .2em; + width: 15em; +} + +input.qdint { + padding: .2em; + width: 5em; +} + +input.qdpath { + padding: .2em; + width: 20em; +} + +input.qdscore { + padding: .2em; + width: 5em; +} + +div.spacing { + margin-top: 16px; +} + +ul.vanilla, li.vanilla { + list-style-type: none ! important; + list-style-image: none !important; + margin-left: 0 ! important; +} + +ul.statusmsg, li.statusmsg { + color: black ! important; +} + +ul.deploy { + margin-bottom: +.5em; +} + +li.configTab { + display: inline ! important; + overflow: hidden ! important; + list-style-type: none ! important; + padding-left: 6px ! important; + padding-bottom: 0px ! important; + margin-bottom: 0px ! important; + border-bottom: none ! important; +} + +#configTabContent { + background: #dee7ec !important; + margin-top: 0px !important; + padding: 20px !important; + border: 1px solid #8cacbb !important; + z-index: 2 !important; + max-width: 700px; +} + +a.configTab, a.configTabActive { + color: #436976 !important; + background: #ffffff !important; + border: 1px solid #8cacbb !important; + border-bottom: 1px solid transparent !important; + padding: 2px 6px 0px 6px !important; + margin: 0 !important; + text-decoration: none !important; +} + +a.configTabActive { + background: #dee7ec !important; + border-bottom: 2px solid #dee7ec !important; +} + +a.configTab:hover { + color: #436976 !important; + background: #dee7ec !important; +} + +*.errmsgs,*.retmsgs { + list-style-image: none !important; + list-style-type: none !important; +} + +*.error, *.errmsgs { + color: red !important; +} + +p.luciInst { + color: black; +} + +h3.homebase { + color: #436976; + margin-top: 1em; + margin-bottom: .5em; + font-size: 12px; + font-weight: 800; +} + +h2.homebase { + margin-bottom: +1em; +} + +*.retmsgs { + color: green !important; +} + +p.errmsgs, p.retmsgs { + font-weight: 800; +} + +div.errmsgs { + padding: .5em; + border-style: dotted; + border-width: 2px; + border-color: red; + margin-top: 2em; + max-width: 600px ! important; +} + +div.retmsgs { + padding: .5em; + margin-top: 2em; + border-style: dotted; + border-width: 2px; + border-color: green; + max-width: 600px ! important; +} + +div.hbCSystems { + margin-left:1em; + padding-top:.5em; +} + +div.hbSSysList { + margin-top: .25em; + margin-bottom: .25em; +} + +div.hbSubmit,p.hbSubmit { + margin-top: .5em; + margin-bottom: .5em; + margin-right: .5em; +} + +#hbSubmit { + margin-top: +1.5em; +} + +div.systemsTableTop { + padding-top: +1em; + padding-bottom: +.5em; +} + +div.systemsTableEnd { + padding-top: +.5em; + padding-bottom: +1em; +} + +table.systemsTable { + padding-left: +.5em; + background: #dee7ec; + max-width: 700px; +} + +td.systemsTable { + margin: 0em; + padding: 0em 1em .33em 0em; + padding-left: 0.5em; + background: #dee7ec; + text-align: left; +} + +th.systemsTable { + text-align: left; + margin-bottom: .75em; + line-height: 115%; + background: #dee7ec; + padding: .5em; +} + +tfoot.systemsTable { + margin-top: .75em; + padding: .5em; +} + +td.hbAddUser { + margin-top:.5em; + padding: .1em; +} + +div.hbcheckdiv { + margin-left: 0em; + padding-left: 0em; + padding-top: .55em; +} + +*.formerror { + background: #f5f6be; +} + +img.qdel_img { + background: #dee7ec; + border: none; +} + +*.invisible,#invisible, #allSameDiv { + visibility: hidden; + display: none; +} + +input.hbInputSys, input.hostname { + padding: .2em ! important; + width: 200px; +} + +ul.cluster { + padding-top: +.2em; + padding-left: +.5em; +} + +img.service_tree { + border: none; + margin-right: 1em; +} + +div.service_tree { + margin-top: 1em; +} + +span.tree { + font-size: 10px; +} + +li.node_fdom { + list-style-image: url(small_fdom.png); +} + +li.node_active { + list-style-image: url(small_node_active.png); +} + +li.node_inactive { + list-style-image: url(small_node_inactive.png); +} + +li.node_unknown { + list-style-image: url(small_node_unknown.png); +} + +li.cluster_service { + list-style-image:url(small_svc.png); +} + +strong.node, +strong.cluster { + text-align: left; + font-size: 9pt; +} + +*.reshdr { + text-align: left; + font-size: 10pt; + font-weight: 600; + padding-bottom: +1em; +} + +strong.service_name, +strong.node_name, +strong.cluster_name { + font-size: 10pt; +} + +td.service_name, +td.node_name, +td.cluster_name { + vertical-align: top; + text-align: left; + font-size: 11pt; + width: 50%; +} + +td.node_log { + vertical-align: top; + padding-top: +.5em; + padding-bottom: +.5em; +} + +td.node_status, +td.cluster_quorum { + vertical-align: top; + line-height: 110%; + width: 100%; +} + +td.node_status { + padding-top: +.33em; +} + +td.node_services, +td.cluster_nodes, +td.fence_backup, +td.fence_main, +td.node_fdom, +td.cluster_services { + vertical-align: top; + width: 50%; +} + +td.node_services, +td.node_fdom { + padding-top: +.33em; +} + +#node_list, +#cluster_list { + max-width: 700px; +} + +tr.info_top, +tr.info_middle, +tr.info_bottom { + width: 100%; + vertical-align: top; + padding: .5em; +} + +a.cluster_help:link, +a.cluster_help:visited, +a.cluster_help:visited { + color: #000000; + text-decoration: none ! important; +} + +*.cluster_help:hover { + cursor: help; +} + +a.cluster_help:hover { + text-decoration: none ! important; + cursor: help; + color: #000000; + border-bottom: 1px solid #cccccc; +} + +a.cluster:link, +a.cluster:visited { + border-bottom: 1px dashed #cccccc; + text-decoration: none ! important; +} + +a.cluster:hover, +a.cluster:active { + border-bottom: 1px solid #cccccc; + text-decoration: none ! important; +} + +*.stopped, +*.node_inactive { + color: red ! important; +} + +*.fdom_link { + color: blue ! important; +} + +img.deleteRow, img.closeBox { + cursor: pointer; +} + +*.running, +*.node_active { + color: green ! important; +} + +*.node_unknown { + color: gray ! important; +} + +input.hbInputPass { + padding: .2em ! important; + width: 160px; +} + +*.hbclosebox { + text-align: right; +} + +div.systemsList { + margin-top: .25em ! important; + margin-bottom: .25em ! important; +} + +div.fence_add { + margin-top: .25em ! important; + margin-bottom: .25em ! important; +} + +div.fence_container { + border: thin solid #c9c9c9; +} + +div.fence_control { + margin-top: 2em; + margin-bottom: .75em; + margin-left: .33em; +} + +div.service_comp_list { + background: #dee7ec; + max-width: 700px; + padding: 1em; + margin-top: 0; +} + +div.reschoose { + background: #dee7ec; + padding: .5em; + max-width: 700px; +} + +*.rescfg { + background: #dee7ec; +} + +div.service_comp { + background: #dee7ec; + padding: .618em; + margin-top: .5em; + border-left: thin solid #c9c9c9; + border-bottom: thin solid #c9c9c9; + margin-bottom: 1em; +} + +div.service_comp > div.service_comp { + margin-left: +20px; + margin-bottom: 0px; + border-bottom: none; +} +/* +div.rc_indent0 { + border-left: none ! important; +} +*/ --- conga/luci/plone-custom/conga.js 2007/09/25 03:51:42 1.7 +++ conga/luci/plone-custom/conga.js 2007/11/27 16:58:18 1.8 @@ -35,3 +35,157 @@ if (newwin) newwin.focus(); } + +function set_form_err(ielem) { + if (ielem) { + ielem.className += ' formerror'; + } +} + +function clr_form_err(ielem) { + if (ielem) { + ielem.className = ielem.className.replace(/( )?formerror/, ''); + } +} + +function toggle_visible(img_obj, elem_id, label_id) { + var elem = document.getElementById(elem_id); + if (!elem) { + return (-1); + } + + var old_state = !!!elem.className.match(/invisible/i); + + if (label_id) { + var label_obj = document.getElementById(label_id); + if (!label_obj) { + return (-1); + } + + if (old_state) { + label_obj.innerHTML = 'Show'; + } else { + label_obj.innerHTML = 'Hide'; + } + } + + if (old_state) { + img_obj.src = 'arrow_right.png'; + img_obj.alt = '[-]'; + elem.className += ' invisible'; + } else { + img_obj.src = 'arrow_down.png'; + img_obj.alt = '[+]'; + elem.className = elem.className.replace(/invisible/i,''); + } + return (0); +} + +function is_valid_int(str, min, max) { + if (str.match(/[^0-9 -]/)) { + return (0); + } + var val = parseInt(str, 10); + if (isNaN(val)) { + return (0); + } + if (min !== null && val < min) { + return (0); + } + if (max !== null && val > max) { + return (0); + } + return (1); +} + +function error_dialog(errors) { + if (!errors || errors.length < 1) { + return (null); + } + alert('The following errors were found:\n\n' + errors.join('\n')); + return (-1); +} + +function str_is_blank(str) { + return (!str || !str.replace(/\s/g, '')); +} + +function str_is_valid(str, valid_regex_str) { + if (!str || !valid_regex_str) { + return (null); + } + var re = eval(valid_regex_str); + var invalid = str.replace(re, ''); + if (!invalid) { + return (null); + } + return (invalid); +} + +function checkAllBoxes(str, val) { + var i = 0; + var element; + while ((element = document.getElementById(str + i++))) { + element.checked = val; + } +} + +function checkChildren(parent_cont, parent_input) { + if (!parent_cont || !parent_input) { + return; + } + var parent = document.getElementById(parent_cont); + var children = parent.getElementsByTagName('input'); + for (var i = 0 ; i < children.length ; i++) { + if (children[i] === parent_input) { + continue; + } + if (children[i].type === 'checkbox') { + children[i].checked = parent_input.checked; + } + } +} + +function isValidHost(str) { + var i = str.split('.'); + + if (i.length === 1) { + return ('Hostnames must be fully qualified.'); + } + + if (i.length === 4 && !isNaN(parseInt(i[3]))) { + var o1 = parseInt(i[0]); + var o2 = parseInt(i[1]); + var o3 = parseInt(i[2]); + var o4 = parseInt(i[3]); + + if (isNaN(o1) || isNaN(o2) || isNaN(o3) || + ((o1 & 0xff) !== o1) || + ((o2 & 0xff) !== o2) || + ((o3 & 0xff) !== o3) || + ((o4 & 0xff) !== o4)) + { + return ('Invalid IP Address.'); + } + + return (null); + } + + if (!isNaN(parseInt(i[i.length - 1]))) { + return ('Invalid IP Address.'); + } + + if (!str.match(/^[0-9A-Za-z][0-9A-Za-z.-]*$/)) { + return ('Hostnames can contain only alphanumeric characters and hyphens.'); + } + + return (null); +} + +function delete_element_id(id_str) { + var elem = document.getElementById(id_str); + if (!elem || !elem.parentNode) { + return (-1); + } + elem.parentNode.removeChild(elem); +} --- conga/luci/plone-custom/conga_ajax.js 2007/11/12 17:10:43 1.4 +++ conga/luci/plone-custom/conga_ajax.js 2007/11/27 16:58:18 1.5 @@ -128,3 +128,23 @@ } return get_ajax_msgs(obj, 'errors'); } + +function show_validation_div() { + var vd = document.getElementById('validation_div'); + if (!vd) { + return (-1); + } + + try { + vd.className.replace(/invisible/gi, ''); + } catch (...) { + /* ignore it */; + } +} + +function hide_validation_wait() { + var vd = document.getElementById('validation_wait'); + if (vd) { + vd.className += ' invisible'; + } +} --- conga/luci/homebase/homebase_common.js 2007/09/25 03:51:21 1.21 +++ conga/luci/homebase/homebase_common.js 2007/11/27 16:58:18 1.22 @@ -7,152 +7,6 @@ ** Free Software Foundation. */ -function set_form_err(ielem) { - if (ielem) { - ielem.className += ' formerror'; - } -} - -function clr_form_err(ielem) { - if (ielem) { - ielem.className = ielem.className.replace(/( )?formerror/, ''); - } -} - -function toggle_visible(img_obj, elem_id, label_id) { - var elem = document.getElementById(elem_id); - if (!elem) { - return (-1); - } - - var old_state = !!!elem.className.match(/invisible/i); - - if (label_id) { - var label_obj = document.getElementById(label_id); - if (!label_obj) { - return (-1); - } - - if (old_state) { - label_obj.innerHTML = 'Show'; - } else { - label_obj.innerHTML = 'Hide'; - } - } - - if (old_state) { - img_obj.src = 'arrow_right.png'; - img_obj.alt = '[-]'; - elem.className += ' invisible'; - } else { - img_obj.src = 'arrow_down.png'; - img_obj.alt = '[+]'; - elem.className = elem.className.replace(/invisible/i,''); - } - return (0); -} - -function is_valid_int(str, min, max) { - if (str.match(/[^0-9 -]/)) { - return (0); - } - var val = parseInt(str, 10); - if (isNaN(val)) { - return (0); - } - if (min !== null && val < min) { - return (0); - } - if (max !== null && val > max) { - return (0); - } - return (1); -} - -function error_dialog(errors) { - if (!errors || errors.length < 1) { - return (null); - } - alert('The following errors were found:\n\n' + errors.join('\n')); - return (-1); -} - -function str_is_blank(str) { - return (!str || !str.replace(/\s/g, '')); -} - -function str_is_valid(str, valid_regex_str) { - if (!str || !valid_regex_str) { - return (null); - } - var re = eval(valid_regex_str); - var invalid = str.replace(re, ''); - if (!invalid) { - return (null); - } - return (invalid); -} - -function checkAllBoxes(str, val) { - var i = 0; - var element; - while ((element = document.getElementById(str + i++))) { - element.checked = val; - } -} - -function checkChildren(parent_cont, parent_input) { - if (!parent_cont || !parent_input) { - return; - } - var parent = document.getElementById(parent_cont); - var children = parent.getElementsByTagName('input'); - for (var i = 0 ; i < children.length ; i++) { - if (children[i] === parent_input) { - continue; - } - if (children[i].type === 'checkbox') { - children[i].checked = parent_input.checked; - } - } -} - -function isValidHost(str) { - var i = str.split('.'); - - if (i.length === 1) { - return ('Hostnames must be fully qualified.'); - } - - if (i.length === 4 && !isNaN(parseInt(i[3]))) { - var o1 = parseInt(i[0]); - var o2 = parseInt(i[1]); - var o3 = parseInt(i[2]); - var o4 = parseInt(i[3]); - - if (isNaN(o1) || isNaN(o2) || isNaN(o3) || - ((o1 & 0xff) !== o1) || - ((o2 & 0xff) !== o2) || - ((o3 & 0xff) !== o3) || - ((o4 & 0xff) !== o4)) - { - return ('Invalid IP Address.'); - } - - return (null); - } - - if (!isNaN(parseInt(i[i.length - 1]))) { - return ('Invalid IP Address.'); - } - - if (!str.match(/^[0-9A-Za-z][0-9A-Za-z.-]*$/)) { - return ('Hostnames can contain only alphanumeric characters and hyphens.'); - } - - return (null); -} - function view_certs_only(form, state) { var num_systems = form.numStorage.value; if (!form.numStorage) { @@ -213,14 +67,6 @@ } } -function delete_element_id(id_str) { - var elem = document.getElementById(id_str); - if (!elem || !elem.parentNode) { - return (-1); - } - elem.parentNode.removeChild(elem); -} - function pwd0Change(form) { var element = document.getElementById('allSameCheckBox'); if (element && element.checked) { --- conga/luci/homebase/index_html 2007/09/25 04:00:23 1.24 +++ conga/luci/homebase/index_html 2007/11/27 16:58:18 1.25 @@ -39,7 +39,7 @@ --- conga/luci/cluster/index_html 2007/09/25 04:00:23 1.39 +++ conga/luci/cluster/index_html 2007/11/27 16:58:19 1.40 @@ -62,7 +62,7 @@ @@ -199,6 +199,21 @@ + +
--- conga/luci/cluster/resource_form_handlers.js 2007/08/23 15:02:46 1.40 +++ conga/luci/cluster/resource_form_handlers.js 2007/11/27 16:58:19 1.41 @@ -456,7 +456,9 @@ pdiv.appendChild(child_div); } -function forms_to_xml(master_form) { +var submit_btn = null; + +function forms_to_xml(submit_button, master_form) { var errors = new Array(); var form_xml = ''; var svc_name = null; @@ -465,6 +467,9 @@ var exclusive = 0; var recovery = null; + submit_btn = submit_button; + submit_button.disabled = true; + var form = document.getElementsByTagName('form'); for (var i = 0 ; i < form.length ; i++) { if (form[i].name == 'service_name_form') { @@ -546,8 +551,10 @@ errors.push('You entered an invalid recovery option. Valid options are "relocate" "restart" and "disable"'); } - if (error_dialog(errors)) + if (error_dialog(errors)) { + submit_button.disabled = false; return (-1); + } /* sort this out in the backend */ if (form_xml) { @@ -569,7 +576,52 @@ confirm_msg = 'Create this service?'; else confirm_msg = 'Save changes to this service?'; - if (confirm(confirm_msg)) - master_form.submit(); + if (confirm(confirm_msg)) { + master_form.pagetype.value = '1001'; + update_clusvc(master_form, '/luci/cluster/index_html?pagetype=1001'); + } + return (0); } + +function clusvc_callback_check(ret_status, obj) { + if (ret_status === null) { + /* Not ready */ + return; + } + + if (submit_btn) { + submit_btn.disabled = false; + } + + if (ret_status !== true) { + /* A communication error occurred. */ + alert(obj); + return; + } + + var err = get_ricci_response_status(obj.responseXML); + if (err !== null) { + if (err.length > 0) { + alert(err.join('\n')); + return; + } else { + alert('Errors occurred when validating this form.'); + return; + } + } + + var svc_form = submit_btn.form; + if (svc_form) { + svc_form.pagetype.value = svc_form.orig_pagetype.value; + svc_form.submit(); + } +} + +function clusvc_callback() { + return check_ajax_xml(xmlHttp_object, clusvc_callback_check); +} + +function update_clusvc(form, url) { + initiate_async_post(form, url, clusvc_callback); +}