Module: ActiveScaffold::Helpers::ViewHelpers

Overview

All extra helpers that should be included in the View. Also a dumping ground for uncategorized helpers.

Constant Summary collapse

NESTED_PARAMS =
[:eid, :association, :parent_scaffold]

Instance Method Summary collapse

Methods included from HumanConditionHelpers

#active_scaffold_human_condition_for, #override_human_condition, #override_human_condition?, #override_human_condition_column

Methods included from SearchColumnHelpers

#active_scaffold_search_boolean, #active_scaffold_search_date, #active_scaffold_search_datetime, #active_scaffold_search_for, #active_scaffold_search_multi_select, #active_scaffold_search_null, #active_scaffold_search_options, #active_scaffold_search_range, #active_scaffold_search_range_comparator_options, #active_scaffold_search_range_string?, #active_scaffold_search_select, #active_scaffold_search_text, #active_scaffold_search_time, #field_search_datetime_value, #field_search_params_range_values, #include_null_comparators?, #override_search, #override_search_field, #search_attribute, #search_column_label, #search_label_for, #searched_by?, #visibles_and_hiddens

Methods included from FormColumnHelpers

#active_scaffold_add_existing_input, #active_scaffold_add_existing_label, #active_scaffold_checkbox_list, #active_scaffold_enum_options, #active_scaffold_grouped_options, #active_scaffold_input_boolean, #active_scaffold_input_carrierwave, #active_scaffold_input_checkbox, #active_scaffold_input_dragonfly, #active_scaffold_input_email, #active_scaffold_input_enum, #active_scaffold_input_file_column, #active_scaffold_input_for, #active_scaffold_input_number, #active_scaffold_input_options, #active_scaffold_input_paperclip, #active_scaffold_input_password, #active_scaffold_input_plural_association, #active_scaffold_input_radio, #active_scaffold_input_range, #active_scaffold_input_select, #active_scaffold_input_singular_association, #active_scaffold_input_telephone, #active_scaffold_input_text_options, #active_scaffold_input_textarea, #active_scaffold_input_url, #active_scaffold_input_virtual, #active_scaffold_plural_association_options, #active_scaffold_render_input, #active_scaffold_render_subform_column, #active_scaffold_translate_select_options, #active_scaffold_translated_option, #column_renders_as, #column_scope, #field_attributes, #form_attribute, #form_hidden_attribute, #label_for, #numerical_constraints_for_column, #onsubmit, #override_form_field, #override_form_field_partial, #override_form_field_partial?, #override_input, #override_subform_partial, #override_subform_partial?, #render_column, #subform_partial_for_column, #update_columns_options

Methods included from ShowColumnHelpers

#active_scaffold_show_text, #override_show_column_ui, #show_column_override, #show_column_value

Methods included from ListColumnHelpers

#active_scaffold_column_carrierwave, #active_scaffold_column_checkbox, #active_scaffold_column_download_link, #active_scaffold_column_download_link_with_filename, #active_scaffold_column_dragonfly, #active_scaffold_column_fulltext, #active_scaffold_column_marked, #active_scaffold_column_paperclip, #active_scaffold_column_text, #active_scaffold_column_thumbnail, #active_scaffold_inplace_edit, #all_marked?, #cache_association, #clean_column_value, #column_heading_attributes, #column_heading_label, #column_heading_value, #column_override, #format_association_value, #format_column_value, #format_number_value, #format_value, #get_column_method, #get_column_value, #inplace_edit?, #inplace_edit_cloning?, #inplace_edit_control, #inplace_edit_control_css_class, #inplace_edit_data, #mark_column_heading, #override_column_ui, #render_column_heading, #render_list_column, #render_nested_view

Methods included from PaginationHelpers

#pagination_ajax_link, #pagination_ajax_links

Methods included from AssociationHelpers

#association_options_count, #association_options_find, #cache_association_options, #options_for_association, #options_for_association_conditions, #options_for_association_count, #sorted_association_options_find

Methods included from IdHelpers

