myexperiment-hackers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[myexperiment-hackers] [2472] branches/discovery: added filter summary,


From: noreply
Subject: [myexperiment-hackers] [2472] branches/discovery: added filter summary, general pivot CSS changes
Date: Wed, 14 Jul 2010 11:32:51 -0400 (EDT)

Revision
2472
Author
dgc
Date
2010-07-14 11:32:51 -0400 (Wed, 14 Jul 2010)

Log Message

added filter summary, general pivot CSS changes

Modified Paths

Diff

Modified: branches/discovery/app/controllers/application.rb (2471 => 2472)


--- branches/discovery/app/controllers/application.rb	2010-07-13 14:08:52 UTC (rev 2471)
+++ branches/discovery/app/controllers/application.rb	2010-07-14 15:32:51 UTC (rev 2472)
@@ -570,6 +570,67 @@
       end
     end
 
+    def calculate_filter(params, filter, user, filter_params, order_params, filter_query_params, ids)
+
+      # apply all the joins and conditions except for the current filter
+
+      joins      = []
+      conditions = []
+
+      pivot_options[:filters].each do |other_filter|
+        if filter_list = params[other_filter[:query_option]]
+          conditions << comparison(other_filter[:id_column], filter_list) unless other_filter == filter
+          joins += other_filter[:joins] if other_filter[:joins]
+        end
+      end
+
+      joins += filter[:joins] if filter[:joins]
+      conditions << filter[:condition] if filter[:condition]
+
+      if params[:filter_query]
+        conditions << "(#{filter[:label_column]} LIKE '%#{escape_sql(params[:filter_query])}%')"
+
+      end
+
+      current = params[filter[:key]] ? params[filter[:key]].split(',') : []
+
+      objects = Authorization.authorised_index(Contribution,
+          :all,
+          :include_permissions => true,
+          :select => filter[:select],
+          :joins => joins.length.zero? ? nil : joins.uniq.map do |j| pivot_options[:joins][j] end.join(" "),
+          :conditions => conditions.length.zero? ? nil : conditions.join(" AND "),
+          :group => filter[:group],
+          :limit => 10,
+          :order => filter[:order],
+          :authorised_user => user).map do |object|
+
+            x = object
+            value = eval(filter[:value]).to_s
+            selected = current.include?(value)
+
+            if selected
+              new_selection = (current - [value]).uniq.join(',')
+            else
+              new_selection = (current + [value]).uniq.join(',')
+            end
+
+            new_selection = nil if new_selection.empty?
+
+            target_uri = content_path(filter_params.merge(order_params).merge(filter_query_params).merge(filter[:key] => new_selection, "page" => nil))
+
+            {
+              :object => object,
+              :value  => value,
+              :label  => "<div class='count'>" + eval("x.count") + "</div><div class='label'><span class='truncate'>" + eval(filter[:label]) + "</span></div>",
+              :uri  => target_uri,
+              :selected => selected
+            }
+          end
+
+      [current, objects]
+    end
+
     # determine joins, conditions and order for the main results
 
     joins      = []
@@ -629,63 +690,26 @@
     end
 
     filters.each do |filter|
+      filter[:current], filter[:objects] = calculate_filter(params, filter, user, filter_params, order_params, filter_query_params, nil)
+      puts "current = #{filter[:current].inspect}"
+      puts "objects = #{filter[:objects].inspect}"
+    end
 
-      # apply all the joins and conditions except for the current filter
+    # produce the summary
 
-      joins      = []
-      conditions = []
+    summary = ""
 
-      pivot_options[:filters].each do |other_filter|
-        if filter_list = params[other_filter[:query_option]]
-          conditions << comparison(other_filter[:id_column], filter_list) unless other_filter == filter
-          joins += other_filter[:joins] if other_filter[:joins]
-        end
+    filters.select do |filter|
+      if params[filter[:query_option]]
+        summary << '<span class="filter-in-use"><a href="" +
+        url_for(filter_params.merge(filter_query_params).merge(order_params).merge( { filter[:query_option] => nil } )) +
+        '">' + filter[:title].capitalize + ": " + params[filter[:query_option]] +
+        " <img src='' /></a></span> "
       end
+    end
 
