active_scaffold 3.3.0 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. data/CHANGELOG +18 -0
  2. data/app/assets/javascripts/active_scaffold.js.erb +8 -0
  3. data/app/assets/javascripts/jquery/active_scaffold.js +11 -7
  4. data/app/assets/javascripts/jquery/date_picker_bridge.js.erb +19 -0
  5. data/app/assets/javascripts/prototype/active_scaffold.js +2 -0
  6. data/app/assets/stylesheets/active_scaffold_layout.css +5 -1
  7. data/app/views/active_scaffold_overrides/_field_search.html.erb +2 -2
  8. data/app/views/active_scaffold_overrides/_form_association.html.erb +5 -5
  9. data/app/views/active_scaffold_overrides/_form_association_record.html.erb +21 -16
  10. data/app/views/active_scaffold_overrides/_horizontal_subform.html.erb +8 -8
  11. data/app/views/active_scaffold_overrides/_horizontal_subform_header.html.erb +1 -1
  12. data/app/views/active_scaffold_overrides/_list.html.erb +1 -1
  13. data/app/views/active_scaffold_overrides/_list_calculations.html.erb +5 -7
  14. data/app/views/active_scaffold_overrides/_list_inline_adapter.html.erb +1 -12
  15. data/app/views/active_scaffold_overrides/_list_pagination.html.erb +1 -1
  16. data/app/views/active_scaffold_overrides/_list_record.html.erb +2 -2
  17. data/app/views/active_scaffold_overrides/_list_with_header.html.erb +1 -1
  18. data/app/views/active_scaffold_overrides/_render_field.js.erb +1 -1
  19. data/app/views/active_scaffold_overrides/_update_calculations.js.erb +1 -0
  20. data/app/views/active_scaffold_overrides/_vertical_subform.html.erb +2 -4
  21. data/app/views/active_scaffold_overrides/destroy.js.erb +1 -1
  22. data/app/views/active_scaffold_overrides/edit_associated.js.erb +2 -2
  23. data/config/locales/de.yml +109 -109
  24. data/config/locales/en.yml +109 -111
  25. data/config/locales/es.yml +112 -113
  26. data/config/locales/fr.yml +119 -125
  27. data/config/locales/hu.yml +109 -110
  28. data/config/locales/ja.yml +109 -110
  29. data/config/locales/ru.yml +119 -121
  30. data/lib/active_scaffold.rb +2 -2
  31. data/lib/active_scaffold/actions/common_search.rb +7 -3
  32. data/lib/active_scaffold/actions/core.rb +1 -0
  33. data/lib/active_scaffold/actions/field_search.rb +2 -1
  34. data/lib/active_scaffold/actions/list.rb +7 -1
  35. data/lib/active_scaffold/actions/subform.rb +2 -4
  36. data/lib/active_scaffold/attribute_params.rb +2 -4
  37. data/lib/active_scaffold/bridges/calendar_date_select.rb +1 -1
  38. data/lib/active_scaffold/bridges/date_picker.rb +4 -1
  39. data/lib/active_scaffold/bridges/date_picker/helper.rb +6 -6
  40. data/lib/active_scaffold/bridges/file_column.rb +1 -1
  41. data/lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb +1 -1
  42. data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +1 -1
  43. data/lib/active_scaffold/bridges/paperclip.rb +1 -1
  44. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge_helpers.rb +1 -1
  45. data/lib/active_scaffold/bridges/shared/date_bridge.rb +1 -1
  46. data/lib/active_scaffold/config/base.rb +6 -1
  47. data/lib/active_scaffold/config/core.rb +16 -0
  48. data/lib/active_scaffold/config/list.rb +4 -0
  49. data/lib/active_scaffold/data_structures/column.rb +10 -3
  50. data/lib/active_scaffold/extensions/action_view_rendering.rb +10 -5
  51. data/lib/active_scaffold/helpers/association_helpers.rb +20 -5
  52. data/lib/active_scaffold/helpers/form_column_helpers.rb +31 -21
  53. data/lib/active_scaffold/helpers/list_column_helpers.rb +8 -5
  54. data/lib/active_scaffold/helpers/pagination_helpers.rb +8 -0
  55. data/lib/active_scaffold/helpers/search_column_helpers.rb +20 -6
  56. data/lib/active_scaffold/helpers/view_helpers.rb +6 -6
  57. data/lib/active_scaffold/version.rb +1 -1
  58. data/test/bridges/paperclip_test.rb +2 -2
  59. data/vendor/assets/javascripts/getprototypeof.js +12 -0
  60. data/vendor/assets/javascripts/jquery-ui-timepicker-addon.js +1 -1
  61. metadata +5 -5
  62. data/app/views/active_scaffold_overrides/_search_attribute.html.erb +0 -10
