Skip to content

Commit

Permalink
override columns
Browse files Browse the repository at this point in the history
  • Loading branch information
stu committed Mar 15, 2007
1 parent c109352 commit 782fc00
Show file tree
Hide file tree
Showing 9 changed files with 51 additions and 21 deletions.
2 changes: 1 addition & 1 deletion lib/streamlined/column/base.rb
@@ -1,6 +1,6 @@
class Streamlined::Column::Base
include ERB::Util
attr_accessor :read_only, :link_to, :popup, :show, :edit, :new, :list
attr_accessor :read_only, :link_to, :popup
def set_attributes(hash)
hash.each do |k,v|
sym = "#{k}="
Expand Down
12 changes: 6 additions & 6 deletions lib/streamlined/helper.rb
Expand Up @@ -80,16 +80,16 @@ def unassigned_if_allowed(klass, relationship, items)
end

# Given a model and a controller, finds all the columns that are currently slated to be shown in the list view.
def show_columns_for_model(klass, klass_ui, controller)
results = current_show_columns(klass, klass_ui, controller).collect {|c| klass_ui.all_columns.find {|col| col.name == c}}
def list_columns_for_model(klass, klass_ui, controller)
results = current_list_columns(klass, klass_ui, controller).collect {|c| klass_ui.all_columns.find {|col| col.name == c}}
results.reject! {|c| c == nil}
return results
# return klass.columns.select {|c| current_show_columns(klass, klass_ui, controller).include?(c.name)}
# return klass.columns.select {|c| current_list_columns(klass, klass_ui, controller).include?(c.name)}
end

# Given a model and a controller, finds all the columns that are currently NOT slated to be shown in the list view.
def hide_columns_for_model(klass, klass_ui, controller)
return klass_ui.all_columns.reject {|c| current_show_columns(klass, klass_ui, controller).include?(c.name)}
return klass_ui.all_columns.reject {|c| current_list_columns(klass, klass_ui, controller).include?(c.name)}
end


Expand Down Expand Up @@ -119,14 +119,14 @@ def streamlined_column_html( object, column )

private

def current_show_columns(klass, klass_ui, controller)
def current_list_columns(klass, klass_ui, controller)
controller = controller.to_sym
session[:current_user] ? pref = session[:current_user].preferences : pref = nil

if pref && pref.page_columns && pref.page_columns.instance_of?(Hash) && pref.page_columns[controller]
current = pref.page_columns[controller]
else
current = klass_ui.user_columns.collect {|c| c.name}
current = klass_ui.list_columns.collect {|c| c.name}
end
return current
end
Expand Down
27 changes: 27 additions & 0 deletions lib/streamlined/ui.rb
Expand Up @@ -58,6 +58,33 @@ def user_columns(*args)
end
end
end

def override_columns(name, *args)
if args.size > 0
instance_variable_set(name, [])
args.each do |arg|
if Hash === arg
instance_variable_get(name).last.set_attributes(arg)
else
col = column(arg)
raise(Streamlined::Error,"No column named #{arg}") unless col
instance_variable_get(name) << Marshal::load(Marshal.dump(col))
end
end
else
instance_variable_get(name) || user_columns
end
end

def show_columns(*args)
override_columns(:@show_columns, *args)
end
def edit_columns(*args)
override_columns(:@edit_columns, *args)
end
def list_columns(*args)
override_columns(:@list_columns, *args)
end

def column(name)
scalars[name] || additions[name] || relationships[name]
Expand Down
4 changes: 1 addition & 3 deletions templates/generic_views/_form.rhtml
Expand Up @@ -4,10 +4,8 @@

<table class="streamlined_form">

<% @model_ui.user_columns.each do |column| %>
<% unless column.edit == false %>
<% @model_ui.edit_columns.each do |column| %>
<tr><td class="streamlined_label_cell"><label class="streamlined_label" for="#{record}_#{column.name}"><%= column.human_name %></label></td><td class="streamlined_input_cell"><%= input(@model_underscore, column.name) %></td></tr>
<% end %>
<% end %>

