[Ovirt-devel] [PATCH] replaced flexigrid-based display for HW and smart pool storage with tree component.

Scott Seago sseago at redhat.com
Tue Nov 18 05:35:08 UTC 2008


Signed-off-by: Scott Seago <sseago at redhat.com>
---
 src/app/controllers/hardware_controller.rb    |    3 +-
 src/app/controllers/search_controller.rb      |   41 ++++++---
 src/app/controllers/smart_pools_controller.rb |    1 +
 src/app/controllers/storage_controller.rb     |    2 +-
 src/app/models/smart_pool.rb                  |   20 ++++
 src/app/models/storage_pool.rb                |    3 +-
 src/app/models/storage_volume.rb              |    7 +-
 src/app/views/hardware/show_storage.rhtml     |   64 +++++++++----
 src/app/views/smart_pools/show_storage.rhtml  |   63 +++++++++----
 src/app/views/storage/show.rhtml              |   40 --------
 src/app/views/storage/show_volume.rhtml       |  127 +++++++++----------------
 src/public/javascripts/ovirt.js               |    3 +-
 12 files changed, 200 insertions(+), 174 deletions(-)

diff --git a/src/app/controllers/hardware_controller.rb b/src/app/controllers/hardware_controller.rb
index 8c26184..4dda736 100644
--- a/src/app/controllers/hardware_controller.rb
+++ b/src/app/controllers/hardware_controller.rb
@@ -111,6 +111,7 @@ class HardwareController < PoolController
   end
 
   def show_storage
+    @storage_tree = @pool.storage_tree(:filter_unavailable => false, :include_used => true).to_json
     show
   end
 
@@ -171,7 +172,7 @@ class HardwareController < PoolController
       id = params[:exclude_pool]
       storage_pools = StoragePool
       find_opts = {:include => :hardware_pool,
-        :conditions => ["pools.id != ?", id]}
+        :conditions => ["(storage_pools.type != 'LvmStoragePool') and (pools.id != ?)", id]}
       include_pool = true
     end
     super(:full_items => storage_pools,:include_pool => include_pool,:find_opts => find_opts)
diff --git a/src/app/controllers/search_controller.rb b/src/app/controllers/search_controller.rb
index 3789309..7551242 100644
--- a/src/app/controllers/search_controller.rb
+++ b/src/app/controllers/search_controller.rb
@@ -19,18 +19,33 @@
 
 class SearchController < ApplicationController
 
-  MODELS = {"HardwarePool"     => {:controller => "hardware",
-                                   :show_action => "quick_summary"},
-            "VmResourcePool"   => {:controller => "resources",
-                                   :show_action => "quick_summary"},
-            "Host"             => {:controller => "host",
-                                   :show_action => "show"},
-            "Vm"               => {:controller => "vm",
-                                   :show_action => "show"},
-            "IscsiStoragePool" => {:controller => "storage",
-                                   :show_action => "show"},
-            "NfsStoragePool"   => {:controller => "storage",
-                                 :show_action => "show"}}
+  MODELS = {"HardwarePool"       => {:controller => "hardware",
+                                     :show_action => "quick_summary",
+                                     :searched => true},
+            "VmResourcePool"     => {:controller => "resources",
+                                     :show_action => "quick_summary",
+                                     :searched => true},
+            "Host"               => {:controller => "host",
+                                     :show_action => "show",
+                                     :searched => true},
+            "Vm"                 => {:controller => "vm",
+                                     :show_action => "show",
+                                     :searched => true},
+            "IscsiStoragePool"   => {:controller => "storage",
+                                     :show_action => "show",
+                                     :searched => true},
+            "NfsStoragePool"     => {:controller => "storage",
+                                     :show_action => "show",
+                                     :searched => true},
+            "IscsiStorageVolume" => {:controller => "storage",
+                                     :show_action => "show_volume",
+                                     :searched => false},
+            "NfsStorageVolume"   => {:controller => "storage",
+                                     :show_action => "show_volume",
+                                     :searched => false},
+            "LvmStorageVolume"   => {:controller => "storage",
+                                     :show_action => "show_volume",
+                                     :searched => false}}
 
   MULTI_TYPE_MODELS = {"StoragePool" => ["IscsiStoragePool", "NfsStoragePool"]}
 