-      joins += filter[:joins] if filter[:joins]
-      conditions << filter[:condition] if filter[:condition]
-
-      if params[:filter_query]
-        conditions << "(#{filter[:label_column]} LIKE '%#{escape_sql(params[:filter_query])}%')"
-
-        cancel_filter_query_url = request.query_parameters.merge( { "filter_query" => nil } )
-      end
-
-      filter[:current] = params[filter[:key]] ? params[filter[:key]].split(',') : []
-
-      filter[:objects] = Authorization.authorised_index(Contribution,
-          :all,
-          :include_permissions => true,
-          :select => filter[:select],
-          :joins => joins.length.zero? ? nil : joins.uniq.map do |j| pivot_options[:joins][j] end.join(" "),
-          :conditions => conditions.length.zero? ? nil : conditions.join(" AND "),
-          :group => filter[:group],
-          :limit => 10,
-          :order => filter[:order],
-          :authorised_user => user).map do |object|
-
-            x = object
-            value = eval(filter[:value]).to_s
-            selected = filter[:current].include?(value)
-
-            if selected
-              new_selection = (filter[:current] - [value]).uniq.join(',')
-            else
-              new_selection = (filter[:current] + [value]).uniq.join(',')
-            end
-
-            new_selection = nil if new_selection.empty?
-
-            target_uri = content_path(filter_params.merge(order_params).merge(filter_query_params).merge(filter[:key] => new_selection, "page" => nil))
-
-            {
-              :object => object,
-              :value  => value,
-              :label  => "<div class='pivot-count'>" + eval("x.count") + "</div><div class='pivot-label'><span class='truncate'>" + eval(filter[:label]) + "</span></div>",
-              :uri  => target_uri,
-              :selected => selected
-            }
-          end
+    if params[:filter_query]
+      cancel_filter_query_url = request.query_parameters.merge( { "filter_query" => nil } )
     end
 
     # remove filters that do not help in narrowing down the result set
@@ -699,20 +723,6 @@
         true
       end
     end
