Hi, good stuff, ACK after rebase. Sorting/searching and other features
will be separate tasks, right? (in case html table should support it).
Jan
On 05/26/2011 10:24 PM, Matt Wagner wrote:
---
src/app/controllers/pools_controller.rb | 28 +++++++----
src/app/helpers/application_helper.rb | 17 +++++++
src/app/stylesheets/layout.scss | 9 ++++
src/app/views/deployments/_filter_view.haml | 34 ++++++-------
src/app/views/layouts/_filter_table.haml | 19 +++++++
src/app/views/pools/_list.haml | 69 +++++++++------------------
src/config/locales/en.yml | 4 ++
7 files changed, 105 insertions(+), 75 deletions(-)
create mode 100644 src/app/views/layouts/_filter_table.haml
diff --git a/src/app/controllers/pools_controller.rb
b/src/app/controllers/pools_controller.rb
index dfb4c36..2aee5ff 100644
--- a/src/app/controllers/pools_controller.rb
+++ b/src/app/controllers/pools_controller.rb
@@ -195,18 +195,26 @@ class PoolsController< ApplicationController
def set_params_and_header
@url_params = params.clone
@header = [
- { :name => "Pool name", :sort_attr => :name },
- { :name => "Quota (Instances)", :sort_attr =>
"quotas.total_instances"},
- { :name => "% Quota used", :sortable => false },
- { :name => "Pool Family", :sort_attr =>
"pool_families.name" },
- { :name => "Enabled", :sort_attr => :enabled }
+ { :name => '', :sortable => false },
+ { :name => '', :sortable => false },
+ { :name => t("pools.index.pool_name"), :sort_attr => :name },
+ { :name => t("deployments.deployments"), :sortable => false },
+ { :name => t("instances.instances"), :sortable => false },
+ { :name => t("pools.index.pending"), :sortable => false },
+ { :name => t("pools.index.failed"), :sortable => false },
+ { :name => t("pools.index.quota_used"), :sortable => false },
+ { :name => t("pools.index.pool_family"), :sortable => false },
+
]
@deployments_header = [
- { :name => "Deployment Name", :sort_attr => :name },
- { :name => "Base Deployable", :sort_attr =>
'deployable.name' },
- { :name => "Uptime", :sort_attr => :created_at },
- { :name => "Instances", :sort_attr => 'instances.count'
},
- { :name => "Provider", :sort_attr => :provider }
+ { :name => '', :sortable => false },
+ { :name => '', :sortable => false },
+ { :name => t("deployments.deployment_name"), :sortable => false
},
+ { :name => t("deployables.index.base_deployable"), :sortable =>
false },
+ { :name => t("uptime"), :sortable => false },
+ { :name => t("instances.instances"), :sortable => false },
+ { :name => t("providers.provider"), :sortable => false }
+
]
end
diff --git a/src/app/helpers/application_helper.rb
b/src/app/helpers/application_helper.rb
index b546c93..3fae4de 100644
--- a/src/app/helpers/application_helper.rb
+++ b/src/app/helpers/application_helper.rb
@@ -114,6 +114,23 @@ module ApplicationHelper
end
end
+ def filter_table(columns, rows, options={},&block)
+ _class = rows.first.try(:class) || Object
+ render :partial => 'layouts/filter_table', :locals => {
+ # TODO - Right now saved_searches are not functional; this will need to be
expanded
+ :form_header => options[:form_header] ? options[:form_header] : '',
+ :saved_searches => ["<option>All
#{_class.name.pluralize}</option>"],
+ :object_count => rows.count,
+ # TODO - We need to support searches and filters below
+ :search_term => nil,
+ :filters => {},
+ :columns => columns,
+ :lower_class => _class.to_s.tableize,
+ :block => block,
+ :rows => rows
+ }
+ end
+
def paginated_table(html_id, columns, data, opts = {})
search_url = url_for(:partial => true, :order => opts[:order], :order_dir
=> opts[:order_dir])
diff --git a/src/app/stylesheets/layout.scss b/src/app/stylesheets/layout.scss
index a50d82f..2c4628d 100644
--- a/src/app/stylesheets/layout.scss
+++ b/src/app/stylesheets/layout.scss
@@ -164,9 +164,18 @@ table {
border-spacing: 0;
}
+thead {
+ background: #eee;
+}
+
+th {
+ padding-left: 10px;
+}
+
th,
td,
caption {
+ padding-left: 10px;
font-weight: normal;
vertical-align: top;
text-align: left;
diff --git a/src/app/views/deployments/_filter_view.haml
b/src/app/views/deployments/_filter_view.haml
index ad3f1b2..59ea23f 100644
--- a/src/app/views/deployments/_filter_view.haml
+++ b/src/app/views/deployments/_filter_view.haml
@@ -1,18 +1,16 @@
-- form_tag do
- %table
- -# FIXME: sortable_table_header won't actually work as-is since it sorts on
Pools, not Deployments...
- -# TODO: There are no defined actions for the checkboxes yet; they'll go here
- = sortable_table_header(@deployments_header)
- - deployments.each do |deployment|
- %tr
- %td
- %input{:name => "deployment_selected[]", :type =>
"checkbox", :value => deployment.id, :id =>
"deployment_checkbox_#{deployment.id}" }
- = deployment.name
- %td
- = deployment.deployable.name
- %td
- = count_uptime(deployment.created_at)
- %td
- = deployment.instances.count
- %td
- = deployment.provider.provider_type.name if deployment.provider
\ No newline at end of file
+= filter_table(@deployments_header, deployments) do |deployment|
+ %tr
+ %td
+ %input{:name => "deployment_selected[]", :type =>
"checkbox", :value => deployment.id, :id =>
"deployment_checkbox_#{deployment.id}" }
+ %td
+ -#there will be icons (belongs to mockups)
+ %td
+ = link_to(deployment.name, deployment)
+ %td
+ = link_to(deployment.deployable.name, deployment.deployable)
+ %td
+ = count_uptime(deployment.created_at)
+ %td
+ = deployment.instances.count
+ %td
+ = link_to(deployment.provider.provider_type.name, deployment.provider) if
deployment.provider
diff --git a/src/app/views/layouts/_filter_table.haml
b/src/app/views/layouts/_filter_table.haml
new file mode 100644
index 0000000..5fd716d
--- /dev/null
+++ b/src/app/views/layouts/_filter_table.haml
@@ -0,0 +1,19 @@
+- form_tag do
+ - if form_header
+ = form_header
+ %p
+ Viewing
+ = select_tag("select_pools", saved_searches.join.html_safe,:disabled =>
true)
+ = object_count.to_s + " results"
+ = text_field_tag :q, search_term || "Search result for...", :disabled
=> true
+ = link_to('Filters', '#')
+ %p
+ = link_to('Share this view', '#')
+ = link_to('Add/Remove Columns', '#')
+ %table(id="#{lower_class}_table")
+ %thead
+ %tr
+ - columns.each do |column|
+ %th
+ = column[:name]
+ = rows.collect {|row| capture_haml(row,&block)}.to_s
\ No newline at end of file
diff --git a/src/app/views/pools/_list.haml b/src/app/views/pools/_list.haml
index 6949fae..8f2a91d 100644
--- a/src/app/views/pools/_list.haml
+++ b/src/app/views/pools/_list.haml
@@ -1,58 +1,33 @@
-- form_tag do
+- form_header = capture_haml do
= link_to "New Pool", new_pool_path, { :class => 'button' }
= restful_submit_tag "Destroy", "destroy",
multi_destroy_pools_path, 'DELETE', :id => 'delete_button'
= label_tag "More actions"
= select_tag("more_actions",nil, :disabled => true)
- %p
- Viewing
- = select_tag("select_pools", "<option>All
pools</option>",:disabled => true)
- = @pools.count.to_s + " results"
- = text_field_tag :q, @search_term || "Search result for...", :disabled
=> true
- %table#pools_table
- %tr
- %th
- = check_box_tag "all"
- %th
- -#there will be icons (belongs to mockups)
- %th
- = t("pools.index.pool_name")
- %th
- = t("deployments.deployments")
- %th
- = t("instances.instances")
- %th
- = t("pools.index.pending")
- %th
- = t("pools.index.failed")
- %th
- = t("pools.index.quota_used")
- %th
- = t("pools.index.pool_family")
- - @pools.each do |pool|
- %tr
- %td
- %input{:name => "pools_selected[]", :type =>
"checkbox", :value => pool.id, :id =>
"pool_checkbox_#{pool.id}" }
- %td
- -#there will be icons (belongs to mockups)
- %td
- = pool.name
- %td
- = pool.deployments.count
- %td
- = (pool.statistics[:instances_deployed] + pool.statistics[:instances_pending]
+ pool.statistics[:instances_failed])
- %td
- = pool.statistics[:instances_pending]
- %td
- = pool.statistics[:instances_deployed]
- %td
- = pool.quota ? pool.quota.percentage_used.to_s + "%":
'unlimited'
- %td
- = pool.pool_family.name
+= filter_table(@header, @pools, :form_header => form_header) do |pool|
+ %tr
+ %td
+ %input{:name => "pools_selected[]", :type =>
"checkbox", :value => pool.id, :id =>
"pool_checkbox_#{pool.id}" }
+ %td
+ -#there will be icons (belongs to mockups)
+ %td
+ = link_to(pool.name, pool)
+ %td
+ = pool.deployments.count
+ %td
+ = (pool.statistics[:instances_deployed] + pool.statistics[:instances_pending] +
pool.statistics[:instances_failed])
+ %td
+ = pool.statistics[:instances_pending]
+ %td
+ = pool.statistics[:instances_deployed]
+ %td
+ = pool.quota ? pool.quota.percentage_used.to_s + "%":
'unlimited'
+ %td
+ = link_to(pool.pool_family.name, pool.pool_family)
:javascript
$(document).ready(function () {
$('#delete_button').click(function(e) {
- if ($("#pools_table input[@type=radio]:checked").length == 0) {
+ if ($("#pools_table input[@type=checkbox]:checked").length == 0) {
alert('Please select any pool to be deleted before clicking Delete
button.');
e.preventDefault();
} else {
diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml
index 77f72b2..4926f4e 100644
--- a/src/config/locales/en.yml
+++ b/src/config/locales/en.yml
@@ -71,6 +71,7 @@ en:
updates: Udates
deployments:
deployments: Deployments
+ deployment_name: Deployment Name
updated:
one: "The deployment %{list} was successfully updated."
other: "The deployments %{list} were successfully updated."
@@ -142,6 +143,7 @@ en:
deployables:
index:
deployables: Deployables
+ base_deployable: Base Deployable
deleted:
one: "Deployable %{list} was deleted."
other: "Deployables %{list} were deleted."
@@ -173,6 +175,7 @@ en:
quota: Quota
account: Account
providers:
+ provider: Provider
providers: Providers
form:
provider_name: Provider Name
@@ -208,3 +211,4 @@ en:
account_number: AWS Account ID
account_private_cert: EC2 x509 private key
account_public_cert: EC2 x509 public key
+ uptime: Uptime
\ No newline at end of file