@@ -50,7 +65,7 @@ class SearchController < ApplicationController
     @model_param ||= ""
 
     if @model_param == ""
-      @models = MODELS.keys
+      @models = MODELS.keys.select {|model| MODELS[model][:searched]}
     else
       @models = MULTI_TYPE_MODELS[@model_param]
       @models ||= [@model_param]
diff --git a/src/app/controllers/smart_pools_controller.rb b/src/app/controllers/smart_pools_controller.rb
index 0295b63..37ccdad 100644
--- a/src/app/controllers/smart_pools_controller.rb
+++ b/src/app/controllers/smart_pools_controller.rb
@@ -38,6 +38,7 @@ class SmartPoolsController < PoolController
   end
 
   def show_storage
+    @storage_tree = @pool.storage_tree(:filter_unavailable => false, :include_used => true).to_json
     show
   end
 
diff --git a/src/app/controllers/storage_controller.rb b/src/app/controllers/storage_controller.rb
index e3e5522..6e6e3c2 100644
--- a/src/app/controllers/storage_controller.rb
+++ b/src/app/controllers/storage_controller.rb
@@ -107,7 +107,7 @@ class StorageController < ApplicationController
       end
     else
       respond_to do |format|
-        format.html { render :layout => 'popup' }
+        format.html { render :layout => 'selection' }
         format.xml { render :xml => @storage_volume.to_xml }
       end
     end
diff --git a/src/app/models/smart_pool.rb b/src/app/models/smart_pool.rb
index ac6db5e..772ffef 100644
--- a/src/app/models/smart_pool.rb
+++ b/src/app/models/smart_pool.rb
@@ -97,4 +97,24 @@ class SmartPool < Pool
     user_pools[-1] << "break" unless user_pools.empty?
     user_pools + other_pools
   end
+
+  # params accepted:
+  # :vm_to_include - if specified, storage used by this VM is included in the tree
+  # :filter_unavailable - if true, don't include Storage not currently available
+  # :include_used - include all storage pools/volumes, even those in use
+  # for smart pools,  filter_unavailable defaults to false and include_used to true
+  def storage_tree(params = {})
+    vm_to_include=params.fetch(:vm_to_include, nil)
+    filter_unavailable = params.fetch(:filter_unavailable, false)
+    include_used = params.fetch(:include_used, true)
+    conditions = "type != 'LvmStoragePool'"
+    if filter_unavailable
+      conditions = "(#{conditions}) and (storage_pools.state = '#{StoragePool::STATE_AVAILABLE}')"
+    end
+    tagged_storage_pools.find(:all,
+                    :conditions => conditions).collect do |pool|
+      pool.storage_tree_element(params)
+    end
+  end
+
 end
diff --git a/src/app/models/storage_pool.rb b/src/app/models/storage_pool.rb
index 9c80f54..bab7031 100644
--- a/src/app/models/storage_pool.rb
+++ b/src/app/models/storage_pool.rb
@@ -97,7 +97,8 @@ class StoragePool < ActiveRecord::Base
       :name => display_name,
       :available => false,
       :create_volume => user_subdividable,
-      :selected => false}
+      :selected => false,
+      :is_pool => true}
     conditions = nil
     unless include_used
       conditions = "vms.id is null"
diff --git a/src/app/models/storage_volume.rb b/src/app/models/storage_volume.rb
index 56cdcef..39b72d5 100644
--- a/src/app/models/storage_volume.rb
+++ b/src/app/models/storage_volume.rb
@@ -80,6 +80,10 @@ class StorageVolume < ActiveRecord::Base
     return false
   end
 