-
-    # produce the summary
-
-    summary = ""
-
-    filters.select do |filter|
-      if params[filter[:query_option]]
-        summary << '<span class="filter-in-use"><a href="" +
-        url_for(filter_params.merge(filter_query_params).merge(order_params).merge( { filter[:query_option] => nil } )) +
-        '">' + filter[:title].capitalize + ": " + params[filter[:query_option]] +
-        " <img src='' /></a></span> "
-      end
-    end
-
     {
       :results                 => results,
       :filters                 => filters,

Modified: branches/discovery/app/views/content/_index.rhtml (2471 => 2472)


--- branches/discovery/app/views/content/_index.rhtml	2010-07-13 14:08:52 UTC (rev 2471)
+++ branches/discovery/app/views/content/_index.rhtml	2010-07-14 15:32:51 UTC (rev 2472)
@@ -1,57 +1,68 @@
-<%= render :partial => "layouts/paginate", :locals => { :collection => @pivot[:results], :sort_by => @pivot_options[:order] } %>
-
-<% if @pivot[:reset_filters_url] %>
-  <div style="float: left; padding: 1em"><%= link_to("Reset filters", @pivot[:reset_filters_url]) -%></div>
-<% end %>
-
-<div style="clear: both"></div>
-
-<div>
-
-  <form action="" url_for(request.query_parameters) -%>" method="GET">
-    <input name="filter_query" value="<%= params[:filter_query] -%>" style="width: 100px" />
-    <% @pivot[:filter_query_url].each do |key, value| %>
-      <input name="<%= key -%>" type="hidden" value="<%= value.sub('"', '\\"') -%>" />
+<div class="pivot">
+  <div class="left">
+    <% if @pivot[:reset_filters_url] %>
+      <div class="reset_filters"><%= link_to("Reset filters", @pivot[:reset_filters_url]) -%></div>
     <% end %>
-      
-  </form>
+    <div class="search_filters">
+      <form action="" url_for(request.query_parameters) -%>" method="GET">
+        <input name="filter_query" value="<%= params[:filter_query] -%>" style="width: 100px" />
+        <% @pivot[:filter_query_url].each do |key, value| %>
+          <input name="<%= key -%>" type="hidden" value="<%= value.sub('"', '\\"') -%>" />
+        <% end %>
+      </form>
 
-  <div>
-    <% if @pivot[:cancel_filter_query_url] %>
-      <%= link_to("Cancel filter query", @pivot[:cancel_filter_query_url]) -%>
-    <% end %>
+      <div>
+        <% if @pivot[:cancel_filter_query_url] %>
+          <%= link_to("Cancel filter query", @pivot[:cancel_filter_query_url]) -%>
+        <% end %>
+      </div>
+    </div>
+    <div class="filters">
+      <% @pivot[:filters].each do |filter| %>
+        <div class="category">Filter by <%= filter[:title] -%></div>
+        <div class="filter">
+          <div class="options">
+            <% filter[:objects].each do |object| %>
+              <div<%= object[:selected] ? ' class="selected"' : '' -%>>
+                <%= link_to(object[:label], object[:uri]) -%>
+              </div>
+            <% end %>
+          </div>
+        </div>
+      <% end %>
+    </div>
   </div>
-
-  <div class="pivot">
-    <% @pivot[:filters].each do |filter| %>
-      <div class="category">Filter by <%= filter[:title] -%></div>
-
-      <div class="filter">
-
-        <div class="options">
-          <% filter[:objects].each do |object| %>
-            <div<%= object[:selected] ? ' class="selected"' : '' -%>>
-              <%= link_to(object[:label], object[:uri]) -%>
-            </div>
-          <% end %>
-        </div>
+  <div class="main">
+    <div class="sort">
+      Sort by:
+      <select  = this.options[this.selectedIndex].value;">
+        <% @pivot_options[:order].each do |args| %>
+          <option value="<%= url_for(request.query_parameters.merge("order" => args[:option])) -%>"
+          <% if params[:order] == args[:option] -%> selected="selected"<% end -%>><%= args[:label] -%></option>
+        <% end %>
+      </select>
+    </div>
+    <div>
+      <%= render :partial => "layouts/paginate", :locals => { :collection => @pivot[:results] } %>
+    </div>
+    <div class="summary">
+      <div class="result-count">
+        Showing <%= pluralize(@pivot[:results].size, 'result') -%>.
+        <% if @pivot[:reset_filters_url] %>
+          The following filters are in effect:
+        <% end %>
       </div>
-    <% end %>
+      <div class="crumbs"><%= @pivot[:summary] -%></div>
+    </div>
+    <div class="results">
+      <%= render :partial => "contributions/list", :locals => { :collection => @pivot[:results], :table => true } %>
+    </div>
+    <div>
+      <%= render :partial => "layouts/paginate", :locals => { :collection => @pivot[:results], :sort_by => @pivot_options[:order], :num_options => @pivot_options[:num_options] } %>
+    </div>
   </div>
-
-  <div class="pivot-summary">
-    <div>Showing <%= @pivot[:results].size -%> results</div>
-    <div class="pivot-filters-in-use"><%= @pivot[:summary] -%></div>
-  </div>
-
-  <%= render :partial => "contributions/list", :locals => { :collection => @pivot[:results], :table => true } %>
-
 </div>
 
-<div style="clear: left"></div>
-
 <%= _javascript__include_tag "ellipsis.js" %>
 <script>truncate_spans()</script>
 
-<%= render :partial => "layouts/paginate", :locals => { :collection => @pivot[:results], :sort_by => @pivot_options[:order], :num_options => @pivot_options[:num_options] } %>
-

Modified: branches/discovery/app/views/workflows/_table.rhtml (2471 => 2472)


--- branches/discovery/app/views/workflows/_table.rhtml	2010-07-13 14:08:52 UTC (rev 2471)
+++ branches/discovery/app/views/workflows/_table.rhtml	2010-07-14 15:32:51 UTC (rev 2472)
@@ -72,7 +72,6 @@
 					  
             <% desc_style = "font-size: 85%;" %>
 
-<% workflow.image = nil %>
             <% unless workflow.image.nil? -%>
               <p style="margin: 0; border: 0; width: 101px; float: left">
                 <%= link_to image_tag(url_for_file_column(workflow, "image", "thumb"), :class => 'framed_nospace'), workflow_path(workflow) %>

Modified: branches/discovery/public/stylesheets/styles.css (2471 => 2472)


--- branches/discovery/public/stylesheets/styles.css	2010-07-13 14:08:52 UTC (rev 2471)
+++ branches/discovery/public/stylesheets/styles.css	2010-07-14 15:32:51 UTC (rev 2472)
@@ -2033,15 +2033,43 @@
   padding-top: 1em;
 }
 
