From: Tomas Sedovic <[email protected]>

This adds helper code and partials to add the details tabs to every page. They
work with and without JavaScript enabled (using jQuery UI tabs for JS-enabled
browsers).

Included is an example using the code for the Resource Management -> Pools
page.
---
 src/app/controllers/resources/pools_controller.rb |   17 ++++++++++++++++
 src/app/helpers/application_helper.rb             |    4 +++
 src/app/stylesheets/newui.scss                    |    4 +++
 src/app/views/layouts/_details_pane.haml          |    6 +++++
 src/app/views/layouts/newui.haml                  |    4 +-
 src/app/views/resources/pools/_deployments.haml   |    3 ++
 src/app/views/resources/pools/_history.haml       |    3 ++
 src/app/views/resources/pools/_instances.haml     |    3 ++
 src/app/views/resources/pools/_permissions.haml   |    3 ++
 src/app/views/resources/pools/_properties.haml    |    3 ++
 src/app/views/resources/pools/show.haml           |   15 +-------------
 src/public/javascripts/application.js             |   22 +++++++++++++++++++++
 12 files changed, 71 insertions(+), 16 deletions(-)
 create mode 100644 src/app/views/layouts/_details_pane.haml
 create mode 100644 src/app/views/resources/pools/_deployments.haml
 create mode 100644 src/app/views/resources/pools/_history.haml
 create mode 100644 src/app/views/resources/pools/_instances.haml
 create mode 100644 src/app/views/resources/pools/_permissions.haml
 create mode 100644 src/app/views/resources/pools/_properties.haml

diff --git a/src/app/controllers/resources/pools_controller.rb 
b/src/app/controllers/resources/pools_controller.rb
index 0df5144..3cb44f7 100644
--- a/src/app/controllers/resources/pools_controller.rb
+++ b/src/app/controllers/resources/pools_controller.rb
@@ -7,6 +7,23 @@ class Resources::PoolsController < ApplicationController
 
   def show
     @pool = Pool.find(params[:id])
+    @url_params = params.clone
+    @tab_captions = ['Properties', 'Deployments', 'Instances', 'History', 
'Permissions']
+    if params[:details_tab].blank?
+      @details_tab = 'properties'
+    else
+      @details_tab = params[:details_tab]
+    end
+    respond_to do |format|
+      format.js do
+        if params[:details_pane] == 'true'
+          @url_params.delete :details_pane
+          render :partial => 'layouts/details_pane' and return
+        end
+        render :partial => @details_tab and return
+      end
+      format.html { render :action => 'show'}
+    end
   end
 
   def edit
diff --git a/src/app/helpers/application_helper.rb 
b/src/app/helpers/application_helper.rb
index 456a02e..12dd62d 100644
--- a/src/app/helpers/application_helper.rb
+++ b/src/app/helpers/application_helper.rb
@@ -190,4 +190,8 @@ module ApplicationHelper
     submit_tag(value, {:name => 
"__rewrite[#{action}]"}.reverse_merge!(options))
   end
 
+  def slug(title)
+    title.split(' ').join('_').downcase
+  end
+
 end
diff --git a/src/app/stylesheets/newui.scss b/src/app/stylesheets/newui.scss
index 8e53639..4eb16e6 100644
--- a/src/app/stylesheets/newui.scss
+++ b/src/app/stylesheets/newui.scss
@@ -8,6 +8,10 @@ html {
   color: orange;
 }
 