+  def deletable
+    storage_pool.user_subdividable and vms.empty? and (lvm_storage_pool.nil? or lvm_storage_pool.storage_volumes.empty?)
+  end
+
   def storage_tree_element(params = {})
     vm_to_include=params.fetch(:vm_to_include, nil)
     filter_unavailable = params.fetch(:filter_unavailable, true)
@@ -95,7 +99,8 @@ class StorageVolume < ActiveRecord::Base
                      vm_ids.include?(vm_to_include.id))),
       :create_volume => supports_lvm_subdivision,
       :selected => (!vm_ids.empty? and vm_to_include and vm_to_include.id and
-                   (vm_ids.include?(vm_to_include.id)))}
+                   (vm_ids.include?(vm_to_include.id))),
+      :is_pool => false}
     if lvm_storage_pool
       if return_hash[:available]
         return_hash[:available] = lvm_storage_pool.storage_volumes.full_vm_list.empty?
diff --git a/src/app/views/hardware/show_storage.rhtml b/src/app/views/hardware/show_storage.rhtml
index 5ade456..6a91161 100644
--- a/src/app/views/hardware/show_storage.rhtml
+++ b/src/app/views/hardware/show_storage.rhtml
@@ -1,5 +1,5 @@
 <div id="toolbar_nav">
-<ul>
+ <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="#" onClick="return validate_storage_for_move();" ><%= image_tag "icon_move.png", :style=>"vertical-align:middle;" %>  Move</a>
@@ -27,7 +27,40 @@
   </ul>
 </div>
 
+<textarea id="tree_template" style="display:none;">
+{macro htmlList(list, isFullList)}
+  {if isFullList}
+  <ul style="display:none;">
+  {/if}
+    {for item in list}
+      <li>
+        <span class="hitarea {if item.children.length > 0} expandable{/if}"> </span>
+        <div id="tree-${item.type}_${item.id}">
+          <input class="grid_checkbox" type="checkbox"
+            name="grid_checkbox${item.type}_${item.id}"
+            value="${item.id}"
+            {if !item.is_pool}disabled="disabled" style="display:none"{/if}
+            {if item.selected}checked="checked"{/if}/> ${item.name} {if item.size}(${item.size} GB){/if}
+        </div>
+        {if item.children.length > 0}
+          ${htmlList(item.children, true)}
+        {/if}
+      </li>
+    {/for}
+  {if isFullList}
+  </ul>
+  {/if}
+{/macro}
+
+${htmlList(pools)}
+</textarea>
 <script type="text/javascript">
+  $(document).ready(function(){
+    $('#storage_tree').tree({
+      content: {"pools" : <%=  @storage_tree%>},
+      clickHandler: storage_select
+    });
+  });
   function add_storage_to_smart_pool(smart_pool)
   {
     var storage = get_selected_storage();
@@ -35,7 +68,8 @@
       $.post('<%= url_for :controller => "smart_pools", :action => "add_storage" %>',
              { resource_ids: storage.toString(), id: smart_pool },
              function(data,status){
-               $('#storage_grid').flexReload();
+               // FIXME: reload #storage_tree
+               //$('#storage_grid').flexReload();
                if (data.alert) {
                  $.jGrowl(data.alert);
                }
@@ -76,28 +110,24 @@
                }, 'json');
     }
   }
-  function storage_select(selected_rows)
+  function storage_select(e, elem)
   {
-    var selected_ids = new Array();
-    for(i=0; i<selected_rows.length; i++) {
-      selected_ids[i] = selected_rows[i].id;
-    }
-    if (selected_ids.length == 1)
-    {
-      $('#storage_selection').load('<%= url_for :controller => "storage", :action => "show" %>',
-                { id: parseInt(selected_ids[0].substring(3))});
-    }
+    $('#storage_tree_form ul.ovirt-tree li div').removeClass('current');
+    $(elem)
+      .addClass('current');
+    $('#storage_selection').load('<%= url_for :controller => "search", :action => "single_result" %>',
+                { class_and_id: elem.id.substring(5)});
   }
 
 </script>
 <div class="panel_header"></div>
 <% if @pool.storage_pools.size != 0 %>
   <div class="data_section">