#action_iframe_id, #action_link_id, #active_scaffold_calculations_id, #active_scaffold_column_header_id, #active_scaffold_content_id, #active_scaffold_id, #active_scaffold_messages_id, #active_scaffold_tbody_id, #association_subform_id, #before_header_id, #controller_id, #element_cell_id, #element_form_id, #element_messages_id, #element_row_id, #empty_message_id, #id_from_controller, #loading_indicator_id, #nested_id, #scope_id, #search_input_id, #sub_form_id, #sub_form_list_id, #sub_section_id

Instance Method Details

Returns:

  • (Boolean)


103
104
105
106
107
108
109
110
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 103

def action_link_authorized?(link, *args)
  security_method = link.security_method_set? || controller.respond_to?(link.security_method, true)
  authorized = if security_method
    controller.send(link.security_method, *args)
  else
    args.empty? ? true : args.first.authorized_for?(:crud_type => link.crud_type, :action => link.action)
  end
end


377
378
379
380
381
382
383
384
385
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 377

def action_link_html(link, url, html_options, record)
  label = html_options.delete(:link)
  label ||= link.label
  if url.nil?
    (:a, label, html_options)
  else
    link_to(label, url, html_options)
  end
end


330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 330

def action_link_html_options(link, record, options)
  link_id = get_action_link_id(link, record)
  html_options = link.html_options.merge(:class => [link.html_options[:class], link.action.to_s].compact.join(' '))
  html_options[:link] = action_link_text(link, options)

  # Needs to be in html_options to as the adding _method to the url is no longer supported by Rails        
  html_options[:method] = link.method if link.method != :get

  html_options[:data] = {}
  html_options[:data][:confirm] = link.confirm(record.try(:to_label)) if link.confirm?
  if link.inline?
    html_options[:class] << ' as_action'
    html_options[:data][:position] = link.position if link.position
    html_options[:data][:action] = link.action
    html_options[:data][:cancel_refresh] = true if link.refresh_on_close
    html_options[:data][:keep_open] = true if link.keep_open?
  end
  html_options[:target] = '_blank' if link.popup?
  html_options[:id] = link_id
  html_options[:remote] = true unless link.page? || link.popup?
  if link.dhtml_confirm?
    unless link.inline?
      html_options[:class] << ' as_action'
      html_options[:page_link] = 'true'
    end
    html_options[:dhtml_confirm] = link.dhtml_confirm.value
    html_options[:onclick] = link.dhtml_confirm.onclick_function(controller, link_id)
  end
  html_options
end


325
326
327
328
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 325

def action_link_text(link, options)
  text = image_tag(link.image[:name], :size => link.image[:size], :alt => options[:link] || link.label, :title => options[:link] || link.label) if link.image
  text || options[:link]
end

setup the action link to inline form



177
178
179
180
181
182
183
184
185
186
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 177

def action_link_to_inline_form(link, record)
  link = link.clone
  associated = record.send(link.column.association.name)
  if link.column.polymorphic_association?
    link.controller = controller_path_for_activerecord(associated.class)
    return link if link.controller.nil?
  end
  link = configure_column_link(link, record, associated) if link.action.nil?
  link
end


232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 232

def action_link_url(link, record)
  url = (@action_links_urls ||= {})[link.name_to_cache_link_url]
  url ||= begin
    url_options = action_link_url_options(link, record)
    if active_scaffold_config.cache_action_link_urls
      url = url_for(url_options)
      model = active_scaffold_config.model
      is_sti_record = record && model.columns_hash.include?(model.inheritance_column) &&
        record[model.inheritance_column].present?
      unless link.dynamic_parameters.is_a?(Proc) || is_sti_record
        @action_links_urls[link.name_to_cache_link_url] = url 
      end
      url
    else
      url_for(params_for(url_options))
    end
  end
  
  url = record ? url.sub('--ID--', record.id.to_s) : url.clone
  if link.column.try(:singular_association?)
    url = url.sub('--CHILD_ID--', record.send(link.column.association.name).try(:id).to_s) 
  elsif nested?
    url = url.sub('--CHILD_ID--', params[nested.param_name].to_s)
  end

  if active_scaffold_config.cache_action_link_urls
    query_string, non_nested_query_string = query_string_for_action_links(link)
    if query_string || (!link.nested_link? && non_nested_query_string)
      url << (url.include?('?') ? '&' : '?')
      url << query_string if query_string
      url << non_nested_query_string if !link.nested_link? && non_nested_query_string
    end
  end
  url