@@ -41,7 +41,7 @@ module ActiveScaffold
41
41
  # TODO: move empty_field_text and   logic in here?
42
42
  # TODO: we need to distinguish between the automatic links *we* create and the ones that the dev specified. some logic may not apply if the dev specified the link.
43
43
  def render_list_column(text, column, record)
44
- if column.link
44
+ if column.link && !skip_action_link?(column.link, record)
45
45
  link = column.link
46
46
  associated = record.send(column.association.name) if column.association
47
47
  render_action_link(link, record, :link => text, :authorized => link.action.nil? || column_link_authorized?(link, column, record, associated))
@@ -200,7 +200,7 @@ module ActiveScaffold
200
200
 
201
201
  def inplace_edit?(record, column)
202
202
  if column.inplace_edit
203
- editable = controller.send(:update_authorized?, record) if controller.respond_to?(:update_authorized?)
203
+ editable = controller.send(:update_authorized?, record) if controller.respond_to?(:update_authorized?, true)
204
204
  editable ||= record.authorized_for?(:crud_type => :update, :column => column.name)
205
205
  end
206
206
  end
@@ -222,11 +222,11 @@ module ActiveScaffold
222
222
 
223
223
  def inplace_edit_control(column)
224
224
  if inplace_edit?(active_scaffold_config.model, column) and inplace_edit_cloning?(column)
225
- old_record, @record = @record, new_model
225
+ old_record, @record = @record, new_model # TODO remove when relying on @record is removed
226
226
  column = column.clone
227
227
  column.options = column.options.clone
228
228
  column.form_ui = :select if (column.association && column.form_ui.nil?)
229
- options = active_scaffold_input_options(column)
229
+ options = active_scaffold_input_options(column).merge(:object => new_model)
230
230
  options[:class] = "#{options[:class]} inplace_field"
231
231
  content_tag(:div, active_scaffold_input_for(column, nil, options), :style => "display:none;", :class => inplace_edit_control_css_class).tap do
232
232
  @record = old_record
@@ -302,6 +302,9 @@ module ActiveScaffold
302
302
  :remote => true, :method => :get}
303
303
  url_options = params_for(:action => :index, :page => 1,
304
304
  :sort => column.name, :sort_direction => sort_direction)
305
+ unless active_scaffold_config.store_user_settings
306
+ url_options.merge!(:search => search_params) if search_params.present?
307
+ end
305
308
  link_to column_heading_label(column), url_options, options
306
309
  else
307
310
  content_tag(:p, column_heading_label(column))
@@ -315,7 +318,7 @@ module ActiveScaffold
315
318
  def render_nested_view(action_links, record)
316
319
  rendered = []
317
320
  action_links.member.each do |link|
318
- if link.nested_link? && link.column && @nested_auto_open[link.column.name] && @records.length <= @nested_auto_open[link.column.name] && controller.respond_to?(:render_component_into_view)
321
+ if link.nested_link? && link.column && @nested_auto_open[link.column.name] && @records.length <= @nested_auto_open[link.column.name] && controller.respond_to?(:render_component_into_view, true)
319
322
  link_url_options = {:adapter => '_list_inline_adapter', :format => :js}.merge(action_link_url_options(link, record))
320
323
  link_id = get_action_link_id(link, record)
321
324
  rendered << (controller.send(:render_component_into_view, link_url_options) + javascript_tag("ActiveScaffold.ActionLink.get('#{link_id}').set_opened();"))
@@ -6,6 +6,14 @@ module ActiveScaffold
6
6
  end
7
7
 
8
8
  def pagination_ajax_links(current_page, url_options, options, inner_window, outer_window)
9
+ unless active_scaffold_config.store_user_settings
10
+ url_options.merge!(:search => search_params) if search_params.present?
11
+ if active_scaffold_config.list.user.user_sorting?
12
+ column, direction = active_scaffold_config.list.user.sorting.first
13
+ url_options.merge!(:sort => column.name, :sort_direction => direction)
14
+ end
15
+ end
16
+
9
17
  start_number = current_page.number - inner_window
10
18
  end_number = current_page.number + inner_window
11
19
  start_number = 1 if start_number <= 0
@@ -4,12 +4,12 @@ module ActiveScaffold
4
4
  module SearchColumnHelpers
5
5
  # This method decides which input to use for the given column.
6
6
  # It does not do any rendering. It only decides which method is responsible for rendering.