-       <%= render :partial => "/storage/grid", :locals => { :table_id => "storage_grid",
-                                                            :hwpool => @pool,
-                                                            :exclude_pool => nil,
-                                                            :on_select => "storage_select",
-                                                            :is_popup => false} %>
+    <div style="overflow:auto; border:#CCCCCC solid 1px;">
+      <form id="storage_tree_form">
+        <ul id="storage_tree" class="ovirt-tree"></ul>
+      </form>
+    </div>
   </div>
 
   <div class="selection_detail" id="storage_selection">
diff --git a/src/app/views/smart_pools/show_storage.rhtml b/src/app/views/smart_pools/show_storage.rhtml
index 7cf425a..9a9b78e 100644
--- a/src/app/views/smart_pools/show_storage.rhtml
+++ b/src/app/views/smart_pools/show_storage.rhtml
@@ -5,10 +5,44 @@
   </ul>
 </div>
 
+<textarea id="tree_template" style="display:none;">
+{macro htmlList(list, isFullList)}
+  {if isFullList}
+  <ul style="display:none;">
+  {/if}
+    {for item in list}
+      <li>
+        <span class="hitarea {if item.children.length > 0} expandable{/if}"> </span>
+        <div id="tree-${item.type}_${item.id}">
+          <input class="grid_checkbox" type="checkbox"
+            name="grid_checkbox${item.type}_${item.id}"
+            value="${item.id}"
+            {if !item.is_pool}disabled="disabled" style="display:none"{/if}
+            {if item.selected}checked="checked"{/if}/> ${item.name} {if item.size}(${item.size} GB){/if}
+        </div>
+        {if item.children.length > 0}
+          ${htmlList(item.children, true)}
+        {/if}
+      </li>
+    {/for}
+  {if isFullList}
+  </ul>
+  {/if}
+{/macro}
+
+${htmlList(pools)}
+</textarea>
+
 <script type="text/javascript">
+  $(document).ready(function(){
+    $('#smart_storage_tree').tree({
+      content: {"pools" : <%=  @storage_tree%>},
+      clickHandler: smart_storage_select
+    });
+  });
   function get_selected_storage_for_smart_pool()
   {
-    return get_selected_checkboxes("smart_storage_grid_form");
+    return get_selected_checkboxes("smart_storage_tree_form");
   }
   function remove_storage_from_smart_pool()
   {
@@ -27,29 +61,24 @@
                }, 'json');
     }
   }
-  function smart_storage_select(selected_rows)
+  function smart_storage_select(e, elem)
   {
-    var selected_ids = new Array() ;
-    for(i=0; i<selected_rows.length; i++) {
-      selected_ids[i] = selected_rows[i].id;
-    }
-    if (selected_ids.length == 1)
-    {
-      $('#smart_storage_selection').load('<%= url_for :controller => "storage", :action => "show" %>',
-                { id: parseInt(selected_ids[0].substring(3))});
-    }
+    $('#smart_storage_tree_form ul.ovirt-tree li div').removeClass('current');
+    $(elem)
+      .addClass('current');
+    $('#smart_storage_selection').load('<%= url_for :controller => "search", :action => "single_result" %>',
+                { class_and_id: elem.id.substring(5)});
   }
 
 </script>
 <div class="panel_header"></div>
 <% if @pool.tagged_storage_pools.size != 0 %>
   <div class="data_section">
-       <%= render :partial => "/storage/grid", :locals => { :table_id => "smart_storage_grid",
-                                                            :hwpool => @pool,
-                                                            :pool_controller => "smart_pools",
-                                                            :exclude_pool => nil,
-                                                            :on_select => "smart_storage_select",
-                                                            :is_popup => false} %>
+    <div style="overflow:auto; border:#CCCCCC solid 1px;">
+      <form id="smart_storage_tree_form">
+        <ul id="smart_storage_tree" class="ovirt-tree"></ul>
+      </form>
+    </div>
   </div>
 
   <div class="selection_detail" id="smart_storage_selection">