end


303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 303

def action_link_url_options(link, record)
  url_options = {:action => link.action}
  url_options[:id] = '--ID--' unless record.nil?
  url_options[:controller] = link.controller.to_s if link.controller
  url_options.merge! link.parameters if link.parameters
  if link.dynamic_parameters.is_a?(Proc)
    if record.nil?
      url_options.merge! link.dynamic_parameters.call
    else
      url_options.merge! link.dynamic_parameters.call(record)
    end
  end
  if link.nested_link?
    url_options_for_nested_link(link.column, record, link, url_options)
  elsif nested?
    url_options[nested.param_name] = '--CHILD_ID--'
  end
  url_options_for_sti_link(link.column, record, link, url_options) unless record.nil? || active_scaffold_config.sti_children.nil?
  url_options[:_method] = link.method if !link.confirm? && link.inline? && link.method != :get
  url_options
end

#active_scaffold_configObject

access to the configuration variable



21
22
23
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 21

def active_scaffold_config
  controller.class.active_scaffold_config
end

#active_scaffold_config_for(*args) ⇒ Object



25
26
27
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 25

def active_scaffold_config_for(*args)
  controller.class.active_scaffold_config_for(*args)
end

#active_scaffold_controller_for(*args) ⇒ Object



29
30
31
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 29

def active_scaffold_controller_for(*args)
  controller.class.active_scaffold_controller_for(*args)
end

#active_scaffold_error_messages_for(*params) ⇒ Object



543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 543

def active_scaffold_error_messages_for(*params)
  options = params.extract_options!.symbolize_keys
  options.reverse_merge!(:container_tag => :div, :list_type => :ul)

  objects = Array.wrap(options.delete(:object) || params).map do |object|
    object = instance_variable_get("@#{object}") unless object.respond_to?(:to_model)
    object = convert_to_model(object)

    if object.class.respond_to?(:model_name)
      options[:object_name] ||= object.class.model_name.human.downcase
    end

    object
  end

  objects.compact!
  count = objects.inject(0) {|sum, object| sum + object.errors.count }

  unless count.zero?
    html = {}
    [:id, :class].each do |key|
      if options.include?(key)
        value = options[key]
        html[key] = value unless value.blank?
      else
        html[key] = 'errorExplanation'
      end
    end
    options[:object_name] ||= params.first

    header_message = if options.include?(:header_message)
      options[:header_message]
    else
      as_('errors.template.header', :count => count, :model => options[:object_name].to_s.gsub('_', ' '))
    end

    message = options.include?(:message) ? options[:message] : as_('errors.template.body')

    error_messages = objects.sum do |object|
      object.errors.full_messages.map do |msg|
        options[:list_type] != :br ? (:li, msg) : msg
      end
    end
    error_messages = if options[:list_type] == :br
      error_messages.join('<br/>').html_safe
    else
      (options[:list_type], error_messages.join.html_safe)
    end

    contents = []
    contents << (options[:header_tag] || :h2, header_message) unless header_message.blank?
    contents << (:p, message) unless message.blank?
    contents << error_messages
    contents = contents.join.html_safe
    options[:container_tag] ? (options[:container_tag], contents, html) : contents
  else
    ''
  end
end

#as_main_div_classObject



459
460
461
462
463
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 459

def as_main_div_class
  classes = "active-scaffold active-scaffold-#{controller_id}  #{id_from_controller params[:controller]}-view #{active_scaffold_config.theme}-theme"
  classes << " as_touch" if touch_device?
  classes
end

#clean_class_name(name) ⇒ Object



505
506
507
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 505

def clean_class_name(name)
  name.underscore.gsub('/', '_')
end

#clean_column_name(name) ⇒ Object



501
502
503
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 501

def clean_column_name(name)
  name.to_s.gsub('?', '')
