module AbAdmin
module Views
module AdminHelpers
def admin_form_for(object, *args, &block)
options = args.extract_options!
options[:remote] = true if request.xhr?
options[:html] ||= {}
options[:html][:class] ||= 'form-horizontal'
options[:builder] ||= ::AbAdmin::Views::FormBuilder
options[:html]['data-id'] = Array(object).last.id
if controller_name == 'manager' && resource_class == Array(object).last.class
options[:url] ||= object.new_record? ? collection_path : resource_path
end
if options.delete(:nested)
simple_nested_form_for([:admin, object].flatten, *(args << options), &block)
else
simple_form_for([:admin, object].flatten, *(args << options), &block)
end
end
def admin_editable(item, attr, options=nil)
options = {} unless options.is_a?(Hash)
options[:type] ||= case attr.to_s
when /_at$/
'date'
when /^is_/
'select'
when /description|body|content/
'textarea'
else
'text'
end
options[:source] ||= {'true' => 'yes', 'false' => 'no'} if options[:type] == 'select'
data = {
type: options[:type], source: options[:source].try(:to_json),
model: resource_class.model_name.singular, url: resource_path(item),
name: attr, value: options[:value] || item[attr]
}
link_to admin_pretty_data(item[attr].to_s).html_safe, '#', class: 'editable', data: data
end
def options_for_ckeditor(options = {})
{width: 930, height: 200, toolbar: 'VeryEasy', namespace: ''}.update(options)
end
def admin_tree_item(item)
render 'tree_item', item: item, child_tree: admin_tree(item.cached_children)
end
def admin_tree(items)
return if items.blank?
items.map { |item| admin_tree_item(item) }.join.html_safe
end
def layout_css
css = []
css << 'content_with_sidebar' if settings[:sidebar] || content_for?(:sidebar)
css << 'well' if settings[:well]
css << "#{settings[:index_view]}_view"
css
end
def admin_comments
render 'admin/admin_comments/comments'
end
def color_bool(val, success_class='badge-success')
%(#{val ? '+' : '-'}).html_safe
end
def icon(name, white=false)
" ".html_safe
end
def admin_pretty_data(object)
case object
when String, Integer, BigDecimal, Float
object
when TrueClass, FalseClass
color_bool(object)
when Date, DateTime, Time, ActiveSupport::TimeWithZone
I18n.l(object, format: :long)
when NilClass
''
when ActiveRecord::Base
admin_show_link(object)
else
AbAdmin.safe_display_name(object) || object
end
end
def pretty_data(object)
AbAdmin.pretty_data(object)
end
def item_image_link(item, options={})
options.reverse_merge!(url: resource_path(item), assoc: :picture)
image = item.send(options[:assoc])
return nil unless image
version = options[:version] || image.class.thumb_size
popover_data = {content: "", title: item.name}
link_to image_tag(image.url(version)), options[:url], data: popover_data, rel: 'popover'
end
def item_image(item, assoc=:photo, size=:thumb)
image_tag_if(item.send(assoc).try(:url, size))
end
# input_set 'title', legend_class: 'do_sort', label_class: 'label-info' do
def input_set(title, options={}, &block)
options.reverse_merge!(class: "inputs well well-small #{options.delete(:legend_class) || 'do_sort'}", id: options.delete(:legend_id))
html = content_tag(:label, title, class: "input_set label #{options.delete(:label_class)}")
html.concat(capture(&block)) if block_given?
content_tag(:fieldset, html, options)
end
def ha(attr)
resource_class.han(attr)
end
def call_method_or_proc_on(obj, symbol_or_proc, options = {})
exec = options[:exec].nil? ? true : options[:exec]
case symbol_or_proc
when Symbol, String
obj.send(symbol_or_proc.to_sym)
when Proc
if exec
instance_exec(obj, &symbol_or_proc)
else
symbol_or_proc.call(obj)
end
end
end
end
end
end