diff --git a/src/app/views/storage/show.rhtml b/src/app/views/storage/show.rhtml
index 123cf20..a4cc1c2 100644
--- a/src/app/views/storage/show.rhtml
+++ b/src/app/views/storage/show.rhtml
@@ -40,51 +40,11 @@
         <%=h @storage_pool.state %><br/>
     </div>
 <%- content_for :right do -%>
-  <div class="selection_right_title">Volumes</div>
-<!-- hide for now
-        	<ul class="selection_tab_nav">
-            	<li><a href="#"><%=image_tag "icon_selection_add.gif", :style=>"vertical-align:middle;" %>Add</a></li>
-            	<li><a href="#"><%=image_tag "icon_selection_showdetail.gif", :style=>"vertical-align:middle;" %>Show Detail</a></li>
-            	<li><a href="#"><%=image_tag "icon_selection_remove.gif", :style=>"vertical-align:middle;" %>Remove</a></li>
-            </ul>
--->
-  <div class="selection_right_table">
-    <table id="storage_volumes_grid" style="display:none"></table>
-  </div>
 
 <%- end -%>
 
 <%= confirmation_dialog("confirm_delete_storage", "Are you sure?", "delete_storage_pool()") %>
 <script type="text/javascript">
-    $("#storage_volumes_grid").flexigrid
-    (
-    {
-    url: '<%=  url_for :action => "storage_volumes_json", :id => @storage_pool.id %>',
-    dataType: 'json',
-    colModel : [
-        <%= "{display: '', width : 20, align: 'left', process: storage_volumes_gridcheckbox}," if (@storage_pool.user_subdividable and @can_modify) %>
-        {display: 'Alias', width : 180, sortable : false, align: 'left', process: storage_volume_details_link},
-        {display: 'Size (Gb)', name : 'size', width : 80, sortable : true, align: 'left'},
-        {display: 'Type', name : 'type', width : 80, sortable : true, align: 'left'}
-        ],
-    sortname: "size",
-    sortorder: "desc",
-    usepager: false,
-    useRp: true,
-    rp: 40,
-    showTableToggleBtn: true,
-    }
-	);   
-    function storage_volumes_gridcheckbox(celDiv)
-    {
-        $(celDiv).html('<input class="grid_checkbox" type="checkbox" name="grid_checkbox'+$(celDiv).html()+'" value="'+$(celDiv).html()+'"/>');
-    }
-    function storage_volume_details_link(celDiv,pid)
-    {
-        $(celDiv).html('<a href="<%= url_for :controller => 'storage', :action => 'show_volume' %>/'+ pid +'" rel="facebox[.bolder]">' + $(celDiv).html() + '</a>');
-    }
-</script>
-<script type="text/javascript">
       
   function refresh_storage_pool()
   {
diff --git a/src/app/views/storage/show_volume.rhtml b/src/app/views/storage/show_volume.rhtml
index c1cb66a..c1138f4 100644
--- a/src/app/views/storage/show_volume.rhtml
+++ b/src/app/views/storage/show_volume.rhtml
@@ -1,26 +1,27 @@
 <%- content_for :title do -%>
   <%=h @storage_volume.display_name %>
 <%- end -%>
-<%- content_for :description do -%>
-  Details for Storage Volume <%=h @storage_volume.display_name %>
+
+<%- content_for :action_links do -%>
+  <%if @can_modify -%>
+    <%if @storage_volume.supports_lvm_subdivision and @storage_volume.vms.empty? -%>
+      <%= link_to image_tag("icon_addstorage.png") + " Add new Volume",
+                            {:controller => 'storage', :action => 'new_lvm_volume', :source_volume_id => @storage_volume.id},
+                             :rel=>"facebox[.bolder]", :class=>"selection_facebox" %>
+    <% end %>
+    <%if @storage_volume.deletable -%>
+      <a href="#confirm_delete"  rel="facebox[.bolder]">
+        <%= image_tag "icon_x.png" %> Delete
+      </a>
+    <%- end -%>
+  <%- end -%>
 <%- end -%>
+<%= confirmation_dialog("confirm_delete", "Are you sure?", "delete_volume()") %>
 
-<% if @storage_volume.supports_lvm_subdivision %>
-  <div id="dialog-content-area">
-    <div id="toolbar_nav">
-      <ul>
-        <li><a href="#" id="new_lvm_volume_button"><%=image_tag "icon_addstorage.png", :style=>"vertical-align:middle;" %>Add</a></li>
-        <% if (@storage_volume.lvm_storage_pool and
-               !@storage_volume.lvm_storage_pool.storage_volumes.empty?) %>
-          <li><a href="#" onClick="return remove_lvm_volumes();"><%=image_tag "icon_remove.png" %>  Remove</a></li>
-        <% end %>
-      </ul>
-     </div>
-   </div>
-<% end %>
-<div class="panel_header"></div>
   <div class="selection_key">
-    IP address:<br/>
+    <% unless @storage_volume.storage_pool[:type] == "LvmStoragePool" %>
+      IP address:<br/>
+    <% end %>
     <% if @storage_volume.storage_pool[:type] == "IscsiStoragePool" %>
       Port:<br/>
       Target:<br/>
@@ -34,12 +35,18 @@
       LUN:<br/>
     <% elsif @storage_volume[:type] == "NfsStorageVolume" %>
       Filename:<br/>
+    <% elsif @storage_volume[:type] == "LvmStorageVolume" %>
+      Volume Group:<br/>
+      Logical Volume:<br/>
+      Permissions (owner/group/mode):<br/>
     <% end %>
     Size:<br/>
   </div>
   <div class="selection_value">
-    <%=h @storage_volume.storage_pool.ip_addr %><br/>
-    <% if @storage_volume.storage_pool[:type] == "IscsiStoragePool" %>
+    <% unless @storage_volume.storage_pool[:type] == "LvmStoragePool" %>
+      <%=h @storage_volume.storage_pool.ip_addr %><br/>
+    <% end %>
+   <% if @storage_volume.storage_pool[:type] == "IscsiStoragePool" %>
       <%=h @storage_volume.storage_pool.port %><br/>
       <%=h @storage_volume.storage_pool[:target] %><br/>
     <% elsif @storage_volume.storage_pool[:type] == "NfsStoragePool" %>
@@ -52,74 +59,30 @@
       <%=h @storage_volume.lun %><br/>
     <% elsif @storage_volume[:type] == "NfsStorageVolume" %>
       <%=h @storage_volume.filename %><br/>
+    <% elsif @storage_volume[:type] == "LvmStorageVolume" %>
+      <%=h @storage_volume.storage_pool.vg_name %><br/>
+      <%=h @storage_volume.lv_name %><br/>
+      <%=h @storage_volume.lv_owner_perms %>/<%=h @storage_volume.lv_group_perms %>/<%=h @storage_volume.lv_mode_perms %><br/>
     <% end %>
     <%=h @storage_volume.size_in_gb %> GB<br/>
   </div>
-<% if @storage_volume.supports_lvm_subdivision %>
-  <div class="dialog_form">
-    <div class="form_heading">LVM Volumes</div>
-    <% if @storage_volume.lvm_storage_pool %>
-      <form id="lvm_storage_volumes_grid_form">
-        <table id="lvm_storage_volumes_grid" style="display:none"></table>
-      </form>
-    <% end %>
-  </div>
-<% end %>
+<%- content_for :right do -%>
+
+<%- end -%>
 
-<div class="facebox_timfooter">
-        <div class="button">
-          <div class="button_left_grey"></div>
-          <div class="button_middle_grey"><a href="#" onclick="jQuery(document).trigger('close.facebox')">Close</a></div>
-          <div class="button_right_grey"></div>
-        </div>
-</div>
 <script type="text/javascript">
-    $("#lvm_storage_volumes_grid").flexigrid
-    (
-    {
-    url: '<%=  url_for :action => "storage_volumes_json", :id => @storage_volume.lvm_storage_pool.id %>',
-    dataType: 'json',
-    colModel : [
-        <%= "{display: '', width : 20, align: 'left', process: lvm_storage_volumes_gridcheckbox}," if @can_modify %>
-        {display: 'Alias', width : 180, sortable : false, align: 'left'},
-        {display: 'Size (Gb)', name : 'size', width : 80, sortable : true, align: 'left'},
-        {display: 'Type', name : 'type', width : 80, sortable : true, align: 'left'}
-        ],
-    sortname: "size",
-    sortorder: "desc",
-    usepager: false,
-    useRp: true,
-    rp: 40,
-    showTableToggleBtn: true,
-    }
-    );
-    function lvm_storage_volumes_gridcheckbox(celDiv)
-    {
-        $(celDiv).html('<input class="grid_checkbox" type="checkbox" name="grid_checkbox'+$(celDiv).html()+'" value="'+$(celDiv).html()+'"/>');
-    }
-  function get_selected_lvm_volumes()
-  {
-    return get_selected_checkboxes("lvm_storage_volumes_grid_form");
-  }
-  function remove_lvm_volumes()
+  function delete_volume()
   {
-    var volumes = get_selected_lvm_volumes();
-    if (validate_selected(volumes, "storage volume")) {
-      $.post('<%= url_for :controller => "storage", :action => "delete_volumes" %>',
-             { storage_volume_ids: volumes.toString() },
-              function(data,status){
-                $("#lvm_storage_volumes_grid").flexReload();
-		if (data.alert) {
-		  $.jGrowl(data.alert);
-                }
-               }, 'json');
-    }
+    $(document).trigger('close.facebox');
+    $.post('<%= url_for :controller => "storage", :action => "delete_volumes" %>',
+           { storage_volume_ids: <%= @storage_volume.id %> },
+            function(data,status) {
+              // FIXME: reload tree
+              //$("#vms_grid").flexReload();
+              if (data.alert) {
+                $.jGrowl(data.alert);
+              }
+	      empty_summary('storage_selection', 'Storage Pool or Volume');
+            }, 'json');
   }
-$('#new_lvm_volume_button').click(function(){
-		$('#window').fadeOut('fast');
-        $("#window").empty().load("<%= url_for :controller => 'storage', :action => 'new_lvm_volume' %>",
-	{ source_volume_id: <%=@storage_volume.id%>,
-          return_facebox: '<%= url_for :controller => 'storage', :action => 'show_volume', :id => @storage_volume.id %>' });
-		$('#window').fadeIn('fast');
-});
 </script>
diff --git a/src/public/javascripts/ovirt.js b/src/public/javascripts/ovirt.js
index d84b3d9..e0e3dc8 100644
--- a/src/public/javascripts/ovirt.js
+++ b/src/public/javascripts/ovirt.js
@@ -62,6 +62,7 @@ function add_storage(url)
              { resource_ids: storage.toString() },
               function(data,status){;
                 $(document).trigger('close.facebox');
+                // FIXME: this always reloads the tab for now
 	        grid = $("#storage_grid");
                 if (grid.size()>0 && grid != null) {
                   grid.flexReload();
@@ -256,7 +257,7 @@ function empty_summary(element_id, label){
 
 function get_selected_storage()
 {
-    return get_selected_checkboxes("storage_grid_form");
+    return get_selected_checkboxes("storage_tree_form");
 }
 function validate_storage_for_move()
 {
-- 
1.5.6.5




More information about the ovirt-devel mailing list