[Ovirt-devel] [PATCH] consolidated the storage action links.

Scott Seago sseago at redhat.com
Wed Jun 18 18:09:10 UTC 2008


Add and Create Storage Pool are now two tabs on the same popup widget. I've also consolidated delete and remove, adding a confirmation dialog for the user to choose which action to take (as specified in the design mockups).

One thing remaining for a follow-on task is to add some css styling for the  radio buttons and text to make it conform better to the design mockups.

Signed-off-by: Scott Seago <sseago at redhat.com>
---
 wui/src/app/controllers/hardware_controller.rb     |    5 ++
 wui/src/app/controllers/storage_controller.rb      |   13 ++--
 wui/src/app/helpers/application_helper.rb          |    7 ++
 wui/src/app/views/hardware/removestorage.rhtml     |   25 +++++++
 wui/src/app/views/hardware/show_storage.rhtml      |   21 ++-----
 .../app/views/storage/{new.rhtml => _new.rhtml}    |   11 +---
 wui/src/app/views/storage/addstorage.html.erb      |   67 +++++++++++---------
 wui/src/public/javascripts/ovirt.js                |   27 ++++++++
 wui/src/public/stylesheets/components.css          |    3 +
 9 files changed, 118 insertions(+), 61 deletions(-)
 create mode 100644 wui/src/app/views/hardware/removestorage.rhtml
 rename wui/src/app/views/storage/{new.rhtml => _new.rhtml} (77%)

diff --git a/wui/src/app/controllers/hardware_controller.rb b/wui/src/app/controllers/hardware_controller.rb
index 9718d60..6d56e31 100644
--- a/wui/src/app/controllers/hardware_controller.rb
+++ b/wui/src/app/controllers/hardware_controller.rb
@@ -290,6 +290,11 @@ class HardwareController < ApplicationController
     end
   end
 
+  def removestorage
+    pre_modify
+    render :layout => 'popup'    
+  end
+
   def destroy
     parent = @pool.parent
     if not(parent)
diff --git a/wui/src/app/controllers/storage_controller.rb b/wui/src/app/controllers/storage_controller.rb
index 492c4e1..25121d2 100644
--- a/wui/src/app/controllers/storage_controller.rb
+++ b/wui/src/app/controllers/storage_controller.rb
@@ -81,9 +81,6 @@ class StorageController < ApplicationController
   end
 
   def new
-    @storage_pools = @hardware_pool.storage_volumes
-    @storage_types = StoragePool::STORAGE_TYPES.keys
-    render :layout => 'popup'    
   end
 
   def new2
@@ -145,10 +142,12 @@ class StorageController < ApplicationController
   end
 
   def addstorage
-    @hardware_pool = Pool.find(params[:hardware_pool_id])
-    @unassigned = Pool.root.storage_pools.size
-    # FIXME: @assigned should match  the updated assigned storage pools query when that's done
-    @assigned = StoragePool.find(:all).size
+    @hardware_pool = HardwarePool.find(params[:hardware_pool_id])
+    @perm_obj = @hardware_pool
+    @redir_controller = @perm_obj.get_controller
+    authorize_admin
+    @storage_pools = @hardware_pool.storage_volumes
+    @storage_types = StoragePool::STORAGE_TYPES.keys
     render :layout => 'popup'    
   end
 
diff --git a/wui/src/app/helpers/application_helper.rb b/wui/src/app/helpers/application_helper.rb
index 75b6195..58a6358 100644
--- a/wui/src/app/helpers/application_helper.rb
+++ b/wui/src/app/helpers/application_helper.rb
@@ -77,6 +77,13 @@ module ApplicationHelper
      }
   end
 