+.hidden {
+  display: none;
+}
+
 a {
   color: $dcprimary;
   text-decoration: none;
diff --git a/src/app/views/layouts/_details_pane.haml 
b/src/app/views/layouts/_details_pane.haml
new file mode 100644
index 0000000..89ea471
--- /dev/null
+++ b/src/app/views/layouts/_details_pane.haml
@@ -0,0 +1,6 @@
+%ul.ui-tabs-nav.ui-helper-reset.ui-helper-clearfix.ui-widget-header.ui-corner-all
+  - @tab_captions.each do |tab|
+    %li.ui-state-default.ui-corner-top{ :class => "#{'ui-tabs-selected 
ui-state-active' if @details_tab == slug(tab)}"}
+      = link_to tab, @url_params.merge(:details_tab => slug(tab))
+#details-selected
+  = render :partial => @details_tab
diff --git a/src/app/views/layouts/newui.haml b/src/app/views/layouts/newui.haml
index 26a0a48..1ac1073 100644
--- a/src/app/views/layouts/newui.haml
+++ b/src/app/views/layouts/newui.haml
@@ -44,8 +44,8 @@
         #list-view{ :class => details ? 'part' : 'full'}
           = render :partial => '/layouts/notification'
           = (yield :list or yield)
-        - if details
-          #details-view
+        #details-view.ui-tabs.ui-widget.ui-widget-content.ui-corner-all{ 
:class => ('hidden' unless details)}
+          - if details
             = yield :details
       %footer
         = render :partial => "layouts/footer"
diff --git a/src/app/views/resources/pools/_deployments.haml 
b/src/app/views/resources/pools/_deployments.haml
new file mode 100644
index 0000000..497bf09
--- /dev/null
+++ b/src/app/views/resources/pools/_deployments.haml
@@ -0,0 +1,3 @@
+%h3
+  Deployments for
+  = @pool.name
diff --git a/src/app/views/resources/pools/_history.haml 
b/src/app/views/resources/pools/_history.haml
new file mode 100644
index 0000000..4769d92
--- /dev/null
+++ b/src/app/views/resources/pools/_history.haml
@@ -0,0 +1,3 @@
+%h3
+  History for
+  = @pool.name
diff --git a/src/app/views/resources/pools/_instances.haml 
b/src/app/views/resources/pools/_instances.haml
new file mode 100644
index 0000000..3498757
--- /dev/null
+++ b/src/app/views/resources/pools/_instances.haml
@@ -0,0 +1,3 @@
+%h3
+  Instances for
+  = @pool.name
diff --git a/src/app/views/resources/pools/_permissions.haml 
b/src/app/views/resources/pools/_permissions.haml
new file mode 100644
index 0000000..fbd252e
--- /dev/null
+++ b/src/app/views/resources/pools/_permissions.haml
@@ -0,0 +1,3 @@
+%h3
+  Permissions for
+  = @pool.name
diff --git a/src/app/views/resources/pools/_properties.haml 
b/src/app/views/resources/pools/_properties.haml
new file mode 100644
index 0000000..f50055c
--- /dev/null
+++ b/src/app/views/resources/pools/_properties.haml
@@ -0,0 +1,3 @@
+%h3
+  Properties for
+  = @pool.name
diff --git a/src/app/views/resources/pools/show.haml 
b/src/app/views/resources/pools/show.haml
index 7277a5c..05eeedd 100644
--- a/src/app/views/resources/pools/show.haml
+++ b/src/app/views/resources/pools/show.haml
@@ -2,17 +2,4 @@
   = render :partial => 'list'
 
 - content_for :details do
-  %ul
-    %li
-      = link_to 'Properties', '#properties'
-    %li
-      = link_to 'Deployments', '#deployments'
-    %li
-      = link_to 'Instances', '#instances'
-    %li
-      = link_to 'History', '#history'
-    %li
-      = link_to 'Permissions', '#permissions'
-  %h3
-    Details for
-    = @pool.name
+  = render :partial => 'layouts/details_pane'
diff --git a/src/public/javascripts/application.js 
b/src/public/javascripts/application.js
index 50edbe4..e5fce46 100644
--- a/src/public/javascripts/application.js
+++ b/src/public/javascripts/application.js
@@ -57,6 +57,26 @@ var Aggregator = {
     } else {
       $footer.removeClass('fixed');
     }
+  },
+
+  enhanceListView: function () {
+    $('#list-view table tbody a').live("click",function(e) {
+      if (e.which==2||e.metaKey||e.ctrlKey||e.shiftKey) return true;
+
+      e.preventDefault();
+      var url = $(this).attr('href') + '?details_pane=true';
+      $.get(url, function(data) {
+        $('#list-view').removeClass('full').addClass('part');
+        $('#details-view').html(data)
+          .show();
+        Aggregator.enhanceDetailsTabs();
+      });
+    });
+  },
+
+  enhanceDetailsTabs: function () {
+    $('#details-view ul li a').first().attr('href', '#details-selected');
+    $('#details-view').tabs('destroy').tabs();
   }
 };
 
@@ -144,4 +164,6 @@ var Aggregator = {
 $(document).ready(function () {
   
$(window).scroll(Aggregator.positionFooter).resize(Aggregator.positionFooter).scroll();
   $("#notification").enhanceInteraction();
+  Aggregator.enhanceListView();
+  Aggregator.enhanceDetailsTabs();
 });
-- 
1.7.3.3

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to