-/* pivot panel */
+/* pivot */
 
-DIV.pivot {
+.pivot {
+  width: 737px;
+  margin: 0;
+}
+
+.pivot .left {
+  width: 150px;
   float: left;
-  width: 150px;
-  margin-right: 10px;
+  padding-right: 10px;
 }
 
-DIV.pivot DIV.filter {
+.pivot .left > DIV {
+  margin-bottom: 0.5em;
+}
+
+.pivot .main {
+  margin-left: 160px;
+}
+
+.pivot .main > DIV {
+  margin-bottom: 0.5em;
+}
+
+.pivot .summary {
+  clear: right;
+  background: #f0f0f0;
+  border: 1px solid #d8d8d8;
+  padding: 4px;
+}
+
+.pivot .sort {
+  float: right;
+}
+
+.pivot .filter {
   margin-bottom: 1em;
   padding: 2px;
   background: #f0f0f0;
@@ -2049,94 +2077,81 @@
   -moz-border-radius: 6px;
 }
 
-DIV.pivot DIV.category {
+.pivot .category {
   padding: 0.2em;
   font-size: 110%;
   margin-bottom: 0.2em;
 }
 
-DIV.pivot DIV.options > DIV {
+.pivot .options > DIV {
   border: 1px solid transparent;
   padding: 0.2em;
   font-size: 90%;
   padding-left: 0.2em;
 }
 
-DIV.pivot DIV.options > DIV:first-child {
-  border-top-left-radius: 6px;
-  border-top-right-radius: 6px;
-  -moz-border-radius-topleft: 6px;
-  -moz-border-radius-topright: 6px;
-}
-
-DIV.pivot DIV.options > DIV:last-child {
-  border-bottom-left-radius: 6px;
-  border-bottom-right-radius: 6px;
-  -moz-border-radius-bottomleft: 6px;
-  -moz-border-radius-bottomright: 6px;
-}
-
-DIV.pivot DIV.options > DIV:hover {
+.pivot .options > DIV:hover {
   background: #d0d0f0;
 }
 
-DIV.pivot DIV.options > DIV.selected {
+.pivot .options > DIV.selected {
   background: #ffe0c0;
 }
  
-DIV.pivot DIV.options > DIV.selected:hover {
+.pivot .options > DIV.selected:hover {
   background: #dfc0a0;
 }
  
-DIV.pivot-summary {
-  margin-left: 160px;
-  background: #f0f0f0;
-  border: 1px solid #d8d8d8;
-  margin-bottom: 0.5em;
-  padding: 0.2em;
+.pivot .options > DIV:first-child {
+  border-top-left-radius: 6px;
+  border-top-right-radius: 6px;
+  -moz-border-radius-topleft: 6px;
+  -moz-border-radius-topright: 6px;
 }
 
-.pivot-title {
-  font-size: 120%;
-  text-align: center;
-  margin-bottom: 1.0em;
+.pivot .options > DIV:last-child {
+  border-bottom-left-radius: 6px;
+  border-bottom-right-radius: 6px;
+  -moz-border-radius-bottomleft: 6px;
+  -moz-border-radius-bottomright: 6px;
 }
 
-.pivot-label {
+.pivot .label {
   width: 110px;
   overflow: hidden;
 }
 
-.pivot-count {
+.pivot .count {
   float: right;
 }
 
-DIV.pivot-filters-in-use {
-  margin-top: 0.5em;
-  width: 577px;
-}
-
-SPAN.filter-in-use {
+.pivot .filter-in-use {
   background: #e0e0e0;
   border: 1px solid #d0d0d0;
   padding: 2px;
 	line-height: 180%;
 }
 
-SPAN.filter-in-use A {
+.pivot .filter-in-use A {
   text-decoration: none; /* no underline */
 }
 
-SPAN.filter-in-use A IMG {
+.pivot .filter-in-use A IMG {
   vertical-align: middle;
 }
 
-SPAN.filter-in-use:hover {
+.pivot .filter-in-use:hover {
   border: 1px solid #d0a0a0;
   padding: 2px;
   background: #f0d0d0;
 }
 
+.pivot .pagination {
+	padding: 0px;
+	margin: 0px;
+	text-align: left;
+}
+
 .truncate {
   white-space: nowrap;
 }

reply via email to

[Prev in Thread] Current Thread [Next in Thread]