+  def radio_button_tag_with_label(label, name, value = "1", checked = false) 
+    %{ 
+      <div class="i"><label for="#{name}">#{_(label)}</label>
+      #{radio_button_tag name, value, checked}</div>
+     }
+  end
+
   def popup_footer(action, label)
     %{ 
       <div style="background: url(#{image_path "fb_footer.jpg"}) repeat-x; height: 37px; text-align:right; padding: 9px 9px 0 0;">
diff --git a/wui/src/app/views/hardware/removestorage.rhtml b/wui/src/app/views/hardware/removestorage.rhtml
new file mode 100644
index 0000000..8cee2e7
--- /dev/null
+++ b/wui/src/app/views/hardware/removestorage.rhtml
@@ -0,0 +1,25 @@
+<%- content_for :title do -%>
+  Remove Storage Pool
+<%- end -%>
+<%- content_for :description do -%>
+  Please confirm your choice to remove this storage pool.
+<%- end -%>
+
+<form id="remove_storage_selection" >
+<div class="dialog_form">
+    <%= error_messages_for 'remove_storage_pool' %>
+
+  <% form_tag  do %>
+    <!--[form:storage_pool]-->
+    <%= hidden_field_tag 'hardware_pool_id', @pool.id %>
+    <% if @pool.id != HardwarePool.get_default_pool.id %>
+      <%= radio_button_tag_with_label "Remove this Storage Pool from #{@pool.name} (moving it to #{HardwarePool.get_default_pool.name})", "remove_selection", "remove", true %>
+      <%= radio_button_tag_with_label "Delete this Storage Pool (making its storage volumes unavailable)", "remove_selection", "delete", false %>
+    <% else %>
+      <%= radio_button_tag_with_label "Delete this Storage Pool (making its storage volumes unavailable)", "remove_selection", "delete", true %>
+    <% end %>
+    <!--[eoform:storage_pool]-->
+  <% end %>
+</div>
+</form>
+<%= popup_footer("delete_or_remove_storage()", "Remove Storage Pool") %>
diff --git a/wui/src/app/views/hardware/show_storage.rhtml b/wui/src/app/views/hardware/show_storage.rhtml
index 08c762a..ec1a82d 100644
--- a/wui/src/app/views/hardware/show_storage.rhtml
+++ b/wui/src/app/views/hardware/show_storage.rhtml
@@ -1,29 +1,18 @@
 <div id="toolbar_nav">
 <ul>
     <li><a href="<%= url_for :controller => 'storage', :action => 'addstorage', :hardware_pool_id => @pool %>" rel="facebox[.bolder]"><%= image_tag "icon_addstorage.png", :style => "vertical-align:middle;" %>  Add Storage Server</a></li>
-    <li><a href="<%= url_for :controller => 'storage', :action => 'new', :hardware_pool_id => @pool %>" rel="facebox[.bolder]"><%= image_tag "icon_addstorage.png", :style => "vertical-align:middle;" %>  Create Storage Server</a></li>
     <li>
-      <a href="#" onClick="return validate_for_move();" ><%= image_tag "icon_move.png", :style=>"vertical-align:middle;" %>  Move</a>
+      <a href="#" onClick="return validate_storage_for_move();" ><%= image_tag "icon_move.png", :style=>"vertical-align:middle;" %>  Move</a>
       <a id="move_link_hidden" href="<%= url_for :controller => 'hardware', :action => 'move', :id => @pool, :resource_type=>'storage' %>" rel="facebox[.bolder]"  style="display:none" ></a>
     </li>
-    <li><a href="#" onClick="remove_storage()"><%= image_tag "icon_remove.png", :style => "vertical-align:middle;" %>  Remove</a></li>
-    <% if @pool.id != HardwarePool.get_default_pool.id %>
-      <li><a href="#" onClick="delete_storage()"><%= image_tag "icon_delete_white.png", :style => "vertical-align:middle;" %>  Delete</a></li>
-    <% end %>
+    <li>
+      <a href="#" onClick="return validate_storage_for_remove();" ><%= image_tag "icon_remove.png", :style=>"vertical-align:middle;" %>  Remove</a>
+      <a id="remove_link_hidden" href="<%= url_for :controller => 'hardware', :action => 'removestorage', :id => @pool %>" rel="facebox[.bolder]"  style="display:none" ></a>
+    </li>
   </ul>
 </div>
 
 <script type="text/javascript">
-  function get_selected_storage()
-  {
-    return get_selected_checkboxes("storage_grid_form")
-  }
-  function validate_for_move()
-  {
-    if (validate_selected(get_selected_storage(), 'storage pool')) {
-      $('#move_link_hidden').click()
-    }
-  }
   function remove_storage()
   {
     storage = get_selected_storage()
diff --git a/wui/src/app/views/storage/new.rhtml b/wui/src/app/views/storage/_new.rhtml
similarity index 77%
rename from wui/src/app/views/storage/new.rhtml
rename to wui/src/app/views/storage/_new.rhtml
index 13dedb9..a113b67 100644
--- a/wui/src/app/views/storage/new.rhtml
+++ b/wui/src/app/views/storage/_new.rhtml
@@ -1,17 +1,10 @@
-<%- content_for :title do -%>
-  Add New Storage Pool
-<%- end -%>
-<%- content_for :description do -%>
-  Add a new Storage Pool to this oVirt server.
-<%- end -%>
-
 <div class="dialog_form">
     <%= error_messages_for 'storage_pool' %>
 
   <% form_tag  do %>
     <!--[form:storage_pool]-->
-    <%= hidden_field_tag 'hardware_pool_id', @hardware_pool.id %>
-    <%= select_tag_with_label "Storage Type:", 'storage_type', @storage_types, :onChange => "load_storage_subform()"  %>
+    <%= hidden_field_tag 'hardware_pool_id', hardware_pool.id %>
+    <%= select_tag_with_label "Storage Type:", 'storage_type', storage_types, :onChange => "load_storage_subform()"  %>
     <!--[eoform:storage_pool]-->
   <% end %>
 
diff --git a/wui/src/app/views/storage/addstorage.html.erb b/wui/src/app/views/storage/addstorage.html.erb
index fa49111..11e9135 100644
--- a/wui/src/app/views/storage/addstorage.html.erb
+++ b/wui/src/app/views/storage/addstorage.html.erb
@@ -1,42 +1,51 @@
 <%- content_for :title do -%>
-  Add Storage
+  Add Storage Pool
 <%- end -%>
 <%- content_for :description do -%>
-  Select storage pools from the list below to add to the <%= @hardware_pool.name %> hardware pool.
+  Choose a storage pool selection below
 <%- end -%>
 
-<!-- we'll need this when we combine add/create for storage
 <div id="toolbar_nav">
 <ul>
-    <li class="current" id="unassigned_tab"><a href="#" onClick = "show_unassigned()"><img style="vertical-align:middle;" src="" />  Unassigned Storage (<%= @unassigned %>)</a></li>
-    <li id="assigned_tab"><a href="#" onClick = "show_assigned()"><img style="vertical-align:middle;" src="" />  Assigned Storage (<%= @assigned %>)</a></li>
+    <li class="current" id="new_tab"><a href="#" onClick = "show_new()"><img style="vertical-align:middle;" src="" />  Add New Pool</a></li>
+    <li id="add_tab"><a href="#" onClick = "show_add()"><img style="vertical-align:middle;" src="" />  Import Existing Pool(s)</a></li>
 </ul>
 </div>
-  function show_unassigned()
+
+<div class="panel_header"></div>
+<div id="add_panel">
+  <div class="dialog_body_small">
+    <%= render :partial => "/storage/grid", :locals => { :table_id => "addstorage_grid",
+               :hwpool => nil, :exclude_id => @hardware_pool.id,
+               :on_select => "false" } %>
+  </div>
+  <%= popup_footer("add_storage('#{url_for :controller => 'hardware', 
+                                           :action => 'add_storage', 
+                                          :id => @hardware_pool}')", 
+                   "Add Storage Pool(s)") %>
+</div>
+
+<div id="new_panel">
+    <%= render :partial => "/storage/new", 
+               :locals => { :hardware_pool => @hardware_pool,
+                            :storage_types => @storage_types} %>
+</div>
+
+<script type="text/javascript">
+  function show_new()
   {
-      $("#assigned_tab").removeClass('current');
-      $("#unassigned_tab").addClass('current');
-      $("#addstorage_assigned_grid_div").hide()
-      $("#addstorage_unassigned_grid_div").show()
+      $("#add_tab").removeClass('current');
+      $("#new_tab").addClass('current');
+      $("#add_panel").hide()
+      $("#new_panel").show()
+
   }
-  function show_assigned()
+  function show_add()
   {
-      $("#assigned_tab").addClass('current');
-      $("#unassigned_tab").removeClass('current');
-      $("#addstorage_unassigned_grid_div").hide()
-      $("#addstorage_assigned_grid_div").show()
+      $("#new_tab").removeClass('current');
+      $("#add_tab").addClass('current');
+      $("#new_panel").hide()
+      $("#add_panel").show()
   }
-  $("#addstorage_assigned_grid_div").hide()
--->
-  <div class="panel_header"></div>
-  <div class="dialog_body">
-       <%= render :partial => "/storage/grid", :locals => { :table_id => "addstorage_grid",
-           :hwpool => nil, :exclude_id => @hardware_pool.id,
-           :on_select => "false" } %>
-  </div>
-</div>
-<%= popup_footer("add_storage('#{url_for :controller => 'hardware', 
-                                        :action => 'add_storage', 
-                                        :id => @hardware_pool}')", 
-                 "Add Selected Storage Pools") %>
-
+  $("#add_panel").hide()
+</script>
diff --git a/wui/src/public/javascripts/ovirt.js b/wui/src/public/javascripts/ovirt.js
index 8c94887..30262b5 100644
--- a/wui/src/public/javascripts/ovirt.js
+++ b/wui/src/public/javascripts/ovirt.js
@@ -174,4 +174,31 @@ function empty_summary(element_id, label){
 }
 
 
