commit 92b3be8e07cf3c9348304b9e986b08e028fd95d0
Author: Ryan McCabe <rmccabe(a)redhat.com>
Date: Thu Feb 3 13:45:16 2011 -0500
Fix rhbz#639123: Disable action buttons when no nodes are selected
luci/public/css/shared.css | 4 ++++
luci/public/js/shared.js | 17 +++++++++++++++++
luci/templates/cluster_list.html | 12 +++++++++---
luci/templates/failover.html | 7 +++++--
luci/templates/fence.html | 7 +++++--
luci/templates/node.html | 18 ++++++++++++------
luci/templates/resource.html | 3 ++-
luci/templates/service.html | 10 +++++-----
8 files changed, 59 insertions(+), 19 deletions(-)
---
diff --git a/luci/public/css/shared.css b/luci/public/css/shared.css
index 88d82f4..4e9d134 100644
--- a/luci/public/css/shared.css
+++ b/luci/public/css/shared.css
@@ -167,6 +167,10 @@ td.icon, th.icon {
color: #2D2C2C;
}
+.MultiAction[disabled]:hover {
+ cursor: not-allowed;
+}
+
/* specific toolbar's buttons */
/* update */
diff --git a/luci/public/js/shared.js b/luci/public/js/shared.js
index 20c9a0e..7943a20 100644
--- a/luci/public/js/shared.js
+++ b/luci/public/js/shared.js
@@ -69,3 +69,20 @@ function input_to_xml(elem) {
}
return cur_xml_str;
}
+
+function update_multi_action(checkbox_obj) {
+ if (!checkbox_obj || !checkbox_obj.form) {
+ return;
+ }
+ var cur_form = $(checkbox_obj.form);
+ var maction_buttons = $('.MultiAction', cur_form);
+ var maction_items = $('.MultiActionItem', cur_form);
+
+ if (checkbox_obj.checked !== false) {
+ maction_buttons.removeAttr('disabled', 'disabled');
+ } else {
+ if ($(':checked', maction_items).length == 0) {
+ maction_buttons.attr('disabled', 'disabled');
+ }
+ }
+}
diff --git a/luci/templates/cluster_list.html b/luci/templates/cluster_list.html
index 04beeb0..5783c9f 100644
--- a/luci/templates/cluster_list.html
+++ b/luci/templates/cluster_list.html
@@ -26,7 +26,7 @@
<div id="toolbar">
<a href="#"
onclick="$('#add_existing_dialog').dialog('open')"
class="toolbar_button" id="tb_add">Add</a>
<a href="#"
onclick="$('#create_cluster_dialog').dialog('open')"
class="toolbar_button" id="tb_create">Create</a>
- <input type="submit" name="MultiAction"
value="${_('Delete')}" class="toolbar_button"
id="tb_delete"/>
+ <input type="submit" name="MultiAction"
value="${_('Delete')}" class="toolbar_button MultiAction"
id="tb_delete" disabled="disabled"/>
</div>
<!--! OVERVIEW SECTION. -->
@@ -49,7 +49,10 @@
py:attrs="not i%2 and {'class': 'even'} or None"
py:with="identifier = entity_name">
<py:if
test="hasattr(cluster_data['status'],'quorate')">
- <td class="checkbox"><input type="checkbox"
name="${identifier}"/></td>
+ <td class="checkbox">
+ <input type="checkbox" name="${identifier}"
+ onclick="update_multi_action(this)"
class="MultiActionItem"/>
+ </td>
<!--! Branch according to the status of the cluster. -->
<py:choose test="cluster_data['status'].quorate">
<!--! 1) Cluster is OK. -->
@@ -94,7 +97,10 @@
</py:choose>
</py:if>
<div py:if="not
hasattr(cluster_data['status'],'quorate')">
- <td class="checkbox"><input type="checkbox"
name="${identifier}"/></td>
+ <td class="checkbox">
+ <input type="checkbox" name="${identifier}"
+ onclick="update_multi_action(this)"
class="MultiActionItem"/>
+ </td>
<td class="main_id">
<a href="${tg.url('/' + page + '/' + entity_name) +
'/'}">
<span class="entity_unknown">${entity_name}</span>
diff --git a/luci/templates/failover.html b/luci/templates/failover.html
index d38f4fe..516f9f7 100644
--- a/luci/templates/failover.html
+++ b/luci/templates/failover.html
@@ -22,7 +22,7 @@
<xi:include href="submenu.html"/>
<div id="toolbar">
<a href="#"
onclick="$('#create_fdom_dialog').dialog('open')"
class="toolbar_button" id="tb_add">Add</a>
- <input type="submit" name="MultiAction"
value="${_('Delete')}" class="toolbar_button"
id="tb_delete"/>
+ <input type="submit" name="MultiAction"
value="${_('Delete')}" class="toolbar_button MultiAction"
id="tb_delete" disabled="disabled"/>
</div>
<!--! OVERVIEW SECTION. -->
@@ -43,7 +43,10 @@
<tr py:for="i, failover_data in
enumerate(cluster_data.getFailoverDomains())"
py:with="entity_name=failover_data.getName();identifier=entity_name"
py:attrs="entity_name==name and {'class': 'chosen'} or
(not i%2 and {'class': 'even'} or None)">
- <td class="checkbox"><input type="checkbox"
name="${identifier}"/></td>
+ <td class="checkbox">
+ <input type="checkbox" name="${identifier}"
+ onclick="update_multi_action(this)"
class="MultiActionItem"/>
+ </td>
<td class="icon"></td>
<td class="main_id"><a href="${tg.url(base_url +
'/' + entity_name)}">${entity_name}</a></td>
<td class="fdom_tlist_prioritizied">
diff --git a/luci/templates/fence.html b/luci/templates/fence.html
index e08b6c0..372482c 100644
--- a/luci/templates/fence.html
+++ b/luci/templates/fence.html
@@ -21,7 +21,7 @@
<xi:include href="submenu.html"/>
<div id="toolbar">
<a href="#" class="toolbar_button" id="tb_add"
onclick="$('#create_fencedev_dialog').dialog('open')">Add</a>
- <input type="submit" name="MultiAction"
value="${_('Delete')}" class="toolbar_button"
id="tb_delete"/>
+ <input type="submit" name="MultiAction"
value="${_('Delete')}" class="toolbar_button MultiAction"
id="tb_delete" disabled="disabled"/>
</div>
<!--! OVERVIEW SECTION. -->
@@ -45,7 +45,10 @@
local_fence = fence_data.isShared() != True;
nodes_using = cluster_data.getNodesUsingFence(entity_name)"
py:attrs="entity_name==name and {'class': 'chosen'} or
(not i%2 and {'class': 'even'} or None)">
- <td class="checkbox"><input type="checkbox"
name="${identifier}"/></td>
+ <td class="checkbox">
+ <input type="checkbox" name="${identifier}"
+ onclick="update_multi_action(this)"
class="MultiActionItem"/>
+ </td>
<!--! If the fence is shared, display appropriate icon. -->
<td class="main_id"><a href="${tg.url(base_url +
'/' + entity_name)}">${entity_name}</a></td>
<td
class="fence_tlist_type">${fence_data.getPrettyName()}</td>
diff --git a/luci/templates/node.html b/luci/templates/node.html
index 050d1da..ff317d6 100644
--- a/luci/templates/node.html
+++ b/luci/templates/node.html
@@ -57,10 +57,10 @@
<xi:include href="submenu.html"/>
<div id="toolbar">
<a href="#"
onclick="$('#add_nodes_dialog').dialog('open')"
class="toolbar_button" id="tb_add">Add</a>
- <input type="submit" name="MultiAction"
value="${_('Reboot')}" class="toolbar_button"
id="tb_reboot" />
- <input type="submit" name="MultiAction"
value="${_('Join Cluster')}" class="toolbar_button"
id="tb_join" />
- <input type="submit" name="MultiAction"
value="${_('Leave Cluster')}" class="toolbar_button"
id="tb_leave" />
- <input type="submit" name="MultiAction"
value="${_('Delete')}" class="toolbar_button"
id="tb_delete" />
+ <input type="submit" name="MultiAction"
value="${_('Reboot')}" class="toolbar_button MultiAction"
id="tb_reboot" disabled="disabled"/>
+ <input type="submit" name="MultiAction"
value="${_('Join Cluster')}" class="toolbar_button
MultiAction" id="tb_join" disabled="disabled"/>
+ <input type="submit" name="MultiAction"
value="${_('Leave Cluster')}" class="toolbar_button
MultiAction" id="tb_leave" disabled="disabled"/>
+ <input type="submit" name="MultiAction"
value="${_('Delete')}" class="toolbar_button MultiAction"
id="tb_delete" disabled="disabled"/>
</div>
<!--! OVERVIEW SECTION. -->
@@ -89,7 +89,10 @@
nodeobj = cluster_data and cluster_data.getNodeByName(entity_name)
or None;
is_clustered = node_data['clustered'];
nodedbobj = db_helpers.get_cluster_node(tmpl_context.cluster_name,
entity_name);">
- <td class="checkbox"><input type="checkbox"
name="${identifier}"/></td>
+ <td class="checkbox">
+ <input type="checkbox" name="${identifier}"
+ onclick="update_multi_action(this)"
class="MultiActionItem"/>
+ </td>
<!--! Branch according to the status of the node. -->
<?python
if nodeobj == None:
@@ -163,7 +166,10 @@
</py:with>
<tr py:for="i in nodes" py:with="hostname =
i.node_name">
<py:if test="cluster_status.nodes.keys().count(i.node_name) ==
0">
- <td class="checkbox"><input type="checkbox"
name="${hostname}"/></td>
+ <td class="checkbox">
+ <input type="checkbox" name="${hostname}"
+ onclick="update_multi_action(this)"
class="MultiActionItem"/>
+ </td>
<td class="icon">
<img src="${tg.url('/images/question.png')}"
alt="Status of the node is unknown." />
</td>
diff --git a/luci/templates/resource.html b/luci/templates/resource.html
index bae7c8d..68b4bb3 100644
--- a/luci/templates/resource.html
+++ b/luci/templates/resource.html
@@ -21,7 +21,7 @@
<xi:include href="submenu.html"/>
<div id="toolbar">
<a href="#" class="toolbar_button" id="tb_add"
onclick="$('#add_resource_dialog').dialog('open')">Add</a>
- <input type="submit" name="MultiAction"
value="${_('Delete')}" class="toolbar_button"
id="tb_delete" />
+ <input type="submit" name="MultiAction"
value="${_('Delete')}" class="toolbar_button MultiAction"
id="tb_delete" disabled="disabled"/>
</div>
<!--! OVERVIEW SECTION. -->
@@ -44,6 +44,7 @@
py:attrs="entity_name==name and {'class': 'chosen'} or (not
i%2 and {'class': 'even'} or None)">
<td class="checkbox">
<input type="checkbox" name="${entity_name}"
+ onclick="update_multi_action(this)"
class="MultiActionItem"
py:attrs="refcount != 1 and {'disabled':'disabled'}
or {}"/>
</td>
<td class="main_id">
diff --git a/luci/templates/service.html b/luci/templates/service.html
index 3a428d1..9bb6346 100644
--- a/luci/templates/service.html
+++ b/luci/templates/service.html
@@ -23,10 +23,10 @@
<xi:include href="submenu.html"/>
<div id="toolbar">
<a href="#" class="toolbar_button" id="tb_add"
onclick="$('#add_service_dialog').dialog('open');return
false;">Add</a>
- <input type="submit" name="MultiAction"
value="${_('Start')}" class="toolbar_button"
id="tb_start" />
- <input type="submit" name="MultiAction"
value="${_('Restart')}" class="toolbar_button"
id="tb_reboot" />
- <input type="submit" name="MultiAction"
value="${_('Disable')}" class="toolbar_button"
id="tb_disable" />
- <input type="submit" name="MultiAction"
value="${_('Delete')}" class="toolbar_button"
id="tb_delete" />
+ <input type="submit" name="MultiAction"
value="${_('Start')}" class="toolbar_button MultiAction"
id="tb_start" disabled="disabled"/>
+ <input type="submit" name="MultiAction"
value="${_('Restart')}" class="toolbar_button MultiAction"
id="tb_reboot" disabled="disabled"/>
+ <input type="submit" name="MultiAction"
value="${_('Disable')}" class="toolbar_button MultiAction"
id="tb_disable" disabled="disabled"/>
+ <input type="submit" name="MultiAction"
value="${_('Delete')}" class="toolbar_button MultiAction"
id="tb_delete" disabled="disabled"/>
</div>
<!--! OVERVIEW SECTION. -->
@@ -50,7 +50,7 @@
entity_obj = (cluster_status and cluster_status.services and
cluster_status.services.has_key(entity_name)) and cluster_status.services[entity_name] or
{}"
py:attrs="entity_name==name and {'class': 'chosen'} or
(not i%2 and {'class': 'even'} or None)">
<td class="checkbox">
- <input type="checkbox" name="${entity_name}"/>
+ <input type="checkbox" name="${entity_name}"
onclick="update_multi_action(this)" class="MultiActionItem"/>
</td>
<!--! Branch according to the status of the service. -->
<py:choose test="hasattr(entity_obj, 'running') and
entity_obj.running">