lib/tabulatr/renderer/column.rb in tabulatr2-0.9.4 vs lib/tabulatr/renderer/column.rb in tabulatr2-0.9.6
- old
+ new
@@ -24,11 +24,12 @@
class Tabulatr::Renderer::Column
include ActiveModel::Model
attr_accessor *%i{name header width align valign wrap type th_html filter_html
filter filter_width range_filter_symbol
- sortable table_name block klass format map classes cell_style header_style}
+ sortable table_name block klass format map classes cell_style header_style
+ sort_sql filter_sql output}
def self.from(
name: nil,
table_name: nil,
header: nil,
@@ -44,10 +45,13 @@
format: nil,
map: true,
klass: nil,
cell_style: {},
header_style: {},
+ sort_sql: nil,
+ filter_sql: nil,
+ output: nil,
&block)
b = block_given? ? block : nil
self.new(
name: name,
table_name: table_name,
@@ -64,14 +68,45 @@
format: format,
map: map,
klass: klass,
block: b,
cell_style: cell_style,
- header_style: header_style
+ header_style: header_style,
+ sort_sql: sort_sql,
+ filter_sql: filter_sql,
+ output: output
).apply_styles!
end
+ def update_options(hash = {}, &block)
+ self.header = hash[:header] || self.header
+ self.classes = hash[:classes] || self.classes
+ self.width = hash[:width] || self.width
+ self.align = hash[:align] || self.align
+ self.valign = hash[:valign] || self.valign
+ self.wrap = hash[:wrap] || self.wrap
+ self.th_html = hash[:th_html] || self.th_html
+ self.filter_html = hash[:filter_html] || self.filter_html
+ self.filter = hash[:filter] || self.filter
+ self.sortable = hash[:sortable] || self.sortable
+ self.format = hash[:format] || self.format
+ self.map = hash[:map] || self.map
+ self.th_html = hash[:th_html] || self.th_html
+ self.output = block if block_given?
+ self.filter_sql = hash[:filter_sql] || self.filter_sql
+ self.sort_sql = hash[:sort_sql] || self.sort_sql
+ if self.cell_style == ''
+ self.cell_style = {}
+ end
+ self.cell_style = hash[:cell_style] || self.cell_style
+ if self.header_style == ''
+ self.header_style = {}
+ end
+ self.header_style = hash[:header_style] || self.header_style
+ self.apply_styles!
+ end
+
def klassname() @_klassname ||= @klass.name.underscore end
def human_name() header || klass.human_attribute_name(name) end
def sort_param() "#{klassname}_sort" end
def full_name() [table_name, name].compact.join(":") end
def coltype() 'column' end
@@ -81,15 +116,23 @@
def checkbox?() false end
def action?() false end
def apply_styles!
# raise cell_style.inspect
- self.cell_style = style_options.merge(self.cell_style).map{|e| e.join(':')}.join(';')
- self.header_style = style_options.merge(self.header_style).map{|e| e.join(':')}.join(';')
+ self.cell_style = style_options.merge(self.cell_style)
+ self.header_style = style_options.merge(self.header_style)
self
end
+ def html_cell_style
+ cell_style.map{|e| e.join(':')}.join(';')
+ end
+
+ def html_header_style
+ header_style.map{|e| e.join(':')}.join(';')
+ end
+
def style_options
default_style_attributes = {
:'text-align' => align,
width: width,
:'vertical-align' => valign,
@@ -104,10 +147,9 @@
r = view.instance_exec(record, &block)
r = r.join(' ').html_safe if r.is_a?(Array)
return r
end
val = principal_value(record) or return ''
-
if format.present? && val.respond_to?(:to_ary)
val.map do |v|
case format
when Symbol then view.send(format, v)
when String then format % v