+  function get_selected_storage()
+  {
+    return get_selected_checkboxes("storage_grid_form")
+  }
+  function validate_storage_for_move()
+  {
+    if (validate_selected(get_selected_storage(), 'storage pool')) {
+      $('#move_link_hidden').click()
+    }
+  }
+  function validate_storage_for_remove()
+  {
+    if (validate_selected(get_selected_storage(), 'storage pool')) {
+      $('#remove_link_hidden').click()
+    }
+  }
+  function delete_or_remove_storage()
+  {
+    var selected = $('#remove_storage_selection :radio:checked')
+    if (selected[0].value == "remove") {
+      remove_storage()
+    } else if (selected[0].value == "delete") {
+      delete_storage()
+    }
+    jQuery(document).trigger('close.facebox')
+  }
+
 
diff --git a/wui/src/public/stylesheets/components.css b/wui/src/public/stylesheets/components.css
index e369330..56cadf2 100644
--- a/wui/src/public/stylesheets/components.css
+++ b/wui/src/public/stylesheets/components.css
@@ -85,6 +85,9 @@
 #toolbar_nav li:hover {
     background: #4B95B8;
 }
+#toolbar_nav li.current {
+    background: #4B95B8;
+}
 #toolbar_nav li, #toolbar_nav li a {
     text-decoration: none;
     text-align: center;
-- 
1.5.4.1




More information about the ovirt-devel mailing list