7
- def active_scaffold_search_for(column)
8
- options = active_scaffold_search_options(column)
7
+ def active_scaffold_search_for(column, options = nil)
8
+ options ||= active_scaffold_search_options(column)
9
9
 
10
10
  # first, check if the dev has created an override for this specific field for search
11
11
  if (method = override_search_field(column))
12
- send(method, @record, options)
12
+ send(method, options[:object] || @record, options)
13
13
 
14
14
  # second, check if the dev has specified a valid search_ui for this column, using specific ui for searches
15
15
  elsif column.search_ui and (method = override_search(column.search_ui))
@@ -21,7 +21,7 @@ module ActiveScaffold
21
21
 
22
22
  # fourth, check if the dev has created an override for this specific field
23
23
  elsif (method = override_form_field(column))
24
- send(method, @record, options)
24
+ send(method, options[:object] || @record, options)
25
25
 
26
26
  # fallback: we get to make the decision
27
27
  else
@@ -51,6 +51,16 @@ module ActiveScaffold
51
51
  { :name => "search[#{column.name}]", :class => "#{column.name}-input", :id => "search_#{column.name}", :value => field_search_params[column.name] }
52
52
  end
53
53
 
54
+ def search_attribute(column, record)
55
+ column_options = active_scaffold_search_options(column).merge(:object => record)
56
+ field = active_scaffold_search_for column, column_options
57
+ %|<dl><dt>#{label_tag search_label_for(column, column_options), search_column_label(column, record)}</dt><dd>#{field}</dd></dl>|.html_safe
58
+ end
59
+
60
+ def search_label_for(column, options)
61
+ options[:id] unless [:range, :integer, :decimal, :float, :string, :date_picker, :datetime_picker, :calendar_date_select].include? column.search_ui
62
+ end
63
+
54
64
  ##
55
65
  ## Search input methods
56
66
  ##
@@ -114,7 +124,7 @@ module ActiveScaffold
114
124
  select_options << [as_(:true), true]
115
125
  select_options << [as_(:false), false]
116
126
 
117
- select_tag(options[:name], options_for_select(select_options, column.column.type_cast(field_search_params[column.name])))
127
+ select_tag(options[:name], options_for_select(select_options, column.column.type_cast(field_search_params[column.name])), :id => options[:id])
118
128
  end
119
129
  # we can't use checkbox ui because it's not possible to decide whether search for this field or not
120
130
  alias_method :active_scaffold_search_checkbox, :active_scaffold_search_boolean
@@ -123,7 +133,7 @@ module ActiveScaffold
123
133
  select_options = []
124
134
  select_options << [as_(:_select_), nil]
125
135
  select_options.concat ActiveScaffold::Finder::NullComparators.collect {|comp| [as_(comp), comp]}
126
- select_tag(options[:name], options_for_select(select_options, field_search_params[column.name]))
136
+ select_tag(options[:name], options_for_select(select_options, field_search_params[column.name]), :id => options[:id])
127
137
  end
128
138
 
129
139
  def field_search_params_range_values(column)
@@ -223,6 +233,10 @@ module ActiveScaffold
223
233
  ##
224
234
  ## Search column override signatures
225
235
  ##
236
+
237
+ def search_column_label(column, record)
238
+ column.label
239
+ end
226
240
 
227
241
  def override_search_field(column)
228
242
  override_helper column, 'search_column'
@@ -97,11 +97,11 @@ module ActiveScaffold
97
97
  end
98
98
 
99
99
  def skip_action_link?(link, *args)
100
- !link.ignore_method.nil? && controller.respond_to?(link.ignore_method) && controller.send(link.ignore_method, *args)
100
+ !link.ignore_method.nil? && controller.respond_to?(link.ignore_method, true) && controller.send(link.ignore_method, *args)
101
101
  end
102
102
 
103
103
  def action_link_authorized?(link, *args)
104
- security_method = link.security_method_set? || controller.respond_to?(link.security_method)
104
+ security_method = link.security_method_set? || controller.respond_to?(link.security_method, true)
105
105
  authorized = if security_method
106
106
  controller.send(link.security_method, *args)
107
107
  else
@@ -224,8 +224,8 @@ module ActiveScaffold
224
224
  authorized = associated_for_authorized.authorized_for?(:crud_type => link.crud_type)
225
225
  authorized = authorized and record.authorized_for?(:crud_type => :update, :column => column.name) if link.crud_type == :create
226
226
  authorized
227
- else
228
- record.authorized_for?(:crud_type => link.crud_type)
227
+ else
228
+ action_link_authorized?(link, record)
229
229
  end
230
230
  end
231
231
 
