module ActiveScaffold::Helpers::ViewHelpers

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

Public Instance Methods

active_scaffold_config() click to toggle source

access to the configuration variable

# File lib/active_scaffold/helpers/view_helpers.rb, line 20
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 24
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 28
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 337
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 265
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.join(' ')
end
clean_class_name(name) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 308
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 304
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 234
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 278
def column_calculation(column)
  unless column.calculate.instance_of? Proc
    calculate(column)
  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 240
def column_class(column, column_value, record)
  classes = []
  classes << "#{column.name}-column"
  if column.css_class.is_a?(Proc)
    css_class = column.css_class.call(column_value, record)
    classes << css_class unless css_class.nil?
  else
    classes << column.css_class
  end unless column.css_class.nil?
   
  classes << 'empty' if column_empty? column_value
  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 << 'in_place_editor_field' if inplace_edit?(record, column) or column.list_ui == :marked
  classes.join(' ').rstrip
end
column_empty?(column_value) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 271
def column_empty?(column_value)
  empty = column_value.nil?
  empty ||= column_value.blank? if column_value.respond_to? :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 257
def column_heading_class(column, sorting)
  classes = []
  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.join(' ')
end
column_show_add_existing(column) click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 294
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 298
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 36
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 324
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 78
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
generate_temporary_id() click to toggle source
# File lib/active_scaffold/helpers/view_helpers.rb, line 51
def generate_temporary_id
  (Time.now.to_f*1000).to_i.to_s
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 66
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 229
def list_row_class(record)
  class_override_helper = :"#{clean_class_name(record.class.name)}_list_row_class"
  respond_to?(class_override_helper) ? send(class_override_helper, record) : ''
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 88
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 57
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 317
def override_helper(column, suffix)
  method_with_class = override_helper_name(column, suffix, true)
  return method_with_class if respond_to?(method_with_class)
  method = override_helper_name(column, suffix)
  method if respond_to?(method)
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 313
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 286
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

  "#{"#{as_(column.calculate)}: " unless column.calculate.is_a? Proc}#{format_column_value nil, 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 47
def template_exists?(template_name, partial = false)
  lookup_context.exists? template_name, '', partial
end