end

#column_attributes(column, record) ⇒ Object



428
429
430
431
432
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 428

def column_attributes(column, record)
  method = override_helper column, 'column_attributes'
  return send(method, record) if method
  {}
end

#column_calculation(column) ⇒ Object



472
473
474
475
476
477
478
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 472

def column_calculation(column)
  unless column.calculate.instance_of? Proc
    calculate_query.calculate(column.calculate, column.name)
  else
    column.calculate.call(@records)
  end
end

#column_class(column, column_value, record) ⇒ Object



434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 434

def column_class(column, column_value, record)
  @_column_classes ||= {}
  @_column_classes[column.name] ||= begin
    classes = "#{column.name}-column "
    classes << 'sorted ' if active_scaffold_config.list.user.sorting.sorts_on?(column)
    classes << 'numeric ' if column.column and [:decimal, :float, :integer].include?(column.column.type)
    classes << column.css_class unless column.css_class.nil? || column.css_class.is_a?(Proc)
  end
  classes = "#{@_column_classes[column.name]} "
  classes << 'empty ' if column_empty? column_value
  classes << 'in_place_editor_field ' if inplace_edit?(record, column) or column.list_ui == :marked
  if column.css_class.is_a?(Proc)
    css_class = column.css_class.call(column_value, record)
    classes << css_class unless css_class.nil?
  end
  classes
end

#column_empty?(column_value) ⇒ Boolean

Returns:

  • (Boolean)


465
466
467
468
469
470
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 465

def column_empty?(column_value)
  empty = column_value.nil?
  empty ||= column_value != false && column_value.blank?
  empty ||= ['&nbsp;', active_scaffold_config.list.empty_field_text].include? column_value if String === column_value
  return empty
end

#column_heading_class(column, sorting) ⇒ Object



452
453
454
455
456
457
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 452

def column_heading_class(column, sorting)
  classes = "#{column.name}-column_heading "
  classes << "sorted #{sorting.direction_of(column).downcase} " if sorting.sorts_on? column
  classes << column.css_class unless column.css_class.nil? || column.css_class.is_a?(Proc)
  classes
end

Returns:

  • (Boolean)


217
218
219
220
221
222
223
224
225
226
227
228
229
230
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 217

def column_link_authorized?(link, column, record, associated)
  if column.association
    associated_for_authorized = if column.plural_association? || (associated.respond_to?(:blank?) && associated.blank?)
      column.association.klass
    else
      associated
    end
    authorized = associated_for_authorized.authorized_for?(:crud_type => link.crud_type)
    authorized = authorized and record.authorized_for?(:crud_type => :update, :column => column.name) if link.crud_type == :create
    authorized
  else 
    action_link_authorized?(link, record)
  end
end

#column_show_add_existing(column) ⇒ Object



491
492
493
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 491

def column_show_add_existing(column)
  (column.allow_add_existing and options_for_association_count(column.association) > 0)
end

#column_show_add_new(column, associated, record) ⇒ Object



495
496
497
498
499
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 495

def column_show_add_new(column, associated, record)
  value = (column.plural_association? && !column.readonly_association?) || (column.singular_association? and not associated.empty?)
  value = false unless column.association.klass.authorized_for?(:crud_type => :create)
  value
end


188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 188

def configure_column_link(link, record, associated, actions = nil)
  actions ||= link.column.actions_for_association_links
  if column_empty?(associated) # if association is empty, we only can link to create form
    if actions.include?(:new)
      link.action = 'new'
      link.crud_type = :create
      link.label ||= as_(:create_new)
    end
  elsif actions.include?(:edit)
    link.action = 'edit'
    link.crud_type = :update
  elsif actions.include?(:show)
    link.action = 'show'
    link.crud_type = :read
  elsif actions.include?(:list)
    link.action = 'index'
    link.crud_type = :read
  end
  
  unless column_link_authorized?(link, link.column, record, associated)
    link.action = nil
    # if action is edit and is not authorized, fallback to show if it's enabled
    if link.crud_type == :update && actions.include?(:show)
      link = configure_column_link(link, record, associated, [:show])
    end
  end
  link
