module ActiveScaffold::Helpers::ViewHelpers
All extra helpers that should be included in the View. Also a dumping ground for uncategorized helpers.
Public Instance Methods
# File lib/active_scaffold/helpers/view_helpers.rb, line 211 def action_link_html(link, url, html_options, record) # issue 260, use url_options[:link] if it exists. This prevents DB data from being localized. label = url.delete(:link) if url.is_a?(Hash) label ||= link.label begin if link.image.nil? #http://www.continuousthinking.com/2011/09/22/rails-3-1-engine-namespaces-can-creep-into-urls-in-application-layout.html #its not possible to link from a namespacedcontroller back to a non namespaced-controller anymore # seems to be only working with named_routes... html = link_to(label, url, html_options) else html = link_to(image_tag(link.image[:name] , :size => link.image[:size], :alt => label), url, html_options) end # if url is nil we would like to generate an anchor without href attribute url.nil? ? html.sub(/href=".*?"/, '').html_safe : html.html_safe rescue ActionController::RoutingError => e Rails.logger.error("ActiveScaffold link_to routing Error: #{e.inspect}") "Routing Error" end end
# File lib/active_scaffold/helpers/view_helpers.rb, line 173 def action_link_html_options(link, url_options, record, html_options) html_options.reverse_merge! link.html_options.merge(:class => link.action) # 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-confirm'] = link.confirm(record.try(:to_label)) if link.confirm? html_options['data-controller'] = link.controller.to_s if link.controller if link.inline? html_options['data-position'] = link.position if link.position html_options[:class] += ' as_action' html_options['data-action'] = link.action html_options['data-keep_open'] = true if link.keep_open? end if link.popup? html_options['data-popup'] = true html_options[:target] = '_blank' end html_options[:remote] = true unless link.page? || link.popup? html_options[:class] += " #{link.html_options[:class]}" unless link.html_options[:class].blank? html_options end
# File lib/active_scaffold/helpers/view_helpers.rb, line 158 def action_link_url_options(link, url_options, record, options = {}) url_options = url_options.clone url_options[:action] = link.action url_options[:controller] = link.controller.to_s if link.controller url_options.delete(:search) if link.controller and link.controller.to_s != params[:controller] url_options.merge! link.parameters if link.parameters @link_record = record url_options.merge! self.instance_eval(&(link.dynamic_parameters)) if link.dynamic_parameters.is_a?(Proc) @link_record = nil url_options_for_nested_link(link.column, record, link, url_options, options) if link.nested_link? url_options_for_sti_link(link.column, record, link, url_options, 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
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
# File lib/active_scaffold/helpers/view_helpers.rb, line 24 def active_scaffold_config_for(*args) controller.class.active_scaffold_config_for(*args) end
# File lib/active_scaffold/helpers/view_helpers.rb, line 28 def active_scaffold_controller_for(*args) controller.class.active_scaffold_controller_for(*args) end
# File lib/active_scaffold/helpers/view_helpers.rb, line 341 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
Provides stylesheets for IE to include with stylesheet_link_tag
# File lib/active_scaffold/helpers/view_helpers.rb, line 102 def active_scaffold_ie_stylesheets(frontend = :default) [ActiveScaffold::Config::Core.asset_path("stylesheet-ie.css", frontend)] end
easy way to include ActiveScaffold assets
# File lib/active_scaffold/helpers/view_helpers.rb, line 107 def active_scaffold_includes(*args) frontend = args.first.is_a?(Symbol) ? args.shift : :default options = args.first.is_a?(Hash) ? args.shift : {} js = javascript_include_tag(*active_scaffold_javascripts(frontend).push(options)) css = stylesheet_link_tag(*active_scaffold_stylesheets(frontend).push(options)) options[:cache] += '_ie' if options[:cache].is_a? String options[:concat] += '_ie' if options[:concat].is_a? String ie_css = stylesheet_link_tag(*active_scaffold_ie_stylesheets(frontend).push(options)) js + "\n" + css + "\n<!--[if IE]>".html_safe + ie_css + "<![endif]-->\n".html_safe end
Provides list of javascripts to include with javascript_include_tag
You can use this with your javascripts like
<%= javascript_include_tag :defaults, 'your_own_cool_script', active_scaffold_javascripts, :cache => true %>
# File lib/active_scaffold/helpers/view_helpers.rb, line 90 def active_scaffold_javascripts(frontend = :default) ActiveScaffold::Config::Core.javascripts(frontend).collect do |name| ActiveScaffold::Config::Core.asset_path(name, frontend) end end
Provides stylesheets to include with stylesheet_link_tag
# File lib/active_scaffold/helpers/view_helpers.rb, line 97 def active_scaffold_stylesheets(frontend = :default) [ActiveScaffold::Config::Core.asset_path("stylesheet.css", frontend)] end
# File lib/active_scaffold/helpers/view_helpers.rb, line 285 def as_main_div_class classes = ["active-scaffold", "active-scaffold-#{controller_id}", "#{params[:controller]}-view", "#{active_scaffold_config.theme}-theme"] classes << "as_touch" if touch_device? classes.join(' ') end
# File lib/active_scaffold/helpers/view_helpers.rb, line 337 def clean_class_name(name) name.underscore.gsub('/', '_') end
# File lib/active_scaffold/helpers/view_helpers.rb, line 333 def clean_column_name(name) name.to_s.gsub('?', '') end
# File lib/active_scaffold/helpers/view_helpers.rb, line 299 def column_calculation(column) unless column.calculate.instance_of? Proc conditions = controller.send(:all_conditions) includes = active_scaffold_config.list.count_includes includes ||= controller.send(:active_scaffold_includes) unless conditions.nil? calculation_scope = beginning_of_chain append_to_query(calculation_scope, { :where => conditions, :joins => controller.send(:joins_for_collection), :includes => includes}) calculation_scope.calculate(column.calculate, column.name) else column.calculate.call(@records) end end
# File lib/active_scaffold/helpers/view_helpers.rb, line 260 def column_class(column, column_value, record) @numeric_classes ||= [:decimal, :float, :integer] 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 && @numeric_classes.include?(column.column.type) classes.join(' ').rstrip end
# File lib/active_scaffold/helpers/view_helpers.rb, line 291 def column_empty?(column_value) @empty_column_strings ||= [' ', active_scaffold_config.list.empty_field_text] empty = column_value.nil? empty ||= column_value.empty? if column_value.respond_to? :empty? empty ||= @empty_column_strings.include?(column_value) if String === column_value return empty end
# File lib/active_scaffold/helpers/view_helpers.rb, line 277 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
# File lib/active_scaffold/helpers/view_helpers.rb, line 323 def column_show_add_existing(column) (column.allow_add_existing and options_for_association_count(column.association) > 0) end
# File lib/active_scaffold/helpers/view_helpers.rb, line 327 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 record.class.authorized_for?(:crud_type => :create) value end
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
# 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
# File lib/active_scaffold/helpers/view_helpers.rb, line 51 def generate_temporary_id (Time.now.to_f*1000).to_i.to_s end
# File lib/active_scaffold/helpers/view_helpers.rb, line 198 def get_action_link_id(url_options, record = nil, column = nil) id = url_options[:id] || url_options[:parent_id] id = "#{column.association.name}-#{record.id}" if column && column.plural_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 if column && column.singular_association? id = "#{id}-#{url_options[:batch_scope].downcase}" if url_options[:batch_scope] action_id = "#{id_from_controller(url_options[:controller]) + '-' if url_options[:parent_controller]}#{url_options[:action].to_s}" action_link_id(action_id, id) end
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.reverse_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.
# File lib/active_scaffold/helpers/view_helpers.rb, line 128 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
a general-use loading indicator (the “stuff is happening, please wait” feedback)
# File lib/active_scaffold/helpers/view_helpers.rb, line 121 def loading_indicator_tag(options) image_tag "indicator.gif", :style => "visibility:hidden;", :id => loading_indicator_id(options), :alt => "loading indicator", :class => "loading-indicator" end
# File lib/active_scaffold/helpers/view_helpers.rb, line 139 def render_action_link(link, url_options, record = nil, html_options = {}) url_options = action_link_url_options(link, url_options, record) html_options = action_link_html_options(link, url_options, record, html_options) action_link_html(link, url_options, html_options, record) end
# File lib/active_scaffold/helpers/view_helpers.rb, line 315 def render_column_calculation(column) calculation = column_calculation(column) override_formatter = "render_#{column.name}_#{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
# File lib/active_scaffold/helpers/view_helpers.rb, line 145 def render_group_action_link(link, url_options, options, record = nil) if link.type == :member && !options[:authorized] action_link_html(link, nil, {:class => "disabled #{link.action}#{link.html_options[:class].blank? ? '' : (' ' + link.html_options[:class])}"}, record) else begin render_action_link(link, url_options, record) rescue Rails.logger.error("render_action_link: exception occured: #{$!} link: #{link.inspect}, url_options: #{url_options.inspect}, options: #{options.inspect}, record: #{record.inspect}") action_link_html(link, nil, {:class => "disabled #{link.action}#{link.html_options[:class].blank? ? '' : (' ' + link.html_options[:class])}"}, record) end end end
# File lib/active_scaffold/helpers/view_helpers.rb, line 135 def skip_action_link(link, *args) (!link.ignore_method.nil? && controller.respond_to?(link.ignore_method, true) && controller.send(link.ignore_method, *args)) || ((link.security_method_set? or controller.respond_to?(link.security_method, true)) and !controller.send(link.security_method, *args)) end
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
# File lib/active_scaffold/helpers/view_helpers.rb, line 232 def url_options_for_nested_link(column, record, link, url_options, options = {}) if column && column.association url_options[:assoc_id] = url_options.delete(:id) url_options[:id] = record.send(column.association.name).id if column.singular_association? && record.send(column.association.name).present? link.eid = "#{controller_id.from(3)}_#{record.id}_#{column.association.name}" unless options.has_key?(:reuse_eid) url_options[:eid] = link.eid elsif link.parameters && link.parameters[:named_scope] url_options[:assoc_id] = url_options.delete(:id) link.eid = "#{controller_id.from(3)}_#{record.id}_#{link.parameters[:named_scope]}" unless options.has_key?(:reuse_eid) url_options[:eid] = link.eid end end
# File lib/active_scaffold/helpers/view_helpers.rb, line 245 def url_options_for_sti_link(column, record, link, url_options, 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