Blob Blame History Raw
From 5c62afc314bfbff55e36c0f7f8e9aec0cc9246c4 Mon Sep 17 00:00:00 2001
From: Tomas Jelinek <tojeline@redhat.com>
Date: Wed, 2 Sep 2015 14:04:55 +0200
Subject: [PATCH] web UI: mark unsaved permissions forms

---
 pcsd/public/js/pcsd.js              | 36 ++++++++++++++++++++++++++++++++++++
 pcsd/views/_permissions_cluster.erb |  5 ++++-
 pcsd/views/permissions.erb          |  8 +++++++-
 3 files changed, 47 insertions(+), 2 deletions(-)

diff --git a/pcsd/public/js/pcsd.js b/pcsd/public/js/pcsd.js
index 2c71e6b..879b533 100644
--- a/pcsd/public/js/pcsd.js
+++ b/pcsd/public/js/pcsd.js
@@ -2205,6 +2205,7 @@ function permissions_load_cluster(cluster_name, callback) {
       $("#" + element_id + " :checkbox").each(function(key, checkbox) {
         permissions_fix_dependent_checkboxes(checkbox);
       });
+      permissions_cluster_dirty_flag(cluster_name, false);
       if (callback) {
         callback();
       }
@@ -2259,8 +2260,27 @@ function permissions_save_cluster(form) {
   });
 }
 
+function permissions_cluster_dirty_flag(cluster_name, flag) {
+  var cluster_row = permissions_get_cluster_row(cluster_name);
+  if (cluster_row) {
+    var dirty_elem = cluster_row.find("span[class=unsaved_changes]");
+    if (dirty_elem) {
+      if (flag) {
+        dirty_elem.show();
+      }
+      else {
+        dirty_elem.hide();
+      }
+    }
+  }
+}
+
 function permission_remove_row(button) {
+  var cluster_name = permissions_get_clustername(
+    $(button).parents("form").first()
+  );
   $(button).parent().parent().remove();
+  permissions_cluster_dirty_flag(cluster_name, true);
 }
 
 function permissions_add_row(template_row) {
@@ -2268,6 +2288,9 @@ function permissions_add_row(template_row) {
   var user_type = permissions_get_row_type(template_row);
   var max_key = -1;
   var exists = false;
+  var cluster_name = permissions_get_clustername(
+    $(template_row).parents("form").first()
+  );
 
   if("" == user_name) {
     alert("Please enter the name");
@@ -2326,6 +2349,8 @@ function permissions_add_row(template_row) {
   template_inputs.removeAttr("checked").removeAttr("selected");
   template_inputs.removeAttr("disabled").removeAttr("readonly");
   $(template_row).find(":input[type=text]").val("");
+
+  permissions_cluster_dirty_flag(cluster_name, true);
 }
 
 function permissions_get_dependent_checkboxes(checkbox) {
@@ -2400,3 +2425,14 @@ function permissions_get_checkbox_permission(checkbox) {
   return "";
 }
 
+function permissions_get_cluster_row(cluster_name) {
+  var cluster_row = null;
+  $('#cluster_list td[class=node_name]').each(function(index, elem) {
+    var jq_elem = $(elem);
+    if (jq_elem.text().trim() == cluster_name.trim()) {
+      cluster_row = jq_elem.parents("tr").first();
+    }
+  });
+  return cluster_row;
+}
+
diff --git a/pcsd/views/_permissions_cluster.erb b/pcsd/views/_permissions_cluster.erb
index 232a5de..4048366 100644
--- a/pcsd/views/_permissions_cluster.erb
+++ b/pcsd/views/_permissions_cluster.erb
@@ -58,7 +58,10 @@
                   <% if user['allow'].include?(perm['code']) %>
                     checked="checked"
                   <% end %>
-                  onchange="permissions_fix_dependent_checkboxes(this);"
+                  onchange="
+                    permissions_fix_dependent_checkboxes(this);
+                    permissions_cluster_dirty_flag('<%= h(@cluster_name) %>', true);
+                  "
                 >
               </td>
             <% } %>
diff --git a/pcsd/views/permissions.erb b/pcsd/views/permissions.erb
index b02d9d3..1e38d7e 100644
--- a/pcsd/views/permissions.erb
+++ b/pcsd/views/permissions.erb
@@ -16,7 +16,8 @@
       <table cellpadding="0" cellspacing="0" style="width:100%;">
         <tr>
           <th> </th>
-          <th>CLUSTER NAME</th>
+          <th> </th>
+          <th>CLUSTER&nbsp;NAME</th>
           <th style="padding-right: 16px;"> </th>
         </tr>
         <% @clusters.each do |c| %>
@@ -28,6 +29,11 @@
             <td class="node_list_sprite">
               <div class="check sprites"></div>
             </td>
+            <td style="min-width:1em; padding-right:0.5em;">
+              <span class="unsaved_changes" style="display:none;"
+                title="There are unsaved changes in the form"
+              >(*)</span>
+            </td>
             <td nowrap class="node_name">
               <%= h(c.name) %>
             </td>
-- 
1.9.1