end

#controller_path_for_activerecord(klass) ⇒ Object

Uncategorized



37
38
39
40
41
42
43
44
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 37

def controller_path_for_activerecord(klass)
  begin
    controller = active_scaffold_controller_for(klass)
    controller.controller_path
  rescue ActiveScaffold::ControllerNotFound
    controller = nil
  end
end


140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 140

def display_action_link(link, content, record, options)
  if content
    html_classes = hover_via_click? ? 'hover_click ' : ''
    if options[:level] == 0
      html_classes << 'action_group'
      group_tag = :div
    else
      html_classes << 'top' if options[:first_action]
      group_tag = :li
    end
    content = (group_tag, :class => (html_classes if html_classes.present?), :onclick => ('' if hover_via_click?)) do
      (:div, as_(link.name), :class => link.name.to_s.downcase) << (:ul, content)
    end
  else
    content = render_action_link(link, record, options)
    content = (:li, content, :class => ('top' if options[:first_action])) unless options[:level] == 0
  end
  content = (options[:level_0_tag], content, options[:options_level_0_tag]) if options[:level] == 0 && options[:level_0_tag]
  content
end


112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 112

def display_action_links(action_links, record, options, &block)
  options[:level_0_tag] ||= nil
  options[:options_level_0_tag] ||= nil
  options[:level] ||= 0
  options[:first_action] = true
  output = ActiveSupport::SafeBuffer.new

  action_links.each(:reverse => options.delete(:reverse), :groups => true) do |link|
    if link.is_a? ActiveScaffold::DataStructures::ActionLinks
      unless link.empty?
        options[:level] += 1
        content = display_action_links(link, record, options, &block)
        options[:level] -= 1
        if content.present?
          output << display_action_link(link, content, record, options)
          options[:first_action] = false
        end
      end
    elsif !skip_action_link?(link, *Array(options[:for]))
      authorized = action_link_authorized?(link, *Array(options[:for]))
      next if !authorized && options[:skip_unauthorized]
      output << display_action_link(link, nil, record, options.merge(:authorized => authorized))
      options[:first_action] = false
    end
  end
  output
end

#display_message(message) ⇒ Object



530
531
532
533
534
535
536
537
538
539
540
541
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 530

def display_message(message)
  if (highlights = active_scaffold_config.highlight_messages)
    message = highlights.inject(message) do |msg, (phrases, highlighter)|
      highlight(msg, phrases, highlighter)
    end
  end
  if (format = active_scaffold_config.timestamped_messages)
    format = :short if format == true
    message = "#{ :div, l(Time.current, :format => format), :class => 'timestamp'} #{ :div, message, :class => 'message-content'}".html_safe
  end
  message
end

#form_remote_upload_tag(url_for_options = {}, options = {}) ⇒ Object



75
76
77
78
79
80
81
82
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 75

def form_remote_upload_tag(url_for_options = {}, options = {})
  options[:target] = action_iframe_id(url_for_options)
  options[:multipart] ||= true
  options[:class] = "#{options[:class]} as_remote_upload".strip 
  output=""
  output << form_tag(url_for_options, options)
  (output << "<iframe id='#{action_iframe_id(url_for_options)}' name='#{action_iframe_id(url_for_options)}' style='display:none'></iframe>").html_safe
end

#format_column_calculation(column, calculation) ⇒ Object



487
488
489
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 487

def format_column_calculation(column, calculation)
  "#{"#{as_(column.calculate)}: " unless column.calculate.is_a? Proc}#{format_column_value nil, column, calculation}"
end


361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 361

def get_action_link_id(link, record = nil, column = nil)
  column ||= link.column
  id = record ? record.id.to_s : (nested? ? nested.parent_id : '')
  if column && column.plural_association?
    id = "#{column.association.name}-#{record.id}"
  elsif column && column.singular_association?
    if record.try(column.association.name.to_sym).present?
      id = "#{column.association.name}-#{record.send(column.association.name).id}-#{record.id}"
    else
      id = "#{column.association.name}-#{record.id}" unless record.nil?
    end
  end
  action_id = "#{id_from_controller("#{link.controller}-") if params[:parent_controller] || (link.controller && link.controller != controller.controller_path)}#{link.action}"
  action_link_id(action_id, id)
