module ActiveScaffold::Helpers::ViewHelpers

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

Constants

NESTED_PARAMS

Public Instance Methods

active_scaffold_config() click to toggle source

access to the configuration variable

# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 541
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 ? content_tag(:li, msg) : msg
      end
    end
    error_messages = if options[:list_type] == :br
      error_messages.join('<br/>').html_safe
    else
      content_tag(options[:list_type], error_messages.join.html_safe)
    end

    contents = []
    contents << content_tag(options[:header_tag] || :h2, header_message) unless header_message.blank?
    contents << content_tag(:p, message) unless message.blank?
    contents << error_messages
    contents = contents.join.html_safe
    options[:container_tag] ? content_tag(options[:container_tag], contents, html) : contents
  else
    ''
  end
end
as_main_div_class() click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 457
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) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 503
def clean_class_name(name)
  name.underscore.gsub('/', '_')
end
clean_column_name(name) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 499
def clean_column_name(name)
  name.to_s.gsub('?', '')
end
column_attributes(column, record) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 426
def column_attributes(column, record)
  method = override_helper column, 'column_attributes'
  return send(method, record) if method
  {}
end
column_calculation(column) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 470
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) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 432
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) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 463
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) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 450
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
column_show_add_existing(column) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 489
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) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 493
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
controller_path_for_activerecord(klass) click to toggle source

Uncategorized

# 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
display_message(message) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 528
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 = "#{content_tag :div, l(Time.current, :format => format), :class => 'timestamp'} #{content_tag :div, message, :class => 'message-content'}".html_safe
  end
  message
end
form_remote_upload_tag(url_for_options = {}, options = {}) click to toggle source
# 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) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 485
def format_column_calculation(column, calculation)
  "#{"#{as_(column.calculate)}: " unless column.calculate.is_a? Proc}#{format_column_value nil, column, calculation}"
end
in_subform?(column, parent_record) click to toggle source

Should this column be displayed in the subform?

# 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
list_row_class(record) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 421
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) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 415
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) click to toggle source

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

# 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 = {}) click to toggle source

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

# 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) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 512
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) click to toggle source

the naming convention for overriding with helpers

# File lib/active_scaffold/helpers/view_helpers.rb, line 508
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
render_column_calculation(column) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 478
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
template_exists?(template_name, partial = false) click to toggle source

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

# File lib/active_scaffold/helpers/view_helpers.rb, line 48
def template_exists?(template_name, partial = false)
  lookup_context.exists? template_name, '', partial
end