</table><!--[eoform:<%= @model_underscore %>]-->
Expand Down
8 changes: 2 additions & 6 deletions templates/generic_views/_list.rhtml
@@ -1,10 +1,8 @@
<table cellpadding="0" cellspacing="0">
<thead>
<tr>
<% show_columns_for_model(@model, @model_ui, params[:controller]).each do |column| %>
<% unless column.list == false %>
<% list_columns_for_model(@model, @model_ui, params[:controller]).each do |column| %>
<th scope="col" class="sortSelector"><%= column.human_name %><%= column_sort_image(@page_options, column)%></th>
<% end %>
<% end %>
<%= streamlined_table_row_button_header %>
</tr>
Expand All @@ -14,10 +12,8 @@
<% for item in @streamlined_items %>
<% odd = !odd %>
<tr class="<%= odd ? 'odd' : 'even'%>">
<% show_columns_for_model(@model, @model_ui, params[:controller]).each do |column| %>
<% unless column.list == false %>
<% list_columns_for_model(@model, @model_ui, params[:controller]).each do |column| %>
<td><%= column.render_td(self, item, @model_ui, params[:controller])%></td>
<% end %>
<% end %>
<%= streamlined_table_row_buttons(item) %>
</tr>
Expand Down
2 changes: 1 addition & 1 deletion templates/generic_views/_show_atom.rhtml
@@ -1,6 +1,6 @@
<br/>
<table>
<% show_columns_for_model( @model, @model_ui, params[:controller] ).each do |column| %>
<% list_columns_for_model( @model, @model_ui, params[:controller] ).each do |column| %>
<tr>
<td align="right" valign="top"><b><%= @model_ui.column_header( column ) %></b>:</td>
<td valign="top"><%= streamlined_column_html( item, column ) %></td>
Expand Down
2 changes: 1 addition & 1 deletion templates/generic_views/_show_columns.rhtml
@@ -1,4 +1,4 @@
<% show_columns_for_model(@model, @model_ui, params[:controller]).each do |column| %>
<% list_columns_for_model(@model, @model_ui, params[:controller]).each do |column| %>
<% unless column.nil? %>
<li id="displaycolumns_<%= column.name %>"><%= column.human_name %></li>
<% end %>
Expand Down
4 changes: 1 addition & 3 deletions templates/generic_views/show.rhtml
@@ -1,15 +1,13 @@
<div id="content">
<table class="streamlined_form">
<% for column in @model_ui.user_columns %>
<% unless column.show == false %>
<% for column in @model_ui.show_columns %>
<tr>
<td class="streamlined_label_cell"><span class="streamlined_label"><%= column.human_name %>:</span></td>
<td class="streamlined_value_cell">
<td><%= column.render_td(self, @streamlined_item, @model_ui, params[:controller])%></td>
</td>
</tr>
<% end %>
<% end %>
</table>
<script>
if (top.Streamlined.PageOptions.form()) {
Expand Down
11 changes: 11 additions & 0 deletions test/functional/streamlined/ui_functional_test.rb
Expand Up @@ -31,4 +31,15 @@ def test_read_only_column
assert_equal true, @ui.scalars[:first_name].read_only
assert_equal nil, @ui.scalars[:last_name].read_only
end

def test_view_specific_columns
@ui.user_columns :first_name, :last_name
assert_equal nil, @ui.scalars[:first_name].read_only
assert_equal nil, @ui.scalars[:last_name].read_only
assert_same @ui.show_columns, @ui.user_columns
@ui.show_columns :first_name, {:read_only=>true}, :last_name, {:read_only=>true}
assert_not_same @ui.show_columns, @ui.user_columns
assert_equal true, @ui.show_columns.first.read_only
assert_equal true, @ui.show_columns.last.read_only
end
end

0 comments on commit 782fc00

Please sign in to comment.