end

#in_subform?(column, parent_record) ⇒ Boolean

Should this column be displayed in the subform?

Returns:

  • (Boolean)


63
64
65
66
67
68
69
70
71
72
73
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 63

def in_subform?(column, parent_record)
  return true unless column.association

  # Polymorphic associations can't appear because they *might* be the reverse association, and because you generally don't assign an association from the polymorphic side ... I think.
  return false if column.polymorphic_association?

  # A column shouldn't be in the subform if it's the reverse association to the parent
  return false if column.association.inverse_for?(parent_record.class)

  return true
end

Creates a javascript-based link that toggles the visibility of some element on the page. By default, it toggles the visibility of the sibling after the one it’s nested in. You may pass custom javascript logic in options to change that, though. For example, you could say :of => ‘$(“my_div_id”)’. You may also flag whether the other element is visible by default or not, and the initial text will adjust accordingly.



92
93
94
95
96
97
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 92

def link_to_visibility_toggle(id, options = {})
  options[:default_visible] = true if options[:default_visible].nil?
  options[:hide_label] = as_(:hide) 
  options[:show_label] = as_(:show)
  javascript_tag("ActiveScaffold.create_visibility_toggle('#{id}', #{options.to_json});")
end

#list_row_class(record) ⇒ Object



423
424
425
426
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 423

def list_row_class(record)
  class_override_helper = list_row_class_method(record)
  class_override_helper ? send(class_override_helper, record) : ''
end

#list_row_class_method(record) ⇒ Object



417
418
419
420
421
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 417

def list_row_class_method(record)
  return @_list_row_class_method if defined? @_list_row_class_method
  class_override_helper = :"#{clean_class_name(record.class.name)}_list_row_class"
  @_list_row_class_method = (class_override_helper if respond_to?(class_override_helper))
end

#loading_indicator_tag(options) ⇒ Object

a general-use loading indicator (the “stuff is happening, please wait” feedback)



85
86
87
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 85

def loading_indicator_tag(options)
  image_tag "active_scaffold/indicator.gif", :style => "visibility:hidden;", :id => loading_indicator_id(options), :alt => "loading indicator", :class => "loading-indicator"
end

#option_tags_for(select_options, options = {}) ⇒ Object

Turns [[label, value]] into <option> tags Takes optional parameter of :include_blank



54
55
56
57
58
59
60
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 54

def option_tags_for(select_options, options = {})
  select_options.insert(0,[as_(:_select_),nil]) if options[:include_blank]
  select_options.collect do |option|
    label, value = option[0], option[1]
    value.nil? ? "<option value="">#{label}</option>" : "<option value=\"#{value}\">#{label}</option>"
  end
end

#override_helper(column, suffix) ⇒ Object



514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 514

def override_helper(column, suffix)
  @_override_helpers ||= {}
  @_override_helpers[suffix] ||= {}
  @_override_helpers[suffix][@record.class.name] ||= {}
  return @_override_helpers[suffix][@record.class.name][column.name] if @_override_helpers[suffix][@record.class.name].include? column.name
  @_override_helpers[suffix][@record.class.name][column.name] = begin
    method_with_class = override_helper_name(column, suffix, true)
    if respond_to?(method_with_class)
      method_with_class
    else
      method = override_helper_name(column, suffix)
      method if respond_to?(method)
    end
  end
end

#override_helper_name(column, suffix, class_prefix = false) ⇒ Object

the naming convention for overriding with helpers



510
511
512
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 510

def override_helper_name(column, suffix, class_prefix = false)
  "#{clean_class_name(column.active_record_class.name) + '_' if class_prefix}#{clean_column_name(column.name)}_#{suffix}"
end


268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 268