@@ -368,7 +368,7 @@ module ActiveScaffold
368
368
  id = "#{column.association.name}-#{record.id}" unless record.nil?
369
369
  end
370
370
  end
371
- action_id = "#{id_from_controller("#{link.controller}-") if params[:parent_controller] || link.controller != controller.controller_path}#{link.action}"
371
+ action_id = "#{id_from_controller("#{link.controller}-") if params[:parent_controller] || (link.controller && link.controller != controller.controller_path)}#{link.action}"
372
372
  action_link_id(action_id, id)
373
373
  end
374
374
 
@@ -462,7 +462,7 @@ module ActiveScaffold
462
462
 
463
463
  def column_empty?(column_value)
464
464
  empty = column_value.nil?
465
- empty ||= column_value.blank?
465
+ empty ||= column_value != false && column_value.blank?
466
466
  empty ||= ['&nbsp;', active_scaffold_config.list.empty_field_text].include? column_value if String === column_value
467
467
  return empty
468
468
  end
@@ -2,7 +2,7 @@ module ActiveScaffold
2
2
  module Version
3
3
  MAJOR = 3
4
4
  MINOR = 3
5
- PATCH = 0
5
+ PATCH = 1
6
6
 
7
7
  STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
8
  end
@@ -29,8 +29,8 @@ class PaperclipTest < ActionView::TestCase
29
29
  %w(logo_file_name logo_file_size logo_updated_at logo_content_type).each do |attr|
30
30
  assert !config.columns._inheritable.include?(attr.to_sym)
31
31
  end
32
- assert Company.instance_methods.include?('delete_logo')
33
- assert Company.instance_methods.include?('delete_logo=')
32
+ assert Company.method_defined?(:delete_logo)
33
+ assert Company.method_defined?(:'delete_logo=')
34
34
  end
35
35
 
36
36
  def test_delete
@@ -0,0 +1,12 @@
1
+ if ( typeof Object.getPrototypeOf !== "function" ) {
2
+ if ( typeof "test".__proto__ === "object" ) {
3
+ Object.getPrototypeOf = function(object){
4
+ return object.__proto__;
5
+ };
6
+ } else {
7
+ Object.getPrototypeOf = function(object){
8
+ // May break if the constructor has been tampered with
9
+ return object.constructor.prototype;
10
+ };
11
+ }
12
+ }
@@ -163,7 +163,7 @@
163
163
 
164
164
  for (var attrName in this._defaults) {
165
165
  if(this._defaults.hasOwnProperty(attrName)){
166
- var attrValue = $input.attr('time:' + attrName);
166
+ var attrValue = $input.data(attrName.toLowerCase());
167
167
  if (attrValue) {
168
168
  try {
169
169
  inlineSettings[attrName] = eval(attrValue);
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_scaffold
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
4
+ hash: 9
5
5
  prerelease:
6
6
  segments:
7
7
  - 3
8
8
  - 3
9
- - 0
10
- version: 3.3.0
9
+ - 1
10
+ version: 3.3.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Many, see README
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2013-05-08 00:00:00 Z
18
+ date: 2013-06-24 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  type: :development
@@ -146,7 +146,6 @@ files:
146
146
  - app/views/active_scaffold_overrides/_render_field.js.erb
147
147
  - app/views/active_scaffold_overrides/_row.html.erb
148
148
  - app/views/active_scaffold_overrides/_search.html.erb
149
- - app/views/active_scaffold_overrides/_search_attribute.html.erb
150
149
  - app/views/active_scaffold_overrides/_show.html.erb
151
150
  - app/views/active_scaffold_overrides/_show_columns.html.erb
152
151
  - app/views/active_scaffold_overrides/_update_actions.html.erb
@@ -326,6 +325,7 @@ files:
326
325
  - vendor/assets/images/ui-icons_ef8c08_256x240.png
327
326
  - vendor/assets/images/ui-icons_ffd27a_256x240.png
328
327
  - vendor/assets/images/ui-icons_ffffff_256x240.png
328
+ - vendor/assets/javascripts/getprototypeof.js
329
329
  - vendor/assets/javascripts/jquery-ui-timepicker-addon.js
330
330
  - vendor/assets/stylesheets/jquery-ui.css
331
331
  - MIT-LICENSE
@@ -1,10 +0,0 @@
1
- <li class="form-element">
2
- <dl>
3
- <dt>
4
- <label for="<%= "search_#{column.name}" %>"><%= column.label %></label>
5
- </dt>
6
- <dd>
7
- <%= active_scaffold_search_for(column) %>
8
- </dd>
9
- </dl>
10
- </li>