def query_string_for_action_links(link)
  if defined?(@query_string) && link.parameters.none? { |k, v| @query_string_params.include? k }
    return [@query_string, @non_nested_query_string]
  end
  keep = true
  @query_string_params ||= Set.new
  query_string_for_all = nil
  query_string_options = []
  non_nested_query_string_options = []
  
  params_for.except(:controller, :action, :id).each do |key, value|
    @query_string_params << key
    if link.parameters.include? key
      keep = false
      next
    end
    qs = "#{key}=#{value}"
    if NESTED_PARAMS.include?(key) || conditions_from_params.include?(key) || (nested? && nested.param_name == key)
      non_nested_query_string_options << qs
    else
      query_string_options << qs
    end
  end
  
  query_string = URI.escape(query_string_options.join('&')) if query_string_options.present?
  if non_nested_query_string_options.present?
    non_nested_query_string = "#{'&' if query_string}#{URI.escape(non_nested_query_string_options.join('&'))}"
  end
  if keep
    @query_string = query_string
    @non_nested_query_string = non_nested_query_string
  end
  [query_string, non_nested_query_string]
end


161
162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 161

def render_action_link(link, record = nil, options = {})
  if link.action.nil? || link.column.try(:polymorphic_association?)
    link = action_link_to_inline_form(link, record)
    options[:authorized] = false if link.action.nil? || link.controller.nil?
    options.delete :link if link.crud_type == :create
  end
  if link.action.nil? || (link.type == :member && options.has_key?(:authorized) && !options[:authorized])
    action_link_html(link, nil, {:link => action_link_text(link, options), :class => "disabled #{link.action}#{" #{link.html_options[:class]}" unless link.html_options[:class].blank?}"}, record)
  else
    url = action_link_url(link, record)
    html_options = action_link_html_options(link, record, options)
    action_link_html(link, url, html_options, record)
  end
end

#render_column_calculation(column) ⇒ Object



480
481
482
483
484
485
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 480

def render_column_calculation(column)
  calculation = column_calculation(column)
  override_formatter = "render_#{column.name}_#{column.calculate.is_a?(Proc) ? :calculate : column.calculate}"
  calculation = send(override_formatter, calculation) if respond_to? override_formatter
  format_column_calculation(column, calculation)
end

#skip_action_link?(link, *args) ⇒ Boolean

Returns:

  • (Boolean)


99
100
101
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 99

def skip_action_link?(link, *args)
  !link.ignore_method.nil? && controller.respond_to?(link.ignore_method, true) && controller.send(link.ignore_method, *args)
end

#template_exists?(template_name, partial = false) ⇒ Boolean

This is the template finder logic, keep it updated with however we find stuff in rails currently this very similar to the logic in ActionBase::Base.render for options file

Returns:

  • (Boolean)


48
49
50
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 48

def template_exists?(template_name, partial = false)
  lookup_context.exists? template_name, '', partial
end


387
388
389
390
391
392
393
394
395
396
397
398
399
400
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 387

def url_options_for_nested_link(column, record, link, url_options)
  if column && column.association
    url_options[:parent_scaffold] = controller_path
    url_options[column.association.active_record.name.foreign_key.to_sym] = url_options.delete(:id)
    if column.singular_association? && url_options[:action].to_sym != :index
      url_options[:id] = '--CHILD_ID--'
    else
      url_options[:id] = nil
    end
  elsif link.parameters && link.parameters[:named_scope]
    url_options[:parent_scaffold] = controller_path
    url_options[active_scaffold_config.model.name.foreign_key.to_sym] = url_options.delete(:id)
  end
end


402
403
404
405
406
407
408
409
410
411
412
413
414
415
# File 'lib/active_scaffold/helpers/view_helpers.rb', line 402

def url_options_for_sti_link(column, record, link, url_options)
  #need to find out controller of current record type
  #and set parameters
  # its quite difficult to detect an sti link
  # if link.column.nil? we are sure that it is nt an singular association inline autolink
  # howver that will not work if a sti parent is an singular association inline autolink
  if link.column.nil?
    sti_controller_path = controller_path_for_activerecord(record.class)
    if sti_controller_path
      url_options[:controller] = sti_controller_path
      url_options[:parent_sti] = controller_path
    end
  end
end